@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.
Files changed (231) hide show
  1. package/.medusa/server/scripts/reset-reorder-plugin-data.js +175 -0
  2. package/.medusa/server/src/admin/index.js +17889 -0
  3. package/.medusa/server/src/admin/index.mjs +17871 -0
  4. package/.medusa/server/src/admin/types/activity-log.js +10 -0
  5. package/.medusa/server/src/admin/types/analytics.js +17 -0
  6. package/.medusa/server/src/admin/types/cancellation.js +27 -0
  7. package/.medusa/server/src/admin/types/dunning.js +19 -0
  8. package/.medusa/server/src/admin/types/plan-offer.js +25 -0
  9. package/.medusa/server/src/admin/types/renewal.js +23 -0
  10. package/.medusa/server/src/admin/types/subscription.js +22 -0
  11. package/.medusa/server/src/api/admin/cancellations/[id]/apply-offer/route.js +30 -0
  12. package/.medusa/server/src/api/admin/cancellations/[id]/finalize/route.js +31 -0
  13. package/.medusa/server/src/api/admin/cancellations/[id]/reason/route.js +31 -0
  14. package/.medusa/server/src/api/admin/cancellations/[id]/route.js +20 -0
  15. package/.medusa/server/src/api/admin/cancellations/middlewares.js +55 -0
  16. package/.medusa/server/src/api/admin/cancellations/route.js +20 -0
  17. package/.medusa/server/src/api/admin/cancellations/utils.js +116 -0
  18. package/.medusa/server/src/api/admin/cancellations/validators.js +130 -0
  19. package/.medusa/server/src/api/admin/dunning/[id]/mark-recovered/route.js +27 -0
  20. package/.medusa/server/src/api/admin/dunning/[id]/mark-unrecovered/route.js +27 -0
  21. package/.medusa/server/src/api/admin/dunning/[id]/retry-now/route.js +28 -0
  22. package/.medusa/server/src/api/admin/dunning/[id]/retry-schedule/route.js +29 -0
  23. package/.medusa/server/src/api/admin/dunning/[id]/route.js +20 -0
  24. package/.medusa/server/src/api/admin/dunning/middlewares.js +60 -0
  25. package/.medusa/server/src/api/admin/dunning/route.js +20 -0
  26. package/.medusa/server/src/api/admin/dunning/utils.js +70 -0
  27. package/.medusa/server/src/api/admin/dunning/validators.js +81 -0
  28. package/.medusa/server/src/api/admin/orders/[id]/subscription-summary/route.js +10 -0
  29. package/.medusa/server/src/api/admin/orders/utils.js +8 -0
  30. package/.medusa/server/src/api/admin/plugin/route.js +7 -0
  31. package/.medusa/server/src/api/admin/renewals/[id]/approve-changes/route.js +27 -0
  32. package/.medusa/server/src/api/admin/renewals/[id]/force/route.js +30 -0
  33. package/.medusa/server/src/api/admin/renewals/[id]/reject-changes/route.js +27 -0
  34. package/.medusa/server/src/api/admin/renewals/[id]/route.js +10 -0
  35. package/.medusa/server/src/api/admin/renewals/middlewares.js +61 -0
  36. package/.medusa/server/src/api/admin/renewals/route.js +10 -0
  37. package/.medusa/server/src/api/admin/renewals/utils.js +60 -0
  38. package/.medusa/server/src/api/admin/renewals/validators.js +62 -0
  39. package/.medusa/server/src/api/admin/subscription-analytics/export/route.js +20 -0
  40. package/.medusa/server/src/api/admin/subscription-analytics/kpis/route.js +20 -0
  41. package/.medusa/server/src/api/admin/subscription-analytics/middlewares.js +45 -0
  42. package/.medusa/server/src/api/admin/subscription-analytics/rebuild/route.js +75 -0
  43. package/.medusa/server/src/api/admin/subscription-analytics/trends/route.js +20 -0
  44. package/.medusa/server/src/api/admin/subscription-analytics/utils.js +81 -0
  45. package/.medusa/server/src/api/admin/subscription-analytics/validators.js +76 -0
  46. package/.medusa/server/src/api/admin/subscription-logs/[id]/route.js +20 -0
  47. package/.medusa/server/src/api/admin/subscription-logs/middlewares.js +66 -0
  48. package/.medusa/server/src/api/admin/subscription-logs/route.js +20 -0
  49. package/.medusa/server/src/api/admin/subscription-logs/utils.js +84 -0
  50. package/.medusa/server/src/api/admin/subscription-logs/validators.js +32 -0
  51. package/.medusa/server/src/api/admin/subscription-offers/[id]/route.js +22 -0
  52. package/.medusa/server/src/api/admin/subscription-offers/[id]/toggle/route.js +17 -0
  53. package/.medusa/server/src/api/admin/subscription-offers/middlewares.js +58 -0
  54. package/.medusa/server/src/api/admin/subscription-offers/route.js +20 -0
  55. package/.medusa/server/src/api/admin/subscription-offers/utils.js +41 -0
  56. package/.medusa/server/src/api/admin/subscription-offers/validators.js +112 -0
  57. package/.medusa/server/src/api/admin/subscription-settings/middlewares.js +15 -0
  58. package/.medusa/server/src/api/admin/subscription-settings/route.js +33 -0
  59. package/.medusa/server/src/api/admin/subscription-settings/utils.js +109 -0
  60. package/.medusa/server/src/api/admin/subscription-settings/validators.js +74 -0
  61. package/.medusa/server/src/api/admin/subscriptions/[id]/cancel/route.js +18 -0
  62. package/.medusa/server/src/api/admin/subscriptions/[id]/logs/route.js +20 -0
  63. package/.medusa/server/src/api/admin/subscriptions/[id]/pause/route.js +18 -0
  64. package/.medusa/server/src/api/admin/subscriptions/[id]/resume/route.js +18 -0
  65. package/.medusa/server/src/api/admin/subscriptions/[id]/route.js +10 -0
  66. package/.medusa/server/src/api/admin/subscriptions/[id]/schedule-plan-change/route.js +26 -0
  67. package/.medusa/server/src/api/admin/subscriptions/[id]/update-shipping-address/route.js +27 -0
  68. package/.medusa/server/src/api/admin/subscriptions/middlewares.js +79 -0
  69. package/.medusa/server/src/api/admin/subscriptions/route.js +10 -0
  70. package/.medusa/server/src/api/admin/subscriptions/utils.js +42 -0
  71. package/.medusa/server/src/api/admin/subscriptions/validators.js +76 -0
  72. package/.medusa/server/src/api/middlewares.js +32 -0
  73. package/.medusa/server/src/api/store/carts/[id]/subscribe/route.js +18 -0
  74. package/.medusa/server/src/api/store/customers/me/subscriptions/[id]/cancellation/route.js +37 -0
  75. package/.medusa/server/src/api/store/customers/me/subscriptions/route.js +10 -0
  76. package/.medusa/server/src/api/store/customers/me/subscriptions/utils.js +104 -0
  77. package/.medusa/server/src/api/store/customers/me/subscriptions/validators.js +13 -0
  78. package/.medusa/server/src/api/store/plugin/route.js +7 -0
  79. package/.medusa/server/src/jobs/process-analytics-daily-snapshots.js +149 -0
  80. package/.medusa/server/src/jobs/process-cancellation-operational-metrics.js +102 -0
  81. package/.medusa/server/src/jobs/process-dunning-retries.js +249 -0
  82. package/.medusa/server/src/jobs/process-renewal-cycles.js +180 -0
  83. package/.medusa/server/src/links/cancellation-subscription.js +13 -0
  84. package/.medusa/server/src/links/renewal-order.js +12 -0
  85. package/.medusa/server/src/links/renewal-subscription.js +13 -0
  86. package/.medusa/server/src/links/subscription-cart.js +12 -0
  87. package/.medusa/server/src/links/subscription-customer.js +13 -0
  88. package/.medusa/server/src/links/subscription-order.js +13 -0
  89. package/.medusa/server/src/links/subscription-product.js +13 -0
  90. package/.medusa/server/src/links/subscription-variant.js +13 -0
  91. package/.medusa/server/src/modules/activity-log/index.js +13 -0
  92. package/.medusa/server/src/modules/activity-log/migrations/Migration20260401204521.js +24 -0
  93. package/.medusa/server/src/modules/activity-log/migrations/Migration20260405112500.js +16 -0
  94. package/.medusa/server/src/modules/activity-log/models/subscription-log.js +52 -0
  95. package/.medusa/server/src/modules/activity-log/service.js +13 -0
  96. package/.medusa/server/src/modules/activity-log/types/index.js +33 -0
  97. package/.medusa/server/src/modules/activity-log/utils/admin-query.js +261 -0
  98. package/.medusa/server/src/modules/activity-log/utils/normalize-log-event.js +169 -0
  99. package/.medusa/server/src/modules/analytics/constants.js +8 -0
  100. package/.medusa/server/src/modules/analytics/index.js +13 -0
  101. package/.medusa/server/src/modules/analytics/migrations/Migration20260402183116.js +27 -0
  102. package/.medusa/server/src/modules/analytics/models/subscription-metrics-daily.js +65 -0
  103. package/.medusa/server/src/modules/analytics/service.js +13 -0
  104. package/.medusa/server/src/modules/analytics/utils/admin-query.js +632 -0
  105. package/.medusa/server/src/modules/analytics/utils/data-quality.js +101 -0
  106. package/.medusa/server/src/modules/analytics/utils/observability.js +127 -0
  107. package/.medusa/server/src/modules/cancellation/index.js +13 -0
  108. package/.medusa/server/src/modules/cancellation/migrations/Migration20260401143914.js +34 -0
  109. package/.medusa/server/src/modules/cancellation/migrations/Migration20260405112000.js +14 -0
  110. package/.medusa/server/src/modules/cancellation/models/cancellation-case.js +52 -0
  111. package/.medusa/server/src/modules/cancellation/models/retention-offer-event.js +47 -0
  112. package/.medusa/server/src/modules/cancellation/service.js +15 -0
  113. package/.medusa/server/src/modules/cancellation/types/index.js +43 -0
  114. package/.medusa/server/src/modules/cancellation/utils/admin-query.js +530 -0
  115. package/.medusa/server/src/modules/cancellation/utils/audit.js +21 -0
  116. package/.medusa/server/src/modules/cancellation/utils/errors.js +31 -0
  117. package/.medusa/server/src/modules/cancellation/utils/observability.js +77 -0
  118. package/.medusa/server/src/modules/cancellation/utils/operational-metrics.js +131 -0
  119. package/.medusa/server/src/modules/cancellation/utils/retention-offer-policy.js +31 -0
  120. package/.medusa/server/src/modules/dunning/index.js +13 -0
  121. package/.medusa/server/src/modules/dunning/migrations/Migration20260330190157.js +36 -0
  122. package/.medusa/server/src/modules/dunning/models/dunning-attempt.js +48 -0
  123. package/.medusa/server/src/modules/dunning/models/dunning-case.js +61 -0
  124. package/.medusa/server/src/modules/dunning/service.js +15 -0
  125. package/.medusa/server/src/modules/dunning/types/index.js +19 -0
  126. package/.medusa/server/src/modules/dunning/utils/admin-query.js +548 -0
  127. package/.medusa/server/src/modules/dunning/utils/errors.js +40 -0
  128. package/.medusa/server/src/modules/dunning/utils/observability.js +109 -0
  129. package/.medusa/server/src/modules/dunning/utils/retry-schedule.js +47 -0
  130. package/.medusa/server/src/modules/dunning/utils/scheduler-query.js +42 -0
  131. package/.medusa/server/src/modules/plan-offer/index.js +13 -0
  132. package/.medusa/server/src/modules/plan-offer/migrations/Migration20260329104245.js +22 -0
  133. package/.medusa/server/src/modules/plan-offer/migrations/Migration20260329153000.js +25 -0
  134. package/.medusa/server/src/modules/plan-offer/models/plan-offer.js +35 -0
  135. package/.medusa/server/src/modules/plan-offer/service.js +13 -0
  136. package/.medusa/server/src/modules/plan-offer/types/index.js +26 -0
  137. package/.medusa/server/src/modules/plan-offer/utils/admin-query.js +429 -0
  138. package/.medusa/server/src/modules/plan-offer/utils/effective-config.js +84 -0
  139. package/.medusa/server/src/modules/plan-offer/utils/errors.js +55 -0
  140. package/.medusa/server/src/modules/renewal/index.js +13 -0
  141. package/.medusa/server/src/modules/renewal/migrations/Migration20260329185930.js +34 -0
  142. package/.medusa/server/src/modules/renewal/models/renewal-attempt.js +49 -0
  143. package/.medusa/server/src/modules/renewal/models/renewal-cycle.js +56 -0
  144. package/.medusa/server/src/modules/renewal/service.js +15 -0
  145. package/.medusa/server/src/modules/renewal/types/index.js +23 -0
  146. package/.medusa/server/src/modules/renewal/utils/admin-query.js +450 -0
  147. package/.medusa/server/src/modules/renewal/utils/errors.js +39 -0
  148. package/.medusa/server/src/modules/renewal/utils/observability.js +89 -0
  149. package/.medusa/server/src/modules/renewal/utils/scheduler-query.js +48 -0
  150. package/.medusa/server/src/modules/renewal/utils/upcoming-cycle.js +54 -0
  151. package/.medusa/server/src/modules/settings/index.js +13 -0
  152. package/.medusa/server/src/modules/settings/migrations/Migration20260403121004.js +17 -0
  153. package/.medusa/server/src/modules/settings/migrations/Migration20260403132519.js +17 -0
  154. package/.medusa/server/src/modules/settings/models/subscription-settings.js +32 -0
  155. package/.medusa/server/src/modules/settings/service.js +82 -0
  156. package/.medusa/server/src/modules/settings/types.js +15 -0
  157. package/.medusa/server/src/modules/settings/utils/audit.js +43 -0
  158. package/.medusa/server/src/modules/settings/utils/normalize-settings.js +99 -0
  159. package/.medusa/server/src/modules/subscription/index.js +13 -0
  160. package/.medusa/server/src/modules/subscription/migrations/Migration20260327143452.js +24 -0
  161. package/.medusa/server/src/modules/subscription/migrations/Migration20260329194835.js +16 -0
  162. package/.medusa/server/src/modules/subscription/models/subscription.js +64 -0
  163. package/.medusa/server/src/modules/subscription/service.js +13 -0
  164. package/.medusa/server/src/modules/subscription/types/index.js +17 -0
  165. package/.medusa/server/src/modules/subscription/utils/admin-query.js +465 -0
  166. package/.medusa/server/src/modules/subscription/utils/errors.js +28 -0
  167. package/.medusa/server/src/subscription-flows/create-subscription-from-cart.js +178 -0
  168. package/.medusa/server/src/workflows/apply-retention-offer.js +52 -0
  169. package/.medusa/server/src/workflows/approve-renewal-changes.js +61 -0
  170. package/.medusa/server/src/workflows/cancel-subscription.js +64 -0
  171. package/.medusa/server/src/workflows/create-or-upsert-plan-offer.js +11 -0
  172. package/.medusa/server/src/workflows/ensure-next-renewal-cycle.js +11 -0
  173. package/.medusa/server/src/workflows/finalize-cancellation.js +88 -0
  174. package/.medusa/server/src/workflows/force-renewal-cycle.js +11 -0
  175. package/.medusa/server/src/workflows/index.js +79 -0
  176. package/.medusa/server/src/workflows/mark-dunning-recovered.js +11 -0
  177. package/.medusa/server/src/workflows/mark-dunning-unrecovered.js +11 -0
  178. package/.medusa/server/src/workflows/pause-subscription.js +61 -0
  179. package/.medusa/server/src/workflows/process-renewal-cycle.js +43 -0
  180. package/.medusa/server/src/workflows/rebuild-analytics-daily-snapshots.js +13 -0
  181. package/.medusa/server/src/workflows/reject-renewal-changes.js +61 -0
  182. package/.medusa/server/src/workflows/resume-subscription.js +76 -0
  183. package/.medusa/server/src/workflows/run-dunning-retry.js +23 -0
  184. package/.medusa/server/src/workflows/schedule-subscription-plan-change.js +57 -0
  185. package/.medusa/server/src/workflows/start-cancellation-case.js +58 -0
  186. package/.medusa/server/src/workflows/start-dunning.js +11 -0
  187. package/.medusa/server/src/workflows/steps/apply-retention-offer.js +200 -0
  188. package/.medusa/server/src/workflows/steps/approve-renewal-changes.js +48 -0
  189. package/.medusa/server/src/workflows/steps/cancel-subscription.js +48 -0
  190. package/.medusa/server/src/workflows/steps/create-initial-renewal-cycle.js +6 -0
  191. package/.medusa/server/src/workflows/steps/create-subscription-log-event.js +61 -0
  192. package/.medusa/server/src/workflows/steps/create-subscription-record.js +56 -0
  193. package/.medusa/server/src/workflows/steps/ensure-next-renewal-cycle.js +151 -0
  194. package/.medusa/server/src/workflows/steps/finalize-cancellation.js +161 -0
  195. package/.medusa/server/src/workflows/steps/force-renewal-cycle.js +120 -0
  196. package/.medusa/server/src/workflows/steps/link-subscription-commerce-entities.js +44 -0
  197. package/.medusa/server/src/workflows/steps/mark-dunning-recovered.js +72 -0
  198. package/.medusa/server/src/workflows/steps/mark-dunning-unrecovered.js +53 -0
  199. package/.medusa/server/src/workflows/steps/normalize-analytics-rebuild-range.js +59 -0
  200. package/.medusa/server/src/workflows/steps/pause-subscription.js +50 -0
  201. package/.medusa/server/src/workflows/steps/process-renewal-cycle.js +641 -0
  202. package/.medusa/server/src/workflows/steps/rebuild-analytics-daily-snapshots.js +519 -0
  203. package/.medusa/server/src/workflows/steps/reject-renewal-changes.js +48 -0
  204. package/.medusa/server/src/workflows/steps/resume-subscription.js +45 -0
  205. package/.medusa/server/src/workflows/steps/run-dunning-retry.js +592 -0
  206. package/.medusa/server/src/workflows/steps/schedule-subscription-plan-change.js +81 -0
  207. package/.medusa/server/src/workflows/steps/shared-cancellation-log.js +3 -0
  208. package/.medusa/server/src/workflows/steps/shared-plan-offer.js +280 -0
  209. package/.medusa/server/src/workflows/steps/shared-renewal-approval.js +34 -0
  210. package/.medusa/server/src/workflows/steps/start-cancellation-case.js +147 -0
  211. package/.medusa/server/src/workflows/steps/start-dunning.js +237 -0
  212. package/.medusa/server/src/workflows/steps/toggle-plan-offer.js +33 -0
  213. package/.medusa/server/src/workflows/steps/update-cancellation-reason.js +95 -0
  214. package/.medusa/server/src/workflows/steps/update-dunning-retry-schedule.js +91 -0
  215. package/.medusa/server/src/workflows/steps/update-plan-offer.js +51 -0
  216. package/.medusa/server/src/workflows/steps/update-subscription-settings.js +91 -0
  217. package/.medusa/server/src/workflows/steps/update-subscription-shipping-address.js +54 -0
  218. package/.medusa/server/src/workflows/steps/upsert-plan-offer.js +48 -0
  219. package/.medusa/server/src/workflows/steps/validate-subscription-cart.js +280 -0
  220. package/.medusa/server/src/workflows/toggle-plan-offer.js +11 -0
  221. package/.medusa/server/src/workflows/update-cancellation-reason.js +53 -0
  222. package/.medusa/server/src/workflows/update-dunning-retry-schedule.js +11 -0
  223. package/.medusa/server/src/workflows/update-plan-offer.js +11 -0
  224. package/.medusa/server/src/workflows/update-subscription-settings.js +11 -0
  225. package/.medusa/server/src/workflows/update-subscription-shipping-address.js +99 -0
  226. package/.medusa/server/src/workflows/utils/analytics-incremental.js +24 -0
  227. package/.medusa/server/src/workflows/utils/date-output.js +13 -0
  228. package/.medusa/server/src/workflows/utils/subscription-settings.js +13 -0
  229. package/LICENSE +21 -0
  230. package/README.md +200 -0
  231. 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==