@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,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const types_1 = require("../types");
5
+ const SubscriptionLog = utils_1.model
6
+ .define("subscription_log", {
7
+ id: utils_1.model.id().primaryKey(),
8
+ subscription_id: utils_1.model.text(),
9
+ customer_id: utils_1.model.text().nullable(),
10
+ event_type: utils_1.model.enum(types_1.ActivityLogEventType),
11
+ actor_type: utils_1.model.enum(types_1.ActivityLogActorType),
12
+ actor_id: utils_1.model.text().nullable(),
13
+ subscription_reference: utils_1.model.text(),
14
+ customer_name: utils_1.model.text().nullable(),
15
+ product_title: utils_1.model.text().nullable(),
16
+ variant_title: utils_1.model.text().nullable(),
17
+ reason: utils_1.model.text().nullable(),
18
+ dedupe_key: utils_1.model.text().unique(),
19
+ previous_state: utils_1.model.json().nullable(),
20
+ new_state: utils_1.model.json().nullable(),
21
+ changed_fields: utils_1.model.json().nullable(),
22
+ metadata: utils_1.model.json().nullable(),
23
+ })
24
+ .indexes([
25
+ {
26
+ on: ["dedupe_key"],
27
+ unique: true,
28
+ },
29
+ {
30
+ on: ["subscription_id"],
31
+ },
32
+ {
33
+ on: ["customer_id"],
34
+ },
35
+ {
36
+ on: ["event_type"],
37
+ },
38
+ {
39
+ on: ["created_at"],
40
+ },
41
+ {
42
+ on: ["subscription_id", "created_at"],
43
+ },
44
+ {
45
+ on: ["customer_id", "created_at"],
46
+ },
47
+ {
48
+ on: ["event_type", "created_at"],
49
+ },
50
+ ]);
51
+ exports.default = SubscriptionLog;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2FjdGl2aXR5LWxvZy9tb2RlbHMvc3Vic2NyaXB0aW9uLWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFpRDtBQUNqRCxvQ0FHaUI7QUFFakIsTUFBTSxlQUFlLEdBQUcsYUFBSztLQUMxQixNQUFNLENBQUMsa0JBQWtCLEVBQUU7SUFDMUIsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsZUFBZSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDN0IsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsNEJBQW9CLENBQUM7SUFDNUMsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsNEJBQW9CLENBQUM7SUFDNUMsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakMsc0JBQXNCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUNwQyxhQUFhLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxhQUFhLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxhQUFhLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMvQixVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTtJQUNqQyxjQUFjLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN2QyxTQUFTLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxjQUFjLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN2QyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNsQyxDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1A7UUFDRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDbEIsTUFBTSxFQUFFLElBQUk7S0FDYjtJQUNEO1FBQ0UsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUM7S0FDeEI7SUFDRDtRQUNFLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQztLQUNwQjtJQUNEO1FBQ0UsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDO0tBQ25CO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUM7S0FDbkI7SUFDRDtRQUNFLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQztLQUN0QztJQUNEO1FBQ0UsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQztLQUNsQztJQUNEO1FBQ0UsRUFBRSxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztLQUNqQztDQUNGLENBQUMsQ0FBQTtBQUVKLGtCQUFlLGVBQWUsQ0FBQSJ9
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const subscription_log_1 = __importDefault(require("./models/subscription-log"));
8
+ class ActivityLogModuleService extends (0, utils_1.MedusaService)({
9
+ SubscriptionLog: subscription_log_1.default,
10
+ }) {
11
+ }
12
+ exports.default = ActivityLogModuleService;
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2FjdGl2aXR5LWxvZy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQXlEO0FBQ3pELGlGQUF1RDtBQUV2RCxNQUFNLHdCQUF5QixTQUFRLElBQUEscUJBQWEsRUFBQztJQUNuRCxlQUFlLEVBQWYsMEJBQWU7Q0FDaEIsQ0FBQztDQUFHO0FBRUwsa0JBQWUsd0JBQXdCLENBQUEifQ==
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActivityLogEventType = exports.ActivityLogActorType = void 0;
4
+ var ActivityLogActorType;
5
+ (function (ActivityLogActorType) {
6
+ ActivityLogActorType["USER"] = "user";
7
+ ActivityLogActorType["SYSTEM"] = "system";
8
+ ActivityLogActorType["SCHEDULER"] = "scheduler";
9
+ })(ActivityLogActorType || (exports.ActivityLogActorType = ActivityLogActorType = {}));
10
+ var ActivityLogEventType;
11
+ (function (ActivityLogEventType) {
12
+ ActivityLogEventType["SUBSCRIPTION_PAUSED"] = "subscription.paused";
13
+ ActivityLogEventType["SUBSCRIPTION_RESUMED"] = "subscription.resumed";
14
+ ActivityLogEventType["SUBSCRIPTION_CANCELED"] = "subscription.canceled";
15
+ ActivityLogEventType["SUBSCRIPTION_PLAN_CHANGE_SCHEDULED"] = "subscription.plan_change_scheduled";
16
+ ActivityLogEventType["SUBSCRIPTION_SHIPPING_ADDRESS_UPDATED"] = "subscription.shipping_address_updated";
17
+ ActivityLogEventType["RENEWAL_CYCLE_CREATED"] = "renewal.cycle_created";
18
+ ActivityLogEventType["RENEWAL_APPROVAL_APPROVED"] = "renewal.approval_approved";
19
+ ActivityLogEventType["RENEWAL_APPROVAL_REJECTED"] = "renewal.approval_rejected";
20
+ ActivityLogEventType["RENEWAL_FORCE_REQUESTED"] = "renewal.force_requested";
21
+ ActivityLogEventType["RENEWAL_SUCCEEDED"] = "renewal.succeeded";
22
+ ActivityLogEventType["RENEWAL_FAILED"] = "renewal.failed";
23
+ ActivityLogEventType["DUNNING_STARTED"] = "dunning.started";
24
+ ActivityLogEventType["DUNNING_RETRY_EXECUTED"] = "dunning.retry_executed";
25
+ ActivityLogEventType["DUNNING_RECOVERED"] = "dunning.recovered";
26
+ ActivityLogEventType["DUNNING_UNRECOVERED"] = "dunning.unrecovered";
27
+ ActivityLogEventType["DUNNING_RETRY_SCHEDULE_UPDATED"] = "dunning.retry_schedule_updated";
28
+ ActivityLogEventType["CANCELLATION_CASE_STARTED"] = "cancellation.case_started";
29
+ ActivityLogEventType["CANCELLATION_OFFER_APPLIED"] = "cancellation.offer_applied";
30
+ ActivityLogEventType["CANCELLATION_REASON_UPDATED"] = "cancellation.reason_updated";
31
+ ActivityLogEventType["CANCELLATION_FINALIZED"] = "cancellation.finalized";
32
+ })(ActivityLogEventType || (exports.ActivityLogEventType = ActivityLogEventType = {}));
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hY3Rpdml0eS1sb2cvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxvQkFJWDtBQUpELFdBQVksb0JBQW9CO0lBQzlCLHFDQUFhLENBQUE7SUFDYix5Q0FBaUIsQ0FBQTtJQUNqQiwrQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSlcsb0JBQW9CLG9DQUFwQixvQkFBb0IsUUFJL0I7QUFFRCxJQUFZLG9CQXFCWDtBQXJCRCxXQUFZLG9CQUFvQjtJQUM5QixtRUFBMkMsQ0FBQTtJQUMzQyxxRUFBNkMsQ0FBQTtJQUM3Qyx1RUFBK0MsQ0FBQTtJQUMvQyxpR0FBeUUsQ0FBQTtJQUN6RSx1R0FBK0UsQ0FBQTtJQUMvRSx1RUFBK0MsQ0FBQTtJQUMvQywrRUFBdUQsQ0FBQTtJQUN2RCwrRUFBdUQsQ0FBQTtJQUN2RCwyRUFBbUQsQ0FBQTtJQUNuRCwrREFBdUMsQ0FBQTtJQUN2Qyx5REFBaUMsQ0FBQTtJQUNqQywyREFBbUMsQ0FBQTtJQUNuQyx5RUFBaUQsQ0FBQTtJQUNqRCwrREFBdUMsQ0FBQTtJQUN2QyxtRUFBMkMsQ0FBQTtJQUMzQyx5RkFBaUUsQ0FBQTtJQUNqRSwrRUFBdUQsQ0FBQTtJQUN2RCxpRkFBeUQsQ0FBQTtJQUN6RCxtRkFBMkQsQ0FBQTtJQUMzRCx5RUFBaUQsQ0FBQTtBQUNuRCxDQUFDLEVBckJXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBcUIvQiJ9
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listAdminSubscriptionLogs = listAdminSubscriptionLogs;
4
+ exports.getAdminSubscriptionLogDetail = getAdminSubscriptionLogDetail;
5
+ exports.getAdminSubscriptionTimeline = getAdminSubscriptionTimeline;
6
+ const __1 = require("..");
7
+ const types_1 = require("../types");
8
+ const activity_log_1 = require("../../../admin/types/activity-log");
9
+ const databaseSortableFields = new Set([
10
+ "created_at",
11
+ "event_type",
12
+ "actor_type",
13
+ ]);
14
+ const inMemorySortableFields = new Set([
15
+ "subscription_reference",
16
+ "customer_name",
17
+ "reason",
18
+ ]);
19
+ function getActivityLogModule(container) {
20
+ return container.resolve(__1.ACTIVITY_LOG_MODULE);
21
+ }
22
+ function getQuery(container) {
23
+ return container.resolve("query");
24
+ }
25
+ function assertSortableField(order) {
26
+ if (!order) {
27
+ return;
28
+ }
29
+ if (!databaseSortableFields.has(order) &&
30
+ !inMemorySortableFields.has(order)) {
31
+ throw new Error(`Unsupported sort field '${order}'`);
32
+ }
33
+ }
34
+ function buildFilters(input) {
35
+ const filters = {};
36
+ if (input.subscription_id) {
37
+ filters.subscription_id = input.subscription_id;
38
+ }
39
+ if (input.customer_id) {
40
+ filters.customer_id = input.customer_id;
41
+ }
42
+ if (input.event_type?.length) {
43
+ filters.event_type = input.event_type;
44
+ }
45
+ if (input.actor_type?.length) {
46
+ filters.actor_type = input.actor_type;
47
+ }
48
+ if (input.date_from || input.date_to) {
49
+ filters.created_at = {
50
+ ...(input.date_from ? { $gte: input.date_from } : {}),
51
+ ...(input.date_to ? { $lte: input.date_to } : {}),
52
+ };
53
+ }
54
+ return filters;
55
+ }
56
+ function mapActorType(actorType) {
57
+ switch (actorType) {
58
+ case types_1.ActivityLogActorType.USER:
59
+ return activity_log_1.ActivityLogAdminActorType.USER;
60
+ case types_1.ActivityLogActorType.SYSTEM:
61
+ return activity_log_1.ActivityLogAdminActorType.SYSTEM;
62
+ case types_1.ActivityLogActorType.SCHEDULER:
63
+ return activity_log_1.ActivityLogAdminActorType.SCHEDULER;
64
+ }
65
+ }
66
+ function mapSubscriptionSummary(record) {
67
+ return {
68
+ subscription_id: record.subscription_id,
69
+ reference: record.subscription_reference,
70
+ customer_id: record.customer_id,
71
+ customer_name: record.customer_name ?? "Unknown customer",
72
+ product_title: record.product_title ?? "Unknown product",
73
+ variant_title: record.variant_title ?? "Unknown variant",
74
+ };
75
+ }
76
+ function buildActorName(user) {
77
+ if (!user) {
78
+ return null;
79
+ }
80
+ const name = [user.first_name, user.last_name].filter(Boolean).join(" ").trim();
81
+ return name || null;
82
+ }
83
+ function mapActorSummary(record, user) {
84
+ const name = buildActorName(user);
85
+ const email = user?.email ?? null;
86
+ return {
87
+ type: mapActorType(record.actor_type),
88
+ id: record.actor_id,
89
+ email,
90
+ name,
91
+ display: email ?? name ?? record.actor_id,
92
+ };
93
+ }
94
+ function buildChangeSummary(record) {
95
+ if (record.changed_fields?.length) {
96
+ return record.changed_fields
97
+ .slice(0, 3)
98
+ .map((field) => field.field)
99
+ .join(", ");
100
+ }
101
+ if (record.reason) {
102
+ return record.reason;
103
+ }
104
+ if (record.new_state) {
105
+ return Object.keys(record.new_state).slice(0, 3).join(", ") || null;
106
+ }
107
+ return null;
108
+ }
109
+ function toIsoString(value) {
110
+ if (!value) {
111
+ return "";
112
+ }
113
+ if (value instanceof Date) {
114
+ return value.toISOString();
115
+ }
116
+ return value;
117
+ }
118
+ async function resolveAdminUsersById(container, records) {
119
+ const actorIds = [...new Set(records
120
+ .filter((record) => record.actor_type === types_1.ActivityLogActorType.USER && Boolean(record.actor_id))
121
+ .map((record) => record.actor_id))];
122
+ if (!actorIds.length) {
123
+ return new Map();
124
+ }
125
+ try {
126
+ const query = getQuery(container);
127
+ const { data } = await query.graph({
128
+ entity: "user",
129
+ fields: ["id", "email", "first_name", "last_name"],
130
+ filters: {
131
+ id: actorIds,
132
+ },
133
+ });
134
+ return new Map(data.map((user) => [
135
+ String(user.id),
136
+ {
137
+ id: String(user.id),
138
+ email: typeof user.email === "string" && user.email.length ? user.email : null,
139
+ first_name: typeof user.first_name === "string" && user.first_name.length
140
+ ? user.first_name
141
+ : null,
142
+ last_name: typeof user.last_name === "string" && user.last_name.length
143
+ ? user.last_name
144
+ : null,
145
+ },
146
+ ]));
147
+ }
148
+ catch {
149
+ return new Map();
150
+ }
151
+ }
152
+ function mapListItem(record, usersById) {
153
+ const user = record.actor_type === types_1.ActivityLogActorType.USER && record.actor_id
154
+ ? usersById.get(record.actor_id) ?? null
155
+ : null;
156
+ return {
157
+ id: record.id,
158
+ subscription_id: record.subscription_id,
159
+ event_type: record.event_type,
160
+ actor_type: mapActorType(record.actor_type),
161
+ actor_id: record.actor_id,
162
+ actor: mapActorSummary(record, user),
163
+ subscription: mapSubscriptionSummary(record),
164
+ reason: record.reason,
165
+ change_summary: buildChangeSummary(record),
166
+ created_at: toIsoString(record.created_at),
167
+ };
168
+ }
169
+ function mapDetail(record, usersById) {
170
+ return {
171
+ ...mapListItem(record, usersById),
172
+ previous_state: record.previous_state,
173
+ new_state: record.new_state,
174
+ changed_fields: record.changed_fields ?? [],
175
+ metadata: record.metadata,
176
+ };
177
+ }
178
+ function matchesQuery(record, q) {
179
+ if (!q?.trim()) {
180
+ return true;
181
+ }
182
+ const normalized = q.trim().toLowerCase();
183
+ return [
184
+ record.subscription_reference,
185
+ record.customer_name ?? "",
186
+ record.reason ?? "",
187
+ ].some((value) => value.toLowerCase().includes(normalized));
188
+ }
189
+ function getSortableValue(record, order) {
190
+ switch (order) {
191
+ case "created_at":
192
+ return record.created_at ?? "";
193
+ case "event_type":
194
+ return record.event_type ?? "";
195
+ case "actor_type":
196
+ return record.actor_type ?? "";
197
+ case "subscription_reference":
198
+ return record.subscription.reference ?? "";
199
+ case "customer_name":
200
+ return record.subscription.customer_name ?? "";
201
+ case "reason":
202
+ return record.reason ?? "";
203
+ default:
204
+ return "";
205
+ }
206
+ }
207
+ function sortItems(items, order, direction) {
208
+ const multiplier = direction === "asc" ? 1 : -1;
209
+ return [...items].sort((left, right) => {
210
+ const leftValue = getSortableValue(left, order);
211
+ const rightValue = getSortableValue(right, order);
212
+ if (leftValue < rightValue) {
213
+ return -1 * multiplier;
214
+ }
215
+ if (leftValue > rightValue) {
216
+ return 1 * multiplier;
217
+ }
218
+ return 0;
219
+ });
220
+ }
221
+ async function listAdminSubscriptionLogs(container, input) {
222
+ const activityLogModule = getActivityLogModule(container);
223
+ const order = input.order ?? "created_at";
224
+ const direction = input.direction ?? "desc";
225
+ assertSortableField(order);
226
+ const [records] = (await activityLogModule.listAndCountSubscriptionLogs(buildFilters(input), {
227
+ order: {
228
+ [databaseSortableFields.has(order) ? order : "created_at"]: databaseSortableFields.has(order) ? direction : "desc",
229
+ },
230
+ }));
231
+ const filtered = records.filter((record) => matchesQuery(record, input.q));
232
+ const usersById = await resolveAdminUsersById(container, filtered);
233
+ const mapped = filtered.map((record) => mapListItem(record, usersById));
234
+ const sorted = inMemorySortableFields.has(order)
235
+ ? sortItems(mapped, order, direction)
236
+ : mapped;
237
+ const offset = input.offset ?? 0;
238
+ const limit = input.limit ?? 20;
239
+ const paginated = sorted.slice(offset, offset + limit);
240
+ return {
241
+ subscription_logs: paginated,
242
+ count: sorted.length,
243
+ limit,
244
+ offset,
245
+ };
246
+ }
247
+ async function getAdminSubscriptionLogDetail(container, id) {
248
+ const activityLogModule = getActivityLogModule(container);
249
+ const record = (await activityLogModule.retrieveSubscriptionLog(id));
250
+ const usersById = await resolveAdminUsersById(container, [record]);
251
+ return {
252
+ subscription_log: mapDetail(record, usersById),
253
+ };
254
+ }
255
+ async function getAdminSubscriptionTimeline(container, subscriptionId, input) {
256
+ return await listAdminSubscriptionLogs(container, {
257
+ ...input,
258
+ subscription_id: subscriptionId,
259
+ });
260
+ }
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hY3Rpdml0eS1sb2cvdXRpbHMvYWRtaW4tcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErVkEsOERBb0NDO0FBRUQsc0VBYUM7QUFFRCxvRUFTQztBQTVaRCwwQkFBd0M7QUFFeEMsb0NBR2lCO0FBQ2pCLG9FQVEwQztBQW1EMUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxZQUFZO0lBQ1osWUFBWTtJQUNaLFlBQVk7Q0FDYixDQUFDLENBQUE7QUFFRixNQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3JDLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsUUFBUTtDQUNULENBQUMsQ0FBQTtBQUVGLFNBQVMsb0JBQW9CLENBQUMsU0FBMEI7SUFDdEQsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUFtQixDQUE2QixDQUFBO0FBQzNFLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxTQUEwQjtJQUMxQyxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFlLENBQUE7QUFDakQsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsS0FBYztJQUN6QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQ0UsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2xDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUNsQyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQXFDO0lBQ3pELE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUE7SUFFM0MsSUFBSSxLQUFLLENB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
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeActivityLogEvent = normalizeActivityLogEvent;
4
+ exports.buildActivityLogDedupeKey = buildActivityLogDedupeKey;
5
+ const SENSITIVE_KEYS = new Set([
6
+ "address_1",
7
+ "address_2",
8
+ "postal_code",
9
+ "phone",
10
+ "payment_context",
11
+ "payment_reference",
12
+ "payment_method_reference",
13
+ "customer_payment_reference",
14
+ "source_payment_collection_id",
15
+ "source_payment_session_id",
16
+ "payment_session",
17
+ "payment_sessions",
18
+ "provider_payload",
19
+ "provider_response",
20
+ "raw_error",
21
+ "stack",
22
+ "stacktrace",
23
+ "error_stack",
24
+ ]);
25
+ const ALLOWED_METADATA_KEYS = new Set([
26
+ "renewal_cycle_id",
27
+ "dunning_case_id",
28
+ "cancellation_case_id",
29
+ "retention_offer_event_id",
30
+ "order_id",
31
+ "trigger_type",
32
+ "source",
33
+ "attempt_no",
34
+ "job_name",
35
+ "reason_code",
36
+ "effective_at",
37
+ "scheduled_for",
38
+ "status_before",
39
+ "status_after",
40
+ "approval_status",
41
+ ]);
42
+ function normalizeActivityLogEvent(input) {
43
+ const previousState = sanitizeStatePayload(input.previous_state ?? null);
44
+ const newState = sanitizeStatePayload(input.new_state ?? null);
45
+ const changedFields = buildChangedFields(previousState, newState);
46
+ const metadata = buildMetadata(input.metadata ?? null, input.correlation_id ?? null);
47
+ return {
48
+ subscription_id: input.subscription_id,
49
+ customer_id: input.customer_id ?? null,
50
+ event_type: input.event_type,
51
+ actor_type: input.actor_type,
52
+ actor_id: input.actor_id ?? null,
53
+ subscription_reference: input.display.subscription_reference,
54
+ customer_name: input.display.customer_name ?? null,
55
+ product_title: input.display.product_title ?? null,
56
+ variant_title: input.display.variant_title ?? null,
57
+ reason: input.reason ?? null,
58
+ dedupe_key: buildActivityLogDedupeKey(input.event_type, input.dedupe.scope, input.dedupe.target_id, input.dedupe.qualifier ?? null),
59
+ previous_state: previousState,
60
+ new_state: newState,
61
+ changed_fields: changedFields,
62
+ metadata,
63
+ };
64
+ }
65
+ function buildActivityLogDedupeKey(eventType, scope, targetId, qualifier) {
66
+ const parts = [eventType, scope, targetId];
67
+ if (qualifier !== undefined && qualifier !== null && qualifier !== "") {
68
+ parts.push(String(qualifier));
69
+ }
70
+ return parts.join(":");
71
+ }
72
+ function buildMetadata(metadata, correlationId) {
73
+ const normalized = {};
74
+ if (metadata) {
75
+ for (const [key, value] of Object.entries(metadata)) {
76
+ if (!ALLOWED_METADATA_KEYS.has(key)) {
77
+ continue;
78
+ }
79
+ const sanitized = sanitizeValue(value);
80
+ if (sanitized !== undefined) {
81
+ normalized[key] = sanitized;
82
+ }
83
+ }
84
+ }
85
+ if (correlationId) {
86
+ normalized.correlation_id = correlationId;
87
+ }
88
+ return Object.keys(normalized).length ? normalized : null;
89
+ }
90
+ function sanitizeStatePayload(value) {
91
+ if (!value) {
92
+ return null;
93
+ }
94
+ const normalized = {};
95
+ for (const [key, raw] of Object.entries(value)) {
96
+ const sanitized = sanitizeEntry(key, raw);
97
+ if (sanitized !== undefined) {
98
+ normalized[key] = sanitized;
99
+ }
100
+ }
101
+ return Object.keys(normalized).length ? normalized : null;
102
+ }
103
+ function sanitizeEntry(key, value) {
104
+ if (SENSITIVE_KEYS.has(key)) {
105
+ return undefined;
106
+ }
107
+ return sanitizeValue(value);
108
+ }
109
+ function sanitizeValue(value) {
110
+ if (value === null ||
111
+ typeof value === "string" ||
112
+ typeof value === "number" ||
113
+ typeof value === "boolean") {
114
+ return value;
115
+ }
116
+ if (value instanceof Date) {
117
+ return value.toISOString();
118
+ }
119
+ if (Array.isArray(value)) {
120
+ const normalized = value
121
+ .map((entry) => sanitizeValue(entry))
122
+ .filter((entry) => entry !== undefined);
123
+ return normalized;
124
+ }
125
+ if (typeof value === "object") {
126
+ const normalized = {};
127
+ for (const [key, nested] of Object.entries(value)) {
128
+ const sanitized = sanitizeEntry(key, nested);
129
+ if (sanitized !== undefined) {
130
+ normalized[key] = sanitized;
131
+ }
132
+ }
133
+ return Object.keys(normalized).length ? normalized : {};
134
+ }
135
+ return undefined;
136
+ }
137
+ function buildChangedFields(previousState, newState) {
138
+ const keys = new Set([
139
+ ...Object.keys(previousState ?? {}),
140
+ ...Object.keys(newState ?? {}),
141
+ ]);
142
+ const changedFields = [];
143
+ for (const key of [...keys].sort()) {
144
+ const before = previousState?.[key] ?? null;
145
+ const after = newState?.[key] ?? null;
146
+ if (stableStringify(before) === stableStringify(after)) {
147
+ continue;
148
+ }
149
+ changedFields.push({
150
+ field: key,
151
+ before,
152
+ after,
153
+ });
154
+ }
155
+ return changedFields.length ? changedFields : null;
156
+ }
157
+ function stableStringify(value) {
158
+ if (value === null || typeof value !== "object") {
159
+ return JSON.stringify(value);
160
+ }
161
+ if (Array.isArray(value)) {
162
+ return `[${value.map((entry) => stableStringify(entry)).join(",")}]`;
163
+ }
164
+ const entries = Object.entries(value)
165
+ .sort(([left], [right]) => left.localeCompare(right))
166
+ .map(([key, nested]) => `${JSON.stringify(key)}:${stableStringify(nested)}`);
167
+ return `{${entries.join(",")}}`;
168
+ }
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLWxvZy1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2FjdGl2aXR5LWxvZy91dGlscy9ub3JtYWxpemUtbG9nLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0dBLDhEQThCQztBQUVELDhEQWFDO0FBcEZELE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzdCLFdBQVc7SUFDWCxXQUFXO0lBQ1gsYUFBYTtJQUNiLE9BQU87SUFDUCxpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLDBCQUEwQjtJQUMxQiw0QkFBNEI7SUFDNUIsOEJBQThCO0lBQzlCLDJCQUEyQjtJQUMzQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsV0FBVztJQUNYLE9BQU87SUFDUCxZQUFZO0lBQ1osYUFBYTtDQUNkLENBQUMsQ0FBQTtBQUVGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEMsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixzQkFBc0I7SUFDdEIsMEJBQTBCO0lBQzFCLFVBQVU7SUFDVixjQUFjO0lBQ2QsUUFBUTtJQUNSLFlBQVk7SUFDWixVQUFVO0lBQ1YsYUFBYTtJQUNiLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGNBQWM7SUFDZCxpQkFBaUI7Q0FDbEIsQ0FBQyxDQUFBO0FBRUYsU0FBZ0IseUJBQXlCLENBQ3ZDLEtBQTZCO0lBRTdCLE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLENBQUE7SUFDeEUsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQTtJQUM5RCxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUE7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
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ANALYTICS_METRICS_VERSION = void 0;
4
+ exports.ANALYTICS_METRICS_VERSION = "analytics-v1";
5
+ // Bump this version only when analytics outputs can change for the same source
6
+ // data, for example after a KPI formula, bucket, active-state, or currency
7
+ // semantics change.
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvYW5hbHl0aWNzL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLHlCQUF5QixHQUFHLGNBQWMsQ0FBQTtBQUV2RCwrRUFBK0U7QUFDL0UsMkVBQTJFO0FBQzNFLG9CQUFvQiJ9
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ANALYTICS_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const service_1 = __importDefault(require("./service"));
9
+ exports.ANALYTICS_MODULE = "analytics";
10
+ exports.default = (0, utils_1.Module)(exports.ANALYTICS_MODULE, {
11
+ service: service_1.default,
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hbmFseXRpY3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscURBQWtEO0FBQ2xELHdEQUE4QztBQUVqQyxRQUFBLGdCQUFnQixHQUFHLFdBQVcsQ0FBQTtBQUUzQyxrQkFBZSxJQUFBLGNBQU0sRUFBQyx3QkFBZ0IsRUFBRTtJQUN0QyxPQUFPLEVBQUUsaUJBQXNCO0NBQ2hDLENBQUMsQ0FBQSJ9
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260402183116 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260402183116 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`create table if not exists "subscription_metrics_daily" ("id" text not null, "metric_date" timestamptz not null, "subscription_id" text not null, "customer_id" text not null, "product_id" text not null, "variant_id" text not null, "status" text check ("status" in ('active', 'paused', 'cancelled', 'past_due')) not null, "frequency_interval" text check ("frequency_interval" in ('week', 'month', 'year')) not null, "frequency_value" integer not null, "currency_code" text null, "is_active" boolean not null default false, "active_subscriptions_count" integer not null default 0, "mrr_amount" numeric null, "churned_subscriptions_count" integer not null default 0, "churn_reason_category" text check ("churn_reason_category" in ('price', 'product_fit', 'delivery', 'billing', 'temporary_pause', 'switched_competitor', 'other')) null, "source_snapshot" jsonb null, "metadata" jsonb null, "raw_mrr_amount" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "subscription_metrics_daily_pkey" primary key ("id"));`);
8
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_deleted_at" ON "subscription_metrics_daily" ("deleted_at") WHERE deleted_at IS NULL;`);
9
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_metric_date" ON "subscription_metrics_daily" ("metric_date") WHERE deleted_at IS NULL;`);
10
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_subscription_id" ON "subscription_metrics_daily" ("subscription_id") WHERE deleted_at IS NULL;`);
11
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_product_id" ON "subscription_metrics_daily" ("product_id") WHERE deleted_at IS NULL;`);
12
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_status" ON "subscription_metrics_daily" ("status") WHERE deleted_at IS NULL;`);
13
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_currency_code" ON "subscription_metrics_daily" ("currency_code") WHERE deleted_at IS NULL;`);
14
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_frequency_interval" ON "subscription_metrics_daily" ("frequency_interval") WHERE deleted_at IS NULL;`);
15
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_frequency_value" ON "subscription_metrics_daily" ("frequency_value") WHERE deleted_at IS NULL;`);
16
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_metric_date_status" ON "subscription_metrics_daily" ("metric_date", "status") WHERE deleted_at IS NULL;`);
17
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_metric_date_product_id" ON "subscription_metrics_daily" ("metric_date", "product_id") WHERE deleted_at IS NULL;`);
18
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_metric_date_frequency_interval_frequency_value" ON "subscription_metrics_daily" ("metric_date", "frequency_interval", "frequency_value") WHERE deleted_at IS NULL;`);
19
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_metric_date_currency_code" ON "subscription_metrics_daily" ("metric_date", "currency_code") WHERE deleted_at IS NULL;`);
20
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_subscription_metrics_daily_metric_date_churn_reason_category" ON "subscription_metrics_daily" ("metric_date", "churn_reason_category") WHERE deleted_at IS NULL;`);
21
+ }
22
+ async down() {
23
+ this.addSql(`drop table if exists "subscription_metrics_daily" cascade;`);
24
+ }
25
+ }
26
+ exports.Migration20260402183116 = Migration20260402183116;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA0MDIxODMxMTYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hbmFseXRpY3MvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDQwMjE4MzExNi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsdWxDQUF1bEMsQ0FBQyxDQUFDO1FBQ3JtQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlKQUFpSixDQUFDLENBQUM7UUFDL0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxtSkFBbUosQ0FBQyxDQUFDO1FBQ2pLLElBQUksQ0FBQyxNQUFNLENBQUMsMkpBQTJKLENBQUMsQ0FBQztRQUN6SyxJQUFJLENBQUMsTUFBTSxDQUFDLGlKQUFpSixDQUFDLENBQUM7UUFDL0osSUFBSSxDQUFDLE1BQU0sQ0FBQyx5SUFBeUksQ0FBQyxDQUFDO1FBQ3ZKLElBQUksQ0FBQyxNQUFNLENBQUMsdUpBQXVKLENBQUMsQ0FBQztRQUNySyxJQUFJLENBQUMsTUFBTSxDQUFDLGlLQUFpSyxDQUFDLENBQUM7UUFDL0ssSUFBSSxDQUFDLE1BQU0sQ0FBQywySkFBMkosQ0FBQyxDQUFDO1FBQ3pLLElBQUksQ0FBQyxNQUFNLENBQUMsb0tBQW9LLENBQUMsQ0FBQztRQUNsTCxJQUFJLENBQUMsTUFBTSxDQUFDLDRLQUE0SyxDQUFDLENBQUM7UUFDMUwsSUFBSSxDQUFDLE1BQU0sQ0FBQywrTkFBK04sQ0FBQyxDQUFDO1FBQzdPLElBQUksQ0FBQyxNQUFNLENBQUMsa0xBQWtMLENBQUMsQ0FBQztRQUNoTSxJQUFJLENBQUMsTUFBTSxDQUFDLGtNQUFrTSxDQUFDLENBQUM7SUFDbE4sQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsNERBQTRELENBQUMsQ0FBQztJQUM1RSxDQUFDO0NBRUY7QUF2QkQsMERBdUJDIn0=