@antelopejs/dms-saas 0.3.8 → 0.3.10
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/README.md +45 -0
- package/dist/invoice-line-items/injection.js +3 -4
- package/dist/invoice-line-items/injection.js.map +1 -1
- package/dist/routes/tenant/index.d.ts +2 -0
- package/dist/routes/tenant/index.js +2 -0
- package/dist/routes/tenant/index.js.map +1 -1
- package/dist/routes/tenant/tenant-plan-checkout-recovery.d.ts +21 -0
- package/dist/routes/tenant/tenant-plan-checkout-recovery.js +140 -0
- package/dist/routes/tenant/tenant-plan-checkout-recovery.js.map +1 -0
- package/dist/routes/tenant/tenant-plan-checkout.d.ts +2 -0
- package/dist/routes/tenant/tenant-plan-checkout.js +180 -0
- package/dist/routes/tenant/tenant-plan-checkout.js.map +1 -0
- package/dist/routes/tenant/tenant-plan-ops.d.ts +0 -1
- package/dist/routes/tenant/tenant-plan-ops.js +0 -100
- package/dist/routes/tenant/tenant-plan-ops.js.map +1 -1
- package/dist/routes/tenant/tenant-plan.d.ts +3 -0
- package/dist/routes/tenant/tenant-plan.js +29 -1
- package/dist/routes/tenant/tenant-plan.js.map +1 -1
- package/dist/stripe/client.d.ts +1 -0
- package/dist/stripe/client.js +3 -2
- package/dist/stripe/client.js.map +1 -1
- package/dist/stripe/index.d.ts +1 -0
- package/dist/stripe/index.js +1 -0
- package/dist/stripe/index.js.map +1 -1
- package/dist/stripe/payload-shapes.d.ts +17 -0
- package/dist/stripe/payload-shapes.js +58 -0
- package/dist/stripe/payload-shapes.js.map +1 -0
- package/dist/stripe/plan-schedule.js +2 -1
- package/dist/stripe/plan-schedule.js.map +1 -1
- package/dist/stripe/upcoming-invoice.d.ts +5 -1
- package/dist/stripe/upcoming-invoice.js +20 -5
- package/dist/stripe/upcoming-invoice.js.map +1 -1
- package/dist/stripe/webhook-checkout.js +4 -1
- package/dist/stripe/webhook-checkout.js.map +1 -1
- package/dist/stripe/webhook-credit-notes.js +4 -8
- package/dist/stripe/webhook-credit-notes.js.map +1 -1
- package/dist/stripe/webhook-handlers.js +7 -4
- package/dist/stripe/webhook-handlers.js.map +1 -1
- package/dist/stripe/webhook-shared.js +9 -5
- package/dist/stripe/webhook-shared.js.map +1 -1
- package/dist/stripe/workspace-checkout.d.ts +6 -0
- package/dist/stripe/workspace-checkout.js +60 -2
- package/dist/stripe/workspace-checkout.js.map +1 -1
- package/dist/upcoming-invoice/mapping.d.ts +2 -2
- package/dist/upcoming-invoice/mapping.js +25 -14
- package/dist/upcoming-invoice/mapping.js.map +1 -1
- package/dist/upcoming-invoice/pricing.js +3 -3
- package/dist/upcoming-invoice/pricing.js.map +1 -1
- package/dist/workspaces/provisioning.js +2 -4
- package/dist/workspaces/provisioning.js.map +1 -1
- package/frontend-vue/app/components/PendingCheckoutModal.vue +78 -0
- package/frontend-vue/app/components/PlanComparisonModal.vue +5 -0
- package/frontend-vue/app/components/PlanUpgradeModal.vue +5 -0
- package/frontend-vue/app/components/TenantPlanCard.vue +27 -1
- package/frontend-vue/app/components/WorkspaceCreateModal.vue +2 -0
- package/frontend-vue/app/composables/useApiErrorMessage.ts +9 -8
- package/frontend-vue/app/composables/usePendingCheckout.ts +88 -0
- package/frontend-vue/app/composables/useSaasRegistration.ts +1 -0
- package/frontend-vue/app/composables/useStripePaymentElement.ts +90 -13
- package/frontend-vue/app/composables/useTenantPlan.ts +41 -1
- package/frontend-vue/app/custom-pages/auth/no-workspace.vue +1 -0
- package/frontend-vue/i18n/locales/saas-en-GB.json +18 -2
- package/frontend-vue/i18n/locales/saas-fr-FR.json +18 -2
- package/frontend-vue/package.json +3 -0
- package/package.json +2 -2
|
@@ -5,26 +5,18 @@ exports.loadAndValidateTargetPlan = loadAndValidateTargetPlan;
|
|
|
5
5
|
exports.assertSeatLimit = assertSeatLimit;
|
|
6
6
|
exports.finalizeImmediateChange = finalizeImmediateChange;
|
|
7
7
|
exports.isPaidPlan = isPaidPlan;
|
|
8
|
-
exports.startPaidCheckout = startPaidCheckout;
|
|
9
8
|
exports.insertFreeSubscription = insertFreeSubscription;
|
|
10
9
|
exports.scheduleDowngrade = scheduleDowngrade;
|
|
11
10
|
exports.dropPendingChange = dropPendingChange;
|
|
12
11
|
exports.applyImmediateChange = applyImmediateChange;
|
|
13
12
|
const node_crypto_1 = require("node:crypto");
|
|
14
13
|
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
15
|
-
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
16
14
|
const tenant_lifecycle_1 = require("@antelopejs/interface-dms/tenant-lifecycle");
|
|
17
15
|
const billing_state_1 = require("../../billing-state");
|
|
18
|
-
const config_1 = require("../../config");
|
|
19
|
-
const db_1 = require("../../db");
|
|
20
16
|
const plan_changes_1 = require("../../plan-changes");
|
|
21
17
|
const plans_1 = require("../../plans");
|
|
22
18
|
const client_1 = require("../../stripe/client");
|
|
23
|
-
const workspace_checkout_1 = require("../../stripe/workspace-checkout");
|
|
24
|
-
const utils_1 = require("../../utils");
|
|
25
19
|
const workers_1 = require("../../workers");
|
|
26
|
-
const complimentary_1 = require("../../workspaces/complimentary");
|
|
27
|
-
const trial_identity_model_1 = require("../../workspaces/db/trial-identity.model");
|
|
28
20
|
exports.HTTP_NOT_FOUND = 404;
|
|
29
21
|
exports.HTTP_BAD_REQUEST = 400;
|
|
30
22
|
const HTTP_PAYMENT_REQUIRED = 402;
|
|
@@ -32,26 +24,12 @@ exports.HTTP_CONFLICT = 409;
|
|
|
32
24
|
exports.PAST_DUE_STATUS = "past_due";
|
|
33
25
|
const PRORATION_BEHAVIOR = "create_prorations";
|
|
34
26
|
const ACTIVE_STATUS = "active";
|
|
35
|
-
const PENDING_PAYMENT_STATUS = "pending_payment";
|
|
36
|
-
const PLACEHOLDER_PLAN_ID = null;
|
|
37
27
|
exports.UNCHANGED_RESULT_BASE = {
|
|
38
28
|
changed: false,
|
|
39
29
|
scheduled: false,
|
|
40
30
|
effectiveAt: null,
|
|
41
31
|
checkoutUrl: null,
|
|
42
32
|
};
|
|
43
|
-
function asNonEmptyString(value) {
|
|
44
|
-
return typeof value === "string" && value.trim().length > 0
|
|
45
|
-
? value.trim()
|
|
46
|
-
: null;
|
|
47
|
-
}
|
|
48
|
-
function validateCheckoutRedirectInput(body) {
|
|
49
|
-
const successUrl = asNonEmptyString(body.successUrl);
|
|
50
|
-
const cancelUrl = asNonEmptyString(body.cancelUrl);
|
|
51
|
-
(0, interface_api_util_1.assert)(successUrl && (0, config_1.isAllowedRedirectUrl)(successUrl), exports.HTTP_BAD_REQUEST, "saas.errors.billing.invalid_return_url");
|
|
52
|
-
(0, interface_api_util_1.assert)(cancelUrl && (0, config_1.isAllowedRedirectUrl)(cancelUrl), exports.HTTP_BAD_REQUEST, "saas.errors.billing.invalid_return_url");
|
|
53
|
-
return { successUrl, cancelUrl };
|
|
54
|
-
}
|
|
55
33
|
async function loadAndValidateTargetPlan(planModel, planId, customerType) {
|
|
56
34
|
const storedPlan = await planModel.get(planId);
|
|
57
35
|
(0, interface_api_util_1.assert)(storedPlan && !storedPlan.isDeleted && storedPlan.isActive, exports.HTTP_BAD_REQUEST, "saas.errors.plan.invalid");
|
|
@@ -102,84 +80,6 @@ async function syncStripePlanChange(subscription, newPlan, operationId) {
|
|
|
102
80
|
function isPaidPlan(plan) {
|
|
103
81
|
return !!plan.paymentProviderRefs?.stripePriceId;
|
|
104
82
|
}
|
|
105
|
-
async function resolveCheckoutTrialDays(newPlan, ownerEmail, tenantId) {
|
|
106
|
-
if (!newPlan.trialDays || newPlan.trialDays <= 0)
|
|
107
|
-
return 0;
|
|
108
|
-
const trialConsumptionModel = (0, interface_database_decorators_1.GetModel)(db_1.TrialConsumptionModel);
|
|
109
|
-
const alreadyConsumed = await trialConsumptionModel.existsForIdentity((0, utils_1.hashEmail)(ownerEmail), null);
|
|
110
|
-
if (alreadyConsumed)
|
|
111
|
-
return 0;
|
|
112
|
-
const identities = (0, interface_database_decorators_1.GetModel)(trial_identity_model_1.TrialIdentityModel);
|
|
113
|
-
const id = (0, trial_identity_model_1.trialIdentityId)("email", (0, utils_1.hashEmail)(ownerEmail));
|
|
114
|
-
if ((await identities.get(id))?.tenantId)
|
|
115
|
-
return 0;
|
|
116
|
-
return (await identities.reserve(id, tenantId)) ? newPlan.trialDays : 0;
|
|
117
|
-
}
|
|
118
|
-
async function attachCheckoutSession(checkout, subscription, tenantSubscriptionModel, operationId) {
|
|
119
|
-
await tenantSubscriptionModel.updateDuringTransition(subscription._id, operationId, {
|
|
120
|
-
isComplimentary: (0, complimentary_1.isComplimentarySubscription)(subscription),
|
|
121
|
-
stripeCustomerId: checkout.customerId,
|
|
122
|
-
stripeCheckoutSessionId: checkout.sessionId,
|
|
123
|
-
updatedAt: new Date(),
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
async function initializeCheckoutSubscription(request) {
|
|
127
|
-
if (request.subscription)
|
|
128
|
-
return request.subscription;
|
|
129
|
-
await request.tenantSubscriptionModel.insert({
|
|
130
|
-
_id: request.tenantId,
|
|
131
|
-
planId: PLACEHOLDER_PLAN_ID,
|
|
132
|
-
status: PENDING_PAYMENT_STATUS,
|
|
133
|
-
isComplimentary: false,
|
|
134
|
-
paidUsagePeriods: [],
|
|
135
|
-
stripeCustomerId: null,
|
|
136
|
-
stripeSubscriptionId: null,
|
|
137
|
-
stripeCheckoutSessionId: null,
|
|
138
|
-
createdBy: request.user._id,
|
|
139
|
-
createdAt: new Date(),
|
|
140
|
-
updatedAt: new Date(),
|
|
141
|
-
});
|
|
142
|
-
const subscription = await request.tenantSubscriptionModel.get(request.tenantId);
|
|
143
|
-
if (!subscription)
|
|
144
|
-
throw new Error("Checkout subscription acknowledgement requires reconciliation");
|
|
145
|
-
return subscription;
|
|
146
|
-
}
|
|
147
|
-
async function createAdmittedCheckout(request) {
|
|
148
|
-
const { tenantId, user, newPlan, body, tenantSubscriptionModel } = request;
|
|
149
|
-
const redirect = validateCheckoutRedirectInput(body);
|
|
150
|
-
const stripePriceId = newPlan.paymentProviderRefs?.stripePriceId;
|
|
151
|
-
(0, interface_api_util_1.assert)(stripePriceId, exports.HTTP_BAD_REQUEST, "saas.errors.plan.no_stripe_price");
|
|
152
|
-
const subscription = await initializeCheckoutSubscription(request);
|
|
153
|
-
const operationId = (0, node_crypto_1.randomUUID)();
|
|
154
|
-
await tenantSubscriptionModel.beginTransition(subscription, {
|
|
155
|
-
operationId,
|
|
156
|
-
kind: "checkout",
|
|
157
|
-
targetPlanId: newPlan._id,
|
|
158
|
-
requestedAt: new Date(),
|
|
159
|
-
});
|
|
160
|
-
const trialDays = await resolveCheckoutTrialDays(newPlan, user.email, tenantId);
|
|
161
|
-
const checkout = await (0, workspace_checkout_1.createWorkspaceCheckoutSession)({
|
|
162
|
-
operationId,
|
|
163
|
-
tenantId,
|
|
164
|
-
ownerEmail: user.email,
|
|
165
|
-
stripePriceId,
|
|
166
|
-
trialDays,
|
|
167
|
-
successUrl: redirect.successUrl,
|
|
168
|
-
cancelUrl: redirect.cancelUrl,
|
|
169
|
-
planId: newPlan._id,
|
|
170
|
-
existingCustomerId: subscription?.stripeCustomerId ?? undefined,
|
|
171
|
-
});
|
|
172
|
-
await attachCheckoutSession(checkout, subscription, tenantSubscriptionModel, operationId);
|
|
173
|
-
await (0, billing_state_1.recomputeTenantBillingState)(tenantId);
|
|
174
|
-
return {
|
|
175
|
-
...exports.UNCHANGED_RESULT_BASE,
|
|
176
|
-
planId: newPlan._id,
|
|
177
|
-
checkoutUrl: checkout.url,
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
async function startPaidCheckout(request) {
|
|
181
|
-
return (0, tenant_lifecycle_1.runTenantLifecycleOperation)(request.tenantId, () => createAdmittedCheckout(request));
|
|
182
|
-
}
|
|
183
83
|
async function insertFreeSubscription(user, newPlanId, tenantId, tenantSubscriptionModel) {
|
|
184
84
|
await (0, tenant_lifecycle_1.runTenantLifecycleOperation)(tenantId, () => tenantSubscriptionModel.insert([
|
|
185
85
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-plan-ops.js","sourceRoot":"","sources":["../../../src/routes/tenant/tenant-plan-ops.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"tenant-plan-ops.js","sourceRoot":"","sources":["../../../src/routes/tenant/tenant-plan-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { TenantModel } from "@antelopejs/interface-dms/db";
|
|
|
2
2
|
import type { User } from "@antelopejs/interface-dms/auth/db";
|
|
3
3
|
import { FeatureModel, PlanModel, TenantBillingInfoModel, TenantSubscriptionModel } from "../../db";
|
|
4
4
|
import { type ChangePlanBody, type ChangePlanResult, type CurrentPlanResult } from "./tenant-plan-ops";
|
|
5
|
+
import { type CancelCheckoutResult, type PendingCheckoutResult } from "./tenant-plan-checkout-recovery";
|
|
5
6
|
declare const SaasTenantPlanController_base: import("@antelopejs/interface-api").ControllerClass<object>;
|
|
6
7
|
export declare class SaasTenantPlanController extends SaasTenantPlanController_base {
|
|
7
8
|
tenantModel: TenantModel;
|
|
@@ -11,6 +12,8 @@ export declare class SaasTenantPlanController extends SaasTenantPlanController_b
|
|
|
11
12
|
private loadSubscription;
|
|
12
13
|
getCurrentPlan(_user: User, ctx: any, tenantSubscriptionModel: TenantSubscriptionModel): Promise<CurrentPlanResult>;
|
|
13
14
|
cancelPendingChange(user: User, ctx: any, tenantSubscriptionModel: TenantSubscriptionModel): Promise<ChangePlanResult>;
|
|
15
|
+
getPendingCheckout(_user: User, tenantSubscriptionModel: TenantSubscriptionModel): Promise<PendingCheckoutResult>;
|
|
16
|
+
cancelCheckout(_user: User, operationId: unknown, ctx: any, tenantSubscriptionModel: TenantSubscriptionModel): Promise<CancelCheckoutResult>;
|
|
14
17
|
changePlan(user: User, body: ChangePlanBody, ctx: any, tenantSubscriptionModel: TenantSubscriptionModel, tenantBillingInfoModel: TenantBillingInfoModel): Promise<ChangePlanResult>;
|
|
15
18
|
private assertPlanChangeAllowed;
|
|
16
19
|
private resolveSamePlanRequest;
|
|
@@ -18,6 +18,7 @@ const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
|
18
18
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
19
19
|
const db_1 = require("@antelopejs/interface-dms/db");
|
|
20
20
|
const guards_1 = require("@antelopejs/interface-dms/guards");
|
|
21
|
+
const tenant_lifecycle_1 = require("@antelopejs/interface-dms/tenant-lifecycle");
|
|
21
22
|
const request_tenant_1 = require("@antelopejs/interface-dms/request-tenant");
|
|
22
23
|
const tenant_scoped_model_1 = require("@antelopejs/interface-dms/tenant-scoped-model");
|
|
23
24
|
const tenant_access_1 = require("@antelopejs/interface-dms/tenant-access");
|
|
@@ -28,6 +29,8 @@ const billing_identity_1 = require("../../workspaces/billing-identity");
|
|
|
28
29
|
const complimentary_1 = require("../../workspaces/complimentary");
|
|
29
30
|
const default_plan_1 = require("../../workspaces/default-plan");
|
|
30
31
|
const tenant_plan_ops_1 = require("./tenant-plan-ops");
|
|
32
|
+
const tenant_plan_checkout_1 = require("./tenant-plan-checkout");
|
|
33
|
+
const tenant_plan_checkout_recovery_1 = require("./tenant-plan-checkout-recovery");
|
|
31
34
|
function startsPaidCheckout(newPlan, subscription) {
|
|
32
35
|
return (0, tenant_plan_ops_1.isPaidPlan)(newPlan) && !subscription?.stripeSubscriptionId;
|
|
33
36
|
}
|
|
@@ -91,6 +94,13 @@ class SaasTenantPlanController extends (0, interface_api_1.Controller)("/api/saa
|
|
|
91
94
|
(0, interface_api_util_1.assert)(subscription?.pendingPlanId, tenant_plan_ops_1.HTTP_BAD_REQUEST, "saas.errors.plan.no_pending_change");
|
|
92
95
|
return (0, tenant_plan_ops_1.dropPendingChange)(tenantId, subscription);
|
|
93
96
|
}
|
|
97
|
+
async getPendingCheckout(_user, tenantSubscriptionModel) {
|
|
98
|
+
return (0, tenant_plan_checkout_recovery_1.describePendingCheckout)(await tenantSubscriptionModel.findOne());
|
|
99
|
+
}
|
|
100
|
+
async cancelCheckout(_user, operationId, ctx, tenantSubscriptionModel) {
|
|
101
|
+
const tenantId = (0, request_tenant_1.getRequestTenantId)(ctx);
|
|
102
|
+
return (0, tenant_lifecycle_1.runTenantLifecycleOperation)(tenantId, async () => (0, tenant_plan_checkout_recovery_1.cancelPendingCheckout)(await tenantSubscriptionModel.findOne(), tenantSubscriptionModel, typeof operationId === "string" && operationId ? operationId : null));
|
|
103
|
+
}
|
|
94
104
|
async changePlan(user, body, ctx, tenantSubscriptionModel, tenantBillingInfoModel) {
|
|
95
105
|
const tenantId = (0, request_tenant_1.getRequestTenantId)(ctx);
|
|
96
106
|
const tenant = await this.tenantModel.get(tenantId);
|
|
@@ -131,7 +141,7 @@ class SaasTenantPlanController extends (0, interface_api_1.Controller)("/api/saa
|
|
|
131
141
|
async routePlanChange(request) {
|
|
132
142
|
const { tenantId, user, newPlan, subscription, tenantSubscriptionModel } = request;
|
|
133
143
|
if (startsPaidCheckout(newPlan, subscription)) {
|
|
134
|
-
return (0,
|
|
144
|
+
return (0, tenant_plan_checkout_1.startPaidCheckout)(request);
|
|
135
145
|
}
|
|
136
146
|
if (!subscription) {
|
|
137
147
|
return (0, tenant_plan_ops_1.insertFreeSubscription)(user, newPlan._id, tenantId, tenantSubscriptionModel);
|
|
@@ -183,6 +193,24 @@ __decorate([
|
|
|
183
193
|
__metadata("design:paramtypes", [Function, Object, db_2.TenantSubscriptionModel]),
|
|
184
194
|
__metadata("design:returntype", Promise)
|
|
185
195
|
], SaasTenantPlanController.prototype, "cancelPendingChange", null);
|
|
196
|
+
__decorate([
|
|
197
|
+
(0, interface_api_1.Get)("/checkout"),
|
|
198
|
+
__param(0, (0, guards_1.AuthTenantOwner)({ bypassTenantAccessGate: true })),
|
|
199
|
+
__param(1, (0, tenant_scoped_model_1.TenantScopedModel)(db_2.TenantSubscriptionModel)),
|
|
200
|
+
__metadata("design:type", Function),
|
|
201
|
+
__metadata("design:paramtypes", [Function, db_2.TenantSubscriptionModel]),
|
|
202
|
+
__metadata("design:returntype", Promise)
|
|
203
|
+
], SaasTenantPlanController.prototype, "getPendingCheckout", null);
|
|
204
|
+
__decorate([
|
|
205
|
+
(0, interface_api_1.Delete)("/checkout"),
|
|
206
|
+
__param(0, (0, guards_1.AuthTenantOwner)({ bypassTenantAccessGate: true })),
|
|
207
|
+
__param(1, (0, interface_api_1.Parameter)(tenant_plan_checkout_recovery_1.CHECKOUT_OPERATION_PARAM, "query")),
|
|
208
|
+
__param(2, (0, interface_api_1.Context)()),
|
|
209
|
+
__param(3, (0, tenant_scoped_model_1.TenantScopedModel)(db_2.TenantSubscriptionModel)),
|
|
210
|
+
__metadata("design:type", Function),
|
|
211
|
+
__metadata("design:paramtypes", [Function, Object, Object, db_2.TenantSubscriptionModel]),
|
|
212
|
+
__metadata("design:returntype", Promise)
|
|
213
|
+
], SaasTenantPlanController.prototype, "cancelCheckout", null);
|
|
186
214
|
__decorate([
|
|
187
215
|
(0, interface_api_1.Put)("/"),
|
|
188
216
|
__param(0, (0, guards_1.AuthTenantOwner)({ bypassTenantAccessGate: true })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-plan.js","sourceRoot":"","sources":["../../../src/routes/tenant/tenant-plan.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"tenant-plan.js","sourceRoot":"","sources":["../../../src/routes/tenant/tenant-plan.ts"],"names":[],"mappings":"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"}
|
package/dist/stripe/client.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Stripe from "stripe";
|
|
2
2
|
import type { DmsSaasStripeConfig } from "../types";
|
|
3
|
+
export declare const STRIPE_API_VERSION: Stripe.LatestApiVersion;
|
|
3
4
|
export declare function initStripeClient(config: DmsSaasStripeConfig): void;
|
|
4
5
|
export declare function isStripeConfigured(): boolean;
|
|
5
6
|
export declare function getStripeClient(): Stripe;
|
package/dist/stripe/client.js
CHANGED
|
@@ -3,12 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.STRIPE_API_VERSION = void 0;
|
|
6
7
|
exports.initStripeClient = initStripeClient;
|
|
7
8
|
exports.isStripeConfigured = isStripeConfigured;
|
|
8
9
|
exports.getStripeClient = getStripeClient;
|
|
9
10
|
exports.getStripeWebhookSecret = getStripeWebhookSecret;
|
|
10
11
|
const stripe_1 = __importDefault(require("stripe"));
|
|
11
|
-
|
|
12
|
+
exports.STRIPE_API_VERSION = "2025-08-27.basil";
|
|
12
13
|
const SECRET_KEY_PREFIX = "sk_";
|
|
13
14
|
const PLACEHOLDER_MARKER = "placeholder";
|
|
14
15
|
let stripeClient = null;
|
|
@@ -21,7 +22,7 @@ function isUsableSecretKey(key) {
|
|
|
21
22
|
}
|
|
22
23
|
function initStripeClient(config) {
|
|
23
24
|
stripeClient = new stripe_1.default(config.secretKey, {
|
|
24
|
-
apiVersion: STRIPE_API_VERSION,
|
|
25
|
+
apiVersion: exports.STRIPE_API_VERSION,
|
|
25
26
|
});
|
|
26
27
|
stripeWebhookSecret = config.webhookSecret;
|
|
27
28
|
stripeConfigured = isUsableSecretKey(config.secretKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/stripe/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/stripe/client.ts"],"names":[],"mappings":";;;;;;AA0BA,4CAMC;AAED,gDAEC;AAED,0CAOC;AAED,wDAKC;AApDD,oDAA4B;AAUf,QAAA,kBAAkB,GAA4B,kBAAkB,CAAC;AAC9E,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAEzC,IAAI,YAAY,GAAkB,IAAI,CAAC;AACvC,IAAI,mBAAmB,GAAkB,IAAI,CAAC;AAC9C,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAE7B,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACjC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAClC,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAA2B;IAC1D,YAAY,GAAG,IAAI,gBAAM,CAAC,MAAM,CAAC,SAAS,EAAE;QAC1C,UAAU,EAAE,0BAAkB;KAC/B,CAAC,CAAC;IACH,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC;IAC3C,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAgB,eAAe;IAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;IACJ,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,sBAAsB;IACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
|
package/dist/stripe/index.d.ts
CHANGED
package/dist/stripe/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./client"), exports);
|
|
18
18
|
__exportStar(require("./customer-billing"), exports);
|
|
19
|
+
__exportStar(require("./payload-shapes"), exports);
|
|
19
20
|
__exportStar(require("./plan-schedule"), exports);
|
|
20
21
|
__exportStar(require("./proration"), exports);
|
|
21
22
|
__exportStar(require("./sync-plan"), exports);
|
package/dist/stripe/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stripe/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,qDAAmC;AACnC,kDAAgC;AAChC,8CAA4B;AAC5B,8CAA4B;AAC5B,qDAAmC;AACnC,qDAAmC;AACnC,yDAAuC;AACvC,qDAAmC;AACnC,mDAAiC;AACjC,uDAAqC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stripe/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,qDAAmC;AACnC,mDAAiC;AACjC,kDAAgC;AAChC,8CAA4B;AAC5B,8CAA4B;AAC5B,qDAAmC;AACnC,qDAAmC;AACnC,yDAAuC;AACvC,qDAAmC;AACnC,mDAAiC;AACjC,uDAAqC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type Stripe from "stripe";
|
|
2
|
+
export interface StripeSubscriptionPeriod {
|
|
3
|
+
start: number | null;
|
|
4
|
+
end: number | null;
|
|
5
|
+
}
|
|
6
|
+
interface StripeReference {
|
|
7
|
+
id?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function readStripeId(value: string | StripeReference | null | undefined): string | null;
|
|
10
|
+
export declare function readSubscriptionPeriod(subscription: Stripe.Subscription): StripeSubscriptionPeriod;
|
|
11
|
+
export declare function readSubscriptionPeriodEnd(subscription: Stripe.Subscription): Date | null;
|
|
12
|
+
export declare function requireInvoiceId(invoice: Stripe.Invoice): string;
|
|
13
|
+
export declare function readInvoiceSubscriptionId(invoice: Stripe.Invoice): string | null;
|
|
14
|
+
export declare function readInvoiceTax(invoice: Stripe.Invoice): number;
|
|
15
|
+
export declare function readCreditNoteRefundId(creditNote: Stripe.CreditNote): string | null;
|
|
16
|
+
export declare function readCreditNoteLineTax(creditNote: Stripe.CreditNote): number;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readStripeId = readStripeId;
|
|
4
|
+
exports.readSubscriptionPeriod = readSubscriptionPeriod;
|
|
5
|
+
exports.readSubscriptionPeriodEnd = readSubscriptionPeriodEnd;
|
|
6
|
+
exports.requireInvoiceId = requireInvoiceId;
|
|
7
|
+
exports.readInvoiceSubscriptionId = readInvoiceSubscriptionId;
|
|
8
|
+
exports.readInvoiceTax = readInvoiceTax;
|
|
9
|
+
exports.readCreditNoteRefundId = readCreditNoteRefundId;
|
|
10
|
+
exports.readCreditNoteLineTax = readCreditNoteLineTax;
|
|
11
|
+
const time_1 = require("../utils/time");
|
|
12
|
+
function readStripeId(value) {
|
|
13
|
+
if (typeof value === "string")
|
|
14
|
+
return value;
|
|
15
|
+
return value?.id ?? null;
|
|
16
|
+
}
|
|
17
|
+
function sumAmounts(amounts) {
|
|
18
|
+
return (amounts ?? []).reduce((total, entry) => total + entry.amount, 0);
|
|
19
|
+
}
|
|
20
|
+
function readSubscriptionPeriod(subscription) {
|
|
21
|
+
const item = subscription.items?.data?.[0];
|
|
22
|
+
const legacy = subscription;
|
|
23
|
+
return {
|
|
24
|
+
start: item?.current_period_start ?? legacy.current_period_start ?? null,
|
|
25
|
+
end: item?.current_period_end ?? legacy.current_period_end ?? null,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function readSubscriptionPeriodEnd(subscription) {
|
|
29
|
+
return (0, time_1.stripeSecondsToDate)(readSubscriptionPeriod(subscription).end);
|
|
30
|
+
}
|
|
31
|
+
function requireInvoiceId(invoice) {
|
|
32
|
+
if (!invoice.id)
|
|
33
|
+
throw new Error("Stripe invoice has no id");
|
|
34
|
+
return invoice.id;
|
|
35
|
+
}
|
|
36
|
+
function readInvoiceSubscriptionId(invoice) {
|
|
37
|
+
const fromParent = invoice.parent?.subscription_details?.subscription;
|
|
38
|
+
if (fromParent)
|
|
39
|
+
return readStripeId(fromParent);
|
|
40
|
+
return readStripeId(invoice.subscription);
|
|
41
|
+
}
|
|
42
|
+
function readInvoiceTax(invoice) {
|
|
43
|
+
if (invoice.total_taxes)
|
|
44
|
+
return sumAmounts(invoice.total_taxes);
|
|
45
|
+
return invoice.tax ?? 0;
|
|
46
|
+
}
|
|
47
|
+
function readCreditNoteRefundId(creditNote) {
|
|
48
|
+
const refund = creditNote.refunds?.[0]?.refund;
|
|
49
|
+
if (refund)
|
|
50
|
+
return readStripeId(refund);
|
|
51
|
+
return readStripeId(creditNote.refund);
|
|
52
|
+
}
|
|
53
|
+
function readCreditNoteLineTax(creditNote) {
|
|
54
|
+
if (creditNote.total_taxes)
|
|
55
|
+
return sumAmounts(creditNote.total_taxes);
|
|
56
|
+
return sumAmounts(creditNote.tax_amounts);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=payload-shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-shapes.js","sourceRoot":"","sources":["../../src/stripe/payload-shapes.ts"],"names":[],"mappings":";;AA8CA,oCAKC;AAWD,wDASC;AAGD,8DAIC;AAMD,4CAGC;AAGD,8DAQC;AAGD,wCAGC;AAMD,wDAQC;AAGD,sDAKC;AApHD,wCAAoD;AAoCpD,SAAgB,YAAY,CAC1B,KAAkD;IAElD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,OAAuC;IACzD,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC3E,CAAC;AAOD,SAAgB,sBAAsB,CACpC,YAAiC;IAEjC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,YAA8D,CAAC;IAC9E,OAAO;QACL,KAAK,EAAE,IAAI,EAAE,oBAAoB,IAAI,MAAM,CAAC,oBAAoB,IAAI,IAAI;QACxE,GAAG,EAAE,IAAI,EAAE,kBAAkB,IAAI,MAAM,CAAC,kBAAkB,IAAI,IAAI;KACnE,CAAC;AACJ,CAAC;AAGD,SAAgB,yBAAyB,CACvC,YAAiC;IAEjC,OAAO,IAAA,0BAAmB,EAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC;AAMD,SAAgB,gBAAgB,CAAC,OAAuB;IACtD,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC7D,OAAO,OAAO,CAAC,EAAE,CAAC;AACpB,CAAC;AAGD,SAAgB,yBAAyB,CACvC,OAAuB;IAEvB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,oBAAoB,EAAE,YAAY,CAAC;IACtE,IAAI,UAAU;QAAE,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO,YAAY,CAChB,OAAgD,CAAC,YAAY,CAC/D,CAAC;AACJ,CAAC;AAGD,SAAgB,cAAc,CAAC,OAAuB;IACpD,IAAI,OAAO,CAAC,WAAW;QAAE,OAAO,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAChE,OAAQ,OAAgD,CAAC,GAAG,IAAI,CAAC,CAAC;AACpE,CAAC;AAMD,SAAgB,sBAAsB,CACpC,UAA6B;IAE7B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAC/C,IAAI,MAAM;QAAE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,YAAY,CAChB,UAAyD,CAAC,MAAM,CAClE,CAAC;AACJ,CAAC;AAGD,SAAgB,qBAAqB,CAAC,UAA6B;IACjE,IAAI,UAAU,CAAC,WAAW;QAAE,OAAO,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACtE,OAAO,UAAU,CACd,UAAyD,CAAC,WAAW,CACvE,CAAC;AACJ,CAAC"}
|
|
@@ -6,6 +6,7 @@ exports.setSubscriptionCancelAtPeriodEnd = setSubscriptionCancelAtPeriodEnd;
|
|
|
6
6
|
exports.resetSubscriptionPendingState = resetSubscriptionPendingState;
|
|
7
7
|
const time_1 = require("../utils/time");
|
|
8
8
|
const client_1 = require("./client");
|
|
9
|
+
const payload_shapes_1 = require("./payload-shapes");
|
|
9
10
|
const RELEASE_END_BEHAVIOR = "release";
|
|
10
11
|
const NEW_PHASE_ITERATIONS = 1;
|
|
11
12
|
function toPriceId(price) {
|
|
@@ -63,7 +64,7 @@ async function setSubscriptionCancelAtPeriodEnd(stripeSubscriptionId, cancelAtPe
|
|
|
63
64
|
const updated = await stripe.subscriptions.update(stripeSubscriptionId, {
|
|
64
65
|
cancel_at_period_end: cancelAtPeriodEnd,
|
|
65
66
|
});
|
|
66
|
-
return (0,
|
|
67
|
+
return (0, payload_shapes_1.readSubscriptionPeriodEnd)(updated);
|
|
67
68
|
}
|
|
68
69
|
function toScheduleId(schedule) {
|
|
69
70
|
if (typeof schedule === "string")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-schedule.js","sourceRoot":"","sources":["../../src/stripe/plan-schedule.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"plan-schedule.js","sourceRoot":"","sources":["../../src/stripe/plan-schedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,10 @@ export interface StripeSubscriptionCycle {
|
|
|
4
4
|
currentPeriodStart: Date;
|
|
5
5
|
currentPeriodEnd: Date;
|
|
6
6
|
}
|
|
7
|
+
export interface PricedUpcomingInvoice {
|
|
8
|
+
invoice: Stripe.Invoice;
|
|
9
|
+
taxRates: Map<string, Stripe.TaxRate>;
|
|
10
|
+
}
|
|
7
11
|
export interface QuotedInvoiceItem {
|
|
8
12
|
amountMinorUnits: number;
|
|
9
13
|
description: string;
|
|
@@ -18,4 +22,4 @@ export interface UpcomingInvoicePreviewRequest {
|
|
|
18
22
|
quotedItems: QuotedInvoiceItem[];
|
|
19
23
|
}
|
|
20
24
|
export declare function retrieveStripeSubscriptionCycle(subscriptionId: string): Promise<StripeSubscriptionCycle>;
|
|
21
|
-
export declare function previewStripeUpcomingInvoice(request: UpcomingInvoicePreviewRequest): Promise<
|
|
25
|
+
export declare function previewStripeUpcomingInvoice(request: UpcomingInvoicePreviewRequest): Promise<PricedUpcomingInvoice>;
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.retrieveStripeSubscriptionCycle = retrieveStripeSubscriptionCycle;
|
|
4
4
|
exports.previewStripeUpcomingInvoice = previewStripeUpcomingInvoice;
|
|
5
5
|
const client_1 = require("./client");
|
|
6
|
+
const payload_shapes_1 = require("./payload-shapes");
|
|
6
7
|
const MS_PER_SECOND = 1000;
|
|
7
|
-
const TAX_RATE_EXPANSION = "total_tax_amounts.tax_rate";
|
|
8
8
|
function toStripeSeconds(date) {
|
|
9
9
|
return Math.floor(date.getTime() / MS_PER_SECOND);
|
|
10
10
|
}
|
|
@@ -25,18 +25,33 @@ function toPreviewInvoiceItem(currency, item) {
|
|
|
25
25
|
}
|
|
26
26
|
async function retrieveStripeSubscriptionCycle(subscriptionId) {
|
|
27
27
|
const subscription = await (0, client_1.getStripeClient)().subscriptions.retrieve(subscriptionId);
|
|
28
|
+
const period = (0, payload_shapes_1.readSubscriptionPeriod)(subscription);
|
|
29
|
+
if (period.start === null || period.end === null)
|
|
30
|
+
throw new Error(`Stripe subscription ${subscriptionId} has no billing period`);
|
|
28
31
|
return {
|
|
29
32
|
currency: subscription.currency,
|
|
30
|
-
currentPeriodStart: fromStripeSeconds(
|
|
31
|
-
currentPeriodEnd: fromStripeSeconds(
|
|
33
|
+
currentPeriodStart: fromStripeSeconds(period.start),
|
|
34
|
+
currentPeriodEnd: fromStripeSeconds(period.end),
|
|
32
35
|
};
|
|
33
36
|
}
|
|
37
|
+
function collectTaxRateIds(invoice) {
|
|
38
|
+
const ids = (invoice.total_taxes ?? [])
|
|
39
|
+
.map((tax) => tax.tax_rate_details?.tax_rate)
|
|
40
|
+
.filter((id) => typeof id === "string");
|
|
41
|
+
return [...new Set(ids)];
|
|
42
|
+
}
|
|
43
|
+
async function retrieveTaxRates(ids) {
|
|
44
|
+
const stripe = (0, client_1.getStripeClient)();
|
|
45
|
+
const rates = await Promise.all(ids.map((id) => stripe.taxRates.retrieve(id)));
|
|
46
|
+
return new Map(rates.map((rate) => [rate.id, rate]));
|
|
47
|
+
}
|
|
34
48
|
async function previewStripeUpcomingInvoice(request) {
|
|
35
|
-
|
|
49
|
+
const invoice = await (0, client_1.getStripeClient)().invoices.createPreview({
|
|
36
50
|
customer: request.customerId,
|
|
37
51
|
subscription: request.subscriptionId,
|
|
38
52
|
invoice_items: request.quotedItems.map((item) => toPreviewInvoiceItem(request.currency, item)),
|
|
39
|
-
expand: [TAX_RATE_EXPANSION],
|
|
40
53
|
});
|
|
54
|
+
const taxRates = await retrieveTaxRates(collectTaxRateIds(invoice));
|
|
55
|
+
return { invoice, taxRates };
|
|
41
56
|
}
|
|
42
57
|
//# sourceMappingURL=upcoming-invoice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upcoming-invoice.js","sourceRoot":"","sources":["../../src/stripe/upcoming-invoice.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"upcoming-invoice.js","sourceRoot":"","sources":["../../src/stripe/upcoming-invoice.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,9 @@ const db_1 = require("../db");
|
|
|
10
10
|
const utils_1 = require("../utils");
|
|
11
11
|
const complimentary_1 = require("../workspaces/complimentary");
|
|
12
12
|
const client_1 = require("./client");
|
|
13
|
+
const payload_shapes_1 = require("./payload-shapes");
|
|
13
14
|
const webhook_shared_1 = require("./webhook-shared");
|
|
15
|
+
const workspace_checkout_1 = require("./workspace-checkout");
|
|
14
16
|
async function promoteSubscriptionPaymentMethod(subscription) {
|
|
15
17
|
const customerId = (0, webhook_shared_1.asCustomerId)(subscription.customer);
|
|
16
18
|
const paymentMethodId = typeof subscription.default_payment_method === "string"
|
|
@@ -70,7 +72,7 @@ async function mirrorCheckoutSubscription(context, subscription, existing, statu
|
|
|
70
72
|
...(0, complimentary_1.activatePaidUsage)(existing, context.subscriptionId, (0, utils_1.stripeSecondsToDate)(subscription.start_date) ?? new Date()),
|
|
71
73
|
status,
|
|
72
74
|
stripeSubscriptionId: context.subscriptionId,
|
|
73
|
-
currentPeriodEnd: (0,
|
|
75
|
+
currentPeriodEnd: (0, payload_shapes_1.readSubscriptionPeriodEnd)(subscription),
|
|
74
76
|
updatedAt: new Date(),
|
|
75
77
|
};
|
|
76
78
|
if (context.targetPlanId)
|
|
@@ -133,6 +135,7 @@ async function handleCheckoutSessionExpired(event) {
|
|
|
133
135
|
});
|
|
134
136
|
if (outcome !== "applied")
|
|
135
137
|
throw new Error(`Checkout expiration ${outcome}; reconciliation required`);
|
|
138
|
+
await (0, workspace_checkout_1.releaseCheckoutTrialReservation)(session, tenantId);
|
|
136
139
|
}
|
|
137
140
|
async function recordCheckoutTrialConsumption(session, createdBy, planId) {
|
|
138
141
|
const email = session.customer_details?.email;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-checkout.js","sourceRoot":"","sources":["../../src/stripe/webhook-checkout.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"webhook-checkout.js","sourceRoot":"","sources":["../../src/stripe/webhook-checkout.ts"],"names":[],"mappings":";;AAqMA,wEAQC;AAGD,oEAsBC;AAnOD,6FAAqE;AACrE,iFAAyF;AAEzF,8CAAoD;AACpD,oDAA+D;AAM/D,8BAAuE;AACvE,oCAAgF;AAChF,+DAAgE;AAChE,qCAA2C;AAC3C,qDAA6D;AAC7D,qDAAgF;AAChF,6DAAuE;AAEvE,KAAK,UAAU,gCAAgC,CAC7C,YAAiC;IAEjC,MAAM,UAAU,GAAG,IAAA,6BAAY,EAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,eAAe,GACnB,OAAO,YAAY,CAAC,sBAAsB,KAAK,QAAQ;QACrD,CAAC,CAAC,YAAY,CAAC,sBAAsB;QACrC,CAAC,CAAC,CAAC,YAAY,CAAC,sBAAsB,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,IAAI,CAAC,eAAe;QAAE,OAAO;IAC5C,MAAM,MAAM,GAAG,IAAA,wBAAe,GAAE,CAAC;IAIjC,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;QACxC,gBAAgB,EAAE,EAAE,sBAAsB,EAAE,eAAe,EAAE;KAC9D,CAAC,CAAC;AACL,CAAC;AASD,KAAK,UAAU,uBAAuB,CACpC,OAAwB,EACxB,QAA4B;IAE5B,IAAI,QAAQ,CAAC,0BAA0B,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7E,IAAI,QAAQ,CAAC,uBAAuB,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE;QACzD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,IAAI,QAAQ,CAAC,iBAAiB;QAC5B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC;IAC1C,IACE,OAAO;QACP,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;YAC1B,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW;YAC7D,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC;QAEhD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG;QACb,WAAW,EACT,OAAO,EAAE,WAAW,IAAI,qBAAqB,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;QACnE,IAAI,EAAE,aAAsB;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI,IAAI,EAAE;KAChD,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,IAAA,wCAAQ,EAC5B,4BAAuB,EACvB,OAAO,CAAC,QAAQ,CACjB,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,IAAI,OAAO,KAAK,SAAS;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,2BAA2B,CAAC,CAAC;IAC7E,QAAQ,CAAC,gBAAgB,GAAG,MAAM,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAmB;IACjD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAiC,CAAC;IAC7D,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,QAAQ,GACZ,OAAO,OAAO,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ;QAC5C,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ;QAC3B,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ;QACtC,CAAC,CAAC,OAAO,CAAC,YAAY;QACtB,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,YAAY,GAChB,OAAO,OAAO,CAAC,QAAQ,EAAE,MAAM,KAAK,QAAQ;QAC1C,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;QACzB,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,OAAwB,EACxB,YAAiC,EACjC,QAA4B,EAC5B,MAAgC;IAEhC,MAAM,KAAK,GAAgC;QACzC,GAAG,IAAA,iCAAiB,EAClB,QAAQ,EACR,OAAO,CAAC,cAAc,EACtB,IAAA,2BAAkB,EAAC,YAAY,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE,CAC1D;QACD,MAAM;QACN,oBAAoB,EAAE,OAAO,CAAC,cAAc;QAI5C,gBAAgB,EAAE,IAAA,0CAAyB,EAAC,YAAY,CAAC;QACzD,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;IACF,IAAI,OAAO,CAAC,YAAY;QAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,4BAAuB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClE,MAAM,KAAK,CAAC,sBAAsB,CAChC,QAAQ,CAAC,GAAG,EACZ,QAAQ,CAAC,gBAAiB,CAAC,WAAW,EACtC,KAAK,CACN,CAAC;IACF,MAAM,IAAA,2CAA2B,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAwB;IACtD,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAQ,EAC7B,4BAAuB,EACvB,OAAO,CAAC,QAAQ,CACjB,CAAC,OAAO,EAAE,CAAC;IACZ,MAAM,kBAAkB,GAAG,QAAQ,EAAE,gBAAgB,CAAC;IACtD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAAE,OAAO;IAC7E,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAClD,OAAO,EACP,QAAQ,EACR,kBAAkB,CACnB,CAAC;IACF,MAAM,MAAM,GACV,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,gCAAe,CAAC,CAAC,CAAC,8BAAa,CAAC;IAEvE,MAAM,0BAA0B,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,gCAAgC,CAAC,YAAY,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC;IACvD,MAAM,wBAAwB,GAC5B,YAAY,CAAC,MAAM,KAAK,UAAU;QAClC,CAAC,MAAM,8BAA8B,CACnC,OAAO,CAAC,OAAO,EACf,QAAQ,CAAC,SAAS,EAClB,MAAM,CACP,CAAC,CAAC;IAEL,MAAM,IAAA,wCAAQ,EAAC,4BAAuB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAC1E,QAAQ,CAAC,GAAG,EACZ,QAAQ,CAAC,gBAAiB,CAAC,WAAW,EACtC,EAAE,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CACnD,CAAC;IACF,IAAA,gCAAmB,EAAC,2BAA2B,EAAE;QAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM;QACN,MAAM;QACN,oBAAoB,EAAE,OAAO,CAAC,cAAc;QAC5C,wBAAwB;QACxB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,OAAwB,EACxB,QAA4B,EAC5B,kBAA6D;IAE7D,MAAM,YAAY,GAAG,MAAM,IAAA,wBAAe,GAAE,CAAC,aAAa,CAAC,QAAQ,CACjE,OAAO,CAAC,cAAc,CACvB,CAAC;IACF,IACE,YAAY,CAAC,MAAM,KAAK,8BAAa;QACrC,YAAY,CAAC,MAAM,KAAK,gCAAe;QAEvC,OAAO,YAAY,CAAC;IAEtB,MAAM,IAAA,wCAAQ,EACZ,4BAAuB,EACvB,OAAO,CAAC,QAAQ,CACjB,CAAC,sBAAsB,CACtB,QAAQ,CAAC,GAAG,EACZ,QAAQ,CAAC,gBAAiB,CAAC,WAAW,EACtC,EAAE,gBAAgB,EAAE,kBAAkB,IAAI,IAAI,EAAE,CACjD,CAAC;IACF,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7D,CAAC;AAGM,KAAK,UAAU,8BAA8B,CAClD,KAAmB;IAEnB,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,IAAA,8CAA2B,EAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CACvD,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;AACJ,CAAC;AAGM,KAAK,UAAU,4BAA4B,CAChD,KAAmB;IAEnB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAiC,CAAC;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5C,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO;IACtD,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,4BAAuB,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACtC,IACE,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,EAAE;QAC/C,OAAO,CAAC,gBAAgB,EAAE,IAAI,KAAK,UAAU;QAE7C,OAAO;IACT,IAAI,OAAO,CAAC,gBAAgB,CAAC,WAAW,KAAK,OAAO,CAAC,QAAQ,EAAE,WAAW;QACxE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE;QAClD,gBAAgB,EAAE,IAAI;QACtB,uBAAuB,EAAE,IAAI;KAC9B,CAAC,CAAC;IACH,IAAI,OAAO,KAAK,SAAS;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,2BAA2B,CAAC,CAAC;IAC7E,MAAM,IAAA,oDAA+B,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,OAAgC,EAChC,SAAwB,EACxB,MAAqB;IAErB,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,SAAS,GAAG,IAAA,iBAAS,EAAC,KAAK,CAAC,CAAC;IACnC,MAAM,qBAAqB,GAAG,IAAA,wCAAQ,EAAC,0BAAqB,CAAC,CAAC;IAG9D,IAAI,MAAM,qBAAqB,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,qBAAqB,CAAC,MAAM,CAAC;QACjC;YACE,MAAM,EAAE,SAAS;YACjB,SAAS;YACT,kBAAkB,EAAE,IAAI;YACxB,MAAM;YACN,UAAU,EAAE,IAAI,IAAI,EAAE;SACvB;KACF,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
|