@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,548 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listAdminDunningCases = listAdminDunningCases;
4
+ exports.getAdminDunningDetail = getAdminDunningDetail;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const dunning_1 = require("../../../admin/types/dunning");
7
+ const types_1 = require("../types");
8
+ const errors_1 = require("./errors");
9
+ const listFields = [
10
+ "id",
11
+ "subscription_id",
12
+ "renewal_cycle_id",
13
+ "renewal_order_id",
14
+ "status",
15
+ "attempt_count",
16
+ "max_attempts",
17
+ "next_retry_at",
18
+ "last_payment_error_code",
19
+ "last_attempt_at",
20
+ "updated_at",
21
+ ];
22
+ const detailFields = [
23
+ "id",
24
+ "subscription_id",
25
+ "renewal_cycle_id",
26
+ "renewal_order_id",
27
+ "status",
28
+ "attempt_count",
29
+ "max_attempts",
30
+ "retry_schedule",
31
+ "next_retry_at",
32
+ "last_payment_error_code",
33
+ "last_payment_error_message",
34
+ "last_attempt_at",
35
+ "recovered_at",
36
+ "closed_at",
37
+ "recovery_reason",
38
+ "metadata",
39
+ "created_at",
40
+ "updated_at",
41
+ ];
42
+ const attemptFields = [
43
+ "id",
44
+ "dunning_case_id",
45
+ "attempt_no",
46
+ "started_at",
47
+ "finished_at",
48
+ "status",
49
+ "error_code",
50
+ "error_message",
51
+ "payment_reference",
52
+ "metadata",
53
+ ];
54
+ const databaseSortableFields = new Set([
55
+ "updated_at",
56
+ "status",
57
+ "next_retry_at",
58
+ "attempt_count",
59
+ "max_attempts",
60
+ "last_attempt_at",
61
+ ]);
62
+ const inMemorySortableFields = new Set([
63
+ "last_attempt_status",
64
+ "subscription_reference",
65
+ "customer_name",
66
+ "product_title",
67
+ "order_display_id",
68
+ ]);
69
+ function mapCaseStatus(status) {
70
+ switch (status) {
71
+ case types_1.DunningCaseStatus.OPEN:
72
+ return dunning_1.DunningCaseAdminStatus.OPEN;
73
+ case types_1.DunningCaseStatus.RETRY_SCHEDULED:
74
+ return dunning_1.DunningCaseAdminStatus.RETRY_SCHEDULED;
75
+ case types_1.DunningCaseStatus.RETRYING:
76
+ return dunning_1.DunningCaseAdminStatus.RETRYING;
77
+ case types_1.DunningCaseStatus.AWAITING_MANUAL_RESOLUTION:
78
+ return dunning_1.DunningCaseAdminStatus.AWAITING_MANUAL_RESOLUTION;
79
+ case types_1.DunningCaseStatus.RECOVERED:
80
+ return dunning_1.DunningCaseAdminStatus.RECOVERED;
81
+ case types_1.DunningCaseStatus.UNRECOVERED:
82
+ return dunning_1.DunningCaseAdminStatus.UNRECOVERED;
83
+ }
84
+ throw errors_1.dunningErrors.invalidData(`Unsupported dunning case status '${status}'`);
85
+ }
86
+ function mapAttemptStatus(status) {
87
+ switch (status) {
88
+ case types_1.DunningAttemptStatus.PROCESSING:
89
+ return dunning_1.DunningAttemptAdminStatus.PROCESSING;
90
+ case types_1.DunningAttemptStatus.SUCCEEDED:
91
+ return dunning_1.DunningAttemptAdminStatus.SUCCEEDED;
92
+ case types_1.DunningAttemptStatus.FAILED:
93
+ return dunning_1.DunningAttemptAdminStatus.FAILED;
94
+ }
95
+ throw errors_1.dunningErrors.invalidData(`Unsupported dunning attempt status '${status}'`);
96
+ }
97
+ function mapListItem(record, subscription, renewal, order, lastAttemptStatus) {
98
+ return {
99
+ id: record.id,
100
+ status: mapCaseStatus(record.status),
101
+ subscription: {
102
+ subscription_id: record.subscription_id,
103
+ reference: subscription?.reference ?? "Unknown subscription",
104
+ status: subscription?.status ?? "past_due",
105
+ customer_name: subscription?.customer_snapshot?.full_name ?? "Unknown customer",
106
+ product_title: subscription?.product_snapshot?.product_title ?? "Unknown product",
107
+ variant_title: subscription?.product_snapshot?.variant_title ?? "Unknown variant",
108
+ sku: subscription?.product_snapshot?.sku ?? null,
109
+ payment_provider_id: subscription?.payment_context?.payment_provider_id ?? null,
110
+ },
111
+ renewal: renewal
112
+ ? {
113
+ renewal_cycle_id: renewal.id,
114
+ status: renewal.status,
115
+ scheduled_for: renewal.scheduled_for,
116
+ generated_order_id: renewal.generated_order_id,
117
+ }
118
+ : null,
119
+ order: order
120
+ ? {
121
+ order_id: order.id,
122
+ display_id: order.display_id,
123
+ status: order.status,
124
+ }
125
+ : null,
126
+ attempt_count: record.attempt_count,
127
+ max_attempts: record.max_attempts,
128
+ next_retry_at: record.next_retry_at,
129
+ last_attempt_at: record.last_attempt_at,
130
+ last_payment_error_code: record.last_payment_error_code,
131
+ updated_at: record.updated_at,
132
+ };
133
+ }
134
+ function assertSortableField(order) {
135
+ if (!order) {
136
+ return;
137
+ }
138
+ if (!databaseSortableFields.has(order) &&
139
+ !inMemorySortableFields.has(order)) {
140
+ throw errors_1.dunningErrors.invalidData(`Unsupported sort field '${order}'`);
141
+ }
142
+ }
143
+ function buildFilters(input) {
144
+ const filters = {};
145
+ if (input.status?.length) {
146
+ filters.status = input.status;
147
+ }
148
+ if (input.subscription_id) {
149
+ filters.subscription_id = input.subscription_id;
150
+ }
151
+ if (input.renewal_cycle_id) {
152
+ filters.renewal_cycle_id = input.renewal_cycle_id;
153
+ }
154
+ if (input.renewal_order_id) {
155
+ filters.renewal_order_id = input.renewal_order_id;
156
+ }
157
+ if (input.next_retry_from || input.next_retry_to) {
158
+ filters.next_retry_at = {
159
+ ...(input.next_retry_from ? { $gte: input.next_retry_from } : {}),
160
+ ...(input.next_retry_to ? { $lte: input.next_retry_to } : {}),
161
+ };
162
+ }
163
+ return filters;
164
+ }
165
+ async function getLastAttemptStatusMap(container, dunningCaseIds) {
166
+ if (!dunningCaseIds.length) {
167
+ return new Map();
168
+ }
169
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
170
+ const { data } = await query.graph({
171
+ entity: "dunning_attempt",
172
+ fields: [...attemptFields],
173
+ filters: {
174
+ dunning_case_id: dunningCaseIds,
175
+ },
176
+ });
177
+ const latest = new Map();
178
+ for (const record of data) {
179
+ const current = latest.get(record.dunning_case_id);
180
+ if (!current || record.attempt_no > current.attempt_no) {
181
+ latest.set(record.dunning_case_id, record);
182
+ }
183
+ }
184
+ return new Map([...latest.entries()].map(([key, value]) => [key, mapAttemptStatus(value.status)]));
185
+ }
186
+ async function getSubscriptionMap(container, subscriptionIds) {
187
+ if (!subscriptionIds.length) {
188
+ return new Map();
189
+ }
190
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
191
+ const { data } = await query.graph({
192
+ entity: "subscription",
193
+ fields: [
194
+ "id",
195
+ "reference",
196
+ "status",
197
+ "customer_snapshot",
198
+ "product_snapshot",
199
+ "payment_context",
200
+ ],
201
+ filters: {
202
+ id: subscriptionIds,
203
+ },
204
+ });
205
+ return new Map(data.map((record) => [record.id, record]));
206
+ }
207
+ async function getRenewalMap(container, renewalCycleIds) {
208
+ if (!renewalCycleIds.length) {
209
+ return new Map();
210
+ }
211
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
212
+ const { data } = await query.graph({
213
+ entity: "renewal_cycle",
214
+ fields: [
215
+ "id",
216
+ "status",
217
+ "scheduled_for",
218
+ "generated_order_id",
219
+ ],
220
+ filters: {
221
+ id: renewalCycleIds,
222
+ },
223
+ });
224
+ return new Map(data.map((record) => [record.id, record]));
225
+ }
226
+ async function getOrderMap(container, orderIds) {
227
+ if (!orderIds.length) {
228
+ return new Map();
229
+ }
230
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
231
+ const { data } = await query.graph({
232
+ entity: "order",
233
+ fields: ["id", "display_id", "status"],
234
+ filters: {
235
+ id: orderIds,
236
+ },
237
+ });
238
+ return new Map(data.map((record) => [record.id, record]));
239
+ }
240
+ async function mapListItems(container, records) {
241
+ const [lastAttemptStatusMap, subscriptionMap, renewalMap, orderMap] = await Promise.all([
242
+ getLastAttemptStatusMap(container, records.map((record) => record.id)),
243
+ getSubscriptionMap(container, [...new Set(records.map((record) => record.subscription_id))]),
244
+ getRenewalMap(container, [...new Set(records.map((record) => record.renewal_cycle_id))]),
245
+ getOrderMap(container, [
246
+ ...new Set(records
247
+ .map((record) => record.renewal_order_id)
248
+ .filter((value) => Boolean(value))),
249
+ ]),
250
+ ]);
251
+ return records.map((record) => mapListItem(record, subscriptionMap.get(record.subscription_id) ?? null, renewalMap.get(record.renewal_cycle_id) ?? null, record.renewal_order_id
252
+ ? orderMap.get(record.renewal_order_id) ?? null
253
+ : null, lastAttemptStatusMap.get(record.id) ?? null));
254
+ }
255
+ function matchesSearch(item, search) {
256
+ const value = search.trim().toLowerCase();
257
+ if (!value.length) {
258
+ return true;
259
+ }
260
+ return [
261
+ item.subscription.reference,
262
+ item.subscription.customer_name,
263
+ item.subscription.product_title,
264
+ item.subscription.variant_title,
265
+ item.subscription.payment_provider_id ?? "",
266
+ item.order?.display_id?.toString() ?? "",
267
+ item.last_payment_error_code ?? "",
268
+ ]
269
+ .join(" ")
270
+ .toLowerCase()
271
+ .includes(value);
272
+ }
273
+ function matchesPaymentProvider(item, paymentProviderId) {
274
+ if (!paymentProviderId?.trim()) {
275
+ return true;
276
+ }
277
+ return (item.subscription.payment_provider_id?.toLowerCase() ===
278
+ paymentProviderId.trim().toLowerCase());
279
+ }
280
+ function matchesLastPaymentErrorCode(item, lastPaymentErrorCode) {
281
+ if (!lastPaymentErrorCode?.trim()) {
282
+ return true;
283
+ }
284
+ return (item.last_payment_error_code?.toLowerCase() ===
285
+ lastPaymentErrorCode.trim().toLowerCase());
286
+ }
287
+ function matchesAttemptCount(item, min, max) {
288
+ if (typeof min === "number" && item.attempt_count < min) {
289
+ return false;
290
+ }
291
+ if (typeof max === "number" && item.attempt_count > max) {
292
+ return false;
293
+ }
294
+ return true;
295
+ }
296
+ function matchesLastAttemptStatus(item, statuses, lastAttemptStatusMap) {
297
+ if (!statuses?.length || !lastAttemptStatusMap) {
298
+ return true;
299
+ }
300
+ const status = lastAttemptStatusMap.get(item.id);
301
+ if (!status) {
302
+ return false;
303
+ }
304
+ return statuses.includes(status);
305
+ }
306
+ function getSortableValue(item, order) {
307
+ switch (order) {
308
+ case "updated_at":
309
+ return item.updated_at ?? "";
310
+ case "status":
311
+ return item.status ?? "";
312
+ case "next_retry_at":
313
+ return item.next_retry_at ?? "";
314
+ case "attempt_count":
315
+ return item.attempt_count ?? 0;
316
+ case "max_attempts":
317
+ return item.max_attempts ?? 0;
318
+ case "last_attempt_at":
319
+ return item.last_attempt_at ?? "";
320
+ case "subscription_reference":
321
+ return item.subscription.reference ?? "";
322
+ case "customer_name":
323
+ return item.subscription.customer_name ?? "";
324
+ case "product_title":
325
+ return item.subscription.product_title ?? "";
326
+ case "order_display_id":
327
+ return item.order?.display_id?.toString() ?? "";
328
+ default:
329
+ return "";
330
+ }
331
+ }
332
+ function sortItems(items, order, direction) {
333
+ const multiplier = direction === "asc" ? 1 : -1;
334
+ return [...items].sort((left, right) => {
335
+ const leftValue = getSortableValue(left, order);
336
+ const rightValue = getSortableValue(right, order);
337
+ if (leftValue < rightValue) {
338
+ return -1 * multiplier;
339
+ }
340
+ if (leftValue > rightValue) {
341
+ return 1 * multiplier;
342
+ }
343
+ return 0;
344
+ });
345
+ }
346
+ async function listAdminDunningCases(container, input) {
347
+ assertSortableField(input.order);
348
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
349
+ const filters = buildFilters(input);
350
+ const limit = input.limit ?? 20;
351
+ const offset = input.offset ?? 0;
352
+ const direction = input.direction ?? "desc";
353
+ const order = input.order;
354
+ const isInMemorySort = typeof order === "string" && inMemorySortableFields.has(order);
355
+ const requiresInMemoryProcessing = Boolean(input.q) ||
356
+ Boolean(input.last_attempt_status?.length) ||
357
+ Boolean(input.payment_provider_id) ||
358
+ Boolean(input.last_payment_error_code) ||
359
+ typeof input.attempt_count_min === "number" ||
360
+ typeof input.attempt_count_max === "number" ||
361
+ isInMemorySort;
362
+ if (!requiresInMemoryProcessing) {
363
+ const { data, metadata: { count = 0, take = limit, skip = offset } = {}, } = await query.graph({
364
+ entity: "dunning_case",
365
+ fields: [...listFields],
366
+ filters,
367
+ pagination: {
368
+ take: limit,
369
+ skip: offset,
370
+ ...(order && databaseSortableFields.has(order)
371
+ ? {
372
+ order: {
373
+ [order]: direction.toUpperCase(),
374
+ },
375
+ }
376
+ : {}),
377
+ },
378
+ });
379
+ return {
380
+ dunning_cases: await mapListItems(container, data),
381
+ count,
382
+ limit: take,
383
+ offset: skip,
384
+ };
385
+ }
386
+ const { data } = await query.graph({
387
+ entity: "dunning_case",
388
+ fields: [...listFields],
389
+ filters,
390
+ pagination: order && databaseSortableFields.has(order)
391
+ ? {
392
+ order: {
393
+ [order]: direction.toUpperCase(),
394
+ },
395
+ }
396
+ : undefined,
397
+ });
398
+ let items = await mapListItems(container, data);
399
+ const lastAttemptStatusMap = await getLastAttemptStatusMap(container, items.map((item) => item.id));
400
+ if (input.q) {
401
+ items = items.filter((item) => matchesSearch(item, input.q));
402
+ }
403
+ if (input.payment_provider_id) {
404
+ items = items.filter((item) => matchesPaymentProvider(item, input.payment_provider_id));
405
+ }
406
+ if (input.last_payment_error_code) {
407
+ items = items.filter((item) => matchesLastPaymentErrorCode(item, input.last_payment_error_code));
408
+ }
409
+ if (typeof input.attempt_count_min === "number" ||
410
+ typeof input.attempt_count_max === "number") {
411
+ items = items.filter((item) => matchesAttemptCount(item, input.attempt_count_min, input.attempt_count_max));
412
+ }
413
+ if (input.last_attempt_status?.length) {
414
+ items = items.filter((item) => matchesLastAttemptStatus(item, input.last_attempt_status, lastAttemptStatusMap));
415
+ }
416
+ if (order && isInMemorySort) {
417
+ items = sortItems(items, order, direction);
418
+ }
419
+ return {
420
+ dunning_cases: items.slice(offset, offset + limit),
421
+ count: items.length,
422
+ limit,
423
+ offset,
424
+ };
425
+ }
426
+ async function getAdminDunningDetail(container, id) {
427
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
428
+ const { data } = await query.graph({
429
+ entity: "dunning_case",
430
+ fields: [...detailFields],
431
+ filters: {
432
+ id: [id],
433
+ },
434
+ });
435
+ const dunningCase = data[0];
436
+ if (!dunningCase) {
437
+ throw errors_1.dunningErrors.notFound("DunningCase", id);
438
+ }
439
+ const [{ data: attemptsData }, { data: subscriptionsData }, { data: renewalsData }] = await Promise.all([
440
+ query.graph({
441
+ entity: "dunning_attempt",
442
+ fields: [...attemptFields],
443
+ filters: {
444
+ dunning_case_id: [dunningCase.id],
445
+ },
446
+ }),
447
+ query.graph({
448
+ entity: "subscription",
449
+ fields: [
450
+ "id",
451
+ "reference",
452
+ "status",
453
+ "customer_snapshot",
454
+ "product_snapshot",
455
+ "payment_context",
456
+ ],
457
+ filters: {
458
+ id: [dunningCase.subscription_id],
459
+ },
460
+ }),
461
+ query.graph({
462
+ entity: "renewal_cycle",
463
+ fields: [
464
+ "id",
465
+ "status",
466
+ "scheduled_for",
467
+ "generated_order_id",
468
+ ],
469
+ filters: {
470
+ id: [dunningCase.renewal_cycle_id],
471
+ },
472
+ }),
473
+ ]);
474
+ const attempts = attemptsData.sort((left, right) => left.attempt_no - right.attempt_no);
475
+ const subscription = subscriptionsData[0];
476
+ const renewal = renewalsData[0] ?? null;
477
+ if (!subscription) {
478
+ throw errors_1.dunningErrors.notFound("Subscription", dunningCase.subscription_id);
479
+ }
480
+ let order = null;
481
+ if (dunningCase.renewal_order_id) {
482
+ const { data: ordersData } = await query.graph({
483
+ entity: "order",
484
+ fields: ["id", "display_id", "status"],
485
+ filters: {
486
+ id: [dunningCase.renewal_order_id],
487
+ },
488
+ });
489
+ order = ordersData[0] ?? null;
490
+ }
491
+ const detail = {
492
+ id: dunningCase.id,
493
+ status: mapCaseStatus(dunningCase.status),
494
+ subscription: {
495
+ subscription_id: subscription.id,
496
+ reference: subscription.reference,
497
+ status: subscription.status,
498
+ customer_name: subscription.customer_snapshot?.full_name ?? "Unknown customer",
499
+ product_title: subscription.product_snapshot?.product_title ?? "Unknown product",
500
+ variant_title: subscription.product_snapshot?.variant_title ?? "Unknown variant",
501
+ sku: subscription.product_snapshot?.sku ?? null,
502
+ payment_provider_id: subscription.payment_context?.payment_provider_id ?? null,
503
+ },
504
+ renewal: renewal
505
+ ? {
506
+ renewal_cycle_id: renewal.id,
507
+ status: renewal.status,
508
+ scheduled_for: renewal.scheduled_for,
509
+ generated_order_id: renewal.generated_order_id,
510
+ }
511
+ : null,
512
+ order: order
513
+ ? {
514
+ order_id: order.id,
515
+ display_id: order.display_id,
516
+ status: order.status,
517
+ }
518
+ : null,
519
+ attempt_count: dunningCase.attempt_count,
520
+ max_attempts: dunningCase.max_attempts,
521
+ retry_schedule: dunningCase.retry_schedule,
522
+ next_retry_at: dunningCase.next_retry_at,
523
+ last_payment_error_code: dunningCase.last_payment_error_code,
524
+ last_payment_error_message: dunningCase.last_payment_error_message,
525
+ last_attempt_at: dunningCase.last_attempt_at,
526
+ recovered_at: dunningCase.recovered_at,
527
+ closed_at: dunningCase.closed_at,
528
+ recovery_reason: dunningCase.recovery_reason,
529
+ attempts: attempts.map((attempt) => ({
530
+ id: attempt.id,
531
+ attempt_no: attempt.attempt_no,
532
+ status: mapAttemptStatus(attempt.status),
533
+ started_at: attempt.started_at,
534
+ finished_at: attempt.finished_at,
535
+ error_code: attempt.error_code,
536
+ error_message: attempt.error_message,
537
+ payment_reference: attempt.payment_reference,
538
+ metadata: attempt.metadata,
539
+ })),
540
+ metadata: dunningCase.metadata,
541
+ created_at: dunningCase.created_at,
542
+ updated_at: dunningCase.updated_at,
543
+ };
544
+ return {
545
+ dunning_case: detail,
546
+ };
547
+ }
548
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kdW5uaW5nL3V0aWxzL2FkbWluLXF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa2pCQSxzREFvSEM7QUFFRCxzREE2SUM7QUFwekJELHFEQUFxRTtBQUNyRSwwREFPcUM7QUFDckMsb0NBSWlCO0FBQ2pCLHFDQUF3QztBQXFGeEMsTUFBTSxVQUFVLEdBQUc7SUFDakIsSUFBSTtJQUNKLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixlQUFlO0lBQ2YsY0FBYztJQUNkLGVBQWU7SUFDZix5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLFlBQVk7Q0FDSixDQUFBO0FBRVYsTUFBTSxZQUFZLEdBQUc7SUFDbkIsSUFBSTtJQUNKLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixlQUFlO0lBQ2YsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1QixpQkFBaUI7SUFDakIsY0FBYztJQUNkLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsVUFBVTtJQUNWLFlBQVk7SUFDWixZQUFZO0NBQ0osQ0FBQTtBQUVWLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLElBQUk7SUFDSixpQkFBaUI7SUFDakIsWUFBWTtJQUNaLFlBQVk7SUFDWixhQUFhO0lBQ2IsUUFBUTtJQUNSLFlBQVk7SUFDWixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLFVBQVU7Q0FDRixDQUFBO0FBRVYsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxZQUFZO0lBQ1osUUFBUTtJQUNSLGVBQWU7SUFDZixlQUFlO0lBQ2YsY0FBYztJQUNkLGlCQUFpQjtDQUNsQixDQUFDLENBQUE7QUFFRixNQUFNLHNCQUFzQixHQUFHLElB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
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dunningErrors = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.dunningErrors = {
6
+ notFound(entity, id) {
7
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `${entity} '${id}' was not found`);
8
+ },
9
+ invalidData(message) {
10
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message);
11
+ },
12
+ conflict(message) {
13
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, message);
14
+ },
15
+ duplicateActiveCaseBlocked(subscriptionId, activeCaseId) {
16
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `Duplicate active dunning case blocked for subscription '${subscriptionId}'. Active case '${activeCaseId}' must be resolved first`);
17
+ },
18
+ retryAlreadyProcessing(dunningCaseId) {
19
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `DunningCase '${dunningCaseId}' retry is already processing`);
20
+ },
21
+ retryNotDue(dunningCaseId) {
22
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `DunningCase '${dunningCaseId}' retry is not due`);
23
+ },
24
+ maxAttemptsExceeded(dunningCaseId) {
25
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `DunningCase '${dunningCaseId}' max attempts exceeded`);
26
+ },
27
+ alreadyRecovered(dunningCaseId) {
28
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `DunningCase '${dunningCaseId}' is already recovered`);
29
+ },
30
+ alreadyUnrecovered(dunningCaseId) {
31
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `DunningCase '${dunningCaseId}' is already unrecovered`);
32
+ },
33
+ retryInFlightTransitionBlocked(dunningCaseId, action) {
34
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `DunningCase '${dunningCaseId}' can't ${action} while retry is in flight`);
35
+ },
36
+ invalidRetryScheduleOverride(dunningCaseId) {
37
+ return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `DunningCase '${dunningCaseId}' retry schedule override didn't produce a valid next_retry_at`);
38
+ },
39
+ };
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZHVubmluZy91dGlscy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBRTFDLFFBQUEsYUFBYSxHQUFHO0lBQzNCLFFBQVEsQ0FBQyxNQUFjLEVBQUUsRUFBVTtRQUNqQyxPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixHQUFHLE1BQU0sS0FBSyxFQUFFLGlCQUFpQixDQUNsQyxDQUFBO0lBQ0gsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLE9BQU8sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBQ0QsUUFBUSxDQUFDLE9BQWU7UUFDdEIsT0FBTyxJQUFJLG1CQUFXLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFDRCwwQkFBMEIsQ0FBQyxjQUFzQixFQUFFLFlBQW9CO1FBQ3JFLE9BQU8sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQzFCLDJEQUEyRCxjQUFjLG1CQUFtQixZQUFZLDBCQUEwQixDQUNuSSxDQUFBO0lBQ0gsQ0FBQztJQUNELHNCQUFzQixDQUFDLGFBQXFCO1FBQzFDLE9BQU8sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQzFCLGdCQUFnQixhQUFhLCtCQUErQixDQUM3RCxDQUFBO0lBQ0gsQ0FBQztJQUNELFdBQVcsQ0FBQyxhQUFxQjtRQUMvQixPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUMxQixnQkFBZ0IsYUFBYSxvQkFBb0IsQ0FDbEQsQ0FBQTtJQUNILENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxhQUFxQjtRQUN2QyxPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUMxQixnQkFBZ0IsYUFBYSx5QkFBeUIsQ0FDdkQsQ0FBQTtJQUNILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxhQUFxQjtRQUNwQyxPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUMxQixnQkFBZ0IsYUFBYSx3QkFBd0IsQ0FDdEQsQ0FBQTtJQUNILENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxhQUFxQjtRQUN0QyxPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUMxQixnQkFBZ0IsYUFBYSwwQkFBMEIsQ0FDeEQsQ0FBQTtJQUNILENBQUM7SUFDRCw4QkFBOEIsQ0FBQyxhQUFxQixFQUFFLE1BQWM7UUFDbEUsT0FBTyxJQUFJLG1CQUFXLENBQ3BCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFDMUIsZ0JBQWdCLGFBQWEsV0FBVyxNQUFNLDJCQUEyQixDQUMxRSxDQUFBO0lBQ0gsQ0FBQztJQUNELDRCQUE0QixDQUFDLGFBQXFCO1FBQ2hELE9BQU8sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQzFCLGdCQUFnQixhQUFhLGdFQUFnRSxDQUM5RixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUEifQ==