@kshon/loyalty-plugin 2.14.2
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 +69052 -0
- package/.medusa/server/src/admin/index.mjs +69034 -0
- package/.medusa/server/src/api/admin/gift-cards/[id]/orders/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/gift-cards/[id]/orders/route.js +28 -0
- package/.medusa/server/src/api/admin/gift-cards/[id]/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/gift-cards/[id]/route.js +41 -0
- package/.medusa/server/src/api/admin/gift-cards/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/admin/gift-cards/middlewares.js +46 -0
- package/.medusa/server/src/api/admin/gift-cards/query-config.d.ts +14 -0
- package/.medusa/server/src/api/admin/gift-cards/query-config.js +32 -0
- package/.medusa/server/src/api/admin/gift-cards/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/gift-cards/route.js +42 -0
- package/.medusa/server/src/api/admin/gift-cards/validators.d.ts +139 -0
- package/.medusa/server/src/api/admin/gift-cards/validators.js +56 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/[id]/credit/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/[id]/credit/route.js +30 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/[id]/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/[id]/route.js +19 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/[id]/transactions/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/[id]/transactions/route.js +23 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/middlewares.js +46 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/query-config.d.ts +18 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/query-config.js +44 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/route.js +52 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/validators.d.ts +142 -0
- package/.medusa/server/src/api/admin/store-credit-accounts/validators.js +45 -0
- package/.medusa/server/src/api/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/middlewares.js +18 -0
- package/.medusa/server/src/api/store/carts/[id]/gift-cards/route.d.ts +5 -0
- package/.medusa/server/src/api/store/carts/[id]/gift-cards/route.js +43 -0
- package/.medusa/server/src/api/store/carts/[id]/store-credits/route.d.ts +4 -0
- package/.medusa/server/src/api/store/carts/[id]/store-credits/route.js +24 -0
- package/.medusa/server/src/api/store/carts/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/store/carts/middlewares.js +35 -0
- package/.medusa/server/src/api/store/carts/query-config.d.ts +4 -0
- package/.medusa/server/src/api/store/carts/query-config.js +9 -0
- package/.medusa/server/src/api/store/carts/validators.d.ts +13 -0
- package/.medusa/server/src/api/store/carts/validators.js +14 -0
- package/.medusa/server/src/api/store/gift-cards/[idOrCode]/route.d.ts +3 -0
- package/.medusa/server/src/api/store/gift-cards/[idOrCode]/route.js +24 -0
- package/.medusa/server/src/api/store/gift-cards/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/store/gift-cards/middlewares.js +16 -0
- package/.medusa/server/src/api/store/gift-cards/query-config.d.ts +9 -0
- package/.medusa/server/src/api/store/gift-cards/query-config.js +23 -0
- package/.medusa/server/src/api/store/gift-cards/validators.d.ts +7 -0
- package/.medusa/server/src/api/store/gift-cards/validators.js +8 -0
- package/.medusa/server/src/api/store/store-credit-accounts/[id]/route.d.ts +3 -0
- package/.medusa/server/src/api/store/store-credit-accounts/[id]/route.js +31 -0
- package/.medusa/server/src/api/store/store-credit-accounts/claim/route.d.ts +3 -0
- package/.medusa/server/src/api/store/store-credit-accounts/claim/route.js +25 -0
- package/.medusa/server/src/api/store/store-credit-accounts/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/store/store-credit-accounts/middlewares.js +36 -0
- package/.medusa/server/src/api/store/store-credit-accounts/query-config.d.ts +9 -0
- package/.medusa/server/src/api/store/store-credit-accounts/query-config.js +24 -0
- package/.medusa/server/src/api/store/store-credit-accounts/route.d.ts +3 -0
- package/.medusa/server/src/api/store/store-credit-accounts/route.js +40 -0
- package/.medusa/server/src/api/store/store-credit-accounts/validators.d.ts +44 -0
- package/.medusa/server/src/api/store/store-credit-accounts/validators.js +19 -0
- package/.medusa/server/src/links/cart-gift-cards-link.d.ts +2 -0
- package/.medusa/server/src/links/cart-gift-cards-link.js +13 -0
- package/.medusa/server/src/links/customer-store-credit-account-link.d.ts +1 -0
- package/.medusa/server/src/links/customer-store-credit-account-link.js +13 -0
- package/.medusa/server/src/links/gift-card-store-credit.d.ts +2 -0
- package/.medusa/server/src/links/gift-card-store-credit.js +10 -0
- package/.medusa/server/src/links/order-gift-cards-link.d.ts +2 -0
- package/.medusa/server/src/links/order-gift-cards-link.js +13 -0
- package/.medusa/server/src/links/order-line-item-gift-card-link.d.ts +1 -0
- package/.medusa/server/src/links/order-line-item-gift-card-link.js +19 -0
- package/.medusa/server/src/modules/loyalty/index.d.ts +21 -0
- package/.medusa/server/src/modules/loyalty/index.js +12 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250123130553.d.ts +5 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250123130553.js +17 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250127174331.d.ts +5 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250127174331.js +19 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250206141026.d.ts +5 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250206141026.js +19 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250206141429.d.ts +5 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250206141429.js +14 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250206144714.d.ts +5 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250206144714.js +14 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250326095923.d.ts +5 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250326095923.js +16 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250617080328.d.ts +5 -0
- package/.medusa/server/src/modules/loyalty/migrations/Migration20250617080328.js +20 -0
- package/.medusa/server/src/modules/loyalty/models/gift-card.d.ts +18 -0
- package/.medusa/server/src/modules/loyalty/models/gift-card.js +18 -0
- package/.medusa/server/src/modules/loyalty/models/index.d.ts +1 -0
- package/.medusa/server/src/modules/loyalty/models/index.js +9 -0
- package/.medusa/server/src/modules/loyalty/service.d.ts +21 -0
- package/.medusa/server/src/modules/loyalty/service.js +13 -0
- package/.medusa/server/src/modules/store-credit/index.d.ts +5 -0
- package/.medusa/server/src/modules/store-credit/index.js +12 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250129115518.d.ts +5 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250129115518.js +16 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250130213237.d.ts +5 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250130213237.js +18 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250130220640.d.ts +5 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250130220640.js +19 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250131205753.d.ts +5 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250131205753.js +14 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250520081315.d.ts +5 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250520081315.js +16 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250626081315.d.ts +5 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250626081315.js +16 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250722080351.d.ts +5 -0
- package/.medusa/server/src/modules/store-credit/migrations/Migration20250722080351.js +27 -0
- package/.medusa/server/src/modules/store-credit/models/account-transaction.d.ts +28 -0
- package/.medusa/server/src/modules/store-credit/models/account-transaction.js +21 -0
- package/.medusa/server/src/modules/store-credit/models/index.d.ts +2 -0
- package/.medusa/server/src/modules/store-credit/models/index.js +11 -0
- package/.medusa/server/src/modules/store-credit/models/store-credit-account.d.ts +27 -0
- package/.medusa/server/src/modules/store-credit/models/store-credit-account.js +27 -0
- package/.medusa/server/src/modules/store-credit/service.d.ts +29 -0
- package/.medusa/server/src/modules/store-credit/service.js +253 -0
- package/.medusa/server/src/subscribers/create-gift-card.d.ts +5 -0
- package/.medusa/server/src/subscribers/create-gift-card.js +53 -0
- package/.medusa/server/src/types/cart/index.d.ts +12 -0
- package/.medusa/server/src/types/cart/index.js +3 -0
- package/.medusa/server/src/types/http/gift-card.d.ts +42 -0
- package/.medusa/server/src/types/http/gift-card.js +3 -0
- package/.medusa/server/src/types/http/index.d.ts +3 -0
- package/.medusa/server/src/types/http/index.js +20 -0
- package/.medusa/server/src/types/http/store-credit-account.d.ts +60 -0
- package/.medusa/server/src/types/http/store-credit-account.js +3 -0
- package/.medusa/server/src/types/http/transaction.d.ts +19 -0
- package/.medusa/server/src/types/http/transaction.js +3 -0
- package/.medusa/server/src/types/index.d.ts +4 -0
- package/.medusa/server/src/types/index.js +21 -0
- package/.medusa/server/src/types/loyalty/index.d.ts +3 -0
- package/.medusa/server/src/types/loyalty/index.js +20 -0
- package/.medusa/server/src/types/loyalty/module.d.ts +151 -0
- package/.medusa/server/src/types/loyalty/module.js +12 -0
- package/.medusa/server/src/types/loyalty/service.d.ts +168 -0
- package/.medusa/server/src/types/loyalty/service.js +3 -0
- package/.medusa/server/src/types/loyalty/workflows.d.ts +3 -0
- package/.medusa/server/src/types/loyalty/workflows.js +3 -0
- package/.medusa/server/src/types/modules.d.ts +6 -0
- package/.medusa/server/src/types/modules.js +12 -0
- package/.medusa/server/src/types/store-credit/index.d.ts +2 -0
- package/.medusa/server/src/types/store-credit/index.js +19 -0
- package/.medusa/server/src/types/store-credit/module.d.ts +290 -0
- package/.medusa/server/src/types/store-credit/module.js +13 -0
- package/.medusa/server/src/types/store-credit/service.d.ts +325 -0
- package/.medusa/server/src/types/store-credit/service.js +3 -0
- package/.medusa/server/src/utils/code-generator.d.ts +1 -0
- package/.medusa/server/src/utils/code-generator.js +32 -0
- package/.medusa/server/src/workflows/carts/index.d.ts +5 -0
- package/.medusa/server/src/workflows/carts/index.js +22 -0
- package/.medusa/server/src/workflows/carts/steps/validate-gift-card-balances.d.ts +37 -0
- package/.medusa/server/src/workflows/carts/steps/validate-gift-card-balances.js +36 -0
- package/.medusa/server/src/workflows/carts/workflows/add-gift-card-to-cart.d.ts +118 -0
- package/.medusa/server/src/workflows/carts/workflows/add-gift-card-to-cart.js +179 -0
- package/.medusa/server/src/workflows/carts/workflows/add-store-credits-to-cart.d.ts +88 -0
- package/.medusa/server/src/workflows/carts/workflows/add-store-credits-to-cart.js +134 -0
- package/.medusa/server/src/workflows/carts/workflows/confirm-cart-credit-lines.d.ts +68 -0
- package/.medusa/server/src/workflows/carts/workflows/confirm-cart-credit-lines.js +110 -0
- package/.medusa/server/src/workflows/carts/workflows/refresh-cart-gift-cards.d.ts +30 -0
- package/.medusa/server/src/workflows/carts/workflows/refresh-cart-gift-cards.js +154 -0
- package/.medusa/server/src/workflows/carts/workflows/remove-gift-cart-from-cart.d.ts +103 -0
- package/.medusa/server/src/workflows/carts/workflows/remove-gift-cart-from-cart.js +124 -0
- package/.medusa/server/src/workflows/common/steps/validate-presence-of.d.ts +29 -0
- package/.medusa/server/src/workflows/common/steps/validate-presence-of.js +22 -0
- package/.medusa/server/src/workflows/gift-cards/index.d.ts +9 -0
- package/.medusa/server/src/workflows/gift-cards/index.js +26 -0
- package/.medusa/server/src/workflows/gift-cards/steps/create-gift-cards.d.ts +20 -0
- package/.medusa/server/src/workflows/gift-cards/steps/create-gift-cards.js +38 -0
- package/.medusa/server/src/workflows/gift-cards/steps/delete-gift-cards.d.ts +17 -0
- package/.medusa/server/src/workflows/gift-cards/steps/delete-gift-cards.js +24 -0
- package/.medusa/server/src/workflows/gift-cards/steps/retrieve-gift-card-balance.d.ts +32 -0
- package/.medusa/server/src/workflows/gift-cards/steps/retrieve-gift-card-balance.js +34 -0
- package/.medusa/server/src/workflows/gift-cards/steps/update-gift-cards.d.ts +19 -0
- package/.medusa/server/src/workflows/gift-cards/steps/update-gift-cards.js +41 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/claim-gift-card.d.ts +65 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/claim-gift-card.js +101 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/create-gift-cards.d.ts +36 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/create-gift-cards.js +88 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/delete-gift-card.d.ts +28 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/delete-gift-card.js +34 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/redeem-gift-card.d.ts +60 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/redeem-gift-card.js +129 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/update-gift-cards.d.ts +28 -0
- package/.medusa/server/src/workflows/gift-cards/workflows/update-gift-cards.js +31 -0
- package/.medusa/server/src/workflows/hooks/after-order-created.d.ts +1 -0
- package/.medusa/server/src/workflows/hooks/after-order-created.js +31 -0
- package/.medusa/server/src/workflows/hooks/after-order-credit-lines-created.d.ts +1 -0
- package/.medusa/server/src/workflows/hooks/after-order-credit-lines-created.js +32 -0
- package/.medusa/server/src/workflows/hooks/before-payment-collection-refresh.d.ts +1 -0
- package/.medusa/server/src/workflows/hooks/before-payment-collection-refresh.js +26 -0
- package/.medusa/server/src/workflows/hooks/complete-cart-before-payment-authorization.d.ts +1 -0
- package/.medusa/server/src/workflows/hooks/complete-cart-before-payment-authorization.js +27 -0
- package/.medusa/server/src/workflows/index.d.ts +3 -0
- package/.medusa/server/src/workflows/index.js +20 -0
- package/.medusa/server/src/workflows/orders/index.d.ts +2 -0
- package/.medusa/server/src/workflows/orders/index.js +19 -0
- package/.medusa/server/src/workflows/orders/workflows/link-gift-cards-to-order.d.ts +34 -0
- package/.medusa/server/src/workflows/orders/workflows/link-gift-cards-to-order.js +75 -0
- package/.medusa/server/src/workflows/orders/workflows/refund-credit-lines.d.ts +88 -0
- package/.medusa/server/src/workflows/orders/workflows/refund-credit-lines.js +131 -0
- package/.medusa/server/src/workflows/store-credit/index.d.ts +8 -0
- package/.medusa/server/src/workflows/store-credit/index.js +25 -0
- package/.medusa/server/src/workflows/store-credit/steps/create-store-credit-accounts.d.ts +19 -0
- package/.medusa/server/src/workflows/store-credit/steps/create-store-credit-accounts.js +37 -0
- package/.medusa/server/src/workflows/store-credit/steps/credit-account.d.ts +20 -0
- package/.medusa/server/src/workflows/store-credit/steps/credit-account.js +31 -0
- package/.medusa/server/src/workflows/store-credit/steps/debit-account.d.ts +20 -0
- package/.medusa/server/src/workflows/store-credit/steps/debit-account.js +31 -0
- package/.medusa/server/src/workflows/store-credit/workflows/claim-store-credit-account.d.ts +91 -0
- package/.medusa/server/src/workflows/store-credit/workflows/claim-store-credit-account.js +170 -0
- package/.medusa/server/src/workflows/store-credit/workflows/create-store-credit-accounts.d.ts +50 -0
- package/.medusa/server/src/workflows/store-credit/workflows/create-store-credit-accounts.js +50 -0
- package/.medusa/server/src/workflows/store-credit/workflows/credit-accounts.d.ts +29 -0
- package/.medusa/server/src/workflows/store-credit/workflows/credit-accounts.js +32 -0
- package/.medusa/server/src/workflows/store-credit/workflows/credit-store-credit-account.d.ts +29 -0
- package/.medusa/server/src/workflows/store-credit/workflows/credit-store-credit-account.js +67 -0
- package/.medusa/server/src/workflows/store-credit/workflows/debit-accounts.d.ts +29 -0
- package/.medusa/server/src/workflows/store-credit/workflows/debit-accounts.js +32 -0
- package/.medusa/server/tailwind.config.d.ts +3 -0
- package/.medusa/server/tailwind.config.js +12 -0
- package/README.md +62 -0
- package/package.json +107 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addGiftCardToCartWorkflow = exports.validateCartGiftCardStep = exports.retrieveGiftCardBalanceStep = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
7
|
+
const types_1 = require("../../../types");
|
|
8
|
+
const validate_gift_card_balances_1 = require("../steps/validate-gift-card-balances");
|
|
9
|
+
/**
|
|
10
|
+
* This step retrieves the balance of a single gift card from its associated store
|
|
11
|
+
* credit account. Returns a map of the gift card code to its account stats.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const data = retrieveGiftCardBalanceStep({
|
|
15
|
+
* storeCreditAccount: {
|
|
16
|
+
* id: "sca_123",
|
|
17
|
+
* balance: 100,
|
|
18
|
+
* // other store credit account properties...
|
|
19
|
+
* },
|
|
20
|
+
* giftCard: {
|
|
21
|
+
* id: "gc_123",
|
|
22
|
+
* code: "GC-XXXX",
|
|
23
|
+
* // other gift card properties...
|
|
24
|
+
* },
|
|
25
|
+
* })
|
|
26
|
+
*/
|
|
27
|
+
exports.retrieveGiftCardBalanceStep = (0, workflows_sdk_1.createStep)("retrieve-gift-cards-balance", async function ({ storeCreditAccount, giftCard, }, { container }) {
|
|
28
|
+
const accountBalanceMap = {};
|
|
29
|
+
const module = container.resolve(types_1.PluginModule.STORE_CREDIT);
|
|
30
|
+
const giftCardBalance = await module.retrieveAccountStats({
|
|
31
|
+
account_id: storeCreditAccount.id,
|
|
32
|
+
});
|
|
33
|
+
accountBalanceMap[giftCard.code] = giftCardBalance;
|
|
34
|
+
return new workflows_sdk_1.StepResponse(accountBalanceMap);
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Validate if the gift card exists.
|
|
38
|
+
*/
|
|
39
|
+
const validateGiftCardStep = (0, workflows_sdk_1.createStep)("validate-gift-card", async function ({ giftCard, input, }) {
|
|
40
|
+
if (!giftCard) {
|
|
41
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Gift card (${input.code}) not found`);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* This step validates that gift cards can be added to a cart. It throws an error
|
|
46
|
+
* if a gift card is already applied to the cart or if the gift card currency does
|
|
47
|
+
* not match the cart's currency.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* const data = validateCartGiftCardStep({
|
|
51
|
+
* cart: {
|
|
52
|
+
* id: "cart_123",
|
|
53
|
+
* gift_cards: [
|
|
54
|
+
* { code: "GC-XXXX-XXXX" },
|
|
55
|
+
* // other gift cards applied to the cart...
|
|
56
|
+
* ],
|
|
57
|
+
* currency_code: "usd",
|
|
58
|
+
* // other cart properties...
|
|
59
|
+
* },
|
|
60
|
+
* giftCards: [...],
|
|
61
|
+
* })
|
|
62
|
+
*/
|
|
63
|
+
exports.validateCartGiftCardStep = (0, workflows_sdk_1.createStep)("validate-cart-gift-card", async function ({ cart, giftCards, }) {
|
|
64
|
+
for (const giftCard of giftCards) {
|
|
65
|
+
const cartGiftCard = cart.gift_cards.find((gc) => gc.code.includes(giftCard.code));
|
|
66
|
+
if (cartGiftCard) {
|
|
67
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Gift card (${giftCard.code}) already applied to cart`);
|
|
68
|
+
}
|
|
69
|
+
if (giftCard.currency_code !== cart.currency_code) {
|
|
70
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Gift card (${giftCard.code}) currency does not match cart currency`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
/**
|
|
75
|
+
* This workflow applies a gift card to a cart by creating a credit line for the
|
|
76
|
+
* gift card's balance and linking the gift card to the cart. It validates that
|
|
77
|
+
* the gift card exists, has sufficient balance, and can be applied to the cart.
|
|
78
|
+
*
|
|
79
|
+
* You can use this workflow within your own customizations or custom workflows,
|
|
80
|
+
* allowing you to wrap custom logic around adding gift cards to carts.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* const { result } = await addGiftCardToCartWorkflow(container)
|
|
84
|
+
* .run({
|
|
85
|
+
* input: {
|
|
86
|
+
* code: "GC-XXXX-XXXX",
|
|
87
|
+
* cart_id: "cart_123",
|
|
88
|
+
* },
|
|
89
|
+
* })
|
|
90
|
+
*
|
|
91
|
+
* @summary
|
|
92
|
+
*
|
|
93
|
+
* Apply a gift card to a cart.
|
|
94
|
+
*/
|
|
95
|
+
exports.addGiftCardToCartWorkflow = (0, workflows_sdk_1.createWorkflow)("add-gift-card-to-cart", function (input) {
|
|
96
|
+
const cartQuery = (0, core_flows_1.useQueryGraphStep)({
|
|
97
|
+
entity: "cart",
|
|
98
|
+
filters: { id: input.cart_id },
|
|
99
|
+
fields: ["id", "currency_code", "total", "gift_cards.code"],
|
|
100
|
+
}).config({ name: "get-cart-query" });
|
|
101
|
+
const cart = (0, workflows_sdk_1.transform)({ cartQuery }, ({ cartQuery }) => {
|
|
102
|
+
return cartQuery.data[0];
|
|
103
|
+
});
|
|
104
|
+
const giftCardQuery = (0, core_flows_1.useQueryGraphStep)({
|
|
105
|
+
entity: "gift_card",
|
|
106
|
+
filters: { code: input.code },
|
|
107
|
+
fields: ["id", "code", "status", "currency_code"],
|
|
108
|
+
}).config({ name: "get-gift-card-query" });
|
|
109
|
+
const giftCard = (0, workflows_sdk_1.transform)({ giftCardQuery }, ({ giftCardQuery }) => {
|
|
110
|
+
return giftCardQuery.data[0];
|
|
111
|
+
});
|
|
112
|
+
validateGiftCardStep({ giftCard, input });
|
|
113
|
+
const giftCards = (0, workflows_sdk_1.transform)({ giftCardQuery }, ({ giftCardQuery }) => {
|
|
114
|
+
return giftCardQuery.data;
|
|
115
|
+
});
|
|
116
|
+
(0, exports.validateCartGiftCardStep)({ cart, giftCards });
|
|
117
|
+
const giftCardStoreCreditAccountQuery = (0, core_flows_1.useQueryGraphStep)({
|
|
118
|
+
entity: "gift_card_store_credit_account",
|
|
119
|
+
filters: {
|
|
120
|
+
gift_card_id: giftCard.id,
|
|
121
|
+
},
|
|
122
|
+
fields: ["id", "store_credit_account_id"],
|
|
123
|
+
}).config({ name: "get-gift-card-store-credit-account-query" });
|
|
124
|
+
const giftCardStoreCreditAccount = (0, workflows_sdk_1.transform)({ giftCardStoreCreditAccountQuery }, ({ giftCardStoreCreditAccountQuery }) => giftCardStoreCreditAccountQuery.data[0]);
|
|
125
|
+
const storeCreditAccountQuery = (0, core_flows_1.useQueryGraphStep)({
|
|
126
|
+
entity: "store_credit_account",
|
|
127
|
+
filters: {
|
|
128
|
+
id: giftCardStoreCreditAccount.store_credit_account_id,
|
|
129
|
+
currency_code: cart.currency_code,
|
|
130
|
+
},
|
|
131
|
+
fields: ["id", "balance"],
|
|
132
|
+
}).config({ name: "get-store-credit-account-query" });
|
|
133
|
+
const storeCreditAccount = (0, workflows_sdk_1.transform)({ storeCreditAccountQuery }, ({ storeCreditAccountQuery }) => {
|
|
134
|
+
return storeCreditAccountQuery.data[0];
|
|
135
|
+
});
|
|
136
|
+
const giftCardsBalanceMap = (0, exports.retrieveGiftCardBalanceStep)({
|
|
137
|
+
storeCreditAccount,
|
|
138
|
+
giftCard,
|
|
139
|
+
});
|
|
140
|
+
(0, validate_gift_card_balances_1.validateGiftCardBalancesStep)({
|
|
141
|
+
giftCards,
|
|
142
|
+
giftCardsBalanceMap,
|
|
143
|
+
});
|
|
144
|
+
const creditLinesToCreate = (0, workflows_sdk_1.transform)({ giftCardsBalanceMap, giftCards, cart }, ({ giftCardsBalanceMap, giftCards, cart }) => {
|
|
145
|
+
const creditLinesData = [];
|
|
146
|
+
for (const giftCard of giftCards) {
|
|
147
|
+
const stats = giftCardsBalanceMap[giftCard.code];
|
|
148
|
+
const amount = utils_1.MathBN.min(stats.balance, cart.total);
|
|
149
|
+
if (amount.gt(0)) {
|
|
150
|
+
creditLinesData.push({
|
|
151
|
+
cart_id: cart.id,
|
|
152
|
+
amount: amount.toNumber(),
|
|
153
|
+
reference: "gift-card",
|
|
154
|
+
reference_id: giftCard.id,
|
|
155
|
+
metadata: {},
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return creditLinesData;
|
|
160
|
+
});
|
|
161
|
+
const creditLines = core_flows_1.createCartCreditLinesWorkflow.runAsStep({
|
|
162
|
+
input: creditLinesToCreate,
|
|
163
|
+
});
|
|
164
|
+
const linksToCreate = (0, workflows_sdk_1.transform)({ creditLines, cart }, ({ creditLines, cart }) => {
|
|
165
|
+
const links = creditLines
|
|
166
|
+
.filter((creditLine) => creditLine.reference === "gift-card")
|
|
167
|
+
.map((creditLine) => ({
|
|
168
|
+
[utils_1.Modules.CART]: { cart_id: cart.id },
|
|
169
|
+
[types_1.PluginModule.LOYALTY]: { gift_card_id: creditLine.reference_id },
|
|
170
|
+
}));
|
|
171
|
+
return links;
|
|
172
|
+
});
|
|
173
|
+
core_flows_1.createLinksWorkflow.runAsStep({ input: linksToCreate });
|
|
174
|
+
core_flows_1.refreshCartItemsWorkflow.runAsStep({
|
|
175
|
+
input: { cart_id: input.cart_id },
|
|
176
|
+
});
|
|
177
|
+
return new workflows_sdk_1.WorkflowResponse(creditLines);
|
|
178
|
+
});
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWdpZnQtY2FyZC10by1jYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jYXJ0cy93b3JrZmxvd3MvYWRkLWdpZnQtY2FyZC10by1jYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUF5RTtBQUN6RSw0REFLcUM7QUFDckMscUVBTTJDO0FBQzNDLDBDQUE4QztBQVE5QyxzRkFBb0Y7QUFnQnBGOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNVLFFBQUEsMkJBQTJCLEdBQUcsSUFBQSwwQkFBVSxFQUNuRCw2QkFBNkIsRUFDN0IsS0FBSyxXQUNILEVBQ0Usa0JBQWtCLEVBQ2xCLFFBQVEsR0FDeUIsRUFDbkMsRUFBRSxTQUFTLEVBQUU7SUFFYixNQUFNLGlCQUFpQixHQUF1QyxFQUFFLENBQUM7SUFDakUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDOUIsb0JBQVksQ0FBQyxZQUFZLENBQzFCLENBQUM7SUFFRixNQUFNLGVBQWUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztRQUN4RCxVQUFVLEVBQUUsa0JBQWtCLENBQUMsRUFBRTtLQUNsQyxDQUFDLENBQUM7SUFFSCxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDO0lBRW5ELE9BQU8sSUFBSSw0QkFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUNGLENBQUM7QUFnQkY7O0dBRUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLElBQUEsMEJBQVUsRUFDckMsb0JBQW9CLEVBQ3BCLEtBQUssV0FBVyxFQUNkLFFBQVEsRUFDUixLQUFLLEdBQzJCO0lBQ2hDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGNBQWMsS0FBSyxDQUFD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
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { PluginCartDTO } from "../../../../src/types/cart";
|
|
2
|
+
import { ModuleStoreCreditAccount } from "../../../types/store-credit";
|
|
3
|
+
/**
|
|
4
|
+
* Input to validate that a customer's store credit account exists and has a positive balance.
|
|
5
|
+
*/
|
|
6
|
+
export interface ValidateCustomerStoreCreditAccountStepInput {
|
|
7
|
+
/**
|
|
8
|
+
* The customer's store credit account to validate.
|
|
9
|
+
*/
|
|
10
|
+
storeCreditAccount: ModuleStoreCreditAccount;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* This step validates that a customer's store credit account exists and has a positive
|
|
14
|
+
* balance. It throws an error if the account is not found or has no balance.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const data = validateCustomerStoreCreditAccountStep({
|
|
18
|
+
* storeCreditAccount: {
|
|
19
|
+
* id: "sca_123",
|
|
20
|
+
* balance: 100,
|
|
21
|
+
* // other store credit account properties...
|
|
22
|
+
* },
|
|
23
|
+
* })
|
|
24
|
+
*/
|
|
25
|
+
export declare const validateCustomerStoreCreditAccountStep: import("@medusajs/framework/workflows-sdk").StepFunction<ValidateCustomerStoreCreditAccountStepInput, unknown>;
|
|
26
|
+
/**
|
|
27
|
+
* Input to validate that a cart is eligible for store credit usage.
|
|
28
|
+
*/
|
|
29
|
+
export interface ValidateCartStepInput {
|
|
30
|
+
/**
|
|
31
|
+
* The cart to validate.
|
|
32
|
+
*/
|
|
33
|
+
cart: PluginCartDTO;
|
|
34
|
+
/**
|
|
35
|
+
* The workflow input containing the cart ID used in error messages.
|
|
36
|
+
*/
|
|
37
|
+
input: {
|
|
38
|
+
cart_id: string;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* This step validates that a cart is eligible for store credit usage. It throws an
|
|
43
|
+
* error if the cart is not found, does not have a customer, or does not have a
|
|
44
|
+
* currency set.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* const data = validateCartStep({
|
|
48
|
+
* cart: { ...cart, customer_id: "cust_123", currency_code: "usd" },
|
|
49
|
+
* input: { cart_id: "cart_123" },
|
|
50
|
+
* })
|
|
51
|
+
*/
|
|
52
|
+
export declare const validateCartStep: import("@medusajs/framework/workflows-sdk").StepFunction<ValidateCartStepInput, unknown>;
|
|
53
|
+
/**
|
|
54
|
+
* Input to apply store credits to a cart.
|
|
55
|
+
*/
|
|
56
|
+
export interface AddStoreCreditsToCartWorkflowInput {
|
|
57
|
+
/**
|
|
58
|
+
* The ID of the cart to apply store credits to.
|
|
59
|
+
*/
|
|
60
|
+
cart_id: string;
|
|
61
|
+
/**
|
|
62
|
+
* The amount of store credits to apply. If not provided, the full balance is applied.
|
|
63
|
+
*/
|
|
64
|
+
amount?: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* This workflow applies store credits to a cart. It removes any existing store-credit
|
|
68
|
+
* lines and creates a new credit line for the specified amount, or for the full store
|
|
69
|
+
* credit balance if no amount is specified. The customer must be set on the cart and
|
|
70
|
+
* have a store credit account in the cart's currency.
|
|
71
|
+
*
|
|
72
|
+
* You can use this workflow within your own customizations or custom workflows,
|
|
73
|
+
* allowing you to wrap custom logic around applying store credits to carts.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* const { result } = await addStoreCreditsToCartWorkflow(container)
|
|
77
|
+
* .run({
|
|
78
|
+
* input: {
|
|
79
|
+
* cart_id: "cart_123",
|
|
80
|
+
* amount: 50,
|
|
81
|
+
* },
|
|
82
|
+
* })
|
|
83
|
+
*
|
|
84
|
+
* @summary
|
|
85
|
+
*
|
|
86
|
+
* Apply store credits to a cart.
|
|
87
|
+
*/
|
|
88
|
+
export declare const addStoreCreditsToCartWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<AddStoreCreditsToCartWorkflowInput, import("@medusajs/framework/types").CartCreditLineDTO[], []>;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addStoreCreditsToCartWorkflow = exports.validateCartStep = exports.validateCustomerStoreCreditAccountStep = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
7
|
+
/**
|
|
8
|
+
* This step validates that a customer's store credit account exists and has a positive
|
|
9
|
+
* balance. It throws an error if the account is not found or has no balance.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const data = validateCustomerStoreCreditAccountStep({
|
|
13
|
+
* storeCreditAccount: {
|
|
14
|
+
* id: "sca_123",
|
|
15
|
+
* balance: 100,
|
|
16
|
+
* // other store credit account properties...
|
|
17
|
+
* },
|
|
18
|
+
* })
|
|
19
|
+
*/
|
|
20
|
+
exports.validateCustomerStoreCreditAccountStep = (0, workflows_sdk_1.createStep)("validate-customer-store-credit-account", async function ({ storeCreditAccount, }) {
|
|
21
|
+
if (!storeCreditAccount) {
|
|
22
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Store credit account not found for the customer on the cart in that currency.`);
|
|
23
|
+
}
|
|
24
|
+
if (utils_1.MathBN.convert(storeCreditAccount.balance).lte(0)) {
|
|
25
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Store credit account has no balance`);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* This step validates that a cart is eligible for store credit usage. It throws an
|
|
30
|
+
* error if the cart is not found, does not have a customer, or does not have a
|
|
31
|
+
* currency set.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* const data = validateCartStep({
|
|
35
|
+
* cart: { ...cart, customer_id: "cust_123", currency_code: "usd" },
|
|
36
|
+
* input: { cart_id: "cart_123" },
|
|
37
|
+
* })
|
|
38
|
+
*/
|
|
39
|
+
exports.validateCartStep = (0, workflows_sdk_1.createStep)("validate-cart", async function ({ cart, input, }) {
|
|
40
|
+
if (!cart) {
|
|
41
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Cart with id ${input.cart_id} not found`);
|
|
42
|
+
}
|
|
43
|
+
if (!cart.customer_id) {
|
|
44
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Cart's customer must be set to add store credits`);
|
|
45
|
+
}
|
|
46
|
+
if (!cart.currency_code) {
|
|
47
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Cart's currency must be set to add store credits`);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* This workflow applies store credits to a cart. It removes any existing store-credit
|
|
52
|
+
* lines and creates a new credit line for the specified amount, or for the full store
|
|
53
|
+
* credit balance if no amount is specified. The customer must be set on the cart and
|
|
54
|
+
* have a store credit account in the cart's currency.
|
|
55
|
+
*
|
|
56
|
+
* You can use this workflow within your own customizations or custom workflows,
|
|
57
|
+
* allowing you to wrap custom logic around applying store credits to carts.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* const { result } = await addStoreCreditsToCartWorkflow(container)
|
|
61
|
+
* .run({
|
|
62
|
+
* input: {
|
|
63
|
+
* cart_id: "cart_123",
|
|
64
|
+
* amount: 50,
|
|
65
|
+
* },
|
|
66
|
+
* })
|
|
67
|
+
*
|
|
68
|
+
* @summary
|
|
69
|
+
*
|
|
70
|
+
* Apply store credits to a cart.
|
|
71
|
+
*/
|
|
72
|
+
exports.addStoreCreditsToCartWorkflow = (0, workflows_sdk_1.createWorkflow)("add-store-credits-to-cart", function (input) {
|
|
73
|
+
const cartQuery = (0, core_flows_1.useQueryGraphStep)({
|
|
74
|
+
entity: "cart",
|
|
75
|
+
filters: { id: input.cart_id },
|
|
76
|
+
fields: ["id", "currency_code", "total", "customer_id", "credit_lines.*"],
|
|
77
|
+
}).config({ name: "get-cart-query" });
|
|
78
|
+
const cart = (0, workflows_sdk_1.transform)({ cartQuery }, ({ cartQuery }) => {
|
|
79
|
+
return cartQuery.data[0];
|
|
80
|
+
});
|
|
81
|
+
(0, exports.validateCartStep)({ cart, input });
|
|
82
|
+
const storeCreditAccountQuery = (0, core_flows_1.useQueryGraphStep)({
|
|
83
|
+
entity: "store_credit_account",
|
|
84
|
+
filters: {
|
|
85
|
+
customer_id: cart.customer_id,
|
|
86
|
+
currency_code: cart.currency_code,
|
|
87
|
+
},
|
|
88
|
+
fields: ["id", "balance"],
|
|
89
|
+
}).config({ name: "get-store-credit-account-query" });
|
|
90
|
+
const storeCreditAccount = (0, workflows_sdk_1.transform)({ storeCreditAccountQuery }, ({ storeCreditAccountQuery }) => {
|
|
91
|
+
return storeCreditAccountQuery.data[0];
|
|
92
|
+
});
|
|
93
|
+
(0, exports.validateCustomerStoreCreditAccountStep)({
|
|
94
|
+
storeCreditAccount,
|
|
95
|
+
});
|
|
96
|
+
const creditLineActions = (0, workflows_sdk_1.transform)({ storeCreditAccount, cart, input }, ({ storeCreditAccount, cart, input }) => {
|
|
97
|
+
const creditLinesToCreate = [];
|
|
98
|
+
const creditLinesToDelete = (cart.credit_lines ?? [])
|
|
99
|
+
.filter((creditLine) => creditLine.reference === "store-credit")
|
|
100
|
+
.map((creditLine) => creditLine.id);
|
|
101
|
+
let amount = input.amount
|
|
102
|
+
? utils_1.MathBN.convert(input.amount)
|
|
103
|
+
: utils_1.MathBN.convert(storeCreditAccount.balance);
|
|
104
|
+
if ((0, utils_1.isDefined)(input.amount) &&
|
|
105
|
+
utils_1.MathBN.convert(amount).gt(utils_1.MathBN.convert(storeCreditAccount.balance))) {
|
|
106
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Amount is greater than the store credit account balance`);
|
|
107
|
+
}
|
|
108
|
+
if (amount.gt(0)) {
|
|
109
|
+
creditLinesToCreate.push({
|
|
110
|
+
cart_id: cart.id,
|
|
111
|
+
amount: utils_1.MathBN.min(amount, cart.total).toNumber(),
|
|
112
|
+
reference: "store-credit",
|
|
113
|
+
reference_id: storeCreditAccount.id,
|
|
114
|
+
metadata: {},
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
creditLinesToCreate,
|
|
119
|
+
creditLinesToDelete,
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
const [_deletedCreditLines, createdCreditLines] = (0, workflows_sdk_1.parallelize)(core_flows_1.deleteCartCreditLinesWorkflow.runAsStep({
|
|
123
|
+
input: {
|
|
124
|
+
id: creditLineActions.creditLinesToDelete,
|
|
125
|
+
},
|
|
126
|
+
}), core_flows_1.createCartCreditLinesWorkflow.runAsStep({
|
|
127
|
+
input: creditLineActions.creditLinesToCreate,
|
|
128
|
+
}));
|
|
129
|
+
core_flows_1.refreshCartItemsWorkflow.runAsStep({
|
|
130
|
+
input: { cart_id: input.cart_id },
|
|
131
|
+
});
|
|
132
|
+
return new workflows_sdk_1.WorkflowResponse(createdCreditLines);
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXN0b3JlLWNyZWRpdHMtdG8tY2FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY2FydHMvd29ya2Zsb3dzL2FkZC1zdG9yZS1jcmVkaXRzLXRvLWNhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQTJFO0FBQzNFLDREQUtxQztBQUNyQyxxRUFNMkM7QUFjM0M7Ozs7Ozs7Ozs7OztHQVlHO0FBQ1UsUUFBQSxzQ0FBc0MsR0FBRyxJQUFBLDBCQUFVLEVBQzlELHdDQUF3QyxFQUN4QyxLQUFLLFdBQVcsRUFDZCxrQkFBa0IsR0FDMEI7SUFDNUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsK0VBQStFLENBQ2hGLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxjQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFDQUFxQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FDRixDQUFDO0FBZ0JGOzs7Ozs7Ozs7O0dBVUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLElBQUEsMEJBQVUsRUFDeEMsZUFBZSxFQUNmLEtBQUssV0FBVyxFQUNkLElBQUksRUFDSixLQUFLLEdBQ2lCO0lBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGdCQUFnQixLQUFLLENBQUMsT0FBTyxZQUFZLENBQzFDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLElB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
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ModuleGiftCard } from "../../../types/loyalty";
|
|
2
|
+
import { ModuleAccountStats } from "../../../types/store-credit";
|
|
3
|
+
/**
|
|
4
|
+
* Input to validate that all gift cards on a cart have a positive balance.
|
|
5
|
+
*/
|
|
6
|
+
export interface ValidateStoreCreditAccountStepInput {
|
|
7
|
+
/**
|
|
8
|
+
* The gift cards to validate.
|
|
9
|
+
*/
|
|
10
|
+
giftCards: ModuleGiftCard[];
|
|
11
|
+
/**
|
|
12
|
+
* A map of gift card codes to their current account statistics.
|
|
13
|
+
*/
|
|
14
|
+
giftCardsBalanceMap: Record<string, ModuleAccountStats>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* This step validates that all gift cards on the cart have a positive balance.
|
|
18
|
+
* It throws an error for any gift card with zero or negative balance.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* const data = validateStoreCreditAccountStep({
|
|
22
|
+
* giftCards: [
|
|
23
|
+
* {
|
|
24
|
+
* id: "gc_123",
|
|
25
|
+
* code: "GC-XXXX",
|
|
26
|
+
* // other gift card properties...
|
|
27
|
+
* }
|
|
28
|
+
* ],
|
|
29
|
+
* giftCardsBalanceMap: {
|
|
30
|
+
* "GC-XXXX": {
|
|
31
|
+
* balance: 100,
|
|
32
|
+
* credit: 150,
|
|
33
|
+
* debit: 50,
|
|
34
|
+
* }
|
|
35
|
+
* },
|
|
36
|
+
* })
|
|
37
|
+
*/
|
|
38
|
+
export declare const validateStoreCreditAccountStep: import("@medusajs/framework/workflows-sdk").StepFunction<ValidateStoreCreditAccountStepInput, unknown>;
|
|
39
|
+
/**
|
|
40
|
+
* Input to confirm and debit the credit lines on a cart.
|
|
41
|
+
*/
|
|
42
|
+
export interface ConfirmCartCreditLinesWorkflowInput {
|
|
43
|
+
/**
|
|
44
|
+
* The ID of the cart whose credit lines should be confirmed and debited.
|
|
45
|
+
*/
|
|
46
|
+
cart_id: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* This workflow confirms the credit lines of a cart by debiting the associated
|
|
50
|
+
* store credit and gift card accounts for the credit line amounts. It is typically
|
|
51
|
+
* called before payment authorization to lock in the store credit usage.
|
|
52
|
+
*
|
|
53
|
+
* You can use this workflow within your own customizations or custom workflows,
|
|
54
|
+
* allowing you to wrap custom logic around confirming cart credit lines.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* const { result } = await confirmCartCreditLinesWorkflow(container)
|
|
58
|
+
* .run({
|
|
59
|
+
* input: {
|
|
60
|
+
* cart_id: "cart_123",
|
|
61
|
+
* },
|
|
62
|
+
* })
|
|
63
|
+
*
|
|
64
|
+
* @summary
|
|
65
|
+
*
|
|
66
|
+
* Confirm and debit the credit lines on a cart.
|
|
67
|
+
*/
|
|
68
|
+
export declare const confirmCartCreditLinesWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<ConfirmCartCreditLinesWorkflowInput, [], []>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.confirmCartCreditLinesWorkflow = exports.validateStoreCreditAccountStep = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
7
|
+
const debit_accounts_1 = require("../../store-credit/workflows/debit-accounts");
|
|
8
|
+
/**
|
|
9
|
+
* This step validates that all gift cards on the cart have a positive balance.
|
|
10
|
+
* It throws an error for any gift card with zero or negative balance.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const data = validateStoreCreditAccountStep({
|
|
14
|
+
* giftCards: [
|
|
15
|
+
* {
|
|
16
|
+
* id: "gc_123",
|
|
17
|
+
* code: "GC-XXXX",
|
|
18
|
+
* // other gift card properties...
|
|
19
|
+
* }
|
|
20
|
+
* ],
|
|
21
|
+
* giftCardsBalanceMap: {
|
|
22
|
+
* "GC-XXXX": {
|
|
23
|
+
* balance: 100,
|
|
24
|
+
* credit: 150,
|
|
25
|
+
* debit: 50,
|
|
26
|
+
* }
|
|
27
|
+
* },
|
|
28
|
+
* })
|
|
29
|
+
*/
|
|
30
|
+
exports.validateStoreCreditAccountStep = (0, workflows_sdk_1.createStep)("validate-store-credit-account", async function ({ giftCards, giftCardsBalanceMap, }) {
|
|
31
|
+
for (const giftCard of giftCards) {
|
|
32
|
+
const stats = giftCardsBalanceMap[giftCard.code];
|
|
33
|
+
if (utils_1.MathBN.convert(stats.balance).lte(0)) {
|
|
34
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Gift card (${giftCard.code}) has no balance`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* This workflow confirms the credit lines of a cart by debiting the associated
|
|
40
|
+
* store credit and gift card accounts for the credit line amounts. It is typically
|
|
41
|
+
* called before payment authorization to lock in the store credit usage.
|
|
42
|
+
*
|
|
43
|
+
* You can use this workflow within your own customizations or custom workflows,
|
|
44
|
+
* allowing you to wrap custom logic around confirming cart credit lines.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* const { result } = await confirmCartCreditLinesWorkflow(container)
|
|
48
|
+
* .run({
|
|
49
|
+
* input: {
|
|
50
|
+
* cart_id: "cart_123",
|
|
51
|
+
* },
|
|
52
|
+
* })
|
|
53
|
+
*
|
|
54
|
+
* @summary
|
|
55
|
+
*
|
|
56
|
+
* Confirm and debit the credit lines on a cart.
|
|
57
|
+
*/
|
|
58
|
+
exports.confirmCartCreditLinesWorkflow = (0, workflows_sdk_1.createWorkflow)("confirm-cart-credit-lines", function (input) {
|
|
59
|
+
const cartQuery = (0, core_flows_1.useQueryGraphStep)({
|
|
60
|
+
entity: "cart",
|
|
61
|
+
filters: { id: input.cart_id },
|
|
62
|
+
fields: [
|
|
63
|
+
"id",
|
|
64
|
+
"customer_id",
|
|
65
|
+
"currency_code",
|
|
66
|
+
"credit_lines.id",
|
|
67
|
+
"credit_lines.reference",
|
|
68
|
+
"credit_lines.reference_id",
|
|
69
|
+
"credit_lines.amount",
|
|
70
|
+
"gift_cards.code",
|
|
71
|
+
],
|
|
72
|
+
options: { throwIfKeyNotFound: true },
|
|
73
|
+
}).config({ name: "get-existing-cart-query" });
|
|
74
|
+
const cart = (0, workflows_sdk_1.transform)({ cartQuery }, ({ cartQuery }) => {
|
|
75
|
+
return cartQuery.data[0];
|
|
76
|
+
});
|
|
77
|
+
const giftCardIds = (0, workflows_sdk_1.transform)({ cart }, ({ cart }) => {
|
|
78
|
+
return cart.gift_cards.map((gc) => gc.id);
|
|
79
|
+
});
|
|
80
|
+
const storeCreditAccountsQuery = (0, core_flows_1.useQueryGraphStep)({
|
|
81
|
+
entity: "gift_card_store_credit_account",
|
|
82
|
+
filters: { gift_card_id: giftCardIds },
|
|
83
|
+
fields: ["gift_card_id", "store_credit_account_id"],
|
|
84
|
+
}).config({ name: "get-store-credit-account-query" });
|
|
85
|
+
const storeCreditAccountsMap = (0, workflows_sdk_1.transform)({ storeCreditAccountsQuery }, ({ storeCreditAccountsQuery }) => {
|
|
86
|
+
return storeCreditAccountsQuery.data.reduce((acc, curr) => {
|
|
87
|
+
acc[curr.gift_card_id] = curr.store_credit_account_id;
|
|
88
|
+
return acc;
|
|
89
|
+
}, {});
|
|
90
|
+
});
|
|
91
|
+
const debitAccountsInput = (0, workflows_sdk_1.transform)({ cart, storeCreditAccountsMap }, ({ cart, storeCreditAccountsMap }) => {
|
|
92
|
+
return (cart.credit_lines || [])
|
|
93
|
+
.filter((cl) => cl.reference === "store-credit" || cl.reference === "gift-card")
|
|
94
|
+
.map((cl) => {
|
|
95
|
+
const storeCreditAccount = storeCreditAccountsMap[cl.reference_id];
|
|
96
|
+
return {
|
|
97
|
+
account_id: storeCreditAccount || cl.reference_id,
|
|
98
|
+
amount: cl.amount,
|
|
99
|
+
reference: "cart",
|
|
100
|
+
reference_id: cart.id,
|
|
101
|
+
note: "Gift card usage",
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
debit_accounts_1.debitAccountsWorkflow.runAsStep({
|
|
106
|
+
input: debitAccountsInput,
|
|
107
|
+
});
|
|
108
|
+
return new workflows_sdk_1.WorkflowResponse([]);
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1jYXJ0LWNyZWRpdC1saW5lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvY2FydHMvd29ya2Zsb3dzL2NvbmZpcm0tY2FydC1jcmVkaXQtbGluZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWdFO0FBQ2hFLDREQUFnRTtBQUNoRSxxRUFLMkM7QUFHM0MsZ0ZBQW9GO0FBZ0JwRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ1UsUUFBQSw4QkFBOEIsR0FBRyxJQUFBLDBCQUFVLEVBQ3RELCtCQUErQixFQUMvQixLQUFLLFdBQVcsRUFDZCxTQUFTLEVBQ1QsbUJBQW1CLEdBQ2lCO0lBQ3BDLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpELElBQUksY0FBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsY0FBYyxRQUFRLENBQUMsSUFBSSxrQkFBa0IsQ0FDOUMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUNGLENBQUM7QUFZRjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNVLFFBQUEsOEJBQThCLEdBQUcsSUFBQSw4QkFBYyxFQUMxRCwyQkFBMkIsRUFDM0IsVUFBVSxLQUEwQztJQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFBLDhCQUFpQixFQUFDO1FBQ2xDLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7UUFDOUIsTUFBTSxFQUFFO1lB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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data to refresh the gift card credit lines on a cart.
|
|
3
|
+
*/
|
|
4
|
+
export type RefreshCartGiftCardsWorkflowInput = {
|
|
5
|
+
/**
|
|
6
|
+
* The ID of the cart for which to refresh gift card credit lines.
|
|
7
|
+
*/
|
|
8
|
+
cart_id: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* This workflow refreshes the gift card credit lines on a cart. It removes existing
|
|
12
|
+
* gift card credit lines and recreates them based on current gift card balances,
|
|
13
|
+
* accounting for any changes to the cart total or gift card balances.
|
|
14
|
+
*
|
|
15
|
+
* You can use this workflow within your own customizations or custom workflows,
|
|
16
|
+
* allowing you to wrap custom logic around refreshing cart gift cards.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const { result } = await refreshCartGiftCardsWorkflow(container)
|
|
20
|
+
* .run({
|
|
21
|
+
* input: {
|
|
22
|
+
* cart_id: "cart_123",
|
|
23
|
+
* },
|
|
24
|
+
* })
|
|
25
|
+
*
|
|
26
|
+
* @summary
|
|
27
|
+
*
|
|
28
|
+
* Refresh gift card credit lines on a cart.
|
|
29
|
+
*/
|
|
30
|
+
export declare const refreshCartGiftCardsWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<RefreshCartGiftCardsWorkflowInput, import("@medusajs/framework/types").CartCreditLineDTO[], []>;
|