@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,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deactivateAffiliateWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
+ const utils_2 = require("@medusajs/framework/utils");
8
+ const resolve_services_1 = require("../../utils/resolve-services");
9
+ const cart_promotions_1 = require("../../utils/cart-promotions");
10
+ const affiliate_cart_operation_lock_1 = require("../../utils/affiliate-cart-operation-lock");
11
+ const reconcile_affiliate_coupon_1 = require("./reconcile-affiliate-coupon");
12
+ const settle_cart_promotions_1 = require("../../utils/settle-cart-promotions");
13
+ const deactivateAffiliateStateStep = (0, workflows_sdk_1.createStep)("deactivate-affiliate-state", async (input, { container }) => {
14
+ const result = await (0, affiliate_cart_operation_lock_1.withAffiliateOperationLocks)(container, [
15
+ (0, affiliate_cart_operation_lock_1.affiliateProgramSagaLockKey)(),
16
+ (0, affiliate_cart_operation_lock_1.affiliateSagaLockKey)(input.affiliate_id),
17
+ ], async () => await (0, resolve_services_1.resolveAffiliateService)(container).deactivateAffiliateState({
18
+ affiliate_id: input.affiliate_id,
19
+ now: input.now ? new Date(input.now) : undefined,
20
+ update: input.update,
21
+ }));
22
+ return new workflows_sdk_1.StepResponse(result);
23
+ });
24
+ const removeAffiliatePromotionFromOpenCartsStep = (0, workflows_sdk_1.createStep)("remove-affiliate-promotion-from-open-carts", async (input, { container }) => {
25
+ const query = container.resolve(utils_2.ContainerRegistrationKeys.QUERY);
26
+ // This deliberately has no compensation: the module invalidation is the
27
+ // safety boundary. If a core cart refresh fails, checkout remains blocked
28
+ // by the invalidated referral until this removal is retried.
29
+ const failures = [];
30
+ for (const cartId of input.open_cart_ids) {
31
+ const promotionIds = new Set(input.open_cart_referrals
32
+ .filter((referral) => referral.cart_id === cartId)
33
+ .map((referral) => referral.applied_promotion_id)
34
+ .filter((id) => Boolean(id)));
35
+ if (!promotionIds.size)
36
+ continue;
37
+ try {
38
+ await (0, affiliate_cart_operation_lock_1.withAffiliateCartOperationLock)(container, cartId, async () => {
39
+ const { data } = await query.graph({
40
+ entity: "cart",
41
+ fields: ["id", "promotions.id", "promotions.code"],
42
+ filters: { id: cartId },
43
+ });
44
+ const cart = data[0];
45
+ const codes = (0, cart_promotions_1.readCartPromotions)(cart?.promotions)
46
+ .filter((promotion) => promotionIds.has(promotion.id))
47
+ .map((promotion) => promotion.code)
48
+ .filter((code) => Boolean(code));
49
+ if (!codes.length)
50
+ return;
51
+ await (0, core_flows_1.updateCartPromotionsWorkflow)(container).run({
52
+ input: {
53
+ cart_id: cartId,
54
+ promo_codes: [...new Set(codes)],
55
+ action: utils_1.PromotionActions.REMOVE,
56
+ force_refresh_payment_collection: true,
57
+ },
58
+ });
59
+ // Removing these codes changes item_total; settle so any other
60
+ // total-dependent automatic promotion re-evaluates against the
61
+ // now-accurate cart instead of the pre-removal snapshot.
62
+ await (0, settle_cart_promotions_1.settleCartPromotions)(container, cartId);
63
+ });
64
+ }
65
+ catch (error) {
66
+ failures.push(error);
67
+ }
68
+ }
69
+ if (!failures.length) {
70
+ try {
71
+ await (0, reconcile_affiliate_coupon_1.reconcileAffiliateCouponsForAffiliate)(container, input.affiliate.id);
72
+ }
73
+ catch (error) {
74
+ failures.push(error);
75
+ }
76
+ }
77
+ if (failures.length === 1)
78
+ throw failures[0];
79
+ if (failures.length) {
80
+ throw new AggregateError(failures, "Affiliate deactivation cleanup failed");
81
+ }
82
+ return new workflows_sdk_1.StepResponse(input.affiliate);
83
+ });
84
+ exports.deactivateAffiliateWorkflow = (0, workflows_sdk_1.createWorkflow)("deactivate-affiliate", (input) => {
85
+ const deactivated = deactivateAffiliateStateStep(input);
86
+ const affiliate = removeAffiliatePromotionFromOpenCartsStep(deactivated);
87
+ return new workflows_sdk_1.WorkflowResponse(affiliate);
88
+ });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVhY3RpdmF0ZS1hZmZpbGlhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2FmZmlsaWF0ZS9kZWFjdGl2YXRlLWFmZmlsaWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFLMEM7QUFDMUMscURBQTREO0FBQzVELDREQUEwRTtBQUMxRSxxREFBcUU7QUFFckUsbUVBQXNFO0FBQ3RFLGlFQUFnRTtBQUdoRSw2RkFLa0Q7QUFDbEQsNkVBQW9GO0FBQ3BGLCtFQUF5RTtBQWlCekUsTUFBTSw0QkFBNEIsR0FBRyxJQUFBLDBCQUFVLEVBQzdDLDRCQUE0QixFQUM1QixLQUFLLEVBQUUsS0FBdUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDL0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLDJEQUEyQixFQUM5QyxTQUFTLEVBQ1Q7UUFDRSxJQUFBLDJEQUEyQixHQUFFO1FBQzdCLElBQUEsb0RBQW9CLEVBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztLQUN6QyxFQUNELEtBQUssSUFBSSxFQUFFLENBQ1QsTUFBTSxJQUFBLDBDQUF1QixFQUFDLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO1FBQ2hFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtRQUNoQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2hELE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtLQUNyQixDQUFDLENBQ0wsQ0FBQTtJQUNELE9BQU8sSUFBSSw0QkFBWSxDQUFDLE1BQXFDLENBQUMsQ0FBQTtBQUNoRSxDQUFDLENBQ0YsQ0FBQTtBQUVELE1BQU0seUNBQXlDLEdBQUcsSUFBQSwwQkFBVSxFQUMxRCw0Q0FBNEMsRUFDNUMsS0FBSyxFQUFFLEtBQTJCLEVBQUUs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
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enableAffiliateDistributionWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
+ const resolve_services_1 = require("../../utils/resolve-services");
8
+ const ensure_affiliate_own_order_promotion_1 = require("./ensure-affiliate-own-order-promotion");
9
+ const validateDistributionActivationStep = (0, workflows_sdk_1.createStep)("affiliate-validate-distribution-activation", async (input, { container }) => {
10
+ const affiliateService = (0, resolve_services_1.resolveAffiliateService)(container);
11
+ const regionService = container.resolve(utils_1.Modules.REGION);
12
+ const fulfillmentService = container.resolve(utils_1.Modules.FULFILLMENT);
13
+ const affiliate = await affiliateService.retrieveAffiliateRecord(input.affiliate_id);
14
+ if (affiliate.status !== "active" || !affiliate.customer_id) {
15
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Kommissionsvertrieb benötigt einen aktiven Affiliate mit Kundenkonto.");
16
+ }
17
+ await Promise.all([
18
+ regionService.retrieveRegion(input.region_id),
19
+ fulfillmentService.retrieveShippingOption(input.shipping_option_id),
20
+ ]);
21
+ const existing = await affiliateService.getAffiliateDistributionSettings(affiliate.id);
22
+ return new workflows_sdk_1.StepResponse({ affiliate, existing });
23
+ });
24
+ const saveDistributionSettingsStep = (0, workflows_sdk_1.createStep)("affiliate-save-distribution-settings", async (input, { container }) => {
25
+ const result = await (0, resolve_services_1.resolveAffiliateService)(container).saveAffiliateDistributionSettings(input);
26
+ return new workflows_sdk_1.StepResponse(result.settings, {
27
+ id: result.settings.id,
28
+ created: result.created,
29
+ previous: result.previous,
30
+ });
31
+ }, async (compensation, { container }) => {
32
+ if (!compensation) {
33
+ return;
34
+ }
35
+ await (0, resolve_services_1.resolveAffiliateService)(container).compensateAffiliateDistributionSettings(compensation);
36
+ });
37
+ const resolveDistributionResourcesStep = (0, workflows_sdk_1.createStep)("affiliate-resolve-distribution-resources", async (input) => {
38
+ const stockLocationId = input.preparation.existing?.stock_location_id ??
39
+ input.createdLocations?.[0]?.id;
40
+ const salesChannelId = input.preparation.existing?.internal_sales_channel_id ??
41
+ input.createdChannels?.[0]?.id;
42
+ if (!stockLocationId || !salesChannelId) {
43
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Die internen Vertriebsressourcen konnten nicht bereitgestellt werden.");
44
+ }
45
+ return new workflows_sdk_1.StepResponse({
46
+ stock_location_id: stockLocationId,
47
+ internal_sales_channel_id: salesChannelId,
48
+ created: !input.preparation.existing,
49
+ });
50
+ });
51
+ const buildDistributionSettingsInputStep = (0, workflows_sdk_1.createStep)("affiliate-build-distribution-settings-input", async (input) => {
52
+ if (!input.promotedAffiliate.own_order_promotion_id) {
53
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Die Eigenbestellungs-Promotion des Affiliates konnte nicht eingerichtet werden.");
54
+ }
55
+ return new workflows_sdk_1.StepResponse({
56
+ affiliate_id: input.input.affiliate_id,
57
+ stock_location_id: input.resources.stock_location_id,
58
+ internal_sales_channel_id: input.resources.internal_sales_channel_id,
59
+ region_id: input.input.region_id,
60
+ shipping_option_id: input.input.shipping_option_id,
61
+ own_order_promotion_id: input.promotedAffiliate.own_order_promotion_id,
62
+ });
63
+ });
64
+ exports.enableAffiliateDistributionWorkflow = (0, workflows_sdk_1.createWorkflow)("affiliate-enable-distribution", (input) => {
65
+ const lockKey = (0, workflows_sdk_1.transform)(input, (data) => `affiliate-distribution:${data.affiliate_id}`);
66
+ (0, core_flows_1.acquireLockStep)({ key: lockKey, timeout: 10, ttl: 60 });
67
+ const preparation = validateDistributionActivationStep(input);
68
+ const names = (0, workflows_sdk_1.transform)(preparation, ({ affiliate }) => ({
69
+ stock_location: `Kommissionslager – ${affiliate.display_name}`,
70
+ sales_channel: `Kommission intern – ${affiliate.display_name}`,
71
+ }));
72
+ const createdLocations = (0, workflows_sdk_1.when)("affiliate-create-distribution-location", { preparation }, ({ preparation }) => !preparation.existing).then(() => core_flows_1.createStockLocationsWorkflow.runAsStep({
73
+ input: {
74
+ locations: [{ name: names.stock_location }],
75
+ },
76
+ }));
77
+ const createdChannels = (0, workflows_sdk_1.when)("affiliate-create-distribution-channel", { preparation }, ({ preparation }) => !preparation.existing).then(() => core_flows_1.createSalesChannelsWorkflow.runAsStep({
78
+ input: {
79
+ salesChannelsData: [
80
+ {
81
+ name: names.sales_channel,
82
+ description: "Interner Sales Channel für den Kommissionsvertrieb",
83
+ is_disabled: false,
84
+ },
85
+ ],
86
+ },
87
+ }));
88
+ const resources = resolveDistributionResourcesStep({
89
+ preparation,
90
+ createdLocations,
91
+ createdChannels,
92
+ });
93
+ (0, workflows_sdk_1.when)("affiliate-link-distribution-channel", { resources }, ({ resources }) => resources.created).then(() => core_flows_1.linkSalesChannelsToStockLocationWorkflow.runAsStep({
94
+ input: {
95
+ id: resources.stock_location_id,
96
+ add: [resources.internal_sales_channel_id],
97
+ },
98
+ }));
99
+ const promotedAffiliate = ensure_affiliate_own_order_promotion_1.ensureAffiliateOwnOrderPromotionWorkflow.runAsStep({
100
+ input: { affiliate_id: input.affiliate_id },
101
+ });
102
+ const settingsInput = buildDistributionSettingsInputStep({
103
+ input,
104
+ resources,
105
+ promotedAffiliate,
106
+ });
107
+ const settings = saveDistributionSettingsStep(settingsInput);
108
+ (0, core_flows_1.releaseLockStep)({ key: lockKey });
109
+ const output = (0, workflows_sdk_1.transform)(settings, (record) => ({
110
+ affiliate_id: record.affiliate_id,
111
+ stock_location_id: record.stock_location_id,
112
+ internal_sales_channel_id: record.internal_sales_channel_id,
113
+ region_id: record.region_id,
114
+ shipping_option_id: record.shipping_option_id,
115
+ own_order_promotion_id: record.own_order_promotion_id,
116
+ enabled: record.enabled,
117
+ }));
118
+ return new workflows_sdk_1.WorkflowResponse(output);
119
+ });
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5hYmxlLWRpc3RyaWJ1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvYWZmaWxpYXRlL2VuYWJsZS1kaXN0cmlidXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEscUVBTzBDO0FBQzFDLHFEQUFnRTtBQUNoRSw0REFNb0M7QUFHcEMsbUVBQXNFO0FBRXRFLGlHQUFpRztBQXlDakcsTUFBTSxrQ0FBa0MsR0FBRyxJQUFBLDBCQUFVLEVBQ25ELDRDQUE0QyxFQUM1QyxLQUFLLEVBQ0gsS0FBOEIsRUFDOUIsRUFBRSxTQUFTLEVBQUUsRUFDbUMsRUFBRTtJQUNsRCxNQUFNLGdCQUFnQixHQUFHLElBQUEsMENBQXVCLEVBQUMsU0FBUyxDQUFDLENBQUE7SUFDM0QsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDckMsZUFBTyxDQUFDLE1BQU0sQ0FDUyxDQUFBO0lBQ3pCLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDMUMsZUFBTyxDQUFDLFdBQVcsQ0FDUyxDQUFBO0lBQzlCLE1BQU0sU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsdUJBQXVCLENBQzlELEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUE7SUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQzdCLHVFQUF1RSxDQUN4RSxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNoQixhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDN0Msa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO0tBQ3BFLENBQUMsQ0FBQTtJQUVGLE1BQU0sUUFBUSxHQUNaLE1BQU0sZ0JBQWdCLENBQUMsZ0NBQWdDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRXZFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7QUFDbEQsQ0FBQyxDQUNGLENBQUE7QUFFRCxNQUFNLDRCQUE0QixHQUFHLElBQUEsMEJBQVUsRUFDN0Msc0NBQXNDLEVBQ3RDLEtBQUssRUFDSCxLQU9DLEVBQ0QsRUFBRSxTQUFTLEVBQUUsRUFDYixFQUFFO0lBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLDBDQUF1QixFQUMxQyxTQUFTLENBQ1YsQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUUxQyxPQUFPLElBQUksNEJBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ3ZDLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDdEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQ3ZCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtLQUMxQixDQUFDLENBQUE7QUFDSixDQUFDLEVBQ0QsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDcEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxJQUFBLDBDQUF1QixFQUMzQixTQUFTLENBQ1YsQ0FBQyx1Q0FBdUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUN6RCxDQUFDLENBQ0YsQ0FBQTtBQUVELE1BQU0sZ0NBQWdDLEdBQUcsSUFBQSwwQkFBVSxFQUNqRCwwQ0FBMEMsRUFDMUMsS0FBSyxFQUNILEtBQXdDLEVBQ00sRUFBRTtJQUNoRCxNQUFNLGVBQWUsR0FDbkIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCO1FBQzdDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQTtJQUNqQyxNQUFNLGNBQWMsR0FDbEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUseUJBQXlCO1FBQ3JELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUE7SUFFaEMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsdUVBQXVFLENBQ3hFLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLDRCQUFZLENBQUM7UUFDdEIsaUJBQWlCLEVBQUUsZUFBZTtRQUNsQyx5QkFBeUIsRUFBRSxjQUFjO1FBQ3pDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUTtLQUNyQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELE1BQU0sa0NBQWtDLEdBQUcsSUFBQSwwQkFBVSxFQUNuRCw2Q0FBNkMsRUFDN0MsS0FBSyxFQUNILEtBQXFDLEVBVXJDLEVBQUU7SUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDcEQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxpRkFBaUYsQ0FDbEYsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLElBQUksNEJBQVksQ0FBQztRQUN0QixZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZO1FBQ3RDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsaUJBQWlCO1FBQ3BELHlCQUF5QixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMseUJBQXlCO1FBQ3BFLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDaEMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7UUFDbEQsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQjtLQUN2RSxDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVZLFFBQUEsbUNBQW1DLEdBQUcsSUFBQSw4QkFBYyxFQUMvRCwrQkFBK0IsRUFDL0IsQ0FBQyxLQUE4QixFQUFFLEVBQUU7SUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBQSx5QkFBUyxFQUN2QixLQUFLLEVBQ0wsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLDBCQUEwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQ3hELENBQUE7SUFDRCxJQUFBLDRCQUFlLEVBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFdkQsTUFBTSxXQUFXLEdBQUcsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0QsTUFBTSxLQUFLLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkQsY0FBYyxFQUFFLHNCQUFzQixTQUFTLENBQUMsWUFBWSxFQUFFO1FBQzlELGFBQWEsRUFBRSx1QkFBdUIsU0FBUyxDQUFDLFlBQVksRUFBRTtLQUMvRCxDQUFDLENBQUMsQ0FBQTtJQUVILE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxvQkFBSSxFQUMzQix3Q0FBd0MsRUFDeEMsRUFBRSxXQUFXLEVBQUUsRUFDZixDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDM0MsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQ1YseUNBQTRCLENBQUMsU0FBUyxDQUFDO1FBQ3JDLEtBQUssRUFBRTtZQUNMLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUM1QztLQUNGLENBQUMsQ0FDSCxDQUFBO0lBQ0QsTUFBTSxlQUFlLEdBQUcsSUFBQSxvQkFBSSxFQUMxQix1Q0FBdUMsRUFDdkMsRUFBRSxXQUFXLEVBQUUsRUFDZixDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDM0MsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQ1Ysd0NBQTJCLENBQUMsU0FBUyxDQUFDO1FBQ3BDLEtBQUssRUFBRTtZQUNMLGlCQUFpQixFQUFFO2dCQUNqQjtvQkFDRSxJQUFJLEVBQUUsS0FBSyxDQUFDLGFBQWE7b0JBQ3pCLFdBQVcsRUFDVCxvREFBb0Q7b0JBQ3RELFdBQVcsRUFBRSxLQUFLO2lCQUNuQjthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQ0gsQ0FBQTtJQUNELE1BQU0sU0FBUyxHQUFHLGdDQUFnQyxDQUFDO1FBQ2pELFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsZUFBZTtLQUNoQixDQUFDLENBQUE7SUFFRixJQUFBLG9CQUFJLEVBQ0YscUNBQXFDLEVBQ3JDLEVBQUUsU0FBUyxFQUFFLEVBQ2IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUNyQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDVixxREFBd0MsQ0FBQyxTQUFTLENBQUM7UUFDakQsS0FBSyxFQUFFO1lBQ0wsRUFBRSxFQUFFLFNBQVMsQ0FBQyxpQkFBaUI7WUFDL0IsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDO1NBQzNDO0tBQ0YsQ0FBQyxDQUNILENBQUE7SUFFRCxNQUFNLGlCQUFpQixHQUNyQiwrRUFBd0MsQ0FBQyxTQUFTLENBQUM7UUFDakQsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUU7S0FDNUMsQ0FBQyxDQUFBO0lBQ0osTUFBTSxhQUFhLEdBQUcsa0NBQWtDLENBQUM7UUFDdkQsS0FBSztRQUNMLFNBQVM7UUFDVCxpQkFBaUI7S0FDbEIsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxRQUFRLEdBQUcsNEJBQTRCLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDNUQsSUFBQSw0QkFBZSxFQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFakMsTUFBTSxNQUFNLEdBQUcsSUFBQSx5QkFBUyxFQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBNEIsRUFBRSxDQUFDLENBQUM7UUFDeEUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7UUFDM0MseUJBQXlCLEVBQUUsTUFBTSxDQUFDLHlCQUF5QjtRQUMzRCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0Isa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtRQUM3QyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsc0JBQXVCO1FBQ3RELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztLQUN4QixDQUFDLENBQUMsQ0FBQTtJQUVILE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNyQyxDQUFDLENBQ0YsQ0FBQSJ9
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveCustomerNames = exports.resolveOrderDisplayIds = void 0;
4
+ // query.graph has no implicit page size, but an unbounded "id IN (...)"
5
+ // filter is still worth chunking so a very large detail page doesn't build
6
+ // one oversized SQL IN-clause.
7
+ const ID_FILTER_CHUNK_SIZE = 200;
8
+ const chunk = (values, size) => {
9
+ const chunks = [];
10
+ for (let index = 0; index < values.length; index += size) {
11
+ chunks.push(values.slice(index, index + size));
12
+ }
13
+ return chunks;
14
+ };
15
+ /**
16
+ * Resolves the customer-facing order number for a page of report entries.
17
+ * Deliberately requests only `id, display_id` - asking for `total` (or any
18
+ * other totals-derived field) would trigger the Order module's full
19
+ * items/tax/shipping hydration for every order, which this display-only
20
+ * lookup does not need.
21
+ */
22
+ const resolveOrderDisplayIds = async (query, orderIds) => {
23
+ const uniqueIds = [...new Set(orderIds)];
24
+ const result = new Map();
25
+ if (!uniqueIds.length) {
26
+ return result;
27
+ }
28
+ for (const batch of chunk(uniqueIds, ID_FILTER_CHUNK_SIZE)) {
29
+ const { data } = await query.graph({
30
+ entity: "order",
31
+ fields: ["id", "display_id"],
32
+ filters: { id: batch }
33
+ });
34
+ for (const row of data) {
35
+ if (row.display_id !== null) {
36
+ result.set(row.id, row.display_id);
37
+ }
38
+ }
39
+ }
40
+ return result;
41
+ };
42
+ exports.resolveOrderDisplayIds = resolveOrderDisplayIds;
43
+ /**
44
+ * Resolves a human-readable display name for a page of report entries'
45
+ * customers: "First Last", falling back to the email, falling back to
46
+ * `undefined` (a deleted/missing customer degrades the label, it never
47
+ * fails the report).
48
+ */
49
+ const resolveCustomerNames = async (query, customerIds) => {
50
+ const uniqueIds = [...new Set(customerIds)];
51
+ const result = new Map();
52
+ if (!uniqueIds.length) {
53
+ return result;
54
+ }
55
+ for (const batch of chunk(uniqueIds, ID_FILTER_CHUNK_SIZE)) {
56
+ const { data } = await query.graph({
57
+ entity: "customer",
58
+ fields: ["id", "first_name", "last_name", "email"],
59
+ filters: { id: batch }
60
+ });
61
+ for (const row of data) {
62
+ const name = [row.first_name, row.last_name]
63
+ .filter((part) => !!part?.trim())
64
+ .join(" ")
65
+ .trim();
66
+ const displayName = name || row.email?.trim();
67
+ if (displayName) {
68
+ result.set(row.id, displayName);
69
+ }
70
+ }
71
+ }
72
+ return result;
73
+ };
74
+ exports.resolveCustomerNames = resolveCustomerNames;
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yaWNoLWFmZmlsaWF0ZS1yZXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2FmZmlsaWF0ZS9lbnJpY2gtYWZmaWxpYXRlLXJlcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFjQSx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLCtCQUErQjtBQUMvQixNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTtBQUVoQyxNQUFNLEtBQUssR0FBRyxDQUFJLE1BQVcsRUFBRSxJQUFZLEVBQVMsRUFBRTtJQUNwRCxNQUFNLE1BQU0sR0FBVSxFQUFFLENBQUE7SUFDeEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyxDQUFBO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksTUFBTSxzQkFBc0IsR0FBRyxLQUFLLEVBQ3pDLEtBQXlDLEVBQ3pDLFFBQWtCLEVBQ1ksRUFBRTtJQUNoQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtJQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RCLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVELEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNqQyxNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUM7WUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRTtTQUN2QixDQUFDLENBQUE7UUFFRixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQWtDLEVBQUUsQ0FBQztZQUNyRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDcEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDLENBQUE7QUF6QlksUUFBQSxzQkFBc0IsMEJBeUJsQztBQUVEOzs7OztHQUtHO0FBQ0ksTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQ3ZDLEtBQXlDLEVBQ3pDLFdBQXFCLEVBQ1MsRUFBRTtJQUNoQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtJQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtJQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RCLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVELEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNqQyxNQUFNLEVBQUUsVUFBVTtZQUNsQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUM7WUFDbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRTtTQUN2QixDQUFDLENBQUE7UUFFRixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQXFDLEVBQUUsQ0FBQztZQUN4RCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQztpQkFDekMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQztpQkFDVCxJQUFJLEVBQUUsQ0FBQTtZQUNULE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFBO1lBQzdDLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUNqQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMsQ0FBQTtBQTlCWSxRQUFBLG9CQUFvQix3QkE4QmhDIn0=