@reorderjs/reorder 1.0.1
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/.medusa/server/scripts/reset-reorder-plugin-data.js +175 -0
- package/.medusa/server/src/admin/index.js +17889 -0
- package/.medusa/server/src/admin/index.mjs +17871 -0
- package/.medusa/server/src/admin/types/activity-log.js +10 -0
- package/.medusa/server/src/admin/types/analytics.js +17 -0
- package/.medusa/server/src/admin/types/cancellation.js +27 -0
- package/.medusa/server/src/admin/types/dunning.js +19 -0
- package/.medusa/server/src/admin/types/plan-offer.js +25 -0
- package/.medusa/server/src/admin/types/renewal.js +23 -0
- package/.medusa/server/src/admin/types/subscription.js +22 -0
- package/.medusa/server/src/api/admin/cancellations/[id]/apply-offer/route.js +30 -0
- package/.medusa/server/src/api/admin/cancellations/[id]/finalize/route.js +31 -0
- package/.medusa/server/src/api/admin/cancellations/[id]/reason/route.js +31 -0
- package/.medusa/server/src/api/admin/cancellations/[id]/route.js +20 -0
- package/.medusa/server/src/api/admin/cancellations/middlewares.js +55 -0
- package/.medusa/server/src/api/admin/cancellations/route.js +20 -0
- package/.medusa/server/src/api/admin/cancellations/utils.js +116 -0
- package/.medusa/server/src/api/admin/cancellations/validators.js +130 -0
- package/.medusa/server/src/api/admin/dunning/[id]/mark-recovered/route.js +27 -0
- package/.medusa/server/src/api/admin/dunning/[id]/mark-unrecovered/route.js +27 -0
- package/.medusa/server/src/api/admin/dunning/[id]/retry-now/route.js +28 -0
- package/.medusa/server/src/api/admin/dunning/[id]/retry-schedule/route.js +29 -0
- package/.medusa/server/src/api/admin/dunning/[id]/route.js +20 -0
- package/.medusa/server/src/api/admin/dunning/middlewares.js +60 -0
- package/.medusa/server/src/api/admin/dunning/route.js +20 -0
- package/.medusa/server/src/api/admin/dunning/utils.js +70 -0
- package/.medusa/server/src/api/admin/dunning/validators.js +81 -0
- package/.medusa/server/src/api/admin/orders/[id]/subscription-summary/route.js +10 -0
- package/.medusa/server/src/api/admin/orders/utils.js +8 -0
- package/.medusa/server/src/api/admin/plugin/route.js +7 -0
- package/.medusa/server/src/api/admin/renewals/[id]/approve-changes/route.js +27 -0
- package/.medusa/server/src/api/admin/renewals/[id]/force/route.js +30 -0
- package/.medusa/server/src/api/admin/renewals/[id]/reject-changes/route.js +27 -0
- package/.medusa/server/src/api/admin/renewals/[id]/route.js +10 -0
- package/.medusa/server/src/api/admin/renewals/middlewares.js +61 -0
- package/.medusa/server/src/api/admin/renewals/route.js +10 -0
- package/.medusa/server/src/api/admin/renewals/utils.js +60 -0
- package/.medusa/server/src/api/admin/renewals/validators.js +62 -0
- package/.medusa/server/src/api/admin/subscription-analytics/export/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-analytics/kpis/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-analytics/middlewares.js +45 -0
- package/.medusa/server/src/api/admin/subscription-analytics/rebuild/route.js +75 -0
- package/.medusa/server/src/api/admin/subscription-analytics/trends/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-analytics/utils.js +81 -0
- package/.medusa/server/src/api/admin/subscription-analytics/validators.js +76 -0
- package/.medusa/server/src/api/admin/subscription-logs/[id]/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-logs/middlewares.js +66 -0
- package/.medusa/server/src/api/admin/subscription-logs/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-logs/utils.js +84 -0
- package/.medusa/server/src/api/admin/subscription-logs/validators.js +32 -0
- package/.medusa/server/src/api/admin/subscription-offers/[id]/route.js +22 -0
- package/.medusa/server/src/api/admin/subscription-offers/[id]/toggle/route.js +17 -0
- package/.medusa/server/src/api/admin/subscription-offers/middlewares.js +58 -0
- package/.medusa/server/src/api/admin/subscription-offers/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-offers/utils.js +41 -0
- package/.medusa/server/src/api/admin/subscription-offers/validators.js +112 -0
- package/.medusa/server/src/api/admin/subscription-settings/middlewares.js +15 -0
- package/.medusa/server/src/api/admin/subscription-settings/route.js +33 -0
- package/.medusa/server/src/api/admin/subscription-settings/utils.js +109 -0
- package/.medusa/server/src/api/admin/subscription-settings/validators.js +74 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/cancel/route.js +18 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/logs/route.js +20 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/pause/route.js +18 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/resume/route.js +18 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/route.js +10 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/schedule-plan-change/route.js +26 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/update-shipping-address/route.js +27 -0
- package/.medusa/server/src/api/admin/subscriptions/middlewares.js +79 -0
- package/.medusa/server/src/api/admin/subscriptions/route.js +10 -0
- package/.medusa/server/src/api/admin/subscriptions/utils.js +42 -0
- package/.medusa/server/src/api/admin/subscriptions/validators.js +76 -0
- package/.medusa/server/src/api/middlewares.js +32 -0
- package/.medusa/server/src/api/store/carts/[id]/subscribe/route.js +18 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/[id]/cancellation/route.js +37 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/route.js +10 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/utils.js +104 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/validators.js +13 -0
- package/.medusa/server/src/api/store/plugin/route.js +7 -0
- package/.medusa/server/src/jobs/process-analytics-daily-snapshots.js +149 -0
- package/.medusa/server/src/jobs/process-cancellation-operational-metrics.js +102 -0
- package/.medusa/server/src/jobs/process-dunning-retries.js +249 -0
- package/.medusa/server/src/jobs/process-renewal-cycles.js +180 -0
- package/.medusa/server/src/links/cancellation-subscription.js +13 -0
- package/.medusa/server/src/links/renewal-order.js +12 -0
- package/.medusa/server/src/links/renewal-subscription.js +13 -0
- package/.medusa/server/src/links/subscription-cart.js +12 -0
- package/.medusa/server/src/links/subscription-customer.js +13 -0
- package/.medusa/server/src/links/subscription-order.js +13 -0
- package/.medusa/server/src/links/subscription-product.js +13 -0
- package/.medusa/server/src/links/subscription-variant.js +13 -0
- package/.medusa/server/src/modules/activity-log/index.js +13 -0
- package/.medusa/server/src/modules/activity-log/migrations/Migration20260401204521.js +24 -0
- package/.medusa/server/src/modules/activity-log/migrations/Migration20260405112500.js +16 -0
- package/.medusa/server/src/modules/activity-log/models/subscription-log.js +52 -0
- package/.medusa/server/src/modules/activity-log/service.js +13 -0
- package/.medusa/server/src/modules/activity-log/types/index.js +33 -0
- package/.medusa/server/src/modules/activity-log/utils/admin-query.js +261 -0
- package/.medusa/server/src/modules/activity-log/utils/normalize-log-event.js +169 -0
- package/.medusa/server/src/modules/analytics/constants.js +8 -0
- package/.medusa/server/src/modules/analytics/index.js +13 -0
- package/.medusa/server/src/modules/analytics/migrations/Migration20260402183116.js +27 -0
- package/.medusa/server/src/modules/analytics/models/subscription-metrics-daily.js +65 -0
- package/.medusa/server/src/modules/analytics/service.js +13 -0
- package/.medusa/server/src/modules/analytics/utils/admin-query.js +632 -0
- package/.medusa/server/src/modules/analytics/utils/data-quality.js +101 -0
- package/.medusa/server/src/modules/analytics/utils/observability.js +127 -0
- package/.medusa/server/src/modules/cancellation/index.js +13 -0
- package/.medusa/server/src/modules/cancellation/migrations/Migration20260401143914.js +34 -0
- package/.medusa/server/src/modules/cancellation/migrations/Migration20260405112000.js +14 -0
- package/.medusa/server/src/modules/cancellation/models/cancellation-case.js +52 -0
- package/.medusa/server/src/modules/cancellation/models/retention-offer-event.js +47 -0
- package/.medusa/server/src/modules/cancellation/service.js +15 -0
- package/.medusa/server/src/modules/cancellation/types/index.js +43 -0
- package/.medusa/server/src/modules/cancellation/utils/admin-query.js +530 -0
- package/.medusa/server/src/modules/cancellation/utils/audit.js +21 -0
- package/.medusa/server/src/modules/cancellation/utils/errors.js +31 -0
- package/.medusa/server/src/modules/cancellation/utils/observability.js +77 -0
- package/.medusa/server/src/modules/cancellation/utils/operational-metrics.js +131 -0
- package/.medusa/server/src/modules/cancellation/utils/retention-offer-policy.js +31 -0
- package/.medusa/server/src/modules/dunning/index.js +13 -0
- package/.medusa/server/src/modules/dunning/migrations/Migration20260330190157.js +36 -0
- package/.medusa/server/src/modules/dunning/models/dunning-attempt.js +48 -0
- package/.medusa/server/src/modules/dunning/models/dunning-case.js +61 -0
- package/.medusa/server/src/modules/dunning/service.js +15 -0
- package/.medusa/server/src/modules/dunning/types/index.js +19 -0
- package/.medusa/server/src/modules/dunning/utils/admin-query.js +548 -0
- package/.medusa/server/src/modules/dunning/utils/errors.js +40 -0
- package/.medusa/server/src/modules/dunning/utils/observability.js +109 -0
- package/.medusa/server/src/modules/dunning/utils/retry-schedule.js +47 -0
- package/.medusa/server/src/modules/dunning/utils/scheduler-query.js +42 -0
- package/.medusa/server/src/modules/plan-offer/index.js +13 -0
- package/.medusa/server/src/modules/plan-offer/migrations/Migration20260329104245.js +22 -0
- package/.medusa/server/src/modules/plan-offer/migrations/Migration20260329153000.js +25 -0
- package/.medusa/server/src/modules/plan-offer/models/plan-offer.js +35 -0
- package/.medusa/server/src/modules/plan-offer/service.js +13 -0
- package/.medusa/server/src/modules/plan-offer/types/index.js +26 -0
- package/.medusa/server/src/modules/plan-offer/utils/admin-query.js +429 -0
- package/.medusa/server/src/modules/plan-offer/utils/effective-config.js +84 -0
- package/.medusa/server/src/modules/plan-offer/utils/errors.js +55 -0
- package/.medusa/server/src/modules/renewal/index.js +13 -0
- package/.medusa/server/src/modules/renewal/migrations/Migration20260329185930.js +34 -0
- package/.medusa/server/src/modules/renewal/models/renewal-attempt.js +49 -0
- package/.medusa/server/src/modules/renewal/models/renewal-cycle.js +56 -0
- package/.medusa/server/src/modules/renewal/service.js +15 -0
- package/.medusa/server/src/modules/renewal/types/index.js +23 -0
- package/.medusa/server/src/modules/renewal/utils/admin-query.js +450 -0
- package/.medusa/server/src/modules/renewal/utils/errors.js +39 -0
- package/.medusa/server/src/modules/renewal/utils/observability.js +89 -0
- package/.medusa/server/src/modules/renewal/utils/scheduler-query.js +48 -0
- package/.medusa/server/src/modules/renewal/utils/upcoming-cycle.js +54 -0
- package/.medusa/server/src/modules/settings/index.js +13 -0
- package/.medusa/server/src/modules/settings/migrations/Migration20260403121004.js +17 -0
- package/.medusa/server/src/modules/settings/migrations/Migration20260403132519.js +17 -0
- package/.medusa/server/src/modules/settings/models/subscription-settings.js +32 -0
- package/.medusa/server/src/modules/settings/service.js +82 -0
- package/.medusa/server/src/modules/settings/types.js +15 -0
- package/.medusa/server/src/modules/settings/utils/audit.js +43 -0
- package/.medusa/server/src/modules/settings/utils/normalize-settings.js +99 -0
- package/.medusa/server/src/modules/subscription/index.js +13 -0
- package/.medusa/server/src/modules/subscription/migrations/Migration20260327143452.js +24 -0
- package/.medusa/server/src/modules/subscription/migrations/Migration20260329194835.js +16 -0
- package/.medusa/server/src/modules/subscription/models/subscription.js +64 -0
- package/.medusa/server/src/modules/subscription/service.js +13 -0
- package/.medusa/server/src/modules/subscription/types/index.js +17 -0
- package/.medusa/server/src/modules/subscription/utils/admin-query.js +465 -0
- package/.medusa/server/src/modules/subscription/utils/errors.js +28 -0
- package/.medusa/server/src/subscription-flows/create-subscription-from-cart.js +178 -0
- package/.medusa/server/src/workflows/apply-retention-offer.js +52 -0
- package/.medusa/server/src/workflows/approve-renewal-changes.js +61 -0
- package/.medusa/server/src/workflows/cancel-subscription.js +64 -0
- package/.medusa/server/src/workflows/create-or-upsert-plan-offer.js +11 -0
- package/.medusa/server/src/workflows/ensure-next-renewal-cycle.js +11 -0
- package/.medusa/server/src/workflows/finalize-cancellation.js +88 -0
- package/.medusa/server/src/workflows/force-renewal-cycle.js +11 -0
- package/.medusa/server/src/workflows/index.js +79 -0
- package/.medusa/server/src/workflows/mark-dunning-recovered.js +11 -0
- package/.medusa/server/src/workflows/mark-dunning-unrecovered.js +11 -0
- package/.medusa/server/src/workflows/pause-subscription.js +61 -0
- package/.medusa/server/src/workflows/process-renewal-cycle.js +43 -0
- package/.medusa/server/src/workflows/rebuild-analytics-daily-snapshots.js +13 -0
- package/.medusa/server/src/workflows/reject-renewal-changes.js +61 -0
- package/.medusa/server/src/workflows/resume-subscription.js +76 -0
- package/.medusa/server/src/workflows/run-dunning-retry.js +23 -0
- package/.medusa/server/src/workflows/schedule-subscription-plan-change.js +57 -0
- package/.medusa/server/src/workflows/start-cancellation-case.js +58 -0
- package/.medusa/server/src/workflows/start-dunning.js +11 -0
- package/.medusa/server/src/workflows/steps/apply-retention-offer.js +200 -0
- package/.medusa/server/src/workflows/steps/approve-renewal-changes.js +48 -0
- package/.medusa/server/src/workflows/steps/cancel-subscription.js +48 -0
- package/.medusa/server/src/workflows/steps/create-initial-renewal-cycle.js +6 -0
- package/.medusa/server/src/workflows/steps/create-subscription-log-event.js +61 -0
- package/.medusa/server/src/workflows/steps/create-subscription-record.js +56 -0
- package/.medusa/server/src/workflows/steps/ensure-next-renewal-cycle.js +151 -0
- package/.medusa/server/src/workflows/steps/finalize-cancellation.js +161 -0
- package/.medusa/server/src/workflows/steps/force-renewal-cycle.js +120 -0
- package/.medusa/server/src/workflows/steps/link-subscription-commerce-entities.js +44 -0
- package/.medusa/server/src/workflows/steps/mark-dunning-recovered.js +72 -0
- package/.medusa/server/src/workflows/steps/mark-dunning-unrecovered.js +53 -0
- package/.medusa/server/src/workflows/steps/normalize-analytics-rebuild-range.js +59 -0
- package/.medusa/server/src/workflows/steps/pause-subscription.js +50 -0
- package/.medusa/server/src/workflows/steps/process-renewal-cycle.js +641 -0
- package/.medusa/server/src/workflows/steps/rebuild-analytics-daily-snapshots.js +519 -0
- package/.medusa/server/src/workflows/steps/reject-renewal-changes.js +48 -0
- package/.medusa/server/src/workflows/steps/resume-subscription.js +45 -0
- package/.medusa/server/src/workflows/steps/run-dunning-retry.js +592 -0
- package/.medusa/server/src/workflows/steps/schedule-subscription-plan-change.js +81 -0
- package/.medusa/server/src/workflows/steps/shared-cancellation-log.js +3 -0
- package/.medusa/server/src/workflows/steps/shared-plan-offer.js +280 -0
- package/.medusa/server/src/workflows/steps/shared-renewal-approval.js +34 -0
- package/.medusa/server/src/workflows/steps/start-cancellation-case.js +147 -0
- package/.medusa/server/src/workflows/steps/start-dunning.js +237 -0
- package/.medusa/server/src/workflows/steps/toggle-plan-offer.js +33 -0
- package/.medusa/server/src/workflows/steps/update-cancellation-reason.js +95 -0
- package/.medusa/server/src/workflows/steps/update-dunning-retry-schedule.js +91 -0
- package/.medusa/server/src/workflows/steps/update-plan-offer.js +51 -0
- package/.medusa/server/src/workflows/steps/update-subscription-settings.js +91 -0
- package/.medusa/server/src/workflows/steps/update-subscription-shipping-address.js +54 -0
- package/.medusa/server/src/workflows/steps/upsert-plan-offer.js +48 -0
- package/.medusa/server/src/workflows/steps/validate-subscription-cart.js +280 -0
- package/.medusa/server/src/workflows/toggle-plan-offer.js +11 -0
- package/.medusa/server/src/workflows/update-cancellation-reason.js +53 -0
- package/.medusa/server/src/workflows/update-dunning-retry-schedule.js +11 -0
- package/.medusa/server/src/workflows/update-plan-offer.js +11 -0
- package/.medusa/server/src/workflows/update-subscription-settings.js +11 -0
- package/.medusa/server/src/workflows/update-subscription-shipping-address.js +99 -0
- package/.medusa/server/src/workflows/utils/analytics-incremental.js +24 -0
- package/.medusa/server/src/workflows/utils/date-output.js +13 -0
- package/.medusa/server/src/workflows/utils/subscription-settings.js +13 -0
- package/LICENSE +21 -0
- package/README.md +200 -0
- package/package.json +73 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRenewalCorrelationId = createRenewalCorrelationId;
|
|
4
|
+
exports.classifyRenewalFailure = classifyRenewalFailure;
|
|
5
|
+
exports.isAlertableRenewalFailure = isAlertableRenewalFailure;
|
|
6
|
+
exports.getRenewalErrorMessage = getRenewalErrorMessage;
|
|
7
|
+
exports.logRenewalEvent = logRenewalEvent;
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
function createRenewalCorrelationId(prefix) {
|
|
10
|
+
return `${prefix}-${(0, crypto_1.randomUUID)()}`;
|
|
11
|
+
}
|
|
12
|
+
function classifyRenewalFailure(error) {
|
|
13
|
+
const message = getRenewalErrorMessage(error).toLowerCase();
|
|
14
|
+
if (message.includes("already processing")) {
|
|
15
|
+
return "already_processing";
|
|
16
|
+
}
|
|
17
|
+
if (message.includes("duplicate execution")) {
|
|
18
|
+
return "duplicate_execution";
|
|
19
|
+
}
|
|
20
|
+
if (message.includes("isn't eligible for renewal")) {
|
|
21
|
+
return "subscription_not_eligible";
|
|
22
|
+
}
|
|
23
|
+
if (message.includes("can't renew from status")) {
|
|
24
|
+
return "subscription_not_eligible";
|
|
25
|
+
}
|
|
26
|
+
if (message.includes("requires approval") ||
|
|
27
|
+
message.includes("requires approved changes")) {
|
|
28
|
+
return "approval_blocked";
|
|
29
|
+
}
|
|
30
|
+
if (message.includes("no active subscription offer") ||
|
|
31
|
+
message.includes("frequency") && message.includes("not allowed")) {
|
|
32
|
+
return "offer_policy_blocked";
|
|
33
|
+
}
|
|
34
|
+
if (message.includes("renewal order creation failed") ||
|
|
35
|
+
message.includes("missing 'cart_id'")) {
|
|
36
|
+
return "order_creation_failed";
|
|
37
|
+
}
|
|
38
|
+
return "unexpected_error";
|
|
39
|
+
}
|
|
40
|
+
function isAlertableRenewalFailure(kind) {
|
|
41
|
+
return !["already_processing", "duplicate_execution"].includes(kind);
|
|
42
|
+
}
|
|
43
|
+
function getRenewalErrorMessage(error) {
|
|
44
|
+
const direct = getNestedMessage(error);
|
|
45
|
+
if (direct) {
|
|
46
|
+
return direct;
|
|
47
|
+
}
|
|
48
|
+
return "Renewal processing failed";
|
|
49
|
+
}
|
|
50
|
+
function getNestedMessage(value) {
|
|
51
|
+
if (!value) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
if (typeof value === "string") {
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
if (value instanceof Error) {
|
|
58
|
+
const causeMessage = getNestedMessage(value.cause);
|
|
59
|
+
return value.message || causeMessage || null;
|
|
60
|
+
}
|
|
61
|
+
if (typeof value === "object") {
|
|
62
|
+
const record = value;
|
|
63
|
+
const candidates = [
|
|
64
|
+
record.message,
|
|
65
|
+
record.error,
|
|
66
|
+
record.details,
|
|
67
|
+
record.cause,
|
|
68
|
+
record.response?.data,
|
|
69
|
+
record.response?.message,
|
|
70
|
+
record.data?.message,
|
|
71
|
+
record.body?.message,
|
|
72
|
+
];
|
|
73
|
+
for (const candidate of candidates) {
|
|
74
|
+
const nested = getNestedMessage(candidate);
|
|
75
|
+
if (nested) {
|
|
76
|
+
return nested;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
function logRenewalEvent(logger, level, payload) {
|
|
83
|
+
const line = JSON.stringify({
|
|
84
|
+
domain: "renewals",
|
|
85
|
+
...payload,
|
|
86
|
+
});
|
|
87
|
+
logger[level](line);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3JlbmV3YWwvdXRpbHMvb2JzZXJ2YWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTBDQSxnRUFFQztBQUVELHdEQXlDQztBQUVELDhEQUVDO0FBRUQsd0RBUUM7QUEwQ0QsMENBV0M7QUExSkQsbUNBQW1DO0FBMENuQyxTQUFnQiwwQkFBMEIsQ0FBQyxNQUFjO0lBQ3ZELE9BQU8sR0FBRyxNQUFNLElBQUksSUFBQSxtQkFBVSxHQUFFLEVBQUUsQ0FBQTtBQUNwQyxDQUFDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQUMsS0FBYztJQUNuRCxNQUFNLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUUzRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBQzNDLE9BQU8sb0JBQW9CLENBQUE7SUFDN0IsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7UUFDNUMsT0FBTyxxQkFBcUIsQ0FBQTtJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztRQUNuRCxPQUFPLDJCQUEyQixDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO1FBQ2hELE9BQU8sMkJBQTJCLENBQUE7SUFDcEMsQ0FBQztJQUVELElBQ0UsT0FBTyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztRQUNyQyxPQUFPLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLEVBQzdDLENBQUM7UUFDRCxPQUFPLGtCQUFrQixDQUFBO0lBQzNCLENBQUM7SUFFRCxJQUNFLE9BQU8sQ0FBQyxR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
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listDueRenewalCyclesForProcessing = listDueRenewalCyclesForProcessing;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const types_1 = require("../types");
|
|
6
|
+
const schedulerCycleFields = [
|
|
7
|
+
"id",
|
|
8
|
+
"subscription_id",
|
|
9
|
+
"scheduled_for",
|
|
10
|
+
"status",
|
|
11
|
+
"approval_required",
|
|
12
|
+
"approval_status",
|
|
13
|
+
];
|
|
14
|
+
function isApprovalEligible(record) {
|
|
15
|
+
if (!record.approval_required) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
return record.approval_status === types_1.RenewalApprovalStatus.APPROVED;
|
|
19
|
+
}
|
|
20
|
+
async function listDueRenewalCyclesForProcessing(container, input) {
|
|
21
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
22
|
+
const now = input.now ?? new Date();
|
|
23
|
+
const { data, metadata: { count = 0, take = input.limit, skip = input.offset } = {}, } = await query.graph({
|
|
24
|
+
entity: "renewal_cycle",
|
|
25
|
+
fields: [...schedulerCycleFields],
|
|
26
|
+
filters: {
|
|
27
|
+
status: [types_1.RenewalCycleStatus.SCHEDULED, types_1.RenewalCycleStatus.FAILED],
|
|
28
|
+
scheduled_for: {
|
|
29
|
+
$lte: now,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
pagination: {
|
|
33
|
+
take: input.limit,
|
|
34
|
+
skip: input.offset,
|
|
35
|
+
order: {
|
|
36
|
+
scheduled_for: "ASC",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
const cycles = data.filter(isApprovalEligible);
|
|
41
|
+
return {
|
|
42
|
+
cycles,
|
|
43
|
+
count,
|
|
44
|
+
limit: take,
|
|
45
|
+
offset: skip,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcmVuZXdhbC91dGlscy9zY2hlZHVsZXItcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4Q0EsOEVBb0NDO0FBakZELHFEQUFxRTtBQUNyRSxvQ0FHaUI7QUF3QmpCLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsSUFBSTtJQUNKLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsUUFBUTtJQUNSLG1CQUFtQjtJQUNuQixpQkFBaUI7Q0FDVCxDQUFBO0FBRVYsU0FBUyxrQkFBa0IsQ0FBQyxNQUE2QjtJQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsZUFBZSxLQUFLLDZCQUFxQixDQUFDLFFBQVEsQ0FBQTtBQUNsRSxDQUFDO0FBRU0sS0FBSyxVQUFVLGlDQUFpQyxDQUNyRCxTQUEwQixFQUMxQixLQUFnQztJQUVoQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUVuQyxNQUFNLEVBQ0osSUFBSSxFQUNKLFFBQVEsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQ3RFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLE1BQU0sRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7UUFDakMsT0FBTyxFQUFFO1lBQ1AsTUFBTSxFQUFFLENBQUMsMEJBQWtCLENBQUMsU0FBUyxFQUFFLDBCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUNqRSxhQUFhLEVBQUU7Z0JBQ2IsSUFBSSxFQUFFLEdBQUc7YUFDVjtTQUNGO1FBQ0QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUU7Z0JBQ0wsYUFBYSxFQUFFLEtBQUs7YUFDckI7U0FDRjtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFJLElBQWdDLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFFM0UsT0FBTztRQUNMLE1BQU07UUFDTixLQUFLO1FBQ0wsS0FBSyxFQUFFLElBQUk7UUFDWCxNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUE7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldSubscriptionHaveUpcomingRenewalCycle = shouldSubscriptionHaveUpcomingRenewalCycle;
|
|
4
|
+
exports.deriveUpcomingRenewalApprovalState = deriveUpcomingRenewalApprovalState;
|
|
5
|
+
exports.findUpcomingRenewalCycle = findUpcomingRenewalCycle;
|
|
6
|
+
exports.isPendingUpdateApplicable = isPendingUpdateApplicable;
|
|
7
|
+
const types_1 = require("../types");
|
|
8
|
+
const types_2 = require("../../settings/types");
|
|
9
|
+
const types_3 = require("../../subscription/types");
|
|
10
|
+
function shouldSubscriptionHaveUpcomingRenewalCycle(subscription) {
|
|
11
|
+
if (subscription.status !== types_3.SubscriptionStatus.ACTIVE &&
|
|
12
|
+
subscription.status !== types_3.SubscriptionStatus.PAST_DUE) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (!subscription.next_renewal_at) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (subscription.cancelled_at) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
if (subscription.cancel_effective_at &&
|
|
22
|
+
subscription.cancel_effective_at <= subscription.next_renewal_at) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
function deriveUpcomingRenewalApprovalState(subscription, scheduledFor, behavior = types_2.SubscriptionRenewalBehavior.REQUIRE_REVIEW_FOR_PENDING_CHANGES) {
|
|
28
|
+
const pendingUpdateApplicable = isPendingUpdateApplicable(scheduledFor, subscription.pending_update_data);
|
|
29
|
+
const requiresApproval = behavior ===
|
|
30
|
+
types_2.SubscriptionRenewalBehavior.REQUIRE_REVIEW_FOR_PENDING_CHANGES &&
|
|
31
|
+
pendingUpdateApplicable;
|
|
32
|
+
return {
|
|
33
|
+
approval_required: requiresApproval,
|
|
34
|
+
approval_status: requiresApproval ? types_1.RenewalApprovalStatus.PENDING : null,
|
|
35
|
+
approval_decided_at: null,
|
|
36
|
+
approval_decided_by: null,
|
|
37
|
+
approval_reason: null,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function findUpcomingRenewalCycle(cycles, scheduledFor) {
|
|
41
|
+
return cycles.find((cycle) => {
|
|
42
|
+
return cycle.scheduled_for.getTime() === scheduledFor.getTime();
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function isPendingUpdateApplicable(scheduledFor, pendingUpdateData) {
|
|
46
|
+
if (!pendingUpdateData) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
if (!pendingUpdateData.effective_at) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
return new Date(pendingUpdateData.effective_at) <= scheduledFor;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBjb21pbmctY3ljbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZW5ld2FsL3V0aWxzL3VwY29taW5nLWN5Y2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0NBLGdHQTBCQztBQUVELGdGQXFCQztBQUVELDREQU9DO0FBRUQsOERBYUM7QUEzR0Qsb0NBR2lCO0FBQ2pCLGdEQUFrRTtBQUNsRSxvREFBNEY7QUE2QjVGLFNBQWdCLDBDQUEwQyxDQUN4RCxZQUErQztJQUUvQyxJQUNFLFlBQVksQ0FBQyxNQUFNLEtBQUssMEJBQWtCLENBQUMsTUFBTTtRQUNqRCxZQUFZLENBQUMsTUFBTSxLQUFLLDBCQUFrQixDQUFDLFFBQVEsRUFDbkQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbEMsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsSUFDRSxZQUFZLENBQUMsbUJBQW1CO1FBQ2hDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxZQUFZLENBQUMsZUFBZSxFQUNoRSxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsU0FBZ0Isa0NBQWtDLENBQ2hELFlBQStDLEVBQy9DLFlBQWtCLEVBQ2xCLFFBQVEsR0FBRyxtQ0FBMkIsQ0FBQyxrQ0FBa0M7SUFFekUsTUFBTSx1QkFBdUIsR0FBRyx5QkFBeUIsQ0FDdkQsWUFBWSxFQUNaLFlBQVksQ0FBQyxtQkFBbUIsQ0FDakMsQ0FBQTtJQUNELE1BQU0sZ0JBQWdCLEdBQ3BCLFFBQVE7UUFDTixtQ0FBMkIsQ0FBQyxrQ0FBa0M7UUFDaEUsdUJBQXVCLENBQUE7SUFFekIsT0FBTztRQUNMLGlCQUFpQixFQUFFLGdCQUFnQjtRQUNuQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLDZCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUN4RSxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLG1CQUFtQixFQUFFLElBQUk7UUFDekIsZUFBZSxFQUFFLElBQUk7S0FDdEIsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFnQix3QkFBd0IsQ0FDdEMsTUFBb0MsRUFDcEMsWUFBa0I7SUFFbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDM0IsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNqRSxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFnQix5QkFBeUIsQ0FDdkMsWUFBa0IsRUFDbEIsaUJBQXVEO0lBRXZELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQTtBQUNqRSxDQUFDIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SETTINGS_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.SETTINGS_MODULE = "subscriptionSettings";
|
|
10
|
+
exports.default = (0, utils_1.Module)(exports.SETTINGS_MODULE, {
|
|
11
|
+
service: service_1.default,
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZXR0aW5ncy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBa0Q7QUFDbEQsd0RBQTZDO0FBRWhDLFFBQUEsZUFBZSxHQUFHLHNCQUFzQixDQUFBO0FBRXJELGtCQUFlLElBQUEsY0FBTSxFQUFDLHVCQUFlLEVBQUU7SUFDckMsT0FBTyxFQUFFLGlCQUFxQjtDQUMvQixDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260403121004 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260403121004 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "subscription_settings" drop constraint if exists "subscription_settings_settings_key_unique";`);
|
|
8
|
+
this.addSql(`create table if not exists "subscription_settings" ("id" text not null, "settings_key" text not null default 'global', "default_trial_days" integer not null default 0, "dunning_retry_intervals" jsonb not null, "max_dunning_attempts" integer not null default 3, "default_renewal_behavior" text check ("default_renewal_behavior" in ('process_immediately', 'require_review_for_pending_changes')) not null default 'process_immediately', "default_cancellation_behavior" text check ("default_cancellation_behavior" in ('recommend_retention_first', 'allow_direct_cancellation')) not null default 'recommend_retention_first', "version" integer not null default 0, "updated_by" text null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "subscription_settings_pkey" primary key ("id"));`);
|
|
9
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_subscription_settings_settings_key_unique" ON "subscription_settings" ("settings_key") WHERE deleted_at IS NULL;`);
|
|
10
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_settings_deleted_at" ON "subscription_settings" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
11
|
+
}
|
|
12
|
+
async down() {
|
|
13
|
+
this.addSql(`drop table if exists "subscription_settings" cascade;`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.Migration20260403121004 = Migration20260403121004;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA0MDMxMjEwMDQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZXR0aW5ncy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwNDAzMTIxMDA0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzSEFBc0gsQ0FBQyxDQUFDO1FBQ3BJLElBQUksQ0FBQyxNQUFNLENBQUMsODNCQUE4M0IsQ0FBQyxDQUFDO1FBQzU0QixJQUFJLENBQUMsTUFBTSxDQUFDLHlKQUF5SixDQUFDLENBQUM7UUFDdkssSUFBSSxDQUFDLE1BQU0sQ0FBQyx1SUFBdUksQ0FBQyxDQUFDO0lBQ3ZKLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUVGO0FBYkQsMERBYUMifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260403132519 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260403132519 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "subscription_settings" drop constraint if exists "subscription_settings_settings_key_unique";`);
|
|
8
|
+
this.addSql(`create table if not exists "subscription_settings" ("id" text not null, "settings_key" text not null default 'global', "default_trial_days" integer not null default 0, "dunning_retry_intervals" jsonb not null, "max_dunning_attempts" integer not null default 3, "default_renewal_behavior" text check ("default_renewal_behavior" in ('process_immediately', 'require_review_for_pending_changes')) not null default 'process_immediately', "default_cancellation_behavior" text check ("default_cancellation_behavior" in ('recommend_retention_first', 'allow_direct_cancellation')) not null default 'recommend_retention_first', "version" integer not null default 0, "updated_by" text null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "subscription_settings_pkey" primary key ("id"));`);
|
|
9
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_subscription_settings_settings_key_unique" ON "subscription_settings" ("settings_key") WHERE deleted_at IS NULL;`);
|
|
10
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_settings_deleted_at" ON "subscription_settings" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
11
|
+
}
|
|
12
|
+
async down() {
|
|
13
|
+
this.addSql(`drop table if exists "subscription_settings" cascade;`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.Migration20260403132519 = Migration20260403132519;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA0MDMxMzI1MTkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZXR0aW5ncy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwNDAzMTMyNTE5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzSEFBc0gsQ0FBQyxDQUFDO1FBQ3BJLElBQUksQ0FBQyxNQUFNLENBQUMsODNCQUE4M0IsQ0FBQyxDQUFDO1FBQzU0QixJQUFJLENBQUMsTUFBTSxDQUFDLHlKQUF5SixDQUFDLENBQUM7UUFDdkssSUFBSSxDQUFDLE1BQU0sQ0FBQyx1SUFBdUksQ0FBQyxDQUFDO0lBQ3ZKLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUVGO0FBYkQsMERBYUMifQ==
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const SubscriptionSettings = utils_1.model
|
|
6
|
+
.define("subscription_settings", {
|
|
7
|
+
id: utils_1.model.id().primaryKey(),
|
|
8
|
+
settings_key: utils_1.model
|
|
9
|
+
.text()
|
|
10
|
+
.default(types_1.GLOBAL_SUBSCRIPTION_SETTINGS_KEY)
|
|
11
|
+
.unique(),
|
|
12
|
+
default_trial_days: utils_1.model.number().default(0),
|
|
13
|
+
dunning_retry_intervals: utils_1.model.json(),
|
|
14
|
+
max_dunning_attempts: utils_1.model.number().default(3),
|
|
15
|
+
default_renewal_behavior: utils_1.model
|
|
16
|
+
.enum(types_1.SubscriptionRenewalBehavior)
|
|
17
|
+
.default(types_1.SubscriptionRenewalBehavior.PROCESS_IMMEDIATELY),
|
|
18
|
+
default_cancellation_behavior: utils_1.model
|
|
19
|
+
.enum(types_1.SubscriptionCancellationBehavior)
|
|
20
|
+
.default(types_1.SubscriptionCancellationBehavior.RECOMMEND_RETENTION_FIRST),
|
|
21
|
+
version: utils_1.model.number().default(0),
|
|
22
|
+
updated_by: utils_1.model.text().nullable(),
|
|
23
|
+
metadata: utils_1.model.json().nullable(),
|
|
24
|
+
})
|
|
25
|
+
.indexes([
|
|
26
|
+
{
|
|
27
|
+
on: ["settings_key"],
|
|
28
|
+
unique: true,
|
|
29
|
+
},
|
|
30
|
+
]);
|
|
31
|
+
exports.default = SubscriptionSettings;
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvc2V0dGluZ3MvbW9kZWxzL3N1YnNjcmlwdGlvbi1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFpRDtBQUNqRCxvQ0FJaUI7QUFFakIsTUFBTSxvQkFBb0IsR0FBRyxhQUFLO0tBQy9CLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRTtJQUMvQixFQUFFLEVBQUUsYUFBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRTtJQUMzQixZQUFZLEVBQUUsYUFBSztTQUNoQixJQUFJLEVBQUU7U0FDTixPQUFPLENBQUMsd0NBQWdDLENBQUM7U0FDekMsTUFBTSxFQUFFO0lBQ1gsa0JBQWtCLEVBQUUsYUFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0MsdUJBQXVCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUNyQyxvQkFBb0IsRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMvQyx3QkFBd0IsRUFBRSxhQUFLO1NBQzVCLElBQUksQ0FBQyxtQ0FBMkIsQ0FBQztTQUNqQyxPQUFPLENBQUMsbUNBQTJCLENBQUMsbUJBQW1CLENBQUM7SUFDM0QsNkJBQTZCLEVBQUUsYUFBSztTQUNqQyxJQUFJLENBQUMsd0NBQWdDLENBQUM7U0FDdEMsT0FBTyxDQUFDLHdDQUFnQyxDQUFDLHlCQUF5QixDQUFDO0lBQ3RFLE9BQU8sRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsQyxVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNsQyxDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1A7UUFDRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUM7UUFDcEIsTUFBTSxFQUFFLElBQUk7S0FDYjtDQUNGLENBQUMsQ0FBQTtBQUVKLGtCQUFlLG9CQUFvQixDQUFBIn0=
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
const subscription_settings_1 = __importDefault(require("./models/subscription-settings"));
|
|
9
|
+
const normalize_settings_1 = require("./utils/normalize-settings");
|
|
10
|
+
class SettingsModuleService extends (0, utils_1.MedusaService)({
|
|
11
|
+
SubscriptionSettings: subscription_settings_1.default,
|
|
12
|
+
}) {
|
|
13
|
+
async getSettings() {
|
|
14
|
+
const [record] = (await this.listSubscriptionSettings({
|
|
15
|
+
settings_key: types_1.GLOBAL_SUBSCRIPTION_SETTINGS_KEY,
|
|
16
|
+
}));
|
|
17
|
+
if (!record) {
|
|
18
|
+
return (0, normalize_settings_1.buildDefaultSubscriptionSettings)();
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
settings_key: record.settings_key,
|
|
22
|
+
default_trial_days: record.default_trial_days,
|
|
23
|
+
dunning_retry_intervals: Array.isArray(record.dunning_retry_intervals)
|
|
24
|
+
? record.dunning_retry_intervals.map((value) => Number(value))
|
|
25
|
+
: [],
|
|
26
|
+
max_dunning_attempts: record.max_dunning_attempts,
|
|
27
|
+
default_renewal_behavior: record.default_renewal_behavior,
|
|
28
|
+
default_cancellation_behavior: record.default_cancellation_behavior,
|
|
29
|
+
version: record.version,
|
|
30
|
+
updated_by: record.updated_by ?? null,
|
|
31
|
+
updated_at: record.updated_at ? new Date(record.updated_at) : null,
|
|
32
|
+
metadata: record.metadata ?? null,
|
|
33
|
+
is_persisted: true,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async updateSettings(input) {
|
|
37
|
+
const current = await this.getSettings();
|
|
38
|
+
const normalized = (0, normalize_settings_1.normalizeSubscriptionSettingsPayload)(input);
|
|
39
|
+
const nextRetryIntervals = normalized.dunning_retry_intervals ?? current.dunning_retry_intervals;
|
|
40
|
+
const nextMaxAttempts = normalized.max_dunning_attempts ?? current.max_dunning_attempts;
|
|
41
|
+
if (nextMaxAttempts !== nextRetryIntervals.length) {
|
|
42
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "'max_dunning_attempts' must match the number of 'dunning_retry_intervals'");
|
|
43
|
+
}
|
|
44
|
+
const payload = {
|
|
45
|
+
settings_key: types_1.GLOBAL_SUBSCRIPTION_SETTINGS_KEY,
|
|
46
|
+
default_trial_days: normalized.default_trial_days ?? current.default_trial_days,
|
|
47
|
+
dunning_retry_intervals: nextRetryIntervals,
|
|
48
|
+
max_dunning_attempts: nextMaxAttempts,
|
|
49
|
+
default_renewal_behavior: normalized.default_renewal_behavior ??
|
|
50
|
+
current.default_renewal_behavior,
|
|
51
|
+
default_cancellation_behavior: normalized.default_cancellation_behavior ??
|
|
52
|
+
current.default_cancellation_behavior,
|
|
53
|
+
version: current.version + 1,
|
|
54
|
+
updated_by: normalized.updated_by ?? null,
|
|
55
|
+
metadata: normalized.metadata ?? current.metadata ?? null,
|
|
56
|
+
};
|
|
57
|
+
if (current.is_persisted) {
|
|
58
|
+
const [record] = (await this.listSubscriptionSettings({
|
|
59
|
+
settings_key: types_1.GLOBAL_SUBSCRIPTION_SETTINGS_KEY,
|
|
60
|
+
}));
|
|
61
|
+
await this.updateSubscriptionSettings({
|
|
62
|
+
id: record.id,
|
|
63
|
+
...payload,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
await this.createSubscriptionSettings(payload);
|
|
68
|
+
}
|
|
69
|
+
return await this.getSettings();
|
|
70
|
+
}
|
|
71
|
+
async resetSettings() {
|
|
72
|
+
const [record] = (await this.listSubscriptionSettings({
|
|
73
|
+
settings_key: types_1.GLOBAL_SUBSCRIPTION_SETTINGS_KEY,
|
|
74
|
+
}));
|
|
75
|
+
if (record) {
|
|
76
|
+
await this.deleteSubscriptionSettings(record.id);
|
|
77
|
+
}
|
|
78
|
+
return (0, normalize_settings_1.buildDefaultSubscriptionSettings)();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.default = SettingsModuleService;
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3NldHRpbmdzL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBc0U7QUFDdEUsbUNBQTBEO0FBQzFELDJGQUFpRTtBQUNqRSxtRUFLbUM7QUFFbkMsTUFBTSxxQkFBc0IsU0FBUSxJQUFBLHFCQUFhLEVBQUM7SUFDaEQsb0JBQW9CLEVBQXBCLCtCQUFvQjtDQUNyQixDQUFDO0lBQ0EsS0FBSyxDQUFDLFdBQVc7UUFDZixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztZQUNwRCxZQUFZLEVBQUUsd0NBQWdDO1NBQ3hDLENBQUMsQ0FBK0IsQ0FBQTtRQUV4QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLElBQUEscURBQWdDLEdBQUUsQ0FBQTtRQUMzQyxDQUFDO1FBRUQsT0FBTztZQUNMLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCO1lBQzdDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDO2dCQUNwRSxDQUFDLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2RSxDQUFDLENBQUMsRUFBRTtZQUNOLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7WUFDakQsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLHdCQUF3QjtZQUN6RCw2QkFBNkIsRUFBRSxNQUFNLENBQUMsNkJBQTZCO1lBQ25FLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJO1lB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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GLOBAL_SUBSCRIPTION_SETTINGS_KEY = exports.SubscriptionCancellationBehavior = exports.SubscriptionRenewalBehavior = void 0;
|
|
4
|
+
var SubscriptionRenewalBehavior;
|
|
5
|
+
(function (SubscriptionRenewalBehavior) {
|
|
6
|
+
SubscriptionRenewalBehavior["PROCESS_IMMEDIATELY"] = "process_immediately";
|
|
7
|
+
SubscriptionRenewalBehavior["REQUIRE_REVIEW_FOR_PENDING_CHANGES"] = "require_review_for_pending_changes";
|
|
8
|
+
})(SubscriptionRenewalBehavior || (exports.SubscriptionRenewalBehavior = SubscriptionRenewalBehavior = {}));
|
|
9
|
+
var SubscriptionCancellationBehavior;
|
|
10
|
+
(function (SubscriptionCancellationBehavior) {
|
|
11
|
+
SubscriptionCancellationBehavior["RECOMMEND_RETENTION_FIRST"] = "recommend_retention_first";
|
|
12
|
+
SubscriptionCancellationBehavior["ALLOW_DIRECT_CANCELLATION"] = "allow_direct_cancellation";
|
|
13
|
+
})(SubscriptionCancellationBehavior || (exports.SubscriptionCancellationBehavior = SubscriptionCancellationBehavior = {}));
|
|
14
|
+
exports.GLOBAL_SUBSCRIPTION_SETTINGS_KEY = "global";
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZXR0aW5ncy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLDJCQUdYO0FBSEQsV0FBWSwyQkFBMkI7SUFDckMsMEVBQTJDLENBQUE7SUFDM0Msd0dBQXlFLENBQUE7QUFDM0UsQ0FBQyxFQUhXLDJCQUEyQiwyQ0FBM0IsMkJBQTJCLFFBR3RDO0FBRUQsSUFBWSxnQ0FHWDtBQUhELFdBQVksZ0NBQWdDO0lBQzFDLDJGQUF1RCxDQUFBO0lBQ3ZELDJGQUF1RCxDQUFBO0FBQ3pELENBQUMsRUFIVyxnQ0FBZ0MsZ0RBQWhDLGdDQUFnQyxRQUczQztBQUVZLFFBQUEsZ0NBQWdDLEdBQUcsUUFBUSxDQUFBIn0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.appendSettingsAuditMetadata = appendSettingsAuditMetadata;
|
|
4
|
+
function areValuesEqual(left, right) {
|
|
5
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
6
|
+
}
|
|
7
|
+
function buildSettingsChangeSummary(previous, next) {
|
|
8
|
+
const fields = [
|
|
9
|
+
"default_trial_days",
|
|
10
|
+
"dunning_retry_intervals",
|
|
11
|
+
"max_dunning_attempts",
|
|
12
|
+
"default_renewal_behavior",
|
|
13
|
+
"default_cancellation_behavior",
|
|
14
|
+
];
|
|
15
|
+
return fields
|
|
16
|
+
.filter((field) => !areValuesEqual(previous[field], next[field]))
|
|
17
|
+
.map((field) => ({
|
|
18
|
+
field,
|
|
19
|
+
from: previous[field],
|
|
20
|
+
to: next[field],
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
function appendSettingsAuditMetadata(metadata, input) {
|
|
24
|
+
const existing = Array.isArray(metadata?.audit_log)
|
|
25
|
+
? [...metadata.audit_log]
|
|
26
|
+
: [];
|
|
27
|
+
const nextRecord = {
|
|
28
|
+
action: "update_settings",
|
|
29
|
+
who: input.updated_by ?? null,
|
|
30
|
+
when: input.changed_at,
|
|
31
|
+
reason: input.reason ?? null,
|
|
32
|
+
previous_version: input.previous.version,
|
|
33
|
+
next_version: input.next.version,
|
|
34
|
+
change_summary: buildSettingsChangeSummary(input.previous, input.next),
|
|
35
|
+
};
|
|
36
|
+
existing.push(nextRecord);
|
|
37
|
+
return {
|
|
38
|
+
...(metadata ?? {}),
|
|
39
|
+
audit_log: existing,
|
|
40
|
+
last_update: nextRecord,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zZXR0aW5ncy91dGlscy9hdWRpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1EQSxrRUF3QkM7QUFqREQsU0FBUyxjQUFjLENBQUMsSUFBYSxFQUFFLEtBQWM7SUFDbkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDdkQsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQ2pDLFFBQW1DLEVBQ25DLElBQStCO0lBRS9CLE1BQU0sTUFBTSxHQUEyQztRQUNyRCxvQkFBb0I7UUFDcEIseUJBQXlCO1FBQ3pCLHNCQUFzQjtRQUN0QiwwQkFBMEI7UUFDMUIsK0JBQStCO0tBQ2hDLENBQUE7SUFFRCxPQUFPLE1BQU07U0FDVixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNoRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDZixLQUFLO1FBQ0wsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDckIsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDaEIsQ0FBQyxDQUFDLENBQUE7QUFDUCxDQUFDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQ3pDLFFBQXdDLEVBQ3hDLEtBQWlDO0lBRWpDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQyxHQUFJLFFBQVEsQ0FBQyxTQUFtQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDTixNQUFNLFVBQVUsR0FBd0I7UUFDdEMsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixHQUFHLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJO1FBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVTtRQUN0QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJO1FBQzVCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTztRQUN4QyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ2hDLGNBQWMsRUFBRSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDdkUsQ0FBQTtJQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFekIsT0FBTztRQUNMLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ25CLFNBQVMsRUFBRSxRQUFRO1FBQ25CLFdBQVcsRUFBRSxVQUFVO0tBQ3hCLENBQUE7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_SUBSCRIPTION_SETTINGS = void 0;
|
|
4
|
+
exports.buildDefaultSubscriptionSettings = buildDefaultSubscriptionSettings;
|
|
5
|
+
exports.normalizeSubscriptionSettingsPayload = normalizeSubscriptionSettingsPayload;
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const types_1 = require("../types");
|
|
8
|
+
exports.DEFAULT_SUBSCRIPTION_SETTINGS = {
|
|
9
|
+
default_trial_days: 0,
|
|
10
|
+
dunning_retry_intervals: [1440, 4320, 10080],
|
|
11
|
+
max_dunning_attempts: 3,
|
|
12
|
+
default_renewal_behavior: types_1.SubscriptionRenewalBehavior.PROCESS_IMMEDIATELY,
|
|
13
|
+
default_cancellation_behavior: types_1.SubscriptionCancellationBehavior.RECOMMEND_RETENTION_FIRST,
|
|
14
|
+
};
|
|
15
|
+
function assertInteger(value, field) {
|
|
16
|
+
if (!Number.isInteger(value)) {
|
|
17
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `'${field}' must be an integer`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function normalizeRetryIntervals(intervals) {
|
|
21
|
+
if (!intervals.length) {
|
|
22
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "'dunning_retry_intervals' must contain at least one interval");
|
|
23
|
+
}
|
|
24
|
+
const normalized = intervals.map((interval) => {
|
|
25
|
+
assertInteger(interval, "dunning_retry_intervals");
|
|
26
|
+
if (interval <= 0) {
|
|
27
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "'dunning_retry_intervals' must contain positive values only");
|
|
28
|
+
}
|
|
29
|
+
return interval;
|
|
30
|
+
});
|
|
31
|
+
for (let index = 1; index < normalized.length; index += 1) {
|
|
32
|
+
if (normalized[index] <= normalized[index - 1]) {
|
|
33
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "'dunning_retry_intervals' must be strictly increasing without duplicates");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return normalized;
|
|
37
|
+
}
|
|
38
|
+
function buildDefaultSubscriptionSettings() {
|
|
39
|
+
return {
|
|
40
|
+
settings_key: "global",
|
|
41
|
+
default_trial_days: exports.DEFAULT_SUBSCRIPTION_SETTINGS.default_trial_days,
|
|
42
|
+
dunning_retry_intervals: [
|
|
43
|
+
...exports.DEFAULT_SUBSCRIPTION_SETTINGS.dunning_retry_intervals,
|
|
44
|
+
],
|
|
45
|
+
max_dunning_attempts: exports.DEFAULT_SUBSCRIPTION_SETTINGS.max_dunning_attempts,
|
|
46
|
+
default_renewal_behavior: exports.DEFAULT_SUBSCRIPTION_SETTINGS.default_renewal_behavior,
|
|
47
|
+
default_cancellation_behavior: exports.DEFAULT_SUBSCRIPTION_SETTINGS.default_cancellation_behavior,
|
|
48
|
+
version: 0,
|
|
49
|
+
updated_by: null,
|
|
50
|
+
updated_at: null,
|
|
51
|
+
metadata: null,
|
|
52
|
+
is_persisted: false,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function normalizeSubscriptionSettingsPayload(input) {
|
|
56
|
+
const defaultTrialDays = input.default_trial_days;
|
|
57
|
+
const retryIntervals = input.dunning_retry_intervals;
|
|
58
|
+
const maxDunningAttempts = input.max_dunning_attempts;
|
|
59
|
+
if (defaultTrialDays !== undefined) {
|
|
60
|
+
assertInteger(defaultTrialDays, "default_trial_days");
|
|
61
|
+
if (defaultTrialDays < 0) {
|
|
62
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "'default_trial_days' must be greater than or equal to 0");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const normalizedRetryIntervals = retryIntervals !== undefined
|
|
66
|
+
? normalizeRetryIntervals(retryIntervals)
|
|
67
|
+
: undefined;
|
|
68
|
+
if (maxDunningAttempts !== undefined) {
|
|
69
|
+
assertInteger(maxDunningAttempts, "max_dunning_attempts");
|
|
70
|
+
if (maxDunningAttempts <= 0) {
|
|
71
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "'max_dunning_attempts' must be greater than 0");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const effectiveRetryIntervals = normalizedRetryIntervals ??
|
|
75
|
+
(retryIntervals === undefined ? undefined : normalizedRetryIntervals);
|
|
76
|
+
if (maxDunningAttempts !== undefined &&
|
|
77
|
+
effectiveRetryIntervals !== undefined &&
|
|
78
|
+
maxDunningAttempts !== effectiveRetryIntervals.length) {
|
|
79
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "'max_dunning_attempts' must match the number of 'dunning_retry_intervals'");
|
|
80
|
+
}
|
|
81
|
+
if (maxDunningAttempts === undefined &&
|
|
82
|
+
effectiveRetryIntervals !== undefined &&
|
|
83
|
+
input.max_dunning_attempts === undefined) {
|
|
84
|
+
return {
|
|
85
|
+
...input,
|
|
86
|
+
dunning_retry_intervals: effectiveRetryIntervals,
|
|
87
|
+
max_dunning_attempts: effectiveRetryIntervals.length,
|
|
88
|
+
updated_by: input.updated_by ?? null,
|
|
89
|
+
metadata: input.metadata ?? null,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
...input,
|
|
94
|
+
dunning_retry_intervals: effectiveRetryIntervals,
|
|
95
|
+
updated_by: input.updated_by ?? null,
|
|
96
|
+
metadata: input.metadata ?? null,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvc2V0dGluZ3MvdXRpbHMvbm9ybWFsaXplLXNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWtGQSw0RUFrQkM7QUFFRCxvRkFxRUM7QUEzS0QscURBQXVEO0FBQ3ZELG9DQUdpQjtBQTBCSixRQUFBLDZCQUE2QixHQUFHO0lBQzNDLGtCQUFrQixFQUFFLENBQUM7SUFDckIsdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztJQUM1QyxvQkFBb0IsRUFBRSxDQUFDO0lBQ3ZCLHdCQUF3QixFQUN0QixtQ0FBMkIsQ0FBQyxtQkFBbUI7SUFDakQsNkJBQTZCLEVBQzNCLHdDQUFnQyxDQUFDLHlCQUF5QjtDQUNwRCxDQUFBO0FBRVYsU0FBUyxhQUFhLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixJQUFJLEtBQUssc0JBQXNCLENBQ2hDLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsU0FBbUI7SUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qiw4REFBOEQsQ0FDL0QsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDNUMsYUFBYSxDQUFDLFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFBO1FBRWxELElBQUksUUFB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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SUBSCRIPTION_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.SUBSCRIPTION_MODULE = "subscription";
|
|
10
|
+
exports.default = (0, utils_1.Module)(exports.SUBSCRIPTION_MODULE, {
|
|
11
|
+
service: service_1.default,
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zdWJzY3JpcHRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscURBQWtEO0FBQ2xELHdEQUFpRDtBQUVwQyxRQUFBLG1CQUFtQixHQUFHLGNBQWMsQ0FBQTtBQUVqRCxrQkFBZSxJQUFBLGNBQU0sRUFBQywyQkFBbUIsRUFBRTtJQUN6QyxPQUFPLEVBQUUsaUJBQXlCO0NBQ25DLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260327143452 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260327143452 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "subscription" drop constraint if exists "subscription_reference_unique";`);
|
|
8
|
+
this.addSql(`create table if not exists "subscription" ("id" text not null, "reference" text not null, "status" text check ("status" in ('active', 'paused', 'cancelled', 'past_due')) not null default 'active', "customer_id" text not null, "product_id" text not null, "variant_id" text not null, "frequency_interval" text check ("frequency_interval" in ('week', 'month', 'year')) not null, "frequency_value" integer not null, "started_at" timestamptz not null, "next_renewal_at" timestamptz null, "last_renewal_at" timestamptz null, "paused_at" timestamptz null, "cancelled_at" timestamptz null, "cancel_effective_at" timestamptz null, "skip_next_cycle" boolean not null default false, "is_trial" boolean not null default false, "trial_ends_at" timestamptz null, "customer_snapshot" jsonb null, "product_snapshot" jsonb not null, "pricing_snapshot" jsonb null, "shipping_address" jsonb not null, "pending_update_data" jsonb null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "subscription_pkey" primary key ("id"));`);
|
|
9
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_subscription_reference_unique" ON "subscription" ("reference") WHERE deleted_at IS NULL;`);
|
|
10
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_deleted_at" ON "subscription" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
11
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_status" ON "subscription" ("status") WHERE deleted_at IS NULL;`);
|
|
12
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_next_renewal_at" ON "subscription" ("next_renewal_at") WHERE deleted_at IS NULL;`);
|
|
13
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_customer_id" ON "subscription" ("customer_id") WHERE deleted_at IS NULL;`);
|
|
14
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_product_id" ON "subscription" ("product_id") WHERE deleted_at IS NULL;`);
|
|
15
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_variant_id" ON "subscription" ("variant_id") WHERE deleted_at IS NULL;`);
|
|
16
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_is_trial" ON "subscription" ("is_trial") WHERE deleted_at IS NULL;`);
|
|
17
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_skip_next_cycle" ON "subscription" ("skip_next_cycle") WHERE deleted_at IS NULL;`);
|
|
18
|
+
}
|
|
19
|
+
async down() {
|
|
20
|
+
this.addSql(`drop table if exists "subscription" cascade;`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.Migration20260327143452 = Migration20260327143452;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjAzMjcxNDM0NTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zdWJzY3JpcHRpb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDMyNzE0MzQ1Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsaUdBQWlHLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsTUFBTSxDQUFDLGltQ0FBaW1DLENBQUMsQ0FBQztRQUMvbUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpSUFBaUksQ0FBQyxDQUFDO1FBQy9JLElBQUksQ0FBQyxNQUFNLENBQUMscUhBQXFILENBQUMsQ0FBQztRQUNuSSxJQUFJLENBQUMsTUFBTSxDQUFDLDZHQUE2RyxDQUFDLENBQUM7UUFDM0gsSUFBSSxDQUFDLE1BQU0sQ0FBQywrSEFBK0gsQ0FBQyxDQUFDO1FBQzdJLElBQUksQ0FBQyxNQUFNLENBQUMsdUhBQXVILENBQUMsQ0FBQztRQUNySSxJQUFJLENBQUMsTUFBTSxDQUFDLHFIQUFxSCxDQUFDLENBQUM7UUFDbkksSUFBSSxDQUFDLE1BQU0sQ0FBQyxxSEFBcUgsQ0FBQyxDQUFDO1FBQ25JLElBQUksQ0FBQyxNQUFNLENBQUMsaUhBQWlILENBQUMsQ0FBQztRQUMvSCxJQUFJLENBQUMsTUFBTSxDQUFDLCtIQUErSCxDQUFDLENBQUM7SUFDL0ksQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBRUY7QUFwQkQsMERBb0JDIn0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260329194835 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260329194835 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "subscription" add column if not exists "cart_id" text null, add column if not exists "payment_context" jsonb null;`);
|
|
8
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_cart_id" ON "subscription" ("cart_id") WHERE deleted_at IS NULL;`);
|
|
9
|
+
}
|
|
10
|
+
async down() {
|
|
11
|
+
this.addSql(`drop index if exists "IDX_subscription_cart_id";`);
|
|
12
|
+
this.addSql(`alter table if exists "subscription" drop column if exists "cart_id", drop column if exists "payment_context";`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Migration20260329194835 = Migration20260329194835;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjAzMjkxOTQ4MzUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zdWJzY3JpcHRpb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDMyOTE5NDgzNS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsMklBQTJJLENBQUMsQ0FBQztRQUN6SixJQUFJLENBQUMsTUFBTSxDQUFDLCtHQUErRyxDQUFDLENBQUM7SUFDL0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLGdIQUFnSCxDQUFDLENBQUM7SUFDaEksQ0FBQztDQUVGO0FBWkQsMERBWUMifQ==
|