|
1 | | -import { |
2 | | - ALERT_ID, |
3 | | - ALERT_THRESHOLD, |
4 | | - SYNC_STALENESS_THRESHOLD, |
5 | | - Wallet, |
6 | | -} from "../durable-objects/Wallet"; |
7 | | -import { SlackAlertManager } from "./SlackAlertManager"; |
8 | | -import { err, ok, Result } from "../util/results"; |
9 | | -import { isError } from "../../../../packages/common/result"; |
10 | | -import { HeliconeProxyRequest } from "../models/HeliconeProxyRequest"; |
11 | | -import { WalletKVSync } from "../ai-gateway/WalletKVSync"; |
| 1 | +import retry from "async-retry"; |
12 | 2 | import { DisallowListKVSync } from "../ai-gateway/DisallowListKVSync"; |
| 3 | +import { WalletKVSync } from "../ai-gateway/WalletKVSync"; |
| 4 | +import { SYNC_STALENESS_THRESHOLD, Wallet } from "../durable-objects/Wallet"; |
| 5 | +import { HeliconeProxyRequest } from "../models/HeliconeProxyRequest"; |
13 | 6 | import { createDataDogTracer } from "../monitoring/DataDogTracer"; |
| 7 | +import { err, ok, Result } from "../util/results"; |
14 | 8 |
|
15 | 9 | export class WalletManager { |
16 | 10 | private env: Env; |
@@ -70,10 +64,36 @@ export class WalletManager { |
70 | 64 | const escrowId = escrowResult.data.reservedEscrowId; |
71 | 65 |
|
72 | 66 | const { clickhouseLastCheckedAt, remainingBalance, staleEscrowsCleared } = |
73 | | - await this.walletStub.finalizeEscrow( |
74 | | - organizationId, |
75 | | - escrowId, |
76 | | - cost ?? 0 |
| 67 | + await retry( |
| 68 | + async (bail) => { |
| 69 | + try { |
| 70 | + return await this.walletStub.finalizeEscrow( |
| 71 | + organizationId, |
| 72 | + escrowId, |
| 73 | + cost ?? 0 |
| 74 | + ); |
| 75 | + } catch (e) { |
| 76 | + // Don't retry validation errors |
| 77 | + if ( |
| 78 | + e instanceof Error && |
| 79 | + e.message.includes("cannot be negative") |
| 80 | + ) { |
| 81 | + bail(e); |
| 82 | + return undefined as never; |
| 83 | + } |
| 84 | + throw e; |
| 85 | + } |
| 86 | + }, |
| 87 | + { |
| 88 | + retries: 3, |
| 89 | + minTimeout: 100, |
| 90 | + maxTimeout: 1000, |
| 91 | + onRetry: (error, attempt) => { |
| 92 | + console.warn( |
| 93 | + `Retry attempt ${attempt} for finalizeEscrow. Error: ${error}` |
| 94 | + ); |
| 95 | + }, |
| 96 | + } |
77 | 97 | ); |
78 | 98 |
|
79 | 99 | // Store remaining balance to KV for future optimistic checks |
|
0 commit comments