@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,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyRetentionOfferStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const cancellation_1 = require("../../modules/cancellation");
6
+ const types_1 = require("../../modules/cancellation/types");
7
+ const audit_1 = require("../../modules/cancellation/utils/audit");
8
+ const errors_1 = require("../../modules/cancellation/utils/errors");
9
+ const retention_offer_policy_1 = require("../../modules/cancellation/utils/retention-offer-policy");
10
+ const dunning_1 = require("../../modules/dunning");
11
+ const subscription_1 = require("../../modules/subscription");
12
+ const types_2 = require("../../modules/subscription/types");
13
+ const APPLIABLE_CANCELLATION_CASE_STATUSES = new Set([
14
+ types_1.CancellationCaseStatus.EVALUATING_RETENTION,
15
+ types_1.CancellationCaseStatus.RETENTION_OFFERED,
16
+ types_1.CancellationCaseStatus.REQUESTED,
17
+ ]);
18
+ async function loadCancellationCase(container, id) {
19
+ const cancellationModule = container.resolve(cancellation_1.CANCELLATION_MODULE);
20
+ try {
21
+ return (await cancellationModule.retrieveCancellationCase(id));
22
+ }
23
+ catch {
24
+ throw errors_1.cancellationErrors.notFound("CancellationCase", id);
25
+ }
26
+ }
27
+ async function loadSubscription(container, id) {
28
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
29
+ return (await subscriptionModule.retrieveSubscription(id));
30
+ }
31
+ async function loadActiveDunningCase(container, subscriptionId) {
32
+ const dunningModule = container.resolve(dunning_1.DUNNING_MODULE);
33
+ const dunningCases = (await dunningModule.listDunningCases({
34
+ subscription_id: subscriptionId,
35
+ }));
36
+ return dunningCases.find((dunningCase) => (0, retention_offer_policy_1.isActiveDunningCase)(dunningCase.status));
37
+ }
38
+ function validateCaseState(cancellationCase) {
39
+ if (cancellationCase.finalized_at) {
40
+ throw errors_1.cancellationErrors.alreadyFinalized(cancellationCase.id, cancellationCase.status);
41
+ }
42
+ if (!APPLIABLE_CANCELLATION_CASE_STATUSES.has(cancellationCase.status)) {
43
+ throw errors_1.cancellationErrors.invalidCaseState(cancellationCase.id, "apply retention offer", cancellationCase.status);
44
+ }
45
+ }
46
+ function validateOfferPayload(offerType, offerPayload) {
47
+ if (offerType === types_1.RetentionOfferType.PAUSE_OFFER) {
48
+ if (!("pause_offer" in offerPayload)) {
49
+ throw errors_1.cancellationErrors.invalidData("Pause offer payload must include 'pause_offer'");
50
+ }
51
+ return;
52
+ }
53
+ if (offerType === types_1.RetentionOfferType.DISCOUNT_OFFER) {
54
+ if (!("discount_offer" in offerPayload)) {
55
+ throw errors_1.cancellationErrors.invalidData("Discount offer payload must include 'discount_offer'");
56
+ }
57
+ return;
58
+ }
59
+ if (offerType === types_1.RetentionOfferType.BONUS_OFFER) {
60
+ if (!("bonus_offer" in offerPayload)) {
61
+ throw errors_1.cancellationErrors.invalidData("Bonus offer payload must include 'bonus_offer'");
62
+ }
63
+ return;
64
+ }
65
+ throw errors_1.cancellationErrors.invalidData(`Unsupported retention offer '${offerType}'`);
66
+ }
67
+ function validateOfferPolicy(params) {
68
+ const eligibleOfferTypes = (0, retention_offer_policy_1.getEligibleRetentionOfferTypes)({
69
+ subscription_status: params.subscription.status,
70
+ has_active_dunning: Boolean(params.activeDunningCase),
71
+ });
72
+ if (!eligibleOfferTypes.includes(params.offerType)) {
73
+ throw errors_1.cancellationErrors.offerOutOfPolicy(params.cancellationCase.id, params.offerType);
74
+ }
75
+ }
76
+ function buildAppliedRetentionMetadata(subscription, input, appliedAt) {
77
+ const base = {
78
+ ...(subscription.metadata ?? {}),
79
+ applied_retention_offer: {
80
+ offer_type: input.offer_type,
81
+ offer_payload: input.offer_payload,
82
+ decided_by: input.decided_by ?? null,
83
+ decision_reason: input.decision_reason ?? null,
84
+ applied_at: appliedAt.toISOString(),
85
+ },
86
+ };
87
+ return (0, audit_1.appendCancellationManualAction)(base, {
88
+ action: "apply_offer",
89
+ who: input.decided_by ?? null,
90
+ when: appliedAt.toISOString(),
91
+ why: input.decision_reason ?? null,
92
+ data: {
93
+ offer_type: input.offer_type,
94
+ },
95
+ });
96
+ }
97
+ exports.applyRetentionOfferStep = (0, workflows_sdk_1.createStep)("apply-retention-offer", async function (input, { container }) {
98
+ const cancellationModule = container.resolve(cancellation_1.CANCELLATION_MODULE);
99
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
100
+ const cancellationCase = await loadCancellationCase(container, input.cancellation_case_id);
101
+ validateCaseState(cancellationCase);
102
+ validateOfferPayload(input.offer_type, input.offer_payload);
103
+ const subscription = await loadSubscription(container, cancellationCase.subscription_id);
104
+ const activeDunningCase = await loadActiveDunningCase(container, cancellationCase.subscription_id);
105
+ validateOfferPolicy({
106
+ cancellationCase,
107
+ subscription,
108
+ activeDunningCase,
109
+ offerType: input.offer_type,
110
+ });
111
+ const appliedAt = new Date();
112
+ const finalCaseStatus = input.offer_type === types_1.RetentionOfferType.PAUSE_OFFER
113
+ ? types_1.CancellationCaseStatus.PAUSED
114
+ : types_1.CancellationCaseStatus.RETAINED;
115
+ const finalOutcome = input.offer_type === types_1.RetentionOfferType.PAUSE_OFFER
116
+ ? types_1.CancellationFinalOutcome.PAUSED
117
+ : types_1.CancellationFinalOutcome.RETAINED;
118
+ const createdEvent = (await cancellationModule.createRetentionOfferEvents({
119
+ cancellation_case_id: cancellationCase.id,
120
+ offer_type: input.offer_type,
121
+ offer_payload: input.offer_payload,
122
+ decision_status: types_1.RetentionOfferDecisionStatus.APPLIED,
123
+ decision_reason: input.decision_reason ?? null,
124
+ decided_at: appliedAt,
125
+ decided_by: input.decided_by ?? null,
126
+ applied_at: appliedAt,
127
+ metadata: {
128
+ ...(input.metadata ?? {}),
129
+ source: "apply_retention_offer_workflow",
130
+ },
131
+ }));
132
+ if (input.offer_type === types_1.RetentionOfferType.PAUSE_OFFER) {
133
+ await subscriptionModule.updateSubscriptions({
134
+ id: subscription.id,
135
+ status: types_2.SubscriptionStatus.PAUSED,
136
+ paused_at: appliedAt,
137
+ cancel_effective_at: null,
138
+ metadata: buildAppliedRetentionMetadata(subscription, input, appliedAt),
139
+ });
140
+ }
141
+ else {
142
+ await subscriptionModule.updateSubscriptions({
143
+ id: subscription.id,
144
+ metadata: buildAppliedRetentionMetadata(subscription, input, appliedAt),
145
+ });
146
+ }
147
+ await cancellationModule.updateCancellationCases({
148
+ id: cancellationCase.id,
149
+ status: finalCaseStatus,
150
+ final_outcome: finalOutcome,
151
+ finalized_at: appliedAt,
152
+ finalized_by: input.decided_by ?? null,
153
+ metadata: (0, audit_1.appendCancellationManualAction)({
154
+ ...(cancellationCase.metadata ?? {}),
155
+ ...(input.metadata ?? {}),
156
+ applied_retention_offer: {
157
+ event_id: createdEvent.id,
158
+ offer_type: input.offer_type,
159
+ final_outcome: finalOutcome,
160
+ applied_at: appliedAt.toISOString(),
161
+ },
162
+ }, {
163
+ action: "apply_offer",
164
+ who: input.decided_by ?? null,
165
+ when: appliedAt.toISOString(),
166
+ why: input.decision_reason ?? null,
167
+ data: {
168
+ event_id: createdEvent.id,
169
+ offer_type: input.offer_type,
170
+ final_outcome: finalOutcome,
171
+ },
172
+ }),
173
+ });
174
+ const updatedCase = (await cancellationModule.retrieveCancellationCase(cancellationCase.id));
175
+ return new workflows_sdk_1.StepResponse({
176
+ current: updatedCase,
177
+ previous: cancellationCase,
178
+ subscription: subscription,
179
+ cancellation_case_id: cancellationCase.id,
180
+ retention_offer_event_id: createdEvent.id,
181
+ subscription_id: subscription.id,
182
+ offer_type: input.offer_type,
183
+ final_case_status: finalCaseStatus,
184
+ final_outcome: finalOutcome,
185
+ }, {
186
+ previous_case: cancellationCase,
187
+ previous_subscription: subscription,
188
+ created_event_id: createdEvent.id,
189
+ });
190
+ }, async function (compensation, { container }) {
191
+ if (!compensation) {
192
+ return;
193
+ }
194
+ const cancellationModule = container.resolve(cancellation_1.CANCELLATION_MODULE);
195
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
196
+ await cancellationModule.deleteRetentionOfferEvents(compensation.created_event_id);
197
+ await cancellationModule.updateCancellationCases(compensation.previous_case);
198
+ await subscriptionModule.updateSubscriptions(compensation.previous_subscription);
199
+ });
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktcmV0ZW50aW9uLW9mZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9hcHBseS1yZXRlbnRpb24tb2ZmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTRFO0FBQzVFLDZEQUFnRTtBQUVoRSw0REFPeUM7QUFDekMsa0VBQXVGO0FBQ3ZGLG9FQUE0RTtBQUM1RSxvR0FHZ0U7QUFDaEUsbURBQXNEO0FBR3RELDZEQUFnRTtBQUVoRSw0REFBcUU7QUFHckUsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLEdBQUcsQ0FBeUI7SUFDM0UsOEJBQXNCLENBQUMsb0JBQW9CO0lBQzNDLDhCQUFzQixDQUFDLGlCQUFpQjtJQUN4Qyw4QkFBc0IsQ0FBQyxTQUFTO0NBQ2pDLENBQUMsQ0FBQTtBQXdFRixLQUFLLFVBQVUsb0JBQW9CLENBQ2pDLFNBQTRDLEVBQzVDLEVBQVU7SUFFVixNQUFNLGtCQUFrQixHQUN0QixTQUFTLENBQUMsT0FBTyxDQUFDLGtDQUFtQixDQUE4QixDQUFBO0lBRXJFLElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxNQUFNLGtCQUFrQixDQUFDLHdCQUF3QixDQUN2RCxFQUFFLENBQ0gsQ0FBMkIsQ0FBQTtJQUM5QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSwyQkFBa0IsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDM0QsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsZ0JBQWdCLENBQzdCLFNBQTRDLEVBQzVDLEVBQVU7SUFFVixNQUFNLGtCQUFrQixHQUN0QixTQUFTLENBQUMsT0FBTyxDQUFDLGtDQUFtQixDQUE4QixDQUFBO0lBRXJFLE9BQU8sQ0FBQyxNQUFNLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUF1QixDQUFBO0FBQ2xGLENBQUM7QUFFRCxLQUFLLFVBQVUs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
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.approveRenewalChangesStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const subscription_1 = require("../../modules/subscription");
6
+ const renewal_1 = require("../../modules/renewal");
7
+ const types_1 = require("../../modules/renewal/types");
8
+ const shared_renewal_approval_1 = require("./shared-renewal-approval");
9
+ exports.approveRenewalChangesStep = (0, workflows_sdk_1.createStep)("approve-renewal-changes", async function (input, { container }) {
10
+ const cycle = await (0, shared_renewal_approval_1.getRenewalCycleApprovalRecord)(container, input.renewal_cycle_id);
11
+ (0, shared_renewal_approval_1.validateRenewalApprovalTransition)(cycle, types_1.RenewalApprovalStatus.APPROVED);
12
+ const renewalModule = container.resolve(renewal_1.RENEWAL_MODULE);
13
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
14
+ const decidedAt = new Date();
15
+ const subscription = (await subscriptionModule.retrieveSubscription(cycle.subscription_id));
16
+ const updated = await renewalModule.updateRenewalCycles({
17
+ id: cycle.id,
18
+ approval_status: types_1.RenewalApprovalStatus.APPROVED,
19
+ approval_decided_at: decidedAt,
20
+ approval_decided_by: input.decided_by ?? null,
21
+ approval_reason: input.reason ?? null,
22
+ });
23
+ return new workflows_sdk_1.StepResponse({
24
+ current: updated,
25
+ previous: {
26
+ id: cycle.id,
27
+ subscription_id: cycle.subscription_id,
28
+ approval_status: cycle.approval_status,
29
+ approval_decided_at: cycle.approval_decided_at,
30
+ approval_decided_by: cycle.approval_decided_by,
31
+ approval_reason: cycle.approval_reason,
32
+ },
33
+ subscription,
34
+ }, {
35
+ id: cycle.id,
36
+ approval_status: cycle.approval_status,
37
+ approval_decided_at: cycle.approval_decided_at,
38
+ approval_decided_by: cycle.approval_decided_by,
39
+ approval_reason: cycle.approval_reason,
40
+ });
41
+ }, async function (previous, { container }) {
42
+ if (!previous) {
43
+ return;
44
+ }
45
+ const renewalModule = container.resolve(renewal_1.RENEWAL_MODULE);
46
+ await renewalModule.updateRenewalCycles(previous);
47
+ });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92ZS1yZW5ld2FsLWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2FwcHJvdmUtcmVuZXdhbC1jaGFuZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE0RTtBQUM1RSw2REFBZ0U7QUFFaEUsbURBQXNEO0FBRXRELHVEQUFtRTtBQUNuRSx1RUFHa0M7QUEyQ3JCLFFBQUEseUJBQXlCLEdBQUcsSUFBQSwwQkFBVSxFQUNqRCx5QkFBeUIsRUFDekIsS0FBSyxXQUFXLEtBQXFDLEVBQUUsRUFBRSxTQUFTLEVBQUU7SUFDbEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLHVEQUE2QixFQUMvQyxTQUFTLEVBQ1QsS0FBSyxDQUFDLGdCQUFnQixDQUN2QixDQUFBO0lBRUQsSUFBQSwyREFBaUMsRUFBQyxLQUFLLEVBQUUsNkJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFeEUsTUFBTSxhQUFhLEdBQ2pCLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0JBQWMsQ0FBeUIsQ0FBQTtJQUMzRCxNQUFNLGtCQUFrQixHQUN0QixTQUFTLENBQUMsT0FBTyxDQUFDLGtDQUFtQixDQUE4QixDQUFBO0lBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7SUFDNUIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLG9CQUFvQixDQUNqRSxLQUFLLENBQUMsZUFBZSxDQUN0QixDQUE0QyxDQUFBO0lBRTdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLG1CQUFtQixDQUFDO1FBQ3RELEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNaLGVBQWUsRUFBRSw2QkFBcUIsQ0FBQyxRQUFRO1FBQy9DLG1CQUFtQixFQUFFLFNBQVM7UUFDOUIsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJO1FBQzdDLGVBQWUsRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUk7S0FDdEMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLDRCQUFZLENBSXJCO1FBQ0UsT0FBTyxFQUFFLE9BQW1EO1FBQzVELFFBQVEsRUFBRTtZQUNSLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNaLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtZQUN0QyxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDdEMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtZQUM5QyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO1lBQzlDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtTQUN2QztRQUNELFlBQVk7S0FDYixFQUNEO1FBQ0UsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ1osZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1FBQ3RDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7UUFDOUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtRQUM5QyxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7S0FDdkMsQ0FDRixDQUFBO0FBQ0gsQ0FBQyxFQUNELEtBQUssV0FBVyxRQUEwQyxFQUFFLEVBQUUsU0FBUyxFQUFFO0lBQ3ZFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQ2pCLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0JBQWMsQ0FBeUIsQ0FBQTtJQUUzRCxNQUFNLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNuRCxDQUFDLENBQ0YsQ0FBQSJ9
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cancelSubscriptionStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const subscription_1 = require("../../modules/subscription");
6
+ const types_1 = require("../../modules/subscription/types");
7
+ const errors_1 = require("../../modules/subscription/utils/errors");
8
+ const pause_subscription_1 = require("./pause-subscription");
9
+ exports.cancelSubscriptionStep = (0, workflows_sdk_1.createStep)("cancel-subscription", async function (input, { container }) {
10
+ const subscriptionModuleService = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
11
+ const subscription = await subscriptionModuleService.retrieveSubscription(input.id);
12
+ if (subscription.status !== types_1.SubscriptionStatus.ACTIVE &&
13
+ subscription.status !== types_1.SubscriptionStatus.PAUSED &&
14
+ subscription.status !== types_1.SubscriptionStatus.PAST_DUE) {
15
+ throw errors_1.subscriptionErrors.invalidState(input.id, "be cancelled", subscription.status);
16
+ }
17
+ const cancelledAt = new Date();
18
+ const cancelEffectiveAt = input.effective_at === "end_of_cycle" && subscription.next_renewal_at
19
+ ? subscription.next_renewal_at
20
+ : cancelledAt;
21
+ const updated = await subscriptionModuleService.updateSubscriptions({
22
+ id: input.id,
23
+ status: types_1.SubscriptionStatus.CANCELLED,
24
+ cancelled_at: cancelledAt,
25
+ cancel_effective_at: cancelEffectiveAt,
26
+ next_renewal_at: null,
27
+ metadata: {
28
+ ...(subscription.metadata ?? {}),
29
+ cancel_context: {
30
+ reason: input.reason ?? null,
31
+ effective_at: input.effective_at ?? "immediately",
32
+ cancelled_at: cancelledAt.toISOString(),
33
+ triggered_by: input.triggered_by ?? null,
34
+ },
35
+ },
36
+ });
37
+ return new workflows_sdk_1.StepResponse({
38
+ current: (0, pause_subscription_1.asSubscriptionWorkflowRecord)(updated),
39
+ previous: (0, pause_subscription_1.asSubscriptionWorkflowRecord)(subscription),
40
+ }, (0, pause_subscription_1.asSubscriptionWorkflowRecord)(subscription));
41
+ }, async function (subscription, { container }) {
42
+ if (!subscription) {
43
+ return;
44
+ }
45
+ const subscriptionModuleService = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
46
+ await subscriptionModuleService.updateSubscriptions((0, pause_subscription_1.asSubscriptionUpdateInput)(subscription));
47
+ });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLXN1YnNjcmlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvY2FuY2VsLXN1YnNjcmlwdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNEU7QUFDNUUsNkRBQWdFO0FBRWhFLDREQUFxRTtBQUNyRSxvRUFBNEU7QUFDNUUsNkRBSzZCO0FBU2hCLFFBQUEsc0JBQXNCLEdBQUcsSUFBQSwwQkFBVSxFQUM5QyxxQkFBcUIsRUFDckIsS0FBSyxXQUFXLEtBQWtDLEVBQUUsRUFBRSxTQUFTLEVBQUU7SUFDL0QsTUFBTSx5QkFBeUIsR0FDN0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBbUIsQ0FBQyxDQUFBO0lBRXhDLE1BQU0sWUFBWSxHQUFHLE1BQU0seUJBQXlCLENBQUMsb0JBQW9CLENBQ3ZFLEtBQUssQ0FBQyxFQUFFLENBQ1QsQ0FBQTtJQUVELElBQ0UsWUFBWSxDQUFDLE1BQU0sS0FBSywwQkFBa0IsQ0FBQyxNQUFNO1FBQ2pELFlBQVksQ0FBQyxNQUFNLEtBQUssMEJBQWtCLENBQUMsTUFBTTtRQUNqRCxZQUFZLENBQUMsTUFBTSxLQUFLLDBCQUFrQixDQUFDLFFBQVEsRUFDbkQsQ0FBQztRQUNELE1BQU0sMkJBQWtCLENBQUMsWUFBWSxDQUNuQyxLQUFLLENBQUMsRUFBRSxFQUNSLGNBQWMsRUFDZCxZQUFZLENBQUMsTUFBTSxDQUNwQixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7SUFDOUIsTUFBTSxpQkFBaUIsR0FDckIsS0FBSyxDQUFDLFlBQVksS0FBSyxjQUFjLElBQUksWUFBWSxDQUFDLGVBQWU7UUFDbkUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxlQUFlO1FBQzlCLENBQUMsQ0FBQyxXQUFXLENBQUE7SUFFakIsTUFBTSxPQUFPLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQztRQUNsRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDWixNQUFNLEVBQUUsMEJBQWtCLENBQUMsU0FBUztRQUNwQyxZQUFZLEVBQUUsV0FBVztRQUN6QixtQkFBbUIsRUFBRSxpQkFBaUI7UUFDdEMsZUFBZSxFQUFFLElBQUk7UUFDckIsUUFBUSxFQUFFO1lBQ1IsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2hDLGNBQWMsRUFBRTtnQkFDZCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJO2dCQUM1QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxhQUFhO2dCQUNqRCxZQUFZLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDdkMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTthQUN6QztTQUNGO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLDRCQUFZLENBQ3JCO1FBQ0UsT0FBTyxFQUFFLElBQUEsaURBQTRCLEVBQUMsT0FBTyxDQUFDO1FBQzlDLFFBQVEsRUFBRSxJQUFBLGlEQUE0QixFQUFDLFlBQVksQ0FBQztLQUNyRCxFQUNELElBQUEsaURBQTRCLEVBQUMsWUFBWSxDQUFDLENBQzNDLENBQUE7QUFDSCxDQUFDLEVBQ0QsS0FBSyxXQUFXLFlBQXdDLEVBQUUsRUFBRSxTQUFTLEVBQUU7SUFDckUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSx5QkFBeUIsR0FDN0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBbUIsQ0FBQyxDQUFBO0lBRXhDLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQ2pELElBQUEsOENBQXlCLEVBQUMsWUFBWSxDQUFDLENBQ3hDLENBQUE7QUFDSCxDQUFDLENBQ0YsQ0FBQSJ9
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createInitialRenewalCycleStep = void 0;
4
+ var ensure_next_renewal_cycle_1 = require("./ensure-next-renewal-cycle");
5
+ Object.defineProperty(exports, "createInitialRenewalCycleStep", { enumerable: true, get: function () { return ensure_next_renewal_cycle_1.ensureNextRenewalCycleStep; } });
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWluaXRpYWwtcmVuZXdhbC1jeWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvY3JlYXRlLWluaXRpYWwtcmVuZXdhbC1jeWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFHb0M7QUFGbEMsMElBQUEsMEJBQTBCLE9BQWlDIn0=
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSubscriptionLogEventStep = void 0;
4
+ exports.persistSubscriptionLogEvent = persistSubscriptionLogEvent;
5
+ exports.createSubscriptionLogEventStepHandler = createSubscriptionLogEventStepHandler;
6
+ exports.compensateCreateSubscriptionLogEventStep = compensateCreateSubscriptionLogEventStep;
7
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
8
+ const activity_log_1 = require("../../modules/activity-log");
9
+ function isDuplicateDedupeKeyError(error) {
10
+ if (!error || typeof error !== "object") {
11
+ return false;
12
+ }
13
+ const code = "code" in error ? error.code : undefined;
14
+ const message = "message" in error ? error.message : undefined;
15
+ if (code === "23505") {
16
+ return true;
17
+ }
18
+ if (typeof message === "string" && message.includes("dedupe_key")) {
19
+ return true;
20
+ }
21
+ return false;
22
+ }
23
+ async function persistSubscriptionLogEvent(container, logEvent) {
24
+ const activityLogModule = container.resolve(activity_log_1.ACTIVITY_LOG_MODULE);
25
+ try {
26
+ const created = (await activityLogModule.createSubscriptionLogs(logEvent));
27
+ return {
28
+ record: created,
29
+ action: "created",
30
+ };
31
+ }
32
+ catch (error) {
33
+ if (!isDuplicateDedupeKeyError(error)) {
34
+ throw error;
35
+ }
36
+ return {
37
+ record: logEvent,
38
+ action: "existing",
39
+ };
40
+ }
41
+ }
42
+ async function createSubscriptionLogEventStepHandler(input, { container }) {
43
+ const result = await persistSubscriptionLogEvent(container, input.log_event);
44
+ return new workflows_sdk_1.StepResponse(result.record, result.action === "created"
45
+ ? {
46
+ action: "created",
47
+ subscription_log_id: result.record.id,
48
+ }
49
+ : {
50
+ action: "existing",
51
+ });
52
+ }
53
+ async function compensateCreateSubscriptionLogEventStep(compensation, { container }) {
54
+ if (!compensation || compensation.action !== "created") {
55
+ return;
56
+ }
57
+ const activityLogModule = container.resolve(activity_log_1.ACTIVITY_LOG_MODULE);
58
+ await activityLogModule.deleteSubscriptionLogs(compensation.subscription_log_id);
59
+ }
60
+ exports.createSubscriptionLogEventStep = (0, workflows_sdk_1.createStep)("create-subscription-log-event", createSubscriptionLogEventStepHandler, compensateCreateSubscriptionLogEventStep);
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN1YnNjcmlwdGlvbi1sb2ctZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2NyZWF0ZS1zdWJzY3JpcHRpb24tbG9nLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThDQSxrRUE2QkM7QUFFRCxzRkFvQkM7QUFFRCw0RkFZQztBQS9HRCxxRUFBNEU7QUFDNUUsNkRBRW1DO0FBd0JuQyxTQUFTLHlCQUF5QixDQUFDLEtBQWM7SUFDL0MsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDckQsTUFBTSxPQUFPLEdBQUcsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRTlELElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFTSxLQUFLLFVBQVUsMkJBQTJCLENBQy9DLFNBQTRDLEVBQzVDLFFBQW9DO0lBS3BDLE1BQU0saUJBQWlCLEdBQ3JCLFNBQVMsQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQTZCLENBQUE7SUFFcEUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLGlCQUFpQixDQUFDLHNCQUFzQixDQUM3RCxRQUFlLENBQ2hCLENBQTBCLENBQUE7UUFFM0IsT0FBTztZQUNMLE1BQU0sRUFBRSxPQUFPO1lBQ2YsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQTtJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO1FBRUQsT0FBTztZQUNMLE1BQU0sRUFBRSxRQUFpQztZQUN6QyxNQUFNLEVBQUUsVUFBVTtTQUNuQixDQUFBO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUscUNBQXFDLENBQ3pELEtBQTBDLEVBQzFDLEVBQUUsU0FBUyxFQUFvRDtJQUUvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFNUUsT0FBTyxJQUFJLDRCQUFZLENBSXJCLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTO1FBQ3pCLENBQUMsQ0FBQztZQUNFLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtTQUN0QztRQUNILENBQUMsQ0FBQztZQUNFLE1BQU0sRUFBRSxVQUFVO1NBQ25CLENBQ04sQ0FBQTtBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUsd0NBQXdDLENBQzVELFlBQW9ELEVBQ3BELEVBQUUsU0FBUyxFQUFvRDtJQUUvRCxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdkQsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUNyQixTQUFTLENBQUMsT0FBTyxDQUFDLGtDQUFtQixDQUE2QixDQUFBO0lBRXBFLE1BQU0saUJBQWlCLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUE7QUFDbEYsQ0FBQztBQUVZLFFBQUEsOEJBQThCLEdBQUcsSUFBQSwwQkFBVSxFQUN0RCwrQkFBK0IsRUFDL0IscUNBQXFDLEVBQ3JDLHdDQUF3QyxDQUN6QyxDQUFBIn0=
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSubscriptionRecordStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const subscription_1 = require("../../modules/subscription");
6
+ const types_1 = require("../../modules/subscription/types");
7
+ exports.createSubscriptionRecordStep = (0, workflows_sdk_1.createStep)("create-subscription-record", async function (input, { container }) {
8
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
9
+ const created = await subscriptionModule.createSubscriptions({
10
+ reference: buildSubscriptionReference(input.order_display_id, input.order_id),
11
+ status: types_1.SubscriptionStatus.ACTIVE,
12
+ customer_id: input.customer_id,
13
+ cart_id: input.cart_id,
14
+ product_id: input.product_snapshot.product_id,
15
+ variant_id: input.product_snapshot.variant_id,
16
+ frequency_interval: input.frequency_interval,
17
+ frequency_value: input.frequency_value,
18
+ started_at: new Date(input.started_at),
19
+ next_renewal_at: input.next_renewal_at
20
+ ? new Date(input.next_renewal_at)
21
+ : null,
22
+ last_renewal_at: null,
23
+ paused_at: null,
24
+ cancelled_at: null,
25
+ cancel_effective_at: null,
26
+ skip_next_cycle: false,
27
+ is_trial: input.is_trial,
28
+ trial_ends_at: input.trial_ends_at ? new Date(input.trial_ends_at) : null,
29
+ customer_snapshot: input.customer_snapshot,
30
+ product_snapshot: input.product_snapshot,
31
+ pricing_snapshot: input.pricing_snapshot,
32
+ shipping_address: input.shipping_address,
33
+ payment_context: input.payment_context,
34
+ pending_update_data: null,
35
+ metadata: {
36
+ source: "store_cart_subscribe",
37
+ source_order_id: input.order_id,
38
+ },
39
+ });
40
+ return new workflows_sdk_1.StepResponse({
41
+ id: created.id,
42
+ }, created.id);
43
+ }, async function (subscriptionId, { container }) {
44
+ if (!subscriptionId) {
45
+ return;
46
+ }
47
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
48
+ await subscriptionModule.deleteSubscriptions([subscriptionId]);
49
+ });
50
+ function buildSubscriptionReference(orderDisplayId, orderId) {
51
+ if (orderDisplayId !== null && orderDisplayId !== undefined) {
52
+ return `SUB-${String(orderDisplayId)}`;
53
+ }
54
+ return `SUB-${orderId}`;
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN1YnNjcmlwdGlvbi1yZWNvcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2NyZWF0ZS1zdWJzY3JpcHRpb24tcmVjb3JkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE0RTtBQUM1RSw2REFBZ0U7QUFTaEUsNERBQXFFO0FBMkJ4RCxRQUFBLDRCQUE0QixHQUFHLElBQUEsMEJBQVUsRUFDcEQsNEJBQTRCLEVBQzVCLEtBQUssV0FDSCxLQUF3QyxFQUN4QyxFQUFFLFNBQVMsRUFBRTtJQUViLE1BQU0sa0JBQWtCLEdBQ3RCLFNBQVMsQ0FBQyxPQUFPLENBQTRCLGtDQUFtQixDQUFDLENBQUE7SUFFbkUsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQztRQUMzRCxTQUFTLEVBQUUsMEJBQTBCLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDN0UsTUFBTSxFQUFFLDBCQUFrQixDQUFDLE1BQU07UUFDakMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1FBQzlCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixVQUFVLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQVU7UUFDN0MsVUFBVSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVO1FBQzdDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7UUFDNUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1FBQ3RDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3RDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtZQUNwQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUNqQyxDQUFDLENBQUMsSUFBSTtRQUNSLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLFNBQVMsRUFBRSxJQUFJO1FBQ2YsWUFBWSxFQUFFLElBQUk7UUFDbEIsbUJBQW1CLEVBQUUsSUFBSTtRQUN6QixlQUFlLEVBQUUsS0FBSztRQUN0QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7UUFDeEIsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUN6RSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1FBQzFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7UUFDeEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtRQUN4QyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1FBQ3hDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtRQUN0QyxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLFFBQVEsRUFBRTtZQUNSLE1BQU0sRUFBRSxzQkFBc0I7WUFDOUIsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRO1NBQ2hDO0tBQ0ssQ0FBQyxDQUFBO0lBRVQsT0FBTyxJQUFJLDRCQUFZLENBQ3JCO1FBQ0UsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0tBQ2YsRUFDRCxPQUFPLENBQUMsRUFBRSxDQUNYLENBQUE7QUFDSCxDQUFDLEVBQ0QsS0FBSyxXQUFXLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRTtJQUMzQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLGtCQUFrQixHQUN0QixTQUFTLENBQUMsT0FBTyxDQUE0QixrQ0FBbUIsQ0FBQyxDQUFBO0lBRW5FLE1BQU0sa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ2hFLENBQUMsQ0FDRixDQUFBO0FBRUQsU0FBUywwQkFBMEIsQ0FDakMsY0FBc0MsRUFDdEMsT0FBZTtJQUVmLElBQUksY0FBYyxLQUFLLElBQUksSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUQsT0FBTyxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFBO0lBQ3hDLENBQUM7SUFFRCxPQUFPLE9BQU8sT0FBTyxFQUFFLENBQUE7QUFDekIsQ0FBQyJ9
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureNextRenewalCycleStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const renewal_1 = require("../../modules/renewal");
6
+ const types_1 = require("../../modules/renewal/types");
7
+ const upcoming_cycle_1 = require("../../modules/renewal/utils/upcoming-cycle");
8
+ const types_2 = require("../../modules/settings/types");
9
+ const subscription_1 = require("../../modules/subscription");
10
+ const subscription_settings_1 = require("../utils/subscription-settings");
11
+ exports.ensureNextRenewalCycleStep = (0, workflows_sdk_1.createStep)("ensure-next-renewal-cycle", async function (input, { container }) {
12
+ const renewalModule = container.resolve(renewal_1.RENEWAL_MODULE);
13
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
14
+ const subscription = (await subscriptionModule.retrieveSubscription(input.subscription_id));
15
+ const existingCycles = (await renewalModule.listRenewalCycles({
16
+ subscription_id: subscription.id,
17
+ }));
18
+ if (!(0, upcoming_cycle_1.shouldSubscriptionHaveUpcomingRenewalCycle)(subscription)) {
19
+ const scheduledCycles = existingCycles.filter((cycle) => cycle.status === types_1.RenewalCycleStatus.SCHEDULED);
20
+ if (scheduledCycles.length) {
21
+ await renewalModule.deleteRenewalCycles(scheduledCycles.map((cycle) => cycle.id));
22
+ return new workflows_sdk_1.StepResponse({
23
+ action: "deleted",
24
+ subscription_id: subscription.id,
25
+ renewal_cycle_id: null,
26
+ }, {
27
+ action: "deleted",
28
+ previous: scheduledCycles.map((cycle) => ({
29
+ id: cycle.id,
30
+ subscription_id: cycle.subscription_id,
31
+ scheduled_for: cycle.scheduled_for,
32
+ processed_at: cycle.processed_at,
33
+ status: cycle.status,
34
+ approval_required: cycle.approval_required,
35
+ approval_status: cycle.approval_status,
36
+ approval_decided_at: cycle.approval_decided_at,
37
+ approval_decided_by: cycle.approval_decided_by,
38
+ approval_reason: cycle.approval_reason,
39
+ generated_order_id: cycle.generated_order_id,
40
+ applied_pending_update_data: cycle.applied_pending_update_data,
41
+ last_error: cycle.last_error,
42
+ attempt_count: cycle.attempt_count,
43
+ metadata: cycle.metadata,
44
+ })),
45
+ });
46
+ }
47
+ return new workflows_sdk_1.StepResponse({
48
+ action: "noop",
49
+ subscription_id: subscription.id,
50
+ renewal_cycle_id: null,
51
+ });
52
+ }
53
+ const scheduledFor = subscription.next_renewal_at;
54
+ const settings = await (0, subscription_settings_1.getEffectiveSubscriptionSettings)(container);
55
+ const existingCycle = (0, upcoming_cycle_1.findUpcomingRenewalCycle)(existingCycles, scheduledFor);
56
+ if (!existingCycle) {
57
+ const createTimeBehavior = settings.is_persisted
58
+ ? settings.default_renewal_behavior
59
+ : types_2.SubscriptionRenewalBehavior.REQUIRE_REVIEW_FOR_PENDING_CHANGES;
60
+ const approvalState = (0, upcoming_cycle_1.deriveUpcomingRenewalApprovalState)(subscription, scheduledFor, createTimeBehavior);
61
+ const created = await renewalModule.createRenewalCycles({
62
+ subscription_id: subscription.id,
63
+ scheduled_for: scheduledFor,
64
+ status: types_1.RenewalCycleStatus.SCHEDULED,
65
+ metadata: {
66
+ settings_policy: {
67
+ default_renewal_behavior: createTimeBehavior,
68
+ settings_version: settings.version,
69
+ is_persisted: settings.is_persisted,
70
+ },
71
+ },
72
+ ...approvalState,
73
+ });
74
+ return new workflows_sdk_1.StepResponse({
75
+ action: "created",
76
+ subscription_id: subscription.id,
77
+ renewal_cycle_id: created.id,
78
+ }, {
79
+ action: "created",
80
+ renewal_cycle_id: created.id,
81
+ });
82
+ }
83
+ const existingBehavior = existingCycle.metadata?.settings_policy?.default_renewal_behavior ??
84
+ (settings.is_persisted
85
+ ? settings.default_renewal_behavior
86
+ : types_2.SubscriptionRenewalBehavior.REQUIRE_REVIEW_FOR_PENDING_CHANGES);
87
+ const approvalState = (0, upcoming_cycle_1.deriveUpcomingRenewalApprovalState)(subscription, scheduledFor, existingBehavior);
88
+ if (existingCycle.status === types_1.RenewalCycleStatus.PROCESSING ||
89
+ existingCycle.status === types_1.RenewalCycleStatus.SUCCEEDED) {
90
+ return new workflows_sdk_1.StepResponse({
91
+ action: "noop",
92
+ subscription_id: subscription.id,
93
+ renewal_cycle_id: existingCycle.id,
94
+ });
95
+ }
96
+ if (existingCycle.approval_required === approvalState.approval_required &&
97
+ existingCycle.approval_status === approvalState.approval_status &&
98
+ existingCycle.approval_decided_at === approvalState.approval_decided_at &&
99
+ existingCycle.approval_decided_by === approvalState.approval_decided_by &&
100
+ existingCycle.approval_reason === approvalState.approval_reason) {
101
+ return new workflows_sdk_1.StepResponse({
102
+ action: "noop",
103
+ subscription_id: subscription.id,
104
+ renewal_cycle_id: existingCycle.id,
105
+ });
106
+ }
107
+ const updated = await renewalModule.updateRenewalCycles({
108
+ id: existingCycle.id,
109
+ ...approvalState,
110
+ metadata: {
111
+ ...(existingCycle.metadata ?? {}),
112
+ settings_policy: {
113
+ default_renewal_behavior: existingBehavior,
114
+ settings_version: existingCycle.metadata?.settings_policy?.settings_version ?? settings.version,
115
+ is_persisted: existingCycle.metadata?.settings_policy?.is_persisted ?? settings.is_persisted,
116
+ },
117
+ },
118
+ });
119
+ return new workflows_sdk_1.StepResponse({
120
+ action: "updated",
121
+ subscription_id: subscription.id,
122
+ renewal_cycle_id: updated.id,
123
+ }, {
124
+ action: "updated",
125
+ previous: {
126
+ id: existingCycle.id,
127
+ approval_required: existingCycle.approval_required,
128
+ approval_status: existingCycle.approval_status,
129
+ approval_decided_at: existingCycle.approval_decided_at,
130
+ approval_decided_by: existingCycle.approval_decided_by,
131
+ approval_reason: existingCycle.approval_reason,
132
+ },
133
+ });
134
+ }, async function (compensation, { container }) {
135
+ if (!compensation) {
136
+ return;
137
+ }
138
+ const renewalModule = container.resolve(renewal_1.RENEWAL_MODULE);
139
+ if (compensation.action === "created") {
140
+ await renewalModule.deleteRenewalCycles(compensation.renewal_cycle_id);
141
+ return;
142
+ }
143
+ if (compensation.action === "deleted") {
144
+ for (const cycle of compensation.previous) {
145
+ await renewalModule.createRenewalCycles(cycle);
146
+ }
147
+ return;
148
+ }
149
+ await renewalModule.updateRenewalCycles(compensation.previous);
150
+ });
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5zdXJlLW5leHQtcmVuZXdhbC1jeWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvZW5zdXJlLW5leHQtcmVuZXdhbC1jeWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNEU7QUFDNUUsbURBQXNEO0FBRXRELHVEQUdvQztBQUNwQywrRUFNbUQ7QUFDbkQsd0RBQTBFO0FBQzFFLDZEQUFnRTtBQUVoRSwwRUFBaUY7QUFpRHBFLFFBQUEsMEJBQTBCLEdBQUcsSUFBQSwwQkFBVSxFQUNsRCwyQkFBMkIsRUFDM0IsS0FBSyxXQUNILEtBQXNDLEVBQ3RDLEVBQUUsU0FBUyxFQUFFO0lBRWIsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBdUIsd0JBQWMsQ0FBQyxDQUFBO0lBQzdFLE1BQU0sa0JBQWtCLEdBQ3RCLFNBQVMsQ0FBQyxPQUFPLENBQTRCLGtDQUFtQixDQUFDLENBQUE7SUFFbkUsTUFBTSxZQUFZLEdBQ2hCLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FDNUMsS0FBSyxDQUFDLGVBQWUsQ0FDdEIsQ0FBc0MsQ0FBQTtJQUV6QyxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQU0sYUFBYSxDQUFDLGlCQUFpQixDQUFDO1FBQzVELGVBQWUsRUFBRSxZQUFZLENBQUMsRUFBRTtLQUMxQixDQUFDLENBQWlDLENBQUE7SUFFMUMsSUFBSSxDQUFDLElBQUEsMkRBQTBDLEVBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUM5RCxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUMzQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSywwQkFBa0IsQ0FBQyxTQUFTLENBQ3pELENBQUE7UUFFRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLGFBQWEsQ0FBQyxtQkFBbUIsQ0FD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