From 9aa8b9801f24809ae4401d2ce7ad8ba74db60f4d Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Mon, 28 Apr 2025 13:45:54 +0300 Subject: [PATCH 1/6] feat(commerce): Add retry if 500 errors for confirmation checkout request --- .../src/core/resources/CommerceCheckout.ts | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/packages/clerk-js/src/core/resources/CommerceCheckout.ts b/packages/clerk-js/src/core/resources/CommerceCheckout.ts index 24793d4f3c1..ba1e95a7e1e 100644 --- a/packages/clerk-js/src/core/resources/CommerceCheckout.ts +++ b/packages/clerk-js/src/core/resources/CommerceCheckout.ts @@ -13,6 +13,7 @@ import { __experimental_CommerceSubscription, BaseResource, } from './internal'; +import { retry } from '@clerk/shared/retry'; export class __experimental_CommerceCheckout extends BaseResource implements __experimental_CommerceCheckoutResource { id!: string; @@ -55,11 +56,29 @@ export class __experimental_CommerceCheckout extends BaseResource implements __e confirm = (params: __experimental_ConfirmCheckoutParams): Promise => { const { orgId, ...rest } = params; - return this._basePatch({ - path: orgId - ? `/organizations/${orgId}/commerce/checkouts/${this.id}/confirm` - : `/me/commerce/checkouts/${this.id}/confirm`, - body: rest as any, - }); + + // Retry confirmation in case of a 500 error + // This will retry up to 6 times with an increasing delay + // It retries at 2s, 5s, ~9s, ~14s, ~19s, and ~24s after the initial attempt. + return retry( + () => + this._basePatch({ + path: orgId + ? `/organizations/${orgId}/commerce/checkouts/${this.id}/confirm` + : `/me/commerce/checkouts/${this.id}/confirm`, + body: rest as any, + }), + { + factor: 1.55, + maxDelayBetweenRetries: 5 * 1_000, + initialDelay: 2 * 1_000, + jitter: false, + shouldRetry(error: any, iterations: number) { + console.error('Retrying checkout confirmation', error); + const status = error?.status; + return !!status && status >= 500 && iterations <= 6; + }, + }, + ); }; } From 291ea8d3a4038ee9e65c07d6012f449c4293e24a Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Mon, 28 Apr 2025 13:49:10 +0300 Subject: [PATCH 2/6] chore(repo): Add changeset --- .changeset/soft-schools-bake.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/soft-schools-bake.md diff --git a/.changeset/soft-schools-bake.md b/.changeset/soft-schools-bake.md new file mode 100644 index 00000000000..9556a85b99d --- /dev/null +++ b/.changeset/soft-schools-bake.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Retry confrim checkout requests if any erros with >=500 status code occur From 4fca4e749edd72320d912da5f1d53afc6d0f2e5f Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Mon, 28 Apr 2025 13:54:06 +0300 Subject: [PATCH 3/6] chore(commerce): Drop console.log --- packages/clerk-js/sandbox/template.html | 2 +- packages/clerk-js/src/core/resources/CommerceCheckout.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/clerk-js/sandbox/template.html b/packages/clerk-js/sandbox/template.html index cd4207e24c4..5beb2014fc0 100644 --- a/packages/clerk-js/sandbox/template.html +++ b/packages/clerk-js/sandbox/template.html @@ -437,7 +437,7 @@