@mercurjs/core 2.3.4-canary.1 → 2.3.4-canary.10
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/api/admin/offers/batch/route.js +2 -1
- package/.medusa/server/src/api/admin/offers/query-config.js +2 -1
- package/.medusa/server/src/api/admin/offers/validators.d.ts +5 -0
- package/.medusa/server/src/api/admin/offers/validators.js +3 -2
- package/.medusa/server/src/api/admin/sellers/query-config.d.ts +1 -1
- package/.medusa/server/src/api/admin/sellers/query-config.js +11 -8
- package/.medusa/server/src/api/admin/sellers/validators.d.ts +6 -0
- package/.medusa/server/src/api/admin/sellers/validators.js +3 -1
- package/.medusa/server/src/api/admin/shipping-profiles/middlewares.js +2 -18
- package/.medusa/server/src/api/store/offers/query-config.js +2 -1
- package/.medusa/server/src/api/store/order-groups/query-config.js +14 -3
- package/.medusa/server/src/api/utils/rbac-role-fields.d.ts +1 -0
- package/.medusa/server/src/api/utils/rbac-role-fields.js +10 -0
- package/.medusa/server/src/api/vendor/members/middlewares.js +13 -11
- package/.medusa/server/src/api/vendor/offers/batch/route.js +2 -1
- package/.medusa/server/src/api/vendor/offers/query-config.js +2 -1
- package/.medusa/server/src/api/vendor/offers/validators.d.ts +11 -0
- package/.medusa/server/src/api/vendor/offers/validators.js +6 -3
- package/.medusa/server/src/api/vendor/rbac/me/permissions/route.js +9 -7
- package/.medusa/server/src/api/vendor/sellers/query-config.d.ts +3 -3
- package/.medusa/server/src/api/vendor/sellers/query-config.js +25 -20
- package/.medusa/server/src/api/vendor/sellers/validators.d.ts +3 -0
- package/.medusa/server/src/api/vendor/sellers/validators.js +2 -1
- package/.medusa/server/src/api/vendor/shipping-profiles/[id]/route.d.ts +0 -3
- package/.medusa/server/src/api/vendor/shipping-profiles/[id]/route.js +6 -30
- package/.medusa/server/src/api/vendor/shipping-profiles/helpers.d.ts +0 -1
- package/.medusa/server/src/api/vendor/shipping-profiles/helpers.js +2 -17
- package/.medusa/server/src/api/vendor/shipping-profiles/middlewares.js +1 -50
- package/.medusa/server/src/api/vendor/shipping-profiles/route.d.ts +0 -2
- package/.medusa/server/src/api/vendor/shipping-profiles/route.js +2 -16
- package/.medusa/server/src/api/vendor/shipping-profiles/validators.d.ts +0 -28
- package/.medusa/server/src/api/vendor/shipping-profiles/validators.js +2 -16
- package/.medusa/server/src/api/vendor/stores/query-config.js +4 -3
- package/.medusa/server/src/links/seller-member-rbac-role.js +31 -3
- package/.medusa/server/src/modules/commission/index.js +3 -2
- package/.medusa/server/src/modules/commission/loaders/providers.d.ts +4 -0
- package/.medusa/server/src/modules/commission/loaders/providers.js +40 -0
- package/.medusa/server/src/modules/commission/migrations/Migration20260910000000.d.ts +5 -0
- package/.medusa/server/src/modules/commission/migrations/Migration20260910000000.js +16 -0
- package/.medusa/server/src/modules/commission/models/commission-line.d.ts +2 -0
- package/.medusa/server/src/modules/commission/models/commission-line.js +3 -1
- package/.medusa/server/src/modules/commission/providers/index.d.ts +1 -0
- package/.medusa/server/src/modules/commission/providers/index.js +6 -0
- package/.medusa/server/src/modules/commission/providers/system.d.ts +41 -0
- package/.medusa/server/src/modules/commission/providers/system.js +157 -0
- package/.medusa/server/src/modules/commission/service.d.ts +19 -33
- package/.medusa/server/src/modules/commission/service.js +14 -148
- package/.medusa/server/src/modules/commission/services/index.d.ts +2 -0
- package/.medusa/server/src/{workflows/shipping-profile/steps → modules/commission/services}/index.js +8 -2
- package/.medusa/server/src/modules/commission/services/provider-service.d.ts +12 -0
- package/.medusa/server/src/modules/commission/services/provider-service.js +21 -0
- package/.medusa/server/src/modules/media/models/media-image.d.ts +1 -1
- package/.medusa/server/src/modules/media/service.d.ts +1 -1
- package/.medusa/server/src/modules/offer/migrations/Migration20260908000000.d.ts +5 -0
- package/.medusa/server/src/modules/offer/migrations/Migration20260908000000.js +14 -0
- package/.medusa/server/src/modules/offer/models/offer.d.ts +2 -1
- package/.medusa/server/src/modules/offer/models/offer.js +2 -1
- package/.medusa/server/src/modules/offer/service.d.ts +2 -1
- package/.medusa/server/src/modules/payout/models/onboarding.d.ts +5 -5
- package/.medusa/server/src/modules/payout/models/payout-account.d.ts +7 -7
- package/.medusa/server/src/modules/payout/models/payout.d.ts +7 -7
- package/.medusa/server/src/modules/payout/services/payout-module-service.d.ts +19 -19
- package/.medusa/server/src/modules/product-attribute/models/product-attribute-value.d.ts +2 -2
- package/.medusa/server/src/modules/product-attribute/models/product-attribute.d.ts +2 -2
- package/.medusa/server/src/modules/product-attribute/service.d.ts +4 -4
- package/.medusa/server/src/modules/product-edit/models/product-change-action.d.ts +3 -3
- package/.medusa/server/src/modules/product-edit/models/product-change.d.ts +2 -2
- package/.medusa/server/src/modules/product-edit/service.d.ts +5 -5
- package/.medusa/server/src/modules/promotion-cost/models/promotion-cost.d.ts +1 -1
- package/.medusa/server/src/modules/promotion-cost/service.d.ts +2 -2
- package/.medusa/server/src/modules/seller/migrations/Migration20260908010000.d.ts +5 -0
- package/.medusa/server/src/modules/seller/migrations/Migration20260908010000.js +14 -0
- package/.medusa/server/src/modules/seller/models/address.d.ts +5 -4
- package/.medusa/server/src/modules/seller/models/member-invite.d.ts +5 -4
- package/.medusa/server/src/modules/seller/models/member.d.ts +5 -4
- package/.medusa/server/src/modules/seller/models/payment-details.d.ts +5 -4
- package/.medusa/server/src/modules/seller/models/professional-details.d.ts +5 -4
- package/.medusa/server/src/modules/seller/models/seller-member.d.ts +11 -9
- package/.medusa/server/src/modules/seller/models/seller.d.ts +5 -4
- package/.medusa/server/src/modules/seller/models/seller.js +2 -1
- package/.medusa/server/src/modules/seller/service.d.ts +41 -33
- package/.medusa/server/src/modules/seller/utils/ensure-seller-default-roles.js +2 -3
- package/.medusa/server/src/patches/manifest.js +3 -3
- package/.medusa/server/src/with-mercur.js +5 -4
- package/.medusa/server/src/workflows/cart/workflows/complete-cart-with-split-orders.d.ts +8 -0
- package/.medusa/server/src/workflows/cart/workflows/complete-cart-with-split-orders.js +17 -4
- package/.medusa/server/src/workflows/commission/workflows/refresh-order-commission-lines.d.ts +13 -2
- package/.medusa/server/src/workflows/commission/workflows/refresh-order-commission-lines.js +17 -3
- package/.medusa/server/src/workflows/index.d.ts +0 -1
- package/.medusa/server/src/workflows/index.js +1 -2
- package/.medusa/server/src/workflows/media/steps/create-images.d.ts +1 -1
- package/.medusa/server/src/workflows/offer/steps/create-offers.d.ts +3 -1
- package/.medusa/server/src/workflows/offer/steps/update-offers.d.ts +4 -1
- package/.medusa/server/src/workflows/offer/steps/update-offers.js +2 -1
- package/.medusa/server/src/workflows/offer/workflows/create-offers.js +2 -1
- package/.medusa/server/src/workflows/offer/workflows/update-offers.js +12 -3
- package/.medusa/server/src/workflows/payout/steps/update-payout-account.d.ts +5 -5
- package/.medusa/server/src/workflows/payout/steps/update-payout.d.ts +5 -5
- package/.medusa/server/src/workflows/product-attribute/steps/update-product-attribute-values.d.ts +2 -2
- package/.medusa/server/src/workflows/product-edit/steps/add-product-change-action.d.ts +2 -2
- package/.medusa/server/src/workflows/product-edit/steps/cancel-product-change.d.ts +2 -2
- package/.medusa/server/src/workflows/product-edit/steps/confirm-product-changes.d.ts +2 -2
- package/.medusa/server/src/workflows/product-edit/steps/create-product-change-actions.d.ts +2 -2
- package/.medusa/server/src/workflows/product-edit/steps/create-product-changes.d.ts +2 -2
- package/.medusa/server/src/workflows/product-edit/steps/decline-product-change.d.ts +2 -2
- package/.medusa/server/src/workflows/product-edit/steps/update-product-change-actions.d.ts +2 -2
- package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-attributes.d.ts +3 -0
- package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-attributes.js +3 -2
- package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-product.d.ts +3 -0
- package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-product.js +3 -2
- package/.medusa/server/src/workflows/promotion-cost/steps/upsert-promotion-costs.d.ts +1 -1
- package/.medusa/server/src/workflows/promotion-cost/workflows/upsert-promotion-costs.d.ts +1 -1
- package/.medusa/server/src/workflows/seller/steps/create-seller-default-roles.js +4 -1
- package/.medusa/server/src/workflows/seller/steps/create-seller-member.d.ts +11 -9
- package/.medusa/server/src/workflows/seller/steps/update-member.d.ts +5 -4
- package/.medusa/server/src/workflows/seller/steps/update-seller-member.d.ts +11 -9
- package/.medusa/server/src/workflows/seller/workflows/add-seller-member.d.ts +11 -9
- package/package.json +17 -17
- package/.medusa/server/src/links/shipping-profile-seller-link.d.ts +0 -2
- package/.medusa/server/src/links/shipping-profile-seller-link.js +0 -10
- package/.medusa/server/src/workflows/shipping-profile/index.d.ts +0 -2
- package/.medusa/server/src/workflows/shipping-profile/index.js +0 -19
- package/.medusa/server/src/workflows/shipping-profile/steps/index.d.ts +0 -1
- package/.medusa/server/src/workflows/shipping-profile/steps/link-seller-shipping-profile.d.ts +0 -6
- package/.medusa/server/src/workflows/shipping-profile/steps/link-seller-shipping-profile.js +0 -36
- package/.medusa/server/src/workflows/shipping-profile/workflows/create-seller-shipping-profiles.d.ts +0 -9
- package/.medusa/server/src/workflows/shipping-profile/workflows/create-seller-shipping-profiles.js +0 -20
- package/.medusa/server/src/workflows/shipping-profile/workflows/index.d.ts +0 -1
- package/.medusa/server/src/workflows/shipping-profile/workflows/index.js +0 -18
|
@@ -4,10 +4,38 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
-
const
|
|
7
|
+
const config_1 = require("@medusajs/framework/config");
|
|
8
8
|
const seller_1 = __importDefault(require("../modules/seller"));
|
|
9
|
+
// `medusaIntegrationTestRunner` registers feature flags without the project
|
|
10
|
+
// config and loads link files before Medusa's own flag loader runs, so the
|
|
11
|
+
// global router still reports rbac as off at that point. The loaded config is
|
|
12
|
+
// the reliable source.
|
|
13
|
+
const isRbacEnabled = () => {
|
|
14
|
+
if (utils_1.FeatureFlag.isFeatureEnabled("rbac")) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
return !!config_1.configManager.config.featureFlags?.rbac;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
// Must run before defineLink, which checks whether the file is disabled.
|
|
25
|
+
(0, utils_1.defineFileConfig)({
|
|
26
|
+
isDisabled: () => !isRbacEnabled(),
|
|
27
|
+
});
|
|
28
|
+
// Described inline instead of importing `@medusajs/medusa/rbac`: link files are
|
|
29
|
+
// evaluated at boot, and that import would load the RBAC module even with the
|
|
30
|
+
// flag off.
|
|
9
31
|
exports.default = (0, utils_1.defineLink)({
|
|
10
32
|
linkable: seller_1.default.linkable.sellerMember,
|
|
11
33
|
field: "role_id",
|
|
12
|
-
},
|
|
13
|
-
|
|
34
|
+
}, {
|
|
35
|
+
linkable: "rbac_role_id",
|
|
36
|
+
primaryKey: "id",
|
|
37
|
+
serviceName: utils_1.Modules.RBAC,
|
|
38
|
+
field: "rbacRole",
|
|
39
|
+
entity: "RbacRole",
|
|
40
|
+
}, { readOnly: true });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsbGVyLW1lbWJlci1yYmFjLXJvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGlua3Mvc2VsbGVyLW1lbWJlci1yYmFjLXJvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFLa0M7QUFDbEMsdURBQTBEO0FBQzFELCtEQUE0QztBQUU1Qyw0RUFBNEU7QUFDNUUsMkVBQTJFO0FBQzNFLDhFQUE4RTtBQUM5RSx1QkFBdUI7QUFDdkIsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQ3pCLElBQUksbUJBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxDQUFDLHNCQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUE7SUFDbEQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQTtBQUVELHlFQUF5RTtBQUN6RSxJQUFBLHdCQUFnQixFQUFDO0lBQ2YsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsYUFBYSxFQUFFO0NBQ25DLENBQUMsQ0FBQTtBQUVGLGdGQUFnRjtBQUNoRiw4RUFBOEU7QUFDOUUsWUFBWTtBQUNaLGtCQUFlLElBQUEsa0JBQVUsRUFDdkI7SUFDRSxRQUFRLEVBQUUsZ0JBQVksQ0FBQyxRQUFRLENBQUMsWUFBWTtJQUM1QyxLQUFLLEVBQUUsU0FBUztDQUNqQixFQUNEO0lBQ0UsUUFBUSxFQUFFLGNBQWM7SUFDeEIsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLGVBQU8sQ0FBQyxJQUFJO0lBQ3pCLEtBQUssRUFBRSxVQUFVO0lBQ2pCLE1BQU0sRUFBRSxVQUFVO0NBQ25CLEVBQ0QsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQ25CLENBQUEifQ==
|
|
@@ -6,9 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const utils_1 = require("@medusajs/framework/utils");
|
|
7
7
|
const types_1 = require("@mercurjs/types");
|
|
8
8
|
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
const providers_1 = __importDefault(require("./loaders/providers"));
|
|
9
10
|
const seed_default_commission_rate_1 = __importDefault(require("./loaders/seed-default-commission-rate"));
|
|
10
11
|
exports.default = (0, utils_1.Module)(types_1.MercurModules.COMMISSION, {
|
|
11
12
|
service: service_1.default,
|
|
12
|
-
loaders: [seed_default_commission_rate_1.default],
|
|
13
|
+
loaders: [providers_1.default, seed_default_commission_rate_1.default],
|
|
13
14
|
});
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb21taXNzaW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQWtEO0FBQ2xELDJDQUErQztBQUUvQyx3REFBK0M7QUFDL0Msb0VBQStDO0FBQy9DLDBHQUFvRjtBQUVwRixrQkFBZSxJQUFBLGNBQU0sRUFBQyxxQkFBYSxDQUFDLFVBQVUsRUFBRTtJQUM5QyxPQUFPLEVBQUUsaUJBQXVCO0lBQ2hDLE9BQU8sRUFBRSxDQUFDLG1CQUFhLEVBQUUsc0NBQStCLENBQUM7Q0FDMUQsQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const awilix_1 = require("@medusajs/framework/awilix");
|
|
4
|
+
const modules_sdk_1 = require("@medusajs/framework/modules-sdk");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const providers_1 = require("../providers");
|
|
7
|
+
const provider_service_1 = require("../services/provider-service");
|
|
8
|
+
const registrationFn = async (klass, container, pluginOptions) => {
|
|
9
|
+
if (!klass?.identifier) {
|
|
10
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_ARGUMENT, "Trying to register a commission provider without a provider identifier.");
|
|
11
|
+
}
|
|
12
|
+
const key = `${provider_service_1.CommissionProviderRegistrationPrefix}${pluginOptions.id ?? klass.identifier}`;
|
|
13
|
+
container.register({
|
|
14
|
+
[key]: (0, awilix_1.asFunction)((cradle) => new klass(cradle, pluginOptions.options ?? {}), {
|
|
15
|
+
lifetime: klass.LIFE_TIME || awilix_1.Lifetime.SINGLETON,
|
|
16
|
+
}),
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
exports.default = async ({ container, options, }) => {
|
|
20
|
+
await registrationFn(providers_1.SystemCommissionProvider, container, {
|
|
21
|
+
id: providers_1.SystemCommissionProvider.identifier,
|
|
22
|
+
});
|
|
23
|
+
container.register(provider_service_1.CommissionDefaultProvider, (0, awilix_1.asValue)(providers_1.SystemCommissionProvider.identifier));
|
|
24
|
+
const providers = options?.providers ?? [];
|
|
25
|
+
await (0, modules_sdk_1.moduleProviderLoader)({
|
|
26
|
+
container,
|
|
27
|
+
providers,
|
|
28
|
+
registerServiceFn: registrationFn,
|
|
29
|
+
});
|
|
30
|
+
const isSingleProvider = providers.length === 1;
|
|
31
|
+
for (const provider of providers) {
|
|
32
|
+
if (provider.is_default || isSingleProvider) {
|
|
33
|
+
container.register(provider_service_1.CommissionDefaultProvider, (0, awilix_1.asValue)(provider.id));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (options?.default_provider) {
|
|
37
|
+
container.register(provider_service_1.CommissionDefaultProvider, (0, awilix_1.asValue)(options.default_provider));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY29tbWlzc2lvbi9sb2FkZXJzL3Byb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVEQUEwRTtBQUMxRSxpRUFBc0U7QUFFdEUscURBQXVEO0FBR3ZELDRDQUF1RDtBQUN2RCxtRUFHcUM7QUFFckMsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEVBQUU7SUFDL0QsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLHlFQUF5RSxDQUMxRSxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLEdBQUcsdURBQW9DLEdBQUcsYUFBYSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUE7SUFFNUYsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUEsbUJBQVUsRUFDZixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQzFEO1lBQ0UsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksaUJBQVEsQ0FBQyxTQUFTO1NBQ2hELENBQ0Y7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUFFRCxrQkFBZSxLQUFLLEVBQUUsRUFDcEIsU0FBUyxFQUNULE9BQU8sR0FDZ0MsRUFBaUIsRUFBRTtJQUMxRCxNQUFNLGNBQWMsQ0FBQyxvQ0FBd0IsRUFBRSxTQUFTLEVBQUU7UUFDeEQsRUFBRSxFQUFFLG9DQUF3QixDQUFDLFVBQVU7S0FDeEMsQ0FBQyxDQUFBO0lBQ0YsU0FBUyxDQUFDLFFBQVEsQ0FDaEIsNENBQXlCLEVBQ3pCLElBQUEsZ0JBQU8sRUFBQyxvQ0FBd0IsQ0FBQyxVQUFVLENBQUMsQ0FDN0MsQ0FBQTtJQUVELE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRSxDQUFBO0lBRTFDLE1BQU0sSUFBQSxrQ0FBb0IsRUFBQztRQUN6QixTQUFTO1FBQ1QsU0FBUztRQUNULGlCQUFpQixFQUFFLGNBQWM7S0FDbEMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQTtJQUMvQyxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLElBQUksUUFBUSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLFNBQVMsQ0FBQyxRQUFRLENBQUMsNENBQXlCLEVBQUUsSUFBQSxnQkFBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixTQUFTLENBQUMsUUFBUSxDQUNoQiw0Q0FBeUIsRUFDekIsSUFBQSxnQkFBTyxFQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNsQyxDQUFBO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260910000000 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260910000000 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "commission_line" add column if not exists "provider_id" text not null default 'system';`);
|
|
8
|
+
this.addSql(`alter table if exists "commission_line" add column if not exists "data" jsonb null;`);
|
|
9
|
+
}
|
|
10
|
+
async down() {
|
|
11
|
+
this.addSql(`alter table if exists "commission_line" drop column if exists "data";`);
|
|
12
|
+
this.addSql(`alter table if exists "commission_line" drop column if exists "provider_id";`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Migration20260910000000 = Migration20260910000000;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA5MTAwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb21taXNzaW9uL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjA5MTAwMDAwMDAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXFFO0FBRXJFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGdIQUFnSCxDQUFDLENBQUM7UUFDOUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxRkFBcUYsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7Q0FFRjtBQVpELDBEQVlDIn0=
|
|
@@ -3,9 +3,11 @@ declare const CommissionLine: import("@medusajs/framework/utils").DmlEntity<impo
|
|
|
3
3
|
item_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
4
4
|
shipping_method_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
5
5
|
commission_rate_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
6
|
+
provider_id: import("@medusajs/framework/utils").TextProperty;
|
|
6
7
|
code: import("@medusajs/framework/utils").TextProperty;
|
|
7
8
|
rate: import("@medusajs/framework/utils").FloatProperty;
|
|
8
9
|
amount: import("@medusajs/framework/utils").BigNumberProperty;
|
|
9
10
|
description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
11
|
+
data: import("@medusajs/framework/utils").NullableModifier<NoInfer<Record<string, unknown>>, import("@medusajs/framework/utils").JSONProperty<NoInfer<Record<string, unknown>>>>;
|
|
10
12
|
}>, "commission_line">;
|
|
11
13
|
export default CommissionLine;
|
|
@@ -6,10 +6,12 @@ const CommissionLine = utils_1.model.define("commission_line", {
|
|
|
6
6
|
item_id: utils_1.model.text().nullable(),
|
|
7
7
|
shipping_method_id: utils_1.model.text().nullable(),
|
|
8
8
|
commission_rate_id: utils_1.model.text().nullable(),
|
|
9
|
+
provider_id: utils_1.model.text().default("system"),
|
|
9
10
|
code: utils_1.model.text(),
|
|
10
11
|
rate: utils_1.model.float(),
|
|
11
12
|
amount: utils_1.model.bigNumber(),
|
|
12
13
|
description: utils_1.model.text().nullable(),
|
|
14
|
+
data: utils_1.model.json().nullable(),
|
|
13
15
|
});
|
|
14
16
|
exports.default = CommissionLine;
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWlzc2lvbi1saW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY29tbWlzc2lvbi9tb2RlbHMvY29tbWlzc2lvbi1saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQWlEO0FBRWpELE1BQU0sY0FBYyxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7SUFDckQsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUU7SUFDaEQsT0FBTyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDaEMsa0JBQWtCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQyxrQkFBa0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNDLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUMzQyxJQUFJLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUNsQixJQUFJLEVBQUUsYUFBSyxDQUFDLEtBQUssRUFBRTtJQUNuQixNQUFNLEVBQUUsYUFBSyxDQUFDLFNBQVMsRUFBRTtJQUN6QixXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxJQUFJLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM5QixDQUFDLENBQUE7QUFFRixrQkFBZSxjQUFjLENBQUEifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SystemCommissionProvider } from "./system";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SystemCommissionProvider = void 0;
|
|
4
|
+
var system_1 = require("./system");
|
|
5
|
+
Object.defineProperty(exports, "SystemCommissionProvider", { enumerable: true, get: function () { return system_1.SystemCommissionProvider; } });
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb21taXNzaW9uL3Byb3ZpZGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUQ7QUFBMUMsa0hBQUEsd0JBQXdCLE9BQUEifQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { InferEntityType, ModulesSdkTypes } from "@medusajs/framework/types";
|
|
2
|
+
import { CommissionCalculationContext, CreateCommissionLineDTO, ICommissionProvider } from "@mercurjs/types";
|
|
3
|
+
import { CommissionRate } from "../models";
|
|
4
|
+
type CommissionRateEntity = InferEntityType<typeof CommissionRate>;
|
|
5
|
+
type InjectedDependencies = {
|
|
6
|
+
commissionRateService: ModulesSdkTypes.IMedusaInternalService<CommissionRateEntity>;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* The built-in provider: resolves commission lines from the module's own
|
|
10
|
+
* rates and rules. Registered unconditionally and used when no other
|
|
11
|
+
* provider is configured as default.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SystemCommissionProvider implements ICommissionProvider {
|
|
14
|
+
static identifier: string;
|
|
15
|
+
protected readonly commissionRateService_: InjectedDependencies["commissionRateService"];
|
|
16
|
+
constructor({ commissionRateService }: InjectedDependencies);
|
|
17
|
+
/**
|
|
18
|
+
* Does a single rule match a product?
|
|
19
|
+
*/
|
|
20
|
+
private ruleMatchesProduct;
|
|
21
|
+
/**
|
|
22
|
+
* A rate matches an item when **every** present dimension group (rules
|
|
23
|
+
* grouped by `reference`) has at least one matching rule
|
|
24
|
+
* (AND-across-dimension, OR-within-dimension). A rule-less rate is the
|
|
25
|
+
* default and matches everything.
|
|
26
|
+
*/
|
|
27
|
+
private rateMatchesItem;
|
|
28
|
+
/**
|
|
29
|
+
* Specificity = number of distinct dimension groups a rate scopes on.
|
|
30
|
+
* More dimensions → higher specificity → wins the tie-break.
|
|
31
|
+
*/
|
|
32
|
+
private rateSpecificity;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the commission amount + line `rate` for a base amount.
|
|
35
|
+
* Percentage uses the scalar `value`; Fixed reads the per-currency
|
|
36
|
+
* `values` (falling back to the legacy single `value`).
|
|
37
|
+
*/
|
|
38
|
+
private computeCommission;
|
|
39
|
+
getCommissionLines(context: CommissionCalculationContext): Promise<CreateCommissionLineDTO[]>;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SystemCommissionProvider = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const types_1 = require("@mercurjs/types");
|
|
6
|
+
/**
|
|
7
|
+
* The built-in provider: resolves commission lines from the module's own
|
|
8
|
+
* rates and rules. Registered unconditionally and used when no other
|
|
9
|
+
* provider is configured as default.
|
|
10
|
+
*/
|
|
11
|
+
class SystemCommissionProvider {
|
|
12
|
+
constructor({ commissionRateService }) {
|
|
13
|
+
this.commissionRateService_ = commissionRateService;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Does a single rule match a product?
|
|
17
|
+
*/
|
|
18
|
+
ruleMatchesProduct(rule, product) {
|
|
19
|
+
if (!product) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
switch (rule.reference) {
|
|
23
|
+
case "product":
|
|
24
|
+
return product.id === rule.reference_id;
|
|
25
|
+
case "product_type":
|
|
26
|
+
return product.type_id === rule.reference_id;
|
|
27
|
+
case "product_collection":
|
|
28
|
+
return product.collection_id === rule.reference_id;
|
|
29
|
+
case "product_category":
|
|
30
|
+
return (product.categories?.some((cat) => cat.id === rule.reference_id) ??
|
|
31
|
+
false);
|
|
32
|
+
case "seller":
|
|
33
|
+
return product.seller?.id === rule.reference_id;
|
|
34
|
+
default:
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A rate matches an item when **every** present dimension group (rules
|
|
40
|
+
* grouped by `reference`) has at least one matching rule
|
|
41
|
+
* (AND-across-dimension, OR-within-dimension). A rule-less rate is the
|
|
42
|
+
* default and matches everything.
|
|
43
|
+
*/
|
|
44
|
+
rateMatchesItem(rate, item) {
|
|
45
|
+
const rules = (rate.rules ?? []);
|
|
46
|
+
if (rules.length === 0) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
const groups = new Map();
|
|
50
|
+
for (const rule of rules) {
|
|
51
|
+
const bucket = groups.get(rule.reference) ?? [];
|
|
52
|
+
bucket.push(rule);
|
|
53
|
+
groups.set(rule.reference, bucket);
|
|
54
|
+
}
|
|
55
|
+
for (const groupRules of groups.values()) {
|
|
56
|
+
if (!groupRules.some((rule) => this.ruleMatchesProduct(rule, item.product))) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Specificity = number of distinct dimension groups a rate scopes on.
|
|
64
|
+
* More dimensions → higher specificity → wins the tie-break.
|
|
65
|
+
*/
|
|
66
|
+
rateSpecificity(rate) {
|
|
67
|
+
return new Set((rate.rules ?? []).map((rule) => rule.reference)).size;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Resolve the commission amount + line `rate` for a base amount.
|
|
71
|
+
* Percentage uses the scalar `value`; Fixed reads the per-currency
|
|
72
|
+
* `values` (falling back to the legacy single `value`).
|
|
73
|
+
*/
|
|
74
|
+
computeCommission(rate, baseAmount, currencyCode) {
|
|
75
|
+
if (rate.type === types_1.CommissionRateType.PERCENTAGE) {
|
|
76
|
+
const amount = utils_1.MathBN.div(utils_1.MathBN.mult(baseAmount, rate.value), 100);
|
|
77
|
+
return {
|
|
78
|
+
rate: utils_1.MathBN.convert(rate.value).toNumber(),
|
|
79
|
+
amount: utils_1.MathBN.convert(amount).toNumber(),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const perCurrency = (rate.values ?? []).find((value) => value.currency_code === currencyCode);
|
|
83
|
+
const fixed = perCurrency ? perCurrency.amount : rate.value;
|
|
84
|
+
return {
|
|
85
|
+
rate: utils_1.MathBN.convert(fixed).toNumber(),
|
|
86
|
+
amount: utils_1.MathBN.convert(fixed).toNumber(),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
async getCommissionLines(context) {
|
|
90
|
+
const commissionLines = [];
|
|
91
|
+
const { items = [], shipping_methods = [], currency_code } = context;
|
|
92
|
+
// Load all enabled rates with their rules + per-currency values,
|
|
93
|
+
// oldest first (created_at ASC) so it is the deterministic tie-break.
|
|
94
|
+
const commissionRates = (await this.commissionRateService_.list({ is_enabled: true }, { relations: ["rules", "values"], order: { created_at: "ASC" } }));
|
|
95
|
+
// Legacy single-currency rates only apply to their currency; rates
|
|
96
|
+
// without a currency_code apply to any currency.
|
|
97
|
+
const applicableRates = commissionRates.filter((rate) => !rate.currency_code || rate.currency_code === currency_code);
|
|
98
|
+
// The Global Commission: the is_default rate (fallback: any rule-less rate).
|
|
99
|
+
const defaultRate = applicableRates.find((rate) => rate.is_default) ??
|
|
100
|
+
applicableRates.find((rate) => (rate.rules ?? []).length === 0);
|
|
101
|
+
// Item lines — match per item, most-specific rate wins.
|
|
102
|
+
for (const item of items) {
|
|
103
|
+
const candidates = applicableRates.filter((rate) => this.rateMatchesItem(rate, item));
|
|
104
|
+
if (!candidates.length) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
candidates.sort((a, b) => {
|
|
108
|
+
const specificityDiff = this.rateSpecificity(b) - this.rateSpecificity(a);
|
|
109
|
+
if (specificityDiff !== 0) {
|
|
110
|
+
return specificityDiff;
|
|
111
|
+
}
|
|
112
|
+
return (new Date(a.created_at).getTime() - new Date(b.created_at).getTime());
|
|
113
|
+
});
|
|
114
|
+
const matchedRate = candidates[0];
|
|
115
|
+
let baseAmount = item.subtotal;
|
|
116
|
+
if (matchedRate.include_tax && item.tax_total) {
|
|
117
|
+
baseAmount = utils_1.MathBN.add(item.subtotal, item.tax_total);
|
|
118
|
+
}
|
|
119
|
+
const { rate, amount } = this.computeCommission(matchedRate, baseAmount, currency_code);
|
|
120
|
+
commissionLines.push({
|
|
121
|
+
item_id: item.id,
|
|
122
|
+
shipping_method_id: null,
|
|
123
|
+
code: matchedRate.code,
|
|
124
|
+
rate,
|
|
125
|
+
amount,
|
|
126
|
+
commission_rate_id: matchedRate.id,
|
|
127
|
+
provider_id: SystemCommissionProvider.identifier,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// Shipping lines — one per shipping method, governed by the global
|
|
131
|
+
// rate, only when its include_shipping is on (resolved independently
|
|
132
|
+
// of the items the method ships).
|
|
133
|
+
if (defaultRate?.include_shipping) {
|
|
134
|
+
for (const shippingMethod of shipping_methods) {
|
|
135
|
+
let baseAmount = shippingMethod.subtotal;
|
|
136
|
+
if (defaultRate.include_tax && shippingMethod.tax_total) {
|
|
137
|
+
baseAmount = utils_1.MathBN.add(shippingMethod.subtotal, shippingMethod.tax_total);
|
|
138
|
+
}
|
|
139
|
+
const { rate, amount } = this.computeCommission(defaultRate, baseAmount, currency_code);
|
|
140
|
+
commissionLines.push({
|
|
141
|
+
item_id: null,
|
|
142
|
+
shipping_method_id: shippingMethod.id,
|
|
143
|
+
code: defaultRate.code,
|
|
144
|
+
rate,
|
|
145
|
+
amount,
|
|
146
|
+
commission_rate_id: defaultRate.id,
|
|
147
|
+
provider_id: SystemCommissionProvider.identifier,
|
|
148
|
+
description: "Shipping Commission",
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return commissionLines;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.SystemCommissionProvider = SystemCommissionProvider;
|
|
156
|
+
SystemCommissionProvider.identifier = "system";
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY29tbWlzc2lvbi9wcm92aWRlcnMvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUFrRDtBQUNsRCwyQ0FPd0I7QUFXeEI7Ozs7R0FJRztBQUNILE1BQWEsd0JBQXdCO0lBS25DLFlBQVksRUFBRSxxQkFBcUIsRUFBd0I7UUFDekQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFBO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUN4QixJQUEwQixFQUMxQixPQUFrRDtRQUVsRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7UUFFRCxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxPQUFPLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUE7WUFDekMsS0FBSyxjQUFjO2dCQUNqQixPQUFPLE9BQU8sQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQTtZQUM5QyxLQUFLLG9CQUFvQjtnQkFDdkIsT0FBTyxPQUFPLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUE7WUFDcEQsS0FBSyxrQkFBa0I7Z0JBQ3JCLE9BQU8sQ0FDTCxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDO29CQUMvRCxLQUFLLENBQ04sQ0FBQTtZQUNILEtBQUssUUFBUTtnQkFDWCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUE7WUFDakQ7Z0JBQ0UsT0FBTyxLQUFLLENBQUE7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGVBQWUsQ0FDckIsSUFBMEIsRUFDMUIsSUFBbUM7UUFFbkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBMkIsQ0FBQTtRQUMxRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUE7UUFDeEQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDcEMsQ0FBQztRQUVELEtBQUssTUFBTSxVQUFVLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUUsT0FBTyxLQUFLLENBQUE7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWUsQ0FBQyxJQUEwQjtRQUNoRCxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN2RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGlCQUFpQixDQUN2QixJQUEwQixFQUMxQixVQUFxRCxFQUNyRCxZQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssMEJBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEQsTUFBTSxNQUFNLEdBQUcsY0FBTSxDQUFDLEdBQUcsQ0FBQyxjQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDbkUsT0FBTztnQkFDTCxJQUFJLEVBQUUsY0FBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUMzQyxNQUFNLEVBQUUsY0FBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUU7YUFDMUMsQ0FBQTtRQUNILENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMxQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxZQUFZLENBQ2hELENBQUE7UUFDRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUE7UUFFM0QsT0FBTztZQUNMLElBQUksRUFBRSxjQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUN0QyxNQUFNLEVBQUUsY0FBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUU7U0FDekMsQ0FBQTtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQ3RCLE9BQXFDO1FBRXJDLE1BQU0sZUFBZSxHQUE4QixFQUFFLENBQUE7UUFDckQsTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUVwRSxpRUFBaUU7UUFDakUsc0VBQXNFO1FBQ3RFLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUM3RCxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFDcEIsRUFBRSxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ2pFLENBQTJCLENBQUE7UUFFNUIsbUVBQW1FO1FBQ25FLGlEQUFpRDtRQUNqRCxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUM1QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUN0RSxDQUFBO1FBRUQsNkVBQTZFO1FBQzdFLE1BQU0sV0FBVyxHQUNmLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDL0MsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUVqRSx3REFBd0Q7UUFDeEQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ2pDLENBQUE7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QixTQUFRO1lBQ1YsQ0FBQztZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDekUsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzFCLE9BQU8sZUFBZSxDQUFBO2dCQUN4QixDQUFDO2dCQUNELE9BQU8sQ0FDTCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUNwRSxDQUFBO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFFRixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFakMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtZQUM5QixJQUFJLFdBQVcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM5QyxVQUFVLEdBQUcsY0FBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN4RCxDQUFDO1lBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQzdDLFdBQVcsRUFDWCxVQUFVLEVBQ1YsYUFBYSxDQUNkLENBQUE7WUFFRCxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2hCLGtCQUFrQixFQUFFLElBQUk7Z0JBQ3hCLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtnQkFDdEIsSUFBSTtnQkFDSixNQUFNO2dCQUNOLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxFQUFFO2dCQUNsQyxXQUFXLEVBQUUsd0JBQXdCLENBQUMsVUFBVTthQUNqRCxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsbUVBQW1FO1FBQ25FLHFFQUFxRTtRQUNyRSxrQ0FBa0M7UUFDbEMsSUFBSSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUNsQyxLQUFLLE1BQU0sY0FBYyxJQUFJLGdCQUF1RCxFQUFFLENBQUM7Z0JBQ3JGLElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUE7Z0JBQ3hDLElBQUksV0FBVyxDQUFDLFdBQVcsSUFBSSxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3hELFVBQVUsR0FBRyxjQUFNLENBQUMsR0FBRyxDQUNyQixjQUFjLENBQUMsUUFBUSxFQUN2QixjQUFjLENBQUMsU0FBUyxDQUN6QixDQUFBO2dCQUNILENBQUM7Z0JBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQzdDLFdBQVcsRUFDWCxVQUFVLEVBQ1YsYUFBYSxDQUNkLENBQUE7Z0JBRUQsZUFBZSxDQUFDLElBQUksQ0FBQztvQkFDbkIsT0FBTyxFQUFFLElBQUk7b0JBQ2Isa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEVBQUU7b0JBQ3JDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtvQkFDdEIsSUFBSTtvQkFDSixNQUFNO29CQUNOLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxFQUFFO29CQUNsQyxXQUFXLEVBQUUsd0JBQXdCLENBQUMsVUFBVTtvQkFDaEQsV0FBVyxFQUFFLHFCQUFxQjtpQkFDbkMsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDOztBQWhOSCw0REFrTkM7QUFqTlEsbUNBQVUsR0FBRyxRQUFRLENBQUEifQ==
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { Context, DAL, FindConfig, InferEntityType, ModulesSdkTypes } from "@medusajs/framework/types";
|
|
2
|
-
import { CommissionCalculationContext, CommissionLineDTO,
|
|
2
|
+
import { CommissionCalculationContext, CommissionLineDTO, CreateCommissionLineDTO } from "@mercurjs/types";
|
|
3
3
|
import { CommissionLine } from "./models";
|
|
4
|
+
import CommissionProviderService, { CommissionDefaultProvider } from "./services/provider-service";
|
|
5
|
+
type InjectedDependencies = {
|
|
6
|
+
commissionLineService: ModulesSdkTypes.IMedusaInternalService<InferEntityType<typeof CommissionLine>>;
|
|
7
|
+
commissionProviderService: CommissionProviderService;
|
|
8
|
+
baseRepository: DAL.RepositoryService;
|
|
9
|
+
[CommissionDefaultProvider]: string;
|
|
10
|
+
};
|
|
4
11
|
declare const CommissionModuleService_base: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
|
|
5
12
|
readonly CommissionRate: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
6
13
|
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
@@ -9,7 +16,7 @@ declare const CommissionModuleService_base: import("@medusajs/framework/utils").
|
|
|
9
16
|
currency_code: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
10
17
|
name: import("@medusajs/framework/utils").TextProperty;
|
|
11
18
|
code: import("@medusajs/framework/utils").TextProperty;
|
|
12
|
-
type: import("@medusajs/framework/utils").EnumProperty<typeof CommissionRateType>;
|
|
19
|
+
type: import("@medusajs/framework/utils").EnumProperty<typeof import("@mercurjs/types").CommissionRateType>;
|
|
13
20
|
value: import("@medusajs/framework/utils").BigNumberProperty;
|
|
14
21
|
include_tax: import("@medusajs/framework/utils").BooleanProperty;
|
|
15
22
|
include_shipping: import("@medusajs/framework/utils").BooleanProperty;
|
|
@@ -37,7 +44,7 @@ declare const CommissionModuleService_base: import("@medusajs/framework/utils").
|
|
|
37
44
|
currency_code: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
38
45
|
name: import("@medusajs/framework/utils").TextProperty;
|
|
39
46
|
code: import("@medusajs/framework/utils").TextProperty;
|
|
40
|
-
type: import("@medusajs/framework/utils").EnumProperty<typeof CommissionRateType>;
|
|
47
|
+
type: import("@medusajs/framework/utils").EnumProperty<typeof import("@mercurjs/types").CommissionRateType>;
|
|
41
48
|
value: import("@medusajs/framework/utils").BigNumberProperty;
|
|
42
49
|
include_tax: import("@medusajs/framework/utils").BooleanProperty;
|
|
43
50
|
include_shipping: import("@medusajs/framework/utils").BooleanProperty;
|
|
@@ -61,7 +68,7 @@ declare const CommissionModuleService_base: import("@medusajs/framework/utils").
|
|
|
61
68
|
currency_code: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
62
69
|
name: import("@medusajs/framework/utils").TextProperty;
|
|
63
70
|
code: import("@medusajs/framework/utils").TextProperty;
|
|
64
|
-
type: import("@medusajs/framework/utils").EnumProperty<typeof CommissionRateType>;
|
|
71
|
+
type: import("@medusajs/framework/utils").EnumProperty<typeof import("@mercurjs/types").CommissionRateType>;
|
|
65
72
|
value: import("@medusajs/framework/utils").BigNumberProperty;
|
|
66
73
|
include_tax: import("@medusajs/framework/utils").BooleanProperty;
|
|
67
74
|
include_shipping: import("@medusajs/framework/utils").BooleanProperty;
|
|
@@ -79,42 +86,21 @@ declare const CommissionModuleService_base: import("@medusajs/framework/utils").
|
|
|
79
86
|
item_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
80
87
|
shipping_method_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
81
88
|
commission_rate_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
89
|
+
provider_id: import("@medusajs/framework/utils").TextProperty;
|
|
82
90
|
code: import("@medusajs/framework/utils").TextProperty;
|
|
83
91
|
rate: import("@medusajs/framework/utils").FloatProperty;
|
|
84
92
|
amount: import("@medusajs/framework/utils").BigNumberProperty;
|
|
85
93
|
description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
94
|
+
data: import("@medusajs/framework/utils").NullableModifier<NoInfer<Record<string, unknown>>, import("@medusajs/framework/utils").JSONProperty<NoInfer<Record<string, unknown>>>>;
|
|
86
95
|
}>, "commission_line">;
|
|
87
96
|
}>>;
|
|
88
97
|
declare class CommissionModuleService extends CommissionModuleService_base {
|
|
89
98
|
protected commissionLineService_: ModulesSdkTypes.IMedusaInternalService<InferEntityType<typeof CommissionLine>>;
|
|
90
99
|
protected baseRepository_: DAL.RepositoryService;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Does a single rule match a product?
|
|
97
|
-
*/
|
|
98
|
-
private ruleMatchesProduct;
|
|
99
|
-
/**
|
|
100
|
-
* A rate matches an item when **every** present dimension group (rules
|
|
101
|
-
* grouped by `reference`) has at least one matching rule
|
|
102
|
-
* (AND-across-dimension, OR-within-dimension). A rule-less rate is the
|
|
103
|
-
* default and matches everything.
|
|
104
|
-
*/
|
|
105
|
-
private rateMatchesItem;
|
|
106
|
-
/**
|
|
107
|
-
* Specificity = number of distinct dimension groups a rate scopes on.
|
|
108
|
-
* More dimensions → higher specificity → wins the tie-break.
|
|
109
|
-
*/
|
|
110
|
-
private rateSpecificity;
|
|
111
|
-
/**
|
|
112
|
-
* Resolve the commission amount + line `rate` for a base amount.
|
|
113
|
-
* Percentage uses the scalar `value`; Fixed reads the per-currency
|
|
114
|
-
* `values` (falling back to the legacy single `value`).
|
|
115
|
-
*/
|
|
116
|
-
private computeCommission;
|
|
117
|
-
getCommissionLines(context: CommissionCalculationContext, sharedContext?: Context): Promise<CreateCommissionLineDTO[]>;
|
|
100
|
+
protected commissionProviderService_: CommissionProviderService;
|
|
101
|
+
protected defaultProviderId_: string;
|
|
102
|
+
constructor(container: InjectedDependencies);
|
|
103
|
+
getCommissionLines(context: CommissionCalculationContext): Promise<CreateCommissionLineDTO[]>;
|
|
118
104
|
/**
|
|
119
105
|
* Overrides the auto-generated upsert with idempotent **replace**
|
|
120
106
|
* semantics keyed on the line's anchor (item_id / shipping_method_id):
|
|
@@ -152,7 +138,7 @@ declare class CommissionModuleService extends CommissionModuleService_base {
|
|
|
152
138
|
currency_code: string | null;
|
|
153
139
|
name: string;
|
|
154
140
|
code: string;
|
|
155
|
-
type: CommissionRateType;
|
|
141
|
+
type: import("@mercurjs/types").CommissionRateType;
|
|
156
142
|
value: number;
|
|
157
143
|
include_tax: boolean;
|
|
158
144
|
include_shipping: boolean;
|
|
@@ -189,7 +175,7 @@ declare class CommissionModuleService extends CommissionModuleService_base {
|
|
|
189
175
|
currency_code: string | null;
|
|
190
176
|
name: string;
|
|
191
177
|
code: string;
|
|
192
|
-
type: CommissionRateType;
|
|
178
|
+
type: import("@mercurjs/types").CommissionRateType;
|
|
193
179
|
value: number;
|
|
194
180
|
include_tax: boolean;
|
|
195
181
|
include_shipping: boolean;
|