@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.
- package/.medusa/server/src/admin/index.js +3739 -0
- package/.medusa/server/src/admin/index.mjs +3738 -0
- package/.medusa/server/src/api/admin/affiliate-applications/[id]/approve/route.js +28 -0
- package/.medusa/server/src/api/admin/affiliate-applications/[id]/reject/route.js +19 -0
- package/.medusa/server/src/api/admin/affiliate-applications/route.js +23 -0
- package/.medusa/server/src/api/admin/affiliate-distribution-reports/query.js +171 -0
- package/.medusa/server/src/api/admin/affiliate-distribution-reports/route.js +13 -0
- package/.medusa/server/src/api/admin/affiliate-program-settings/route.js +27 -0
- package/.medusa/server/src/api/admin/affiliate-reports/[id]/route.js +45 -0
- package/.medusa/server/src/api/admin/affiliate-reports/route.js +27 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/consignment-reminders/route.js +31 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/consignment-transfers/route.js +41 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/[coupon_id]/reconcile/route.js +34 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/[coupon_id]/revoke/route.js +36 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/[coupon_id]/rotate/route.js +40 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/coupon-codes/route.js +56 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/distribution/route.js +45 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/inactive/route.js +20 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/route.js +50 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/slugs/[slug_id]/route.js +19 -0
- package/.medusa/server/src/api/admin/affiliates/[id]/slugs/route.js +26 -0
- package/.medusa/server/src/api/admin/affiliates/route.js +43 -0
- package/.medusa/server/src/api/admin/consignment-report-response.js +36 -0
- package/.medusa/server/src/api/admin/consignment-reports/[id]/approve/route.js +25 -0
- package/.medusa/server/src/api/admin/consignment-reports/[id]/correct/route.js +18 -0
- package/.medusa/server/src/api/admin/consignment-reports/[id]/reject/route.js +15 -0
- package/.medusa/server/src/api/admin/consignment-reports/[id]/route.js +11 -0
- package/.medusa/server/src/api/admin/consignment-reports/route.js +27 -0
- package/.medusa/server/src/api/admin/customers/[id]/affiliate/route.js +50 -0
- package/.medusa/server/src/api/admin/orders/[id]/affiliate-attribution/route.js +30 -0
- package/.medusa/server/src/api/affiliate-coupon-http.js +152 -0
- package/.medusa/server/src/api/affiliate-referral-cookie.js +34 -0
- package/.medusa/server/src/api/affiliate-self-service-http.js +37 -0
- package/.medusa/server/src/api/middlewares.js +786 -0
- package/.medusa/server/src/api/store/affiliate-referrals/apply-coupon/route.js +47 -0
- package/.medusa/server/src/api/store/affiliate-referrals/capture/route.js +76 -0
- package/.medusa/server/src/api/store/affiliate-referrals/carts/[cart_id]/route.js +20 -0
- package/.medusa/server/src/api/store/affiliates/consignment-inventory/route.js +53 -0
- package/.medusa/server/src/api/store/affiliates/consignment-report-response.js +31 -0
- package/.medusa/server/src/api/store/affiliates/consignment-reports/[id]/submit/route.js +40 -0
- package/.medusa/server/src/api/store/affiliates/consignment-reports/route.js +43 -0
- package/.medusa/server/src/api/store/affiliates/coupon-labels/route.js +14 -0
- package/.medusa/server/src/api/store/affiliates/me/commissions/route.js +35 -0
- package/.medusa/server/src/api/store/affiliates/me/coupon-codes/[coupon_id]/revoke/route.js +36 -0
- package/.medusa/server/src/api/store/affiliates/me/coupon-codes/[coupon_id]/rotate/route.js +40 -0
- package/.medusa/server/src/api/store/affiliates/me/coupon-codes/route.js +55 -0
- package/.medusa/server/src/api/store/affiliates/me/dashboard/route.js +15 -0
- package/.medusa/server/src/api/store/affiliates/me/route.js +85 -0
- package/.medusa/server/src/api/store/affiliates/me/slugs/[slug_id]/route.js +29 -0
- package/.medusa/server/src/api/store/affiliates/me/slugs/route.js +34 -0
- package/.medusa/server/src/api/store/affiliates/own-order-discount/route.js +22 -0
- package/.medusa/server/src/api/store/affiliates/own-order-promotion/route.js +30 -0
- package/.medusa/server/src/api/store/affiliates/register/route.js +27 -0
- package/.medusa/server/src/api/store/affiliates/resolve-referral/route.js +34 -0
- package/.medusa/server/src/api/validators.js +52 -0
- package/.medusa/server/src/api/wire-response.js +10 -0
- package/.medusa/server/src/integration/email-events.js +51 -0
- package/.medusa/server/src/integrations/inventory-transfer/batch-management-transfer-adapter.js +36 -0
- package/.medusa/server/src/integrations/inventory-transfer/native-inventory-transfer-adapter.js +30 -0
- package/.medusa/server/src/integrations/inventory-transfer/resolve-inventory-transfer-adapter.js +46 -0
- package/.medusa/server/src/integrations/inventory-transfer/types.js +3 -0
- package/.medusa/server/src/jobs/affiliate-attribution-expiry.js +20 -0
- package/.medusa/server/src/jobs/affiliate-consignment-report-reminders.js +15 -0
- package/.medusa/server/src/jobs/affiliate-promotion-freshness.js +24 -0
- package/.medusa/server/src/lib/query-string.js +15 -0
- package/.medusa/server/src/modules/affiliate/domain/affiliate-attribution-policy.js +81 -0
- package/.medusa/server/src/modules/affiliate/domain/affiliate-coupon-policy.js +61 -0
- package/.medusa/server/src/modules/affiliate/domain/commission-policy.js +33 -0
- package/.medusa/server/src/modules/affiliate/domain/consignment-reminder-rules.js +74 -0
- package/.medusa/server/src/modules/affiliate/domain/email-normalization.js +20 -0
- package/.medusa/server/src/modules/affiliate/domain/own-order-coupon-code.js +37 -0
- package/.medusa/server/src/modules/affiliate/domain/plugin-options.js +40 -0
- package/.medusa/server/src/modules/affiliate/index.js +13 -0
- package/.medusa/server/src/modules/affiliate/migrations/Migration20260827085154.js +423 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate-application.js +38 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate-cart-referral.js +65 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate-code-redemption.js +41 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate-coupon.js +55 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate-distribution-settings.js +22 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate-order-attribution.js +49 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate-program-settings.js +28 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate-referral-session.js +34 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate-slug.js +27 -0
- package/.medusa/server/src/modules/affiliate/models/affiliate.js +49 -0
- package/.medusa/server/src/modules/affiliate/models/commission-entry.js +62 -0
- package/.medusa/server/src/modules/affiliate/models/consignment-report-line.js +21 -0
- package/.medusa/server/src/modules/affiliate/models/consignment-report.js +31 -0
- package/.medusa/server/src/modules/affiliate/models/consignment-transfer-line.js +16 -0
- package/.medusa/server/src/modules/affiliate/models/consignment-transfer.js +20 -0
- package/.medusa/server/src/modules/affiliate/models/customer-affiliate-assignment.js +58 -0
- package/.medusa/server/src/modules/affiliate/service.js +2321 -0
- package/.medusa/server/src/modules/affiliate/services/affiliate-application-manager.js +171 -0
- package/.medusa/server/src/modules/affiliate/services/affiliate-coupon-manager.js +441 -0
- package/.medusa/server/src/modules/affiliate/services/affiliate-discount.service.js +55 -0
- package/.medusa/server/src/modules/affiliate/services/affiliate-manager.js +242 -0
- package/.medusa/server/src/modules/affiliate/services/affiliate-partner-portal.service.js +138 -0
- package/.medusa/server/src/modules/affiliate/services/affiliate-report.service.js +436 -0
- package/.medusa/server/src/modules/affiliate/services/affiliate-slug-manager.js +163 -0
- package/.medusa/server/src/modules/affiliate/services/commission-ledger.service.js +729 -0
- package/.medusa/server/src/modules/affiliate/services/customer-affiliate-assignment-manager.js +350 -0
- package/.medusa/server/src/modules/affiliate/services/order-attribution-manager.js +1051 -0
- package/.medusa/server/src/modules/affiliate/services/referral-lifecycle-manager.js +1420 -0
- package/.medusa/server/src/modules/affiliate/services/utils.js +49 -0
- package/.medusa/server/src/modules/affiliate/types/internal.js +3 -0
- package/.medusa/server/src/paths/affiliate.js +7 -0
- package/.medusa/server/src/paths/index.js +18 -0
- package/.medusa/server/src/schemas/index.js +18 -0
- package/.medusa/server/src/schemas/store.js +24 -0
- package/.medusa/server/src/subscribers/affiliate-cart-updated.js +92 -0
- package/.medusa/server/src/subscribers/affiliate-order-canceled.js +70 -0
- package/.medusa/server/src/subscribers/affiliate-order-placed.js +63 -0
- package/.medusa/server/src/subscribers/affiliate-order-return-received.js +67 -0
- package/.medusa/server/src/subscribers/affiliate-product-eligibility-updated.js +87 -0
- package/.medusa/server/src/types/admin-api.js +3 -0
- package/.medusa/server/src/types/enums.js +53 -0
- package/.medusa/server/src/types/index.js +32 -0
- package/.medusa/server/src/types/public.js +3 -0
- package/.medusa/server/src/types/store-api.js +3 -0
- package/.medusa/server/src/utils/affiliate-cart-operation-lock.js +316 -0
- package/.medusa/server/src/utils/affiliate-promotion-mutation-authorization.js +49 -0
- package/.medusa/server/src/utils/cart-promotions.js +9 -0
- package/.medusa/server/src/utils/money.js +79 -0
- package/.medusa/server/src/utils/promotion-code-availability.js +34 -0
- package/.medusa/server/src/utils/registered-email-checkout.js +101 -0
- package/.medusa/server/src/utils/resolve-services.js +7 -0
- package/.medusa/server/src/utils/settle-cart-promotions.js +44 -0
- package/.medusa/server/src/workflows/affiliate/affiliate-coupon-cart.js +215 -0
- package/.medusa/server/src/workflows/affiliate/affiliate-coupon-command-authorization.js +20 -0
- package/.medusa/server/src/workflows/affiliate/apply-affiliate-coupon.js +174 -0
- package/.medusa/server/src/workflows/affiliate/apply-own-order-promotion.js +89 -0
- package/.medusa/server/src/workflows/affiliate/approve-consignment-report.js +186 -0
- package/.medusa/server/src/workflows/affiliate/correct-approved-consignment-report.js +263 -0
- package/.medusa/server/src/workflows/affiliate/create-affiliate-coupon.js +35 -0
- package/.medusa/server/src/workflows/affiliate/create-commission-correction-for-cancellation.js +21 -0
- package/.medusa/server/src/workflows/affiliate/create-commission-correction-for-refund.js +24 -0
- package/.medusa/server/src/workflows/affiliate/create-commission-for-order.js +17 -0
- package/.medusa/server/src/workflows/affiliate/deactivate-affiliate.js +89 -0
- package/.medusa/server/src/workflows/affiliate/enable-distribution.js +120 -0
- package/.medusa/server/src/workflows/affiliate/enrich-affiliate-report.js +75 -0
- package/.medusa/server/src/workflows/affiliate/ensure-affiliate-coupon-promotion.js +410 -0
- package/.medusa/server/src/workflows/affiliate/ensure-affiliate-own-order-promotion.js +240 -0
- package/.medusa/server/src/workflows/affiliate/ensure-default-affiliate-coupon.js +32 -0
- package/.medusa/server/src/workflows/affiliate/expire-affiliate-attribution-state.js +131 -0
- package/.medusa/server/src/workflows/affiliate/finalize-affiliate-order-attribution.js +82 -0
- package/.medusa/server/src/workflows/affiliate/payment-authorization.js +33 -0
- package/.medusa/server/src/workflows/affiliate/promotion-eligibility.js +179 -0
- package/.medusa/server/src/workflows/affiliate/reconcile-affiliate-cart-referral.js +219 -0
- package/.medusa/server/src/workflows/affiliate/reconcile-affiliate-coupon.js +388 -0
- package/.medusa/server/src/workflows/affiliate/refresh-affiliate-promotions.js +114 -0
- package/.medusa/server/src/workflows/affiliate/resolve-coupon-labels.js +40 -0
- package/.medusa/server/src/workflows/affiliate/revoke-affiliate-coupon.js +29 -0
- package/.medusa/server/src/workflows/affiliate/rotate-affiliate-coupon.js +36 -0
- package/.medusa/server/src/workflows/affiliate/run-consignment-report-reminders.js +58 -0
- package/.medusa/server/src/workflows/affiliate/submit-consignment-report.js +279 -0
- package/.medusa/server/src/workflows/affiliate/transfer-batch-aware-inventory.js +172 -0
- package/.medusa/server/src/workflows/affiliate/transfer-consignment-stock.js +106 -0
- package/.medusa/server/src/workflows/affiliate/update-affiliate-coupon-discounts.js +129 -0
- package/.medusa/server/src/workflows/affiliate/utils.js +118 -0
- package/.medusa/server/src/workflows/hooks/complete-cart-affiliate-attribution.js +57 -0
- package/.medusa/server/src/workflows/hooks/complete-cart-order-created-composition.js +111 -0
- package/.medusa/server/src/workflows/hooks/complete-cart-own-order-discount.js +75 -0
- package/.medusa/server/src/workflows/hooks/enforce-unique-promotion-codes.js +33 -0
- package/.medusa/server/src/workflows/hooks/validate-affiliate-customer-code.js +239 -0
- package/.medusa/server/src/workflows/hooks/validate-complete-cart-affiliate-referral.js +137 -0
- package/LICENSE +21 -0
- package/README.md +799 -0
- package/dist/integration/email-events.d.ts +20 -0
- package/dist/integration/email-events.js +50 -0
- package/package.json +84 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureAffiliateOwnOrderPromotionWorkflow = 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 promotion_eligibility_1 = require("./promotion-eligibility");
|
|
9
|
+
const ensureAffiliateOwnOrderPromotionStep = (0, workflows_sdk_1.createStep)("ensure-affiliate-own-order-promotion", async (input, { container }) => {
|
|
10
|
+
const affiliateService = (0, resolve_services_1.resolveAffiliateService)(container);
|
|
11
|
+
const promotionService = container.resolve(utils_1.Modules.PROMOTION);
|
|
12
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
13
|
+
const affiliate = await affiliateService.retrieveAffiliateRecord(input.affiliate_id);
|
|
14
|
+
const status = affiliate.status === "active" && affiliate.customer_id
|
|
15
|
+
? "active"
|
|
16
|
+
: "inactive";
|
|
17
|
+
const desiredCode = affiliate.customer_id
|
|
18
|
+
? `AFFILIATE-OWN-${affiliate.id}-${affiliate.customer_id}`.toUpperCase()
|
|
19
|
+
: null;
|
|
20
|
+
// Medusa's promotion module rejects a percentage application_method
|
|
21
|
+
// value of 0 (it must be strictly greater than 0), and a 0% own-order
|
|
22
|
+
// discount is a legitimate, commonly-defaulted configuration (an
|
|
23
|
+
// affiliate who earns no self-discount). Treat it as "no promotion
|
|
24
|
+
// needed" everywhere below instead of ever passing value: 0 downstream.
|
|
25
|
+
const hasPositiveRate = affiliate.own_order_discount_rate > 0;
|
|
26
|
+
if (affiliate.own_order_promotion_id) {
|
|
27
|
+
const currentPromotion = await promotionService.retrievePromotion(affiliate.own_order_promotion_id, { relations: ["rules", "rules.values"] });
|
|
28
|
+
const customerRule = currentPromotion.rules?.find((rule) => rule.attribute === "customer.id");
|
|
29
|
+
const boundCustomerIds = customerRule?.values.map((value) => value.value) ?? [];
|
|
30
|
+
const stillBoundToCurrentCustomer = affiliate.customer_id !== null &&
|
|
31
|
+
affiliate.customer_id !== undefined &&
|
|
32
|
+
boundCustomerIds.includes(affiliate.customer_id);
|
|
33
|
+
if (!stillBoundToCurrentCustomer) {
|
|
34
|
+
await (0, core_flows_1.updatePromotionsWorkflow)(container).run({
|
|
35
|
+
input: {
|
|
36
|
+
promotionsData: [
|
|
37
|
+
{
|
|
38
|
+
id: affiliate.own_order_promotion_id,
|
|
39
|
+
status: "inactive",
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
if (!affiliate.customer_id || !desiredCode || !hasPositiveRate) {
|
|
45
|
+
return new workflows_sdk_1.StepResponse(affiliate);
|
|
46
|
+
}
|
|
47
|
+
const repairPromotions = await promotionService.listPromotions({ code: [desiredCode] }, { relations: ["rules", "rules.values"], take: 1 });
|
|
48
|
+
let replacementPromotion = repairPromotions[0];
|
|
49
|
+
if (replacementPromotion) {
|
|
50
|
+
const replacementCustomerRule = replacementPromotion.rules?.find((rule) => rule.attribute === "customer.id");
|
|
51
|
+
const correctlyBound = replacementCustomerRule?.values.some((value) => value.value === affiliate.customer_id) ?? false;
|
|
52
|
+
if (!correctlyBound) {
|
|
53
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `Own-order promotion code "${desiredCode}" is bound to another customer.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const created = await (0, core_flows_1.createPromotionsWorkflow)(container).run({
|
|
58
|
+
input: {
|
|
59
|
+
promotionsData: [
|
|
60
|
+
{
|
|
61
|
+
code: desiredCode,
|
|
62
|
+
type: "standard",
|
|
63
|
+
status,
|
|
64
|
+
is_automatic: true,
|
|
65
|
+
rules: [
|
|
66
|
+
{
|
|
67
|
+
attribute: "customer.id",
|
|
68
|
+
operator: "eq",
|
|
69
|
+
values: affiliate.customer_id,
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
application_method: {
|
|
73
|
+
type: "percentage",
|
|
74
|
+
target_type: "items",
|
|
75
|
+
allocation: "across",
|
|
76
|
+
value: affiliate.own_order_discount_rate,
|
|
77
|
+
target_rules: promotion_eligibility_1.affiliateEligibleItemTargetRules,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
replacementPromotion = created.result[0];
|
|
84
|
+
}
|
|
85
|
+
await (0, core_flows_1.updatePromotionsWorkflow)(container).run({
|
|
86
|
+
input: {
|
|
87
|
+
promotionsData: [
|
|
88
|
+
{
|
|
89
|
+
id: replacementPromotion.id,
|
|
90
|
+
status,
|
|
91
|
+
is_automatic: true,
|
|
92
|
+
application_method: {
|
|
93
|
+
type: "percentage",
|
|
94
|
+
target_type: "items",
|
|
95
|
+
allocation: "across",
|
|
96
|
+
value: affiliate.own_order_discount_rate,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
let updated;
|
|
103
|
+
try {
|
|
104
|
+
await (0, promotion_eligibility_1.ensureAffiliateEligibleItemTargetRules)(promotionService, query, replacementPromotion.id);
|
|
105
|
+
updated = await affiliateService.setAffiliatePromotionState({
|
|
106
|
+
affiliate_id: affiliate.id,
|
|
107
|
+
own_order_promotion_id: replacementPromotion.id,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
await (0, core_flows_1.updatePromotionsWorkflow)(container).run({
|
|
112
|
+
input: {
|
|
113
|
+
promotionsData: [
|
|
114
|
+
{ id: replacementPromotion.id, status: "inactive" },
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
return new workflows_sdk_1.StepResponse(updated);
|
|
121
|
+
}
|
|
122
|
+
if (!hasPositiveRate) {
|
|
123
|
+
await (0, core_flows_1.updatePromotionsWorkflow)(container).run({
|
|
124
|
+
input: {
|
|
125
|
+
promotionsData: [
|
|
126
|
+
{
|
|
127
|
+
id: affiliate.own_order_promotion_id,
|
|
128
|
+
status: "inactive",
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
return new workflows_sdk_1.StepResponse(affiliate);
|
|
134
|
+
}
|
|
135
|
+
await (0, core_flows_1.updatePromotionsWorkflow)(container).run({
|
|
136
|
+
input: {
|
|
137
|
+
promotionsData: [
|
|
138
|
+
{
|
|
139
|
+
id: affiliate.own_order_promotion_id,
|
|
140
|
+
status,
|
|
141
|
+
is_automatic: true,
|
|
142
|
+
application_method: {
|
|
143
|
+
type: "percentage",
|
|
144
|
+
target_type: "items",
|
|
145
|
+
allocation: "across",
|
|
146
|
+
value: affiliate.own_order_discount_rate,
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
await (0, promotion_eligibility_1.ensureAffiliateEligibleItemTargetRules)(promotionService, query, affiliate.own_order_promotion_id);
|
|
153
|
+
return new workflows_sdk_1.StepResponse(affiliate);
|
|
154
|
+
}
|
|
155
|
+
if (!affiliate.customer_id || !hasPositiveRate) {
|
|
156
|
+
return new workflows_sdk_1.StepResponse(affiliate);
|
|
157
|
+
}
|
|
158
|
+
const repairPromotions = await promotionService.listPromotions({ code: [desiredCode] }, { relations: ["rules", "rules.values"], take: 1 });
|
|
159
|
+
let promotionId = repairPromotions[0]?.id ?? null;
|
|
160
|
+
if (repairPromotions[0]) {
|
|
161
|
+
const customerRule = repairPromotions[0].rules?.find((rule) => rule.attribute === "customer.id");
|
|
162
|
+
if (!customerRule?.values.some((value) => value.value === affiliate.customer_id)) {
|
|
163
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `Own-order promotion code "${desiredCode}" is bound to another customer.`);
|
|
164
|
+
}
|
|
165
|
+
await (0, core_flows_1.updatePromotionsWorkflow)(container).run({
|
|
166
|
+
input: {
|
|
167
|
+
promotionsData: [
|
|
168
|
+
{
|
|
169
|
+
id: repairPromotions[0].id,
|
|
170
|
+
status,
|
|
171
|
+
is_automatic: true,
|
|
172
|
+
application_method: {
|
|
173
|
+
type: "percentage",
|
|
174
|
+
target_type: "items",
|
|
175
|
+
allocation: "across",
|
|
176
|
+
value: affiliate.own_order_discount_rate,
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
const created = await (0, core_flows_1.createPromotionsWorkflow)(container).run({
|
|
185
|
+
input: {
|
|
186
|
+
promotionsData: [
|
|
187
|
+
{
|
|
188
|
+
code: desiredCode,
|
|
189
|
+
type: "standard",
|
|
190
|
+
status,
|
|
191
|
+
is_automatic: true,
|
|
192
|
+
rules: [
|
|
193
|
+
{
|
|
194
|
+
attribute: "customer.id",
|
|
195
|
+
operator: "eq",
|
|
196
|
+
values: affiliate.customer_id,
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
application_method: {
|
|
200
|
+
type: "percentage",
|
|
201
|
+
target_type: "items",
|
|
202
|
+
allocation: "across",
|
|
203
|
+
value: affiliate.own_order_discount_rate,
|
|
204
|
+
target_rules: promotion_eligibility_1.affiliateEligibleItemTargetRules,
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
promotionId = created.result[0].id;
|
|
211
|
+
}
|
|
212
|
+
let updated;
|
|
213
|
+
try {
|
|
214
|
+
await (0, promotion_eligibility_1.ensureAffiliateEligibleItemTargetRules)(promotionService, query, promotionId);
|
|
215
|
+
updated = await affiliateService.setAffiliatePromotionState({
|
|
216
|
+
affiliate_id: affiliate.id,
|
|
217
|
+
own_order_promotion_id: promotionId,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
await (0, core_flows_1.updatePromotionsWorkflow)(container).run({
|
|
222
|
+
input: {
|
|
223
|
+
promotionsData: [{ id: promotionId, status: "inactive" }],
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
throw error;
|
|
227
|
+
}
|
|
228
|
+
return new workflows_sdk_1.StepResponse(updated);
|
|
229
|
+
});
|
|
230
|
+
exports.ensureAffiliateOwnOrderPromotionWorkflow = (0, workflows_sdk_1.createWorkflow)("ensure-affiliate-own-order-promotion", (input) => {
|
|
231
|
+
(0, core_flows_1.acquireLockStep)({
|
|
232
|
+
key: input.affiliate_id,
|
|
233
|
+
timeout: 10,
|
|
234
|
+
ttl: 60,
|
|
235
|
+
});
|
|
236
|
+
const affiliate = ensureAffiliateOwnOrderPromotionStep(input);
|
|
237
|
+
(0, core_flows_1.releaseLockStep)({ key: input.affiliate_id });
|
|
238
|
+
return new workflows_sdk_1.WorkflowResponse(affiliate);
|
|
239
|
+
});
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5zdXJlLWFmZmlsaWF0ZS1vd24tb3JkZXItcHJvbW90aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9hZmZpbGlhdGUvZW5zdXJlLWFmZmlsaWF0ZS1vd24tb3JkZXItcHJvbW90aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLHFFQUswQztBQUMxQyxxREFJa0M7QUFDbEMsNERBS29DO0FBRXBDLG1FQUFzRTtBQUV0RSxtRUFHZ0M7QUFNaEMsTUFBTSxvQ0FBb0MsR0FBRyxJQUFBLDBCQUFVLEVBQ3JELHNDQUFzQyxFQUN0QyxLQUFLLEVBQ0gsS0FBNEMsRUFDNUMsRUFBRSxTQUFTLEVBQUUsRUFDd0IsRUFBRTtJQUN2QyxNQUFNLGdCQUFnQixHQUFHLElBQUEsMENBQXVCLEVBQUMsU0FBUyxDQUFDLENBQUE7SUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUN4QyxlQUFPLENBQUMsU0FBUyxDQUNTLENBQUE7SUFDNUIsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxNQUFNLFNBQVMsR0FBRyxNQUFNLGdCQUFnQixDQUFDLHVCQUF1QixDQUM5RCxLQUFLLENBQUMsWUFBWSxDQUNuQixDQUFBO0lBQ0QsTUFBTSxNQUFNLEdBQ1YsU0FBUyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLFdBQVc7UUFDcEQsQ0FBQyxDQUFDLFFBQVE7UUFDVixDQUFDLENBQUMsVUFBVSxDQUFBO0lBQ2hCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXO1FBQ3ZDLENBQUMsQ0FBQyxpQkFBaUIsU0FBUyxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxFQUFFO1FBQ3hFLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDUixvRUFBb0U7SUFDcEUs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
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureDefaultAffiliateCouponWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const affiliate_cart_operation_lock_1 = require("../../utils/affiliate-cart-operation-lock");
|
|
6
|
+
const resolve_services_1 = require("../../utils/resolve-services");
|
|
7
|
+
const ensure_affiliate_coupon_promotion_1 = require("./ensure-affiliate-coupon-promotion");
|
|
8
|
+
const reconcile_affiliate_coupon_1 = require("./reconcile-affiliate-coupon");
|
|
9
|
+
const ensureDefaultAffiliateCouponStep = (0, workflows_sdk_1.createStep)("ensure-default-affiliate-coupon", async (input, { container }) => {
|
|
10
|
+
const affiliateService = (0, resolve_services_1.resolveAffiliateService)(container);
|
|
11
|
+
const observed = await affiliateService.retrieveAffiliateRecord(input.affiliate_id);
|
|
12
|
+
if (observed.status !== "active") {
|
|
13
|
+
return new workflows_sdk_1.StepResponse({
|
|
14
|
+
coupon: null,
|
|
15
|
+
created: false,
|
|
16
|
+
reconciled: [],
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
const ensured = await (0, affiliate_cart_operation_lock_1.withAffiliateOperationLocks)(container, (0, ensure_affiliate_coupon_promotion_1.affiliateCouponProvisioningLockKeys)(input.affiliate_id), async () => {
|
|
20
|
+
const affiliate = await affiliateService.retrieveAffiliateRecord(input.affiliate_id);
|
|
21
|
+
if (affiliate.status !== "active") {
|
|
22
|
+
return { coupon: null, created: false };
|
|
23
|
+
}
|
|
24
|
+
return await affiliateService.ensureDefaultAffiliateCoupon({
|
|
25
|
+
affiliate_id: affiliate.id,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
const reconciled = await (0, reconcile_affiliate_coupon_1.reconcileAffiliateCouponsForAffiliate)(container, input.affiliate_id);
|
|
29
|
+
return new workflows_sdk_1.StepResponse({ ...ensured, reconciled });
|
|
30
|
+
});
|
|
31
|
+
exports.ensureDefaultAffiliateCouponWorkflow = (0, workflows_sdk_1.createWorkflow)("ensure-default-affiliate-coupon", (input) => new workflows_sdk_1.WorkflowResponse(ensureDefaultAffiliateCouponStep(input)));
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5zdXJlLWRlZmF1bHQtYWZmaWxpYXRlLWNvdXBvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvYWZmaWxpYXRlL2Vuc3VyZS1kZWZhdWx0LWFmZmlsaWF0ZS1jb3Vwb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBRzFDLDZGQUF1RjtBQUN2RixtRUFBc0U7QUFDdEUsMkZBQXlGO0FBQ3pGLDZFQUFvRjtBQVlwRixNQUFNLGdDQUFnQyxHQUFHLElBQUEsMEJBQVUsRUFDakQsaUNBQWlDLEVBQ2pDLEtBQUssRUFDSCxLQUFnRCxFQUNoRCxFQUFFLFNBQVMsRUFBRSxFQUNzRCxFQUFFO0lBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQ0FBdUIsRUFBQyxTQUFTLENBQUMsQ0FBQTtJQUMzRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLHVCQUF1QixDQUM3RCxLQUFLLENBQUMsWUFBWSxDQUNuQixDQUFBO0lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSw0QkFBWSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUsRUFBRTtTQUNmLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsMkRBQTJCLEVBQy9DLFNBQVMsRUFDVCxJQUFBLHVFQUFtQyxFQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFDdkQsS0FBSyxJQUFJLEVBQUU7UUFDVCxNQUFNLFNBQVMsR0FBRyxNQUFNLGdCQUFnQixDQUFDLHVCQUF1QixDQUM5RCxLQUFLLENBQUMsWUFBWSxDQUNuQixDQUFBO1FBQ0QsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQTtRQUN6QyxDQUFDO1FBQ0QsT0FBTyxNQUFNLGdCQUFnQixDQUFDLDRCQUE0QixDQUFDO1lBQ3pELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtTQUMzQixDQUFDLENBQUE7SUFDSixDQUFDLENBQ0YsQ0FBQTtJQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBQSxrRUFBcUMsRUFDNUQsU0FBUyxFQUNULEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUE7SUFDRCxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUE7QUFDckQsQ0FBQyxDQUNGLENBQUE7QUFFWSxRQUFBLG9DQUFvQyxHQUFHLElBQUEsOEJBQWMsRUFDaEUsaUNBQWlDLEVBQ2pDLENBQUMsS0FBZ0QsRUFBRSxFQUFFLENBQ25ELElBQUksZ0NBQWdCLENBQUMsZ0NBQWdDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDaEUsQ0FBQSJ9
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expireAffiliateAttributionStateWorkflow = exports.expireAffiliateAttributionState = 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 affiliate_cart_operation_lock_1 = require("../../utils/affiliate-cart-operation-lock");
|
|
8
|
+
const cart_promotions_1 = require("../../utils/cart-promotions");
|
|
9
|
+
const resolve_services_1 = require("../../utils/resolve-services");
|
|
10
|
+
const settle_cart_promotions_1 = require("../../utils/settle-cart-promotions");
|
|
11
|
+
const payment_authorization_1 = require("./payment-authorization");
|
|
12
|
+
const loadExpiryCart = async (container, cartId) => {
|
|
13
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
14
|
+
const { data } = await query.graph({
|
|
15
|
+
entity: "cart",
|
|
16
|
+
fields: [
|
|
17
|
+
"id",
|
|
18
|
+
"completed_at",
|
|
19
|
+
"promotions.id",
|
|
20
|
+
"promotions.code",
|
|
21
|
+
"payment_collection.status",
|
|
22
|
+
"payment_collection.payment_sessions.status"
|
|
23
|
+
],
|
|
24
|
+
filters: { id: cartId }
|
|
25
|
+
}, { cache: { enable: false } });
|
|
26
|
+
return data[0] ?? null;
|
|
27
|
+
};
|
|
28
|
+
const removeExpiredReferralPromotions = async (container, result) => {
|
|
29
|
+
const affiliateService = (0, resolve_services_1.resolveAffiliateService)(container);
|
|
30
|
+
const byCart = new Map();
|
|
31
|
+
for (const referral of result.expired_cart_referrals) {
|
|
32
|
+
const referrals = byCart.get(referral.cart_id) ?? [];
|
|
33
|
+
referrals.push(referral);
|
|
34
|
+
byCart.set(referral.cart_id, referrals);
|
|
35
|
+
}
|
|
36
|
+
const cleaned = [];
|
|
37
|
+
const failures = [];
|
|
38
|
+
let paymentAuthorizationBlocked = false;
|
|
39
|
+
for (const cartId of [...byCart.keys()].sort()) {
|
|
40
|
+
const referrals = byCart.get(cartId);
|
|
41
|
+
const promotionIds = new Set(referrals.map(({ applied_promotion_id }) => applied_promotion_id));
|
|
42
|
+
try {
|
|
43
|
+
const cleanupCompleted = await (0, affiliate_cart_operation_lock_1.withAffiliateCartOperationLock)(container, cartId, async () => {
|
|
44
|
+
const cart = await loadExpiryCart(container, cartId);
|
|
45
|
+
if (!cart || cart.completed_at)
|
|
46
|
+
return true;
|
|
47
|
+
const activeReferrals = await affiliateService.listAffiliateCartReferrals({
|
|
48
|
+
cart_id: cartId,
|
|
49
|
+
status: "active",
|
|
50
|
+
applied_promotion_id: [...promotionIds]
|
|
51
|
+
}, { order: { captured_at: "DESC", id: "DESC" } });
|
|
52
|
+
const currentTime = Date.now();
|
|
53
|
+
const activelyOwnedPromotionIds = new Set(activeReferrals
|
|
54
|
+
.filter((referral) => referral.applied_affiliate_coupon_id !== null &&
|
|
55
|
+
referral.applied_promotion_id !== null &&
|
|
56
|
+
new Date(referral.expires_at).getTime() > currentTime)
|
|
57
|
+
.map(({ applied_promotion_id }) => applied_promotion_id));
|
|
58
|
+
const removablePromotionIds = new Set([...promotionIds].filter((promotionId) => !activelyOwnedPromotionIds.has(promotionId)));
|
|
59
|
+
const codes = (0, cart_promotions_1.readCartPromotions)(cart.promotions)
|
|
60
|
+
.filter(({ id }) => removablePromotionIds.has(id))
|
|
61
|
+
.map(({ code }) => code)
|
|
62
|
+
.filter((code) => Boolean(code));
|
|
63
|
+
if (codes.length) {
|
|
64
|
+
if ((0, payment_authorization_1.hasPaymentAuthorizationStarted)(cart.payment_collection)) {
|
|
65
|
+
paymentAuthorizationBlocked = true;
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
await (0, core_flows_1.updateCartPromotionsWorkflow)(container).run({
|
|
69
|
+
input: {
|
|
70
|
+
cart_id: cartId,
|
|
71
|
+
promo_codes: [...new Set(codes)],
|
|
72
|
+
action: utils_1.PromotionActions.REMOVE,
|
|
73
|
+
force_refresh_payment_collection: true
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
// Removing these codes changes item_total; settle so any other
|
|
77
|
+
// total-dependent automatic promotion re-evaluates against the
|
|
78
|
+
// now-accurate cart instead of the pre-removal snapshot.
|
|
79
|
+
await (0, settle_cart_promotions_1.settleCartPromotions)(container, cartId);
|
|
80
|
+
}
|
|
81
|
+
const readback = await loadExpiryCart(container, cartId);
|
|
82
|
+
if (readback &&
|
|
83
|
+
!readback.completed_at &&
|
|
84
|
+
(0, cart_promotions_1.readCartPromotions)(readback.promotions).some(({ id }) => removablePromotionIds.has(id))) {
|
|
85
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Cart "${cartId}" still contains an expired Affiliate promotion.`);
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
});
|
|
89
|
+
if (cleanupCompleted) {
|
|
90
|
+
cleaned.push(...referrals);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
failures.push(error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (cleaned.length) {
|
|
98
|
+
await affiliateService.completeExpiredCartReferralPromotionCleanup({
|
|
99
|
+
referrals: cleaned.map(({ referral_id, applied_promotion_id }) => ({
|
|
100
|
+
referral_id,
|
|
101
|
+
applied_promotion_id
|
|
102
|
+
}))
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (failures.length === 1)
|
|
106
|
+
throw failures[0];
|
|
107
|
+
if (failures.length) {
|
|
108
|
+
throw new AggregateError(failures, "Expired Affiliate referral promotion cleanup failed");
|
|
109
|
+
}
|
|
110
|
+
return { payment_authorization_blocked: paymentAuthorizationBlocked };
|
|
111
|
+
};
|
|
112
|
+
const expireAffiliateAttributionState = async (container, input) => {
|
|
113
|
+
const result = await (0, resolve_services_1.resolveAffiliateService)(container).expireAffiliateAttributionState({
|
|
114
|
+
now: input.now ? new Date(input.now) : new Date(),
|
|
115
|
+
limit: 500
|
|
116
|
+
});
|
|
117
|
+
const cleanup = await removeExpiredReferralPromotions(container, result);
|
|
118
|
+
return {
|
|
119
|
+
processed: result.processed,
|
|
120
|
+
// A blocked receipt remains at the front of the next batch. Defer it to
|
|
121
|
+
// the next scheduled run instead of spinning while payment remains locked.
|
|
122
|
+
has_more: result.has_more && !cleanup.payment_authorization_blocked
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
exports.expireAffiliateAttributionState = expireAffiliateAttributionState;
|
|
126
|
+
const expireAffiliateAttributionStateStep = (0, workflows_sdk_1.createStep)("expire-affiliate-attribution-state", async (input, { container }) => {
|
|
127
|
+
const result = await (0, exports.expireAffiliateAttributionState)(container, input);
|
|
128
|
+
return new workflows_sdk_1.StepResponse(result);
|
|
129
|
+
});
|
|
130
|
+
exports.expireAffiliateAttributionStateWorkflow = (0, workflows_sdk_1.createWorkflow)("expire-affiliate-attribution-state", (input) => new workflows_sdk_1.WorkflowResponse(expireAffiliateAttributionStateStep(input)));
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwaXJlLWFmZmlsaWF0ZS1hdHRyaWJ1dGlvbi1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvYWZmaWxpYXRlL2V4cGlyZS1hZmZpbGlhdGUtYXR0cmlidXRpb24tc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBRTFDLHFEQUlrQztBQUNsQyw0REFBMEU7QUFNMUUsNkZBQTBGO0FBQzFGLGlFQUFnRTtBQUNoRSxtRUFBc0U7QUFDdEUsK0VBQXlFO0FBQ3pFLG1FQUdnQztBQWFoQyxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQzFCLFNBQTBCLEVBQzFCLE1BQWMsRUFDYyxFQUFFO0lBQzlCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FDaEM7UUFDRSxNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixjQUFjO1lBQ2QsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQiwyQkFBMkI7WUFDM0IsNENBQTRDO1NBQzdDO1FBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtLQUN4QixFQUNELEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQzdCLENBQUE7SUFDRCxPQUFRLElBQUksQ0FBQyxDQUFDLENBQTRCLElBQUksSUFBSSxDQUFBO0FBQ3BELENBQUMsQ0FBQTtBQUVELE1BQU0sK0JBQStCLEdBQUcsS0FBSyxFQUMzQyxTQUEwQixFQUMxQixNQUFrRCxFQUNHLEVBQUU7SUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLDBDQUF1QixFQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzNELE1BQU0sTUFBTSxHQUFHLElBQUks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
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.finalizeAffiliateOrderAttributionWorkflow = exports.finalizeAffiliateOrderAttributionStep = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const email_normalization_1 = require("../../modules/affiliate/domain/email-normalization");
|
|
7
|
+
const resolve_services_1 = require("../../utils/resolve-services");
|
|
8
|
+
const cart_promotions_1 = require("../../utils/cart-promotions");
|
|
9
|
+
const promotion_eligibility_1 = require("./promotion-eligibility");
|
|
10
|
+
const utils_2 = require("./utils");
|
|
11
|
+
const affiliate_coupon_cart_1 = require("./affiliate-coupon-cart");
|
|
12
|
+
exports.finalizeAffiliateOrderAttributionStep = (0, workflows_sdk_1.createStep)("finalize-affiliate-order-attribution", async (input, { container }) => {
|
|
13
|
+
const affiliateService = (0, resolve_services_1.resolveAffiliateService)(container);
|
|
14
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
15
|
+
const [{ data: orders }, { data: carts }, commissionOrder] = await Promise.all([
|
|
16
|
+
query.graph({
|
|
17
|
+
entity: "order",
|
|
18
|
+
fields: [
|
|
19
|
+
"id",
|
|
20
|
+
"customer_id",
|
|
21
|
+
"email",
|
|
22
|
+
"currency_code",
|
|
23
|
+
"created_at",
|
|
24
|
+
],
|
|
25
|
+
filters: { id: input.order_id },
|
|
26
|
+
}),
|
|
27
|
+
query.graph({
|
|
28
|
+
entity: "cart",
|
|
29
|
+
fields: ["id", "promotions.id", "promotions.code"],
|
|
30
|
+
filters: { id: input.cart_id },
|
|
31
|
+
}),
|
|
32
|
+
(0, utils_2.retrieveCheckoutOrderForCommission)(input.order_id, container),
|
|
33
|
+
]);
|
|
34
|
+
const order = orders[0];
|
|
35
|
+
const cart = carts[0];
|
|
36
|
+
if (!order) {
|
|
37
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Order "${input.order_id}" was not found.`);
|
|
38
|
+
}
|
|
39
|
+
if (!cart) {
|
|
40
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Cart "${input.cart_id}" was not found.`);
|
|
41
|
+
}
|
|
42
|
+
const couponBindings = await (0, affiliate_coupon_cart_1.loadAffiliateCouponCartBindings)(affiliateService, (0, cart_promotions_1.readCartPromotions)(cart.promotions));
|
|
43
|
+
if (couponBindings.length > 1 ||
|
|
44
|
+
couponBindings.some(({ exact }) => !exact)) {
|
|
45
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "A completed cart must contain at most one exact Affiliate coupon promotion.");
|
|
46
|
+
}
|
|
47
|
+
let validatedCoupon = null;
|
|
48
|
+
const couponBinding = couponBindings[0];
|
|
49
|
+
if (couponBinding) {
|
|
50
|
+
const coupon = couponBinding.coupon;
|
|
51
|
+
const couponAffiliate = await affiliateService.retrieveAffiliateRecord(coupon.affiliate_id);
|
|
52
|
+
const promotion = await (0, promotion_eligibility_1.assertAuthenticAffiliateCouponPromotion)(container.resolve(utils_1.Modules.PROMOTION), { coupon, affiliate: couponAffiliate });
|
|
53
|
+
if (!promotion.code) {
|
|
54
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "The affiliate promotion has no code.");
|
|
55
|
+
}
|
|
56
|
+
validatedCoupon = {
|
|
57
|
+
affiliate_coupon_id: coupon.id,
|
|
58
|
+
affiliate_id: couponAffiliate.id,
|
|
59
|
+
promotion_id: promotion.id,
|
|
60
|
+
code: promotion.code,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const result = (await affiliateService.finalizeOrderAttribution({
|
|
64
|
+
order_id: order.id,
|
|
65
|
+
cart_id: cart.id,
|
|
66
|
+
customer_id: order.customer_id ?? null,
|
|
67
|
+
normalized_email: order.email
|
|
68
|
+
? (0, email_normalization_1.normalizeAffiliateEmail)(order.email)
|
|
69
|
+
: null,
|
|
70
|
+
currency_code: order.currency_code,
|
|
71
|
+
attributed_at: new Date(order.created_at),
|
|
72
|
+
validated_coupon: validatedCoupon,
|
|
73
|
+
commission_order: commissionOrder,
|
|
74
|
+
}));
|
|
75
|
+
return new workflows_sdk_1.StepResponse(result, result.compensation);
|
|
76
|
+
}, async (compensation, { container }) => {
|
|
77
|
+
if (!compensation)
|
|
78
|
+
return;
|
|
79
|
+
await (0, resolve_services_1.resolveAffiliateService)(container).compensateOrderAttribution(compensation);
|
|
80
|
+
});
|
|
81
|
+
exports.finalizeAffiliateOrderAttributionWorkflow = (0, workflows_sdk_1.createWorkflow)("finalize-affiliate-order-attribution", (input) => new workflows_sdk_1.WorkflowResponse((0, exports.finalizeAffiliateOrderAttributionStep)(input)));
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYWxpemUtYWZmaWxpYXRlLW9yZGVyLWF0dHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9hZmZpbGlhdGUvZmluYWxpemUtYWZmaWxpYXRlLW9yZGVyLWF0dHJpYnV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFFQUswQztBQUMxQyxxREFJa0M7QUFFbEMsNEZBQTRGO0FBSzVGLG1FQUFzRTtBQUN0RSxpRUFBZ0U7QUFDaEUsbUVBQWlGO0FBQ2pGLG1DQUE0RDtBQUM1RCxtRUFBeUU7QUFvQjVELFFBQUEscUNBQXFDLEdBQUcsSUFBQSwwQkFBVSxFQUM3RCxzQ0FBc0MsRUFDdEMsS0FBSyxFQUNILEtBQXFELEVBQ3JELEVBQUUsU0FBUyxFQUFFLEVBQ2IsRUFBRTtJQUNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQ0FBdUIsRUFBQyxTQUFTLENBQUMsQ0FBQTtJQUMzRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxlQUFlLENBQUMsR0FDeEQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2hCLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDVixNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRTtnQkFDTixJQUFJO2dCQUNKLGFBQWE7Z0JBQ2IsT0FBTztnQkFDUCxlQUFlO2dCQUNmLFlBQVk7YUFDYjtZQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFO1NBQ2hDLENBQUM7UUFDRixLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ1YsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZUFB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
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PAYMENT_AUTHORIZATION_PROMOTION_MUTATION_MESSAGE = void 0;
|
|
4
|
+
exports.hasPaymentAuthorizationStarted = hasPaymentAuthorizationStarted;
|
|
5
|
+
exports.assertPaymentAuthorizationNotStarted = assertPaymentAuthorizationNotStarted;
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
exports.PAYMENT_AUTHORIZATION_PROMOTION_MUTATION_MESSAGE = "The cart's promotions can't be changed after payment authorization has started.";
|
|
8
|
+
const lockedPaymentCollectionStatuses = new Set([
|
|
9
|
+
utils_1.PaymentCollectionStatus.AUTHORIZED,
|
|
10
|
+
utils_1.PaymentCollectionStatus.PARTIALLY_AUTHORIZED,
|
|
11
|
+
utils_1.PaymentCollectionStatus.PARTIALLY_CAPTURED,
|
|
12
|
+
utils_1.PaymentCollectionStatus.COMPLETED
|
|
13
|
+
]);
|
|
14
|
+
const lockedPaymentSessionStatuses = new Set([
|
|
15
|
+
utils_1.PaymentSessionStatus.PENDING_AUTHORIZATION,
|
|
16
|
+
utils_1.PaymentSessionStatus.REQUIRES_MORE,
|
|
17
|
+
utils_1.PaymentSessionStatus.AUTHORIZED,
|
|
18
|
+
utils_1.PaymentSessionStatus.CAPTURED
|
|
19
|
+
]);
|
|
20
|
+
function hasPaymentAuthorizationStarted(paymentCollection) {
|
|
21
|
+
return ((paymentCollection?.status !== null &&
|
|
22
|
+
paymentCollection?.status !== undefined &&
|
|
23
|
+
lockedPaymentCollectionStatuses.has(paymentCollection.status)) ||
|
|
24
|
+
paymentCollection?.payment_sessions?.some((session) => session.status !== null &&
|
|
25
|
+
session.status !== undefined &&
|
|
26
|
+
lockedPaymentSessionStatuses.has(session.status)) === true);
|
|
27
|
+
}
|
|
28
|
+
function assertPaymentAuthorizationNotStarted(paymentCollection) {
|
|
29
|
+
if (hasPaymentAuthorizationStarted(paymentCollection)) {
|
|
30
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, exports.PAYMENT_AUTHORIZATION_PROMOTION_MUTATION_MESSAGE);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1hdXRob3JpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9hZmZpbGlhdGUvcGF5bWVudC1hdXRob3JpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRCQSx3RUFjQztBQUVELG9GQVNDO0FBckRELHFEQUlrQztBQU9yQixRQUFBLGdEQUFnRCxHQUMzRCxpRkFBaUYsQ0FBQTtBQUVuRixNQUFNLCtCQUErQixHQUFHLElBQUksR0FBRyxDQUFTO0lBQ3RELCtCQUF1QixDQUFDLFVBQVU7SUFDbEMsK0JBQXVCLENBQUMsb0JBQW9CO0lBQzVDLCtCQUF1QixDQUFDLGtCQUFrQjtJQUMxQywrQkFBdUIsQ0FBQyxTQUFTO0NBQ2xDLENBQUMsQ0FBQTtBQUVGLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxHQUFHLENBQVM7SUFDbkQsNEJBQW9CLENBQUMscUJBQXFCO0lBQzFDLDRCQUFvQixDQUFDLGFBQWE7SUFDbEMsNEJBQW9CLENBQUMsVUFBVTtJQUMvQiw0QkFBb0IsQ0FBQyxRQUFRO0NBQzlCLENBQUMsQ0FBQTtBQUVGLFNBQWdCLDhCQUE4QixDQUM1QyxpQkFBb0Q7SUFFcEQsT0FBTyxDQUNMLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxLQUFLLElBQUk7UUFDakMsaUJBQWlCLEVBQUUsTUFBTSxLQUFLLFNBQVM7UUFDdkMsK0JBQStCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FDdkMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLE9BQU8sQ0FBQyxNQUFNLEtBQUssSUFBSTtZQUN2QixPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFDNUIsNEJBQTRCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FDbkQsS0FBSyxJQUFJLENBQ1gsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFnQixvQ0FBb0MsQ0FDbEQsaUJBQW9EO0lBRXBELElBQUksOEJBQThCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQzFCLHdEQUFnRCxDQUNqRCxDQUFBO0lBQ0gsQ0FBQztBQUNILENBQUMifQ==
|