@xbstracts/medusa-coupons 0.0.1
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 +3207 -0
- package/.medusa/server/src/admin/index.mjs +3253 -0
- package/.medusa/server/src/api/admin/coupon-products/[product_id]/entitlements/route.js +9 -0
- package/.medusa/server/src/api/admin/coupon-products/[product_id]/mirror-promotion/route.js +132 -0
- package/.medusa/server/src/api/admin/coupon-products/[product_id]/preview/route.js +28 -0
- package/.medusa/server/src/api/admin/coupon-products/[product_id]/route.js +18 -0
- package/.medusa/server/src/api/admin/coupon-products/[product_id]/variants/[variant_config_id]/route.js +14 -0
- package/.medusa/server/src/api/admin/coupon-products/[product_id]/variants/route.js +14 -0
- package/.medusa/server/src/api/admin/coupon-products/configs/[id]/route.js +53 -0
- package/.medusa/server/src/api/admin/coupon-products/configs/[id]/variants/[variant_config_id]/route.js +26 -0
- package/.medusa/server/src/api/admin/coupon-products/configs/[id]/variants/route.js +27 -0
- package/.medusa/server/src/api/admin/coupon-products/configs/route.js +36 -0
- package/.medusa/server/src/api/admin/coupon-products/entitlements/[id]/cancel/route.js +15 -0
- package/.medusa/server/src/api/admin/coupon-products/entitlements/[id]/redeem/route.js +15 -0
- package/.medusa/server/src/api/admin/coupon-products/entitlements/[id]/route.js +16 -0
- package/.medusa/server/src/api/admin/coupon-products/entitlements/route.js +22 -0
- package/.medusa/server/src/api/admin/coupon-products/options/route.js +9 -0
- package/.medusa/server/src/api/admin/coupon-products/products/route.js +16 -0
- package/.medusa/server/src/api/admin/coupon-products/route.js +13 -0
- package/.medusa/server/src/api/admin/coupon-products/uploads/route.js +7 -0
- package/.medusa/server/src/api/coupon-product-routes.js +546 -0
- package/.medusa/server/src/api/entitlement-utils.js +90 -0
- package/.medusa/server/src/api/media-upload.js +57 -0
- package/.medusa/server/src/api/middlewares.js +92 -0
- package/.medusa/server/src/api/product-utils.js +304 -0
- package/.medusa/server/src/api/promotion-code-resolver.js +225 -0
- package/.medusa/server/src/api/seller-utils.js +101 -0
- package/.medusa/server/src/api/utils.js +25 -0
- package/.medusa/server/src/api/validators.js +199 -0
- package/.medusa/server/src/api/vendor/coupon-products/[product_id]/entitlements/route.js +9 -0
- package/.medusa/server/src/api/vendor/coupon-products/[product_id]/route.js +18 -0
- package/.medusa/server/src/api/vendor/coupon-products/[product_id]/variants/[variant_config_id]/route.js +14 -0
- package/.medusa/server/src/api/vendor/coupon-products/[product_id]/variants/route.js +14 -0
- package/.medusa/server/src/api/vendor/coupon-products/configs/[id]/route.js +60 -0
- package/.medusa/server/src/api/vendor/coupon-products/configs/[id]/variants/[variant_config_id]/route.js +41 -0
- package/.medusa/server/src/api/vendor/coupon-products/configs/[id]/variants/route.js +45 -0
- package/.medusa/server/src/api/vendor/coupon-products/configs/route.js +51 -0
- package/.medusa/server/src/api/vendor/coupon-products/entitlements/[id]/route.js +25 -0
- package/.medusa/server/src/api/vendor/coupon-products/entitlements/route.js +45 -0
- package/.medusa/server/src/api/vendor/coupon-products/options/route.js +9 -0
- package/.medusa/server/src/api/vendor/coupon-products/products/route.js +19 -0
- package/.medusa/server/src/api/vendor/coupon-products/route.js +13 -0
- package/.medusa/server/src/api/vendor/coupon-products/uploads/route.js +7 -0
- package/.medusa/server/src/jobs/retry-coupon-media-deletes.js +14 -0
- package/.medusa/server/src/links/coupon-issuance-order-line-item.js +17 -0
- package/.medusa/server/src/links/coupon-issuance-order.js +15 -0
- package/.medusa/server/src/links/coupon-product-config-product.js +17 -0
- package/.medusa/server/src/links/coupon-product-variant-config-variant.js +17 -0
- package/.medusa/server/src/links/coupon-promotion-mirror-promotion.js +17 -0
- package/.medusa/server/src/links/customer-coupon-entitlement-customer.js +15 -0
- package/.medusa/server/src/modules/coupon/constants.js +46 -0
- package/.medusa/server/src/modules/coupon/index.js +16 -0
- package/.medusa/server/src/modules/coupon/loaders/reconcile-coupon-products.js +65 -0
- package/.medusa/server/src/modules/coupon/migrations/Migration20260709000000.js +40 -0
- package/.medusa/server/src/modules/coupon/migrations/Migration20260710000000.js +22 -0
- package/.medusa/server/src/modules/coupon/migrations/Migration20260711000000.js +25 -0
- package/.medusa/server/src/modules/coupon/migrations/Migration20260712000000.js +78 -0
- package/.medusa/server/src/modules/coupon/migrations/Migration20260719000000.js +19 -0
- package/.medusa/server/src/modules/coupon/migrations/Migration20260722000000.js +17 -0
- package/.medusa/server/src/modules/coupon/migrations/Migration20260723000000.js +18 -0
- package/.medusa/server/src/modules/coupon/models/coupon-entitlement-promotion.js +31 -0
- package/.medusa/server/src/modules/coupon/models/coupon-entitlement-seller.js +28 -0
- package/.medusa/server/src/modules/coupon/models/coupon-issuance.js +35 -0
- package/.medusa/server/src/modules/coupon/models/coupon-media-asset.js +41 -0
- package/.medusa/server/src/modules/coupon/models/coupon-product-config.js +45 -0
- package/.medusa/server/src/modules/coupon/models/coupon-product-variant-config.js +36 -0
- package/.medusa/server/src/modules/coupon/models/coupon-promotion-mirror.js +27 -0
- package/.medusa/server/src/modules/coupon/models/customer-coupon-entitlement.js +56 -0
- package/.medusa/server/src/modules/coupon/models/index.js +23 -0
- package/.medusa/server/src/modules/coupon/payment-order-utils.js +76 -0
- package/.medusa/server/src/modules/coupon/product-metadata.js +24 -0
- package/.medusa/server/src/modules/coupon/purchase-conditions.js +138 -0
- package/.medusa/server/src/modules/coupon/service.js +628 -0
- package/.medusa/server/src/modules/coupon/types.js +3 -0
- package/.medusa/server/src/modules/coupon/utils.js +302 -0
- package/.medusa/server/src/subscribers/issue-coupons-from-order.js +88 -0
- package/.medusa/server/src/vendor/index.mjs +3237 -0
- package/.medusa/server/src/workflows/hooks/validate-coupon-add-to-cart.js +13 -0
- package/.medusa/server/src/workflows/hooks/validate-coupon-complete-cart.js +8 -0
- package/.medusa/server/src/workflows/index.js +21 -0
- package/.medusa/server/src/workflows/steps.js +27 -0
- package/.medusa/server/src/workflows/validate-coupon-purchase.js +85 -0
- package/README.md +84 -0
- package/package.json +102 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const CustomerCouponEntitlement = utils_1.model
|
|
6
|
+
.define("customer_coupon_entitlement", {
|
|
7
|
+
id: utils_1.model.id({ prefix: "ccoup" }).primaryKey(),
|
|
8
|
+
origin: utils_1.model.enum([...constants_1.ENTITLEMENT_ORIGINS]).default("purchase"),
|
|
9
|
+
customer_id: utils_1.model.text().nullable(),
|
|
10
|
+
email: utils_1.model.text().nullable(),
|
|
11
|
+
code: utils_1.model.text().nullable(),
|
|
12
|
+
shared_code: utils_1.model.text().nullable(),
|
|
13
|
+
status: utils_1.model.enum([...constants_1.ENTITLEMENT_STATUSES]).default("issued"),
|
|
14
|
+
product_id: utils_1.model.text().nullable(),
|
|
15
|
+
variant_id: utils_1.model.text().nullable(),
|
|
16
|
+
order_id: utils_1.model.text().nullable(),
|
|
17
|
+
line_item_id: utils_1.model.text().nullable(),
|
|
18
|
+
issuance_id: utils_1.model.text().nullable(),
|
|
19
|
+
config_id: utils_1.model.text().nullable(),
|
|
20
|
+
variant_config_id: utils_1.model.text().nullable(),
|
|
21
|
+
benefit_snapshot: utils_1.model.json(),
|
|
22
|
+
source_snapshot: utils_1.model.json().nullable(),
|
|
23
|
+
expires_at: utils_1.model.dateTime().nullable(),
|
|
24
|
+
redeemed_at: utils_1.model.dateTime().nullable(),
|
|
25
|
+
external_reference: utils_1.model.text().nullable(),
|
|
26
|
+
metadata: utils_1.model.json().nullable(),
|
|
27
|
+
})
|
|
28
|
+
.indexes([
|
|
29
|
+
{
|
|
30
|
+
name: "IDX_customer_coupon_entitlement_customer_id",
|
|
31
|
+
on: ["customer_id"],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: "IDX_customer_coupon_entitlement_code",
|
|
35
|
+
on: ["code"],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "IDX_customer_coupon_entitlement_order_id",
|
|
39
|
+
on: ["order_id"],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "IDX_customer_coupon_entitlement_issuance_id",
|
|
43
|
+
on: ["issuance_id"],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "IDX_customer_coupon_entitlement_status",
|
|
47
|
+
on: ["status"],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "IDX_customer_coupon_entitlement_external_reference_unique",
|
|
51
|
+
on: ["external_reference"],
|
|
52
|
+
unique: true,
|
|
53
|
+
},
|
|
54
|
+
]);
|
|
55
|
+
exports.default = CustomerCouponEntitlement;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItY291cG9uLWVudGl0bGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY291cG9uL21vZGVscy9jdXN0b21lci1jb3Vwb24tZW50aXRsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFDakQsNENBQXdFO0FBRXhFLE1BQU0seUJBQXlCLEdBQUcsYUFBSztLQUNwQyxNQUFNLENBQUMsNkJBQTZCLEVBQUU7SUFDckMsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUU7SUFDOUMsTUFBTSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLCtCQUFtQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ2hFLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3BDLEtBQUssRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlCLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdCLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3BDLE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxnQ0FBb0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUMvRCxVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxTQUFTLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxpQkFBaUIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFDLGdCQUFnQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDOUIsZUFBZSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsVUFBVSxFQUFFLGFBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsV0FBVyxFQUFFLGFBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsa0JBQWtCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNsQyxDQUFDO0tBQ0QsT0FBTyxDQUFDO0lBQ1A7UUFDRSxJQUFJLEVBQUUsNkNBQTZDO1FBQ25ELEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQztLQUNwQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHNDQUFzQztRQUM1QyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7S0FDYjtJQUNEO1FBQ0UsSUFBSSxFQUFFLDBDQUEwQztRQUNoRCxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUM7S0FDakI7SUFDRDtRQUNFLElBQUksRUFBRSw2Q0FBNkM7UUFDbkQsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDO0tBQ3BCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsd0NBQXdDO1FBQzlDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQztLQUNmO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsMkRBQTJEO1FBQ2pFLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDO1FBQzFCLE1BQU0sRUFBRSxJQUFJO0tBQ2I7Q0FDRixDQUFDLENBQUE7QUFFSixrQkFBZSx5QkFBeUIsQ0FBQSJ9
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CustomerCouponEntitlement = exports.CouponPromotionMirror = exports.CouponProductVariantConfig = exports.CouponProductConfig = exports.CouponMediaAsset = exports.CouponEntitlementSeller = exports.CouponEntitlementPromotion = exports.CouponIssuance = void 0;
|
|
7
|
+
var coupon_issuance_1 = require("./coupon-issuance");
|
|
8
|
+
Object.defineProperty(exports, "CouponIssuance", { enumerable: true, get: function () { return __importDefault(coupon_issuance_1).default; } });
|
|
9
|
+
var coupon_entitlement_promotion_1 = require("./coupon-entitlement-promotion");
|
|
10
|
+
Object.defineProperty(exports, "CouponEntitlementPromotion", { enumerable: true, get: function () { return __importDefault(coupon_entitlement_promotion_1).default; } });
|
|
11
|
+
var coupon_entitlement_seller_1 = require("./coupon-entitlement-seller");
|
|
12
|
+
Object.defineProperty(exports, "CouponEntitlementSeller", { enumerable: true, get: function () { return __importDefault(coupon_entitlement_seller_1).default; } });
|
|
13
|
+
var coupon_media_asset_1 = require("./coupon-media-asset");
|
|
14
|
+
Object.defineProperty(exports, "CouponMediaAsset", { enumerable: true, get: function () { return __importDefault(coupon_media_asset_1).default; } });
|
|
15
|
+
var coupon_product_config_1 = require("./coupon-product-config");
|
|
16
|
+
Object.defineProperty(exports, "CouponProductConfig", { enumerable: true, get: function () { return __importDefault(coupon_product_config_1).default; } });
|
|
17
|
+
var coupon_product_variant_config_1 = require("./coupon-product-variant-config");
|
|
18
|
+
Object.defineProperty(exports, "CouponProductVariantConfig", { enumerable: true, get: function () { return __importDefault(coupon_product_variant_config_1).default; } });
|
|
19
|
+
var coupon_promotion_mirror_1 = require("./coupon-promotion-mirror");
|
|
20
|
+
Object.defineProperty(exports, "CouponPromotionMirror", { enumerable: true, get: function () { return __importDefault(coupon_promotion_mirror_1).default; } });
|
|
21
|
+
var customer_coupon_entitlement_1 = require("./customer-coupon-entitlement");
|
|
22
|
+
Object.defineProperty(exports, "CustomerCouponEntitlement", { enumerable: true, get: function () { return __importDefault(customer_coupon_entitlement_1).default; } });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb3Vwb24vbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUE2RDtBQUFwRCxrSUFBQSxPQUFPLE9BQWtCO0FBQ2xDLCtFQUFzRjtBQUE3RSwySkFBQSxPQUFPLE9BQThCO0FBQzlDLHlFQUFnRjtBQUF2RSxxSkFBQSxPQUFPLE9BQTJCO0FBQzNDLDJEQUFrRTtBQUF6RCx1SUFBQSxPQUFPLE9BQW9CO0FBQ3BDLGlFQUF3RTtBQUEvRCw2SUFBQSxPQUFPLE9BQXVCO0FBQ3ZDLGlGQUF1RjtBQUE5RSw0SkFBQSxPQUFPLE9BQThCO0FBQzlDLHFFQUE0RTtBQUFuRSxpSkFBQSxPQUFPLE9BQXlCO0FBQ3pDLDZFQUFvRjtBQUEzRSx5SkFBQSxPQUFPLE9BQTZCIn0=
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveOrderIdFromPaymentEvent = resolveOrderIdFromPaymentEvent;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
function id(value) {
|
|
6
|
+
return typeof value === "string" && value.trim() ? value.trim() : "";
|
|
7
|
+
}
|
|
8
|
+
async function graphId(container, entity, fields, filters, field) {
|
|
9
|
+
try {
|
|
10
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
11
|
+
const { data } = await query.graph({ entity, fields, filters });
|
|
12
|
+
return id(data?.[0]?.[field]);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return "";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function databaseId(container, table, filters, field) {
|
|
19
|
+
try {
|
|
20
|
+
const db = container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
|
|
21
|
+
const row = await db(table)
|
|
22
|
+
.where(filters)
|
|
23
|
+
.whereNull("deleted_at")
|
|
24
|
+
.first(field);
|
|
25
|
+
return id(row?.[field]);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return "";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function paymentIdFromCapture(container, captureId) {
|
|
32
|
+
if (!captureId)
|
|
33
|
+
return "";
|
|
34
|
+
return ((await graphId(container, "capture", ["id", "payment_id"], { id: captureId }, "payment_id")) ||
|
|
35
|
+
(await databaseId(container, "capture", { id: captureId }, "payment_id")));
|
|
36
|
+
}
|
|
37
|
+
async function collectionIdFromPayment(container, paymentId) {
|
|
38
|
+
if (!paymentId)
|
|
39
|
+
return "";
|
|
40
|
+
return ((await graphId(container, "payment", ["id", "payment_collection_id"], { id: paymentId }, "payment_collection_id")) ||
|
|
41
|
+
(await databaseId(container, "payment", { id: paymentId }, "payment_collection_id")));
|
|
42
|
+
}
|
|
43
|
+
async function orderIdFromCollection(container, collectionId) {
|
|
44
|
+
if (!collectionId)
|
|
45
|
+
return "";
|
|
46
|
+
return ((await graphId(container, "order_payment_collection", ["order_id", "payment_collection_id"], { payment_collection_id: collectionId }, "order_id")) ||
|
|
47
|
+
(await databaseId(container, "order_payment_collection", { payment_collection_id: collectionId }, "order_id")));
|
|
48
|
+
}
|
|
49
|
+
async function resolveOrderIdFromPaymentEvent(data, container) {
|
|
50
|
+
const eventId = id(data.id);
|
|
51
|
+
const direct = id(data.order_id) ||
|
|
52
|
+
id(data.orderId) ||
|
|
53
|
+
id(data.order?.id) ||
|
|
54
|
+
id(data.metadata?.order_id) ||
|
|
55
|
+
(eventId.startsWith("order_") ? eventId : "");
|
|
56
|
+
if (direct)
|
|
57
|
+
return direct;
|
|
58
|
+
const captureId = id(data.capture_id) ||
|
|
59
|
+
id(data.captureId) ||
|
|
60
|
+
id(data.capture?.id) ||
|
|
61
|
+
(eventId.startsWith("capt_") ? eventId : "");
|
|
62
|
+
const paymentId = id(data.payment_id) ||
|
|
63
|
+
id(data.paymentId) ||
|
|
64
|
+
id(data.payment?.id) ||
|
|
65
|
+
id(data.capture?.payment_id) ||
|
|
66
|
+
id(data.capture?.paymentId) ||
|
|
67
|
+
(eventId.startsWith("pay_") ? eventId : "") ||
|
|
68
|
+
(await paymentIdFromCapture(container, captureId));
|
|
69
|
+
const collectionId = id(data.payment_collection_id) ||
|
|
70
|
+
id(data.paymentCollectionId) ||
|
|
71
|
+
id(data.payment?.payment_collection_id) ||
|
|
72
|
+
id(data.payment?.paymentCollectionId) ||
|
|
73
|
+
(await collectionIdFromPayment(container, paymentId));
|
|
74
|
+
return orderIdFromCollection(container, collectionId);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1vcmRlci11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2NvdXBvbi9wYXltZW50LW9yZGVyLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0hBLHdFQWtDQztBQWxKRCxxREFBcUU7QUFzQnJFLFNBQVMsRUFBRSxDQUFDLEtBQWM7SUFDeEIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUN0RSxDQUFDO0FBRUQsS0FBSyxVQUFVLE9BQU8sQ0FDcEIsU0FBYyxFQUNkLE1BQWMsRUFDZCxNQUFnQixFQUNoQixPQUFnQyxFQUNoQyxLQUFhO0lBRWIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNoRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQy9ELE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxVQUFVLENBQ3ZCLFNBQWMsRUFDZCxLQUFhLEVBQ2IsT0FBZ0MsRUFDaEMsS0FBYTtJQUViLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUFRLENBQUE7UUFDNUUsTUFBTSxHQUFHLEdB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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildCouponProductMarker = buildCouponProductMarker;
|
|
4
|
+
exports.hasCanonicalCouponProductMarker = hasCanonicalCouponProductMarker;
|
|
5
|
+
function buildCouponProductMarker(configId, enabled = true) {
|
|
6
|
+
return {
|
|
7
|
+
enabled,
|
|
8
|
+
config_id: configId || null,
|
|
9
|
+
item_type: "coupon",
|
|
10
|
+
fulfillment_type: "code_issuance",
|
|
11
|
+
requires_shipping: false,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function hasCanonicalCouponProductMarker(value, configId) {
|
|
15
|
+
if (!value || typeof value !== "object")
|
|
16
|
+
return false;
|
|
17
|
+
const marker = value;
|
|
18
|
+
return (marker.enabled === true &&
|
|
19
|
+
marker.config_id === configId &&
|
|
20
|
+
marker.item_type === "coupon" &&
|
|
21
|
+
marker.fulfillment_type === "code_issuance" &&
|
|
22
|
+
marker.requires_shipping === false);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1tZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2NvdXBvbi9wcm9kdWN0LW1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsNERBV0M7QUFFRCwwRUFjQztBQTNCRCxTQUFnQix3QkFBd0IsQ0FDdEMsUUFBd0IsRUFDeEIsT0FBTyxHQUFHLElBQUk7SUFFZCxPQUFPO1FBQ0wsT0FBTztRQUNQLFNBQVMsRUFBRSxRQUFRLElBQUksSUFBSTtRQUMzQixTQUFTLEVBQUUsUUFBUTtRQUNuQixnQkFBZ0IsRUFBRSxlQUFlO1FBQ2pDLGlCQUFpQixFQUFFLEtBQUs7S0FDekIsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFnQiwrQkFBK0IsQ0FDN0MsS0FBYyxFQUNkLFFBQWdCO0lBRWhCLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQ3JELE1BQU0sTUFBTSxHQUFHLEtBQWdDLENBQUE7SUFFL0MsT0FBTyxDQUNMLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSTtRQUN2QixNQUFNLENBQUMsU0FBUyxLQUFLLFFBQVE7UUFDN0IsTUFBTSxDQUFDLFNBQVMsS0FBSyxRQUFRO1FBQzdCLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxlQUFlO1FBQzNDLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLENBQ25DLENBQUE7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.COUPON_PURCHASE_CONDITION_OPERATORS = exports.COUPON_PURCHASE_CONDITION_ATTRIBUTES = void 0;
|
|
4
|
+
exports.normalizePurchaseConditions = normalizePurchaseConditions;
|
|
5
|
+
exports.findPurchaseCondition = findPurchaseCondition;
|
|
6
|
+
exports.resolveEffectiveConditionValues = resolveEffectiveConditionValues;
|
|
7
|
+
exports.buildCouponPurchaseContext = buildCouponPurchaseContext;
|
|
8
|
+
exports.evaluateCouponPurchaseConditions = evaluateCouponPurchaseConditions;
|
|
9
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
10
|
+
exports.COUPON_PURCHASE_CONDITION_ATTRIBUTES = [
|
|
11
|
+
"customer.groups.id",
|
|
12
|
+
"region.id",
|
|
13
|
+
"shipping_address.country_code",
|
|
14
|
+
"sales_channel_id",
|
|
15
|
+
"currency_code",
|
|
16
|
+
];
|
|
17
|
+
exports.COUPON_PURCHASE_CONDITION_OPERATORS = [
|
|
18
|
+
"in",
|
|
19
|
+
"eq",
|
|
20
|
+
"ne",
|
|
21
|
+
];
|
|
22
|
+
const ATTRIBUTE_SET = new Set(exports.COUPON_PURCHASE_CONDITION_ATTRIBUTES);
|
|
23
|
+
const OPERATOR_SET = new Set(exports.COUPON_PURCHASE_CONDITION_OPERATORS);
|
|
24
|
+
function invalid(message) {
|
|
25
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message);
|
|
26
|
+
}
|
|
27
|
+
function normalizeConditionValue(attribute, value) {
|
|
28
|
+
const normalized = String(value ?? "").trim();
|
|
29
|
+
if (!normalized)
|
|
30
|
+
return "";
|
|
31
|
+
return attribute === "currency_code" ||
|
|
32
|
+
attribute === "shipping_address.country_code"
|
|
33
|
+
? normalized.toLowerCase()
|
|
34
|
+
: normalized;
|
|
35
|
+
}
|
|
36
|
+
function normalizePurchaseConditions(input) {
|
|
37
|
+
if (input == null)
|
|
38
|
+
return [];
|
|
39
|
+
if (!Array.isArray(input)) {
|
|
40
|
+
return invalid("purchase_conditions must be an array");
|
|
41
|
+
}
|
|
42
|
+
const seen = new Set();
|
|
43
|
+
return input.map((raw, index) => {
|
|
44
|
+
const attribute = raw?.attribute;
|
|
45
|
+
const operator = raw?.operator;
|
|
46
|
+
if (!ATTRIBUTE_SET.has(attribute)) {
|
|
47
|
+
return invalid(`purchase_conditions[${index}].attribute is not supported`);
|
|
48
|
+
}
|
|
49
|
+
if (!OPERATOR_SET.has(operator)) {
|
|
50
|
+
return invalid(`purchase_conditions[${index}].operator is not supported`);
|
|
51
|
+
}
|
|
52
|
+
if (seen.has(attribute)) {
|
|
53
|
+
return invalid(`purchase condition attribute ${attribute} cannot be duplicated`);
|
|
54
|
+
}
|
|
55
|
+
seen.add(attribute);
|
|
56
|
+
if (!Array.isArray(raw.values)) {
|
|
57
|
+
return invalid(`purchase_conditions[${index}].values must be an array`);
|
|
58
|
+
}
|
|
59
|
+
const values = Array.from(new Set(raw.values
|
|
60
|
+
.map((value) => normalizeConditionValue(attribute, value))
|
|
61
|
+
.filter(Boolean)));
|
|
62
|
+
if (!values.length) {
|
|
63
|
+
return invalid(`purchase_conditions[${index}].values cannot be empty`);
|
|
64
|
+
}
|
|
65
|
+
if (operator === "eq" && values.length !== 1) {
|
|
66
|
+
return invalid("Equals purchase conditions require exactly one value");
|
|
67
|
+
}
|
|
68
|
+
return { attribute, operator, values };
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function findPurchaseCondition(conditions, attribute) {
|
|
72
|
+
return (conditions || []).find((condition) => condition.attribute === attribute);
|
|
73
|
+
}
|
|
74
|
+
function resolveEffectiveConditionValues(condition, supportedValues) {
|
|
75
|
+
const supported = Array.from(new Set(supportedValues.filter(Boolean)));
|
|
76
|
+
if (!condition)
|
|
77
|
+
return supported;
|
|
78
|
+
const selected = new Set(condition.values);
|
|
79
|
+
if (condition.operator === "ne") {
|
|
80
|
+
return supported.filter((value) => !selected.has(value));
|
|
81
|
+
}
|
|
82
|
+
return supported.filter((value) => selected.has(value));
|
|
83
|
+
}
|
|
84
|
+
function buildCouponPurchaseContext(value) {
|
|
85
|
+
return {
|
|
86
|
+
customer_group_ids: Array.from(new Set((value.customer?.groups || [])
|
|
87
|
+
.map((group) => group?.id)
|
|
88
|
+
.filter(Boolean))),
|
|
89
|
+
region_id: value.region_id || value.region?.id || null,
|
|
90
|
+
country_code: value.shipping_address?.country_code
|
|
91
|
+
? String(value.shipping_address.country_code).toLowerCase()
|
|
92
|
+
: null,
|
|
93
|
+
sales_channel_id: value.sales_channel_id || value.sales_channel?.id || null,
|
|
94
|
+
currency_code: value.currency_code
|
|
95
|
+
? String(value.currency_code).toLowerCase()
|
|
96
|
+
: null,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function evaluateCouponPurchaseConditions(conditions, context, options = {}) {
|
|
100
|
+
const failed = new Set();
|
|
101
|
+
const deferred = new Set();
|
|
102
|
+
for (const condition of normalizePurchaseConditions(conditions || [])) {
|
|
103
|
+
const actual = condition.attribute === "customer.groups.id"
|
|
104
|
+
? context.customer_group_ids
|
|
105
|
+
: condition.attribute === "region.id"
|
|
106
|
+
? context.region_id
|
|
107
|
+
: condition.attribute === "shipping_address.country_code"
|
|
108
|
+
? context.country_code
|
|
109
|
+
: condition.attribute === "sales_channel_id"
|
|
110
|
+
? context.sales_channel_id
|
|
111
|
+
: context.currency_code;
|
|
112
|
+
if (condition.attribute === "shipping_address.country_code" &&
|
|
113
|
+
!actual &&
|
|
114
|
+
options.defer_missing_country) {
|
|
115
|
+
deferred.add(condition.attribute);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (condition.attribute !== "customer.groups.id" && !actual) {
|
|
119
|
+
failed.add(condition.attribute);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const actualValues = Array.isArray(actual)
|
|
123
|
+
? actual.filter(Boolean)
|
|
124
|
+
: actual
|
|
125
|
+
? [actual]
|
|
126
|
+
: [];
|
|
127
|
+
const overlaps = actualValues.some((value) => condition.values.includes(value));
|
|
128
|
+
const matches = condition.operator === "ne" ? !overlaps : overlaps;
|
|
129
|
+
if (!matches)
|
|
130
|
+
failed.add(condition.attribute);
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
eligible: failed.size === 0,
|
|
134
|
+
failed_attributes: Array.from(failed),
|
|
135
|
+
deferred_attributes: Array.from(deferred),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyY2hhc2UtY29uZGl0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2NvdXBvbi9wdXJjaGFzZS1jb25kaXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJDQSxrRUEwQ0M7QUFFRCxzREFLQztBQUVELDBFQWFDO0FBRUQsZ0VBcUJDO0FBUUQsNEVBbURDO0FBN0xELHFEQUF1RDtBQVMxQyxRQUFBLG9DQUFvQyxHQUFHO0lBQ2xELG9CQUFvQjtJQUNwQixXQUFXO0lBQ1gsK0JBQStCO0lBQy9CLGtCQUFrQjtJQUNsQixlQUFlO0NBQytDLENBQUE7QUFFbkQsUUFBQSxtQ0FBbUMsR0FBRztJQUNqRCxJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7Q0FDeUQsQ0FBQTtBQUUvRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBUyw0Q0FBb0MsQ0FBQyxDQUFBO0FBQzNFLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFTLDJDQUFtQyxDQUFDLENBQUE7QUFFekUsU0FBUyxPQUFPLENBQUMsT0FBZTtJQUM5QixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDaEUsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzlCLFNBQTJDLEVBQzNDLEtBQWM7SUFFZCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzdDLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFFMUIsT0FBTyxTQUFTLEtBQUssZUFBZTtRQUNsQyxTQUFTLEtBQUssK0JBQStCO1FBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1FBQzFCLENBQUMsQ0FBQyxVQUFVLENBQUE7QUFDaEIsQ0FBQztBQUVELFNBQWdCLDJCQUEyQixDQUN6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
|