@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,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeAdminRenewalsListQuery = normalizeAdminRenewalsListQuery;
4
+ exports.getAdminRenewalDetailResponse = getAdminRenewalDetailResponse;
5
+ exports.getAdminRenewalsListResponse = getAdminRenewalsListResponse;
6
+ exports.mapRenewalAdminRouteError = mapRenewalAdminRouteError;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const admin_query_1 = require("../../../modules/renewal/utils/admin-query");
9
+ const observability_1 = require("../../../modules/renewal/utils/observability");
10
+ function normalizeAdminRenewalsListQuery(query) {
11
+ const normalized = {
12
+ limit: query.limit,
13
+ offset: query.offset,
14
+ q: query.q,
15
+ status: query.status,
16
+ approval_status: query.approval_status,
17
+ scheduled_from: query.scheduled_from,
18
+ scheduled_to: query.scheduled_to,
19
+ last_attempt_status: query.last_attempt_status,
20
+ subscription_id: query.subscription_id,
21
+ generated_order_id: query.generated_order_id,
22
+ };
23
+ if (query.order) {
24
+ if (query.order.startsWith("-")) {
25
+ normalized.order = query.order.slice(1);
26
+ normalized.direction = "desc";
27
+ }
28
+ else {
29
+ normalized.order = query.order;
30
+ normalized.direction = query.direction;
31
+ }
32
+ }
33
+ else {
34
+ normalized.direction = query.direction;
35
+ }
36
+ return normalized;
37
+ }
38
+ async function getAdminRenewalDetailResponse(container, id) {
39
+ return await (0, admin_query_1.getAdminRenewalDetail)(container, id);
40
+ }
41
+ async function getAdminRenewalsListResponse(container, query) {
42
+ return await (0, admin_query_1.listAdminRenewals)(container, normalizeAdminRenewalsListQuery(query));
43
+ }
44
+ function mapRenewalAdminRouteError(error) {
45
+ const message = (0, observability_1.getRenewalErrorMessage)(error);
46
+ const normalized = message.toLowerCase();
47
+ if (normalized.includes("was not found")) {
48
+ return {
49
+ status: 404,
50
+ type: utils_1.MedusaError.Types.NOT_FOUND,
51
+ message,
52
+ };
53
+ }
54
+ return {
55
+ status: 409,
56
+ type: utils_1.MedusaError.Types.CONFLICT,
57
+ message,
58
+ };
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3JlbmV3YWxzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsMEVBNkJDO0FBRUQsc0VBS0M7QUFFRCxvRUFRQztBQUVELDhEQWlCQztBQTNFRCxxREFBdUQ7QUFHdkQsNEVBSW1EO0FBQ25ELGdGQUFxRjtBQUVyRixTQUFnQiwrQkFBK0IsQ0FDN0MsS0FBaUM7SUFFakMsTUFBTSxVQUFVLEdBQTJCO1FBQ3pDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ1YsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ3BCLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtRQUN0QyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7UUFDcEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1FBQ2hDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7UUFDOUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1FBQ3RDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7S0FDN0MsQ0FBQTtJQUVELElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3ZDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFBO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1lBQzlCLFVBQVUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQTtRQUN4QyxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixVQUFVLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUE7SUFDeEMsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUM7QUFFTSxLQUFLLFVBQVUsNkJBQTZCLENBQ2pELFNBQTBCLEVBQzFCLEVBQVU7SUFFVixPQUFPLE1BQU0sSUFBQSxtQ0FBcUIsRUFBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDbkQsQ0FBQztBQUVNLEtBQUssVUFBVSw0QkFBNEIsQ0FDaEQsU0FBMEIsRUFDMUIsS0FBaUM7SUFFakMsT0FBTyxNQUFNLElBQUEsK0JBQWlCLEVBQzVCLFNBQVMsRUFDVCwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FDdkMsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFnQix5QkFBeUIsQ0FBQyxLQUFjO0lBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUEsc0NBQXNCLEVBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBRXhDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE9BQU87WUFDTCxNQUFNLEVBQUUsR0FBRztZQUNYLElBQUksRUFBRSxtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTO1lBQ2pDLE9BQU87U0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEVBQUUsR0FBRztRQUNYLElBQUksRUFBRSxtQkFBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1FBQ2hDLE9BQU87S0FDUixDQUFBO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PostAdminRejectRenewalChangesSchema = exports.PostAdminApproveRenewalChangesSchema = exports.PostAdminForceRenewalSchema = exports.GetAdminRenewalSchema = exports.GetAdminRenewalsSchema = void 0;
4
+ const validators_1 = require("@medusajs/medusa/api/utils/validators");
5
+ const zod_1 = require("zod");
6
+ const optionalIsoDateTime = zod_1.z.string().datetime().optional();
7
+ const renewalCycleStatusSchema = zod_1.z.enum([
8
+ "scheduled",
9
+ "processing",
10
+ "succeeded",
11
+ "failed",
12
+ ]);
13
+ const renewalApprovalStatusSchema = zod_1.z.enum([
14
+ "pending",
15
+ "approved",
16
+ "rejected",
17
+ ]);
18
+ const renewalAttemptStatusSchema = zod_1.z.enum([
19
+ "processing",
20
+ "succeeded",
21
+ "failed",
22
+ ]);
23
+ exports.GetAdminRenewalsSchema = (0, validators_1.createFindParams)({
24
+ offset: 0,
25
+ limit: 20,
26
+ }).extend({
27
+ q: zod_1.z.string().optional(),
28
+ direction: zod_1.z.enum(["asc", "desc"]).optional(),
29
+ status: zod_1.z.preprocess((value) => {
30
+ if (typeof value === "string") {
31
+ return [value];
32
+ }
33
+ return value;
34
+ }, zod_1.z.array(renewalCycleStatusSchema).optional()),
35
+ approval_status: zod_1.z.preprocess((value) => {
36
+ if (typeof value === "string") {
37
+ return [value];
38
+ }
39
+ return value;
40
+ }, zod_1.z.array(renewalApprovalStatusSchema).optional()),
41
+ scheduled_from: optionalIsoDateTime,
42
+ scheduled_to: optionalIsoDateTime,
43
+ last_attempt_status: zod_1.z.preprocess((value) => {
44
+ if (typeof value === "string") {
45
+ return [value];
46
+ }
47
+ return value;
48
+ }, zod_1.z.array(renewalAttemptStatusSchema).optional()),
49
+ subscription_id: zod_1.z.string().optional(),
50
+ generated_order_id: zod_1.z.string().optional(),
51
+ });
52
+ exports.GetAdminRenewalSchema = (0, validators_1.createFindParams)().extend({});
53
+ exports.PostAdminForceRenewalSchema = zod_1.z.object({
54
+ reason: zod_1.z.string().trim().min(1).max(500).optional(),
55
+ });
56
+ exports.PostAdminApproveRenewalChangesSchema = zod_1.z.object({
57
+ reason: zod_1.z.string().trim().min(1).max(500).optional(),
58
+ });
59
+ exports.PostAdminRejectRenewalChangesSchema = zod_1.z.object({
60
+ reason: zod_1.z.string().trim().min(1).max(500),
61
+ });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vcmVuZXdhbHMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzRUFBd0U7QUFDeEUsNkJBQXVCO0FBRXZCLE1BQU0sbUJBQW1CLEdBQUcsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBRTVELE1BQU0sd0JBQXdCLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQztJQUN0QyxXQUFXO0lBQ1gsWUFBWTtJQUNaLFdBQVc7SUFDWCxRQUFRO0NBQ1QsQ0FBQyxDQUFBO0FBRUYsTUFBTSwyQkFBMkIsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pDLFNBQVM7SUFDVCxVQUFVO0lBQ1YsVUFBVTtDQUNYLENBQUMsQ0FBQTtBQUVGLE1BQU0sMEJBQTBCLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQztJQUN4QyxZQUFZO0lBQ1osV0FBVztJQUNYLFFBQVE7Q0FDVCxDQUFDLENBQUE7QUFFVyxRQUFBLHNCQUFzQixHQUFHLElBQUEsNkJBQWdCLEVBQUM7SUFDckQsTUFBTSxFQUFFLENBQUM7SUFDVCxLQUFLLEVBQUUsRUFBRTtDQUNWLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDUixDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QixTQUFTLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUM3QyxNQUFNLEVBQUUsT0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzdCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUMsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEQsZUFBZSxFQUFFLE9BQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN0QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNoQixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDLEVBQUUsT0FBQyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25ELGNBQWMsRUFBRSxtQkFBbUI7SUFDbkMsWUFBWSxFQUFFLG1CQUFtQjtJQUNqQyxtQkFBbUIsRUFBRSxPQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDMUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQyxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsRCxlQUFlLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxrQkFBa0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzFDLENBQUMsQ0FBQTtBQU1XLFFBQUEscUJBQXFCLEdBQUcsSUFBQSw2QkFBZ0IsR0FBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQU1yRCxRQUFBLDJCQUEyQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDbEQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUNyRCxDQUFDLENBQUE7QUFNVyxRQUFBLG9DQUFvQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0QsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUNyRCxDQUFDLENBQUE7QUFNVyxRQUFBLG1DQUFtQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztDQUMxQyxDQUFDLENBQUEifQ==
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const utils_1 = require("../utils");
5
+ const GET = async (req, res) => {
6
+ let response;
7
+ try {
8
+ response = await (0, utils_1.getAdminAnalyticsExportResponse)(req.scope, req.validatedQuery);
9
+ }
10
+ catch (error) {
11
+ const mapped = (0, utils_1.mapAnalyticsAdminRouteError)(error);
12
+ return res.status(mapped.status).json({
13
+ type: mapped.type,
14
+ message: mapped.message,
15
+ });
16
+ }
17
+ res.status(200).json(response);
18
+ };
19
+ exports.GET = GET;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N1YnNjcmlwdGlvbi1hbmFseXRpY3MvZXhwb3J0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLG9DQUdpQjtBQUVWLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FHQyxFQUNELEdBQW1CLEVBQ25CLEVBQUU7SUFDRixJQUFJLFFBQVEsQ0FBQTtJQUVaLElBQUksQ0FBQztRQUNILFFBQVEsR0FBRyxNQUFNLElBQUEsdUNBQStCLEVBQzlDLEdBQUcsQ0FBQyxLQUFLLEVBQ1QsR0FBRyxDQUFDLGNBQWMsQ0FDbkIsQ0FBQTtJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQ0FBMkIsRUFBQyxLQUFLLENBQUMsQ0FBQTtRQUVqRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNwQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1NBQ3hCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNoQyxDQUFDLENBQUE7QUF4QlksUUFBQSxHQUFHLE9Bd0JmIn0=
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const utils_1 = require("../utils");
5
+ const GET = async (req, res) => {
6
+ let response;
7
+ try {
8
+ response = await (0, utils_1.getAdminAnalyticsKpisResponse)(req.scope, req.validatedQuery);
9
+ }
10
+ catch (error) {
11
+ const mapped = (0, utils_1.mapAnalyticsAdminRouteError)(error);
12
+ return res.status(mapped.status).json({
13
+ type: mapped.type,
14
+ message: mapped.message,
15
+ });
16
+ }
17
+ res.status(200).json(response);
18
+ };
19
+ exports.GET = GET;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N1YnNjcmlwdGlvbi1hbmFseXRpY3Mva3Bpcy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxvQ0FHaUI7QUFFVixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBR0MsRUFDRCxHQUFtQixFQUNuQixFQUFFO0lBQ0YsSUFBSSxRQUFRLENBQUE7SUFFWixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsTUFBTSxJQUFBLHFDQUE2QixFQUM1QyxHQUFHLENBQUMsS0FBSyxFQUNULEdBQUcsQ0FBQyxjQUFjLENBQ25CLENBQUE7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUEsbUNBQTJCLEVBQUMsS0FBSyxDQUFDLENBQUE7UUFFakQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztTQUN4QixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDaEMsQ0FBQyxDQUFBO0FBeEJZLFFBQUEsR0FBRyxPQXdCZiJ9
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.adminSubscriptionAnalyticsMiddlewares = void 0;
4
+ const http_1 = require("@medusajs/framework/http");
5
+ const validators_1 = require("./validators");
6
+ exports.adminSubscriptionAnalyticsMiddlewares = [
7
+ {
8
+ matcher: "/admin/subscription-analytics/kpis",
9
+ method: "GET",
10
+ middlewares: [
11
+ (0, http_1.validateAndTransformQuery)(validators_1.GetAdminSubscriptionAnalyticsKpisSchema, {
12
+ defaults: [],
13
+ isList: false,
14
+ }),
15
+ ],
16
+ },
17
+ {
18
+ matcher: "/admin/subscription-analytics/trends",
19
+ method: "GET",
20
+ middlewares: [
21
+ (0, http_1.validateAndTransformQuery)(validators_1.GetAdminSubscriptionAnalyticsTrendsSchema, {
22
+ defaults: [],
23
+ isList: false,
24
+ }),
25
+ ],
26
+ },
27
+ {
28
+ matcher: "/admin/subscription-analytics/export",
29
+ method: "GET",
30
+ middlewares: [
31
+ (0, http_1.validateAndTransformQuery)(validators_1.GetAdminSubscriptionAnalyticsExportSchema, {
32
+ defaults: [],
33
+ isList: false,
34
+ }),
35
+ ],
36
+ },
37
+ {
38
+ matcher: "/admin/subscription-analytics/rebuild",
39
+ method: "POST",
40
+ middlewares: [
41
+ (0, http_1.validateAndTransformBody)(validators_1.PostAdminSubscriptionAnalyticsRebuildSchema),
42
+ ],
43
+ },
44
+ ];
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N1YnNjcmlwdGlvbi1hbmFseXRpY3MvbWlkZGxld2FyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBSWlDO0FBQ2pDLDZDQUtxQjtBQUVSLFFBQUEscUNBQXFDLEdBQXNCO0lBQ3RFO1FBQ0UsT0FBTyxFQUFFLG9DQUFvQztRQUM3QyxNQUFNLEVBQUUsS0FBSztRQUNiLFdBQVcsRUFBRTtZQUNYLElBQUEsZ0NBQXlCLEVBQUMsb0RBQXVDLEVBQUU7Z0JBQ2pFLFFBQVEsRUFBRSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxLQUFLO2FBQ2QsQ0FBQztTQUNIO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSxzQ0FBc0M7UUFDL0MsTUFBTSxFQUFFLEtBQUs7UUFDYixXQUFXLEVBQUU7WUFDWCxJQUFBLGdDQUF5QixFQUFDLHNEQUF5QyxFQUFFO2dCQUNuRSxRQUFRLEVBQUUsRUFBRTtnQkFDWixNQUFNLEVBQUUsS0FBSzthQUNkLENBQUM7U0FDSDtLQUNGO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsc0NBQXNDO1FBQy9DLE1BQU0sRUFBRSxLQUFLO1FBQ2IsV0FBVyxFQUFFO1lBQ1gsSUFBQSxnQ0FBeUIsRUFBQyxzREFBeUMsRUFBRTtnQkFDbkUsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEtBQUs7YUFDZCxDQUFDO1NBQ0g7S0FDRjtJQUNEO1FBQ0UsT0FBTyxFQUFFLHVDQUF1QztRQUNoRCxNQUFNLEVBQUUsTUFBTTtRQUNkLFdBQVcsRUFBRTtZQUNYLElBQUEsK0JBQXdCLEVBQUMsd0RBQTJDLENBQUM7U0FDdEU7S0FDRjtDQUNGLENBQUEifQ==
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const observability_1 = require("../../../../modules/analytics/utils/observability");
5
+ const workflows_1 = require("../../../../workflows");
6
+ const MAX_REBUILD_WINDOW_DAYS = 365;
7
+ function toUtcDayStart(date) {
8
+ return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
9
+ }
10
+ function getInclusiveDayWindowSize(dateFrom, dateTo) {
11
+ const from = toUtcDayStart(dateFrom).getTime();
12
+ const to = toUtcDayStart(dateTo).getTime();
13
+ return Math.floor((to - from) / (24 * 60 * 60 * 1000)) + 1;
14
+ }
15
+ function mapManualRebuildError(error) {
16
+ const message = (0, observability_1.getAnalyticsErrorMessage)(error);
17
+ const lowered = message.toLowerCase();
18
+ if (lowered.includes("must be a valid date") ||
19
+ lowered.includes("must be less than or equal") ||
20
+ lowered.includes("can't exceed")) {
21
+ return {
22
+ status: 400,
23
+ type: "invalid_data",
24
+ message,
25
+ };
26
+ }
27
+ return {
28
+ status: 500,
29
+ type: "unknown_error",
30
+ message,
31
+ };
32
+ }
33
+ const POST = async (req, res) => {
34
+ const parsedFrom = new Date(req.validatedBody.date_from);
35
+ const parsedTo = new Date(req.validatedBody.date_to);
36
+ const requestedDays = getInclusiveDayWindowSize(parsedFrom, parsedTo);
37
+ if (requestedDays > MAX_REBUILD_WINDOW_DAYS) {
38
+ return res.status(400).json({
39
+ type: "invalid_data",
40
+ message: `Analytics rebuild window can't exceed ${MAX_REBUILD_WINDOW_DAYS} days`,
41
+ });
42
+ }
43
+ try {
44
+ const { result } = await (0, workflows_1.rebuildAnalyticsDailySnapshotsWorkflow)(req.scope).run({
45
+ input: {
46
+ date_from: parsedFrom,
47
+ date_to: parsedTo,
48
+ trigger_type: "manual",
49
+ triggered_by: req.auth_context.actor_id,
50
+ reason: req.validatedBody.reason ?? "manual_admin_rebuild",
51
+ correlation_id: (0, observability_1.createAnalyticsCorrelationId)("analytics-manual-rebuild"),
52
+ },
53
+ });
54
+ return res.status(200).json({
55
+ rebuild: {
56
+ ...result,
57
+ requested_days: requestedDays,
58
+ outcome: result.failed_days.length > 0
59
+ ? "partial_failure"
60
+ : result.blocked_days.length > 0
61
+ ? "partial_blocked"
62
+ : "completed",
63
+ },
64
+ });
65
+ }
66
+ catch (error) {
67
+ const mapped = mapManualRebuildError(error);
68
+ return res.status(mapped.status).json({
69
+ type: mapped.type,
70
+ message: mapped.message,
71
+ });
72
+ }
73
+ };
74
+ exports.POST = POST;
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N1YnNjcmlwdGlvbi1hbmFseXRpY3MvcmVidWlsZC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxRkFHMEQ7QUFDMUQscURBQThFO0FBRzlFLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFBO0FBRW5DLFNBQVMsYUFBYSxDQUFDLElBQVU7SUFDL0IsT0FBTyxJQUFJLElBQUksQ0FDYixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3ZFLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxRQUFjLEVBQUUsTUFBWTtJQUM3RCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDOUMsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBRTFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzVELENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEtBQWM7SUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBQSx3Q0FBd0IsRUFBQyxLQUFLLENBQUMsQ0FBQTtJQUMvQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUE7SUFFckMsSUFDRSxPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUM7UUFDOUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFDaEMsQ0FBQztRQUNELE9BQU87WUFDTCxNQUFNLEVBQUUsR0FBRztZQUNYLElBQUksRUFBRSxjQUFjO1lBQ3BCLE9BQU87U0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEVBQUUsR0FBRztRQUNYLElBQUksRUFBRSxlQUFlO1FBQ3JCLE9BQU87S0FDUixDQUFBO0FBQ0gsQ0FBQztBQUVNLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBZ0YsRUFDaEYsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNwRCxNQUFNLGFBQWEsR0FBRyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFFckUsSUFBSSxhQUFhLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLElBQUksRUFBRSxjQUFjO1lBQ3BCLE9BQU8sRUFBRSx5Q0FBeUMsdUJBQXVCLE9BQU87U0FDakYsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsa0RBQXNDLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM3RSxLQUFLLEVBQUU7Z0JBQ0wsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixZQUFZLEVBQUUsUUFBUTtnQkFDdEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUTtnQkFDdkMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLHNCQUFzQjtnQkFDMUQsY0FBYyxFQUFFLElBQUEsNENBQTRCLEVBQUMsMEJBQTBCLENBQUM7YUFDekU7U0FDRixDQUFDLENBQUE7UUFFRixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLE1BQU07Z0JBQ1QsY0FBYyxFQUFFLGFBQWE7Z0JBQzdCLE9BQU8sRUFDTCxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUMzQixDQUFDLENBQUMsaUJBQWlCO29CQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQzt3QkFDOUIsQ0FBQyxDQUFDLGlCQUFpQjt3QkFDbkIsQ0FBQyxDQUFDLFdBQVc7YUFDcEI7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTNDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3BDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQTtBQS9DWSxRQUFBLElBQUksUUErQ2hCIn0=
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const utils_1 = require("../utils");
5
+ const GET = async (req, res) => {
6
+ let response;
7
+ try {
8
+ response = await (0, utils_1.getAdminAnalyticsTrendsResponse)(req.scope, req.validatedQuery);
9
+ }
10
+ catch (error) {
11
+ const mapped = (0, utils_1.mapAnalyticsAdminRouteError)(error);
12
+ return res.status(mapped.status).json({
13
+ type: mapped.type,
14
+ message: mapped.message,
15
+ });
16
+ }
17
+ res.status(200).json(response);
18
+ };
19
+ exports.GET = GET;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N1YnNjcmlwdGlvbi1hbmFseXRpY3MvdHJlbmRzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLG9DQUdpQjtBQUVWLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FHQyxFQUNELEdBQW1CLEVBQ25CLEVBQUU7SUFDRixJQUFJLFFBQVEsQ0FBQTtJQUVaLElBQUksQ0FBQztRQUNILFFBQVEsR0FBRyxNQUFNLElBQUEsdUNBQStCLEVBQzlDLEdBQUcsQ0FBQyxLQUFLLEVBQ1QsR0FBRyxDQUFDLGNBQWMsQ0FDbkIsQ0FBQTtJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQ0FBMkIsRUFBQyxLQUFLLENBQUMsQ0FBQTtRQUVqRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNwQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1NBQ3hCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNoQyxDQUFDLENBQUE7QUF4QlksUUFBQSxHQUFHLE9Bd0JmIn0=
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeAdminAnalyticsQuery = normalizeAdminAnalyticsQuery;
4
+ exports.normalizeAdminAnalyticsExportQuery = normalizeAdminAnalyticsExportQuery;
5
+ exports.getAdminAnalyticsKpisResponse = getAdminAnalyticsKpisResponse;
6
+ exports.getAdminAnalyticsTrendsResponse = getAdminAnalyticsTrendsResponse;
7
+ exports.getAdminAnalyticsExportResponse = getAdminAnalyticsExportResponse;
8
+ exports.mapAnalyticsAdminRouteError = mapAnalyticsAdminRouteError;
9
+ const utils_1 = require("@medusajs/framework/utils");
10
+ const admin_query_1 = require("../../../modules/analytics/utils/admin-query");
11
+ const observability_1 = require("../../../modules/analytics/utils/observability");
12
+ function normalizeArrayFilter(value) {
13
+ if (!value) {
14
+ return [];
15
+ }
16
+ return Array.isArray(value) ? value : [value];
17
+ }
18
+ function normalizeAdminAnalyticsQuery(query) {
19
+ return {
20
+ date_from: query.date_from ?? null,
21
+ date_to: query.date_to ?? null,
22
+ status: normalizeArrayFilter(query.status),
23
+ product_id: normalizeArrayFilter(query.product_id),
24
+ frequency: normalizeArrayFilter(query.frequency),
25
+ group_by: query.group_by ?? undefined,
26
+ timezone: query.timezone ?? undefined,
27
+ };
28
+ }
29
+ function normalizeAdminAnalyticsExportQuery(query) {
30
+ return {
31
+ ...normalizeAdminAnalyticsQuery(query),
32
+ format: query.format ?? undefined,
33
+ };
34
+ }
35
+ async function getAdminAnalyticsKpisResponse(container, query) {
36
+ return await (0, admin_query_1.getAdminAnalyticsKpis)(container, normalizeAdminAnalyticsQuery(query));
37
+ }
38
+ async function getAdminAnalyticsTrendsResponse(container, query) {
39
+ return await (0, admin_query_1.getAdminAnalyticsTrends)(container, normalizeAdminAnalyticsQuery(query));
40
+ }
41
+ async function getAdminAnalyticsExportResponse(container, query) {
42
+ return await (0, admin_query_1.getAdminAnalyticsExport)(container, normalizeAdminAnalyticsExportQuery(query));
43
+ }
44
+ function mapAnalyticsAdminRouteError(error) {
45
+ if (error instanceof utils_1.MedusaError) {
46
+ const typeToStatus = {
47
+ [utils_1.MedusaError.Types.NOT_FOUND]: 404,
48
+ [utils_1.MedusaError.Types.INVALID_DATA]: 400,
49
+ [utils_1.MedusaError.Types.CONFLICT]: 409,
50
+ };
51
+ return {
52
+ status: typeToStatus[error.type] ?? 500,
53
+ type: error.type,
54
+ message: error.message,
55
+ };
56
+ }
57
+ const message = error instanceof Error ? error.message : (0, observability_1.getAnalyticsErrorMessage)(error);
58
+ const normalized = message.toLowerCase();
59
+ if (normalized.includes("not found")) {
60
+ return {
61
+ status: 404,
62
+ type: utils_1.MedusaError.Types.NOT_FOUND,
63
+ message,
64
+ };
65
+ }
66
+ if (normalized.includes("invalid") ||
67
+ normalized.includes("unsupported") ||
68
+ normalized.includes("must be")) {
69
+ return {
70
+ status: 400,
71
+ type: utils_1.MedusaError.Types.INVALID_DATA,
72
+ message,
73
+ };
74
+ }
75
+ return {
76
+ status: 500,
77
+ type: utils_1.MedusaError.Types.UNEXPECTED_STATE,
78
+ message,
79
+ };
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N1YnNjcmlwdGlvbi1hbmFseXRpY3MvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQ0Esb0VBWUM7QUFFRCxnRkFPQztBQUVELHNFQVFDO0FBRUQsMEVBUUM7QUFFRCwwRUFRQztBQUVELGtFQTRDQztBQWxJRCxxREFBdUQ7QUFHdkQsOEVBS3FEO0FBQ3JELGtGQUF5RjtBQWdCekYsU0FBUyxvQkFBb0IsQ0FBQyxLQUFnQztJQUM1RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQsU0FBZ0IsNEJBQTRCLENBQzFDLEtBQTZCO0lBRTdCLE9BQU87UUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJO1FBQ2xDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUk7UUFDOUIsTUFBTSxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQXNDO1FBQy9FLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ2xELFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2hELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLFNBQVM7UUFDckMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksU0FBUztLQUN0QyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQWdCLGtDQUFrQyxDQUNoRCxLQUFtQztJQUVuQyxPQUFPO1FBQ0wsR0FBRyw0QkFBNEIsQ0FBQyxLQUFLLENBQUM7UUFDdEMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksU0FBUztLQUNsQyxDQUFBO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsU0FBMEIsRUFDMUIsS0FBNkI7SUFFN0IsT0FBTyxNQUFNLElBQUEsbUNBQXFCLEVBQ2hDLFNBQVMsRUFDVCw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FDcEMsQ0FBQTtBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUsK0JBQStCLENBQ25ELFNBQTBCLEVBQzFCLEtBQTZCO0lBRTdCLE9BQU8sTUFBTSxJQUFBLHFDQUF1QixFQUNsQyxTQUFTLEVBQ1QsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQ3BDLENBQUE7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLCtCQUErQixDQUNuRCxTQUEwQixFQUMxQixLQUFtQztJQUVuQyxPQUFPLE1BQU0sSUFBQSxxQ0FBdUIsRUFDbEMsU0FBUyxFQUNULGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUMxQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQWdCLDJCQUEyQixDQUFDLEtBQWM7SUFDeEQsSUFBSSxLQUFLLFlBQVksbUJBQVcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sWUFBWSxHQUEyQjtZQUMzQyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUc7WUFDbEMsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHO1lBQ3JDLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRztTQUNsQyxDQUFBO1FBRUQsT0FBTztZQUNMLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUc7WUFDdkMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUNYLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUEsd0NBQXdCLEVBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBRXhDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE9BQU87WUFDTCxNQUFNLEVBQUUsR0FBRztZQUNYLElBQUksRUFBRSxtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTO1lBQ2pDLE9BQU87U0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQ0UsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDOUIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDbEMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFDOUIsQ0FBQztRQUNELE9BQU87WUFDTCxNQUFNLEVBQUUsR0FBRztZQUNYLElBQUksRUFBRSxtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQ3BDLE9BQU87U0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEVBQUUsR0FBRztRQUNYLElBQUksRUFBRSxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7UUFDeEMsT0FBTztLQUNSLENBQUE7QUFDSCxDQUFDIn0=
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PostAdminSubscriptionAnalyticsRebuildSchema = exports.GetAdminSubscriptionAnalyticsExportSchema = exports.GetAdminSubscriptionAnalyticsTrendsSchema = exports.GetAdminSubscriptionAnalyticsKpisSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const analytics_1 = require("../../../admin/types/analytics");
6
+ const optionalIsoDateTime = zod_1.z.string().datetime().optional();
7
+ const MAX_ANALYTICS_WINDOW_DAYS = 731;
8
+ const stringArrayFilter = zod_1.z.preprocess((value) => {
9
+ if (typeof value === "string") {
10
+ return [value];
11
+ }
12
+ return value;
13
+ }, zod_1.z.array(zod_1.z.string()).optional());
14
+ const analyticsSubscriptionStatusSchema = zod_1.z.enum([
15
+ "active",
16
+ "paused",
17
+ "cancelled",
18
+ "past_due",
19
+ ]);
20
+ const statusArrayFilter = zod_1.z.preprocess((value) => {
21
+ if (typeof value === "string") {
22
+ return [value];
23
+ }
24
+ return value;
25
+ }, zod_1.z.array(analyticsSubscriptionStatusSchema).optional());
26
+ const frequencyArrayFilter = zod_1.z.preprocess((value) => {
27
+ if (typeof value === "string") {
28
+ return [value];
29
+ }
30
+ return value;
31
+ }, zod_1.z.array(zod_1.z.string().regex(/^(week|month|year):[1-9]\d*$/)).optional());
32
+ function validateDateWindow(value, ctx) {
33
+ if (!value.date_from || !value.date_to) {
34
+ return;
35
+ }
36
+ const dateFrom = new Date(value.date_from);
37
+ const dateTo = new Date(value.date_to);
38
+ if (dateFrom.getTime() > dateTo.getTime()) {
39
+ ctx.addIssue({
40
+ code: zod_1.z.ZodIssueCode.custom,
41
+ message: "'date_from' must be less than or equal to 'date_to'",
42
+ path: ["date_from"],
43
+ });
44
+ return;
45
+ }
46
+ const dayDiff = Math.floor((dateTo.getTime() - dateFrom.getTime()) / (24 * 60 * 60 * 1000)) + 1;
47
+ if (dayDiff > MAX_ANALYTICS_WINDOW_DAYS) {
48
+ ctx.addIssue({
49
+ code: zod_1.z.ZodIssueCode.custom,
50
+ message: `Analytics query window can't exceed ${MAX_ANALYTICS_WINDOW_DAYS} days`,
51
+ path: ["date_to"],
52
+ });
53
+ }
54
+ }
55
+ const analyticsBaseQuerySchemaObject = zod_1.z.object({
56
+ date_from: optionalIsoDateTime,
57
+ date_to: optionalIsoDateTime,
58
+ status: statusArrayFilter,
59
+ product_id: stringArrayFilter,
60
+ frequency: frequencyArrayFilter,
61
+ group_by: zod_1.z.nativeEnum(analytics_1.AnalyticsGroupBy).default(analytics_1.AnalyticsGroupBy.DAY),
62
+ timezone: zod_1.z.literal("UTC").default("UTC"),
63
+ });
64
+ exports.GetAdminSubscriptionAnalyticsKpisSchema = analyticsBaseQuerySchemaObject.superRefine(validateDateWindow);
65
+ exports.GetAdminSubscriptionAnalyticsTrendsSchema = analyticsBaseQuerySchemaObject.superRefine(validateDateWindow);
66
+ exports.GetAdminSubscriptionAnalyticsExportSchema = analyticsBaseQuerySchemaObject
67
+ .extend({
68
+ format: zod_1.z.enum(["csv", "json"]).optional(),
69
+ })
70
+ .superRefine(validateDateWindow);
71
+ exports.PostAdminSubscriptionAnalyticsRebuildSchema = zod_1.z.object({
72
+ date_from: zod_1.z.string().datetime(),
73
+ date_to: zod_1.z.string().datetime(),
74
+ reason: zod_1.z.string().trim().min(1).max(255).optional(),
75
+ });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vc3Vic2NyaXB0aW9uLWFuYWx5dGljcy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF1QjtBQUN2Qiw4REFBaUU7QUFFakUsTUFBTSxtQkFBbUIsR0FBRyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUE7QUFDNUQsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUE7QUFFckMsTUFBTSxpQkFBaUIsR0FBRyxPQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDL0MsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEIsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtBQUVsQyxNQUFNLGlDQUFpQyxHQUFHLE9BQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0MsUUFBUTtJQUNSLFFBQVE7SUFDUixXQUFXO0lBQ1gsVUFBVTtDQUNYLENBQUMsQ0FBQTtBQUVGLE1BQU0saUJBQWlCLEdBQUcsT0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQy9DLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtBQUV6RCxNQUFNLG9CQUFv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
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const utils_1 = require("../utils");
5
+ const GET = async (req, res) => {
6
+ let response;
7
+ try {
8
+ response = await (0, utils_1.getAdminSubscriptionLogDetailResponse)(req.scope, req.params.id, req.validatedQuery);
9
+ }
10
+ catch (error) {
11
+ const mapped = (0, utils_1.mapActivityLogAdminRouteError)(error);
12
+ return res.status(mapped.status).json({
13
+ type: mapped.type,
14
+ message: mapped.message,
15
+ });
16
+ }
17
+ res.status(200).json(response);
18
+ };
19
+ exports.GET = GET;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N1YnNjcmlwdGlvbi1sb2dzL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0Esb0NBR2lCO0FBRVYsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUEyRSxFQUMzRSxHQUFtQixFQUNuQixFQUFFO0lBQ0YsSUFBSSxRQUFRLENBQUE7SUFFWixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsTUFBTSxJQUFBLDZDQUFxQyxFQUNwRCxHQUFHLENBQUMsS0FBSyxFQUNULEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUNiLEdBQUcsQ0FBQyxjQUFjLENBQ25CLENBQUE7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUEscUNBQTZCLEVBQUMsS0FBSyxDQUFDLENBQUE7UUFFbkQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztTQUN4QixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDaEMsQ0FBQyxDQUFBO0FBdEJZLFFBQUEsR0FBRyxPQXNCZiJ9
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.adminSubscriptionLogsMiddlewares = void 0;
4
+ const http_1 = require("@medusajs/framework/http");
5
+ const validators_1 = require("./validators");
6
+ exports.adminSubscriptionLogsMiddlewares = [
7
+ {
8
+ matcher: "/admin/subscription-logs",
9
+ method: "GET",
10
+ middlewares: [
11
+ (0, http_1.validateAndTransformQuery)(validators_1.GetAdminSubscriptionLogsSchema, {
12
+ defaults: [
13
+ "id",
14
+ "subscription_id",
15
+ "customer_id",
16
+ "event_type",
17
+ "actor_type",
18
+ "actor_id",
19
+ "subscription_reference",
20
+ "customer_name",
21
+ "product_title",
22
+ "variant_title",
23
+ "reason",
24
+ "changed_fields",
25
+ "created_at",
26
+ ],
27
+ isList: true,
28
+ }),
29
+ ],
30
+ },
31
+ {
32
+ matcher: "/admin/subscription-logs/:id",
33
+ method: "GET",
34
+ middlewares: [
35
+ (0, http_1.validateAndTransformQuery)(validators_1.GetAdminSubscriptionLogSchema, {
36
+ defaults: ["*"],
37
+ isList: false,
38
+ }),
39
+ ],
40
+ },
41
+ {
42
+ matcher: "/admin/subscriptions/:id/logs",
43
+ method: "GET",
44
+ middlewares: [
45
+ (0, http_1.validateAndTransformQuery)(validators_1.GetAdminSubscriptionLogsSchema, {
46
+ defaults: [
47
+ "id",
48
+ "subscription_id",
49
+ "customer_id",
50
+ "event_type",
51
+ "actor_type",
52
+ "actor_id",
53
+ "subscription_reference",
54
+ "customer_name",
55
+ "product_title",
56
+ "variant_title",
57
+ "reason",
58
+ "changed_fields",
59
+ "created_at",
60
+ ],
61
+ isList: true,
62
+ }),
63
+ ],
64
+ },
65
+ ];
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N1YnNjcmlwdGlvbi1sb2dzL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUdpQztBQUNqQyw2Q0FHcUI7QUFFUixRQUFBLGdDQUFnQyxHQUFzQjtJQUNqRTtRQUNFLE9BQU8sRUFBRSwwQkFBMEI7UUFDbkMsTUFBTSxFQUFFLEtBQUs7UUFDYixXQUFXLEVBQUU7WUFDWCxJQUFBLGdDQUF5QixFQUFDLDJDQUE4QixFQUFFO2dCQUN4RCxRQUFRLEVBQUU7b0JBQ1IsSUFBSTtvQkFDSixpQkFBaUI7b0JBQ2pCLGFBQWE7b0JBQ2IsWUFBWTtvQkFDWixZQUFZO29CQUNaLFVBQVU7b0JBQ1Ysd0JBQXdCO29CQUN4QixlQUFlO29CQUNmLGVBQWU7b0JBQ2YsZUFBZTtvQkFDZixRQUFRO29CQUNSLGdCQUFnQjtvQkFDaEIsWUFBWTtpQkFDYjtnQkFDRCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7U0FDSDtLQUNGO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsOEJBQThCO1FBQ3ZDLE1BQU0sRUFBRSxLQUFLO1FBQ2IsV0FBVyxFQUFFO1lBQ1gsSUFBQSxnQ0FBeUIsRUFBQywwQ0FBNkIsRUFBRTtnQkFDdkQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDO2dCQUNmLE1BQU0sRUFBRSxLQUFLO2FBQ2QsQ0FBQztTQUNIO0tBQ0Y7SUFDRDtRQUNFLE9BQU8sRUFBRSwrQkFBK0I7UUFDeEMsTUFBTSxFQUFFLEtBQUs7UUFDYixXQUFXLEVBQUU7WUFDWCxJQUFBLGdDQUF5QixFQUFDLDJDQUE4QixFQUFFO2dCQUN4RCxRQUFRLEVBQUU7b0JBQ1IsSUFBSTtvQkFDSixpQkFBaUI7b0JBQ2pCLGFBQWE7b0JBQ2IsWUFBWTtvQkFDWixZQUFZO29CQUNaLFVBQVU7b0JBQ1Ysd0JBQXdCO29CQUN4QixlQUFlO29CQUNmLGVBQWU7b0JBQ2YsZUFBZTtvQkFDZixRQUFRO29CQUNSLGdCQUFnQjtvQkFDaEIsWUFBWTtpQkFDYjtnQkFDRCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7U0FDSDtLQUNGO0NBQ0YsQ0FBQSJ9
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const utils_1 = require("./utils");
5
+ const GET = async (req, res) => {
6
+ let response;
7
+ try {
8
+ response = await (0, utils_1.getAdminSubscriptionLogsListResponse)(req.scope, req.validatedQuery);
9
+ }
10
+ catch (error) {
11
+ const mapped = (0, utils_1.mapActivityLogAdminRouteError)(error);
12
+ return res.status(mapped.status).json({
13
+ type: mapped.type,
14
+ message: mapped.message,
15
+ });
16
+ }
17
+ res.status(200).json(response);
18
+ };
19
+ exports.GET = GET;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N1YnNjcmlwdGlvbi1sb2dzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLG1DQUdnQjtBQUVULE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBNEUsRUFDNUUsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLElBQUksUUFBUSxDQUFBO0lBRVosSUFBSSxDQUFDO1FBQ0gsUUFBUSxHQUFHLE1BQU0sSUFBQSw0Q0FBb0MsRUFDbkQsR0FBRyxDQUFDLEtBQUssRUFDVCxHQUFHLENBQUMsY0FBYyxDQUNuQixDQUFBO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLE1BQU0sR0FBRyxJQUFBLHFDQUE2QixFQUFDLEtBQUssQ0FBQyxDQUFBO1FBRW5ELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3BDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ2hDLENBQUMsQ0FBQTtBQXJCWSxRQUFBLEdBQUcsT0FxQmYifQ==