@reorderjs/reorder 1.0.8 → 1.1.0

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 (65) hide show
  1. package/.medusa/server/e2e/auth.setup.js +26 -0
  2. package/.medusa/server/e2e/cancellation-retention.spec.js +133 -0
  3. package/.medusa/server/e2e/pages/CancellationCaseDetailPage.js +69 -0
  4. package/.medusa/server/e2e/pages/CancellationsListPage.js +34 -0
  5. package/.medusa/server/e2e/pages/PlanFormPage.js +89 -0
  6. package/.medusa/server/e2e/pages/RenewalDetailPage.js +101 -0
  7. package/.medusa/server/e2e/pages/SubscriptionDetailPage.js +102 -0
  8. package/.medusa/server/e2e/plans-offers.spec.js +96 -0
  9. package/.medusa/server/e2e/renewal-force.spec.js +154 -0
  10. package/.medusa/server/e2e/seed.setup.js +80 -0
  11. package/.medusa/server/e2e/subscription-status.spec.js +109 -0
  12. package/.medusa/server/e2e/subscriptions-list.spec.js +84 -0
  13. package/.medusa/server/playwright.config.js +37 -0
  14. package/.medusa/server/scripts/reset-subscriptions-test-data.js +279 -0
  15. package/.medusa/server/scripts/seed-subscriptions-test-data.js +2425 -0
  16. package/.medusa/server/scripts/wipe-test-data.js +44 -0
  17. package/.medusa/server/src/admin/index.js +11106 -9689
  18. package/.medusa/server/src/admin/index.mjs +11099 -9682
  19. package/.medusa/server/src/admin/types/analytics.js +2 -1
  20. package/.medusa/server/src/api/admin/cancellations/validators.js +2 -2
  21. package/.medusa/server/src/api/admin/dunning/validators.js +2 -2
  22. package/.medusa/server/src/api/admin/renewals/validators.js +2 -2
  23. package/.medusa/server/src/api/admin/subscription-analytics/validators.js +2 -2
  24. package/.medusa/server/src/api/admin/subscription-logs/validators.js +2 -2
  25. package/.medusa/server/src/api/admin/subscription-offers/validators.js +2 -2
  26. package/.medusa/server/src/api/admin/subscription-settings/validators.js +2 -2
  27. package/.medusa/server/src/api/admin/subscriptions/[id]/payment-method/route.js +19 -0
  28. package/.medusa/server/src/api/admin/subscriptions/[id]/payment-methods/route.js +10 -0
  29. package/.medusa/server/src/api/admin/subscriptions/middlewares.js +8 -1
  30. package/.medusa/server/src/api/admin/subscriptions/utils.js +5 -1
  31. package/.medusa/server/src/api/admin/subscriptions/validators.js +7 -3
  32. package/.medusa/server/src/api/store/customers/me/subscriptions/[id]/payment-method/route.js +26 -0
  33. package/.medusa/server/src/api/store/customers/me/subscriptions/[id]/payment-methods/route.js +15 -0
  34. package/.medusa/server/src/api/store/customers/me/subscriptions/middlewares.js +8 -1
  35. package/.medusa/server/src/api/store/customers/me/subscriptions/utils.js +72 -1
  36. package/.medusa/server/src/api/store/customers/me/subscriptions/validators.js +7 -3
  37. package/.medusa/server/src/api/store/products/validators.js +2 -2
  38. package/.medusa/server/src/modules/activity-log/__tests__/create-subscription-log-event.spec.js +257 -0
  39. package/.medusa/server/src/modules/activity-log/__tests__/normalize-log-event.spec.js +231 -0
  40. package/.medusa/server/src/modules/activity-log/migrations/Migration20260818120000.js +16 -0
  41. package/.medusa/server/src/modules/activity-log/types/index.js +2 -1
  42. package/.medusa/server/src/modules/analytics/__tests__/admin-query.spec.js +560 -0
  43. package/.medusa/server/src/modules/analytics/index.js +2 -2
  44. package/.medusa/server/src/modules/analytics/utils/admin-query.js +157 -5
  45. package/.medusa/server/src/modules/plan-offer/__tests__/service.spec.js +94 -0
  46. package/.medusa/server/src/modules/renewal/__tests__/service.spec.js +89 -0
  47. package/.medusa/server/src/modules/settings/__tests__/normalize-settings.spec.js +86 -0
  48. package/.medusa/server/src/modules/settings/__tests__/service.spec.js +124 -0
  49. package/.medusa/server/src/modules/subscription/__tests__/payment-methods.spec.js +186 -0
  50. package/.medusa/server/src/modules/subscription/__tests__/service.spec.js +124 -0
  51. package/.medusa/server/src/modules/subscription/utils/admin-query.js +196 -14
  52. package/.medusa/server/src/modules/subscription/utils/payment-methods.js +146 -0
  53. package/.medusa/server/src/workflows/__tests__/cancel-subscription.spec.js +20 -0
  54. package/.medusa/server/src/workflows/__tests__/pause-subscription.spec.js +20 -0
  55. package/.medusa/server/src/workflows/__tests__/update-subscription-shipping-address.spec.js +49 -0
  56. package/.medusa/server/src/workflows/cancel-subscription.js +21 -1
  57. package/.medusa/server/src/workflows/index.js +6 -2
  58. package/.medusa/server/src/workflows/pause-subscription.js +21 -1
  59. package/.medusa/server/src/workflows/steps/rebuild-analytics-daily-snapshots.js +33 -10
  60. package/.medusa/server/src/workflows/steps/update-subscription-payment-method.js +110 -0
  61. package/.medusa/server/src/workflows/steps/validate-subscription-cart.js +7 -22
  62. package/.medusa/server/src/workflows/update-subscription-payment-method.js +65 -0
  63. package/.medusa/server/src/workflows/utils/analytics-incremental.js +1 -1
  64. package/README.md +89 -36
  65. package/package.json +25 -23
@@ -4,6 +4,8 @@ exports.requireStoreCustomer = requireStoreCustomer;
4
4
  exports.listStoreCustomerSubscriptions = listStoreCustomerSubscriptions;
5
5
  exports.retrieveOwnedSubscription = retrieveOwnedSubscription;
6
6
  exports.retrieveOwnedSubscriptionDetail = retrieveOwnedSubscriptionDetail;
7
+ exports.resolveSubscriptionPaymentMethod = resolveSubscriptionPaymentMethod;
8
+ exports.getStoreSubscriptionPaymentMethodsResponse = getStoreSubscriptionPaymentMethodsResponse;
7
9
  exports.getStoreSubscriptionDetailResponse = getStoreSubscriptionDetailResponse;
8
10
  exports.getOwnedSubscriptionForAction = getOwnedSubscriptionForAction;
9
11
  exports.getRetryableDunningCaseForSubscription = getRetryableDunningCaseForSubscription;
@@ -15,6 +17,7 @@ const types_2 = require("../../../../../modules/dunning/types");
15
17
  const effective_config_1 = require("../../../../../modules/plan-offer/utils/effective-config");
16
18
  const types_3 = require("../../../../../modules/subscription/types");
17
19
  const effective_next_renewal_1 = require("../../../../../modules/subscription/utils/effective-next-renewal");
20
+ const payment_methods_1 = require("../../../../../modules/subscription/utils/payment-methods");
18
21
  const ACTIVE_CANCELLATION_STATUSES = [
19
22
  types_1.CancellationCaseStatus.REQUESTED,
20
23
  types_1.CancellationCaseStatus.EVALUATING_RETENTION,
@@ -228,6 +231,70 @@ async function getLatestDunningAttempt(query, dunningCaseId) {
228
231
  const latest = attempts.sort((left, right) => right.attempt_no - left.attempt_no)[0];
229
232
  return latest ?? null;
230
233
  }
234
+ /**
235
+ * Resolves the card details of the payment method a subscription renews with.
236
+ *
237
+ * The provider lookup is best effort so that a removed payment method or an
238
+ * unreachable payment provider never breaks subscription detail rendering.
239
+ */
240
+ async function resolveSubscriptionPaymentMethod(scope, input) {
241
+ const providerId = input.payment_context?.payment_provider_id ?? null;
242
+ const paymentMethodId = input.payment_context?.payment_method_reference ?? null;
243
+ if (!providerId || !paymentMethodId) {
244
+ return null;
245
+ }
246
+ try {
247
+ const resolved = await (0, payment_methods_1.resolveCustomerPaymentMethod)(scope, {
248
+ customer_id: input.customer_id,
249
+ provider_id: providerId,
250
+ payment_method_id: paymentMethodId,
251
+ });
252
+ return resolved.summary;
253
+ }
254
+ catch {
255
+ return null;
256
+ }
257
+ }
258
+ /**
259
+ * Lists the payment methods the authenticated customer can renew a subscription
260
+ * with, flagging the one the subscription currently uses.
261
+ */
262
+ async function getStoreSubscriptionPaymentMethodsResponse(scope, input) {
263
+ const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
264
+ const { data } = await query.graph({
265
+ entity: "subscription",
266
+ fields: ["id", "customer_id", "payment_context"],
267
+ filters: {
268
+ id: [input.subscription_id],
269
+ customer_id: input.customer_id,
270
+ },
271
+ }, {
272
+ throwIfKeyNotFound: true,
273
+ });
274
+ const subscription = data[0];
275
+ if (!subscription) {
276
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Subscription '${input.subscription_id}' was not found for the authenticated customer.`);
277
+ }
278
+ const providerId = subscription.payment_context?.payment_provider_id ?? null;
279
+ const currentPaymentMethodId = subscription.payment_context?.payment_method_reference ?? null;
280
+ if (!providerId) {
281
+ return {
282
+ payment_provider_id: null,
283
+ payment_methods: [],
284
+ };
285
+ }
286
+ const paymentMethods = await (0, payment_methods_1.listCustomerPaymentMethods)(scope, {
287
+ customer_id: input.customer_id,
288
+ provider_id: providerId,
289
+ });
290
+ return {
291
+ payment_provider_id: providerId,
292
+ payment_methods: paymentMethods.map((paymentMethod) => ({
293
+ ...paymentMethod,
294
+ is_current: paymentMethod.id === currentPaymentMethodId,
295
+ })),
296
+ };
297
+ }
231
298
  async function getStoreSubscriptionDetailResponse(scope, input) {
232
299
  const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
233
300
  const { data } = await query.graph({
@@ -288,6 +355,10 @@ async function getStoreSubscriptionDetailResponse(scope, input) {
288
355
  shipping_address: subscription.shipping_address ?? null,
289
356
  payment_status: mapPaymentStatus(subscription.status, dunningCase),
290
357
  payment_provider_id: subscription.payment_context?.payment_provider_id ?? null,
358
+ payment_method: await resolveSubscriptionPaymentMethod(scope, {
359
+ customer_id: input.customer_id,
360
+ payment_context: subscription.payment_context ?? null,
361
+ }),
291
362
  payment_recovery: mapPaymentRecovery(dunningCase, latestDunningAttempt),
292
363
  active_cancellation_case: activeCancellationCase,
293
364
  scheduled_plan_change: subscription.pending_update_data
@@ -422,4 +493,4 @@ async function getStoreProductSubscriptionOfferResponse(req) {
422
493
  function sendStoreJson(res, body, status = 200) {
423
494
  return res.status(status).json(body);
424
495
  }
425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9zdWJzY3JpcHRpb25zL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUdBLG9EQWFDO0FBRUQsd0VBaUZDO0FBRUQsOERBOEJDO0FBRUQsMEVBU0M7QUF1SUQsZ0ZBZ0lDO0FBRUQsc0VBd0NDO0FBRUQsd0ZBMEJDO0FBRUQsNEZBaUZDO0FBRUQsc0NBRUM7QUFucEJELHFEQUFrRjtBQUNsRixxRUFBa0Y7QUFDbEYsZ0VBQXdFO0FBQ3hFLCtGQUEyRztBQUMzRyxxRUFHa0Q7QUFDbEQsNkdBQTRHO0FBRTVHLE1BQU0sNEJBQTRCLEdBQUc7SUFDbkMsOEJBQXNCLENBQUMsU0FBUztJQUNoQyw4QkFBc0IsQ0FBQyxvQkFBb0I7SUFDM0MsOEJBQXNCLENBQUMsaUJBQWlCO0NBQ2hDLENBQUE7QUE0RVYsU0FBUyxpQkFBaUIsQ0FBQyxLQUF1QztJQUNoRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTVELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDakUsQ0FBQztBQUVNLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsR0FBK0I7SUFFL0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUE7SUFFN0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHNDQUFzQyxDQUN2QyxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUM7QUFFTSxLQUFLLFVBQVUsOEJBQThCLENBQ2xELEdBQStCO0lBRS9CLE1BQU0sVUFBVSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFaEUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNqQyxNQUFNLEVBQUUsY0FBYztRQUN0QixNQUFNLEVBQUU7WUFDTixJQUFJO1lBQ0osV0FBVztZQUNYLFFBQVE7WUFDUixhQUFhO1lBQ2IsWUFBWTtZQUNaLGlCQUFpQjtZQUNqQixvQkFBb0I7WUFDcEIsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQixrQkFBa0I7U0FDbkI7UUFDRCxPQUFPLEVBQUU7WUFDUCxXQUFXLEVBQUUsVUFBVTtTQUN4QjtRQUNELFVBQVUsRUFBRTtZQUNWLEtBQUssRUFBRTtnQkFDTCxVQUFVLEVBQUUsTUFBTTthQUNuQjtTQUNGO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxhQUFhLEdBQUksSUFBb0MsSUFBSSxFQUFFLENBQUE7SUFFakUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ25ELE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztRQUMzQyxPQUFPLEVBQUU7WUFDUCxlQUFlLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLDRCQUE0QixDQUFDO1NBQzFDO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUE7SUFFL0QsS0FBSyxNQUFNLE1BQU0sSUFBSyxnQkFBK0MsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsYUFBYSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEQsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFO1lBQ25CLFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUztZQUNqQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDM0IsVUFBVSxFQUFFLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDdEQsYUFBYSxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLElBQUksSUFBSTtZQUNuRSxhQUFhLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsSUFBSSxJQUFJO1lBQ25FLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO1lBQ2hFLHlCQUF5QixFQUFFLGlCQUFpQixDQUMxQyxJQUFBLGtEQUF5QixFQUFDO2dCQUN4QixlQUFlLEVBQUUsWUFBWSxDQUFDLGVBQWU7Z0JBQzdDLGVBQWUsRUFBRSxZQUFZLENBQUMsZUFBZTtnQkFDN0Msa0JBQWtCLEVBQ2hCLFlBQVksQ0FBQyxrQkFBbUQ7Z0JBQ2xFLGVBQWUsRUFBRSxZQUFZLENBQUMsZUFBZTthQUM5QyxDQUFDLENBQ0g7WUFDRCx3QkFBd0IsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELENBQUMsQ0FBQztvQkFDRSxFQUFFLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFFLENBQUMsRUFBRTtvQkFDeEMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBRSxDQUFDLE1BQU07aUJBQ2pEO2dCQUNILENBQUMsQ0FBQyxJQUFJO1NBQ1QsQ0FBQyxDQUFDO0tBQ0osQ0FBQTtBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUseUJBQXlCLENBQzdDLEdBQStCLEVBQy9CLGNBQXNCO0lBRXRCLE1BQU0sVUFBVSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FDaEM7UUFDRSxNQUFNLEVBQUUsY0FBYztRQUN0QixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDO1FBQzdCLE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUNwQixXQUFXLEVBQUUsVUFBVTtTQUN4QjtLQUNGLEVBQ0Q7UUFDRSxrQkFBa0IsRUFBRSxJQUFJO0tBQ3pCLENBQ0YsQ0FBQTtJQUVELE1BQU0sWUFBWSxHQUFJLElBQW1ELENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFNUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLGlCQUFpQixjQUFjLGlEQUFpRCxDQUNqRixDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFBO0FBQ3JCLENBQUM7QUFFTSxLQUFLLFVBQVUsK0JBQStCLENBQ25ELEdBQStCLEVBQy9CLGNBQXNCO0lBRXRCLE1BQU0sVUFBVSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEQsT0FBTyxNQUFNLGtDQUFrQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7UUFDekQsV0FBVyxFQUFFLFVBQVU7UUFDdkIsZUFBZSxFQUFFLGNBQWM7S0FDaEMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQ3ZCLGtCQUEwQixFQUMxQixXQUFxQztJQUVyQyxJQUNFLGtCQUFrQixLQUFLLDBCQUFrQixDQUFDLFFBQVE7UUFDbEQsV0FBVyxFQUFFLE1BQU0sS0FBSyx5QkFBaUIsQ0FBQyxJQUFJO1FBQzlDLFdBQVcsRUFBRSxNQUFNLEtBQUsseUJBQWlCLENBQUMsZUFBZTtRQUN6RCxXQUFXLEVBQUUsTUFBTSxLQUFLLHlCQUFpQixDQUFDLFFBQVE7UUFDbEQsV0FBVyxFQUFFLE1BQU0sS0FBSyx5QkFBaUIsQ0FBQywwQkFBMEIsRUFDcEUsQ0FBQztRQUNELE9BQU8sbUJBQW1CLENBQUE7SUFDNUIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQ3pCLFdBQXFDLEVBQ3JDLGFBQTBDO0lBRTFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FDakIsV0FBVyxDQUFDLE1BQU0sS0FBSyx5QkFBaUIsQ0FBQyxJQUFJO1FBQzdDLFdBQVcsQ0FBQyxNQUFNLEtBQUsseUJBQWlCLENBQUMsZUFBZTtRQUN4RCxXQUFXLENBQUMsTUFBTSxLQUFLLHlCQUFpQixDQUFDLDBCQUEwQixDQUFBO0lBRXJFLE9BQU87UUFDTCxlQUFlLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDL0IsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQ3pCLGNBQWMsRUFBRSxhQUFhO1FBQzdCLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFBYTtRQUN4QyxZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVk7UUFDdEMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDM0QsZUFBZSxFQUNiLGFBQWEsRUFBRSxVQUFVLElBQUksV0FBVyxDQUFDLHVCQUF1QixJQUFJLElBQUk7UUFDMUUsa0JBQWtCLEVBQ2hCLGFBQWEsRUFBRSxhQUFhO1lBQzVCLFdBQVcsQ0FBQywwQkFBMEI7WUFDdEMsSUFBSTtRQUNOLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksSUFBSTtLQUNuRCxDQUFBO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSx5QkFBeUIsQ0FDdEMsS0FBVSxFQUNWLGNBQXNCO0lBRXRCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxFQUFFLG1CQUFtQjtRQUMzQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxDQUFDO1FBQzNDLE9BQU8sRUFBRTtZQUNQLGVBQWUsRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUNqQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLDRCQUE0QixDQUFDO1NBQzFDO1FBQ0QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFLENBQUM7U0FDUjtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFJLElBQW1DLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFdEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsT0FBTztRQUNMLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtRQUNiLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtLQUN0QixDQUFBO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSwwQkFBMEIsQ0FDdkMsS0FBVSxFQUNWLGNBQXNCO0lBRXRCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxFQUFFLGNBQWM7UUFDdEIsTUFBTSxFQUFFO1lBQ04sSUFBSTtZQUNKLGlCQUFpQjtZQUNqQixRQUFRO1lBQ1IsZUFBZTtZQUNmLGNBQWM7WUFDZCxlQUFlO1lBQ2YseUJBQXlCO1lBQ3pCLDRCQUE0QjtTQUM3QjtRQUNELE9BQU8sRUFBRTtZQUNQLGVBQWUsRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUNqQyxNQUFNLEVBQUU7Z0JBQ04seUJBQWlCLENBQUMsSUFBSTtnQkFDdEIseUJBQWlCLENBQUMsZUFBZTtnQkFDakMseUJBQWlCLENBQUMsUUFBUTtnQkFDMUIseUJBQWlCLENBQUMsMEJBQTBCO2FBQzdDO1NBQ0Y7S0FDRixDQUFDLENBQUE7SUFFRixNQUFNLFlBQVksR0FBSSxJQUE0QixJQUFJLEVBQUUsQ0FBQTtJQUV4RCxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUE7QUFDaEMsQ0FBQztBQUVELEtBQUssVUFBVSx1QkFBdUIsQ0FDcEMsS0FBVSxFQUNWLGFBQXFCO0lBRXJCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixNQUFNLEVBQUU7WUFDTixJQUFJO1lBQ0osaUJBQWlCO1lBQ2pCLFlBQVk7WUFDWixRQUFRO1lBQ1IsWUFBWTtZQUNaLGVBQWU7WUFDZixhQUFhO1NBQ2Q7UUFDRCxPQUFPLEVBQUU7WUFDUCxlQUFlLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDakM7S0FDRixDQUFDLENBQUE7SUFFRixNQUFNLFFBQVEsR0FBSSxJQUErQixJQUFJLEVBQUUsQ0FBQTtJQUN2RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFcEYsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFBO0FBQ3ZCLENBQUM7QUFFTSxLQUFLLFVBQVUsa0NBQWtDLENBQ3RELEtBQTBDLEVBQzFDLEtBR0M7SUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQ2hDO1FBQ0UsTUFBTSxFQUFFLGNBQWM7UUFDdEIsTUFBTSxFQUFFO1lBQ04sSUFBSTtZQUNKLFdBQVc7WUFDWCxRQUFRO1lBQ1IsYUFBYTtZQUNiLFlBQVk7WUFDWixZQUFZO1lBQ1osb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQixpQkFBaUI7WUFDakIsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQixrQkFBa0I7WUFDbEIsa0JBQWtCO1lBQ2xCLGlCQUFpQjtZQUNqQixxQkFBcUI7U0FDdEI7UUFDRCxPQUFPLEVBQUU7WUFDUCxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQzNCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztTQUMvQjtLQUNGLEVBQ0Q7UUFDRSxrQkFBa0IsRUFBRSxJQUFJO0tBQ3pCLENBQ0YsQ0FBQTtJQUVELE1BQU0sWUFBWSxHQUFJLElBQXdDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFakUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLGlCQUFpQixLQUFLLENBQUMsZUFBZSxpREFBaUQsQ0FDeEYsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLHNCQUFzQixHQUFHLE1BQU0seUJBQXlCLENBQzVELEtBQUssRUFDTCxZQUFZLENBQUMsRUFBRSxDQUNoQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSwwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzVFLE1BQU0sb0JBQW9CLEdBQUcsV0FBVztRQUN0QyxDQUFDLENBQUMsTUFBTSx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUMsSUFBSSxDQUFBO0lBRVIsT0FBTztRQUNMLFlBQVksRUFBRTtZQUNaLEVBQUUsRUFBRSxZQUFZLENBQUMsRUFBRTtZQUNuQixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVM7WUFDakMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLFVBQVUsRUFBRSxZQUFZLENBQUMsVUFBVTtZQUNuQyxVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVU7WUFDbkMsYUFBYSxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLElBQUksSUFBSTtZQUNuRSxhQUFhLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsSUFBSSxJQUFJO1lBQ25FLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxrQkFBa0I7WUFDbkQsZUFBZSxFQUFFLFlBQVksQ0FBQyxlQUFlO1lBQzdDLGVBQWUsRUFBRSxZQUFZLENBQUMsZUFBZTtZQUM3QyxlQUFlLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQztZQUNoRSx5QkFBeUIsRUFBRSxpQkFBaUIsQ0FDMUMsSUFBQSxrREFBeUIsRUFBQztnQkFDeEIsZUFBZSxFQUFFLFlBQVksQ0FBQyxlQUFlO2dCQUM3QyxlQUFlLEVBQUUsWUFBWSxDQUFDLGVBQWU7Z0JBQzdDLGtCQUFrQixFQUNoQixZQUFZLENBQUMsa0JBQW1EO2dCQUNsRSxlQUFlLEVBQUUsWUFBWSxDQUFDLGVBQWU7YUFDOUMsQ0FBQyxDQUNIO1lBQ0QsZUFBZSxFQUFFLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUM7WUFDaEUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixJQUFJLElBQUk7WUFDdkQsY0FBYyxFQUFFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO1lBQ2xFLG1CQUFtQixFQUNqQixZQUFZLENBQUMsZUFBZSxFQUFFLG1CQUFtQixJQUFJLElBQUk7WUFDM0QsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsV0FBVyxFQUFFLG9CQUFvQixDQUFDO1lBQ3ZFLHdCQUF3QixFQUFFLHNCQUFzQjtZQUNoRCxxQkFBcUIsRUFBRSxZQUFZLENBQUMsbUJBQW1CO2dCQUNyRCxDQUFDLENBQUM7b0JBQ0UsVUFBVSxFQUFFLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVO29CQUN2RCxhQUFhLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixDQUFDLGFBQWE7b0JBQzdELEdBQUcsRUFBRSxZQUFZLENBQUMsbUJBQW1CLENBQUMsR0FBRztvQkFDekMsa0JBQWtCLEVBQ2hCLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0I7b0JBQ3JELGVBQWUsRUFBRSxZQUFZLENBQUMsbUJBQW1CLENBQUMsZUFBZTtvQkFDakUsWUFBWSxFQUFFLGlCQUFpQixDQUM3QixZQUFZLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUM5QztvQkFDRCxZQUFZLEVBQUUsaUJBQWlCLENBQzdCLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQzlDO2lCQUNGO2dCQUNILENBQUMsQ0FBQyxJQUFJO1lBQ1IsMEJBQTBCLEVBQUUsWUFBWSxDQUFDLG1CQUFtQjtnQkFDMUQsQ0FBQyxDQUFDO29CQUNFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0I7b0JBQ3ZFLGVBQWUsRUFBRSxZQUFZLENBQUMsbUJBQW1CLENBQUMsZUFBZTtvQkFDakUsWUFBWSxFQUFFLGlCQUFpQixDQUM3QixZQUFZLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUM5QztvQkFDRCxZQUFZLEVBQUUsaUJBQWlCLENBQzdCLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQzlDO2lCQUNGO2dCQUNILENBQUMsQ0FBQyxJQUFJO1lBQ1IscUJBQXFCLEVBQUUsQ0FDckIsTUFBTSxJQUFBLG1EQUFnQyxFQUFDLEtBQUssRUFBRTtnQkFDNUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxVQUFVO2dCQUNuQyxVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVU7YUFDcEMsQ0FBQyxDQUNILENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxLQUFLO2dCQUNoQyxLQUFLLEVBQ0gsU0FBUyxDQUFDLEtBQUssS0FBSyxDQUFDO29CQUNuQixDQUFDLENBQUMsU0FBUyxTQUFTLENBQUMsUUFBUSxFQUFFO29CQUMvQixDQUFDLENBQUMsU0FBUyxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEdBQUc7YUFDeEQsQ0FBQyxDQUFDO1NBQ0o7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsR0FBK0IsRUFDL0IsY0FBc0I7SUFFdEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNsRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUNoQztRQUNFLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixhQUFhO1lBQ2IsWUFBWTtZQUNaLFFBQVE7U0FDVDtRQUNELE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUNwQixXQUFXLEVBQUUsVUFBVTtTQUN4QjtLQUNGLEVBQ0Q7UUFDRSxrQkFBa0IsRUFBRSxJQUFJO0tBQ3pCLENBQ0YsQ0FBQTtJQUVELE1BQU0sWUFBWSxHQUFJLElBS25CLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsaUJBQWlCLGNBQWMsaURBQWlELENBQ2pGLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxZQUFZLENBQUE7QUFDckIsQ0FBQztBQUVNLEtBQUssVUFBVSxzQ0FBc0MsQ0FDMUQsR0FBK0IsRUFDL0IsY0FBc0I7SUFFdEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxXQUFXLEdBQUcsTUFBTSwwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFFM0UsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQzFCLGlCQUFpQixjQUFjLGlEQUFpRCxDQUNqRixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQ0UsV0FBVyxDQUFDLE1BQU0sS0FBSyx5QkFBaUIsQ0FBQyxRQUFRO1FBQ2pELFdBQVcsQ0FBQyxNQUFNLEtBQUsseUJBQWlCLENBQUMsU0FBUztRQUNsRCxXQUFXLENBQUMsTUFBTSxLQUFLLHlCQUFpQixDQUFDLFdBQVcsRUFDcEQsQ0FBQztRQUNELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQzFCLGlCQUFpQixjQUFjLHNDQUFzQyxDQUN0RSxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUM7QUFFTSxLQUFLLFVBQVUsd0NBQXdDLENBQzVELEdBQWdFO0lBRWhFLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO0lBQy9CLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQTtJQUV4RCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDO1FBQ3hELE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQztTQUNoQjtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sT0FBTyxHQUFJLElBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFNUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsWUFBWSxTQUFTLGtCQUFrQixDQUN4QyxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNoRixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixZQUFZLFNBQVMsaUNBQWlDLFNBQVMsSUFBSSxDQUNwRSxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUN2RCw2REFBNkQsQ0FDOUQsQ0FBQTtJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRTtRQUMvRCxVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsU0FBUztLQUN0QixDQUFDLENBQUE7SUFFRixPQUFPO1FBQ0wsa0JBQWtCLEVBQUU7WUFDbEIseUJBQXlCLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDNUMsVUFBVSxFQUFFLFNBQVM7WUFDckIsVUFBVSxFQUFFLFNBQVM7WUFDckIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO1lBQ3ZDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDekQsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNYLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7b0JBQ3hELFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDckMsQ0FBQTtnQkFFRCxPQUFPO29CQUNMLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO29CQUM5QyxlQUFlLEVBQUUsU0FBUyxDQUFDLEtBQUs7b0JBQ2hDLEtBQUssRUFDSCxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUM7d0JBQ25CLENBQUMsQ0FBQyxTQUFTLFNBQVMsQ0FBQyxRQUFRLEVBQUU7d0JBQy9CLENBQUMsQ0FBQyxTQUFTLFNBQVMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLFFBQVEsR0FBRztvQkFDdkQsUUFBUSxFQUFFLGdCQUFnQjt3QkFDeEIsQ0FBQyxDQUFDOzRCQUNFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhOzRCQUNwQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsY0FBYzt5QkFDdkM7d0JBQ0gsQ0FBQyxDQUFDLElBQUk7aUJBQ1QsQ0FBQTtZQUNILENBQUMsQ0FBQztZQUNGLGtCQUFrQixFQUFFO2dCQUNsQixnQ0FBZ0MsRUFBRSxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUM7YUFDM0U7WUFDRCxjQUFjLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxjQUFjLElBQUksSUFBSTtZQUNwRCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ2pCLENBQUMsQ0FBQztvQkFDRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhO29CQUN0QyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSTtpQkFDdEM7Z0JBQ0gsQ0FBQyxDQUFDLElBQUk7U0FDVDtLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLEdBQW1CLEVBQUUsSUFBYSxFQUFFLE1BQU0sR0FBRyxHQUFHO0lBQzVFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDdEMsQ0FBQyJ9
496
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9zdWJzY3JpcHRpb25zL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBK0dBLG9EQWFDO0FBRUQsd0VBaUZDO0FBRUQsOERBOEJDO0FBRUQsMEVBU0M7QUE2SUQsNEVBNkJDO0FBTUQsZ0dBdURDO0FBRUQsZ0ZBb0lDO0FBRUQsc0VBd0NDO0FBRUQsd0ZBMEJDO0FBRUQsNEZBaUZDO0FBRUQsc0NBRUM7QUEvdkJELHFEQUFrRjtBQUNsRixxRUFBa0Y7QUFDbEYsZ0VBQXdFO0FBQ3hFLCtGQUEyRztBQUMzRyxxRUFJa0Q7QUFDbEQsNkdBQTRHO0FBQzVHLCtGQUdrRTtBQUVsRSxNQUFNLDRCQUE0QixHQUFHO0lBQ25DLDhCQUFzQixDQUFDLFNBQVM7SUFDaEMsOEJBQXNCLENBQUMsb0JBQW9CO0lBQzNDLDhCQUFzQixDQUFDLGlCQUFpQjtDQUNoQyxDQUFBO0FBNkVWLFNBQVMsaUJBQWlCLENBQUMsS0FBdUM7SUFDaEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU1RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQ2pFLENBQUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLEdBQStCO0lBRS9CLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFBO0lBRTdDLElB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
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PostStoreRetrySubscriptionPaymentSchema = exports.PostStoreSwapSubscriptionProductSchema = exports.PostStoreChangeSubscriptionAddressSchema = exports.PostStoreChangeSubscriptionFrequencySchema = exports.PostStoreResumeSubscriptionSchema = exports.PostStorePauseSubscriptionSchema = exports.PostStoreStartCancellationSchema = void 0;
4
- const zod_1 = require("zod");
3
+ exports.PostStoreUpdateSubscriptionPaymentMethodSchema = exports.PostStoreRetrySubscriptionPaymentSchema = exports.PostStoreSwapSubscriptionProductSchema = exports.PostStoreChangeSubscriptionAddressSchema = exports.PostStoreChangeSubscriptionFrequencySchema = exports.PostStoreResumeSubscriptionSchema = exports.PostStorePauseSubscriptionSchema = exports.PostStoreStartCancellationSchema = void 0;
4
+ const zod_1 = require("@medusajs/framework/zod");
5
5
  const types_1 = require("../../../../../modules/cancellation/types");
6
6
  const metadataSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional();
7
7
  const optionalDateTime = zod_1.z.string().datetime().optional();
@@ -46,4 +46,8 @@ exports.PostStoreSwapSubscriptionProductSchema = zod_1.z.object({
46
46
  exports.PostStoreRetrySubscriptionPaymentSchema = zod_1.z.object({
47
47
  reason: zod_1.z.string().trim().min(1).max(500).optional(),
48
48
  });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvY3VzdG9tZXJzL21lL3N1YnNjcmlwdGlvbnMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBdUI7QUFDdkIscUVBQXNGO0FBRXRGLE1BQU0sY0FBYyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ3pELE1BQU0sbUNBQW1DLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUVoRSxRQUFBLGdDQUFnQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLGVBQWUsRUFBRSxPQUFDLENBQUMsVUFBVSxDQUFDLGtDQUEwQixDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3BFLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLFFBQVEsRUFBRSxjQUFjO0NBQ3pCLENBQUMsQ0FBQTtBQU1XLFFBQUEsZ0NBQWdDLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3BELFlBQVksRUFBRSxnQkFBZ0I7Q0FDL0IsQ0FBQyxDQUFBO0FBTVcsUUFBQSxpQ0FBaUMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hELFNBQVMsRUFBRSxnQkFBZ0I7SUFDM0IsdUJBQXVCLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNoRCxDQUFDLENBQUE7QUFNVyxRQUFBLDBDQUEwQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDakUsa0JBQWtCLEVBQUUsbUNBQW1DO0lBQ3ZELGVBQWUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVDLFlBQVksRUFBRSxnQkFBZ0I7Q0FDL0IsQ0FBQyxDQUFBO0FBTVcsUUFBQSx3Q0FBd0MsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQy9ELFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwQyxTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkMsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDaEQsU0FBUyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25DLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2xELElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakQsWUFBWSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQy9DLENBQUMsQ0FBQTtBQU1XLFFBQUEsc0NBQXNDLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RCxVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0Isa0JBQWtCLEVBQUUsbUNBQW1DO0lBQ3ZELGVBQWUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVDLFlBQVksRUFBRSxnQkFBZ0I7Q0FDL0IsQ0FBQyxDQUFBO0FBTVcsUUFBQSx1Q0FBdUMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzlELE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDckQsQ0FBQyxDQUFBIn0=
49
+ exports.PostStoreUpdateSubscriptionPaymentMethodSchema = zod_1.z.object({
50
+ payment_method_id: zod_1.z.string().trim().min(1),
51
+ provider_id: zod_1.z.string().trim().min(1).optional(),
52
+ });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvY3VzdG9tZXJzL21lL3N1YnNjcmlwdGlvbnMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBMkM7QUFDM0MscUVBQXNGO0FBRXRGLE1BQU0sY0FBYyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ3pELE1BQU0sbUNBQW1DLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUVoRSxRQUFBLGdDQUFnQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLGVBQWUsRUFBRSxPQUFDLENBQUMsVUFBVSxDQUFDLGtDQUEwQixDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3BFLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLFFBQVEsRUFBRSxjQUFjO0NBQ3pCLENBQUMsQ0FBQTtBQU1XLFFBQUEsZ0NBQWdDLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GetStoreProductSubscriptionOfferSchema = void 0;
4
- const zod_1 = require("zod");
4
+ const zod_1 = require("@medusajs/framework/zod");
5
5
  exports.GetStoreProductSubscriptionOfferSchema = zod_1.z.object({
6
6
  variant_id: zod_1.z.string().optional(),
7
7
  });
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvcHJvZHVjdHMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBdUI7QUFFVixRQUFBLHNDQUFzQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0QsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbEMsQ0FBQyxDQUFBIn0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvcHJvZHVjdHMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBMkM7QUFFOUIsUUFBQSxzQ0FBc0MsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdELFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2xDLENBQUMsQ0FBQSJ9
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const test_utils_1 = require("@medusajs/test-utils");
7
+ const __1 = require("..");
8
+ const subscription_log_1 = __importDefault(require("../models/subscription-log"));
9
+ const types_1 = require("../types");
10
+ const normalize_log_event_1 = require("../utils/normalize-log-event");
11
+ const create_subscription_log_event_1 = require("../../../workflows/steps/create-subscription-log-event");
12
+ (0, test_utils_1.moduleIntegrationTestRunner)({
13
+ moduleName: __1.ACTIVITY_LOG_MODULE,
14
+ moduleModels: [subscription_log_1.default],
15
+ resolve: "./src/modules/activity-log",
16
+ testSuite: ({ service }) => {
17
+ describe("createSubscriptionLogEventStep", () => {
18
+ const stepContext = {
19
+ container: {
20
+ resolve(key) {
21
+ if (key !== __1.ACTIVITY_LOG_MODULE) {
22
+ throw new Error(`Unexpected module resolution: ${key}`);
23
+ }
24
+ return service;
25
+ },
26
+ },
27
+ };
28
+ it("creates a subscription log record when dedupe_key does not exist", async () => {
29
+ const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
30
+ subscription_id: "sub_001",
31
+ customer_id: "cus_001",
32
+ event_type: types_1.ActivityLogEventType.SUBSCRIPTION_PAUSED,
33
+ actor_type: types_1.ActivityLogActorType.USER,
34
+ actor_id: "user_001",
35
+ display: {
36
+ subscription_reference: "SUB-001",
37
+ customer_name: "Jane Doe",
38
+ product_title: "Coffee Club",
39
+ variant_title: "Monthly",
40
+ },
41
+ previous_state: {
42
+ status: "active",
43
+ },
44
+ new_state: {
45
+ status: "paused",
46
+ },
47
+ reason: "customer requested pause",
48
+ metadata: {
49
+ source: "admin",
50
+ },
51
+ dedupe: {
52
+ scope: "subscription",
53
+ target_id: "sub_001",
54
+ qualifier: "2026-04-01T10:00:00.000Z",
55
+ },
56
+ });
57
+ const result = await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
58
+ expect(result).toBeDefined();
59
+ const created = await service.listSubscriptionLogs({
60
+ dedupe_key: logEvent.dedupe_key,
61
+ });
62
+ expect(created).toHaveLength(1);
63
+ expect(created[0].subscription_id).toBe("sub_001");
64
+ });
65
+ it("does not create a duplicate record for the same dedupe_key", async () => {
66
+ const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
67
+ subscription_id: "sub_002",
68
+ customer_id: "cus_002",
69
+ event_type: types_1.ActivityLogEventType.RENEWAL_FAILED,
70
+ actor_type: types_1.ActivityLogActorType.SYSTEM,
71
+ display: {
72
+ subscription_reference: "SUB-002",
73
+ },
74
+ metadata: {
75
+ renewal_cycle_id: "renewal_002",
76
+ source: "workflow",
77
+ },
78
+ dedupe: {
79
+ scope: "renewal",
80
+ target_id: "renewal_002",
81
+ },
82
+ });
83
+ await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
84
+ await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
85
+ const records = await service.listSubscriptionLogs({
86
+ dedupe_key: logEvent.dedupe_key,
87
+ });
88
+ expect(records).toHaveLength(1);
89
+ expect(records[0]).toMatchObject({
90
+ subscription_id: "sub_002",
91
+ event_type: types_1.ActivityLogEventType.RENEWAL_FAILED,
92
+ dedupe_key: logEvent.dedupe_key,
93
+ });
94
+ });
95
+ it("deletes only records created by the current execution during compensation", async () => {
96
+ const createdEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
97
+ subscription_id: "sub_003",
98
+ event_type: types_1.ActivityLogEventType.CANCELLATION_FINALIZED,
99
+ actor_type: types_1.ActivityLogActorType.USER,
100
+ display: {
101
+ subscription_reference: "SUB-003",
102
+ },
103
+ dedupe: {
104
+ scope: "cancellation",
105
+ target_id: "case_003",
106
+ },
107
+ });
108
+ await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: createdEvent }, stepContext);
109
+ const createdRecord = await service.listSubscriptionLogs({
110
+ dedupe_key: createdEvent.dedupe_key,
111
+ });
112
+ expect(createdRecord).toHaveLength(1);
113
+ await (0, create_subscription_log_event_1.compensateCreateSubscriptionLogEventStep)({
114
+ action: "created",
115
+ subscription_log_id: createdRecord[0].id,
116
+ }, stepContext);
117
+ const afterDelete = await service.listSubscriptionLogs({
118
+ dedupe_key: createdEvent.dedupe_key,
119
+ });
120
+ expect(afterDelete).toHaveLength(0);
121
+ });
122
+ it("does not delete an existing record during compensation", async () => {
123
+ const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
124
+ subscription_id: "sub_004",
125
+ event_type: types_1.ActivityLogEventType.DUNNING_RECOVERED,
126
+ actor_type: types_1.ActivityLogActorType.USER,
127
+ display: {
128
+ subscription_reference: "SUB-004",
129
+ },
130
+ dedupe: {
131
+ scope: "dunning",
132
+ target_id: "dunning_004",
133
+ },
134
+ });
135
+ await service.createSubscriptionLogs(logEvent);
136
+ await (0, create_subscription_log_event_1.compensateCreateSubscriptionLogEventStep)({
137
+ action: "existing",
138
+ }, stepContext);
139
+ const records = await service.listSubscriptionLogs({
140
+ dedupe_key: logEvent.dedupe_key,
141
+ });
142
+ expect(records).toHaveLength(1);
143
+ });
144
+ it("persists normalized payload fields without leaking sensitive data", async () => {
145
+ const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
146
+ subscription_id: "sub_005",
147
+ customer_id: "cus_005",
148
+ event_type: types_1.ActivityLogEventType.SUBSCRIPTION_SHIPPING_ADDRESS_UPDATED,
149
+ actor_type: types_1.ActivityLogActorType.USER,
150
+ actor_id: "user_005",
151
+ display: {
152
+ subscription_reference: "SUB-005",
153
+ customer_name: "Jane Doe",
154
+ },
155
+ previous_state: {
156
+ city: "Warsaw",
157
+ address_1: "Hidden Street 1",
158
+ },
159
+ new_state: {
160
+ city: "Krakow",
161
+ postal_code: "30-001",
162
+ country_code: "PL",
163
+ },
164
+ metadata: {
165
+ source: "admin",
166
+ provider_payload: {
167
+ unsafe: true,
168
+ },
169
+ },
170
+ dedupe: {
171
+ scope: "subscription",
172
+ target_id: "sub_005",
173
+ qualifier: "shipping-change",
174
+ },
175
+ });
176
+ await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
177
+ const records = await service.listSubscriptionLogs({
178
+ dedupe_key: logEvent.dedupe_key,
179
+ });
180
+ expect(records).toHaveLength(1);
181
+ expect(records[0]).toMatchObject({
182
+ subscription_id: "sub_005",
183
+ customer_id: "cus_005",
184
+ actor_id: "user_005",
185
+ previous_state: {
186
+ city: "Warsaw",
187
+ },
188
+ new_state: {
189
+ city: "Krakow",
190
+ country_code: "PL",
191
+ },
192
+ metadata: {
193
+ source: "admin",
194
+ },
195
+ });
196
+ });
197
+ it("persists store checkout subscription creation events", async () => {
198
+ const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
199
+ subscription_id: "sub_006",
200
+ customer_id: "cus_006",
201
+ event_type: types_1.ActivityLogEventType.SUBSCRIPTION_CREATED,
202
+ actor_type: types_1.ActivityLogActorType.CUSTOMER,
203
+ actor_id: "cus_006",
204
+ display: {
205
+ subscription_reference: "SUB-006",
206
+ customer_name: "Jane Doe",
207
+ product_title: "Coffee Club",
208
+ variant_title: "Monthly",
209
+ },
210
+ new_state: {
211
+ status: "active",
212
+ started_at: "2026-04-01T10:00:00.000Z",
213
+ next_renewal_at: "2026-05-01T10:00:00.000Z",
214
+ frequency_interval: "month",
215
+ frequency_value: 1,
216
+ },
217
+ metadata: {
218
+ order_id: "order_006",
219
+ source: "store",
220
+ trigger_type: "checkout",
221
+ },
222
+ dedupe: {
223
+ scope: "order",
224
+ target_id: "order_006",
225
+ qualifier: "sub_006",
226
+ },
227
+ });
228
+ await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
229
+ const records = await service.listSubscriptionLogs({
230
+ dedupe_key: logEvent.dedupe_key,
231
+ });
232
+ expect(records).toHaveLength(1);
233
+ expect(records[0]).toMatchObject({
234
+ subscription_id: "sub_006",
235
+ customer_id: "cus_006",
236
+ event_type: types_1.ActivityLogEventType.SUBSCRIPTION_CREATED,
237
+ actor_type: types_1.ActivityLogActorType.CUSTOMER,
238
+ actor_id: "cus_006",
239
+ metadata: {
240
+ order_id: "order_006",
241
+ source: "store",
242
+ trigger_type: "checkout",
243
+ },
244
+ new_state: {
245
+ status: "active",
246
+ started_at: "2026-04-01T10:00:00.000Z",
247
+ next_renewal_at: "2026-05-01T10:00:00.000Z",
248
+ frequency_interval: "month",
249
+ frequency_value: 1,
250
+ },
251
+ });
252
+ });
253
+ });
254
+ },
255
+ });
256
+ jest.setTimeout(60 * 1000);
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN1YnNjcmlwdGlvbi1sb2ctZXZlbnQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2FjdGl2aXR5LWxvZy9fX3Rlc3RzX18vY3JlYXRlLXN1YnNjcmlwdGlvbi1sb2ctZXZlbnQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUFrRTtBQUNsRSwwQkFBd0M7QUFDeEMsa0ZBQXdEO0FBRXhELG9DQUdpQjtBQUNqQixzRUFBd0U7QUFDeEUsMEdBRytEO0FBRS9ELElBQUEsd0NBQTJCLEVBQTJCO0lBQ3BELFVBQVUsRUFBRSx1QkFBbUI7SUFDL0IsWUFBWSxFQUFFLENBQUMsMEJBQWUsQ0FBQztJQUMvQixPQUFPLEVBQUUsNEJBQTRCO0lBQ3JDLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUN6QixRQUFRLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixTQUFTLEVBQUU7b0JBQ1QsT0FBTyxDQUFDLEdBQVc7d0JBQ2pCLElBQUksR0FBRyxLQUFLLHVCQUFtQixFQUFFLENBQUM7NEJBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsRUFBRSxDQUFDLENBQUE7d0JBQ3pELENBQUM7d0JBRUQsT0FBTyxPQUFPLENBQUE7b0JBQ2hCLENBQUM7aUJBQ0Y7YUFDRixDQUFBO1lBRUQsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNoRixNQUFNLFFBQVEsR0FBRyxJQUFBLCtDQUF5QixFQUFDO29CQUN6QyxlQUFlLEVBQUUsU0FBUztvQkFDMUIsV0FBVyxFQUFFLFNBQVM7b0JBQ3RCLFVBQVUsRUFBRSw0QkFBb0IsQ0FBQyxtQkFBbUI7b0JBQ3BELFVBQVUsRUFBRSw0QkFBb0IsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUUsVUFB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