@antelopejs/dms-saas 0.3.8 → 0.3.9
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 +1 -0
- package/dist/routes/tenant/index.js +1 -0
- package/dist/routes/tenant/index.js.map +1 -1
- package/dist/routes/tenant/tenant-plan-checkout.d.ts +5 -0
- package/dist/routes/tenant/tenant-plan-checkout.js +220 -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.js +2 -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 +2 -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 +1 -0
- package/dist/stripe/workspace-checkout.js +35 -1
- 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/i18n/locales/saas-en-GB.json +6 -2
- package/frontend-vue/i18n/locales/saas-fr-FR.json +6 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -177,6 +177,51 @@ the catalogue has no free plan, nothing is attached and a warning is logged.
|
|
|
177
177
|
Once attached, the plan's permissions cap the workspace's members like any
|
|
178
178
|
other plan (see [Tenant owner permissions](#tenant-owner-permissions)).
|
|
179
179
|
|
|
180
|
+
## Stripe API version and webhooks
|
|
181
|
+
|
|
182
|
+
Every Stripe request is made with API version `2025-08-27.basil`, the version
|
|
183
|
+
the installed `stripe` SDK is generated for (`STRIPE_API_VERSION` in
|
|
184
|
+
`src/stripe/client.ts`; the build fails if the two drift apart).
|
|
185
|
+
|
|
186
|
+
A webhook endpoint renders its events in its **own** API version, set in the
|
|
187
|
+
Stripe Dashboard (Developers → Webhooks → the endpoint → API version), not in
|
|
188
|
+
the version of the requests. Set every endpoint that targets
|
|
189
|
+
`/api/saas/webhooks/stripe` to `2025-08-27.basil`. Until then dms-saas still
|
|
190
|
+
accepts events rendered in older versions: the fields basil moved — the
|
|
191
|
+
subscription billing period (now on each subscription item), the invoice's
|
|
192
|
+
subscription (`parent.subscription_details`), invoice and credit note taxes
|
|
193
|
+
(`total_taxes`), and the credit note refund (`refunds`) — are read from their
|
|
194
|
+
basil location first and from their older one second.
|
|
195
|
+
|
|
196
|
+
Checkout Sessions opt out of Stripe Managed Payments
|
|
197
|
+
(`managed_payments[enabled]=false`). An account that enabled Managed Payments
|
|
198
|
+
applies it to every session by default, but dms-saas is its own merchant of
|
|
199
|
+
record: it collects tax ids, runs Stripe Tax on its invoices, injects invoice
|
|
200
|
+
items and issues credit notes, none of which a Managed Payments session allows.
|
|
201
|
+
|
|
202
|
+
## Starting a paid plan
|
|
203
|
+
|
|
204
|
+
Moving a workspace without a Stripe subscription to a paid plan opens a Stripe
|
|
205
|
+
Checkout Session. The request is recorded on the subscription as a pending
|
|
206
|
+
checkout before Stripe is called, and the session's completion or expiry
|
|
207
|
+
webhook resolves it. A pending checkout never blocks the owner for good:
|
|
208
|
+
|
|
209
|
+
- when Stripe refuses to open the session (a 4xx answer), the pending
|
|
210
|
+
checkout, the trial it reserved and the Stripe customer it created are
|
|
211
|
+
rolled back, and the request answers
|
|
212
|
+
`422 saas.errors.billing.checkout_rejected`; the owner can retry at once;
|
|
213
|
+
- when Stripe cannot be reached or answers a 5xx, a session may exist, so the
|
|
214
|
+
pending checkout stays and the request answers
|
|
215
|
+
`503 saas.errors.billing.checkout_unavailable`;
|
|
216
|
+
- the next attempt reconciles what it finds: a pending checkout whose recorded
|
|
217
|
+
session has expired, or which never recorded a session within 15 minutes, is
|
|
218
|
+
released and a new session is opened. Its redirect URL only reaches the
|
|
219
|
+
owner once the session is recorded, so an unrecorded session is one nobody
|
|
220
|
+
can pay;
|
|
221
|
+
- a recorded session that is still open answers
|
|
222
|
+
`409 saas.errors.plan.checkout_in_progress`, and any other pending plan
|
|
223
|
+
change `409 saas.errors.plan.change_in_progress`.
|
|
224
|
+
|
|
180
225
|
## Plans and Stripe
|
|
181
226
|
|
|
182
227
|
dms-saas keeps every plan billed through Stripe linked to a Stripe product and
|
|
@@ -10,6 +10,7 @@ const interface_database_decorators_1 = require("@antelopejs/interface-database-
|
|
|
10
10
|
const invoice_line_items_1 = require("@antelopejs/interface-dms-saas/invoice-line-items");
|
|
11
11
|
const invoice_line_items_2 = require("../implementations/dms-saas/invoice-line-items");
|
|
12
12
|
const client_1 = require("../stripe/client");
|
|
13
|
+
const payload_shapes_1 = require("../stripe/payload-shapes");
|
|
13
14
|
const db_1 = require("../db");
|
|
14
15
|
const billing_window_1 = require("./billing-window");
|
|
15
16
|
exports.LINE_KEY_METADATA = "saasLineKey";
|
|
@@ -47,13 +48,11 @@ async function buildInjectionTarget(invoice, tenantId, customerId) {
|
|
|
47
48
|
const subscription = await (0, interface_database_decorators_1.GetModel)(db_1.TenantSubscriptionModel, tenantId).findOne();
|
|
48
49
|
const context = (0, billing_window_1.clipInvoiceUsageWindow)({
|
|
49
50
|
tenantId,
|
|
50
|
-
invoiceId: invoice
|
|
51
|
+
invoiceId: (0, payload_shapes_1.requireInvoiceId)(invoice),
|
|
51
52
|
currency: invoice.currency,
|
|
52
53
|
periodStart: stripeSecondsToDate(invoice.period_start),
|
|
53
54
|
periodEnd: stripeSecondsToDate(invoice.period_end),
|
|
54
|
-
}, subscription,
|
|
55
|
-
? invoice.subscription
|
|
56
|
-
: (invoice.subscription?.id ?? null));
|
|
55
|
+
}, subscription, (0, payload_shapes_1.readInvoiceSubscriptionId)(invoice));
|
|
57
56
|
return context ? { customerId, context } : null;
|
|
58
57
|
}
|
|
59
58
|
async function fetchInjectedLineKeys(invoiceId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injection.js","sourceRoot":"","sources":["../../src/invoice-line-items/injection.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"injection.js","sourceRoot":"","sources":["../../src/invoice-line-items/injection.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ export * from "./billing-self-refund";
|
|
|
3
3
|
export * from "./data-export";
|
|
4
4
|
export * from "./tenant-billing";
|
|
5
5
|
export * from "./tenant-plan";
|
|
6
|
+
export * from "./tenant-plan-checkout";
|
|
6
7
|
export * from "./tenant-plan-ops";
|
|
7
8
|
export * from "./tenant-seats";
|
|
8
9
|
export * from "./workspaces";
|
|
@@ -19,6 +19,7 @@ __exportStar(require("./billing-self-refund"), exports);
|
|
|
19
19
|
__exportStar(require("./data-export"), exports);
|
|
20
20
|
__exportStar(require("./tenant-billing"), exports);
|
|
21
21
|
__exportStar(require("./tenant-plan"), exports);
|
|
22
|
+
__exportStar(require("./tenant-plan-checkout"), exports);
|
|
22
23
|
__exportStar(require("./tenant-plan-ops"), exports);
|
|
23
24
|
__exportStar(require("./tenant-seats"), exports);
|
|
24
25
|
__exportStar(require("./workspaces"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/tenant/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,wDAAsC;AACtC,gDAA8B;AAC9B,mDAAiC;AACjC,gDAA8B;AAC9B,oDAAkC;AAClC,iDAA+B;AAC/B,+CAA6B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/tenant/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,wDAAsC;AACtC,gDAA8B;AAC9B,mDAAiC;AACjC,gDAA8B;AAC9B,yDAAuC;AACvC,oDAAkC;AAClC,iDAA+B;AAC/B,+CAA6B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type TenantSubscription, type TenantSubscriptionModel } from "../../db";
|
|
2
|
+
import { type ChangePlanResult, type PlanChangeRequest } from "./tenant-plan-ops";
|
|
3
|
+
export declare const UNRECORDED_CHECKOUT_TTL_MS: number;
|
|
4
|
+
export declare function releaseAbandonedCheckout(subscription: TenantSubscription, model: TenantSubscriptionModel, now?: Date): Promise<TenantSubscription>;
|
|
5
|
+
export declare function startPaidCheckout(request: PlanChangeRequest): Promise<ChangePlanResult>;
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UNRECORDED_CHECKOUT_TTL_MS = void 0;
|
|
4
|
+
exports.releaseAbandonedCheckout = releaseAbandonedCheckout;
|
|
5
|
+
exports.startPaidCheckout = startPaidCheckout;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const interface_api_1 = require("@antelopejs/interface-api");
|
|
8
|
+
const interface_api_util_1 = require("@antelopejs/interface-api-util");
|
|
9
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
10
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
11
|
+
const tenant_lifecycle_1 = require("@antelopejs/interface-dms/tenant-lifecycle");
|
|
12
|
+
const billing_state_1 = require("../../billing-state");
|
|
13
|
+
const config_1 = require("../../config");
|
|
14
|
+
const db_1 = require("../../db");
|
|
15
|
+
const client_1 = require("../../stripe/client");
|
|
16
|
+
const workspace_checkout_1 = require("../../stripe/workspace-checkout");
|
|
17
|
+
const utils_1 = require("../../utils");
|
|
18
|
+
const complimentary_1 = require("../../workspaces/complimentary");
|
|
19
|
+
const trial_identity_model_1 = require("../../workspaces/db/trial-identity.model");
|
|
20
|
+
const tenant_plan_ops_1 = require("./tenant-plan-ops");
|
|
21
|
+
const HTTP_UNPROCESSABLE = 422;
|
|
22
|
+
const HTTP_SERVICE_UNAVAILABLE = 503;
|
|
23
|
+
const PENDING_PAYMENT_STATUS = "pending_payment";
|
|
24
|
+
const PLACEHOLDER_PLAN_ID = null;
|
|
25
|
+
const CHECKOUT_KIND = "checkout";
|
|
26
|
+
const EXPIRED_SESSION_STATUS = "expired";
|
|
27
|
+
const MS_PER_MINUTE = 60_000;
|
|
28
|
+
const LOG_PREFIX = "[dms-saas:checkout]";
|
|
29
|
+
exports.UNRECORDED_CHECKOUT_TTL_MS = 15 * MS_PER_MINUTE;
|
|
30
|
+
const NO_TRIAL = { days: 0, reservedIdentityId: null };
|
|
31
|
+
function asNonEmptyString(value) {
|
|
32
|
+
return typeof value === "string" && value.trim().length > 0
|
|
33
|
+
? value.trim()
|
|
34
|
+
: null;
|
|
35
|
+
}
|
|
36
|
+
function validateCheckoutRedirectInput(body) {
|
|
37
|
+
const successUrl = asNonEmptyString(body.successUrl);
|
|
38
|
+
const cancelUrl = asNonEmptyString(body.cancelUrl);
|
|
39
|
+
(0, interface_api_util_1.assert)(successUrl && (0, config_1.isAllowedRedirectUrl)(successUrl), tenant_plan_ops_1.HTTP_BAD_REQUEST, "saas.errors.billing.invalid_return_url");
|
|
40
|
+
(0, interface_api_util_1.assert)(cancelUrl && (0, config_1.isAllowedRedirectUrl)(cancelUrl), tenant_plan_ops_1.HTTP_BAD_REQUEST, "saas.errors.billing.invalid_return_url");
|
|
41
|
+
return { successUrl, cancelUrl };
|
|
42
|
+
}
|
|
43
|
+
async function resolveCheckoutTrial(request) {
|
|
44
|
+
const { newPlan, user, tenantId } = request;
|
|
45
|
+
if (!newPlan.trialDays || newPlan.trialDays <= 0)
|
|
46
|
+
return NO_TRIAL;
|
|
47
|
+
const trialConsumptionModel = (0, interface_database_decorators_1.GetModel)(db_1.TrialConsumptionModel);
|
|
48
|
+
const emailHash = (0, utils_1.hashEmail)(user.email);
|
|
49
|
+
if (await trialConsumptionModel.existsForIdentity(emailHash, null)) {
|
|
50
|
+
return NO_TRIAL;
|
|
51
|
+
}
|
|
52
|
+
const identities = (0, interface_database_decorators_1.GetModel)(trial_identity_model_1.TrialIdentityModel);
|
|
53
|
+
const id = (0, trial_identity_model_1.trialIdentityId)("email", emailHash);
|
|
54
|
+
if ((await identities.get(id))?.tenantId)
|
|
55
|
+
return NO_TRIAL;
|
|
56
|
+
if (!(await identities.reserve(id, tenantId)))
|
|
57
|
+
return NO_TRIAL;
|
|
58
|
+
return { days: newPlan.trialDays, reservedIdentityId: id };
|
|
59
|
+
}
|
|
60
|
+
async function initializeCheckoutSubscription(request) {
|
|
61
|
+
if (request.subscription)
|
|
62
|
+
return request.subscription;
|
|
63
|
+
await request.tenantSubscriptionModel.insert({
|
|
64
|
+
_id: request.tenantId,
|
|
65
|
+
planId: PLACEHOLDER_PLAN_ID,
|
|
66
|
+
status: PENDING_PAYMENT_STATUS,
|
|
67
|
+
isComplimentary: false,
|
|
68
|
+
paidUsagePeriods: [],
|
|
69
|
+
stripeCustomerId: null,
|
|
70
|
+
stripeSubscriptionId: null,
|
|
71
|
+
stripeCheckoutSessionId: null,
|
|
72
|
+
createdBy: request.user._id,
|
|
73
|
+
createdAt: new Date(),
|
|
74
|
+
updatedAt: new Date(),
|
|
75
|
+
});
|
|
76
|
+
const subscription = await request.tenantSubscriptionModel.get(request.tenantId);
|
|
77
|
+
if (!subscription)
|
|
78
|
+
throw new Error("Checkout subscription acknowledgement requires reconciliation");
|
|
79
|
+
return subscription;
|
|
80
|
+
}
|
|
81
|
+
async function retrieveRecordedSession(subscription, transition) {
|
|
82
|
+
if (!subscription.stripeCheckoutSessionId)
|
|
83
|
+
return null;
|
|
84
|
+
const session = await (0, client_1.getStripeClient)().checkout.sessions.retrieve(subscription.stripeCheckoutSessionId);
|
|
85
|
+
return session.metadata?.operationId === transition.operationId
|
|
86
|
+
? session
|
|
87
|
+
: null;
|
|
88
|
+
}
|
|
89
|
+
function isUnrecordedPastTtl(transition, now) {
|
|
90
|
+
const age = now.getTime() - new Date(transition.requestedAt).getTime();
|
|
91
|
+
return age >= exports.UNRECORDED_CHECKOUT_TTL_MS;
|
|
92
|
+
}
|
|
93
|
+
async function isAbandonedCheckout(subscription, transition, now) {
|
|
94
|
+
const session = await retrieveRecordedSession(subscription, transition);
|
|
95
|
+
if (session)
|
|
96
|
+
return session.status === EXPIRED_SESSION_STATUS;
|
|
97
|
+
return isUnrecordedPastTtl(transition, now);
|
|
98
|
+
}
|
|
99
|
+
async function releaseAbandonedCheckout(subscription, model, now = new Date()) {
|
|
100
|
+
const transition = subscription.domainTransition;
|
|
101
|
+
if (transition?.kind !== CHECKOUT_KIND)
|
|
102
|
+
return subscription;
|
|
103
|
+
if (!(await isAbandonedCheckout(subscription, transition, now))) {
|
|
104
|
+
return subscription;
|
|
105
|
+
}
|
|
106
|
+
logging_1.Logging.Warn(`${LOG_PREFIX} releasing abandoned checkout ${transition.operationId} of tenant ${subscription._id}`);
|
|
107
|
+
const outcome = await model.mutateRevision(subscription, {
|
|
108
|
+
domainTransition: null,
|
|
109
|
+
stripeCheckoutSessionId: null,
|
|
110
|
+
});
|
|
111
|
+
if (outcome !== "applied")
|
|
112
|
+
throw new Error(`Checkout release ${outcome}; reload before retry`);
|
|
113
|
+
const released = await model.get(subscription._id);
|
|
114
|
+
if (!released)
|
|
115
|
+
throw new Error("Subscription vanished during release");
|
|
116
|
+
return released;
|
|
117
|
+
}
|
|
118
|
+
async function attachCheckoutSession(checkout, subscription, model, operationId) {
|
|
119
|
+
await model.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 expireUnusableSession(error) {
|
|
127
|
+
if (!(error instanceof workspace_checkout_1.UnusableCheckoutSessionError))
|
|
128
|
+
return;
|
|
129
|
+
await (0, client_1.getStripeClient)().checkout.sessions.expire(error.sessionId);
|
|
130
|
+
}
|
|
131
|
+
async function rollbackCheckoutAttempt(attempt, model) {
|
|
132
|
+
await model.completeTransition(attempt.subscriptionId, attempt.operationId, {});
|
|
133
|
+
if (attempt.reservedTrialIdentityId) {
|
|
134
|
+
await (0, interface_database_decorators_1.GetModel)(trial_identity_model_1.TrialIdentityModel)
|
|
135
|
+
.releaseUnused(attempt.reservedTrialIdentityId, attempt.tenantId)
|
|
136
|
+
.catch((releaseError) => logging_1.Logging.Warn(`${LOG_PREFIX} failed to release the trial reserved by checkout ${attempt.operationId}`, releaseError));
|
|
137
|
+
}
|
|
138
|
+
if (attempt.createdCustomerId) {
|
|
139
|
+
await (0, workspace_checkout_1.deleteStripeCustomerIfExists)(attempt.createdCustomerId).catch((cleanupError) => logging_1.Logging.Warn(`${LOG_PREFIX} failed to delete unused Stripe customer ${attempt.createdCustomerId}`, cleanupError));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async function failCheckoutAttempt(error, attempt, model) {
|
|
143
|
+
logging_1.Logging.Error(`${LOG_PREFIX} Stripe Checkout failed for tenant ${attempt.tenantId}`, error);
|
|
144
|
+
const isUnusableSession = error instanceof workspace_checkout_1.UnusableCheckoutSessionError;
|
|
145
|
+
if (!(0, workspace_checkout_1.isDefinitiveStripeRejection)(error) && !isUnusableSession) {
|
|
146
|
+
throw new interface_api_1.HTTPResult(HTTP_SERVICE_UNAVAILABLE, "saas.errors.billing.checkout_unavailable");
|
|
147
|
+
}
|
|
148
|
+
await expireUnusableSession(error);
|
|
149
|
+
await rollbackCheckoutAttempt(attempt, model);
|
|
150
|
+
throw new interface_api_1.HTTPResult(HTTP_UNPROCESSABLE, "saas.errors.billing.checkout_rejected");
|
|
151
|
+
}
|
|
152
|
+
async function admitCheckout(request) {
|
|
153
|
+
const model = request.tenantSubscriptionModel;
|
|
154
|
+
const subscription = await releaseAbandonedCheckout(await initializeCheckoutSubscription(request), model);
|
|
155
|
+
(0, interface_api_util_1.assert)(!subscription.domainTransition, tenant_plan_ops_1.HTTP_CONFLICT, subscription.domainTransition?.kind === CHECKOUT_KIND
|
|
156
|
+
? "saas.errors.plan.checkout_in_progress"
|
|
157
|
+
: "saas.errors.plan.change_in_progress");
|
|
158
|
+
const operationId = (0, node_crypto_1.randomUUID)();
|
|
159
|
+
await model.beginTransition(subscription, {
|
|
160
|
+
operationId,
|
|
161
|
+
kind: CHECKOUT_KIND,
|
|
162
|
+
targetPlanId: request.newPlan._id,
|
|
163
|
+
requestedAt: new Date(),
|
|
164
|
+
});
|
|
165
|
+
return {
|
|
166
|
+
subscription,
|
|
167
|
+
operationId,
|
|
168
|
+
tenantId: request.tenantId,
|
|
169
|
+
subscriptionId: subscription._id,
|
|
170
|
+
createdCustomerId: null,
|
|
171
|
+
reservedTrialIdentityId: null,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
async function openCheckoutSession(request, attempt, target) {
|
|
175
|
+
const { existingCustomerId, redirect } = target;
|
|
176
|
+
const trial = await resolveCheckoutTrial(request);
|
|
177
|
+
attempt.reservedTrialIdentityId = trial.reservedIdentityId;
|
|
178
|
+
const customerId = existingCustomerId ??
|
|
179
|
+
(await (0, workspace_checkout_1.createTenantCheckoutCustomer)({
|
|
180
|
+
operationId: attempt.operationId,
|
|
181
|
+
tenantId: request.tenantId,
|
|
182
|
+
ownerEmail: request.user.email,
|
|
183
|
+
}));
|
|
184
|
+
if (!existingCustomerId)
|
|
185
|
+
attempt.createdCustomerId = customerId;
|
|
186
|
+
return (0, workspace_checkout_1.createWorkspaceCheckoutSession)({
|
|
187
|
+
operationId: attempt.operationId,
|
|
188
|
+
tenantId: request.tenantId,
|
|
189
|
+
ownerEmail: request.user.email,
|
|
190
|
+
stripePriceId: target.stripePriceId,
|
|
191
|
+
trialDays: trial.days,
|
|
192
|
+
successUrl: redirect.successUrl,
|
|
193
|
+
cancelUrl: redirect.cancelUrl,
|
|
194
|
+
planId: request.newPlan._id,
|
|
195
|
+
existingCustomerId: customerId,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
async function createAdmittedCheckout(request) {
|
|
199
|
+
const { tenantId, newPlan, body, tenantSubscriptionModel } = request;
|
|
200
|
+
const redirect = validateCheckoutRedirectInput(body);
|
|
201
|
+
const stripePriceId = newPlan.paymentProviderRefs?.stripePriceId;
|
|
202
|
+
(0, interface_api_util_1.assert)(stripePriceId, tenant_plan_ops_1.HTTP_BAD_REQUEST, "saas.errors.plan.no_stripe_price");
|
|
203
|
+
const { subscription, ...attempt } = await admitCheckout(request);
|
|
204
|
+
const checkout = await openCheckoutSession(request, attempt, {
|
|
205
|
+
stripePriceId,
|
|
206
|
+
existingCustomerId: subscription.stripeCustomerId ?? null,
|
|
207
|
+
redirect,
|
|
208
|
+
}).catch((error) => failCheckoutAttempt(error, attempt, tenantSubscriptionModel));
|
|
209
|
+
await attachCheckoutSession(checkout, subscription, tenantSubscriptionModel, attempt.operationId);
|
|
210
|
+
await (0, billing_state_1.recomputeTenantBillingState)(tenantId);
|
|
211
|
+
return {
|
|
212
|
+
...tenant_plan_ops_1.UNCHANGED_RESULT_BASE,
|
|
213
|
+
planId: newPlan._id,
|
|
214
|
+
checkoutUrl: checkout.url,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
async function startPaidCheckout(request) {
|
|
218
|
+
return (0, tenant_lifecycle_1.runTenantLifecycleOperation)(request.tenantId, () => createAdmittedCheckout(request));
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=tenant-plan-checkout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-plan-checkout.js","sourceRoot":"","sources":["../../../src/routes/tenant/tenant-plan-checkout.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,7 +50,6 @@ export declare function loadAndValidateTargetPlan(planModel: PlanModel, planId:
|
|
|
50
50
|
export declare function assertSeatLimit(tenantId: string, plan: Plan): Promise<void>;
|
|
51
51
|
export declare function finalizeImmediateChange(tenantId: string, subscription: TenantSubscription, newPlan: Plan): Promise<void>;
|
|
52
52
|
export declare function isPaidPlan(plan: Plan): boolean;
|
|
53
|
-
export declare function startPaidCheckout(request: PlanChangeRequest): Promise<ChangePlanResult>;
|
|
54
53
|
export declare function insertFreeSubscription(user: User, newPlanId: string, tenantId: string, tenantSubscriptionModel: TenantSubscriptionModel): Promise<ChangePlanResult>;
|
|
55
54
|
export declare function scheduleDowngrade(tenantId: string, subscription: TenantSubscription, newPlan: Plan): Promise<ChangePlanResult>;
|
|
56
55
|
export declare function dropPendingChange(tenantId: string, subscription: TenantSubscription): Promise<ChangePlanResult>;
|
|
@@ -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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"}
|
|
@@ -28,6 +28,7 @@ const billing_identity_1 = require("../../workspaces/billing-identity");
|
|
|
28
28
|
const complimentary_1 = require("../../workspaces/complimentary");
|
|
29
29
|
const default_plan_1 = require("../../workspaces/default-plan");
|
|
30
30
|
const tenant_plan_ops_1 = require("./tenant-plan-ops");
|
|
31
|
+
const tenant_plan_checkout_1 = require("./tenant-plan-checkout");
|
|
31
32
|
function startsPaidCheckout(newPlan, subscription) {
|
|
32
33
|
return (0, tenant_plan_ops_1.isPaidPlan)(newPlan) && !subscription?.stripeSubscriptionId;
|
|
33
34
|
}
|
|
@@ -131,7 +132,7 @@ class SaasTenantPlanController extends (0, interface_api_1.Controller)("/api/saa
|
|
|
131
132
|
async routePlanChange(request) {
|
|
132
133
|
const { tenantId, user, newPlan, subscription, tenantSubscriptionModel } = request;
|
|
133
134
|
if (startsPaidCheckout(newPlan, subscription)) {
|
|
134
|
-
return (0,
|
|
135
|
+
return (0, tenant_plan_checkout_1.startPaidCheckout)(request);
|
|
135
136
|
}
|
|
136
137
|
if (!subscription) {
|
|
137
138
|
return (0, tenant_plan_ops_1.insertFreeSubscription)(user, newPlan._id, tenantId, tenantSubscriptionModel);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-plan.js","sourceRoot":"","sources":["../../../src/routes/tenant/tenant-plan.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6DAOmC;AACnC,uEAAwD;AACxD,6FAAkE;AAClE,qDAA2D;AAC3D,6DAG0C;AAC1C,6EAA8E;AAC9E,uFAAkF;AAClF,2EAA6E;AAE7E,iCAQkB;AAClB,qDAAyD;AACzD,uCAIqB;AACrB,wEAAqF;AACrF,kEAIwC;AACxC,gEAA0E;AAE1E,
|
|
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;
|