@mercurjs/core 2.3.6-canary.0 → 2.3.6-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/campaigns/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/collections/middlewares.js +8 -33
- package/.medusa/server/src/api/admin/commission-rates/middlewares.js +9 -39
- package/.medusa/server/src/api/admin/core-route-permissions.d.ts +18 -0
- package/.medusa/server/src/api/admin/core-route-permissions.js +82 -0
- package/.medusa/server/src/api/admin/customer-groups/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/inventory-items/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/members/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/middlewares.js +8 -2
- package/.medusa/server/src/api/admin/offers/middlewares.js +10 -21
- package/.medusa/server/src/api/admin/order-groups/middlewares.js +10 -15
- package/.medusa/server/src/api/admin/orders/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/payouts/middlewares.js +4 -15
- package/.medusa/server/src/api/admin/price-lists/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/product-attributes/middlewares.js +11 -51
- package/.medusa/server/src/api/admin/product-categories/middlewares.js +14 -45
- package/.medusa/server/src/api/admin/product-changes/middlewares.js +8 -15
- package/.medusa/server/src/api/admin/products/[id]/route.js +8 -3
- package/.medusa/server/src/api/admin/products/middlewares.js +21 -99
- package/.medusa/server/src/api/admin/products/validators.d.ts +3 -3
- package/.medusa/server/src/api/admin/products/validators.js +4 -3
- package/.medusa/server/src/api/admin/promotions/middlewares.js +7 -21
- package/.medusa/server/src/api/admin/reservations/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/reviews/middlewares.js +8 -33
- package/.medusa/server/src/api/admin/sellers/middlewares.js +32 -117
- package/.medusa/server/src/api/admin/sellers/query-config.js +3 -3
- package/.medusa/server/src/api/admin/shipping-options/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/shipping-profiles/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/stock-locations/middlewares.js +3 -9
- package/.medusa/server/src/api/admin/users/me/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/users/me/route.js +42 -0
- package/.medusa/server/src/api/admin/users/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/admin/users/middlewares.js +17 -0
- package/.medusa/server/src/api/utils/ensure-seller-middleware.js +1 -15
- package/.medusa/server/src/api/utils/index.d.ts +1 -2
- package/.medusa/server/src/api/utils/index.js +2 -3
- package/.medusa/server/src/api/utils/permissions-middleware.d.ts +32 -0
- package/.medusa/server/src/api/utils/permissions-middleware.js +133 -0
- package/.medusa/server/src/api/utils/scan-unauthenticated-routes.d.ts +6 -0
- package/.medusa/server/src/api/utils/scan-unauthenticated-routes.js +29 -6
- package/.medusa/server/src/api/utils/split-order-payment-status.d.ts +3 -1
- package/.medusa/server/src/api/utils/split-order-payment-status.js +25 -21
- package/.medusa/server/src/api/utils/unless-base-url.d.ts +4 -2
- package/.medusa/server/src/api/utils/unless-base-url.js +12 -4
- package/.medusa/server/src/api/vendor/campaigns/middlewares.js +9 -39
- package/.medusa/server/src/api/vendor/claims/middlewares.js +37 -129
- package/.medusa/server/src/api/vendor/collections/middlewares.js +5 -21
- package/.medusa/server/src/api/vendor/currencies/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/customer-groups/middlewares.js +9 -39
- package/.medusa/server/src/api/vendor/customers/middlewares.js +5 -21
- package/.medusa/server/src/api/vendor/exchanges/middlewares.js +31 -105
- package/.medusa/server/src/api/vendor/fulfillment-providers/middlewares.js +3 -9
- package/.medusa/server/src/api/vendor/fulfillment-sets/middlewares.js +8 -33
- package/.medusa/server/src/api/vendor/inventory-items/middlewares.js +14 -69
- package/.medusa/server/src/api/vendor/members/invites/accept/route.js +2 -1
- package/.medusa/server/src/api/vendor/members/me/route.js +6 -3
- package/.medusa/server/src/api/vendor/members/middlewares.js +3 -17
- package/.medusa/server/src/api/vendor/members/validators.d.ts +4 -2
- package/.medusa/server/src/api/vendor/members/validators.js +3 -2
- package/.medusa/server/src/api/vendor/middlewares.js +8 -3
- package/.medusa/server/src/api/vendor/offers/middlewares.js +10 -45
- package/.medusa/server/src/api/vendor/order-edits/middlewares.js +23 -69
- package/.medusa/server/src/api/vendor/orders/middlewares.js +18 -63
- package/.medusa/server/src/api/vendor/payments/helpers.js +22 -16
- package/.medusa/server/src/api/vendor/payments/middlewares.js +7 -33
- package/.medusa/server/src/api/vendor/payout-accounts/middlewares.js +6 -27
- package/.medusa/server/src/api/vendor/payouts/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/price-lists/middlewares.js +11 -51
- package/.medusa/server/src/api/vendor/price-preferences/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/product-attributes/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/product-categories/middlewares.js +5 -21
- package/.medusa/server/src/api/vendor/product-tags/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/product-types/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/product-variants/middlewares.js +3 -9
- package/.medusa/server/src/api/vendor/products/middlewares.js +24 -75
- package/.medusa/server/src/api/vendor/products/validators.d.ts +2 -2
- package/.medusa/server/src/api/vendor/products/validators.js +4 -3
- package/.medusa/server/src/api/vendor/promotions/middlewares.js +14 -69
- package/.medusa/server/src/api/vendor/refund-reasons/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/regions/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/reservations/middlewares.js +9 -33
- package/.medusa/server/src/api/vendor/return-reasons/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/returns/middlewares.js +26 -135
- package/.medusa/server/src/api/vendor/reviews/middlewares.js +5 -21
- package/.medusa/server/src/api/vendor/sales-channels/middlewares.js +5 -21
- package/.medusa/server/src/api/vendor/sellers/me/route.js +1 -1
- package/.medusa/server/src/api/vendor/sellers/middlewares.js +15 -92
- package/.medusa/server/src/api/vendor/sellers/query-config.d.ts +0 -4
- package/.medusa/server/src/api/vendor/sellers/query-config.js +8 -11
- package/.medusa/server/src/api/vendor/shipping-option-types/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/shipping-options/middlewares.js +9 -39
- package/.medusa/server/src/api/vendor/shipping-profiles/middlewares.js +4 -15
- package/.medusa/server/src/api/vendor/stock-locations/middlewares.js +11 -51
- package/.medusa/server/src/api/vendor/stock-locations/validators.d.ts +2 -2
- package/.medusa/server/src/api/vendor/uploads/middlewares.js +9 -9
- package/.medusa/server/src/modules/payout/migrations/Migration20260928120000.d.ts +5 -0
- package/.medusa/server/src/modules/payout/migrations/Migration20260928120000.js +14 -0
- package/.medusa/server/src/modules/payout/models/payout-account.js +2 -2
- package/.medusa/server/src/modules/seller/repositories/order-group.js +9 -1
- package/.medusa/server/src/patches/index.d.ts +11 -1
- package/.medusa/server/src/patches/index.js +63 -17
- package/.medusa/server/src/patches/loader.d.ts +10 -0
- package/.medusa/server/src/patches/loader.js +46 -4
- package/.medusa/server/src/patches/manifest.js +21 -2
- package/.medusa/server/src/patches/patches/@medusajs+core-flows@2.20.1-delivery-hook.patch +39 -0
- package/.medusa/server/src/patches/patches/@medusajs+core-flows@2.21.0-payment-hooks.patch +89 -0
- package/.medusa/server/src/patches/register.d.ts +1 -0
- package/.medusa/server/src/patches/register.js +10 -0
- package/.medusa/server/src/permissions/definitions/api-keys.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/api-keys.js +8 -0
- package/.medusa/server/src/permissions/definitions/commissions.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/commissions.js +9 -0
- package/.medusa/server/src/permissions/definitions/customers.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/customers.js +9 -0
- package/.medusa/server/src/permissions/definitions/fulfillment.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/fulfillment.js +10 -0
- package/.medusa/server/src/permissions/definitions/inventory.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/inventory.js +10 -0
- package/.medusa/server/src/permissions/definitions/members.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/members.js +9 -0
- package/.medusa/server/src/permissions/definitions/notifications.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/notifications.js +8 -0
- package/.medusa/server/src/permissions/definitions/offers.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/offers.js +8 -0
- package/.medusa/server/src/permissions/definitions/orders.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/orders.js +12 -0
- package/.medusa/server/src/permissions/definitions/payments.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/payments.js +8 -0
- package/.medusa/server/src/permissions/definitions/payouts.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/payouts.js +9 -0
- package/.medusa/server/src/permissions/definitions/price-lists.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/price-lists.js +9 -0
- package/.medusa/server/src/permissions/definitions/product-attributes.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/product-attributes.js +8 -0
- package/.medusa/server/src/permissions/definitions/products.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/products.js +14 -0
- package/.medusa/server/src/permissions/definitions/promotions.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/promotions.js +9 -0
- package/.medusa/server/src/permissions/definitions/refund-reasons.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/refund-reasons.js +8 -0
- package/.medusa/server/src/permissions/definitions/regions.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/regions.js +9 -0
- package/.medusa/server/src/permissions/definitions/return-reasons.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/return-reasons.js +8 -0
- package/.medusa/server/src/permissions/definitions/reviews.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/reviews.js +8 -0
- package/.medusa/server/src/permissions/definitions/roles.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/roles.js +9 -0
- package/.medusa/server/src/permissions/definitions/sales-channels.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/sales-channels.js +8 -0
- package/.medusa/server/src/permissions/definitions/sellers.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/sellers.js +10 -0
- package/.medusa/server/src/permissions/definitions/store.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/store.js +8 -0
- package/.medusa/server/src/permissions/definitions/translations.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/translations.js +8 -0
- package/.medusa/server/src/permissions/definitions/users.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/users.js +8 -0
- package/.medusa/server/src/permissions/definitions/workflow-executions.d.ts +1 -0
- package/.medusa/server/src/permissions/definitions/workflow-executions.js +8 -0
- package/.medusa/server/src/permissions/index.d.ts +27 -0
- package/.medusa/server/src/permissions/index.js +44 -0
- package/.medusa/server/src/permissions/registry.d.ts +18 -0
- package/.medusa/server/src/permissions/registry.js +86 -0
- package/.medusa/server/src/subscribers/split-order-canceled.d.ts +5 -0
- package/.medusa/server/src/subscribers/split-order-canceled.js +24 -0
- package/.medusa/server/src/subscribers/split-order-payment-captured.d.ts +5 -0
- package/.medusa/server/src/subscribers/split-order-payment-captured.js +24 -0
- package/.medusa/server/src/utils/sanitize-rich-text.d.ts +2 -0
- package/.medusa/server/src/utils/sanitize-rich-text.js +50 -0
- package/.medusa/server/src/with-mercur.d.ts +5 -3
- package/.medusa/server/src/with-mercur.js +4 -23
- package/.medusa/server/src/workflows/cart/workflows/complete-cart-with-split-orders.js +18 -31
- package/.medusa/server/src/workflows/commission/workflows/refresh-order-commission-lines.d.ts +8 -1
- package/.medusa/server/src/workflows/commission/workflows/refresh-order-commission-lines.js +6 -2
- package/.medusa/server/src/workflows/index.d.ts +1 -0
- package/.medusa/server/src/workflows/index.js +2 -1
- package/.medusa/server/src/workflows/offer/workflows/create-offers.js +34 -4
- package/.medusa/server/src/workflows/order/workflows/confirm-return-receive.d.ts +15 -2
- package/.medusa/server/src/workflows/order/workflows/confirm-return-receive.js +14 -3
- package/.medusa/server/src/workflows/order/workflows/fulfillment-hooks.d.ts +9 -0
- package/.medusa/server/src/workflows/order/workflows/fulfillment-hooks.js +9 -0
- package/.medusa/server/src/workflows/order/workflows/index.d.ts +1 -0
- package/.medusa/server/src/workflows/order/workflows/index.js +2 -1
- package/.medusa/server/src/workflows/order-group/workflows/get-order-group-detail.js +8 -8
- package/.medusa/server/src/workflows/order-group/workflows/get-order-groups-list.js +8 -8
- package/.medusa/server/src/workflows/payment/index.d.ts +2 -0
- package/.medusa/server/src/workflows/payment/index.js +3 -1
- package/.medusa/server/src/workflows/payment/steps/create-order-payments.d.ts +44 -0
- package/.medusa/server/src/workflows/payment/steps/create-order-payments.js +48 -0
- package/.medusa/server/src/workflows/payment/steps/index.d.ts +2 -0
- package/.medusa/server/src/workflows/payment/steps/index.js +19 -0
- package/.medusa/server/src/workflows/payment/steps/record-payment-captures.d.ts +29 -0
- package/.medusa/server/src/workflows/payment/steps/record-payment-captures.js +28 -0
- package/.medusa/server/src/workflows/payment/utils/index.d.ts +2 -0
- package/.medusa/server/src/workflows/payment/utils/index.js +19 -0
- package/.medusa/server/src/workflows/payment/utils/split-order-payment-group.d.ts +141 -0
- package/.medusa/server/src/workflows/payment/utils/split-order-payment-group.js +234 -0
- package/.medusa/server/src/workflows/payment/utils/split-order-payment.d.ts +15 -0
- package/.medusa/server/src/workflows/payment/utils/split-order-payment.js +65 -0
- package/.medusa/server/src/workflows/payment/workflows/index.d.ts +2 -0
- package/.medusa/server/src/workflows/payment/workflows/index.js +3 -1
- package/.medusa/server/src/workflows/payment/workflows/payment-hooks.d.ts +25 -0
- package/.medusa/server/src/workflows/payment/workflows/payment-hooks.js +10 -0
- package/.medusa/server/src/workflows/payment/workflows/split-order-payments.d.ts +66 -0
- package/.medusa/server/src/workflows/payment/workflows/split-order-payments.js +164 -0
- package/.medusa/server/src/workflows/payout/workflows/create-payout.d.ts +4 -1
- package/.medusa/server/src/workflows/payout/workflows/create-payout.js +6 -2
- package/.medusa/server/src/workflows/product-edit/workflows/apply-product-change-actions.js +18 -2
- package/.medusa/server/src/workflows/product-edit/workflows/product-edit-delete-product.d.ts +1 -0
- package/.medusa/server/src/workflows/product-edit/workflows/product-edit-delete-product.js +2 -2
- package/.medusa/server/src/workflows/seller/steps/index.d.ts +0 -1
- package/.medusa/server/src/workflows/seller/steps/index.js +1 -2
- package/.medusa/server/src/workflows/seller/workflows/accept-member-invite.d.ts +17 -2
- package/.medusa/server/src/workflows/seller/workflows/accept-member-invite.js +14 -3
- package/.medusa/server/src/workflows/seller/workflows/create-seller-account.d.ts +16 -1
- package/.medusa/server/src/workflows/seller/workflows/create-seller-account.js +6 -3
- package/.medusa/server/src/workflows/seller/workflows/index.d.ts +0 -1
- package/.medusa/server/src/workflows/seller/workflows/index.js +1 -2
- package/package.json +13 -11
- package/.medusa/server/src/api/utils/policy-resources.d.ts +0 -59
- package/.medusa/server/src/api/utils/policy-resources.js +0 -64
- package/.medusa/server/src/api/utils/rbac-role-fields.d.ts +0 -1
- package/.medusa/server/src/api/utils/rbac-role-fields.js +0 -10
- package/.medusa/server/src/api/utils/resolve-admin-roles-middleware.d.ts +0 -19
- package/.medusa/server/src/api/utils/resolve-admin-roles-middleware.js +0 -55
- package/.medusa/server/src/api/vendor/rbac/me/permissions/route.d.ts +0 -16
- package/.medusa/server/src/api/vendor/rbac/me/permissions/route.js +0 -58
- package/.medusa/server/src/links/seller-member-rbac-role.d.ts +0 -2
- package/.medusa/server/src/links/seller-member-rbac-role.js +0 -41
- package/.medusa/server/src/modules/seller/utils/ensure-seller-default-roles.d.ts +0 -11
- package/.medusa/server/src/modules/seller/utils/ensure-seller-default-roles.js +0 -128
- package/.medusa/server/src/policies/commission.d.ts +0 -1
- package/.medusa/server/src/policies/commission.js +0 -12
- package/.medusa/server/src/policies/offer.d.ts +0 -1
- package/.medusa/server/src/policies/offer.js +0 -7
- package/.medusa/server/src/policies/payout.d.ts +0 -1
- package/.medusa/server/src/policies/payout.js +0 -7
- package/.medusa/server/src/policies/product-attribute.d.ts +0 -1
- package/.medusa/server/src/policies/product-attribute.js +0 -7
- package/.medusa/server/src/policies/product-edit.d.ts +0 -1
- package/.medusa/server/src/policies/product-edit.js +0 -7
- package/.medusa/server/src/policies/review.d.ts +0 -1
- package/.medusa/server/src/policies/review.js +0 -7
- package/.medusa/server/src/policies/seller.d.ts +0 -1
- package/.medusa/server/src/policies/seller.js +0 -13
- package/.medusa/server/src/utils/generate-resource-policies.d.ts +0 -7
- package/.medusa/server/src/utils/generate-resource-policies.js +0 -30
- package/.medusa/server/src/workflows/seller/steps/create-seller-default-roles.d.ts +0 -2
- package/.medusa/server/src/workflows/seller/steps/create-seller-default-roles.js +0 -16
- package/.medusa/server/src/workflows/seller/workflows/create-seller-defaults.d.ts +0 -2
- package/.medusa/server/src/workflows/seller/workflows/create-seller-defaults.js +0 -11
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { BigNumberInput, LinkDefinition, MedusaContainer } from "@medusajs/framework/types";
|
|
2
|
+
/** Set on a cart's payment collection once it is split into its orders'. */
|
|
3
|
+
export declare const SPLIT_ORDER_COLLECTIONS_FLAG = "split_order_collections";
|
|
4
|
+
/** Set on an order's payment collection, pointing at the cart's. */
|
|
5
|
+
export declare const CART_PAYMENT_COLLECTION_KEY = "cart_payment_collection_id";
|
|
6
|
+
type PaymentMovement = {
|
|
7
|
+
id: string;
|
|
8
|
+
amount: BigNumberInput;
|
|
9
|
+
raw_amount?: BigNumberInput | null;
|
|
10
|
+
};
|
|
11
|
+
export type SplitOrderGroupPayment = {
|
|
12
|
+
id: string;
|
|
13
|
+
provider_id: string;
|
|
14
|
+
currency_code: string;
|
|
15
|
+
amount: BigNumberInput;
|
|
16
|
+
raw_amount?: BigNumberInput | null;
|
|
17
|
+
data?: Record<string, unknown> | null;
|
|
18
|
+
captured_at?: Date | string | null;
|
|
19
|
+
canceled_at?: Date | string | null;
|
|
20
|
+
captures?: PaymentMovement[] | null;
|
|
21
|
+
refunds?: PaymentMovement[] | null;
|
|
22
|
+
};
|
|
23
|
+
export type SplitOrderGroupCollection = {
|
|
24
|
+
id: string;
|
|
25
|
+
currency_code: string;
|
|
26
|
+
metadata?: Record<string, unknown> | null;
|
|
27
|
+
payments?: SplitOrderGroupPayment[] | null;
|
|
28
|
+
};
|
|
29
|
+
export type SplitOrderGroupOrder = {
|
|
30
|
+
id: string;
|
|
31
|
+
status: string;
|
|
32
|
+
canceled_at?: Date | string | null;
|
|
33
|
+
total: BigNumberInput;
|
|
34
|
+
payment_collections?: SplitOrderGroupCollection[] | null;
|
|
35
|
+
};
|
|
36
|
+
/** Fields to query on `cart_payment_collection` to plan a split or a void. */
|
|
37
|
+
export declare const cartPaymentCollectionFields: string[];
|
|
38
|
+
/** Fields to query on `order_cart` to plan a split or a void. */
|
|
39
|
+
export declare const cartOrderFields: string[];
|
|
40
|
+
export declare const isPaymentCaptured: (payment: SplitOrderGroupPayment) => boolean;
|
|
41
|
+
export declare const isOrderCanceled: (order: {
|
|
42
|
+
status: string;
|
|
43
|
+
canceled_at?: Date | string | null;
|
|
44
|
+
}) => boolean;
|
|
45
|
+
export declare const hasSplitOrderCollections: (paymentCollection?: {
|
|
46
|
+
metadata?: Record<string, unknown> | null;
|
|
47
|
+
} | null) => boolean;
|
|
48
|
+
/**
|
|
49
|
+
* The payment collections that pay for an order. Until the cart payment is
|
|
50
|
+
* captured that is the cart's shared collection; afterwards the order has its
|
|
51
|
+
* own. An order canceled before the capture never gets one and keeps showing
|
|
52
|
+
* the cart's.
|
|
53
|
+
*/
|
|
54
|
+
export declare const resolveOrderPaymentCollections: (order: {
|
|
55
|
+
cart?: {
|
|
56
|
+
payment_collection?: {
|
|
57
|
+
metadata?: Record<string, unknown> | null;
|
|
58
|
+
} | null;
|
|
59
|
+
} | null;
|
|
60
|
+
payment_collections?: unknown[];
|
|
61
|
+
}) => unknown[];
|
|
62
|
+
/**
|
|
63
|
+
* Resolves the cart a payment or an order belongs to. A payment can be the
|
|
64
|
+
* cart's own or one created for an order when the cart payment was split.
|
|
65
|
+
*/
|
|
66
|
+
export declare const resolveSplitOrderCartId: (container: MedusaContainer, input: {
|
|
67
|
+
order_id: string;
|
|
68
|
+
} | {
|
|
69
|
+
payment_id: string;
|
|
70
|
+
}) => Promise<string | undefined>;
|
|
71
|
+
export type CartPaymentSplitPlan = {
|
|
72
|
+
/** Payment collections to create, one per order that has none yet. */
|
|
73
|
+
collections: {
|
|
74
|
+
order_id: string;
|
|
75
|
+
currency_code: string;
|
|
76
|
+
amount: BigNumberInput;
|
|
77
|
+
metadata: Record<string, unknown>;
|
|
78
|
+
}[];
|
|
79
|
+
/**
|
|
80
|
+
* Payments to create. `payment_collection_id` is unset for an order whose
|
|
81
|
+
* collection is created in the same run.
|
|
82
|
+
*/
|
|
83
|
+
payments: {
|
|
84
|
+
order_id: string;
|
|
85
|
+
payment_collection_id?: string;
|
|
86
|
+
provider_id: string;
|
|
87
|
+
currency_code: string;
|
|
88
|
+
amount: BigNumberInput;
|
|
89
|
+
data: Record<string, unknown>;
|
|
90
|
+
}[];
|
|
91
|
+
/**
|
|
92
|
+
* Captures to record. `payment_id` is unset for an order whose payment is
|
|
93
|
+
* created in the same run.
|
|
94
|
+
*/
|
|
95
|
+
captures: {
|
|
96
|
+
order_id: string;
|
|
97
|
+
payment_id?: string;
|
|
98
|
+
amount: BigNumberInput;
|
|
99
|
+
}[];
|
|
100
|
+
/**
|
|
101
|
+
* Captures the orders' payments already hold. Their order transactions are
|
|
102
|
+
* written again on every run, which is a no-op unless an earlier run stopped
|
|
103
|
+
* between recording a capture and writing its transaction.
|
|
104
|
+
*/
|
|
105
|
+
recorded: {
|
|
106
|
+
order_id: string;
|
|
107
|
+
currency_code: string;
|
|
108
|
+
capture_id: string;
|
|
109
|
+
amount: BigNumberInput;
|
|
110
|
+
}[];
|
|
111
|
+
/** What was charged for orders canceled before the capture. */
|
|
112
|
+
refunds: {
|
|
113
|
+
payment_id: string;
|
|
114
|
+
amount: BigNumberInput;
|
|
115
|
+
note: string;
|
|
116
|
+
}[];
|
|
117
|
+
/** Set when the cart collection still has to be flagged as split. */
|
|
118
|
+
cart_payment_collection?: {
|
|
119
|
+
id: string;
|
|
120
|
+
metadata: Record<string, unknown>;
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Works out what is missing for every order of a cart to hold its share of
|
|
125
|
+
* what the cart payment has captured. Only ever plans the difference, so a
|
|
126
|
+
* cart that is already split yields an empty plan.
|
|
127
|
+
*/
|
|
128
|
+
export declare const planCartPaymentSplit: (cartCollection: SplitOrderGroupCollection | null | undefined, orders: SplitOrderGroupOrder[]) => CartPaymentSplitPlan;
|
|
129
|
+
/** The links between the orders and the payment collections created for them. */
|
|
130
|
+
export declare const buildOrderPaymentCollectionLinks: (plan: CartPaymentSplitPlan, createdCollections: {
|
|
131
|
+
id: string;
|
|
132
|
+
}[]) => LinkDefinition[];
|
|
133
|
+
/**
|
|
134
|
+
* The cart payment to void: set once every order of the cart is canceled and
|
|
135
|
+
* nothing of the payment was captured.
|
|
136
|
+
*/
|
|
137
|
+
export declare const planCartPaymentVoid: (cartCollection: SplitOrderGroupCollection | null | undefined, orders: SplitOrderGroupOrder[]) => {
|
|
138
|
+
payment_ids: string[];
|
|
139
|
+
payment_collection_ids: string[];
|
|
140
|
+
};
|
|
141
|
+
export {};
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.planCartPaymentVoid = exports.buildOrderPaymentCollectionLinks = exports.planCartPaymentSplit = exports.resolveSplitOrderCartId = exports.resolveOrderPaymentCollections = exports.hasSplitOrderCollections = exports.isOrderCanceled = exports.isPaymentCaptured = exports.cartOrderFields = exports.cartPaymentCollectionFields = exports.CART_PAYMENT_COLLECTION_KEY = exports.SPLIT_ORDER_COLLECTIONS_FLAG = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const split_order_payment_1 = require("./split-order-payment");
|
|
6
|
+
/** Set on a cart's payment collection once it is split into its orders'. */
|
|
7
|
+
exports.SPLIT_ORDER_COLLECTIONS_FLAG = "split_order_collections";
|
|
8
|
+
/** Set on an order's payment collection, pointing at the cart's. */
|
|
9
|
+
exports.CART_PAYMENT_COLLECTION_KEY = "cart_payment_collection_id";
|
|
10
|
+
const PAYMENT_FIELDS = [
|
|
11
|
+
"id",
|
|
12
|
+
"provider_id",
|
|
13
|
+
"currency_code",
|
|
14
|
+
"amount",
|
|
15
|
+
"raw_amount",
|
|
16
|
+
"data",
|
|
17
|
+
"captured_at",
|
|
18
|
+
"canceled_at",
|
|
19
|
+
"captures.id",
|
|
20
|
+
"captures.amount",
|
|
21
|
+
"captures.raw_amount",
|
|
22
|
+
"refunds.id",
|
|
23
|
+
"refunds.amount",
|
|
24
|
+
"refunds.raw_amount",
|
|
25
|
+
];
|
|
26
|
+
const COLLECTION_FIELDS = [
|
|
27
|
+
"id",
|
|
28
|
+
"currency_code",
|
|
29
|
+
"metadata",
|
|
30
|
+
...PAYMENT_FIELDS.map((field) => `payments.${field}`),
|
|
31
|
+
];
|
|
32
|
+
/** Fields to query on `cart_payment_collection` to plan a split or a void. */
|
|
33
|
+
exports.cartPaymentCollectionFields = COLLECTION_FIELDS.map((field) => `payment_collection.${field}`);
|
|
34
|
+
/** Fields to query on `order_cart` to plan a split or a void. */
|
|
35
|
+
exports.cartOrderFields = [
|
|
36
|
+
"order.id",
|
|
37
|
+
"order.status",
|
|
38
|
+
"order.canceled_at",
|
|
39
|
+
"order.total",
|
|
40
|
+
...COLLECTION_FIELDS.map((field) => `order.payment_collections.${field}`),
|
|
41
|
+
];
|
|
42
|
+
const amountOf = (movement) => movement.raw_amount ?? movement.amount;
|
|
43
|
+
const sum = (movements) => (movements ?? []).reduce((acc, movement) => utils_1.MathBN.add(acc, amountOf(movement)), utils_1.MathBN.convert(0));
|
|
44
|
+
const isPaymentCaptured = (payment) => !!payment.captured_at || (payment.captures ?? []).length > 0;
|
|
45
|
+
exports.isPaymentCaptured = isPaymentCaptured;
|
|
46
|
+
const isOrderCanceled = (order) => order.status === utils_1.OrderStatus.CANCELED || !!order.canceled_at;
|
|
47
|
+
exports.isOrderCanceled = isOrderCanceled;
|
|
48
|
+
const hasSplitOrderCollections = (paymentCollection) => paymentCollection?.metadata?.[exports.SPLIT_ORDER_COLLECTIONS_FLAG] === true;
|
|
49
|
+
exports.hasSplitOrderCollections = hasSplitOrderCollections;
|
|
50
|
+
/**
|
|
51
|
+
* The payment collections that pay for an order. Until the cart payment is
|
|
52
|
+
* captured that is the cart's shared collection; afterwards the order has its
|
|
53
|
+
* own. An order canceled before the capture never gets one and keeps showing
|
|
54
|
+
* the cart's.
|
|
55
|
+
*/
|
|
56
|
+
const resolveOrderPaymentCollections = (order) => {
|
|
57
|
+
const own = order.payment_collections ?? [];
|
|
58
|
+
const cartPaymentCollection = order.cart?.payment_collection;
|
|
59
|
+
if (!cartPaymentCollection) {
|
|
60
|
+
return own;
|
|
61
|
+
}
|
|
62
|
+
return (0, exports.hasSplitOrderCollections)(cartPaymentCollection) && own.length
|
|
63
|
+
? own
|
|
64
|
+
: [cartPaymentCollection];
|
|
65
|
+
};
|
|
66
|
+
exports.resolveOrderPaymentCollections = resolveOrderPaymentCollections;
|
|
67
|
+
/**
|
|
68
|
+
* Resolves the cart a payment or an order belongs to. A payment can be the
|
|
69
|
+
* cart's own or one created for an order when the cart payment was split.
|
|
70
|
+
*/
|
|
71
|
+
const resolveSplitOrderCartId = async (container, input) => {
|
|
72
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
73
|
+
if ("order_id" in input) {
|
|
74
|
+
const { data: [orderCart], } = await query.graph({
|
|
75
|
+
entity: "order_cart",
|
|
76
|
+
fields: ["cart_id"],
|
|
77
|
+
filters: { order_id: input.order_id },
|
|
78
|
+
});
|
|
79
|
+
return orderCart?.cart_id;
|
|
80
|
+
}
|
|
81
|
+
const { data: [payment], } = await query.graph({
|
|
82
|
+
entity: "payment",
|
|
83
|
+
fields: ["id", "payment_collection.id", "payment_collection.metadata"],
|
|
84
|
+
filters: { id: input.payment_id },
|
|
85
|
+
});
|
|
86
|
+
const collection = payment?.payment_collection;
|
|
87
|
+
if (!collection) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
const { data: [cartLink], } = await query.graph({
|
|
91
|
+
entity: "cart_payment_collection",
|
|
92
|
+
fields: ["cart_id"],
|
|
93
|
+
filters: {
|
|
94
|
+
payment_collection_id: collection.metadata?.[exports.CART_PAYMENT_COLLECTION_KEY] ?? collection.id,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
return cartLink?.cart_id;
|
|
98
|
+
};
|
|
99
|
+
exports.resolveSplitOrderCartId = resolveSplitOrderCartId;
|
|
100
|
+
const getCartPayment = (collection) => (collection?.payments ?? []).find((payment) => !payment.canceled_at);
|
|
101
|
+
const getOrderCollection = (order, cartCollectionId) => (order.payment_collections ?? []).find((collection) => collection.metadata?.[exports.CART_PAYMENT_COLLECTION_KEY] === cartCollectionId);
|
|
102
|
+
const EMPTY_PLAN = {
|
|
103
|
+
collections: [],
|
|
104
|
+
payments: [],
|
|
105
|
+
captures: [],
|
|
106
|
+
recorded: [],
|
|
107
|
+
refunds: [],
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Works out what is missing for every order of a cart to hold its share of
|
|
111
|
+
* what the cart payment has captured. Only ever plans the difference, so a
|
|
112
|
+
* cart that is already split yields an empty plan.
|
|
113
|
+
*/
|
|
114
|
+
const planCartPaymentSplit = (cartCollection, orders) => {
|
|
115
|
+
const cartPayment = getCartPayment(cartCollection);
|
|
116
|
+
if (!cartCollection || !cartPayment || !orders.length) {
|
|
117
|
+
return EMPTY_PLAN;
|
|
118
|
+
}
|
|
119
|
+
const captured = sum(cartPayment.captures);
|
|
120
|
+
if (!utils_1.MathBN.gt(captured, 0)) {
|
|
121
|
+
return EMPTY_PLAN;
|
|
122
|
+
}
|
|
123
|
+
const decimalDigits = (0, split_order_payment_1.getCurrencyDecimalDigits)(cartPayment.currency_code);
|
|
124
|
+
const weights = orders.map((order) => order.total);
|
|
125
|
+
// What each order is entitled to of the authorization, and of the part of
|
|
126
|
+
// it captured so far.
|
|
127
|
+
const shares = (0, split_order_payment_1.allocateProportionally)({
|
|
128
|
+
amount: amountOf(cartPayment),
|
|
129
|
+
weights,
|
|
130
|
+
decimalDigits,
|
|
131
|
+
});
|
|
132
|
+
const targets = (0, split_order_payment_1.allocateProportionally)({
|
|
133
|
+
amount: captured,
|
|
134
|
+
weights,
|
|
135
|
+
decimalDigits,
|
|
136
|
+
});
|
|
137
|
+
const plan = {
|
|
138
|
+
collections: [],
|
|
139
|
+
payments: [],
|
|
140
|
+
captures: [],
|
|
141
|
+
recorded: [],
|
|
142
|
+
refunds: [],
|
|
143
|
+
};
|
|
144
|
+
let attributed = utils_1.MathBN.convert(0);
|
|
145
|
+
orders.forEach((order, index) => {
|
|
146
|
+
const collection = getOrderCollection(order, cartCollection.id);
|
|
147
|
+
const payment = collection?.payments?.[0];
|
|
148
|
+
const recorded = sum(payment?.captures);
|
|
149
|
+
const missing = utils_1.MathBN.sub(targets[index], recorded);
|
|
150
|
+
attributed = utils_1.MathBN.add(attributed, recorded);
|
|
151
|
+
for (const capture of payment?.captures ?? []) {
|
|
152
|
+
plan.recorded.push({
|
|
153
|
+
order_id: order.id,
|
|
154
|
+
currency_code: cartPayment.currency_code,
|
|
155
|
+
capture_id: capture.id,
|
|
156
|
+
amount: amountOf(capture),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
// An order canceled before the capture is not paid: its part of the
|
|
160
|
+
// charge stays unattributed and is refunded.
|
|
161
|
+
if ((0, exports.isOrderCanceled)(order) || !utils_1.MathBN.gt(missing, 0)) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (!collection) {
|
|
165
|
+
plan.collections.push({
|
|
166
|
+
order_id: order.id,
|
|
167
|
+
currency_code: cartPayment.currency_code,
|
|
168
|
+
amount: shares[index],
|
|
169
|
+
metadata: { [exports.CART_PAYMENT_COLLECTION_KEY]: cartCollection.id },
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
if (!payment) {
|
|
173
|
+
plan.payments.push({
|
|
174
|
+
order_id: order.id,
|
|
175
|
+
payment_collection_id: collection?.id,
|
|
176
|
+
provider_id: cartPayment.provider_id,
|
|
177
|
+
currency_code: cartPayment.currency_code,
|
|
178
|
+
amount: shares[index],
|
|
179
|
+
data: cartPayment.data ?? {},
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
plan.captures.push({
|
|
183
|
+
order_id: order.id,
|
|
184
|
+
payment_id: payment?.id,
|
|
185
|
+
amount: missing,
|
|
186
|
+
});
|
|
187
|
+
attributed = utils_1.MathBN.add(attributed, missing);
|
|
188
|
+
});
|
|
189
|
+
const unattributed = utils_1.MathBN.sub(captured, attributed, sum(cartPayment.refunds));
|
|
190
|
+
if (utils_1.MathBN.gt(unattributed, 0)) {
|
|
191
|
+
plan.refunds.push({
|
|
192
|
+
payment_id: cartPayment.id,
|
|
193
|
+
amount: unattributed,
|
|
194
|
+
note: "Share of orders canceled before the payment was captured",
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
if (!(0, exports.hasSplitOrderCollections)(cartCollection)) {
|
|
198
|
+
plan.cart_payment_collection = {
|
|
199
|
+
id: cartCollection.id,
|
|
200
|
+
metadata: {
|
|
201
|
+
...cartCollection.metadata,
|
|
202
|
+
[exports.SPLIT_ORDER_COLLECTIONS_FLAG]: true,
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return plan;
|
|
207
|
+
};
|
|
208
|
+
exports.planCartPaymentSplit = planCartPaymentSplit;
|
|
209
|
+
/** The links between the orders and the payment collections created for them. */
|
|
210
|
+
const buildOrderPaymentCollectionLinks = (plan, createdCollections) => plan.collections.map((collection, index) => ({
|
|
211
|
+
[utils_1.Modules.ORDER]: { order_id: collection.order_id },
|
|
212
|
+
[utils_1.Modules.PAYMENT]: { payment_collection_id: createdCollections[index].id },
|
|
213
|
+
}));
|
|
214
|
+
exports.buildOrderPaymentCollectionLinks = buildOrderPaymentCollectionLinks;
|
|
215
|
+
/**
|
|
216
|
+
* The cart payment to void: set once every order of the cart is canceled and
|
|
217
|
+
* nothing of the payment was captured.
|
|
218
|
+
*/
|
|
219
|
+
const planCartPaymentVoid = (cartCollection, orders) => {
|
|
220
|
+
const cartPayment = getCartPayment(cartCollection);
|
|
221
|
+
if (!cartCollection ||
|
|
222
|
+
!cartPayment ||
|
|
223
|
+
!orders.length ||
|
|
224
|
+
(0, exports.isPaymentCaptured)(cartPayment) ||
|
|
225
|
+
!orders.every(exports.isOrderCanceled)) {
|
|
226
|
+
return { payment_ids: [], payment_collection_ids: [] };
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
payment_ids: [cartPayment.id],
|
|
230
|
+
payment_collection_ids: [cartCollection.id],
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
exports.planCartPaymentVoid = planCartPaymentVoid;
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtb3JkZXItcGF5bWVudC1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvcGF5bWVudC91dGlscy9zcGxpdC1vcmRlci1wYXltZW50LWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLHFEQUtrQztBQUVsQywrREFHOEI7QUFFOUIsNEVBQTRFO0FBQy9ELFFBQUEsNEJBQTRCLEdBQUcseUJBQXlCLENBQUE7QUFFckUsb0VBQW9FO0FBQ3ZELFFBQUEsMkJBQTJCLEdBQUcsNEJBQTRCLENBQUE7QUFvQ3ZFLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLElBQUk7SUFDSixhQUFhO0lBQ2IsZUFBZTtJQUNmLFFBQVE7SUFDUixZQUFZO0lBQ1osTUFBTTtJQUNOLGFBQWE7SUFDYixhQUFhO0lBQ2IsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixvQkFBb0I7Q0FDckIsQ0FBQTtBQUVELE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSTtJQUNKLGVBQWU7SUFDZixVQUFVO0lBQ1YsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDO0NBQ3RELENBQUE7QUFFRCw4RUFBOEU7QUFDakUsUUFBQSwyQkFBMkIsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQzlELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsS0FBSyxFQUFFLENBQ3pDLENBQUE7QUFFRCxpRUFBaUU7QUFDcEQsUUFBQSxlQUFlLEdBQUc7SUFDN0IsVUFBVTtJQUNWLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyw2QkFBNkIsS0FBSyxFQUFFLENBQUM7Q0FDMUUs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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BigNumberInput } from "@medusajs/framework/types";
|
|
2
|
+
import { MathBN } from "@medusajs/framework/utils";
|
|
3
|
+
type BigNumberValue = ReturnType<typeof MathBN.convert>;
|
|
4
|
+
export declare const getCurrencyDecimalDigits: (currencyCode?: string | null) => number;
|
|
5
|
+
/**
|
|
6
|
+
* Splits `amount` across `weights` proportionally. Shares are rounded down to
|
|
7
|
+
* the currency precision and the remainder is handed out one minor unit at a
|
|
8
|
+
* time to the largest fractions, so the shares always sum exactly to `amount`.
|
|
9
|
+
*/
|
|
10
|
+
export declare const allocateProportionally: ({ amount, weights, decimalDigits, }: {
|
|
11
|
+
amount: BigNumberInput;
|
|
12
|
+
weights: BigNumberInput[];
|
|
13
|
+
decimalDigits: number;
|
|
14
|
+
}) => BigNumberValue[];
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.allocateProportionally = exports.getCurrencyDecimalDigits = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const DEFAULT_DECIMAL_DIGITS = 2;
|
|
6
|
+
const getCurrencyDecimalDigits = (currencyCode) => {
|
|
7
|
+
const currency = utils_1.defaultCurrencies[(currencyCode ?? "").toUpperCase()];
|
|
8
|
+
return currency?.decimal_digits ?? DEFAULT_DECIMAL_DIGITS;
|
|
9
|
+
};
|
|
10
|
+
exports.getCurrencyDecimalDigits = getCurrencyDecimalDigits;
|
|
11
|
+
const floorTo = (value, decimalDigits) => {
|
|
12
|
+
const rounded = utils_1.MathBN.convert(value, decimalDigits);
|
|
13
|
+
if (utils_1.MathBN.lte(rounded, value)) {
|
|
14
|
+
return rounded;
|
|
15
|
+
}
|
|
16
|
+
return utils_1.MathBN.sub(rounded, utils_1.MathBN.div(1, utils_1.MathBN.convert(10).pow(decimalDigits)));
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Splits `amount` across `weights` proportionally. Shares are rounded down to
|
|
20
|
+
* the currency precision and the remainder is handed out one minor unit at a
|
|
21
|
+
* time to the largest fractions, so the shares always sum exactly to `amount`.
|
|
22
|
+
*/
|
|
23
|
+
const allocateProportionally = ({ amount, weights, decimalDigits, }) => {
|
|
24
|
+
if (!weights.length) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
const total = utils_1.MathBN.convert(amount);
|
|
28
|
+
const positiveWeights = weights.map((weight) => utils_1.MathBN.max(utils_1.MathBN.convert(weight), 0));
|
|
29
|
+
const weightSum = positiveWeights.reduce((acc, weight) => utils_1.MathBN.add(acc, weight), utils_1.MathBN.convert(0));
|
|
30
|
+
const effectiveWeights = utils_1.MathBN.gt(weightSum, 0)
|
|
31
|
+
? positiveWeights
|
|
32
|
+
: positiveWeights.map(() => utils_1.MathBN.convert(1));
|
|
33
|
+
const effectiveSum = utils_1.MathBN.gt(weightSum, 0)
|
|
34
|
+
? weightSum
|
|
35
|
+
: utils_1.MathBN.convert(effectiveWeights.length);
|
|
36
|
+
const unit = utils_1.MathBN.div(1, utils_1.MathBN.convert(10).pow(decimalDigits));
|
|
37
|
+
const exact = effectiveWeights.map((weight) => utils_1.MathBN.div(utils_1.MathBN.mult(total, weight), effectiveSum));
|
|
38
|
+
const shares = exact.map((share) => floorTo(share, decimalDigits));
|
|
39
|
+
let leftover = utils_1.MathBN.sub(total, shares.reduce((acc, share) => utils_1.MathBN.add(acc, share), utils_1.MathBN.convert(0)));
|
|
40
|
+
const byLargestFraction = exact
|
|
41
|
+
.map((share, index) => ({
|
|
42
|
+
index,
|
|
43
|
+
fraction: utils_1.MathBN.sub(share, shares[index]),
|
|
44
|
+
}))
|
|
45
|
+
.sort((a, b) => utils_1.MathBN.eq(a.fraction, b.fraction)
|
|
46
|
+
? a.index - b.index
|
|
47
|
+
: utils_1.MathBN.gt(a.fraction, b.fraction)
|
|
48
|
+
? -1
|
|
49
|
+
: 1);
|
|
50
|
+
for (const { index } of byLargestFraction) {
|
|
51
|
+
if (utils_1.MathBN.lt(leftover, unit)) {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
shares[index] = utils_1.MathBN.add(shares[index], unit);
|
|
55
|
+
leftover = utils_1.MathBN.sub(leftover, unit);
|
|
56
|
+
}
|
|
57
|
+
// Only reachable when `amount` itself is finer than the currency precision.
|
|
58
|
+
if (utils_1.MathBN.gt(leftover, 0)) {
|
|
59
|
+
const { index } = byLargestFraction[0];
|
|
60
|
+
shares[index] = utils_1.MathBN.add(shares[index], leftover);
|
|
61
|
+
}
|
|
62
|
+
return shares;
|
|
63
|
+
};
|
|
64
|
+
exports.allocateProportionally = allocateProportionally;
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtb3JkZXItcGF5bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvcGF5bWVudC91dGlscy9zcGxpdC1vcmRlci1wYXltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFxRTtBQUlyRSxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQTtBQUV6QixNQUFNLHdCQUF3QixHQUFHLENBQUMsWUFBNEIsRUFBRSxFQUFFO0lBQ3ZFLE1BQU0sUUFBUSxHQUFHLHlCQUFpQixDQUFDLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDdEUsT0FBTyxRQUFRLEVBQUUsY0FBYyxJQUFJLHNCQUFzQixDQUFBO0FBQzNELENBQUMsQ0FBQTtBQUhZLFFBQUEsd0JBQXdCLDRCQUdwQztBQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBcUIsRUFBRSxhQUFxQixFQUFFLEVBQUU7SUFDL0QsTUFBTSxPQUFPLEdBQUcsY0FBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDcEQsSUFBSSxjQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFDRCxPQUFPLGNBQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGNBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGNBQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNsRixDQUFDLENBQUE7QUFFRDs7OztHQUlHO0FBQ0ksTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEVBQ3JDLE1BQU0sRUFDTixPQUFPLEVBQ1AsYUFBYSxHQUtkLEVBQW9CLEVBQUU7SUFDckIsSUFBSSxDQUFDLE9BQU8s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
|
|
@@ -15,4 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./process-payment"), exports);
|
|
18
|
-
|
|
18
|
+
__exportStar(require("./payment-hooks"), exports);
|
|
19
|
+
__exportStar(require("./split-order-payments"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3BheW1lbnQvd29ya2Zsb3dzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBaUM7QUFDakMsa0RBQStCO0FBQy9CLHlEQUFzQyJ9
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BigNumberInput, PaymentDTO } from "@medusajs/framework/types";
|
|
2
|
+
import type { Hook, ReturnWorkflow } from "@medusajs/framework/workflows-sdk";
|
|
3
|
+
import { type CapturePaymentWorkflowInput, type RefundPaymentWorkflowInput } from "@medusajs/medusa/core-flows";
|
|
4
|
+
export type CapturePaymentWorkflowHooks = [
|
|
5
|
+
Hook<"paymentCaptured", {
|
|
6
|
+
payment: PaymentDTO;
|
|
7
|
+
order_id: string | null;
|
|
8
|
+
amount: BigNumberInput | null;
|
|
9
|
+
}, unknown>
|
|
10
|
+
];
|
|
11
|
+
export type RefundPaymentWorkflowHooks = [
|
|
12
|
+
Hook<"paymentRefunded", {
|
|
13
|
+
payment: PaymentDTO;
|
|
14
|
+
order_id: string | null;
|
|
15
|
+
amount: BigNumberInput | null;
|
|
16
|
+
credit_line_amount: BigNumberInput;
|
|
17
|
+
refund_reason: {
|
|
18
|
+
id: string;
|
|
19
|
+
label: string;
|
|
20
|
+
code: string | null;
|
|
21
|
+
} | null;
|
|
22
|
+
}, unknown>
|
|
23
|
+
];
|
|
24
|
+
export declare const capturePaymentWorkflow: ReturnWorkflow<CapturePaymentWorkflowInput, PaymentDTO, CapturePaymentWorkflowHooks>;
|
|
25
|
+
export declare const refundPaymentWorkflow: ReturnWorkflow<RefundPaymentWorkflowInput, PaymentDTO, RefundPaymentWorkflowHooks>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.refundPaymentWorkflow = exports.capturePaymentWorkflow = void 0;
|
|
4
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
5
|
+
// The hooks come from the core-flows payment-hooks patch, which is applied in
|
|
6
|
+
// memory and cannot reach Medusa's shipped typings, so the patched shape is
|
|
7
|
+
// asserted here. Keep in sync with patches/@medusajs+core-flows@*-payment-hooks.patch.
|
|
8
|
+
exports.capturePaymentWorkflow = core_flows_1.capturePaymentWorkflow;
|
|
9
|
+
exports.refundPaymentWorkflow = core_flows_1.refundPaymentWorkflow;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1ob29rcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvcGF5bWVudC93b3JrZmxvd3MvcGF5bWVudC1ob29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw0REFLb0M7QUE0QnBDLDhFQUE4RTtBQUM5RSw0RUFBNEU7QUFDNUUsdUZBQXVGO0FBQzFFLFFBQUEsc0JBQXNCLEdBQ2pDLG1DQUlDLENBQUE7QUFFVSxRQUFBLHFCQUFxQixHQUNoQyxrQ0FJQyxDQUFBIn0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cart whose payment to split.
|
|
3
|
+
*/
|
|
4
|
+
export type SplitCapturedCartPaymentWorkflowInput = {
|
|
5
|
+
/**
|
|
6
|
+
* The ID of the cart.
|
|
7
|
+
*/
|
|
8
|
+
cart_id: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const splitCapturedCartPaymentWorkflowId = "split-captured-cart-payment";
|
|
11
|
+
/**
|
|
12
|
+
* This workflow splits a captured cart payment between the orders of the
|
|
13
|
+
* cart. Every order gets a payment collection of its own, linked to the order,
|
|
14
|
+
* with a captured payment for the order's share on the cart payment's provider
|
|
15
|
+
* and pointing at the same charge, so Medusa's refund and cancel workflows
|
|
16
|
+
* apply to the order. What was charged for orders canceled before the capture
|
|
17
|
+
* is refunded against the cart payment.
|
|
18
|
+
*
|
|
19
|
+
* The workflow only adds what is missing: it does nothing until the cart
|
|
20
|
+
* payment has a capture, and nothing when run again for the same capture.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const { result } = await splitCapturedCartPaymentWorkflow(container)
|
|
24
|
+
* .run({
|
|
25
|
+
* input: {
|
|
26
|
+
* cart_id: "cart_123",
|
|
27
|
+
* }
|
|
28
|
+
* })
|
|
29
|
+
*
|
|
30
|
+
* @summary
|
|
31
|
+
*
|
|
32
|
+
* Split a captured cart payment into a payment per order.
|
|
33
|
+
*/
|
|
34
|
+
export declare const splitCapturedCartPaymentWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<SplitCapturedCartPaymentWorkflowInput, import("@medusajs/types").PaymentDTO[], []>;
|
|
35
|
+
/**
|
|
36
|
+
* The cart whose payment to void.
|
|
37
|
+
*/
|
|
38
|
+
export type VoidCanceledCartPaymentWorkflowInput = {
|
|
39
|
+
/**
|
|
40
|
+
* The ID of the cart.
|
|
41
|
+
*/
|
|
42
|
+
cart_id: string;
|
|
43
|
+
};
|
|
44
|
+
export declare const voidCanceledCartPaymentWorkflowId = "void-canceled-cart-payment";
|
|
45
|
+
/**
|
|
46
|
+
* This workflow voids a cart's payment once every order of the cart is
|
|
47
|
+
* canceled. Until it is captured, the authorization is shared by the cart's
|
|
48
|
+
* orders, so canceling a single order leaves it in place. The workflow does
|
|
49
|
+
* nothing while an order is still open or once the payment is captured.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* const { result } = await voidCanceledCartPaymentWorkflow(container)
|
|
53
|
+
* .run({
|
|
54
|
+
* input: {
|
|
55
|
+
* cart_id: "cart_123",
|
|
56
|
+
* }
|
|
57
|
+
* })
|
|
58
|
+
*
|
|
59
|
+
* @summary
|
|
60
|
+
*
|
|
61
|
+
* Void a cart's payment when all of its orders are canceled.
|
|
62
|
+
*/
|
|
63
|
+
export declare const voidCanceledCartPaymentWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<VoidCanceledCartPaymentWorkflowInput, {
|
|
64
|
+
payment_ids: string[];
|
|
65
|
+
payment_collection_ids: string[];
|
|
66
|
+
}, []>;
|