@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,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVhY3RpdmF0ZS1hZmZpbGlhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2FmZmlsaWF0ZS9kZWFjdGl2YXRlLWFmZmlsaWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFLMEM7QUFDMUMscURBQTREO0FBQzVELDREQUEwRTtBQUMxRSxxREFBcUU7QUFFckUsbUVBQXNFO0FBQ3RFLGlFQUFnRTtBQUdoRSw2RkFLa0Q7QUFDbEQsNkVBQW9GO0FBQ3BGLCtFQUF5RTtBQWlCekUsTUFBTSw0QkFBNEIsR0FBRyxJQUFBLDBCQUFVLEVBQzdDLDRCQUE0QixFQUM1QixLQUFLLEVBQUUsS0FBdUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDL0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLDJEQUEyQixFQUM5QyxTQUFTLEVBQ1Q7UUFDRSxJQUFBLDJEQUEyQixHQUFFO1FBQzdCLElBQUEsb0RBQW9CLEVBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztLQUN6QyxFQUNELEtBQUssSUFBSSxFQUFFLENBQ1QsTUFBTSxJQUFBLDBDQUF1QixFQUFDLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO1FBQ2hFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtRQUNoQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2hELE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtLQUNyQixDQUFDLENBQ0wsQ0FBQTtJQUNELE9BQU8sSUFBSSw0QkFBWSxDQUFDLE1BQXFDLENBQUMsQ0FBQTtBQUNoRSxDQUFDLENBQ0YsQ0FBQTtBQUVELE1BQU0seUNBQXlDLEdBQUcsSUFBQSwwQkFBVSxFQUMxRCw0Q0FBNEMsRUFDNUMsS0FBSyxFQUFFLEtBQTJCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ25ELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFaEUsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSw2REFBNkQ7SUFDN0QsTUFBTSxRQUFRLEdBQWMsRUFBRSxDQUFBO0lBQzlCLEtBQUssTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUMxQixLQUFLLENBQUMsbUJBQW1CO2FBQ3RCLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUM7YUFDakQsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUM7YUFDaEQsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzdDLENBQUE7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUk7WUFBRSxTQUFRO1FBQ2hDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBQSw4REFBOEIsRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNqRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUNqQyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixDQUFDO29CQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO2lCQUN4QixDQUFDLENBQUE7Z0JBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FPTixDQUFBO2dCQUNiLE1BQU0sS0FBSyxHQUFHLElBQUEsb0NBQWtCLEVBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztxQkFDL0MsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDckQsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO3FCQUNsQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO29CQUFFLE9BQU07Z0JBQ3pCLE1BQU0sSUFBQSx5Q0FBNEIsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQ2hELEtBQUssRUFBRTt3QkFDTCxPQUFPLEVBQUUsTUFBTTt3QkFDZixXQUFXLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNoQyxNQUFNLEVBQUUsd0JBQWdCLENBQUMsTUFBTTt3QkFDL0IsZ0NBQWdDLEVBQUUsSUFBSTtxQkFDdkM7aUJBQ0YsQ0FBQyxDQUFBO2dCQUNGLCtEQUErRDtnQkFDL0QsK0RBQStEO2dCQUMvRCx5REFBeUQ7Z0JBQ3pELE1BQU0sSUFBQSw2Q0FBb0IsRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDL0MsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBQSxrRUFBcUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM1RSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVDLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxjQUFjLENBQ3RCLFFBQVEsRUFDUix1Q0FBdUMsQ0FDeEMsQ0FBQTtJQUNILENBQUM7SUFDRCxPQUFPLElBQUksNEJBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDMUMsQ0FBQyxDQUNGLENBQUE7QUFFWSxRQUFBLDJCQUEyQixHQUFHLElBQUEsOEJBQWMsRUFDdkQsc0JBQXNCLEVBQ3RCLENBQUMsS0FBdUMsRUFBRSxFQUFFO0lBQzFDLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLHlDQUF5QyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3hFLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUN4QyxDQUFDLENBQ0YsQ0FBQSJ9
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5hYmxlLWRpc3RyaWJ1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvYWZmaWxpYXRlL2VuYWJsZS1kaXN0cmlidXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEscUVBTzBDO0FBQzFDLHFEQUFnRTtBQUNoRSw0REFNb0M7QUFHcEMsbUVBQXNFO0FBRXRFLGlHQUFpRztBQXlDakcsTUFBTSxrQ0FBa0MsR0FBRyxJQUFBLDBCQUFVLEVBQ25ELDRDQUE0QyxFQUM1QyxLQUFLLEVBQ0gsS0FBOEIsRUFDOUIsRUFBRSxTQUFTLEVBQUUsRUFDbUMsRUFBRTtJQUNsRCxNQUFNLGdCQUFnQixHQUFHLElBQUEsMENBQXVCLEVBQUMsU0FBUyxDQUFDLENBQUE7SUFDM0QsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDckMsZUFBTyxDQUFDLE1BQU0sQ0FDUyxDQUFBO0lBQ3pCLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDMUMsZUFBTyxDQUFDLFdBQVcsQ0FDUyxDQUFBO0lBQzlCLE1BQU0sU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsdUJBQXVCLENBQzlELEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUE7SUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQzdCLHVFQUF1RSxDQUN4RSxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNoQixhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDN0Msa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO0tBQ3BFLENBQUMsQ0FBQTtJ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
|
|
@@ -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=
|