Skip to content

Commit a2f147e

Browse files
Update app.py
1 parent 3cb6828 commit a2f147e

1 file changed

Lines changed: 34 additions & 5 deletions

File tree

app.py

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
from flask import Flask, g, jsonify, request, has_request_context
2929
from flask_cors import CORS
3030

31-
APP_VERSION = "1.9.0-tenancy-foundation"
31+
APP_VERSION = "1.9.1-webhook-ack-inline"
3232
TRANSFER_TOPIC = "0xddf252ad00000000000000000000000000000000000000000000000000000000"
3333
ZERO_EVM = "0x0000000000000000000000000000000000000000"
3434
BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
@@ -2067,7 +2067,7 @@ def build_webhook_payload(record: Dict[str, Any], delivery: Dict[str, Any]) -> D
20672067
def update_webhook_delivery_result(delivery_id: str, *, delivery_status: str, ack_status: Optional[str] = None,
20682068
next_attempt_at: str = "", last_response_code: Optional[int] = None,
20692069
last_response_excerpt: str = "", last_error: str = "", delivered_at: str = "",
2070-
increment_attempt: bool = False) -> None:
2070+
acknowledged_at: str = "", increment_attempt: bool = False) -> None:
20712071
conn = get_db()
20722072
try:
20732073
row = db_fetchone(conn, "SELECT attempt_count FROM webhook_deliveries WHERE delivery_id = ? LIMIT 1", (delivery_id,))
@@ -2084,6 +2084,7 @@ def update_webhook_delivery_result(delivery_id: str, *, delivery_status: str, ac
20842084
next_attempt_at = ?,
20852085
last_attempt_at = ?,
20862086
delivered_at = COALESCE(?, delivered_at),
2087+
acknowledged_at = COALESCE(?, acknowledged_at),
20872088
last_response_code = ?,
20882089
last_response_excerpt = ?,
20892090
last_error = ?
@@ -2097,6 +2098,7 @@ def update_webhook_delivery_result(delivery_id: str, *, delivery_status: str, ac
20972098
next_attempt_at,
20982099
utc_now_iso(),
20992100
delivered_at or None,
2101+
acknowledged_at or None,
21002102
last_response_code,
21012103
normalize_text(last_response_excerpt, 500),
21022104
normalize_text(last_error, 500),
@@ -2180,6 +2182,30 @@ def compute_retry_schedule(attempt_count: int) -> Tuple[bool, str]:
21802182
return False, ""
21812183

21822184

2185+
def should_mark_webhook_acknowledged(response: Any) -> bool:
2186+
try:
2187+
status_code = int(getattr(response, "status_code", 0) or 0)
2188+
except Exception:
2189+
status_code = 0
2190+
if status_code < 200 or status_code >= 300:
2191+
return False
2192+
text = str(getattr(response, "text", "") or "").strip()
2193+
if not text:
2194+
return True
2195+
try:
2196+
payload = response.json()
2197+
except Exception:
2198+
lowered = text.lower()
2199+
return lowered in {"ok", "accepted", "ack", "acknowledged", "received"}
2200+
if isinstance(payload, dict):
2201+
if payload.get("acknowledged") is True or payload.get("ack") is True or payload.get("ok") is True:
2202+
return True
2203+
status_value = str(payload.get("status") or "").strip().lower()
2204+
if status_value in {"ok", "accepted", "acknowledged", "received"}:
2205+
return True
2206+
return False
2207+
2208+
21832209
def attempt_webhook_delivery(delivery: Dict[str, Any]) -> None:
21842210
delivery_id = str(delivery.get("delivery_id") or "")
21852211
record_id = str(delivery.get("record_id") or "")
@@ -2206,17 +2232,20 @@ def attempt_webhook_delivery(delivery: Dict[str, Any]) -> None:
22062232
)
22072233
excerpt = normalize_text(response.text, 500)
22082234
if 200 <= int(response.status_code) < 300:
2235+
delivered_at = utc_now_iso()
2236+
acknowledged_at = delivered_at if should_mark_webhook_acknowledged(response) else ""
22092237
update_webhook_delivery_result(
22102238
delivery_id,
22112239
delivery_status="delivered",
2212-
ack_status="http_accepted",
2240+
ack_status="acknowledged" if acknowledged_at else "http_accepted",
22132241
last_response_code=int(response.status_code),
22142242
last_response_excerpt=excerpt,
22152243
last_error="",
2216-
delivered_at=utc_now_iso(),
2244+
delivered_at=delivered_at,
2245+
acknowledged_at=acknowledged_at,
22172246
increment_attempt=True,
22182247
)
2219-
emit_structured_log("webhook_delivery_succeeded", event_name=delivery.get("event_name"), delivery_id=delivery_id, record_id=record_id, status_code=int(response.status_code))
2248+
emit_structured_log("webhook_delivery_succeeded", event_name=delivery.get("event_name"), delivery_id=delivery_id, record_id=record_id, status_code=int(response.status_code), acknowledged=bool(acknowledged_at))
22202249
return
22212250
should_retry, next_attempt_at = compute_retry_schedule(int(delivery.get("attempt_count") or 0) + 1)
22222251
update_webhook_delivery_result(

0 commit comments

Comments
 (0)