@hartl-services/medusa-affiliate 0.3.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 (169) hide show
  1. package/.medusa/server/src/admin/index.js +3739 -0
  2. package/.medusa/server/src/admin/index.mjs +3738 -0
  3. package/.medusa/server/src/api/admin/affiliate-applications/[id]/approve/route.js +28 -0
  4. package/.medusa/server/src/api/admin/affiliate-applications/[id]/reject/route.js +19 -0
  5. package/.medusa/server/src/api/admin/affiliate-applications/route.js +23 -0
  6. package/.medusa/server/src/api/admin/affiliate-distribution-reports/query.js +171 -0
  7. package/.medusa/server/src/api/admin/affiliate-distribution-reports/route.js +13 -0
  8. package/.medusa/server/src/api/admin/affiliate-program-settings/route.js +27 -0
  9. package/.medusa/server/src/api/admin/affiliate-reports/[id]/route.js +45 -0
  10. package/.medusa/server/src/api/admin/affiliate-reports/route.js +27 -0
  11. package/.medusa/server/src/api/admin/affiliates/[id]/consignment-reminders/route.js +31 -0
  12. package/.medusa/server/src/api/admin/affiliates/[id]/consignment-transfers/route.js +41 -0
  13. package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/[coupon_id]/reconcile/route.js +34 -0
  14. package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/[coupon_id]/revoke/route.js +36 -0
  15. package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/[coupon_id]/rotate/route.js +40 -0
  16. package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/route.js +56 -0
  17. package/.medusa/server/src/api/admin/affiliates/[id]/distribution/route.js +45 -0
  18. package/.medusa/server/src/api/admin/affiliates/[id]/inactive/route.js +20 -0
  19. package/.medusa/server/src/api/admin/affiliates/[id]/route.js +50 -0
  20. package/.medusa/server/src/api/admin/affiliates/[id]/slugs/[slug_id]/route.js +19 -0
  21. package/.medusa/server/src/api/admin/affiliates/[id]/slugs/route.js +26 -0
  22. package/.medusa/server/src/api/admin/affiliates/route.js +43 -0
  23. package/.medusa/server/src/api/admin/consignment-report-response.js +36 -0
  24. package/.medusa/server/src/api/admin/consignment-reports/[id]/approve/route.js +25 -0
  25. package/.medusa/server/src/api/admin/consignment-reports/[id]/correct/route.js +18 -0
  26. package/.medusa/server/src/api/admin/consignment-reports/[id]/reject/route.js +15 -0
  27. package/.medusa/server/src/api/admin/consignment-reports/[id]/route.js +11 -0
  28. package/.medusa/server/src/api/admin/consignment-reports/route.js +27 -0
  29. package/.medusa/server/src/api/admin/customers/[id]/affiliate/route.js +50 -0
  30. package/.medusa/server/src/api/admin/orders/[id]/affiliate-attribution/route.js +30 -0
  31. package/.medusa/server/src/api/affiliate-coupon-http.js +152 -0
  32. package/.medusa/server/src/api/affiliate-referral-cookie.js +34 -0
  33. package/.medusa/server/src/api/affiliate-self-service-http.js +37 -0
  34. package/.medusa/server/src/api/middlewares.js +786 -0
  35. package/.medusa/server/src/api/store/affiliate-referrals/apply-coupon/route.js +47 -0
  36. package/.medusa/server/src/api/store/affiliate-referrals/capture/route.js +76 -0
  37. package/.medusa/server/src/api/store/affiliate-referrals/carts/[cart_id]/route.js +20 -0
  38. package/.medusa/server/src/api/store/affiliates/consignment-inventory/route.js +53 -0
  39. package/.medusa/server/src/api/store/affiliates/consignment-report-response.js +31 -0
  40. package/.medusa/server/src/api/store/affiliates/consignment-reports/[id]/submit/route.js +40 -0
  41. package/.medusa/server/src/api/store/affiliates/consignment-reports/route.js +43 -0
  42. package/.medusa/server/src/api/store/affiliates/coupon-labels/route.js +14 -0
  43. package/.medusa/server/src/api/store/affiliates/me/commissions/route.js +35 -0
  44. package/.medusa/server/src/api/store/affiliates/me/coupon-codes/[coupon_id]/revoke/route.js +36 -0
  45. package/.medusa/server/src/api/store/affiliates/me/coupon-codes/[coupon_id]/rotate/route.js +40 -0
  46. package/.medusa/server/src/api/store/affiliates/me/coupon-codes/route.js +55 -0
  47. package/.medusa/server/src/api/store/affiliates/me/dashboard/route.js +15 -0
  48. package/.medusa/server/src/api/store/affiliates/me/route.js +85 -0
  49. package/.medusa/server/src/api/store/affiliates/me/slugs/[slug_id]/route.js +29 -0
  50. package/.medusa/server/src/api/store/affiliates/me/slugs/route.js +34 -0
  51. package/.medusa/server/src/api/store/affiliates/own-order-discount/route.js +22 -0
  52. package/.medusa/server/src/api/store/affiliates/own-order-promotion/route.js +30 -0
  53. package/.medusa/server/src/api/store/affiliates/register/route.js +27 -0
  54. package/.medusa/server/src/api/store/affiliates/resolve-referral/route.js +34 -0
  55. package/.medusa/server/src/api/validators.js +52 -0
  56. package/.medusa/server/src/api/wire-response.js +10 -0
  57. package/.medusa/server/src/integration/email-events.js +51 -0
  58. package/.medusa/server/src/integrations/inventory-transfer/batch-management-transfer-adapter.js +36 -0
  59. package/.medusa/server/src/integrations/inventory-transfer/native-inventory-transfer-adapter.js +30 -0
  60. package/.medusa/server/src/integrations/inventory-transfer/resolve-inventory-transfer-adapter.js +46 -0
  61. package/.medusa/server/src/integrations/inventory-transfer/types.js +3 -0
  62. package/.medusa/server/src/jobs/affiliate-attribution-expiry.js +20 -0
  63. package/.medusa/server/src/jobs/affiliate-consignment-report-reminders.js +15 -0
  64. package/.medusa/server/src/jobs/affiliate-promotion-freshness.js +24 -0
  65. package/.medusa/server/src/lib/query-string.js +15 -0
  66. package/.medusa/server/src/modules/affiliate/domain/affiliate-attribution-policy.js +81 -0
  67. package/.medusa/server/src/modules/affiliate/domain/affiliate-coupon-policy.js +61 -0
  68. package/.medusa/server/src/modules/affiliate/domain/commission-policy.js +33 -0
  69. package/.medusa/server/src/modules/affiliate/domain/consignment-reminder-rules.js +74 -0
  70. package/.medusa/server/src/modules/affiliate/domain/email-normalization.js +20 -0
  71. package/.medusa/server/src/modules/affiliate/domain/own-order-coupon-code.js +37 -0
  72. package/.medusa/server/src/modules/affiliate/domain/plugin-options.js +40 -0
  73. package/.medusa/server/src/modules/affiliate/index.js +13 -0
  74. package/.medusa/server/src/modules/affiliate/migrations/Migration20260827085154.js +423 -0
  75. package/.medusa/server/src/modules/affiliate/models/affiliate-application.js +38 -0
  76. package/.medusa/server/src/modules/affiliate/models/affiliate-cart-referral.js +65 -0
  77. package/.medusa/server/src/modules/affiliate/models/affiliate-code-redemption.js +41 -0
  78. package/.medusa/server/src/modules/affiliate/models/affiliate-coupon.js +55 -0
  79. package/.medusa/server/src/modules/affiliate/models/affiliate-distribution-settings.js +22 -0
  80. package/.medusa/server/src/modules/affiliate/models/affiliate-order-attribution.js +49 -0
  81. package/.medusa/server/src/modules/affiliate/models/affiliate-program-settings.js +28 -0
  82. package/.medusa/server/src/modules/affiliate/models/affiliate-referral-session.js +34 -0
  83. package/.medusa/server/src/modules/affiliate/models/affiliate-slug.js +27 -0
  84. package/.medusa/server/src/modules/affiliate/models/affiliate.js +49 -0
  85. package/.medusa/server/src/modules/affiliate/models/commission-entry.js +62 -0
  86. package/.medusa/server/src/modules/affiliate/models/consignment-report-line.js +21 -0
  87. package/.medusa/server/src/modules/affiliate/models/consignment-report.js +31 -0
  88. package/.medusa/server/src/modules/affiliate/models/consignment-transfer-line.js +16 -0
  89. package/.medusa/server/src/modules/affiliate/models/consignment-transfer.js +20 -0
  90. package/.medusa/server/src/modules/affiliate/models/customer-affiliate-assignment.js +58 -0
  91. package/.medusa/server/src/modules/affiliate/service.js +2321 -0
  92. package/.medusa/server/src/modules/affiliate/services/affiliate-application-manager.js +171 -0
  93. package/.medusa/server/src/modules/affiliate/services/affiliate-coupon-manager.js +441 -0
  94. package/.medusa/server/src/modules/affiliate/services/affiliate-discount.service.js +55 -0
  95. package/.medusa/server/src/modules/affiliate/services/affiliate-manager.js +242 -0
  96. package/.medusa/server/src/modules/affiliate/services/affiliate-partner-portal.service.js +138 -0
  97. package/.medusa/server/src/modules/affiliate/services/affiliate-report.service.js +436 -0
  98. package/.medusa/server/src/modules/affiliate/services/affiliate-slug-manager.js +163 -0
  99. package/.medusa/server/src/modules/affiliate/services/commission-ledger.service.js +729 -0
  100. package/.medusa/server/src/modules/affiliate/services/customer-affiliate-assignment-manager.js +350 -0
  101. package/.medusa/server/src/modules/affiliate/services/order-attribution-manager.js +1051 -0
  102. package/.medusa/server/src/modules/affiliate/services/referral-lifecycle-manager.js +1420 -0
  103. package/.medusa/server/src/modules/affiliate/services/utils.js +49 -0
  104. package/.medusa/server/src/modules/affiliate/types/internal.js +3 -0
  105. package/.medusa/server/src/paths/affiliate.js +7 -0
  106. package/.medusa/server/src/paths/index.js +18 -0
  107. package/.medusa/server/src/schemas/index.js +18 -0
  108. package/.medusa/server/src/schemas/store.js +24 -0
  109. package/.medusa/server/src/subscribers/affiliate-cart-updated.js +92 -0
  110. package/.medusa/server/src/subscribers/affiliate-order-canceled.js +70 -0
  111. package/.medusa/server/src/subscribers/affiliate-order-placed.js +63 -0
  112. package/.medusa/server/src/subscribers/affiliate-order-return-received.js +67 -0
  113. package/.medusa/server/src/subscribers/affiliate-product-eligibility-updated.js +87 -0
  114. package/.medusa/server/src/types/admin-api.js +3 -0
  115. package/.medusa/server/src/types/enums.js +53 -0
  116. package/.medusa/server/src/types/index.js +32 -0
  117. package/.medusa/server/src/types/public.js +3 -0
  118. package/.medusa/server/src/types/store-api.js +3 -0
  119. package/.medusa/server/src/utils/affiliate-cart-operation-lock.js +316 -0
  120. package/.medusa/server/src/utils/affiliate-promotion-mutation-authorization.js +49 -0
  121. package/.medusa/server/src/utils/cart-promotions.js +9 -0
  122. package/.medusa/server/src/utils/money.js +79 -0
  123. package/.medusa/server/src/utils/promotion-code-availability.js +34 -0
  124. package/.medusa/server/src/utils/registered-email-checkout.js +101 -0
  125. package/.medusa/server/src/utils/resolve-services.js +7 -0
  126. package/.medusa/server/src/utils/settle-cart-promotions.js +44 -0
  127. package/.medusa/server/src/workflows/affiliate/affiliate-coupon-cart.js +215 -0
  128. package/.medusa/server/src/workflows/affiliate/affiliate-coupon-command-authorization.js +20 -0
  129. package/.medusa/server/src/workflows/affiliate/apply-affiliate-coupon.js +174 -0
  130. package/.medusa/server/src/workflows/affiliate/apply-own-order-promotion.js +89 -0
  131. package/.medusa/server/src/workflows/affiliate/approve-consignment-report.js +186 -0
  132. package/.medusa/server/src/workflows/affiliate/correct-approved-consignment-report.js +263 -0
  133. package/.medusa/server/src/workflows/affiliate/create-affiliate-coupon.js +35 -0
  134. package/.medusa/server/src/workflows/affiliate/create-commission-correction-for-cancellation.js +21 -0
  135. package/.medusa/server/src/workflows/affiliate/create-commission-correction-for-refund.js +24 -0
  136. package/.medusa/server/src/workflows/affiliate/create-commission-for-order.js +17 -0
  137. package/.medusa/server/src/workflows/affiliate/deactivate-affiliate.js +89 -0
  138. package/.medusa/server/src/workflows/affiliate/enable-distribution.js +120 -0
  139. package/.medusa/server/src/workflows/affiliate/enrich-affiliate-report.js +75 -0
  140. package/.medusa/server/src/workflows/affiliate/ensure-affiliate-coupon-promotion.js +410 -0
  141. package/.medusa/server/src/workflows/affiliate/ensure-affiliate-own-order-promotion.js +240 -0
  142. package/.medusa/server/src/workflows/affiliate/ensure-default-affiliate-coupon.js +32 -0
  143. package/.medusa/server/src/workflows/affiliate/expire-affiliate-attribution-state.js +131 -0
  144. package/.medusa/server/src/workflows/affiliate/finalize-affiliate-order-attribution.js +82 -0
  145. package/.medusa/server/src/workflows/affiliate/payment-authorization.js +33 -0
  146. package/.medusa/server/src/workflows/affiliate/promotion-eligibility.js +179 -0
  147. package/.medusa/server/src/workflows/affiliate/reconcile-affiliate-cart-referral.js +219 -0
  148. package/.medusa/server/src/workflows/affiliate/reconcile-affiliate-coupon.js +388 -0
  149. package/.medusa/server/src/workflows/affiliate/refresh-affiliate-promotions.js +114 -0
  150. package/.medusa/server/src/workflows/affiliate/resolve-coupon-labels.js +40 -0
  151. package/.medusa/server/src/workflows/affiliate/revoke-affiliate-coupon.js +29 -0
  152. package/.medusa/server/src/workflows/affiliate/rotate-affiliate-coupon.js +36 -0
  153. package/.medusa/server/src/workflows/affiliate/run-consignment-report-reminders.js +58 -0
  154. package/.medusa/server/src/workflows/affiliate/submit-consignment-report.js +279 -0
  155. package/.medusa/server/src/workflows/affiliate/transfer-batch-aware-inventory.js +172 -0
  156. package/.medusa/server/src/workflows/affiliate/transfer-consignment-stock.js +106 -0
  157. package/.medusa/server/src/workflows/affiliate/update-affiliate-coupon-discounts.js +129 -0
  158. package/.medusa/server/src/workflows/affiliate/utils.js +118 -0
  159. package/.medusa/server/src/workflows/hooks/complete-cart-affiliate-attribution.js +57 -0
  160. package/.medusa/server/src/workflows/hooks/complete-cart-order-created-composition.js +111 -0
  161. package/.medusa/server/src/workflows/hooks/complete-cart-own-order-discount.js +75 -0
  162. package/.medusa/server/src/workflows/hooks/enforce-unique-promotion-codes.js +33 -0
  163. package/.medusa/server/src/workflows/hooks/validate-affiliate-customer-code.js +239 -0
  164. package/.medusa/server/src/workflows/hooks/validate-complete-cart-affiliate-referral.js +137 -0
  165. package/LICENSE +21 -0
  166. package/README.md +799 -0
  167. package/dist/integration/email-events.d.ts +20 -0
  168. package/dist/integration/email-events.js +50 -0
  169. package/package.json +84 -0
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withQuery = void 0;
4
+ const withQuery = (path, params) => {
5
+ const search = new URLSearchParams();
6
+ for (const [key, value] of Object.entries(params)) {
7
+ if (value !== undefined && value !== null && value !== "") {
8
+ search.set(key, String(value));
9
+ }
10
+ }
11
+ const query = search.toString();
12
+ return query ? `${path}?${query}` : path;
13
+ };
14
+ exports.withQuery = withQuery;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9xdWVyeS1zdHJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU8sTUFBTSxTQUFTLEdBQUcsQ0FDdkIsSUFBWSxFQUNaLE1BQW9FLEVBQzVELEVBQUU7SUFDVixNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFBO0lBRXBDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbEQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzFELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBRS9CLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQzFDLENBQUMsQ0FBQTtBQWZZLFFBQUEsU0FBUyxhQWVyQiJ9
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateAssignmentValidUntil = exports.chooseCheckoutAttribution = exports.isAssignmentValidAt = exports.chooseReferralCandidate = void 0;
4
+ const millisecondsPerDay = 24 * 60 * 60 * 1000;
5
+ const assertNever = (value) => {
6
+ throw new Error(`Unhandled affiliate attribution value: ${value}`);
7
+ };
8
+ const shouldApplyCoupon = (referral) => referral.source === "coupon";
9
+ const chooseReferralCandidate = (input) => {
10
+ if (!input.current) {
11
+ return {
12
+ kind: "captured",
13
+ referral: input.incoming,
14
+ apply_incoming_coupon: shouldApplyCoupon(input.incoming),
15
+ };
16
+ }
17
+ if (input.current.affiliate_id === input.incoming.affiliate_id) {
18
+ return {
19
+ kind: "kept_existing",
20
+ referral: input.current,
21
+ apply_incoming_coupon: shouldApplyCoupon(input.incoming),
22
+ };
23
+ }
24
+ switch (input.overwrite_policy) {
25
+ case "first_touch":
26
+ return {
27
+ kind: "kept_existing",
28
+ referral: input.current,
29
+ apply_incoming_coupon: false,
30
+ };
31
+ case "last_touch":
32
+ return {
33
+ kind: "replaced",
34
+ referral: input.incoming,
35
+ apply_incoming_coupon: shouldApplyCoupon(input.incoming),
36
+ };
37
+ default:
38
+ return assertNever(input.overwrite_policy);
39
+ }
40
+ };
41
+ exports.chooseReferralCandidate = chooseReferralCandidate;
42
+ const isAssignmentValidAt = (assignment, now) => assignment.valid_until === null || assignment.valid_until.getTime() > now.getTime();
43
+ exports.isAssignmentValidAt = isAssignmentValidAt;
44
+ const chooseCheckoutAttribution = (input) => {
45
+ if (input.assignment && (0, exports.isAssignmentValidAt)(input.assignment, input.now)) {
46
+ return {
47
+ kind: "assignment",
48
+ assignment: input.assignment,
49
+ ignore_referral: input.referral !== null &&
50
+ input.referral.affiliate_id !== input.assignment.affiliate_id,
51
+ };
52
+ }
53
+ return input.referral
54
+ ? { kind: "referral", referral: input.referral }
55
+ : { kind: "none" };
56
+ };
57
+ exports.chooseCheckoutAttribution = chooseCheckoutAttribution;
58
+ const calculateAssignmentValidUntil = (input) => {
59
+ if (input.existing_assignment) {
60
+ return input.existing_assignment.valid_until;
61
+ }
62
+ switch (input.customer_assignment_mode) {
63
+ case "lifetime":
64
+ return null;
65
+ case "time_limited": {
66
+ if (input.assignment_duration_days === null ||
67
+ !Number.isInteger(input.assignment_duration_days) ||
68
+ input.assignment_duration_days <= 0) {
69
+ throw new Error("time_limited assignments require a positive integer duration.");
70
+ }
71
+ return new Date(input.assigned_at.getTime() +
72
+ input.assignment_duration_days * millisecondsPerDay);
73
+ }
74
+ case "order_only":
75
+ return undefined;
76
+ default:
77
+ return assertNever(input.customer_assignment_mode);
78
+ }
79
+ };
80
+ exports.calculateAssignmentValidUntil = calculateAssignmentValidUntil;
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaWxpYXRlLWF0dHJpYnV0aW9uLXBvbGljeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2FmZmlsaWF0ZS9kb21haW4vYWZmaWxpYXRlLWF0dHJpYnV0aW9uLXBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE0QkEsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUE7QUFFOUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFZLEVBQVMsRUFBRTtJQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0FBQ3BFLENBQUMsQ0FBQTtBQUVELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUEyQixFQUFXLEVBQUUsQ0FDakUsUUFBUSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUE7QUFFdkIsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBSXZDLEVBQThCLEVBQUU7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLHFCQUFxQixFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7U0FDekQsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0QsT0FBTztZQUNMLElBQUksRUFBRSxlQUFlO1lBQ3JCLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTztZQUN2QixxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1NBQ3pELENBQUE7SUFDSCxDQUFDO0lBRUQsUUFBUSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUs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
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isAffiliateCouponRedeemable = exports.getAffiliateCouponWireStatus = exports.isAffiliateCouponRotationSource = exports.countLogicalEnabledAffiliateCouponSlots = exports.generateAffiliateCouponCode = exports.normalizeAffiliateCouponCode = exports.AFFILIATE_COUPON_CODE_ALPHABET = exports.AFFILIATE_COUPON_CODE_LENGTH = exports.AFFILIATE_COUPON_CODE_GENERATION_MAX_ATTEMPTS = exports.MAX_ENABLED_COUPONS_PER_AFFILIATE = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ exports.MAX_ENABLED_COUPONS_PER_AFFILIATE = 5;
6
+ exports.AFFILIATE_COUPON_CODE_GENERATION_MAX_ATTEMPTS = 5;
7
+ exports.AFFILIATE_COUPON_CODE_LENGTH = 8;
8
+ exports.AFFILIATE_COUPON_CODE_ALPHABET = "ABCDEFGHJKMNPQRSTVWXYZ23456789";
9
+ const affiliateCouponCodePattern = /^[A-Z0-9][A-Z0-9-]{2,31}$/;
10
+ const affiliateCouponInputPattern = /^[A-Za-z0-9][A-Za-z0-9-]{2,31}$/;
11
+ const normalizeAffiliateCouponCode = (value) => {
12
+ const trimmed = value.trim();
13
+ const code = trimmed.toUpperCase();
14
+ if (!affiliateCouponInputPattern.test(trimmed) ||
15
+ !affiliateCouponCodePattern.test(code)) {
16
+ throw new Error("Affiliate coupon codes must contain 3 to 32 uppercase letters, digits, or hyphens and start with a letter or digit.");
17
+ }
18
+ return code;
19
+ };
20
+ exports.normalizeAffiliateCouponCode = normalizeAffiliateCouponCode;
21
+ const generateAffiliateCouponCode = (randomIndex = node_crypto_1.randomInt) => {
22
+ let code = "";
23
+ while (code.length < exports.AFFILIATE_COUPON_CODE_LENGTH) {
24
+ const index = randomIndex(exports.AFFILIATE_COUPON_CODE_ALPHABET.length);
25
+ if (!Number.isInteger(index) ||
26
+ index < 0 ||
27
+ index >= exports.AFFILIATE_COUPON_CODE_ALPHABET.length) {
28
+ throw new Error("The affiliate coupon random source returned an invalid index.");
29
+ }
30
+ code += exports.AFFILIATE_COUPON_CODE_ALPHABET[index];
31
+ }
32
+ return code;
33
+ };
34
+ exports.generateAffiliateCouponCode = generateAffiliateCouponCode;
35
+ const countLogicalEnabledAffiliateCouponSlots = (coupons) => {
36
+ const enabledIds = new Set(coupons
37
+ .filter(({ lifecycle_status }) => lifecycle_status === "enabled")
38
+ .map(({ id }) => id));
39
+ return coupons.filter((coupon) => coupon.lifecycle_status === "enabled" &&
40
+ (!coupon.replaces_coupon_id || !enabledIds.has(coupon.replaces_coupon_id))).length;
41
+ };
42
+ exports.countLogicalEnabledAffiliateCouponSlots = countLogicalEnabledAffiliateCouponSlots;
43
+ const isAffiliateCouponRotationSource = (coupon) => coupon.lifecycle_status === "enabled" &&
44
+ coupon.provisioning_status === "ready";
45
+ exports.isAffiliateCouponRotationSource = isAffiliateCouponRotationSource;
46
+ const getAffiliateCouponWireStatus = (coupon, affiliateStatus) => {
47
+ if (coupon.lifecycle_status === "revoked") {
48
+ return "revoked";
49
+ }
50
+ if (coupon.provisioning_status === "pending") {
51
+ return "provisioning";
52
+ }
53
+ if (coupon.provisioning_status === "failed") {
54
+ return "provisioning_failed";
55
+ }
56
+ return affiliateStatus === "active" ? "active" : "affiliate_inactive";
57
+ };
58
+ exports.getAffiliateCouponWireStatus = getAffiliateCouponWireStatus;
59
+ const isAffiliateCouponRedeemable = (coupon, affiliateStatus) => (0, exports.getAffiliateCouponWireStatus)(coupon, affiliateStatus) === "active";
60
+ exports.isAffiliateCouponRedeemable = isAffiliateCouponRedeemable;
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaWxpYXRlLWNvdXBvbi1wb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hZmZpbGlhdGUvZG9tYWluL2FmZmlsaWF0ZS1jb3Vwb24tcG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF1QztBQU8xQixRQUFBLGlDQUFpQyxHQUFHLENBQUMsQ0FBQTtBQUNyQyxRQUFBLDZDQUE2QyxHQUFHLENBQUMsQ0FBQTtBQUNqRCxRQUFBLDRCQUE0QixHQUFHLENBQUMsQ0FBQTtBQUNoQyxRQUFBLDhCQUE4QixHQUN6QyxnQ0FBZ0MsQ0FBQTtBQUVsQyxNQUFNLDBCQUEwQixHQUFHLDJCQUEyQixDQUFBO0FBQzlELE1BQU0sMkJBQTJCLEdBQUcsaUNBQWlDLENBQUE7QUFTOUQsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFO0lBQ3BFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUE7SUFFbEMsSUFDRSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUMsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3RDLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHFIQUFxSCxDQUN0SCxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyxDQUFBO0FBZFksUUFBQSw0QkFBNEIsZ0NBY3hDO0FBRU0sTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxjQUF1Qyx1QkFBUyxFQUN4QyxFQUFFO0lBQ1YsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRWIsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLG9DQUE0QixFQUFFLENBQUM7UUFDbEQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLHNDQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2hFLElBQ0UsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUN4QixLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssSUFBSSxzQ0FBOEIsQ0FBQyxNQUFNLEVBQzlDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUE7UUFDbEYsQ0FBQztRQUNELElBQUksSUFBSSxzQ0FBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUE7QUFsQlksUUFBQSwyQkFBMkIsK0JBa0J2QztBQUVNLE1BQU0sdUNBQXVDLEdBQUcsQ0FDckQsT0FHRyxFQUNLLEVBQUU7SUFDVixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FDeEIsT0FBTztTQUNKLE1BQU0sQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxDQUFDO1NBQ2hFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUN2QixDQUFBO0lBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNuQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1QsTUFBTSxDQUFDLGdCQUFnQixLQUFLLFNBQVM7UUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FDN0UsQ0FBQyxNQUFNLENBQUE7QUFDVixDQUFDLENBQUE7QUFqQlksUUFBQSx1Q0FBdUMsMkNBaUJuRDtBQUVNLE1BQU0sK0JBQStCLEdBQUcsQ0FDN0MsTUFHQyxFQUNRLEVBQUUsQ0FDWCxNQUFNLENBQUMsZ0JBQWdCLEtBQUssU0FBUztJQUNyQyxNQUFNLENBQUMsbUJBQW1CLEtBQUssT0FBTyxDQUFBO0FBUDNCLFFBQUEsK0JBQStCLG1DQU9KO0FBRWpDLE1BQU0sNEJBQTRCLEdBQUcsQ0FDMUMsTUFHQyxFQUNELGVBQWdDLEVBQ0wsRUFBRTtJQUM3QixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0MsT0FBTyxjQUFjLENBQUE7SUFDdkIsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLG1CQUFtQixLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVDLE9BQU8scUJBQXFCLENBQUE7SUFDOUIsQ0FBQztJQUNELE9BQU8sZUFBZSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQTtBQUN2RSxDQUFDLENBQUE7QUFqQlksUUFBQSw0QkFBNEIsZ0NBaUJ4QztBQUVNLE1BQU0sMkJBQTJCLEdBQUcsQ0FDekMsTUFHQyxFQUNELGVBQWdDLEVBQ3ZCLEVBQUUsQ0FBQyxJQUFBLG9DQUE0QixFQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsS0FBSyxRQUFRLENBQUE7QUFObkUsUUFBQSwyQkFBMkIsK0JBTXdDIn0=
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateCommissionBreakdown = void 0;
4
+ const money_1 = require("../../../utils/money");
5
+ const calculateCommissionBreakdown = (input) => {
6
+ const decimals = (0, money_1.getCurrencyDecimals)(input.currency_code);
7
+ const undiscounted = money_1.Money.of(input.undiscounted_net_amount);
8
+ const discounted = money_1.Money.of(input.discounted_net_amount);
9
+ const orderBase = input.policy.commission_base === "before_discounts"
10
+ ? undiscounted
11
+ : discounted;
12
+ const direct = money_1.Money.of(orderBase.applyPercentageRate(input.direct_rate).toRoundedNumber(decimals));
13
+ const referrerBase = input.policy.referrer_base === "after_direct_commission"
14
+ ? orderBase.subtract(direct).max(money_1.Money.zero())
15
+ : orderBase;
16
+ return {
17
+ policy_version: input.policy.version,
18
+ undiscounted_net_amount: undiscounted.toRoundedNumber(decimals),
19
+ discounted_net_amount: discounted.toRoundedNumber(decimals),
20
+ discount_amount: undiscounted
21
+ .subtract(discounted)
22
+ .max(money_1.Money.zero())
23
+ .toRoundedNumber(decimals),
24
+ order_base: orderBase.toRoundedNumber(decimals),
25
+ direct_commission_amount: direct.toRoundedNumber(decimals),
26
+ referrer_base: referrerBase.toRoundedNumber(decimals),
27
+ referrer_commission_amount: referrerBase
28
+ .applyPercentageRate(input.referrer_rate)
29
+ .toRoundedNumber(decimals),
30
+ };
31
+ };
32
+ exports.calculateCommissionBreakdown = calculateCommissionBreakdown;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWlzc2lvbi1wb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hZmZpbGlhdGUvZG9tYWluL2NvbW1pc3Npb24tcG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLGdEQUFpRTtBQThCMUQsTUFBTSw0QkFBNEIsR0FBRyxDQUMxQyxLQUF3QyxFQUNuQixFQUFFO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUEsMkJBQW1CLEVBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sWUFBWSxHQUFHLGFBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7SUFDNUQsTUFBTSxVQUFVLEdBQUcsYUFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUN4RCxNQUFNLFNBQVMsR0FDYixLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsS0FBSyxrQkFBa0I7UUFDakQsQ0FBQyxDQUFDLFlBQVk7UUFDZCxDQUFDLENBQUMsVUFBVSxDQUFBO0lBQ2hCLE1BQU0sTUFBTSxHQUFHLGFBQUssQ0FBQyxFQUFFLENBQ3JCLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUMzRSxDQUFBO0lBQ0QsTUFBTSxZQUFZLEdBQ2hCLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLHlCQUF5QjtRQUN0RCxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFFZixPQUFPO1FBQ0wsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTztRQUNwQyx1QkFBdUIsRUFBRSxZQUFZLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUMvRCxxQkFBcUIsRUFBRSxVQUFVLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxlQUFlLEVBQUUsWUFBWTthQUMxQixRQUFRLENBQUMsVUFBVSxDQUFDO2FBQ3BCLEdBQUcsQ0FBQyxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDakIsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUM1QixVQUFVLEVBQUUsU0FBUyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDL0Msd0JBQXdCLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDMUQsYUFBYSxFQUFFLFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO1FBQ3JELDBCQUEwQixFQUFFLFlBQVk7YUFDckMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQzthQUN4QyxlQUFlLENBQUMsUUFBUSxDQUFDO0tBQzdCLENBQUE7QUFDSCxDQUFDLENBQUE7QUFqQ1ksUUFBQSw0QkFBNEIsZ0NBaUN4QyJ9
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveAffiliateConsignmentReminderOptions = resolveAffiliateConsignmentReminderOptions;
4
+ exports.getDueConsignmentPeriod = getDueConsignmentPeriod;
5
+ exports.getConsignmentReminderDueDate = getConsignmentReminderDueDate;
6
+ exports.assertConsignmentPeriod = assertConsignmentPeriod;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ function resolveAffiliateConsignmentReminderOptions(input = {}) {
9
+ const dueDay = input.due_day ?? 10;
10
+ const timezone = input.timezone ?? "UTC";
11
+ if (!Number.isInteger(dueDay) || dueDay < 1 || dueDay > 28) {
12
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "consignment_reminders.due_day must be an integer from 1 to 28.");
13
+ }
14
+ try {
15
+ new Intl.DateTimeFormat("en", { timeZone: timezone }).format(new Date());
16
+ }
17
+ catch {
18
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "consignment_reminders.timezone must be a valid IANA timezone.");
19
+ }
20
+ return {
21
+ due_day: dueDay,
22
+ timezone,
23
+ };
24
+ }
25
+ function localCalendarParts(now, timezone) {
26
+ const parts = new Intl.DateTimeFormat("en-CA", {
27
+ timeZone: timezone,
28
+ year: "numeric",
29
+ month: "2-digit",
30
+ day: "2-digit",
31
+ }).formatToParts(now);
32
+ const value = (type) => {
33
+ const part = parts.find((candidate) => candidate.type === type)?.value;
34
+ return Number(part);
35
+ };
36
+ return { year: value("year"), month: value("month"), day: value("day") };
37
+ }
38
+ function getDueConsignmentPeriod(input) {
39
+ const options = resolveAffiliateConsignmentReminderOptions({
40
+ due_day: input.due_day,
41
+ timezone: input.timezone,
42
+ });
43
+ if (Number.isNaN(input.now.getTime())) {
44
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "now is invalid.");
45
+ }
46
+ const local = localCalendarParts(input.now, options.timezone);
47
+ // The bundled scanner runs at 06:00 UTC. Do not make a manual invocation in
48
+ // the late UTC evening of the preceding date pre-empt the next daily run
49
+ // merely because an eastern timezone has crossed midnight already.
50
+ if (local.day < options.due_day ||
51
+ input.now.getUTCDate() < options.due_day) {
52
+ return null;
53
+ }
54
+ const previous = new Date(Date.UTC(local.year, local.month - 2, 1));
55
+ return previous.toISOString().slice(0, 10);
56
+ }
57
+ function getConsignmentReminderDueDate(input) {
58
+ if (!/^\d{4}-\d{2}-01$/.test(input.period_start)) {
59
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "period_start must be the first day of a calendar month.");
60
+ }
61
+ const period = new Date(`${input.period_start}T00:00:00.000Z`);
62
+ if (Number.isNaN(period.getTime()) ||
63
+ period.toISOString().slice(0, 10) !== input.period_start) {
64
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "period_start is invalid.");
65
+ }
66
+ resolveAffiliateConsignmentReminderOptions({ due_day: input.due_day });
67
+ return new Date(Date.UTC(period.getUTCFullYear(), period.getUTCMonth() + 1, input.due_day))
68
+ .toISOString()
69
+ .slice(0, 10);
70
+ }
71
+ function assertConsignmentPeriod(periodStart) {
72
+ getConsignmentReminderDueDate({ period_start: periodStart, due_day: 1 });
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2lnbm1lbnQtcmVtaW5kZXItcnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hZmZpbGlhdGUvZG9tYWluL2NvbnNpZ25tZW50LXJlbWluZGVyLXJ1bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBWUEsZ0dBeUJDO0FBb0JELDBEQXdCQztBQUVELHNFQThCQztBQUVELDBEQUVDO0FBckhELHFEQUF1RDtBQVl2RCxTQUFnQiwwQ0FBMEMsQ0FDeEQsUUFBNkMsRUFBRTtJQUUvQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNsQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQTtJQUV4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUMzRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixnRUFBZ0UsQ0FDakUsQ0FBQTtJQUNILENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsK0RBQStELENBQ2hFLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNO1FBQ2YsUUFBUTtLQUNULENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxHQUFTLEVBQUUsUUFBZ0I7SUFLckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRTtRQUM3QyxRQUFRLEVBQUUsUUFBUTtRQUNsQixJQUFJLEVBQUUsU0FBUztRQUNmLEtBQUssRUFBRSxTQUFTO1FBQ2hCLEdBQUcsRUFBRSxTQUFTO0tBQ2YsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNyQixNQUFNLEtBQUssR0FBRyxDQUFDLElBQWtDLEVBQVUsRUFBRTtRQUMzRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQTtRQUN0RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNyQixDQUFDLENBQUE7SUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQTtBQUMxRSxDQUFDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsS0FJdkM7SUFDQyxNQUFNLE9BQU8sR0FBRywwQ0FBMEMsQ0FBQztRQUN6RCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO0tBQ3pCLENBQUMsQ0FBQTtJQUNGLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0QsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSxtRUFBbUU7SUFDbkUsSUFDRSxLQUFLLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFDeEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ25FLE9BQU8sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDNUMsQ0FBQztBQUVELFNBQWdCLDZCQUE2QixDQUFDLEtBRzdDO0lBQ0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5REFBeUQsQ0FDMUQsQ0FBQTtJQUNILENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxZQUFZLGdCQUFnQixDQUFDLENBQUE7SUFDOUQsSUFDRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QixNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsWUFBWSxFQUN4RCxDQUFDO1FBQ0QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsMEJBQTBCLENBQzNCLENBQUE7SUFDSCxDQUFDO0lBQ0QsMENBQTBDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDdEUsT0FBTyxJQUFJLElBQUksQ0FDYixJQUFJLENBQUMsR0FBRyxDQUNOLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFDdkIsTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FDZCxDQUNGO1NBQ0UsV0FBVyxFQUFFO1NBQ2IsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUNqQixDQUFDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsV0FBbUI7SUFDekQsNkJBQTZCLENBQUMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQzFFLENBQUMifQ==
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeAffiliateEmail = normalizeAffiliateEmail;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ /**
6
+ * Affiliate identities deliberately use provider-agnostic normalization.
7
+ * Plus tags and dots can identify different mailboxes outside a single
8
+ * provider, so only surrounding whitespace and casing are normalized.
9
+ */
10
+ function normalizeAffiliateEmail(value) {
11
+ const normalized = value.trim().toLowerCase();
12
+ if (!normalized ||
13
+ !normalized.includes("@") ||
14
+ normalized.startsWith("@") ||
15
+ normalized.endsWith("@")) {
16
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "A valid email is required to use an affiliate code.");
17
+ }
18
+ return normalized;
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtbm9ybWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2FmZmlsaWF0ZS9kb21haW4vZW1haWwtbm9ybWFsaXphdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLDBEQWdCQztBQXZCRCxxREFBdUQ7QUFFdkQ7Ozs7R0FJRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEtBQWE7SUFDbkQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBRTdDLElBQ0UsQ0FBQyxVQUFVO1FBQ1gsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUN6QixVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUMxQixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUN4QixDQUFDO1FBQ0QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscURBQXFELENBQ3RELENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQyJ9
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseAffiliateOwnOrderCouponCode = void 0;
4
+ /**
5
+ * Matches the code format generated in
6
+ * `../../../workflows/affiliate/ensure-affiliate-own-order-promotion.ts`:
7
+ * `` `AFFILIATE-OWN-${affiliate.id}-${affiliate.customer_id}`.toUpperCase() ``.
8
+ * Purely a display-layer concern (see `resolve-coupon-labels.ts`) - this
9
+ * does not change what the code actually is, only how it gets labeled.
10
+ */
11
+ const OWN_ORDER_COUPON_CODE_PATTERN = /^AFFILIATE-OWN-(AFF_[0-9A-Z]+)-(CUS_[0-9A-Z]+)$/;
12
+ /**
13
+ * `.toUpperCase()` only altered the "aff_"/"cus_" prefixes when the code was
14
+ * generated - Medusa entity ids are `<lowercase prefix>_<ULID>`, and ULIDs
15
+ * (from the `ulid` package) are already uppercase Crockford base32. Restoring
16
+ * the original id therefore only needs the segment before the first
17
+ * underscore lowercased back, not the whole string.
18
+ */
19
+ const restoreEntityIdCasing = (value) => {
20
+ const separatorIndex = value.indexOf("_");
21
+ if (separatorIndex === -1) {
22
+ return value.toLowerCase();
23
+ }
24
+ return `${value.slice(0, separatorIndex).toLowerCase()}${value.slice(separatorIndex)}`;
25
+ };
26
+ const parseAffiliateOwnOrderCouponCode = (code) => {
27
+ const match = OWN_ORDER_COUPON_CODE_PATTERN.exec(code.trim().toUpperCase());
28
+ if (!match) {
29
+ return null;
30
+ }
31
+ return {
32
+ affiliateId: restoreEntityIdCasing(match[1]),
33
+ customerId: restoreEntityIdCasing(match[2]),
34
+ };
35
+ };
36
+ exports.parseAffiliateOwnOrderCouponCode = parseAffiliateOwnOrderCouponCode;
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3duLW9yZGVyLWNvdXBvbi1jb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvYWZmaWxpYXRlL2RvbWFpbi9vd24tb3JkZXItY291cG9uLWNvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSw2QkFBNkIsR0FDakMsaURBQWlELENBQUE7QUFPbkQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFO0lBQ3RELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDekMsSUFBSSxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBRUQsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQTtBQUN4RixDQUFDLENBQUE7QUFFTSxNQUFNLGdDQUFnQyxHQUFHLENBQzlDLElBQVksRUFDOEIsRUFBRTtJQUM1QyxNQUFNLEtBQUssR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFFM0UsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsT0FBTztRQUNMLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1QyxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBYlksUUFBQSxnQ0FBZ0Msb0NBYTVDIn0=
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveAffiliatePluginOptions = resolveAffiliatePluginOptions;
4
+ exports.buildReferralUrl = buildReferralUrl;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const consignment_reminder_rules_1 = require("./consignment-reminder-rules");
7
+ const INVALID_REFERRAL_BASE_URL = "portal.referral_base_url must be an absolute HTTP(S) URL.";
8
+ function resolveAffiliatePluginOptions(input = {}) {
9
+ const enabled = input.portal?.enabled ?? false;
10
+ const configuredBaseUrl = input.portal?.referral_base_url;
11
+ const referralBaseUrl = typeof configuredBaseUrl === "string" ? configuredBaseUrl.trim() : null;
12
+ if (enabled) {
13
+ let valid = false;
14
+ try {
15
+ const parsed = new URL(referralBaseUrl ?? "");
16
+ valid =
17
+ (parsed.protocol === "http:" || parsed.protocol === "https:") &&
18
+ Boolean(parsed.hostname);
19
+ }
20
+ catch {
21
+ // The common invalid-data error below intentionally covers every form.
22
+ }
23
+ if (!valid) {
24
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, INVALID_REFERRAL_BASE_URL);
25
+ }
26
+ }
27
+ return {
28
+ consignment_reminders: (0, consignment_reminder_rules_1.resolveAffiliateConsignmentReminderOptions)(input.consignment_reminders),
29
+ portal: {
30
+ enabled,
31
+ referral_base_url: referralBaseUrl,
32
+ },
33
+ };
34
+ }
35
+ function buildReferralUrl(baseUrl, slug) {
36
+ const url = new URL(baseUrl);
37
+ url.searchParams.set("ref", slug);
38
+ return url.toString();
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hZmZpbGlhdGUvZG9tYWluL3BsdWdpbi1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkJBLHNFQXFDQztBQUVELDRDQUlDO0FBdEVELHFEQUF1RDtBQUV2RCw2RUFJcUM7QUFrQnJDLE1BQU0seUJBQXlCLEdBQzdCLDJEQUEyRCxDQUFBO0FBRTdELFNBQWdCLDZCQUE2QixDQUMzQyxRQUFnQyxFQUFFO0lBRWxDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQTtJQUM5QyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUE7SUFDekQsTUFBTSxlQUFlLEdBQ25CLE9BQU8saUJBQWlCLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBRXpFLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUE7UUFFakIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQzdDLEtBQUs7Z0JBQ0gsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztvQkFDN0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM1QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsdUVBQXVFO1FBQ3pFLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5QkFBeUIsQ0FDMUIsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLHFCQUFxQixFQUFFLElBQUEsdUVBQTBDLEVBQy9ELEtBQUssQ0FBQyxxQkFBcUIsQ0FDNUI7UUFDRCxNQUFNLEVBQUU7WUFDTixPQUFPO1lBQ1AsaUJBQWlCLEVBQUUsZUFBZTtTQUNuQztLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLElBQVk7SUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ2pDLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ3ZCLENBQUMifQ==
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AFFILIATE_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const service_1 = __importDefault(require("./service"));
9
+ exports.AFFILIATE_MODULE = "affiliate";
10
+ exports.default = (0, utils_1.Module)(exports.AFFILIATE_MODULE, {
11
+ service: service_1.default,
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9hZmZpbGlhdGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscURBQWtEO0FBRWxELHdEQUE4QztBQUVqQyxRQUFBLGdCQUFnQixHQUFHLFdBQVcsQ0FBQTtBQUUzQyxrQkFBZSxJQUFBLGNBQU0sRUFBQyx3QkFBZ0IsRUFBRTtJQUN0QyxPQUFPLEVBQUUsaUJBQXNCO0NBQ2hDLENBQUMsQ0FBQSJ9