@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,641 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processRenewalCycleStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
+ const renewal_1 = require("../../modules/renewal");
8
+ const types_1 = require("../../modules/renewal/types");
9
+ const errors_1 = require("../../modules/renewal/utils/errors");
10
+ const observability_1 = require("../../modules/renewal/utils/observability");
11
+ const normalize_log_event_1 = require("../../modules/activity-log/utils/normalize-log-event");
12
+ const types_2 = require("../../modules/activity-log/types");
13
+ const effective_config_1 = require("../../modules/plan-offer/utils/effective-config");
14
+ const subscription_1 = require("../../modules/subscription");
15
+ const types_3 = require("../../modules/subscription/types");
16
+ const errors_2 = require("../../modules/subscription/utils/errors");
17
+ const start_dunning_1 = require("../start-dunning");
18
+ const create_subscription_log_event_1 = require("./create-subscription-log-event");
19
+ const date_output_1 = require("../utils/date-output");
20
+ function getRenewalActivityLogActorType(triggerType) {
21
+ return triggerType === "manual"
22
+ ? types_2.ActivityLogActorType.USER
23
+ : types_2.ActivityLogActorType.SCHEDULER;
24
+ }
25
+ function addCadence(anchor, interval, value) {
26
+ const next = new Date(anchor);
27
+ if (interval === types_3.SubscriptionFrequencyInterval.WEEK) {
28
+ next.setUTCDate(next.getUTCDate() + value * 7);
29
+ return next;
30
+ }
31
+ if (interval === types_3.SubscriptionFrequencyInterval.MONTH) {
32
+ next.setUTCMonth(next.getUTCMonth() + value);
33
+ return next;
34
+ }
35
+ next.setUTCFullYear(next.getUTCFullYear() + value);
36
+ return next;
37
+ }
38
+ function isPendingUpdateApplicable(scheduledFor, pendingUpdateData) {
39
+ if (!pendingUpdateData) {
40
+ return false;
41
+ }
42
+ if (!pendingUpdateData.effective_at) {
43
+ return true;
44
+ }
45
+ return new Date(pendingUpdateData.effective_at) <= scheduledFor;
46
+ }
47
+ async function loadCycle(container, id) {
48
+ const renewalModule = container.resolve(renewal_1.RENEWAL_MODULE);
49
+ try {
50
+ return (await renewalModule.retrieveRenewalCycle(id));
51
+ }
52
+ catch {
53
+ throw errors_1.renewalErrors.notFound("RenewalCycle", id);
54
+ }
55
+ }
56
+ async function loadSubscription(container, id) {
57
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
58
+ try {
59
+ return (await subscriptionModule.retrieveSubscription(id));
60
+ }
61
+ catch {
62
+ throw errors_2.subscriptionErrors.notFound("Subscription", id);
63
+ }
64
+ }
65
+ async function loadCart(container, id) {
66
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
67
+ const { data } = await query.graph({
68
+ entity: "cart",
69
+ fields: [
70
+ "id",
71
+ "region_id",
72
+ "sales_channel_id",
73
+ "currency_code",
74
+ "email",
75
+ "customer_id",
76
+ "shipping_address.*",
77
+ "billing_address.*",
78
+ "items.*",
79
+ "shipping_methods.*",
80
+ ],
81
+ filters: {
82
+ id: [id],
83
+ },
84
+ });
85
+ const cart = data[0];
86
+ if (!cart) {
87
+ throw errors_1.renewalErrors.notFound("Cart", id);
88
+ }
89
+ return cart;
90
+ }
91
+ async function loadOrderTotal(container, id) {
92
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
93
+ const { data } = await query.graph({
94
+ entity: "order",
95
+ fields: ["id", "total"],
96
+ filters: {
97
+ id: [id],
98
+ },
99
+ });
100
+ const order = data[0];
101
+ if (!order) {
102
+ throw errors_1.renewalErrors.notFound("Order", id);
103
+ }
104
+ return Number(order.total ?? 0);
105
+ }
106
+ async function validateSubscriptionEligibility(container, cycle, subscription) {
107
+ if (subscription.status !== types_3.SubscriptionStatus.ACTIVE &&
108
+ subscription.status !== types_3.SubscriptionStatus.PAST_DUE) {
109
+ throw errors_2.subscriptionErrors.invalidState(subscription.id, "renew", subscription.status);
110
+ }
111
+ if (subscription.paused_at) {
112
+ throw errors_1.renewalErrors.subscriptionNotEligible(subscription.id, "subscription is paused");
113
+ }
114
+ if (subscription.cancel_effective_at &&
115
+ subscription.cancel_effective_at <= cycle.scheduled_for) {
116
+ throw errors_1.renewalErrors.subscriptionNotEligible(subscription.id, `cancel is effective for renewal date '${cycle.scheduled_for.toISOString()}'`);
117
+ }
118
+ if (subscription.is_trial &&
119
+ subscription.trial_ends_at &&
120
+ cycle.scheduled_for < subscription.trial_ends_at) {
121
+ throw errors_1.renewalErrors.subscriptionNotEligible(subscription.id, `subscription is still in trial for renewal date '${cycle.scheduled_for.toISOString()}'`);
122
+ }
123
+ }
124
+ async function resolveAppliedPendingChanges(container, cycle, subscription) {
125
+ if (!isPendingUpdateApplicable(cycle.scheduled_for, subscription.pending_update_data)) {
126
+ return null;
127
+ }
128
+ if (cycle.approval_required) {
129
+ if (cycle.approval_status !== types_1.RenewalApprovalStatus.APPROVED) {
130
+ throw errors_1.renewalErrors.invalidTransition(cycle.id, `Renewal '${cycle.id}' requires approval before pending changes can be applied`);
131
+ }
132
+ }
133
+ const pending = subscription.pending_update_data;
134
+ if (!pending) {
135
+ return null;
136
+ }
137
+ const effectiveConfig = await (0, effective_config_1.resolveProductSubscriptionConfig)(container, {
138
+ product_id: subscription.product_id,
139
+ variant_id: pending.variant_id,
140
+ });
141
+ if (!effectiveConfig.is_enabled) {
142
+ throw errors_2.subscriptionErrors.planChangeNotAllowed(subscription.product_id, pending.variant_id);
143
+ }
144
+ const isAllowedFrequency = effectiveConfig.allowed_frequencies.some((frequency) => String(frequency.interval) === pending.frequency_interval &&
145
+ frequency.value === pending.frequency_value);
146
+ if (!isAllowedFrequency) {
147
+ throw errors_2.subscriptionErrors.planChangeFrequencyNotAllowed(pending.frequency_interval, pending.frequency_value);
148
+ }
149
+ return {
150
+ variant_id: pending.variant_id,
151
+ variant_title: pending.variant_title,
152
+ frequency_interval: pending.frequency_interval,
153
+ frequency_value: pending.frequency_value,
154
+ effective_at: pending.effective_at,
155
+ };
156
+ }
157
+ function buildOrderItems(cart, subscription, appliedPendingChanges) {
158
+ const sourceItem = cart.items?.find((item) => item.variant_id === subscription.variant_id) ??
159
+ cart.items?.[0];
160
+ if (!sourceItem) {
161
+ throw errors_1.renewalErrors.invalidData(`Source cart '${cart.id}' doesn't contain any items for renewal`);
162
+ }
163
+ const variantId = appliedPendingChanges?.variant_id ?? subscription.variant_id;
164
+ const variantTitle = appliedPendingChanges?.variant_title ??
165
+ sourceItem.variant_title ??
166
+ subscription.product_snapshot.variant_title;
167
+ return [
168
+ {
169
+ title: sourceItem.title ?? variantTitle,
170
+ quantity: sourceItem.quantity ?? 1,
171
+ product_id: subscription.product_id,
172
+ product_title: subscription.product_snapshot.product_title,
173
+ variant_id: variantId,
174
+ variant_title: variantTitle,
175
+ variant_sku: sourceItem.variant_sku ??
176
+ subscription.pending_update_data?.sku ??
177
+ subscription.product_snapshot.sku ??
178
+ undefined,
179
+ requires_shipping: sourceItem.requires_shipping ?? true,
180
+ is_discountable: sourceItem.is_discountable ?? true,
181
+ metadata: {
182
+ renewal_source_cart_id: cart.id,
183
+ },
184
+ },
185
+ ];
186
+ }
187
+ function buildShippingMethods(cart) {
188
+ return (cart.shipping_methods?.map((method) => ({
189
+ name: method.name,
190
+ amount: method.amount,
191
+ is_tax_inclusive: method.is_tax_inclusive,
192
+ shipping_option_id: method.shipping_option_id,
193
+ data: method.data,
194
+ })) ?? []);
195
+ }
196
+ async function createRenewalOrder(container, cycle, subscription, cart, appliedPendingChanges) {
197
+ if (!cart.region_id) {
198
+ throw errors_1.renewalErrors.invalidData(`Source cart '${cart.id}' is missing 'region_id'`);
199
+ }
200
+ if (!cart.sales_channel_id) {
201
+ throw errors_1.renewalErrors.invalidData(`Source cart '${cart.id}' is missing 'sales_channel_id'`);
202
+ }
203
+ const orderResult = await (0, core_flows_1.createOrderWorkflow)(container).run({
204
+ input: {
205
+ region_id: cart.region_id,
206
+ sales_channel_id: cart.sales_channel_id,
207
+ customer_id: subscription.customer_id,
208
+ email: cart.email ?? subscription.customer_snapshot?.email ?? undefined,
209
+ currency_code: cart.currency_code,
210
+ shipping_address: cart.shipping_address ?? subscription.shipping_address,
211
+ billing_address: cart.billing_address ?? undefined,
212
+ items: buildOrderItems(cart, subscription, appliedPendingChanges),
213
+ shipping_methods: buildShippingMethods(cart),
214
+ metadata: {
215
+ renewal_cycle_id: cycle.id,
216
+ subscription_id: subscription.id,
217
+ renewal_trigger: "automatic",
218
+ },
219
+ },
220
+ });
221
+ const order = orderResult.result;
222
+ const total = await loadOrderTotal(container, order.id);
223
+ if (total > 0) {
224
+ const paymentContext = subscription.payment_context;
225
+ if (!paymentContext?.payment_provider_id ||
226
+ !paymentContext.payment_method_reference) {
227
+ throw errors_1.renewalErrors.renewalOrderCreationFailed(cycle.id, `Subscription '${subscription.id}' is missing renewal payment context`);
228
+ }
229
+ const paymentCollections = await (0, core_flows_1.createOrUpdateOrderPaymentCollectionWorkflow)(container).run({
230
+ input: {
231
+ order_id: order.id,
232
+ amount: total,
233
+ },
234
+ });
235
+ const paymentCollection = paymentCollections.result[0];
236
+ if (!paymentCollection) {
237
+ throw errors_1.renewalErrors.renewalOrderCreationFailed(cycle.id, `No payment collection was created for renewal order '${order.id}'`);
238
+ }
239
+ let paymentSessionResult;
240
+ try {
241
+ paymentSessionResult = await (0, core_flows_1.createPaymentSessionsWorkflow)(container).run({
242
+ input: {
243
+ payment_collection_id: paymentCollection.id,
244
+ provider_id: paymentContext.payment_provider_id,
245
+ customer_id: subscription.customer_id,
246
+ data: {
247
+ payment_method: paymentContext.payment_method_reference,
248
+ off_session: true,
249
+ confirm: true,
250
+ capture_method: "automatic",
251
+ },
252
+ },
253
+ });
254
+ }
255
+ catch (error) {
256
+ throw createPaymentQualifiedRenewalError(error, "payment_session", order.id);
257
+ }
258
+ const paymentModule = container.resolve(utils_1.Modules.PAYMENT);
259
+ let payment;
260
+ try {
261
+ payment = await paymentModule.authorizePaymentSession(paymentSessionResult.result.id, paymentSessionResult.result.context ?? {});
262
+ }
263
+ catch (error) {
264
+ throw createPaymentQualifiedRenewalError(error, "payment_provider", order.id);
265
+ }
266
+ if (payment?.id) {
267
+ try {
268
+ await paymentModule.capturePayment({
269
+ payment_id: payment.id,
270
+ amount: payment.amount,
271
+ });
272
+ }
273
+ catch (error) {
274
+ throw createPaymentQualifiedRenewalError(error, "payment_capture", order.id);
275
+ }
276
+ }
277
+ }
278
+ const link = container.resolve(utils_1.ContainerRegistrationKeys.LINK);
279
+ await link.create({
280
+ [renewal_1.RENEWAL_MODULE]: {
281
+ renewal_cycle_id: cycle.id,
282
+ },
283
+ [utils_1.Modules.ORDER]: {
284
+ order_id: order.id,
285
+ },
286
+ });
287
+ await link.create({
288
+ [subscription_1.SUBSCRIPTION_MODULE]: {
289
+ subscription_id: subscription.id,
290
+ },
291
+ [utils_1.Modules.ORDER]: {
292
+ order_id: order.id,
293
+ },
294
+ });
295
+ return order;
296
+ }
297
+ function createPaymentQualifiedRenewalError(error, source, renewalOrderId) {
298
+ const message = (0, observability_1.getRenewalErrorMessage)(error);
299
+ const nextError = error instanceof Error ? error : new Error(message);
300
+ const typedError = nextError;
301
+ typedError.dunning_payment_failure_source = source;
302
+ typedError.dunning_payment_error_code = null;
303
+ typedError.dunning_renewal_order_id = renewalOrderId;
304
+ return typedError;
305
+ }
306
+ function getPaymentQualifiedFailureContext(error) {
307
+ if (!error || typeof error !== "object") {
308
+ return null;
309
+ }
310
+ const typedError = error;
311
+ if (!typedError.dunning_payment_failure_source) {
312
+ return null;
313
+ }
314
+ return {
315
+ source: typedError.dunning_payment_failure_source,
316
+ error_code: typedError.dunning_payment_error_code ?? null,
317
+ renewal_order_id: typedError.dunning_renewal_order_id ?? null,
318
+ };
319
+ }
320
+ exports.processRenewalCycleStep = (0, workflows_sdk_1.createStep)("process-renewal-cycle", async function (input, { container }) {
321
+ const logger = container.resolve("logger");
322
+ const renewalModule = container.resolve(renewal_1.RENEWAL_MODULE);
323
+ const subscriptionModule = container.resolve(subscription_1.SUBSCRIPTION_MODULE);
324
+ const operationStartedAt = Date.now();
325
+ const correlationId = input.correlation_id ??
326
+ (0, observability_1.createRenewalCorrelationId)(`renewal-${input.trigger_type}`);
327
+ const cycle = await loadCycle(container, input.renewal_cycle_id);
328
+ if (cycle.status === types_1.RenewalCycleStatus.PROCESSING) {
329
+ throw errors_1.renewalErrors.alreadyProcessing(cycle.id);
330
+ }
331
+ if (cycle.status === types_1.RenewalCycleStatus.SUCCEEDED) {
332
+ throw errors_1.renewalErrors.duplicateExecutionBlocked(cycle.id);
333
+ }
334
+ const subscription = await loadSubscription(container, cycle.subscription_id);
335
+ (0, observability_1.logRenewalEvent)(logger, "info", {
336
+ event: "renewal.execution",
337
+ outcome: "started",
338
+ correlation_id: correlationId,
339
+ renewal_cycle_id: cycle.id,
340
+ subscription_id: subscription.id,
341
+ trigger_type: input.trigger_type,
342
+ triggered_by: input.triggered_by ?? null,
343
+ metadata: {
344
+ scheduled_for: cycle.scheduled_for.toISOString(),
345
+ approval_required: cycle.approval_required,
346
+ approval_status: cycle.approval_status,
347
+ },
348
+ });
349
+ let appliedPendingChanges = null;
350
+ try {
351
+ await validateSubscriptionEligibility(container, cycle, subscription);
352
+ appliedPendingChanges = await resolveAppliedPendingChanges(container, cycle, subscription);
353
+ }
354
+ catch (error) {
355
+ const failureKind = (0, observability_1.classifyRenewalFailure)(error);
356
+ (0, observability_1.logRenewalEvent)(logger, "warn", {
357
+ event: "renewal.execution",
358
+ outcome: "blocked",
359
+ correlation_id: correlationId,
360
+ renewal_cycle_id: cycle.id,
361
+ subscription_id: subscription.id,
362
+ trigger_type: input.trigger_type,
363
+ triggered_by: input.triggered_by ?? null,
364
+ duration_ms: Date.now() - operationStartedAt,
365
+ failure_kind: failureKind,
366
+ alertable: (0, observability_1.isAlertableRenewalFailure)(failureKind),
367
+ message: (0, observability_1.getRenewalErrorMessage)(error),
368
+ });
369
+ throw error;
370
+ }
371
+ const attemptNo = cycle.attempt_count + 1;
372
+ const startedAt = new Date();
373
+ const attempt = await renewalModule.createRenewalAttempts({
374
+ renewal_cycle_id: cycle.id,
375
+ attempt_no: attemptNo,
376
+ started_at: startedAt,
377
+ status: types_1.RenewalAttemptStatus.PROCESSING,
378
+ error_code: null,
379
+ error_message: null,
380
+ payment_reference: null,
381
+ order_id: null,
382
+ metadata: {
383
+ trigger_type: input.trigger_type,
384
+ triggered_by: input.triggered_by ?? null,
385
+ reason: input.reason ?? null,
386
+ },
387
+ });
388
+ await renewalModule.updateRenewalCycles({
389
+ id: cycle.id,
390
+ status: types_1.RenewalCycleStatus.PROCESSING,
391
+ attempt_count: attemptNo,
392
+ last_error: null,
393
+ applied_pending_update_data: appliedPendingChanges,
394
+ metadata: {
395
+ ...(cycle.metadata ?? {}),
396
+ last_trigger_type: input.trigger_type,
397
+ last_triggered_by: input.triggered_by ?? null,
398
+ last_trigger_reason: input.reason ?? null,
399
+ last_correlation_id: correlationId,
400
+ },
401
+ });
402
+ try {
403
+ const scheduledAnchor = new Date(cycle.scheduled_for);
404
+ let generatedOrderId = null;
405
+ if (!subscription.skip_next_cycle) {
406
+ if (!subscription.cart_id) {
407
+ throw errors_1.renewalErrors.invalidData(`Subscription '${subscription.id}' is missing 'cart_id' required for renewal order creation`);
408
+ }
409
+ const cart = await loadCart(container, subscription.cart_id);
410
+ const order = await createRenewalOrder(container, cycle, subscription, cart, appliedPendingChanges);
411
+ generatedOrderId = order.id;
412
+ }
413
+ const nextInterval = appliedPendingChanges?.frequency_interval ??
414
+ subscription.frequency_interval;
415
+ const nextValue = appliedPendingChanges?.frequency_value ?? subscription.frequency_value;
416
+ const nextRenewalAt = addCadence(scheduledAnchor, nextInterval, nextValue);
417
+ const finishedAt = new Date();
418
+ const nextProductSnapshot = appliedPendingChanges
419
+ ? {
420
+ ...subscription.product_snapshot,
421
+ variant_id: appliedPendingChanges.variant_id,
422
+ variant_title: appliedPendingChanges.variant_title,
423
+ sku: subscription.pending_update_data?.sku ?? subscription.product_snapshot.sku,
424
+ }
425
+ : subscription.product_snapshot;
426
+ await subscriptionModule.updateSubscriptions({
427
+ id: subscription.id,
428
+ variant_id: appliedPendingChanges?.variant_id ?? subscription.variant_id,
429
+ frequency_interval: nextInterval,
430
+ frequency_value: nextValue,
431
+ product_snapshot: nextProductSnapshot,
432
+ next_renewal_at: nextRenewalAt,
433
+ last_renewal_at: finishedAt,
434
+ skip_next_cycle: false,
435
+ pending_update_data: appliedPendingChanges ? null : subscription.pending_update_data,
436
+ });
437
+ const updatedCycle = await renewalModule.updateRenewalCycles({
438
+ id: cycle.id,
439
+ status: types_1.RenewalCycleStatus.SUCCEEDED,
440
+ processed_at: finishedAt,
441
+ generated_order_id: generatedOrderId,
442
+ last_error: null,
443
+ });
444
+ await renewalModule.updateRenewalAttempts({
445
+ id: attempt.id,
446
+ status: types_1.RenewalAttemptStatus.SUCCEEDED,
447
+ finished_at: finishedAt,
448
+ order_id: generatedOrderId,
449
+ error_code: null,
450
+ error_message: null,
451
+ });
452
+ (0, observability_1.logRenewalEvent)(logger, "info", {
453
+ event: "renewal.execution",
454
+ outcome: "succeeded",
455
+ correlation_id: correlationId,
456
+ renewal_cycle_id: cycle.id,
457
+ subscription_id: subscription.id,
458
+ trigger_type: input.trigger_type,
459
+ triggered_by: input.triggered_by ?? null,
460
+ attempt_no: attemptNo,
461
+ duration_ms: Date.now() - operationStartedAt,
462
+ success_count: 1,
463
+ failure_count: 0,
464
+ metadata: {
465
+ generated_order_id: generatedOrderId,
466
+ applied_pending_changes: Boolean(appliedPendingChanges),
467
+ },
468
+ });
469
+ await (0, create_subscription_log_event_1.persistSubscriptionLogEvent)(container, (0, normalize_log_event_1.normalizeActivityLogEvent)({
470
+ subscription_id: subscription.id,
471
+ customer_id: subscription.customer_id,
472
+ event_type: types_2.ActivityLogEventType.RENEWAL_SUCCEEDED,
473
+ actor_type: getRenewalActivityLogActorType(input.trigger_type),
474
+ actor_id: input.triggered_by ?? null,
475
+ display: {
476
+ subscription_reference: subscription.reference,
477
+ customer_name: subscription.customer_snapshot?.full_name ?? null,
478
+ product_title: subscription.product_snapshot.product_title ?? null,
479
+ variant_title: appliedPendingChanges?.variant_title ??
480
+ subscription.product_snapshot.variant_title ??
481
+ null,
482
+ },
483
+ previous_state: {
484
+ status: cycle.status,
485
+ attempt_count: cycle.attempt_count,
486
+ processed_at: (0, date_output_1.toISOStringOrNull)(cycle.processed_at),
487
+ generated_order_id: cycle.generated_order_id,
488
+ last_error: cycle.last_error,
489
+ },
490
+ new_state: {
491
+ status: updatedCycle.status,
492
+ attempt_count: updatedCycle.attempt_count,
493
+ processed_at: (0, date_output_1.toISOStringOrNull)(updatedCycle.processed_at),
494
+ generated_order_id: updatedCycle.generated_order_id,
495
+ last_error: updatedCycle.last_error,
496
+ applied_pending_update_data: appliedPendingChanges,
497
+ },
498
+ metadata: {
499
+ source: input.trigger_type === "manual" ? "admin" : "scheduler",
500
+ renewal_cycle_id: cycle.id,
501
+ order_id: generatedOrderId,
502
+ trigger_type: input.trigger_type,
503
+ scheduled_for: (0, date_output_1.toISOStringOrNull)(cycle.scheduled_for),
504
+ },
505
+ correlation_id: correlationId,
506
+ dedupe: {
507
+ scope: "renewal",
508
+ target_id: cycle.id,
509
+ qualifier: (0, date_output_1.toISOStringOrNull)(updatedCycle.processed_at),
510
+ },
511
+ }));
512
+ return new workflows_sdk_1.StepResponse({
513
+ renewal_cycle: updatedCycle,
514
+ subscription_id: subscription.id,
515
+ attempt_id: attempt.id,
516
+ generated_order_id: generatedOrderId,
517
+ });
518
+ }
519
+ catch (error) {
520
+ const finishedAt = new Date();
521
+ const message = (0, observability_1.getRenewalErrorMessage)(error);
522
+ const failureKind = (0, observability_1.classifyRenewalFailure)(error);
523
+ const paymentFailure = getPaymentQualifiedFailureContext(error);
524
+ await renewalModule.updateRenewalAttempts({
525
+ id: attempt.id,
526
+ status: types_1.RenewalAttemptStatus.FAILED,
527
+ finished_at: finishedAt,
528
+ error_code: "renewal_failed",
529
+ error_message: message,
530
+ order_id: paymentFailure?.renewal_order_id ?? null,
531
+ });
532
+ await renewalModule.updateRenewalCycles({
533
+ id: cycle.id,
534
+ status: types_1.RenewalCycleStatus.FAILED,
535
+ processed_at: finishedAt,
536
+ generated_order_id: paymentFailure?.renewal_order_id ?? null,
537
+ last_error: message,
538
+ });
539
+ await (0, create_subscription_log_event_1.persistSubscriptionLogEvent)(container, (0, normalize_log_event_1.normalizeActivityLogEvent)({
540
+ subscription_id: subscription.id,
541
+ customer_id: subscription.customer_id,
542
+ event_type: types_2.ActivityLogEventType.RENEWAL_FAILED,
543
+ actor_type: getRenewalActivityLogActorType(input.trigger_type),
544
+ actor_id: input.triggered_by ?? null,
545
+ display: {
546
+ subscription_reference: subscription.reference,
547
+ customer_name: subscription.customer_snapshot?.full_name ?? null,
548
+ product_title: subscription.product_snapshot.product_title ?? null,
549
+ variant_title: appliedPendingChanges?.variant_title ??
550
+ subscription.product_snapshot.variant_title ??
551
+ null,
552
+ },
553
+ previous_state: {
554
+ status: cycle.status,
555
+ attempt_count: cycle.attempt_count,
556
+ processed_at: (0, date_output_1.toISOStringOrNull)(cycle.processed_at),
557
+ generated_order_id: cycle.generated_order_id,
558
+ last_error: cycle.last_error,
559
+ },
560
+ new_state: {
561
+ status: types_1.RenewalCycleStatus.FAILED,
562
+ attempt_count: attemptNo,
563
+ processed_at: (0, date_output_1.toISOStringOrNull)(finishedAt),
564
+ generated_order_id: paymentFailure?.renewal_order_id ?? null,
565
+ last_error: message,
566
+ applied_pending_update_data: appliedPendingChanges,
567
+ },
568
+ reason: input.reason ?? null,
569
+ metadata: {
570
+ source: input.trigger_type === "manual" ? "admin" : "scheduler",
571
+ renewal_cycle_id: cycle.id,
572
+ order_id: paymentFailure?.renewal_order_id ?? null,
573
+ trigger_type: input.trigger_type,
574
+ reason_code: failureKind,
575
+ scheduled_for: (0, date_output_1.toISOStringOrNull)(cycle.scheduled_for),
576
+ },
577
+ correlation_id: correlationId,
578
+ dedupe: {
579
+ scope: "renewal",
580
+ target_id: cycle.id,
581
+ qualifier: (0, date_output_1.toISOStringOrNull)(finishedAt),
582
+ },
583
+ }));
584
+ if (paymentFailure) {
585
+ try {
586
+ await (0, start_dunning_1.startDunningWorkflow)(container).run({
587
+ input: {
588
+ subscription_id: subscription.id,
589
+ renewal_cycle_id: cycle.id,
590
+ renewal_order_id: paymentFailure.renewal_order_id,
591
+ payment_failure_source: paymentFailure.source,
592
+ payment_error_code: paymentFailure.error_code,
593
+ payment_error_message: message,
594
+ failed_at: finishedAt,
595
+ triggered_by: input.triggered_by ?? null,
596
+ reason: input.reason ?? null,
597
+ metadata: {
598
+ renewal_trigger_type: input.trigger_type,
599
+ renewal_attempt_id: attempt.id,
600
+ renewal_attempt_no: attemptNo,
601
+ renewal_correlation_id: correlationId,
602
+ },
603
+ },
604
+ });
605
+ }
606
+ catch (dunningError) {
607
+ (0, observability_1.logRenewalEvent)(logger, "warn", {
608
+ event: "renewal.dunning",
609
+ outcome: "failed",
610
+ correlation_id: correlationId,
611
+ renewal_cycle_id: cycle.id,
612
+ subscription_id: subscription.id,
613
+ trigger_type: input.trigger_type,
614
+ triggered_by: input.triggered_by ?? null,
615
+ duration_ms: Date.now() - operationStartedAt,
616
+ failure_kind: failureKind,
617
+ alertable: true,
618
+ message: `Failed to start dunning after renewal failure: ${(0, observability_1.getRenewalErrorMessage)(dunningError)}`,
619
+ });
620
+ }
621
+ }
622
+ (0, observability_1.logRenewalEvent)(logger, "error", {
623
+ event: "renewal.execution",
624
+ outcome: "failed",
625
+ correlation_id: correlationId,
626
+ renewal_cycle_id: cycle.id,
627
+ subscription_id: subscription.id,
628
+ trigger_type: input.trigger_type,
629
+ triggered_by: input.triggered_by ?? null,
630
+ attempt_no: attemptNo,
631
+ duration_ms: Date.now() - operationStartedAt,
632
+ success_count: 0,
633
+ failure_count: 1,
634
+ failure_kind: failureKind,
635
+ alertable: (0, observability_1.isAlertableRenewalFailure)(failureKind),
636
+ message,
637
+ });
638
+ throw error;
639
+ }
640
+ });
641
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1yZW5ld2FsLWN5Y2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9wcm9jZXNzLXJlbmV3YWwtY3ljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscURBQThFO0FBQzlFLHFFQUE0RTtBQUM1RSw0REFJb0M7QUFDcEMsbURBQXNEO0FBRXRELHVEQUtvQztBQUNwQywrREFBa0U7QUFDbEUsNkVBTWtEO0FBQ2xELDhGQUFnRztBQUNoRyw0REFHeUM7QUFDekMsc0ZBQWtHO0FBQ2xHLDZEQUFnRTtBQUVoRSw0REFJeUM7QUFDekMsb0VBQTRFO0FBQzVFLG9EQUF1RDtBQUN2RCxtRkFBNkU7QUFDN0Usc0RBQXdEO0FBNEd4RCxTQUFTLDhCQUE4QixDQUFDLFdBQW1DO0lBQ3pFLE9BQU8sV0FBVyxLQUFLLFFBQVE7UUFDN0IsQ0FBQyxDQUFDLDRCQUFvQixDQUFDLElBQUk7UUFDM0IsQ0FBQyxDQUFDLDRCQUFvQixDQUFDLFNBQVMsQ0FBQTtBQUNwQyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2pCLE1BQVksRUFDWixRQUF1QyxFQUN2QyxLQUFhO0lBRWIsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFN0IsSUFBSSxRQUFRLEtBQUsscUNBQTZCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzlDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELElBQUksUUFBUSxLQUFLLHFDQUE2QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFBO1FBQzVDLE9BQU8sSUFBSSxDQUFBO0lBQ2Is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