diff --git a/apps/sim/lib/core/idempotency/service.test.ts b/apps/sim/lib/core/idempotency/service.test.ts index 425ff0f928c..704272415b6 100644 --- a/apps/sim/lib/core/idempotency/service.test.ts +++ b/apps/sim/lib/core/idempotency/service.test.ts @@ -154,6 +154,8 @@ describe('IdempotencyService in-progress deadlines', () => { const conflictOptions = dbChainMockFns.onConflictDoUpdate.mock.calls[0]?.[0] const setWhere = JSON.stringify(conflictOptions?.setWhere) + expect(setWhere).toContain('json_typeof') + expect(setWhere).not.toContain('jsonb_typeof') expect(setWhere).toContain('IS DISTINCT FROM') expect(setWhere).toContain('in-progress') }) @@ -229,7 +231,8 @@ describe('IdempotencyService in-progress deadlines', () => { service.executeWithIdempotency('provider', 'delivery-retry-db', vi.fn()) ).resolves.toBe('new-owner-result') - const condition = dbChainMockFns.where.mock.calls.at(-1)?.[0] - expect(JSON.stringify(condition)).toContain('retry me') + const condition = JSON.stringify(dbChainMockFns.where.mock.calls.at(-1)?.[0]) + expect(condition).toContain('retry me') + expect(condition.match(/::jsonb/g)).toHaveLength(2) }) }) diff --git a/apps/sim/lib/core/idempotency/service.ts b/apps/sim/lib/core/idempotency/service.ts index bd2fd68737c..d176df33d1b 100644 --- a/apps/sim/lib/core/idempotency/service.ts +++ b/apps/sim/lib/core/idempotency/service.ts @@ -327,7 +327,7 @@ export class IdempotencyService { const expiredBefore = new Date(now.getTime() - this.config.ttlSeconds * 1000) const inProgressClaimExpired = sql`COALESCE( CASE - WHEN jsonb_typeof(${idempotencyKey.result} -> 'inProgressExpiresAt') = 'number' + WHEN json_typeof(${idempotencyKey.result} -> 'inProgressExpiresAt') = 'number' THEN (${idempotencyKey.result} ->> 'inProgressExpiresAt')::double precision END, EXTRACT(EPOCH FROM ${idempotencyKey.createdAt}) * 1000 + ${this.config.inProgressTtlSeconds * 1000} @@ -548,7 +548,7 @@ export class IdempotencyService { : fence?.observedResult ? and( eq(idempotencyKey.key, normalizedKey), - sql`${idempotencyKey.result} = ${JSON.stringify(fence.observedResult)}::jsonb` + sql`${idempotencyKey.result}::jsonb = ${JSON.stringify(fence.observedResult)}::jsonb` ) : eq(idempotencyKey.key, normalizedKey) const deleted = await db