@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,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.finalizeCancellationStep = 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 subscription_1 = require("../../modules/subscription");
10
+ const types_2 = require("../../modules/subscription/types");
11
+ const errors_2 = require("../../modules/subscription/utils/errors");
12
+ const FINALIZABLE_CANCELLATION_CASE_STATUSES = new Set([
13
+ types_1.CancellationCaseStatus.REQUESTED,
14
+ types_1.CancellationCaseStatus.EVALUATING_RETENTION,
15
+ types_1.CancellationCaseStatus.RETENTION_OFFERED,
16
+ ]);
17
+ async function loadCancellationCase(container, id) {
18
+ const cancellationModule = container.resolve(cancellation_1.CANCELLATION_MODULE);
19
+ try {
20
+ return (await cancellationModule.retrieveCancellationCase(id));
21
+ }
22
+ catch {
23
+ throw errors_1.cancellationErrors.notFound("CancellationCase", id);
24
+ }
25
+ }
26
+ async function loadSubscription(container, id) {
27
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
28
+ return (await subscriptionModule.retrieveSubscription(id));
29
+ }
30
+ function validateCaseState(cancellationCase) {
31
+ if (cancellationCase.finalized_at) {
32
+ throw errors_1.cancellationErrors.alreadyFinalized(cancellationCase.id, cancellationCase.status);
33
+ }
34
+ if (!FINALIZABLE_CANCELLATION_CASE_STATUSES.has(cancellationCase.status)) {
35
+ throw errors_1.cancellationErrors.invalidCaseState(cancellationCase.id, "finalize cancellation", cancellationCase.status);
36
+ }
37
+ }
38
+ function validateSubscriptionState(subscription) {
39
+ if (subscription.status !== types_2.SubscriptionStatus.ACTIVE &&
40
+ subscription.status !== types_2.SubscriptionStatus.PAUSED &&
41
+ subscription.status !== types_2.SubscriptionStatus.PAST_DUE) {
42
+ throw errors_2.subscriptionErrors.invalidState(subscription.id, "be cancelled", subscription.status);
43
+ }
44
+ }
45
+ function resolveCancellationReason(cancellationCase, input) {
46
+ return input.reason?.trim() || cancellationCase.reason?.trim() || null;
47
+ }
48
+ function resolveCancellationReasonCategory(cancellationCase, input) {
49
+ return input.reason_category ?? cancellationCase.reason_category ?? null;
50
+ }
51
+ function resolveCancelEffectiveAt(subscription, effectiveAt, cancelledAt) {
52
+ if (effectiveAt === "end_of_cycle" && subscription.next_renewal_at) {
53
+ return subscription.next_renewal_at;
54
+ }
55
+ return cancelledAt;
56
+ }
57
+ function buildSubscriptionCancellationMetadata(subscription, input, reason, cancelEffectiveAt, cancelledAt) {
58
+ const base = {
59
+ ...(subscription.metadata ?? {}),
60
+ cancel_context: {
61
+ reason,
62
+ effective_at: input.effective_at ?? "immediately",
63
+ cancel_effective_at: cancelEffectiveAt.toISOString(),
64
+ cancelled_at: cancelledAt.toISOString(),
65
+ finalized_by: input.finalized_by ?? null,
66
+ },
67
+ };
68
+ return (0, audit_1.appendCancellationManualAction)(base, {
69
+ action: "finalize_cancellation",
70
+ who: input.finalized_by ?? null,
71
+ when: cancelledAt.toISOString(),
72
+ why: reason,
73
+ data: {
74
+ effective_at: input.effective_at ?? "immediately",
75
+ cancel_effective_at: cancelEffectiveAt.toISOString(),
76
+ },
77
+ });
78
+ }
79
+ function buildCaseFinalizeMetadata(cancellationCase, input, reason, reasonCategory, cancelEffectiveAt, finalizedAt) {
80
+ const base = {
81
+ ...(cancellationCase.metadata ?? {}),
82
+ ...(input.metadata ?? {}),
83
+ final_cancellation: {
84
+ reason,
85
+ reason_category: reasonCategory,
86
+ effective_at: input.effective_at ?? "immediately",
87
+ cancel_effective_at: cancelEffectiveAt.toISOString(),
88
+ finalized_by: input.finalized_by ?? null,
89
+ finalized_at: finalizedAt.toISOString(),
90
+ },
91
+ };
92
+ return (0, audit_1.appendCancellationManualAction)(base, {
93
+ action: "finalize_cancellation",
94
+ who: input.finalized_by ?? null,
95
+ when: finalizedAt.toISOString(),
96
+ why: reason,
97
+ data: {
98
+ reason_category: reasonCategory,
99
+ effective_at: input.effective_at ?? "immediately",
100
+ cancel_effective_at: cancelEffectiveAt.toISOString(),
101
+ },
102
+ });
103
+ }
104
+ exports.finalizeCancellationStep = (0, workflows_sdk_1.createStep)("finalize-cancellation", async function (input, { container }) {
105
+ const cancellationModule = container.resolve(cancellation_1.CANCELLATION_MODULE);
106
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
107
+ const cancellationCase = await loadCancellationCase(container, input.cancellation_case_id);
108
+ validateCaseState(cancellationCase);
109
+ const subscription = await loadSubscription(container, cancellationCase.subscription_id);
110
+ validateSubscriptionState(subscription);
111
+ const reason = resolveCancellationReason(cancellationCase, input);
112
+ if (!reason) {
113
+ throw errors_1.cancellationErrors.missingCancellationReason(cancellationCase.id);
114
+ }
115
+ const reasonCategory = resolveCancellationReasonCategory(cancellationCase, input);
116
+ const finalizedAt = new Date();
117
+ const cancelEffectiveAt = resolveCancelEffectiveAt(subscription, input.effective_at, finalizedAt);
118
+ await subscriptionModule.updateSubscriptions({
119
+ id: subscription.id,
120
+ status: types_2.SubscriptionStatus.CANCELLED,
121
+ cancelled_at: finalizedAt,
122
+ cancel_effective_at: cancelEffectiveAt,
123
+ next_renewal_at: null,
124
+ metadata: buildSubscriptionCancellationMetadata(subscription, input, reason, cancelEffectiveAt, finalizedAt),
125
+ });
126
+ await cancellationModule.updateCancellationCases({
127
+ id: cancellationCase.id,
128
+ status: types_1.CancellationCaseStatus.CANCELED,
129
+ reason,
130
+ reason_category: reasonCategory,
131
+ notes: input.notes ?? cancellationCase.notes ?? null,
132
+ final_outcome: types_1.CancellationFinalOutcome.CANCELED,
133
+ finalized_at: finalizedAt,
134
+ finalized_by: input.finalized_by ?? null,
135
+ cancellation_effective_at: cancelEffectiveAt,
136
+ metadata: buildCaseFinalizeMetadata(cancellationCase, input, reason, reasonCategory, cancelEffectiveAt, finalizedAt),
137
+ });
138
+ const updatedCase = (await cancellationModule.retrieveCancellationCase(cancellationCase.id));
139
+ return new workflows_sdk_1.StepResponse({
140
+ current: updatedCase,
141
+ previous: cancellationCase,
142
+ subscription: subscription,
143
+ cancellation_case_id: cancellationCase.id,
144
+ subscription_id: subscription.id,
145
+ case_status: types_1.CancellationCaseStatus.CANCELED,
146
+ final_outcome: types_1.CancellationFinalOutcome.CANCELED,
147
+ cancel_effective_at: cancelEffectiveAt,
148
+ }, {
149
+ previous_case: cancellationCase,
150
+ previous_subscription: subscription,
151
+ });
152
+ }, async function (compensation, { container }) {
153
+ if (!compensation) {
154
+ return;
155
+ }
156
+ const cancellationModule = container.resolve(cancellation_1.CANCELLATION_MODULE);
157
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
158
+ await cancellationModule.updateCancellationCases(compensation.previous_case);
159
+ await subscriptionModule.updateSubscriptions(compensation.previous_subscription);
160
+ });
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYWxpemUtY2FuY2VsbGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9maW5hbGl6ZS1jYW5jZWxsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTRFO0FBQzVFLDZEQUFnRTtBQUVoRSw0REFJeUM7QUFDekMsa0VBQXVGO0FBQ3ZGLG9FQUE0RTtBQUM1RSw2REFBZ0U7QUFFaEUsNERBQXFFO0FBQ3JFLG9FQUE0RTtBQUc1RSxNQUFNLHNDQUFzQyxHQUFHLElBQUksR0FBRyxDQUF5QjtJQUM3RSw4QkFBc0IsQ0FBQyxTQUFTO0lBQ2hDLDhCQUFzQixDQUFDLG9CQUFvQjtJQUMzQyw4QkFBc0IsQ0FBQyxpQkFBaUI7Q0FDekMsQ0FBQyxDQUFBO0FBK0RGLEtBQUssVUFBVSxvQkFBb0IsQ0FDakMsU0FBNEMsRUFDNUMsRUFBVTtJQUVWLE1BQU0sa0JBQWtCLEdBQ3RCLFNBQVMsQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQThCLENBQUE7SUFFckUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUFDLE1BQU0sa0JBQWtCLENBQUMsd0JBQXdCLENBQ3ZELEVBQUUsQ0FDSCxDQUEyQixDQUFBO0lBQzlCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxNQUFNLDJCQUFrQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxnQkFBZ0IsQ0FDN0IsU0FBNEMsRUFDNUMsRUFBVTtJQUVWLE1BQU0sa0JBQWtCLEdBQ3RCLFNBQVMsQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQThCLENBQUE7SUFFckUsT0FBTyxDQUFDLE1BQU0sa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQXVCLENBQUE7QUFDbEYsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsZ0JBQXdD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
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.forceRenewalCycleStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const renewal_1 = require("../../modules/renewal");
6
+ const subscription_1 = require("../../modules/subscription");
7
+ const types_1 = require("../../modules/renewal/types");
8
+ const errors_1 = require("../../modules/renewal/utils/errors");
9
+ const observability_1 = require("../../modules/renewal/utils/observability");
10
+ const normalize_log_event_1 = require("../../modules/activity-log/utils/normalize-log-event");
11
+ const types_2 = require("../../modules/activity-log/types");
12
+ const process_renewal_cycle_1 = require("../process-renewal-cycle");
13
+ const create_subscription_log_event_1 = require("./create-subscription-log-event");
14
+ exports.forceRenewalCycleStep = (0, workflows_sdk_1.createStep)("force-renewal-cycle", async function (input, { container }) {
15
+ const logger = container.resolve("logger");
16
+ const renewalModule = container.resolve(renewal_1.RENEWAL_MODULE);
17
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
18
+ const correlationId = input.correlation_id ?? (0, observability_1.createRenewalCorrelationId)("renewal-force");
19
+ let cycle;
20
+ try {
21
+ cycle = await renewalModule.retrieveRenewalCycle(input.renewal_cycle_id);
22
+ }
23
+ catch {
24
+ throw errors_1.renewalErrors.notFound("RenewalCycle", input.renewal_cycle_id);
25
+ }
26
+ const subscription = (await subscriptionModule.retrieveSubscription(cycle.subscription_id));
27
+ (0, observability_1.logRenewalEvent)(logger, "info", {
28
+ event: "renewal.force",
29
+ outcome: "started",
30
+ correlation_id: correlationId,
31
+ renewal_cycle_id: cycle.id,
32
+ subscription_id: cycle.subscription_id,
33
+ trigger_type: "manual",
34
+ triggered_by: input.triggered_by ?? null,
35
+ });
36
+ try {
37
+ if (cycle.status === types_1.RenewalCycleStatus.PROCESSING) {
38
+ throw errors_1.renewalErrors.alreadyProcessing(cycle.id);
39
+ }
40
+ if (cycle.status === types_1.RenewalCycleStatus.SUCCEEDED) {
41
+ throw errors_1.renewalErrors.duplicateExecutionBlocked(cycle.id);
42
+ }
43
+ if (cycle.status !== types_1.RenewalCycleStatus.SCHEDULED &&
44
+ cycle.status !== types_1.RenewalCycleStatus.FAILED) {
45
+ throw errors_1.renewalErrors.invalidTransition(cycle.id, `Renewal '${cycle.id}' can only be force-run from 'scheduled' or 'failed' state`);
46
+ }
47
+ if (cycle.approval_required &&
48
+ cycle.approval_status !== types_1.RenewalApprovalStatus.APPROVED) {
49
+ throw errors_1.renewalErrors.invalidTransition(cycle.id, `Renewal '${cycle.id}' requires approved changes before it can be force-run`);
50
+ }
51
+ await (0, create_subscription_log_event_1.persistSubscriptionLogEvent)(container, (0, normalize_log_event_1.normalizeActivityLogEvent)({
52
+ subscription_id: cycle.subscription_id,
53
+ customer_id: subscription.customer_id ?? null,
54
+ event_type: types_2.ActivityLogEventType.RENEWAL_FORCE_REQUESTED,
55
+ actor_type: types_2.ActivityLogActorType.USER,
56
+ actor_id: input.triggered_by ?? null,
57
+ display: {
58
+ subscription_reference: subscription.reference,
59
+ customer_name: subscription.customer_snapshot?.full_name ?? null,
60
+ product_title: subscription.product_snapshot?.product_title ?? null,
61
+ variant_title: subscription.product_snapshot?.variant_title ?? null,
62
+ },
63
+ reason: input.reason ?? null,
64
+ metadata: {
65
+ source: "admin",
66
+ renewal_cycle_id: cycle.id,
67
+ trigger_type: "manual",
68
+ },
69
+ correlation_id: correlationId,
70
+ dedupe: {
71
+ scope: "renewal",
72
+ target_id: cycle.id,
73
+ qualifier: correlationId,
74
+ },
75
+ }));
76
+ await (0, process_renewal_cycle_1.processRenewalCycleWorkflow)(container).run({
77
+ input: {
78
+ renewal_cycle_id: cycle.id,
79
+ trigger_type: "manual",
80
+ triggered_by: input.triggered_by ?? null,
81
+ reason: input.reason ?? null,
82
+ correlation_id: correlationId,
83
+ },
84
+ });
85
+ }
86
+ catch (error) {
87
+ const failureKind = (0, observability_1.classifyRenewalFailure)(error);
88
+ const level = failureKind === "already_processing" || failureKind === "duplicate_execution"
89
+ ? "warn"
90
+ : "error";
91
+ (0, observability_1.logRenewalEvent)(logger, level, {
92
+ event: "renewal.force",
93
+ outcome: failureKind === "already_processing" || failureKind === "duplicate_execution"
94
+ ? "blocked"
95
+ : "failed",
96
+ correlation_id: correlationId,
97
+ renewal_cycle_id: cycle.id,
98
+ subscription_id: cycle.subscription_id,
99
+ trigger_type: "manual",
100
+ triggered_by: input.triggered_by ?? null,
101
+ failure_kind: failureKind,
102
+ alertable: (0, observability_1.isAlertableRenewalFailure)(failureKind),
103
+ message: (0, observability_1.getRenewalErrorMessage)(error),
104
+ });
105
+ throw error;
106
+ }
107
+ (0, observability_1.logRenewalEvent)(logger, "info", {
108
+ event: "renewal.force",
109
+ outcome: "succeeded",
110
+ correlation_id: correlationId,
111
+ renewal_cycle_id: cycle.id,
112
+ subscription_id: cycle.subscription_id,
113
+ trigger_type: "manual",
114
+ triggered_by: input.triggered_by ?? null,
115
+ success_count: 1,
116
+ failure_count: 0,
117
+ });
118
+ return new workflows_sdk_1.StepResponse(cycle.id);
119
+ });
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yY2UtcmVuZXdhbC1jeWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvZm9yY2UtcmVuZXdhbC1jeWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNEU7QUFDNUUsbURBQXNEO0FBRXRELDZEQUFnRTtBQUVoRSx1REFHb0M7QUFDcEMsK0RBQWtFO0FBQ2xFLDZFQU1rRDtBQUNsRCw4RkFBZ0c7QUFDaEcsNERBR3lDO0FBQ3pDLG9FQUFzRTtBQUN0RSxtRkFBNkU7QUFxQmhFLFFBQUEscUJBQXFCLEdBQUcsSUFBQSwwQkFBVSxFQUM3QyxxQkFBcUIsRUFDckIsS0FBSyxXQUFXLEtBQWlDLEVBQUUsRUFBRSxTQUFTLEVBQUU7SUFDOUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMxQyxNQUFNLGFBQWEsR0FDakIsU0FBUyxDQUFDLE9BQU8sQ0FBQyx3QkFBYyxDQUF5QixDQUFBO0lBQzNELE1BQU0sa0JBQWtCLEdBQ3RCLFNBQVMsQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQThCLENBQUE7SUFDckUsTUFBTSxhQUFhLEdBQ2pCLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBQSwwQ0FBMEIsRUFBQyxlQUFlLENBQUMsQ0FBQTtJQUVyRSxJQUFJLEtBQXdFLENBQUE7SUFFNUUsSUFBSSxDQUFDO1FBQ0gsS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxNQUFNLHNCQUFhLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUN0RSxDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLG9CQUFvQixDQUNqRSxLQUFL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
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.linkSubscriptionCommerceEntitiesStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const subscription_1 = require("../../modules/subscription");
7
+ exports.linkSubscriptionCommerceEntitiesStep = (0, workflows_sdk_1.createStep)("link-subscription-commerce-entities", async function (input, { container }) {
8
+ const link = container.resolve(utils_1.ContainerRegistrationKeys.LINK);
9
+ const links = [
10
+ {
11
+ [subscription_1.SUBSCRIPTION_MODULE]: {
12
+ subscription_id: input.subscription_id,
13
+ },
14
+ [utils_1.Modules.CUSTOMER]: {
15
+ customer_id: input.customer_id,
16
+ },
17
+ },
18
+ {
19
+ [subscription_1.SUBSCRIPTION_MODULE]: {
20
+ subscription_id: input.subscription_id,
21
+ },
22
+ [utils_1.Modules.CART]: {
23
+ cart_id: input.cart_id,
24
+ },
25
+ },
26
+ {
27
+ [subscription_1.SUBSCRIPTION_MODULE]: {
28
+ subscription_id: input.subscription_id,
29
+ },
30
+ [utils_1.Modules.ORDER]: {
31
+ order_id: input.order_id,
32
+ },
33
+ },
34
+ ];
35
+ await link.create(links);
36
+ return new workflows_sdk_1.StepResponse(links, links);
37
+ }, async function (links, { container }) {
38
+ if (!links?.length) {
39
+ return;
40
+ }
41
+ const link = container.resolve(utils_1.ContainerRegistrationKeys.LINK);
42
+ await link.dismiss(links);
43
+ });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1zdWJzY3JpcHRpb24tY29tbWVyY2UtZW50aXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2xpbmstc3Vic2NyaXB0aW9uLWNvbW1lcmNlLWVudGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUE4RTtBQUM5RSxxRUFBNEU7QUFDNUUsNkRBQWdFO0FBU25ELFFBQUEsb0NBQW9DLEdBQUcsSUFBQSwwQkFBVSxFQUM1RCxxQ0FBcUMsRUFDckMsS0FBSyxXQUNILEtBQWdELEVBQ2hELEVBQUUsU0FBUyxFQUFFO0lBRWIsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUU5RCxNQUFNLEtBQUssR0FBcUI7UUFDOUI7WUFDRSxDQUFDLGtDQUFtQixDQUFDLEVBQUU7Z0JBQ3JCLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTthQUN2QztZQUNELENBQUMsZUFBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNsQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7YUFDL0I7U0FDRjtRQUNEO1lBQ0UsQ0FBQyxrQ0FBbUIsQ0FBQyxFQUFFO2dCQUNyQixlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7YUFDdkM7WUFDRCxDQUFDLGVBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDZCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87YUFDdkI7U0FDRjtRQUNEO1lBQ0UsQ0FBQyxrQ0FBbUIsQ0FBQyxFQUFFO2dCQUNyQixlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7YUFDdkM7WUFDRCxDQUFDLGVBQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDZixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7YUFDekI7U0FDRjtLQUNGLENBQUE7SUFFRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFeEIsT0FBTyxJQUFJLDRCQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ3ZDLENBQUMsRUFDRCxLQUFLLFdBQVcsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDbkIsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTlELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMzQixDQUFDLENBQ0YsQ0FBQSJ9
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.markDunningRecoveredStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const dunning_1 = require("../../modules/dunning");
6
+ const types_1 = require("../../modules/dunning/types");
7
+ const errors_1 = require("../../modules/dunning/utils/errors");
8
+ const subscription_1 = require("../../modules/subscription");
9
+ const types_2 = require("../../modules/subscription/types");
10
+ function appendAuditMetadata(metadata, action, input, at) {
11
+ const existing = Array.isArray(metadata?.manual_actions)
12
+ ? [...metadata?.manual_actions]
13
+ : [];
14
+ existing.push({
15
+ action,
16
+ who: input.triggered_by ?? null,
17
+ when: at,
18
+ reason: input.reason ?? null,
19
+ });
20
+ return {
21
+ ...(metadata ?? {}),
22
+ manual_actions: existing,
23
+ last_manual_action: existing[existing.length - 1],
24
+ };
25
+ }
26
+ exports.markDunningRecoveredStep = (0, workflows_sdk_1.createStep)("mark-dunning-recovered", async function (input, { container }) {
27
+ const dunningModule = container.resolve(dunning_1.DUNNING_MODULE);
28
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
29
+ const dunningCase = (await dunningModule.retrieveDunningCase(input.dunning_case_id));
30
+ if (dunningCase.status === types_1.DunningCaseStatus.RECOVERED) {
31
+ throw errors_1.dunningErrors.alreadyRecovered(dunningCase.id);
32
+ }
33
+ if (dunningCase.status === types_1.DunningCaseStatus.UNRECOVERED) {
34
+ throw errors_1.dunningErrors.alreadyUnrecovered(dunningCase.id);
35
+ }
36
+ if (dunningCase.status === types_1.DunningCaseStatus.RETRYING) {
37
+ throw errors_1.dunningErrors.retryInFlightTransitionBlocked(dunningCase.id, "be marked recovered");
38
+ }
39
+ const subscription = (await subscriptionModule.retrieveSubscription(dunningCase.subscription_id));
40
+ const changedAt = new Date();
41
+ const updatedCase = await dunningModule.updateDunningCases({
42
+ id: dunningCase.id,
43
+ status: types_1.DunningCaseStatus.RECOVERED,
44
+ next_retry_at: null,
45
+ recovered_at: changedAt,
46
+ closed_at: changedAt,
47
+ recovery_reason: "marked_recovered_by_admin",
48
+ metadata: appendAuditMetadata(dunningCase.metadata, "mark_recovered", input, changedAt.toISOString()),
49
+ });
50
+ const previousSubscription = subscription.status === types_2.SubscriptionStatus.PAST_DUE ? subscription : null;
51
+ if (previousSubscription) {
52
+ await subscriptionModule.updateSubscriptions({
53
+ id: subscription.id,
54
+ status: types_2.SubscriptionStatus.ACTIVE,
55
+ });
56
+ }
57
+ return new workflows_sdk_1.StepResponse(updatedCase, {
58
+ previous_case: dunningCase,
59
+ previous_subscription: previousSubscription,
60
+ });
61
+ }, async function (compensation, { container }) {
62
+ if (!compensation) {
63
+ return;
64
+ }
65
+ const dunningModule = container.resolve(dunning_1.DUNNING_MODULE);
66
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
67
+ await dunningModule.updateDunningCases(compensation.previous_case);
68
+ if (compensation.previous_subscription) {
69
+ await subscriptionModule.updateSubscriptions(compensation.previous_subscription);
70
+ }
71
+ });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay1kdW5uaW5nLXJlY292ZXJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvbWFyay1kdW5uaW5nLXJlY292ZXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNEU7QUFDNUUsbURBQXNEO0FBRXRELHVEQUErRDtBQUMvRCwrREFBa0U7QUFDbEUsNkRBQWdFO0FBRWhFLDREQUFxRTtBQTZCckUsU0FBUyxtQkFBbUIsQ0FDMUIsUUFBd0MsRUFDeEMsTUFBYyxFQUNkLEtBQW9DLEVBQ3BDLEVBQVU7SUFFVixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUMsR0FBSSxRQUFRLEVBQUUsY0FBNEMsQ0FBQztRQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRU4sUUFBUSxDQUFDLElBQUksQ0FBQztRQUNaLE1BQU07UUFDTixHQUFHLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJO1FBQy9CLElBQUksRUFBRSxFQUFFO1FBQ1IsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSTtLQUM3QixDQUFDLENBQUE7SUFFRixPQUFPO1FBQ0wsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDbkIsY0FBYyxFQUFFLFFBQVE7UUFDeEIsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ2xELENBQUE7QUFDSCxDQUFDO0FBRVksUUFBQSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2hELHdCQUF3QixFQUN4QixLQUFLLFdBQ0gsS0FBb0MsRUFDcEMsRUFBRSxTQUFTLEVBQUU7SUFFYixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUF1Qix3QkFBYyxDQUFDLENBQUE7SUFDN0UsTUFBTSxrQkFBa0Is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
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.markDunningUnrecoveredStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const dunning_1 = require("../../modules/dunning");
6
+ const types_1 = require("../../modules/dunning/types");
7
+ const errors_1 = require("../../modules/dunning/utils/errors");
8
+ function appendAuditMetadata(metadata, input, at) {
9
+ const existing = Array.isArray(metadata?.manual_actions)
10
+ ? [...metadata?.manual_actions]
11
+ : [];
12
+ existing.push({
13
+ action: "mark_unrecovered",
14
+ who: input.triggered_by ?? null,
15
+ when: at,
16
+ reason: input.reason,
17
+ });
18
+ return {
19
+ ...(metadata ?? {}),
20
+ manual_actions: existing,
21
+ last_manual_action: existing[existing.length - 1],
22
+ };
23
+ }
24
+ exports.markDunningUnrecoveredStep = (0, workflows_sdk_1.createStep)("mark-dunning-unrecovered", async function (input, { container }) {
25
+ const dunningModule = container.resolve(dunning_1.DUNNING_MODULE);
26
+ const dunningCase = (await dunningModule.retrieveDunningCase(input.dunning_case_id));
27
+ if (dunningCase.status === types_1.DunningCaseStatus.RECOVERED) {
28
+ throw errors_1.dunningErrors.alreadyRecovered(dunningCase.id);
29
+ }
30
+ if (dunningCase.status === types_1.DunningCaseStatus.UNRECOVERED) {
31
+ throw errors_1.dunningErrors.alreadyUnrecovered(dunningCase.id);
32
+ }
33
+ if (dunningCase.status === types_1.DunningCaseStatus.RETRYING) {
34
+ throw errors_1.dunningErrors.retryInFlightTransitionBlocked(dunningCase.id, "be marked unrecovered");
35
+ }
36
+ const changedAt = new Date();
37
+ const updated = await dunningModule.updateDunningCases({
38
+ id: dunningCase.id,
39
+ status: types_1.DunningCaseStatus.UNRECOVERED,
40
+ next_retry_at: null,
41
+ closed_at: changedAt,
42
+ recovery_reason: "marked_unrecovered_by_admin",
43
+ metadata: appendAuditMetadata(dunningCase.metadata, input, changedAt.toISOString()),
44
+ });
45
+ return new workflows_sdk_1.StepResponse(updated, dunningCase);
46
+ }, async function (previousCase, { container }) {
47
+ if (!previousCase) {
48
+ return;
49
+ }
50
+ const dunningModule = container.resolve(dunning_1.DUNNING_MODULE);
51
+ await dunningModule.updateDunningCases(previousCase);
52
+ });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay1kdW5uaW5nLXVucmVjb3ZlcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9tYXJrLWR1bm5pbmctdW5yZWNvdmVyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTRFO0FBQzVFLG1EQUFzRDtBQUV0RCx1REFBK0Q7QUFDL0QsK0RBQWtFO0FBaUJsRSxTQUFTLG1CQUFtQixDQUMxQixRQUF3QyxFQUN4QyxLQUFzQyxFQUN0QyxFQUFVO0lBRVYsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDLEdBQUksUUFBUSxFQUFFLGNBQTRDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUVOLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDWixNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLEdBQUcsRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7UUFDL0IsSUFBSSxFQUFFLEVBQUU7UUFDUixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07S0FDckIsQ0FBQyxDQUFBO0lBRUYsT0FBTztRQUNMLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ25CLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNsRCxDQUFBO0FBQ0gsQ0FBQztBQUVZLFFBQUEsMEJBQTBCLEdBQUcsSUFBQSwwQkFBVSxFQUNsRCwwQkFBMEIsRUFDMUIsS0FBSyxXQUNILEtBQXNDLEVBQ3RDLEVBQUUsU0FBUyxFQUFFO0lBRWIsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBdUIsd0JBQWMsQ0FBQyxDQUFBO0lBRTdFLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxhQUFhLENBQUMsbUJBQW1CLENBQzFELEtBQUssQ0FBQyxlQUFlLENBQ3RCLENBQXNCLENBQUE7SUFFdkIsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLHlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sc0JBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyx5QkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6RCxNQUFNLHNCQUFhLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3hELENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUsseUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEQsTUFBTSxzQkFBYSxDQUFDLDhCQUE4QixDQUNoRCxXQUFXLENBQUMsRUFBRSxFQUNkLHVCQUF1QixDQUN4QixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7SUFFNUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsa0JBQWtCLENBQUM7UUFDckQsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFO1FBQ2xCLE1BQU0sRUFBRSx5QkFBaUIsQ0FBQyxXQUFXO1FBQ3JDLGFBQWEsRUFBRSxJQUFJO1FBQ25CLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLGVBQWUsRUFBRSw2QkFBNkI7UUFDOUMsUUFBUSxFQUFFLG1CQUFtQixDQUMzQixXQUFXLENBQUMsUUFBUSxFQUNwQixLQUFLLEVBQ0wsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUN4QjtLQUNLLENBQUMsQ0FBQTtJQUVULE9BQU8sSUFBSSw0QkFBWSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQTtBQUMvQyxDQUFDLEVBQ0QsS0FBSyxXQUFXLFlBQStCLEVBQUUsRUFBRSxTQUFTLEVBQUU7SUFDNUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBdUIsd0JBQWMsQ0FBQyxDQUFBO0lBRTdFLE1BQU0sYUFBYSxDQUFDLGtCQUFrQixDQUFDLFlBQW1CLENBQUMsQ0FBQTtBQUM3RCxDQUFDLENBQ0YsQ0FBQSJ9
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeAnalyticsRebuildRangeStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ function normalizeDateInput(value, fieldName) {
6
+ const parsed = value instanceof Date ? new Date(value) : new Date(value);
7
+ if (Number.isNaN(parsed.getTime())) {
8
+ throw new Error(`Analytics rebuild '${fieldName}' must be a valid date`);
9
+ }
10
+ return parsed;
11
+ }
12
+ function toUtcDayStart(date) {
13
+ return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
14
+ }
15
+ function toUtcDayEnd(date) {
16
+ return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 23, 59, 59, 999));
17
+ }
18
+ function enumerateUtcDays(from, to) {
19
+ const days = [];
20
+ const current = new Date(from);
21
+ while (current.getTime() <= to.getTime()) {
22
+ days.push(current.toISOString());
23
+ current.setUTCDate(current.getUTCDate() + 1);
24
+ }
25
+ return days;
26
+ }
27
+ function normalizeCorrelationId(triggerType, correlationId) {
28
+ const trimmed = correlationId?.trim();
29
+ if (trimmed) {
30
+ return trimmed;
31
+ }
32
+ return `analytics-rebuild:${triggerType}:${Date.now()}`;
33
+ }
34
+ exports.normalizeAnalyticsRebuildRangeStep = (0, workflows_sdk_1.createStep)("normalize-analytics-rebuild-range", async function (input) {
35
+ const parsedFrom = normalizeDateInput(input.date_from, "date_from");
36
+ const parsedTo = normalizeDateInput(input.date_to, "date_to");
37
+ const normalizedFrom = toUtcDayStart(parsedFrom);
38
+ const normalizedTo = toUtcDayEnd(parsedTo);
39
+ if (normalizedFrom.getTime() > normalizedTo.getTime()) {
40
+ throw new Error("Analytics rebuild 'date_from' must be less than or equal to 'date_to'");
41
+ }
42
+ const normalizedDays = enumerateUtcDays(normalizedFrom, toUtcDayStart(parsedTo));
43
+ return new workflows_sdk_1.StepResponse({
44
+ date_from: normalizedFrom.toISOString(),
45
+ date_to: normalizedTo.toISOString(),
46
+ normalized_days: normalizedDays,
47
+ trigger_type: input.trigger_type,
48
+ triggered_by: input.triggered_by ?? null,
49
+ reason: input.reason ?? null,
50
+ correlation_id: normalizeCorrelationId(input.trigger_type, input.correlation_id),
51
+ processed_days: normalizedDays.length,
52
+ processed_subscriptions: 0,
53
+ upserted_rows: 0,
54
+ skipped_rows: 0,
55
+ blocked_days: [],
56
+ failed_days: [],
57
+ });
58
+ });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLWFuYWx5dGljcy1yZWJ1aWxkLXJhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9ub3JtYWxpemUtYW5hbHl0aWNzLXJlYnVpbGQtcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTRFO0FBZ0M1RSxTQUFTLGtCQUFrQixDQUFDLEtBQW9CLEVBQUUsU0FBa0M7SUFDbEYsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRXhFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLFNBQVMsd0JBQXdCLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsSUFBVTtJQUMvQixPQUFPLElBQUksSUFBSSxDQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FDdkUsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFVO0lBQzdCLE9BQU8sSUFBSSxJQUFJLENBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FDTixJQUFJLENBQUMsY0FBYyxFQUFFLEVBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUNqQixFQUFFLEVBQ0YsRUFBRSxFQUNGLEVBQUUsRUFDRixHQUFHLENBQ0osQ0FDRixDQUFBO0FBQ0gsQ0FBQztB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
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pauseSubscriptionStep = void 0;
4
+ exports.asSubscriptionWorkflowRecord = asSubscriptionWorkflowRecord;
5
+ exports.asSubscriptionUpdateInput = asSubscriptionUpdateInput;
6
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
7
+ const subscription_1 = require("../../modules/subscription");
8
+ const types_1 = require("../../modules/subscription/types");
9
+ const errors_1 = require("../../modules/subscription/utils/errors");
10
+ function asSubscriptionWorkflowRecord(subscription) {
11
+ return subscription;
12
+ }
13
+ function asSubscriptionUpdateInput(subscription) {
14
+ return subscription;
15
+ }
16
+ exports.pauseSubscriptionStep = (0, workflows_sdk_1.createStep)("pause-subscription", async function (input, { container }) {
17
+ const subscriptionModuleService = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
18
+ const subscription = await subscriptionModuleService.retrieveSubscription(input.id);
19
+ if (subscription.status !== types_1.SubscriptionStatus.ACTIVE &&
20
+ subscription.status !== types_1.SubscriptionStatus.PAST_DUE) {
21
+ throw errors_1.subscriptionErrors.invalidState(input.id, "be paused", subscription.status);
22
+ }
23
+ const pausedAt = input.effective_at
24
+ ? new Date(input.effective_at)
25
+ : new Date();
26
+ const updated = await subscriptionModuleService.updateSubscriptions({
27
+ id: input.id,
28
+ status: types_1.SubscriptionStatus.PAUSED,
29
+ paused_at: pausedAt,
30
+ metadata: {
31
+ ...(subscription.metadata ?? {}),
32
+ pause_context: {
33
+ reason: input.reason ?? null,
34
+ effective_at: pausedAt.toISOString(),
35
+ triggered_by: input.triggered_by ?? null,
36
+ },
37
+ },
38
+ });
39
+ return new workflows_sdk_1.StepResponse({
40
+ current: asSubscriptionWorkflowRecord(updated),
41
+ previous: asSubscriptionWorkflowRecord(subscription),
42
+ }, asSubscriptionWorkflowRecord(subscription));
43
+ }, async function (subscription, { container }) {
44
+ if (!subscription) {
45
+ return;
46
+ }
47
+ const subscriptionModuleService = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
48
+ await subscriptionModuleService.updateSubscriptions(asSubscriptionUpdateInput(subscription));
49
+ });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF1c2Utc3Vic2NyaXB0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9wYXVzZS1zdWJzY3JpcHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZ0RBLG9FQUlDO0FBRUQsOERBSUM7QUExREQscUVBQTRFO0FBQzVFLDZEQUFnRTtBQUVoRSw0REFJeUM7QUFDekMsb0VBQTRFO0FBd0M1RSxTQUFnQiw0QkFBNEIsQ0FDMUMsWUFBcUI7SUFFckIsT0FBTyxZQUEwQyxDQUFBO0FBQ25ELENBQUM7QUFFRCxTQUFnQix5QkFBeUIsQ0FDdkMsWUFBd0M7SUFFeEMsT0FBTyxZQUFrRCxDQUFBO0FBQzNELENBQUM7QUFFWSxRQUFBLHFCQUFxQixHQUFHLElBQUEsMEJBQVUsRUFDN0Msb0JBQW9CLEVBQ3BCLEtBQUssV0FBVyxLQUFpQyxFQUFFLEVBQUUsU0FBUyxFQUFFO0lBQzlELE1BQU0seUJBQXlCLEdBQzdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQUMsQ0FBQTtJQUV4QyxNQUFNLFlBQVksR0FBRyxNQUFNLHlCQUF5QixDQUFDLG9CQUFvQixDQUN2RSxLQUFLLENBQUMsRUFBRSxDQUNULENBQUE7SUFFRCxJQUNFLFlBQVksQ0FBQyxNQUFNLEtBQUssMEJBQWtCLENBQUMsTUFBTTtRQUNqRCxZQUFZLENBQUMsTUFBTSxLQUFLLDBCQUFrQixDQUFDLFFBQVEsRUFDbkQsQ0FBQztRQUNELE1BQU0sMkJBQWtCLENBQUMsWUFBWSxDQUNuQyxLQUFLLENBQUMsRUFBRSxFQUNSLFdBQVcsRUFDWCxZQUFZLENBQUMsTUFBTSxDQUNwQixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZO1FBQ2pDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO0lBRWQsTUFBTSxPQUFPLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQztRQUNsRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDWixNQUFNLEVBQUUsMEJBQWtCLENBQUMsTUFBTTtRQUNqQyxTQUFTLEVBQUUsUUFBUTtRQUNuQixRQUFRLEVBQUU7WUFDUixHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDaEMsYUFBYSxFQUFFO2dCQUNiLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUk7Z0JBQzVCLFlBQVksRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFO2dCQUNwQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJO2FBQ3pDO1NBQ0Y7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksNEJBQVksQ0FDckI7UUFDRSxPQUFPLEVBQUUsNEJBQTRCLENBQUMsT0FBTyxDQUFDO1FBQzlDLFFBQVEsRUFBRSw0QkFBNEIsQ0FBQyxZQUFZLENBQUM7S0FDckQsRUFDRCw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsQ0FDM0MsQ0FBQTtBQUNILENBQUMsRUFDRCxLQUFLLFdBQVcsWUFBd0MsRUFBRSxFQUFFLFNBQVMsRUFBRTtJQUNyRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLHlCQUF5QixHQUM3QixTQUFTLENBQUMsT0FBTyxDQUFDLGtDQUFtQixDQUFDLENBQUE7SUFFeEMsTUFBTSx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FDakQseUJBQXlCLENBQUMsWUFBWSxDQUFDLENBQ3hDLENBQUE7QUFDSCxDQUFDLENBQ0YsQ0FBQSJ9