@noodleseed/one 0.59.0 → 0.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/billing-stripe-ops.js +1 -0
- package/dist/commands/billing-stripe-ops.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.js +247 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-schema.js +14 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.d.ts +4 -4
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.js +10 -99
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.d.ts +6 -0
- package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.js +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-lifecycle.js +35 -6
- package/node_modules/@noodle-borg/service/dist/billing/stripe-lifecycle.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.d.ts +5 -0
- package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.js +39 -0
- package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-service.d.ts +5 -4
- package/node_modules/@noodle-borg/service/dist/billing/stripe-service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-service.js +120 -44
- package/node_modules/@noodle-borg/service/dist/billing/stripe-service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-store.d.ts +35 -5
- package/node_modules/@noodle-borg/service/dist/billing/stripe-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-store.js +8 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-store.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/subscription-model.js +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/subscription-model.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.js +4 -2
- package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.js.map +1 -1
- package/package.json +1 -1
|
@@ -47,6 +47,7 @@ function printCheckout(response, service, json) {
|
|
|
47
47
|
console.log('Stripe Checkout is ready:');
|
|
48
48
|
console.log(response.data.url);
|
|
49
49
|
console.log(`Expires: ${response.data.expiresAt}`);
|
|
50
|
+
console.log(`Outcome: ${response.data.outcome}`);
|
|
50
51
|
}
|
|
51
52
|
function printPortal(response, service, json) {
|
|
52
53
|
if (json) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-stripe-ops.js","sourceRoot":"","sources":["../../src/commands/billing-stripe-ops.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAEL,mCAAmC,EAEnC,iCAAiC,GAClC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAmB,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAY/E,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,MAA6B,EAC7B,IAAuB,EACvB,GAAsB,EACtB,IAAoB;IAEpB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,EAAE;QACZ,OAAO,eAAe,CAAC,oBAAoB,MAAM,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC;QAC9C,WAAW,EAAE,IAAI,CAAC,OAAO;QACzB,QAAQ,EAAE,IAAI,CAAC,SAAS;QACxB,GAAG;QACH,IAAI;KACL,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,eAAe,CAAC,oBAAoB,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,CAAC;QACH,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,mCAAmC,CAAC,KAAK,CACxD,MAAM,WAAW,CACf,GAAG,QAAQ,CAAC,UAAU,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAC3F,QAAQ,CAAC,KAAK,EACd;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,UAAU,EAAE;iBACpD,CAAC;aACH,CACF,CACF,CAAC;YACF,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,CAAC;QACD,MAAM,QAAQ,GAAG,iCAAiC,CAAC,KAAK,CACtD,MAAM,WAAW,CACf,GAAG,QAAQ,CAAC,UAAU,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EACzF,QAAQ,CAAC,KAAK,EACd,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CACF,CAAC;QACF,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CACpB,oBAAoB,MAAM,EAAE,EAC5B,cAAc,CACZ,oBAAoB,MAAM,EAAE,EAC5B,KAAK,EACL,2BAA2B,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CACtD,EACD,IAAI,CAAC,IAAI,CACV,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,QAAuC,EACvC,OAAe,EACf,IAAa;IAEb,IAAI,IAAI,EAAE,CAAC;QACT,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"billing-stripe-ops.js","sourceRoot":"","sources":["../../src/commands/billing-stripe-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Pool, PoolClient } from 'pg';
|
|
2
|
+
import { type BillingStripeCheckoutClaim, type BillingStripeCheckoutOperation, type BillingStripeCheckoutRecord } from './stripe-store.js';
|
|
3
|
+
export declare function claimPostgresBillingStripeCheckout(pool: Pool, keyGeneration: string, operation: BillingStripeCheckoutOperation): Promise<BillingStripeCheckoutClaim>;
|
|
4
|
+
export declare function completePostgresBillingStripeCheckout(pool: Pool, operation: BillingStripeCheckoutOperation, record: BillingStripeCheckoutRecord): Promise<BillingStripeCheckoutRecord>;
|
|
5
|
+
export declare function releasePostgresBillingStripeCheckoutClaim(pool: Pool, operation: BillingStripeCheckoutOperation): Promise<void>;
|
|
6
|
+
export declare function lockBillingStripeAccount(client: PoolClient, billingAccountId: string): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=postgres-stripe-checkouts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-stripe-checkouts.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-stripe-checkouts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAe3C,OAAO,EACL,KAAK,0BAA0B,EAE/B,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EACjC,MAAM,mBAAmB,CAAC;AAoB3B,wBAAsB,kCAAkC,CACtD,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,8BAA8B,GACxC,OAAO,CAAC,0BAA0B,CAAC,CAkGrC;AAgBD,wBAAsB,qCAAqC,CACzD,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,8BAA8B,EACzC,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAyDtC;AAED,wBAAsB,yCAAyC,CAC7D,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,8BAA8B,GACxC,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,UAAU,EAClB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { postgresStripeTimestamp, stripeCheckoutRecord, } from './postgres-stripe-records.js';
|
|
2
|
+
import { requireActiveBillingAccount, requireEnforcedBillingAccount, requirePaidAuthority, } from './postgres-subscription-reconciliation-authority.js';
|
|
3
|
+
import { rollbackQuietly, translateTransactionError, } from './postgres-subscription-reconciliation-support.js';
|
|
4
|
+
import { BillingStripeCheckoutEligibilityError, } from './stripe-store.js';
|
|
5
|
+
import { BillingSubscriptionReconciliationConflictError } from './subscription-reconciliation.js';
|
|
6
|
+
const CHECKOUT_LEASE_MINUTES = 5;
|
|
7
|
+
export async function claimPostgresBillingStripeCheckout(pool, keyGeneration, operation) {
|
|
8
|
+
validateOperation(operation);
|
|
9
|
+
const client = await pool.connect();
|
|
10
|
+
try {
|
|
11
|
+
await client.query('BEGIN');
|
|
12
|
+
await lockBillingStripeAccount(client, operation.billingAccountId);
|
|
13
|
+
await requireCheckoutEligibility(client, keyGeneration, operation.billingAccountId);
|
|
14
|
+
await client.query(`UPDATE billing_stripe_checkout_operations
|
|
15
|
+
SET active = false
|
|
16
|
+
WHERE mode = $1 AND billing_account_id = $2 AND active AND expires_at <= $3`, [operation.mode, operation.billingAccountId, operation.claimedAt]);
|
|
17
|
+
const existingClaim = await readClaimForUpdate(client, operation.mode, operation.billingAccountId);
|
|
18
|
+
const activeCheckout = await readActiveCheckoutForUpdate(client, operation.mode, operation.billingAccountId);
|
|
19
|
+
if (existingClaim !== undefined) {
|
|
20
|
+
if (timestamp(existingClaim.lease_expires_at) > timestamp(operation.claimedAt)) {
|
|
21
|
+
await client.query('COMMIT');
|
|
22
|
+
return { state: 'in_progress' };
|
|
23
|
+
}
|
|
24
|
+
await client.query(`UPDATE billing_stripe_checkout_claims
|
|
25
|
+
SET lease_expires_at = $3::timestamptz + interval '${CHECKOUT_LEASE_MINUTES} minutes',
|
|
26
|
+
updated_at = $3
|
|
27
|
+
WHERE mode = $1 AND billing_account_id = $2`, [operation.mode, operation.billingAccountId, operation.claimedAt]);
|
|
28
|
+
const recovered = operationFromClaim(existingClaim, operation.claimedAt);
|
|
29
|
+
await client.query('COMMIT');
|
|
30
|
+
return {
|
|
31
|
+
state: 'recover',
|
|
32
|
+
operation: recovered,
|
|
33
|
+
...(activeCheckout === undefined ? {} : { previousCheckout: activeCheckout }),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const exactCheckout = await readCheckoutByHashForUpdate(client, operation.mode, operation.idempotencyKeyHash);
|
|
37
|
+
if (exactCheckout !== undefined) {
|
|
38
|
+
if (exactCheckout.billing_account_id !== operation.billingAccountId ||
|
|
39
|
+
exactCheckout.request_fingerprint !== operation.requestFingerprint) {
|
|
40
|
+
throw new BillingStripeCheckoutEligibilityError('billing_idempotency_conflict', 'billing checkout idempotency key was already used for another request');
|
|
41
|
+
}
|
|
42
|
+
if (!exactCheckout.active) {
|
|
43
|
+
throw new BillingStripeCheckoutEligibilityError('billing_checkout_expired', 'the previous billing checkout is no longer active; retry with a new idempotency key');
|
|
44
|
+
}
|
|
45
|
+
await client.query('COMMIT');
|
|
46
|
+
return { state: 'replay', checkout: stripeCheckoutRecord(exactCheckout) };
|
|
47
|
+
}
|
|
48
|
+
if (activeCheckout?.requestFingerprint === operation.requestFingerprint) {
|
|
49
|
+
await client.query('COMMIT');
|
|
50
|
+
return { state: 'resume', checkout: activeCheckout };
|
|
51
|
+
}
|
|
52
|
+
await client.query(`INSERT INTO billing_stripe_checkout_claims
|
|
53
|
+
(mode, billing_account_id, idempotency_key_hash, request_fingerprint, plan,
|
|
54
|
+
billing_interval, lease_expires_at, created_at, updated_at)
|
|
55
|
+
VALUES
|
|
56
|
+
($1, $2, $3, $4, $5, $6,
|
|
57
|
+
$7::timestamptz + interval '${CHECKOUT_LEASE_MINUTES} minutes', $7, $7)`, [
|
|
58
|
+
operation.mode,
|
|
59
|
+
operation.billingAccountId,
|
|
60
|
+
operation.idempotencyKeyHash,
|
|
61
|
+
operation.requestFingerprint,
|
|
62
|
+
operation.plan,
|
|
63
|
+
operation.interval,
|
|
64
|
+
operation.claimedAt,
|
|
65
|
+
]);
|
|
66
|
+
await client.query('COMMIT');
|
|
67
|
+
return activeCheckout === undefined
|
|
68
|
+
? { state: 'create', operation }
|
|
69
|
+
: { state: 'replace', operation, previousCheckout: activeCheckout };
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
await rollbackQuietly(client);
|
|
73
|
+
throw checkoutClaimError(error);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
client.release();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async function readCheckoutByHashForUpdate(client, mode, idempotencyKeyHash) {
|
|
80
|
+
const { rows } = await client.query(`SELECT * FROM billing_stripe_checkout_operations
|
|
81
|
+
WHERE mode = $1 AND idempotency_key_hash = $2
|
|
82
|
+
FOR UPDATE`, [mode, idempotencyKeyHash]);
|
|
83
|
+
return rows[0];
|
|
84
|
+
}
|
|
85
|
+
export async function completePostgresBillingStripeCheckout(pool, operation, record) {
|
|
86
|
+
validateOperation(operation);
|
|
87
|
+
validateCompletion(operation, record);
|
|
88
|
+
const client = await pool.connect();
|
|
89
|
+
try {
|
|
90
|
+
await client.query('BEGIN');
|
|
91
|
+
await lockBillingStripeAccount(client, operation.billingAccountId);
|
|
92
|
+
const claim = await readClaimForUpdate(client, operation.mode, operation.billingAccountId);
|
|
93
|
+
if (claim === undefined || !claimMatches(claim, operation)) {
|
|
94
|
+
throw new Error('Stripe checkout claim changed concurrently');
|
|
95
|
+
}
|
|
96
|
+
await client.query(`UPDATE billing_stripe_checkout_operations
|
|
97
|
+
SET active = false
|
|
98
|
+
WHERE mode = $1 AND billing_account_id = $2 AND active`, [operation.mode, operation.billingAccountId]);
|
|
99
|
+
const { rows } = await client.query(`INSERT INTO billing_stripe_checkout_operations
|
|
100
|
+
(mode, idempotency_key_hash, request_fingerprint, billing_account_id, customer_id,
|
|
101
|
+
session_id, session_url, expires_at, active, created_at)
|
|
102
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, true, $9)
|
|
103
|
+
RETURNING *`, [
|
|
104
|
+
record.mode,
|
|
105
|
+
record.idempotencyKeyHash,
|
|
106
|
+
record.requestFingerprint,
|
|
107
|
+
record.billingAccountId,
|
|
108
|
+
record.customerId,
|
|
109
|
+
record.sessionId,
|
|
110
|
+
record.sessionUrl,
|
|
111
|
+
record.expiresAt,
|
|
112
|
+
record.createdAt,
|
|
113
|
+
]);
|
|
114
|
+
const deleted = await client.query(`DELETE FROM billing_stripe_checkout_claims
|
|
115
|
+
WHERE mode = $1 AND billing_account_id = $2
|
|
116
|
+
AND idempotency_key_hash = $3 AND request_fingerprint = $4`, [
|
|
117
|
+
operation.mode,
|
|
118
|
+
operation.billingAccountId,
|
|
119
|
+
operation.idempotencyKeyHash,
|
|
120
|
+
operation.requestFingerprint,
|
|
121
|
+
]);
|
|
122
|
+
if (rows[0] === undefined || deleted.rowCount !== 1) {
|
|
123
|
+
throw new Error('Stripe checkout completion did not persist atomically');
|
|
124
|
+
}
|
|
125
|
+
await client.query('COMMIT');
|
|
126
|
+
return stripeCheckoutRecord(rows[0]);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
await rollbackQuietly(client);
|
|
130
|
+
throw translateTransactionError(error);
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
client.release();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export async function releasePostgresBillingStripeCheckoutClaim(pool, operation) {
|
|
137
|
+
validateOperation(operation);
|
|
138
|
+
await pool.query(`DELETE FROM billing_stripe_checkout_claims
|
|
139
|
+
WHERE mode = $1 AND billing_account_id = $2
|
|
140
|
+
AND idempotency_key_hash = $3 AND request_fingerprint = $4
|
|
141
|
+
AND plan = $5 AND billing_interval = $6 AND updated_at = $7`, [
|
|
142
|
+
operation.mode,
|
|
143
|
+
operation.billingAccountId,
|
|
144
|
+
operation.idempotencyKeyHash,
|
|
145
|
+
operation.requestFingerprint,
|
|
146
|
+
operation.plan,
|
|
147
|
+
operation.interval,
|
|
148
|
+
operation.claimedAt,
|
|
149
|
+
]);
|
|
150
|
+
}
|
|
151
|
+
export async function lockBillingStripeAccount(client, billingAccountId) {
|
|
152
|
+
await client.query('SELECT pg_advisory_xact_lock(hashtextextended($1, 0))', [
|
|
153
|
+
`billing-stripe-account:${billingAccountId}`,
|
|
154
|
+
]);
|
|
155
|
+
}
|
|
156
|
+
async function requireCheckoutEligibility(client, keyGeneration, billingAccountId) {
|
|
157
|
+
await requirePaidAuthority(client, keyGeneration);
|
|
158
|
+
await requireActiveBillingAccount(client, billingAccountId);
|
|
159
|
+
await requireEnforcedBillingAccount(client, billingAccountId);
|
|
160
|
+
const { rows } = await client.query(`SELECT snapshot.schema_version,
|
|
161
|
+
snapshot.plan_version_id,
|
|
162
|
+
EXISTS (
|
|
163
|
+
SELECT 1 FROM billing_account_defaults AS defaults
|
|
164
|
+
WHERE defaults.billing_account_id = active.billing_account_id
|
|
165
|
+
) AS is_default,
|
|
166
|
+
EXISTS (
|
|
167
|
+
SELECT 1 FROM billing_stripe_subscription_bindings AS binding
|
|
168
|
+
WHERE binding.billing_account_id = active.billing_account_id AND binding.active
|
|
169
|
+
) AS has_active_provider_subscription
|
|
170
|
+
FROM billing_account_active_snapshots AS active
|
|
171
|
+
JOIN billing_entitlement_snapshots AS snapshot
|
|
172
|
+
ON snapshot.billing_account_id = active.billing_account_id
|
|
173
|
+
AND snapshot.id = active.snapshot_id
|
|
174
|
+
WHERE active.billing_account_id = $1
|
|
175
|
+
FOR UPDATE OF active, snapshot`, [billingAccountId]);
|
|
176
|
+
const state = rows[0];
|
|
177
|
+
if (state === undefined ||
|
|
178
|
+
state.plan_version_id !== 'free@1' ||
|
|
179
|
+
(state.schema_version !== 1 && state.schema_version !== 3) ||
|
|
180
|
+
!state.is_default ||
|
|
181
|
+
state.has_active_provider_subscription) {
|
|
182
|
+
throw new BillingStripeCheckoutEligibilityError('billing_checkout_not_eligible', 'billing account is not eligible to start a paid checkout');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async function readClaimForUpdate(client, mode, billingAccountId) {
|
|
186
|
+
const { rows } = await client.query(`SELECT mode, billing_account_id, idempotency_key_hash, request_fingerprint, plan,
|
|
187
|
+
billing_interval, lease_expires_at, updated_at
|
|
188
|
+
FROM billing_stripe_checkout_claims
|
|
189
|
+
WHERE mode = $1 AND billing_account_id = $2
|
|
190
|
+
FOR UPDATE`, [mode, billingAccountId]);
|
|
191
|
+
return rows[0];
|
|
192
|
+
}
|
|
193
|
+
async function readActiveCheckoutForUpdate(client, mode, billingAccountId) {
|
|
194
|
+
const { rows } = await client.query(`SELECT * FROM billing_stripe_checkout_operations
|
|
195
|
+
WHERE mode = $1 AND billing_account_id = $2 AND active
|
|
196
|
+
FOR UPDATE`, [mode, billingAccountId]);
|
|
197
|
+
return rows[0] === undefined ? undefined : stripeCheckoutRecord(rows[0]);
|
|
198
|
+
}
|
|
199
|
+
function operationFromClaim(claim, claimedAt) {
|
|
200
|
+
return {
|
|
201
|
+
mode: claim.mode,
|
|
202
|
+
billingAccountId: claim.billing_account_id,
|
|
203
|
+
idempotencyKeyHash: claim.idempotency_key_hash,
|
|
204
|
+
requestFingerprint: claim.request_fingerprint,
|
|
205
|
+
plan: claim.plan,
|
|
206
|
+
interval: claim.billing_interval,
|
|
207
|
+
claimedAt,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function claimMatches(claim, operation) {
|
|
211
|
+
return (claim.mode === operation.mode &&
|
|
212
|
+
claim.billing_account_id === operation.billingAccountId &&
|
|
213
|
+
claim.idempotency_key_hash === operation.idempotencyKeyHash &&
|
|
214
|
+
claim.request_fingerprint === operation.requestFingerprint &&
|
|
215
|
+
claim.plan === operation.plan &&
|
|
216
|
+
claim.billing_interval === operation.interval &&
|
|
217
|
+
timestamp(claim.updated_at) === timestamp(operation.claimedAt));
|
|
218
|
+
}
|
|
219
|
+
function validateOperation(operation) {
|
|
220
|
+
if (!/^[0-9a-f]{64}$/.test(operation.idempotencyKeyHash) ||
|
|
221
|
+
!/^[0-9a-f]{64}$/.test(operation.requestFingerprint) ||
|
|
222
|
+
!Number.isFinite(timestamp(operation.claimedAt))) {
|
|
223
|
+
throw new Error('Stripe checkout operation is invalid');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function validateCompletion(operation, record) {
|
|
227
|
+
if (record.mode !== operation.mode ||
|
|
228
|
+
record.billingAccountId !== operation.billingAccountId ||
|
|
229
|
+
record.idempotencyKeyHash !== operation.idempotencyKeyHash ||
|
|
230
|
+
record.requestFingerprint !== operation.requestFingerprint ||
|
|
231
|
+
record.createdAt !== operation.claimedAt) {
|
|
232
|
+
throw new Error('Stripe checkout completion conflicts with its claim');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function checkoutClaimError(error) {
|
|
236
|
+
if (error instanceof BillingStripeCheckoutEligibilityError)
|
|
237
|
+
return error;
|
|
238
|
+
const translated = translateTransactionError(error);
|
|
239
|
+
return translated instanceof BillingSubscriptionReconciliationConflictError
|
|
240
|
+
? new BillingStripeCheckoutEligibilityError(translated.code, translated.message)
|
|
241
|
+
: translated;
|
|
242
|
+
}
|
|
243
|
+
function timestamp(value) {
|
|
244
|
+
const normalized = value instanceof Date ? value.toISOString() : postgresStripeTimestamp(value);
|
|
245
|
+
return Date.parse(normalized);
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=postgres-stripe-checkouts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-stripe-checkouts.js","sourceRoot":"","sources":["../../src/billing/postgres-stripe-checkouts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-stripe-schema.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-stripe-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,+FAA+F;AAC/F,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"postgres-stripe-schema.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-stripe-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,+FAA+F;AAC/F,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GzE"}
|
|
@@ -35,6 +35,20 @@ export async function ensureBillingStripeSchema(pool) {
|
|
|
35
35
|
CREATE UNIQUE INDEX IF NOT EXISTS billing_stripe_checkout_operations_active_account_key
|
|
36
36
|
ON billing_stripe_checkout_operations(mode, billing_account_id)
|
|
37
37
|
WHERE active
|
|
38
|
+
`);
|
|
39
|
+
await pool.query(`
|
|
40
|
+
CREATE TABLE IF NOT EXISTS billing_stripe_checkout_claims (
|
|
41
|
+
mode text NOT NULL CHECK (mode IN ('sandbox', 'live')),
|
|
42
|
+
billing_account_id text NOT NULL REFERENCES billing_accounts(id) ON DELETE RESTRICT,
|
|
43
|
+
idempotency_key_hash text NOT NULL CHECK (idempotency_key_hash ~ '^[0-9a-f]{64}$'),
|
|
44
|
+
request_fingerprint text NOT NULL CHECK (request_fingerprint ~ '^[0-9a-f]{64}$'),
|
|
45
|
+
plan text NOT NULL CHECK (plan IN ('pro', 'scale')),
|
|
46
|
+
billing_interval text NOT NULL CHECK (billing_interval IN ('month', 'year')),
|
|
47
|
+
lease_expires_at timestamptz NOT NULL,
|
|
48
|
+
created_at timestamptz NOT NULL,
|
|
49
|
+
updated_at timestamptz NOT NULL CHECK (updated_at >= created_at),
|
|
50
|
+
PRIMARY KEY (mode, billing_account_id)
|
|
51
|
+
)
|
|
38
52
|
`);
|
|
39
53
|
await pool.query(`
|
|
40
54
|
CREATE TABLE IF NOT EXISTS billing_stripe_subscription_bindings (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-stripe-schema.js","sourceRoot":"","sources":["../../src/billing/postgres-stripe-schema.ts"],"names":[],"mappings":"AAEA,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAU;IACxD,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;GAUhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;GAmBhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;GAIhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;GAoBhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;GAIhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;GAIhB,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"postgres-stripe-schema.js","sourceRoot":"","sources":["../../src/billing/postgres-stripe-schema.ts"],"names":[],"mappings":"AAEA,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAU;IACxD,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;GAUhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;GAmBhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;GAIhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;GAahB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;GAoBhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;GAIhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;GAIhB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import type { Pool } from 'pg';
|
|
2
2
|
import type { BillingStripeMode } from './stripe-config.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { BillingStripeCustomerRecord, BillingStripeEventClaim, BillingStripeEventClaimInput, BillingStripeReconciliationState, BillingStripeStore, BillingStripeSubscriptionBinding } from './stripe-store.js';
|
|
4
4
|
export declare class PostgresBillingStripeStore implements BillingStripeStore {
|
|
5
5
|
#private;
|
|
6
6
|
constructor(pool: Pool, options: {
|
|
7
7
|
readonly authoritativeKeyGeneration: string;
|
|
8
8
|
});
|
|
9
|
-
assertPaidCheckoutEligible(billingAccountId: string): Promise<void>;
|
|
10
9
|
getCustomer(billingAccountId: string, mode: BillingStripeMode): Promise<BillingStripeCustomerRecord | undefined>;
|
|
11
10
|
putCustomer(record: BillingStripeCustomerRecord): Promise<BillingStripeCustomerRecord>;
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
claimCheckout(operation: Parameters<BillingStripeStore['claimCheckout']>[0]): Promise<import("./stripe-store.js").BillingStripeCheckoutClaim>;
|
|
12
|
+
completeCheckout(operation: Parameters<BillingStripeStore['completeCheckout']>[0], record: Parameters<BillingStripeStore['completeCheckout']>[1]): Promise<import("./stripe-store.js").BillingStripeCheckoutRecord>;
|
|
13
|
+
releaseCheckoutClaim(operation: Parameters<BillingStripeStore['releaseCheckoutClaim']>[0]): Promise<void>;
|
|
14
14
|
claimEvent(input: BillingStripeEventClaimInput): Promise<BillingStripeEventClaim>;
|
|
15
15
|
completeEvent(mode: BillingStripeMode, eventId: string, outcomeCode: string, completedAt: string): Promise<void>;
|
|
16
16
|
failEvent(mode: BillingStripeMode, eventId: string, errorCode: string, failedAt: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-stripe-store.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-stripe-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres-stripe-store.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-stripe-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,IAAI,CAAC;AAoB3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EACV,2BAA2B,EAC3B,uBAAuB,EACvB,4BAA4B,EAC5B,gCAAgC,EAChC,kBAAkB,EAClB,gCAAgC,EACjC,MAAM,mBAAmB,CAAC;AAG3B,qBAAa,0BAA2B,YAAW,kBAAkB;;gBAIvD,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAA;KAAE;IAQ1E,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB;IAQ7D,WAAW,CAAC,MAAM,EAAE,2BAA2B;IAe/C,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAI3E,gBAAgB,CACpB,SAAS,EAAE,UAAU,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAChE,MAAM,EAAE,UAAU,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAKzD,oBAAoB,CACxB,SAAS,EAAE,UAAU,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,GACnE,OAAO,CAAC,IAAI,CAAC;IAIV,UAAU,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIjF,aAAa,CACjB,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAIV,SAAS,CACb,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAIV,2BAA2B,CAC/B,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,GACtE,OAAO,CAAC,gCAAgC,CAAC;IAgEtC,4BAA4B,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB;IAW9E,8BAA8B,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM;IAgBrE,8BAA8B,CAClC,OAAO,EAAE,gCAAgC,EACzC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAgBV,sBAAsB,CAC1B,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,gCAAgC,CAAC;IAgFtC,yBAAyB,CAC7B,OAAO,EAAE,gCAAgC,EACzC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;CAgBjB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { claimPostgresBillingStripeCheckout, completePostgresBillingStripeCheckout, lockBillingStripeAccount, releasePostgresBillingStripeCheckoutClaim, } from './postgres-stripe-checkouts.js';
|
|
1
2
|
import { claimBillingStripeEvent, completeBillingStripeEvent, failBillingStripeEvent, } from './postgres-stripe-events.js';
|
|
2
|
-
import { postgresStripeInteger, requiredPostgresStripeTimestamp, stripeBindingRecord,
|
|
3
|
-
import { requireActiveBillingAccount, requireEnforcedBillingAccount, requirePaidAuthority, } from './postgres-subscription-reconciliation-authority.js';
|
|
3
|
+
import { postgresStripeInteger, requiredPostgresStripeTimestamp, stripeBindingRecord, stripeCustomerRecord, } from './postgres-stripe-records.js';
|
|
4
4
|
import { parseBillingBaseSubscriptionRevision } from './subscription-model.js';
|
|
5
5
|
export class PostgresBillingStripeStore {
|
|
6
6
|
#pool;
|
|
@@ -12,54 +12,6 @@ export class PostgresBillingStripeStore {
|
|
|
12
12
|
this.#pool = pool;
|
|
13
13
|
this.#keyGeneration = options.authoritativeKeyGeneration;
|
|
14
14
|
}
|
|
15
|
-
async assertPaidCheckoutEligible(billingAccountId) {
|
|
16
|
-
const client = await this.#pool.connect();
|
|
17
|
-
try {
|
|
18
|
-
await client.query('BEGIN');
|
|
19
|
-
await lockAccount(client, billingAccountId);
|
|
20
|
-
await requirePaidAuthority(client, this.#keyGeneration);
|
|
21
|
-
await requireActiveBillingAccount(client, billingAccountId);
|
|
22
|
-
await requireEnforcedBillingAccount(client, billingAccountId);
|
|
23
|
-
const { rows } = await client.query(`SELECT snapshot.schema_version,
|
|
24
|
-
snapshot.plan_version_id,
|
|
25
|
-
EXISTS (
|
|
26
|
-
SELECT 1 FROM billing_account_defaults AS defaults
|
|
27
|
-
WHERE defaults.billing_account_id = active.billing_account_id
|
|
28
|
-
) AS is_default,
|
|
29
|
-
binding.provider_subscription_id AS active_provider_subscription_id
|
|
30
|
-
, checkout.session_id AS active_checkout_id
|
|
31
|
-
FROM billing_account_active_snapshots AS active
|
|
32
|
-
JOIN billing_entitlement_snapshots AS snapshot
|
|
33
|
-
ON snapshot.billing_account_id = active.billing_account_id
|
|
34
|
-
AND snapshot.id = active.snapshot_id
|
|
35
|
-
LEFT JOIN billing_stripe_subscription_bindings AS binding
|
|
36
|
-
ON binding.billing_account_id = active.billing_account_id
|
|
37
|
-
AND binding.active
|
|
38
|
-
LEFT JOIN billing_stripe_checkout_operations AS checkout
|
|
39
|
-
ON checkout.billing_account_id = active.billing_account_id
|
|
40
|
-
AND checkout.active
|
|
41
|
-
AND checkout.expires_at > now()
|
|
42
|
-
WHERE active.billing_account_id = $1
|
|
43
|
-
FOR UPDATE OF active, snapshot`, [billingAccountId]);
|
|
44
|
-
const state = rows[0];
|
|
45
|
-
if (state === undefined ||
|
|
46
|
-
state.plan_version_id !== 'free@1' ||
|
|
47
|
-
(state.schema_version !== 1 && state.schema_version !== 3) ||
|
|
48
|
-
!state.is_default ||
|
|
49
|
-
state.active_provider_subscription_id !== null ||
|
|
50
|
-
state.active_checkout_id !== null) {
|
|
51
|
-
throw new Error('billing account is not eligible to start a paid checkout');
|
|
52
|
-
}
|
|
53
|
-
await client.query('COMMIT');
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
await rollback(client);
|
|
57
|
-
throw error;
|
|
58
|
-
}
|
|
59
|
-
finally {
|
|
60
|
-
client.release();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
15
|
async getCustomer(billingAccountId, mode) {
|
|
64
16
|
const { rows } = await this.#pool.query(`SELECT * FROM billing_stripe_customers WHERE billing_account_id = $1 AND mode = $2`, [billingAccountId, mode]);
|
|
65
17
|
return rows[0] === undefined ? undefined : stripeCustomerRecord(rows[0]);
|
|
@@ -75,50 +27,14 @@ export class PostgresBillingStripeStore {
|
|
|
75
27
|
}
|
|
76
28
|
return persisted;
|
|
77
29
|
}
|
|
78
|
-
async
|
|
79
|
-
|
|
80
|
-
WHERE mode = $1 AND idempotency_key_hash = $2`, [mode, idempotencyKeyHash]);
|
|
81
|
-
return rows[0] === undefined ? undefined : stripeCheckoutRecord(rows[0]);
|
|
30
|
+
async claimCheckout(operation) {
|
|
31
|
+
return claimPostgresBillingStripeCheckout(this.#pool, this.#keyGeneration, operation);
|
|
82
32
|
}
|
|
83
|
-
async
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
await client.query(`UPDATE billing_stripe_checkout_operations
|
|
89
|
-
SET active = false
|
|
90
|
-
WHERE mode = $1 AND billing_account_id = $2 AND active AND expires_at <= $3`, [record.mode, record.billingAccountId, record.createdAt]);
|
|
91
|
-
await client.query(`INSERT INTO billing_stripe_checkout_operations
|
|
92
|
-
(mode, idempotency_key_hash, request_fingerprint, billing_account_id, customer_id,
|
|
93
|
-
session_id, session_url, expires_at, active, created_at)
|
|
94
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, true, $9)
|
|
95
|
-
ON CONFLICT (mode, idempotency_key_hash) DO NOTHING`, [
|
|
96
|
-
record.mode,
|
|
97
|
-
record.idempotencyKeyHash,
|
|
98
|
-
record.requestFingerprint,
|
|
99
|
-
record.billingAccountId,
|
|
100
|
-
record.customerId,
|
|
101
|
-
record.sessionId,
|
|
102
|
-
record.sessionUrl,
|
|
103
|
-
record.expiresAt,
|
|
104
|
-
record.createdAt,
|
|
105
|
-
]);
|
|
106
|
-
await client.query('COMMIT');
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
await rollback(client);
|
|
110
|
-
throw error;
|
|
111
|
-
}
|
|
112
|
-
finally {
|
|
113
|
-
client.release();
|
|
114
|
-
}
|
|
115
|
-
const persisted = await this.getCheckout(record.mode, record.idempotencyKeyHash);
|
|
116
|
-
if (persisted === undefined ||
|
|
117
|
-
persisted.requestFingerprint !== record.requestFingerprint ||
|
|
118
|
-
persisted.sessionId !== record.sessionId) {
|
|
119
|
-
throw new Error('Stripe checkout idempotency key conflicts with persisted billing state');
|
|
120
|
-
}
|
|
121
|
-
return persisted;
|
|
33
|
+
async completeCheckout(operation, record) {
|
|
34
|
+
return completePostgresBillingStripeCheckout(this.#pool, operation, record);
|
|
35
|
+
}
|
|
36
|
+
async releaseCheckoutClaim(operation) {
|
|
37
|
+
return releasePostgresBillingStripeCheckoutClaim(this.#pool, operation);
|
|
122
38
|
}
|
|
123
39
|
async claimEvent(input) {
|
|
124
40
|
return claimBillingStripeEvent(this.#pool, input);
|
|
@@ -133,7 +49,7 @@ export class PostgresBillingStripeStore {
|
|
|
133
49
|
const client = await this.#pool.connect();
|
|
134
50
|
try {
|
|
135
51
|
await client.query('BEGIN');
|
|
136
|
-
await
|
|
52
|
+
await lockBillingStripeAccount(client, input.billingAccountId);
|
|
137
53
|
const existing = await readBinding(client, input.mode, input.providerSubscriptionId);
|
|
138
54
|
if (existing !== undefined) {
|
|
139
55
|
await client.query('COMMIT');
|
|
@@ -306,11 +222,6 @@ async function readActiveBindingForUpdate(client, billingAccountId, mode) {
|
|
|
306
222
|
WHERE billing_account_id = $1 AND mode = $2 AND active FOR UPDATE`, [billingAccountId, mode]);
|
|
307
223
|
return rows[0] === undefined ? undefined : stripeBindingRecord(rows[0]);
|
|
308
224
|
}
|
|
309
|
-
async function lockAccount(client, billingAccountId) {
|
|
310
|
-
await client.query('SELECT pg_advisory_xact_lock(hashtextextended($1, 0))', [
|
|
311
|
-
`billing-stripe-account:${billingAccountId}`,
|
|
312
|
-
]);
|
|
313
|
-
}
|
|
314
225
|
async function rollback(client) {
|
|
315
226
|
try {
|
|
316
227
|
await client.query('ROLLBACK');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-stripe-store.js","sourceRoot":"","sources":["../../src/billing/postgres-stripe-store.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"postgres-stripe-store.js","sourceRoot":"","sources":["../../src/billing/postgres-stripe-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,12 @@ export declare const BillingStripeCheckoutResponseSchema: z.ZodObject<{
|
|
|
17
17
|
url: z.ZodString;
|
|
18
18
|
expiresAt: z.ZodString;
|
|
19
19
|
replayed: z.ZodBoolean;
|
|
20
|
+
outcome: z.ZodEnum<{
|
|
21
|
+
created: "created";
|
|
22
|
+
resumed: "resumed";
|
|
23
|
+
replaced: "replaced";
|
|
24
|
+
idempotent_replay: "idempotent_replay";
|
|
25
|
+
}>;
|
|
20
26
|
}, z.core.$strip>;
|
|
21
27
|
}, z.core.$strip>;
|
|
22
28
|
export type BillingStripeCheckoutResponse = z.infer<typeof BillingStripeCheckoutResponseSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-contract.d.ts","sourceRoot":"","sources":["../../src/billing/stripe-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kCAAkC;;;;;;;;;;kBAMpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F,eAAO,MAAM,mCAAmC
|
|
1
|
+
{"version":3,"file":"stripe-contract.d.ts","sourceRoot":"","sources":["../../src/billing/stripe-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kCAAkC;;;;;;;;;;kBAMpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;iBAQ9C,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAEhG,eAAO,MAAM,iCAAiC;;;;;iBAG5C,CAAC;AACH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC"}
|
|
@@ -12,6 +12,7 @@ export const BillingStripeCheckoutResponseSchema = z.object({
|
|
|
12
12
|
url: z.string().url(),
|
|
13
13
|
expiresAt: z.string().datetime(),
|
|
14
14
|
replayed: z.boolean(),
|
|
15
|
+
outcome: z.enum(['created', 'resumed', 'replaced', 'idempotent_replay']),
|
|
15
16
|
}),
|
|
16
17
|
});
|
|
17
18
|
export const BillingStripePortalResponseSchema = z.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-contract.js","sourceRoot":"","sources":["../../src/billing/stripe-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KAChD,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CAC3C,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1D,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"stripe-contract.js","sourceRoot":"","sources":["../../src/billing/stripe-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KAChD,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CAC3C,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1D,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;QACrB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;KACzE,CAAC;CACH,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACxD,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;CAC1C,CAAC,CAAC"}
|