File tree Expand file tree Collapse file tree 1 file changed +8
-1
lines changed
apps/sim/app/api/billing/update-cost Expand file tree Collapse file tree 1 file changed +8
-1
lines changed Original file line number Diff line number Diff line change @@ -31,6 +31,7 @@ export async function POST(req: NextRequest) {
3131 const requestId = generateRequestId ( )
3232 const startTime = Date . now ( )
3333 let claim : AtomicClaimResult | null = null
34+ let usageCommitted = false
3435
3536 try {
3637 logger . info ( `[${ requestId } ] Update cost request started` )
@@ -137,6 +138,7 @@ export async function POST(req: NextRequest) {
137138 ] ,
138139 additionalStats,
139140 } )
141+ usageCommitted = true
140142
141143 logger . info ( `[${ requestId } ] Recorded usage` , {
142144 userId,
@@ -173,7 +175,7 @@ export async function POST(req: NextRequest) {
173175 duration,
174176 } )
175177
176- if ( claim ?. claimed ) {
178+ if ( claim ?. claimed && ! usageCommitted ) {
177179 await billingIdempotency
178180 . release ( claim . normalizedKey , claim . storageMethod )
179181 . catch ( ( releaseErr ) => {
@@ -182,6 +184,11 @@ export async function POST(req: NextRequest) {
182184 normalizedKey : claim ?. normalizedKey ,
183185 } )
184186 } )
187+ } else if ( claim ?. claimed && usageCommitted ) {
188+ logger . warn (
189+ `[${ requestId } ] Error occurred after usage committed; retaining idempotency claim to prevent double-billing` ,
190+ { normalizedKey : claim . normalizedKey }
191+ )
185192 }
186193
187194 return NextResponse . json (
You can’t perform that action at this time.
0 commit comments