@hartl-services/medusa-base 2.10.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +44 -40
- package/.medusa/server/src/admin/index.mjs +44 -40
- package/.medusa/server/src/api/admin/tax-compliance/customer-addresses/[address_id]/tax-identification/route.js +15 -0
- package/.medusa/server/src/api/check-customer-address-tax-identification.js +93 -0
- package/.medusa/server/src/api/customer-address-identification-response.js +14 -0
- package/.medusa/server/src/api/middlewares.js +55 -1
- package/.medusa/server/src/api/store/carts/[id]/tax-identification/route.js +179 -0
- package/.medusa/server/src/api/store/customers/me/addresses/[address_id]/tax-identification/route.js +12 -0
- package/.medusa/server/src/api/store/customers/me/tax-identifications/route.js +14 -0
- package/.medusa/server/src/api/store/tax-identification-policy/route.js +21 -0
- package/.medusa/server/src/api/tax-identification-message.js +9 -0
- package/.medusa/server/src/api/to-response-amount.js +19 -0
- package/.medusa/server/src/email/application/deliver-ephemeral-auth-mail.js +2 -4
- package/.medusa/server/src/email/application/handle-password-reset-event.js +75 -27
- package/.medusa/server/src/email/rendering/default-templates.js +2 -1
- package/.medusa/server/src/email/rendering/render-email.js +2 -1
- package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +5 -1
- package/.medusa/server/src/email/templates/blocks/dynamic-blocks.js +5 -2
- package/.medusa/server/src/email/templates/defaults/documents.js +8 -1
- package/.medusa/server/src/email/templates/defaults/subjects.js +3 -1
- package/.medusa/server/src/email/templates/defaults/texts.js +4 -2
- package/.medusa/server/src/email/templates/render.js +2 -1
- package/.medusa/server/src/email/templates/sample-data.js +5 -1
- package/.medusa/server/src/email/types/email-kinds.js +3 -1
- package/.medusa/server/src/email/types/template-data.js +8 -1
- package/.medusa/server/src/jobs/tax-compliance-state-sync.js +26 -0
- package/.medusa/server/src/modules/email/migrations/Migration20261013120000.js +20 -0
- package/.medusa/server/src/modules/tax-compliance/domain/validation-policy.js +48 -0
- package/.medusa/server/src/modules/tax-compliance/index.js +15 -0
- package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260814120459.js +18 -0
- package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260814121724.js +14 -0
- package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260814153410.js +14 -0
- package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260929091620.js +27 -0
- package/.medusa/server/src/modules/tax-compliance/migrations/Migration20261011090147.js +16 -0
- package/.medusa/server/src/modules/tax-compliance/models/tax-compliance-state.js +29 -0
- package/.medusa/server/src/modules/tax-compliance/models/tax-compliance-validation.js +74 -0
- package/.medusa/server/src/modules/tax-compliance/runtime-settings.js +43 -0
- package/.medusa/server/src/modules/tax-compliance/service.js +693 -0
- package/.medusa/server/src/providers/tax-compliance/index.js +11 -0
- package/.medusa/server/src/providers/tax-compliance/service.js +179 -0
- package/.medusa/server/src/public/constants.js +4 -2
- package/.medusa/server/src/public/index.js +6 -2
- package/.medusa/server/src/public/tax-compliance.js +22 -0
- package/.medusa/server/src/shared/lib/index.js +2 -1
- package/.medusa/server/src/shared/lib/optional-registration.js +34 -0
- package/.medusa/server/src/shop-config/build-food-shop-config.js +12 -9
- package/.medusa/server/src/subscribers/tax-compliance-plugin-features-updated.js +25 -0
- package/.medusa/server/src/tax-compliance/complete-cart-hooks.js +26 -0
- package/.medusa/server/src/tax-compliance/integrations/finanzonline/client.js +222 -0
- package/.medusa/server/src/tax-compliance/integrations/finanzonline/validator.js +50 -0
- package/.medusa/server/src/tax-compliance/integrations/registry.js +26 -0
- package/.medusa/server/src/tax-compliance/integrations/validator.js +19 -0
- package/.medusa/server/src/tax-compliance/lib/order-tax-context.js +100 -0
- package/.medusa/server/src/tax-compliance/lib/tax-compliance-state.js +59 -0
- package/.medusa/server/src/tax-compliance/lib/tax-runtime-settings.js +79 -0
- package/.medusa/server/src/tax-compliance/plugin-features.js +73 -0
- package/.medusa/server/src/tax-compliance/resolve-services.js +7 -0
- package/.medusa/server/src/tax-compliance/types/tax-compliance.js +6 -0
- package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +25 -30
- package/.medusa/server/src/workflows/documents/issue-packing-list.js +3 -14
- package/.medusa/server/src/workflows/hooks/cart-tax-context.js +78 -0
- package/.medusa/server/src/workflows/hooks/order-tax-context.js +7 -0
- package/.medusa/server/src/workflows/hooks/shipping-tax-apportionment.js +145 -0
- package/.medusa/server/src/workflows/tax-compliance/apportion-order-shipping-tax.js +72 -0
- package/.medusa/server/src/workflows/tax-compliance/domain/requires-frozen-tax-evidence.js +27 -0
- package/.medusa/server/src/workflows/tax-compliance/freeze-order-evidence.js +125 -0
- package/.medusa/server/src/workflows/tax-compliance/submit-customer-address-tax-identification.js +18 -0
- package/.medusa/server/src/workflows/tax-compliance/submit-tax-identification.js +18 -0
- package/README.md +369 -27
- package/dist/email/types/email-kinds.d.ts +3 -2
- package/dist/email/types/email-kinds.js +2 -0
- package/dist/email/types/shop-configuration.d.ts +8 -0
- package/dist/email/types/template-data.d.ts +6 -1
- package/dist/email/types/template-data.js +7 -0
- package/dist/public/constants.d.ts +2 -0
- package/dist/public/constants.js +3 -1
- package/dist/public/index.d.ts +2 -1
- package/dist/public/index.js +5 -1
- package/dist/public/tax-compliance.d.ts +30 -0
- package/dist/public/tax-compliance.js +21 -0
- package/dist/shared/lib/index.d.ts +1 -0
- package/dist/shared/lib/index.js +1 -0
- package/dist/shared/lib/optional-registration.d.ts +18 -0
- package/dist/shared/lib/optional-registration.js +33 -0
- package/dist/shop-config/build-food-shop-config.d.ts +2 -2
- package/dist/shop-config/build-food-shop-config.js +11 -8
- package/package.json +5 -4
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveShippingRateContext = exports.withLineDiscounts = exports.netLineAmount = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const service_1 = require("../../providers/tax-compliance/service");
|
|
6
|
+
/**
|
|
7
|
+
* Net amount of a line after its discounts (the "Entgelt" shipping is split
|
|
8
|
+
* by), computed like Medusa's line item totals (@medusajs/utils
|
|
9
|
+
* totals/line-item and totals/adjustment): a tax-inclusive price or discount
|
|
10
|
+
* is reduced by the line's rate.
|
|
11
|
+
*/
|
|
12
|
+
const netLineAmount = (item, ratePercent) => {
|
|
13
|
+
const divisor = utils_1.MathBN.add(1, utils_1.MathBN.div(ratePercent, 100));
|
|
14
|
+
const toNet = (amount, isTaxInclusive) => isTaxInclusive ? utils_1.MathBN.div(amount, divisor) : utils_1.MathBN.convert(amount);
|
|
15
|
+
const subtotal = toNet(utils_1.MathBN.mult(item.unit_price ?? 0, item.quantity ?? 0), item.is_tax_inclusive);
|
|
16
|
+
return (item.adjustments ?? []).reduce((net, adjustment) => utils_1.MathBN.sub(net, toNet(adjustment.amount ?? 0, adjustment.is_tax_inclusive)), subtotal);
|
|
17
|
+
};
|
|
18
|
+
exports.netLineAmount = netLineAmount;
|
|
19
|
+
/**
|
|
20
|
+
* Adds the price type and discounts `netLineAmount` needs to items from a
|
|
21
|
+
* workflow payload that does not select them. Fail-safe: when the query
|
|
22
|
+
* fails the items stay as they are and count as net and undiscounted.
|
|
23
|
+
*/
|
|
24
|
+
const withLineDiscounts = async (container, entity, id, items) => {
|
|
25
|
+
if (items.length === 0) {
|
|
26
|
+
return [...items];
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
30
|
+
const { data } = await query.graph({
|
|
31
|
+
entity,
|
|
32
|
+
filters: { id },
|
|
33
|
+
fields: [
|
|
34
|
+
"items.id",
|
|
35
|
+
"items.is_tax_inclusive",
|
|
36
|
+
"items.adjustments.amount",
|
|
37
|
+
"items.adjustments.is_tax_inclusive",
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
const loaded = new Map((data[0]
|
|
41
|
+
?.items ?? []).map((item) => [item.id, item]));
|
|
42
|
+
return items.map((item) => {
|
|
43
|
+
const discounts = loaded.get(item.id);
|
|
44
|
+
return discounts
|
|
45
|
+
? {
|
|
46
|
+
...item,
|
|
47
|
+
is_tax_inclusive: discounts.is_tax_inclusive,
|
|
48
|
+
adjustments: discounts.adjustments,
|
|
49
|
+
}
|
|
50
|
+
: item;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return [...items];
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
exports.withLineDiscounts = withLineDiscounts;
|
|
58
|
+
/**
|
|
59
|
+
* Ancillary supplies (shipping) share the tax treatment of the main supply
|
|
60
|
+
* (AT UStR 2000 Rz 347 / DE UStAE 3.10); with items at several rates the
|
|
61
|
+
* shipping is split by their net amount after discounts, which one rate
|
|
62
|
+
* weighted by that amount taxes exactly. Medusa's `getItemTaxLinesStep`
|
|
63
|
+
* always resolves item and shipping tax lines through two separate provider
|
|
64
|
+
* calls (@medusajs/core-flows tax/steps/get-item-tax-lines.js calls
|
|
65
|
+
* `taxService.getTaxLines` once for items, once for shipping methods, each
|
|
66
|
+
* with the other list empty), so `TaxComplianceTaxProviderService.getTaxLines`
|
|
67
|
+
* never sees the cart's items while resolving shipping tax lines and cannot
|
|
68
|
+
* apportion the shipping rate on its own. This precomputes the apportioned
|
|
69
|
+
* rate here -- a `setTaxLineContext` hook, which runs once before either of
|
|
70
|
+
* those two calls and still has the full item list -- and hands it to the
|
|
71
|
+
* provider through `additional_context`, which Medusa passes unchanged to
|
|
72
|
+
* both calls.
|
|
73
|
+
*/
|
|
74
|
+
const resolveShippingRateContext = async (container, input) => {
|
|
75
|
+
const { items, address, currencyCode, customer, additionalContext } = input;
|
|
76
|
+
if (!address?.country_code || items.length === 0) {
|
|
77
|
+
return additionalContext;
|
|
78
|
+
}
|
|
79
|
+
let taxService;
|
|
80
|
+
try {
|
|
81
|
+
taxService = container.resolve(utils_1.Modules.TAX);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return additionalContext;
|
|
85
|
+
}
|
|
86
|
+
let itemTaxLines;
|
|
87
|
+
try {
|
|
88
|
+
itemTaxLines = await taxService.getTaxLines(items.map((item) => ({
|
|
89
|
+
id: item.id,
|
|
90
|
+
product_id: item.product_id,
|
|
91
|
+
product_type_id: item.product_type_id ?? undefined,
|
|
92
|
+
quantity: item.quantity,
|
|
93
|
+
unit_price: item.unit_price,
|
|
94
|
+
currency_code: currencyCode,
|
|
95
|
+
})), {
|
|
96
|
+
address: {
|
|
97
|
+
country_code: address.country_code,
|
|
98
|
+
province_code: address.province,
|
|
99
|
+
address_1: address.address_1 ?? undefined,
|
|
100
|
+
address_2: address.address_2 ?? undefined,
|
|
101
|
+
city: address.city ?? undefined,
|
|
102
|
+
postal_code: address.postal_code ?? undefined,
|
|
103
|
+
},
|
|
104
|
+
customer: customer
|
|
105
|
+
? {
|
|
106
|
+
id: customer.id,
|
|
107
|
+
email: customer.email,
|
|
108
|
+
customer_groups: customer.groups?.map((group) => group.id) ?? [],
|
|
109
|
+
metadata: customer.metadata,
|
|
110
|
+
}
|
|
111
|
+
: undefined,
|
|
112
|
+
additional_context: additionalContext,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return additionalContext;
|
|
117
|
+
}
|
|
118
|
+
const rateByItemId = new Map();
|
|
119
|
+
for (const line of itemTaxLines) {
|
|
120
|
+
if (!("line_item_id" in line)) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
rateByItemId.set(line.line_item_id, utils_1.MathBN.add(rateByItemId.get(line.line_item_id) ?? utils_1.MathBN.convert(0), line.rate ?? 0));
|
|
124
|
+
}
|
|
125
|
+
const weighted = items
|
|
126
|
+
.map((item) => {
|
|
127
|
+
const rate = rateByItemId.get(item.id) ?? utils_1.MathBN.convert(0);
|
|
128
|
+
return { base: (0, exports.netLineAmount)(item, rate), rate };
|
|
129
|
+
})
|
|
130
|
+
.filter((entry) => utils_1.MathBN.gt(entry.base, 0));
|
|
131
|
+
if (weighted.length === 0) {
|
|
132
|
+
return additionalContext;
|
|
133
|
+
}
|
|
134
|
+
const totalBase = weighted.reduce((sum, entry) => utils_1.MathBN.add(sum, entry.base), utils_1.MathBN.convert(0));
|
|
135
|
+
if (utils_1.MathBN.lte(totalBase, 0)) {
|
|
136
|
+
return additionalContext;
|
|
137
|
+
}
|
|
138
|
+
const weightedRateSum = weighted.reduce((sum, entry) => utils_1.MathBN.add(sum, utils_1.MathBN.mult(entry.base, entry.rate)), utils_1.MathBN.convert(0));
|
|
139
|
+
return {
|
|
140
|
+
...additionalContext,
|
|
141
|
+
[service_1.SHIPPING_TAX_RATE_CONTEXT_KEY]: utils_1.MathBN.div(weightedRateSum, totalBase).toNumber(),
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
exports.resolveShippingRateContext = resolveShippingRateContext;
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmctdGF4LWFwcG9ydGlvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2hvb2tzL3NoaXBwaW5nLXRheC1hcHBvcnRpb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLHFEQUlrQztBQUVsQyxvRUFBc0Y7QUFnQnRGOzs7OztHQUtHO0FBQ0ksTUFBTSxhQUFhLEdBQUcsQ0FDM0IsSUFBNkIsRUFDN0IsV0FBOEMsRUFDWCxFQUFFO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLGNBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGNBQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDM0QsTUFBTSxLQUFLLEdBQUcsQ0FDWixNQUErRCxFQUMvRCxjQUErQixFQUMvQixFQUFFLENBQ0YsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUV2RSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQ3BCLGNBQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFDckQsSUFBSSxDQUFDLGdCQUFnQixDQUN0QixDQUFBO0lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUNwQyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUNsQixjQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFDN0UsUUFBUSxDQUNULENBQUE7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
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.apportionOrderShippingTaxStep = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const lib_1 = require("../../shared/lib");
|
|
7
|
+
const order_tax_context_1 = require("../../tax-compliance/lib/order-tax-context");
|
|
8
|
+
const tax_compliance_state_1 = require("../../tax-compliance/lib/tax-compliance-state");
|
|
9
|
+
const service_1 = require("../../providers/tax-compliance/service");
|
|
10
|
+
const warnApportionmentUnavailable = (container, orderId, error) => {
|
|
11
|
+
try {
|
|
12
|
+
container
|
|
13
|
+
.resolve(utils_1.ContainerRegistrationKeys.LOGGER)
|
|
14
|
+
.warn(`Shipping tax of order ${orderId} keeps the cart's apportioned rate; recalculating it failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Logging must not replace the original workflow outcome.
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Medusa taxes a cart before it applies promotions (refreshCartItemsWorkflow
|
|
22
|
+
* runs the tax lines before updateCartPromotionsWorkflow), and redeeming a
|
|
23
|
+
* code through `POST /store/carts/:id/promotions` recalculates no tax at
|
|
24
|
+
* all, so the cart's apportioned shipping rate can be weighted by
|
|
25
|
+
* discounts that are no longer current. Once the order exists its discounts
|
|
26
|
+
* are final: this sets the rate of its apportioned shipping tax lines from
|
|
27
|
+
* them, through the same order tax context an order edit uses. Only
|
|
28
|
+
* tax-inclusive shipping, whose gross amount (and so the paid total) the
|
|
29
|
+
* rate does not change. Medusa's partial order tax recalculation would add
|
|
30
|
+
* lines instead of replacing them (setOrderTaxLinesForItemsStep upserts), so
|
|
31
|
+
* the existing lines are updated in place. Fail-safe: on error the order
|
|
32
|
+
* keeps the cart's rate.
|
|
33
|
+
*/
|
|
34
|
+
exports.apportionOrderShippingTaxStep = (0, workflows_sdk_1.createStep)("apportion-tax-compliance-order-shipping-tax", async (input, { container }) => {
|
|
35
|
+
try {
|
|
36
|
+
if (!(await (0, tax_compliance_state_1.readTaxComplianceState)(container)).shipping_tax_active) {
|
|
37
|
+
return new workflows_sdk_1.StepResponse(undefined);
|
|
38
|
+
}
|
|
39
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
40
|
+
const { data } = await query.graph({
|
|
41
|
+
entity: "order",
|
|
42
|
+
filters: { id: input.order_id },
|
|
43
|
+
fields: [
|
|
44
|
+
"shipping_methods.is_tax_inclusive",
|
|
45
|
+
"shipping_methods.tax_lines.id",
|
|
46
|
+
"shipping_methods.tax_lines.code",
|
|
47
|
+
],
|
|
48
|
+
});
|
|
49
|
+
const taxLineIds = (data[0]?.shipping_methods ?? []).flatMap((method) => method?.is_tax_inclusive
|
|
50
|
+
? (method.tax_lines ?? []).flatMap((taxLine) => taxLine?.code === lib_1.APPORTIONED_SHIPPING_TAX_CODE
|
|
51
|
+
? [taxLine.id]
|
|
52
|
+
: [])
|
|
53
|
+
: []);
|
|
54
|
+
if (taxLineIds.length === 0) {
|
|
55
|
+
return new workflows_sdk_1.StepResponse(undefined);
|
|
56
|
+
}
|
|
57
|
+
const rate = (await (0, order_tax_context_1.createOrderTaxContextFromContainer)(container, {
|
|
58
|
+
id: input.order_id,
|
|
59
|
+
}))?.[service_1.SHIPPING_TAX_RATE_CONTEXT_KEY];
|
|
60
|
+
if (typeof rate !== "number" || !Number.isFinite(rate)) {
|
|
61
|
+
throw new Error("No apportioned shipping rate for the order.");
|
|
62
|
+
}
|
|
63
|
+
await container
|
|
64
|
+
.resolve(utils_1.Modules.ORDER)
|
|
65
|
+
.upsertOrderShippingMethodTaxLines(taxLineIds.map((id) => ({ id, rate })));
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
warnApportionmentUnavailable(container, input.order_id, error);
|
|
69
|
+
}
|
|
70
|
+
return new workflows_sdk_1.StepResponse(undefined);
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb3J0aW9uLW9yZGVyLXNoaXBwaW5nLXRheC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvdGF4LWNvbXBsaWFuY2UvYXBwb3J0aW9uLW9yZGVyLXNoaXBwaW5nLXRheC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBOEU7QUFDOUUscUVBQTRFO0FBQzVFLDBDQUFnRTtBQUVoRSxrRkFBK0Y7QUFDL0Ysd0ZBQXNGO0FBQ3RGLG9FQUFzRjtBQVd0RixNQUFNLDRCQUE0QixHQUFHLENBQ25DLFNBQTBCLEVBQzFCLE9BQWUsRUFDZixLQUFjLEVBQ1IsRUFBRTtJQUNSLElBQUksQ0FBQztRQUNILFNBQVM7YUFDTixPQUFPLENBQ04saUNBQXlCLENBQUMsTUFBTSxDQUNqQzthQUNBLElBQUksQ0FDSCx5QkFBeUIsT0FBTyxnRUFBZ0UsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ3pKLENBQUE7SUFDTCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMERBQTBEO0lBQzVELENBQUM7QUFDSCxDQUFDLENBQUE7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ1UsUUFBQSw2QkFBNkIsR0FBRyxJQUFBLDBCQUFVLEVBQ3JELDZDQUE2QyxFQUM3QyxLQUFLLEVBQUUsS0FBcUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDN0QsSUFBSSxDQUFDO1FBQ0gsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFBLDZDQUFzQixFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNuRSxPQUFPLElBQUksNEJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNwQyxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNoRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxPQUFPO1lBQ2YsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxFQUFFO2dCQUNOLG1DQUFtQztnQkFDbkMsK0JBQStCO2dCQUMvQixpQ0FBaUM7YUFDbEM7U0FDRixDQUFDLENBQUE7UUFDRixNQUFNLFVBQVUsR0FBRyxDQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFzQyxFQUFFLGdCQUFnQixJQUFJLEVBQUUsQ0FDdEUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNuQixNQUFNLEVBQUUsZ0JBQWdCO1lBQ3RCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDM0MsT0FBTyxFQUFFLElBQUksS0FBSyxtQ0FBNkI7Z0JBQzdDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDLEVBQUUsQ0FDUDtZQUNILENBQUMsQ0FBQyxFQUFFLENBQ1AsQ0FBQTtRQUNELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksNEJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNwQyxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsQ0FDWCxNQUFNLElBQUEsc0RBQWtDLEVBQUMsU0FBUyxFQUFFO1lBQ2xELEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUTtTQUNuQixDQUFDLENBQ0gsRUFBRSxDQUFDLHVDQUE2QixDQUFDLENBQUE7UUFDbEMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFBO1FBQ2hFLENBQUM7UUFFRCxNQUFNLFNBQVM7YUFDWixPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQzthQUN0QixpQ0FBaUMsQ0FDaEMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ3ZDLENBQUE7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLDRCQUE0QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFRCxPQUFPLElBQUksNEJBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUNwQyxDQUFDLENBQ0YsQ0FBQSJ9
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requiresFrozenTaxEvidence = void 0;
|
|
4
|
+
const isZero = (value) => {
|
|
5
|
+
const numeric = Number(value);
|
|
6
|
+
return Number.isFinite(numeric) && numeric === 0;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* An order may only complete with durably frozen tax evidence when the tax
|
|
10
|
+
* provider zero-rated a line whose configured rate is not zero (e.g. an
|
|
11
|
+
* intra-EU B2B reverse charge after a UID validation). A line that is zero
|
|
12
|
+
* because its configured tax rate is zero (e.g. a small-business exemption)
|
|
13
|
+
* is ordinary taxation and needs no evidence. A zero line whose configured
|
|
14
|
+
* rate is unknown fails closed.
|
|
15
|
+
*/
|
|
16
|
+
const requiresFrozenTaxEvidence = (lines) => lines.some(({ rate, configuredRate }) => {
|
|
17
|
+
if (!isZero(rate)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (configuredRate === undefined) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
// The provider applies a configured rate without a value as 0.
|
|
24
|
+
return configuredRate !== null && !isZero(configuredRate);
|
|
25
|
+
});
|
|
26
|
+
exports.requiresFrozenTaxEvidence = requiresFrozenTaxEvidence;
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZXMtZnJvemVuLXRheC1ldmlkZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvdGF4LWNvbXBsaWFuY2UvZG9tYWluL3JlcXVpcmVzLWZyb3plbi10YXgtZXZpZGVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFjLEVBQVcsRUFBRTtJQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0IsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUE7QUFDbEQsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7R0FPRztBQUNJLE1BQU0seUJBQXlCLEdBQUcsQ0FDdkMsS0FBc0MsRUFDN0IsRUFBRSxDQUNYLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFO0lBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFDRCxJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFDRCwrREFBK0Q7SUFDL0QsT0FBTyxjQUFjLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBQzNELENBQUMsQ0FBQyxDQUFBO0FBWlMsUUFBQSx5QkFBeUIsNkJBWWxDIn0=
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.freezeOrderEvidenceWorkflow = exports.freezeOrderEvidenceStep = exports.FREEZE_TAX_COMPLIANCE_ORDER_EVIDENCE_WORKFLOW_ID = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const complete_cart_hooks_1 = require("../../tax-compliance/complete-cart-hooks");
|
|
7
|
+
Object.defineProperty(exports, "FREEZE_TAX_COMPLIANCE_ORDER_EVIDENCE_WORKFLOW_ID", { enumerable: true, get: function () { return complete_cart_hooks_1.FREEZE_TAX_COMPLIANCE_ORDER_EVIDENCE_WORKFLOW_ID; } });
|
|
8
|
+
const tax_compliance_state_1 = require("../../tax-compliance/lib/tax-compliance-state");
|
|
9
|
+
const tax_runtime_settings_1 = require("../../tax-compliance/lib/tax-runtime-settings");
|
|
10
|
+
const resolve_services_1 = require("../../tax-compliance/resolve-services");
|
|
11
|
+
const apportion_order_shipping_tax_1 = require("./apportion-order-shipping-tax");
|
|
12
|
+
const requires_frozen_tax_evidence_1 = require("./domain/requires-frozen-tax-evidence");
|
|
13
|
+
/**
|
|
14
|
+
* Pairs every cart tax line with the rate configured on the tax rate it came
|
|
15
|
+
* from, so a configured 0 % (e.g. a small-business exemption) can be told
|
|
16
|
+
* apart from a line the provider zero-rated on UID evidence. Lines without a
|
|
17
|
+
* tax rate (the blended shipping rate, derived from the item lines) carry no
|
|
18
|
+
* evidence of their own and are left out.
|
|
19
|
+
*/
|
|
20
|
+
const withConfiguredRates = async (container, taxLines) => {
|
|
21
|
+
const rateIds = [
|
|
22
|
+
...new Set(taxLines.flatMap(({ tax_rate_id }) => (tax_rate_id ? [tax_rate_id] : []))),
|
|
23
|
+
];
|
|
24
|
+
const configuredRates = new Map();
|
|
25
|
+
if (rateIds.length > 0) {
|
|
26
|
+
const taxRates = await container
|
|
27
|
+
.resolve(utils_1.Modules.TAX)
|
|
28
|
+
.listTaxRates({ id: rateIds }, { select: ["id", "rate"] });
|
|
29
|
+
for (const taxRate of taxRates) {
|
|
30
|
+
configuredRates.set(taxRate.id, taxRate.rate ?? null);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return taxLines.flatMap(({ rate, tax_rate_id }) => tax_rate_id
|
|
34
|
+
? [{ rate, configuredRate: configuredRates.get(tax_rate_id) }]
|
|
35
|
+
: []);
|
|
36
|
+
};
|
|
37
|
+
const warnFreezeUnavailable = (container) => {
|
|
38
|
+
try {
|
|
39
|
+
container
|
|
40
|
+
.resolve(utils_1.ContainerRegistrationKeys.LOGGER)
|
|
41
|
+
.warn("Tax evidence freeze is unavailable; continuing without tax evidence.");
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Logging must not replace the original workflow outcome.
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.freezeOrderEvidenceStep = (0, workflows_sdk_1.createStep)("freeze-tax-compliance-order-evidence", async (input, { container }) => {
|
|
48
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
49
|
+
const { data } = await query.graph({
|
|
50
|
+
entity: "cart",
|
|
51
|
+
fields: [
|
|
52
|
+
"id",
|
|
53
|
+
"billing_address.address_1",
|
|
54
|
+
"billing_address.address_2",
|
|
55
|
+
"billing_address.city",
|
|
56
|
+
"billing_address.company",
|
|
57
|
+
"billing_address.country_code",
|
|
58
|
+
"billing_address.postal_code",
|
|
59
|
+
"billing_address.metadata",
|
|
60
|
+
"shipping_address.country_code",
|
|
61
|
+
"items.tax_lines.rate",
|
|
62
|
+
"items.tax_lines.tax_rate_id",
|
|
63
|
+
"shipping_methods.tax_lines.rate",
|
|
64
|
+
"shipping_methods.tax_lines.tax_rate_id",
|
|
65
|
+
],
|
|
66
|
+
filters: { id: input.cart_id },
|
|
67
|
+
});
|
|
68
|
+
const cart = data[0];
|
|
69
|
+
if (!cart) {
|
|
70
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Cart with id '${input.cart_id}' not found.`);
|
|
71
|
+
}
|
|
72
|
+
const { items, shipping_methods, ...snapshot } = cart;
|
|
73
|
+
const required = (0, requires_frozen_tax_evidence_1.requiresFrozenTaxEvidence)(await withConfiguredRates(container, [...(items ?? []), ...(shipping_methods ?? [])].flatMap(({ tax_lines }) => tax_lines ?? [])));
|
|
74
|
+
// With `b2b` off an ordinarily taxed order keeps no UID evidence: it
|
|
75
|
+
// would print a reverse-charge note on its invoice and zero-rate a later
|
|
76
|
+
// order edit. A zero-rated order (cart taxed before the switch) still
|
|
77
|
+
// needs its evidence.
|
|
78
|
+
if (!required && !(await (0, tax_compliance_state_1.readTaxComplianceState)(container)).b2b_active) {
|
|
79
|
+
return new workflows_sdk_1.StepResponse(null, null);
|
|
80
|
+
}
|
|
81
|
+
let frozen;
|
|
82
|
+
try {
|
|
83
|
+
// Strict merchant read, only once a current validation record exists:
|
|
84
|
+
// a failure reaches the catch below.
|
|
85
|
+
frozen = await (0, resolve_services_1.resolveTaxComplianceService)(container).freezeOrderEvidence(input.order_id, snapshot, async () => await (0, tax_runtime_settings_1.resolveMerchantProfile)(container, { failSafe: false }));
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// A zero-rated order cannot complete without its evidence; an
|
|
89
|
+
// ordinarily taxed B2C order must not fail over auxiliary evidence.
|
|
90
|
+
if (required) {
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
warnFreezeUnavailable(container);
|
|
94
|
+
return new workflows_sdk_1.StepResponse(null, null);
|
|
95
|
+
}
|
|
96
|
+
if (!frozen && required) {
|
|
97
|
+
throw new Error("Zero-rated order completion requires durable frozen tax evidence.");
|
|
98
|
+
}
|
|
99
|
+
return new workflows_sdk_1.StepResponse(frozen?.evidence ?? null, frozen
|
|
100
|
+
? {
|
|
101
|
+
validation_id: frozen.evidence.id,
|
|
102
|
+
previous_order_id: frozen.previousOrderId,
|
|
103
|
+
}
|
|
104
|
+
: null);
|
|
105
|
+
}, async (compensation, { container }) => {
|
|
106
|
+
if (!compensation) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
await (0, resolve_services_1.resolveTaxComplianceService)(container).restoreOrderEvidence(compensation.validation_id, compensation.previous_order_id);
|
|
110
|
+
});
|
|
111
|
+
/**
|
|
112
|
+
* complete-cart `orderCreated` participant, run by @hartl-services/medusa-base:
|
|
113
|
+
* freezes the UID evidence, then sets the apportioned shipping tax from the
|
|
114
|
+
* order's final discounts (the base runs one participant per plugin and hook;
|
|
115
|
+
* the recalculation needs the frozen evidence for a zero-rated order).
|
|
116
|
+
*/
|
|
117
|
+
exports.freezeOrderEvidenceWorkflow = (0, workflows_sdk_1.createWorkflow)({
|
|
118
|
+
name: complete_cart_hooks_1.FREEZE_TAX_COMPLIANCE_ORDER_EVIDENCE_WORKFLOW_ID,
|
|
119
|
+
...complete_cart_hooks_1.ORDER_CREATED_PARTICIPANT_WORKFLOW_OPTIONS,
|
|
120
|
+
}, (input) => {
|
|
121
|
+
const evidence = (0, exports.freezeOrderEvidenceStep)(input);
|
|
122
|
+
(0, apportion_order_shipping_tax_1.apportionOrderShippingTaxStep)(input);
|
|
123
|
+
return new workflows_sdk_1.WorkflowResponse(evidence);
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZXplLW9yZGVyLWV2aWRlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy90YXgtY29tcGxpYW5jZS9mcmVlemUtb3JkZXItZXZpZGVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBSWtDO0FBQ2xDLHFFQUswQztBQUUxQyxrRkFHaUQ7QUFjeEMsaUlBaEJQLHNFQUFnRCxPQWdCTztBQWJ6RCx3RkFBc0Y7QUFDdEYsd0ZBQXNGO0FBS3RGLDRFQUFtRjtBQUNuRixpRkFBOEU7QUFDOUUsd0ZBRzhDO0FBdUI5Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLEtBQUssRUFDL0IsU0FBMEIsRUFDMUIsUUFBNEMsRUFDWCxFQUFFO0lBQ25DLE1BQU0sT0FBTyxHQUFHO1FBQ2QsR0FBRyxJQUFJLEdBQUcsQ0FDUixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzFFO0tBQ0YsQ0FBQTtJQUNELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFBO0lBQ3hELElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVM7YUFDN0IsT0FBTyxDQUFDLGVBQU8sQ0FBQyxHQUFHLENBQUM7YUFDcEIsWUFBWSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM1RCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVB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
|
package/.medusa/server/src/workflows/tax-compliance/submit-customer-address-tax-identification.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.submitCustomerAddressTaxIdentificationWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const tax_runtime_settings_1 = require("../../tax-compliance/lib/tax-runtime-settings");
|
|
6
|
+
const resolve_services_1 = require("../../tax-compliance/resolve-services");
|
|
7
|
+
const validateCustomerAddressTaxIdentificationStep = (0, workflows_sdk_1.createStep)("validate-customer-address-tax-identification", async (input, { container }) => {
|
|
8
|
+
const service = (0, resolve_services_1.resolveTaxComplianceService)(container);
|
|
9
|
+
// Read here, not passed as workflow input, so the credentials never land
|
|
10
|
+
// in the workflow's stored input.
|
|
11
|
+
const credentials = (await service.requiresFinanzOnlineCredentials(input))
|
|
12
|
+
? await (0, tax_runtime_settings_1.resolveFinanzOnlineCredentials)(container)
|
|
13
|
+
: undefined;
|
|
14
|
+
const evidence = await service.validateCustomerAddress(input, credentials);
|
|
15
|
+
return new workflows_sdk_1.StepResponse(evidence);
|
|
16
|
+
});
|
|
17
|
+
exports.submitCustomerAddressTaxIdentificationWorkflow = (0, workflows_sdk_1.createWorkflow)("submit-customer-address-tax-identification", (input) => new workflows_sdk_1.WorkflowResponse(validateCustomerAddressTaxIdentificationStep(input)));
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWN1c3RvbWVyLWFkZHJlc3MtdGF4LWlkZW50aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy90YXgtY29tcGxpYW5jZS9zdWJtaXQtY3VzdG9tZXItYWRkcmVzcy10YXgtaWRlbnRpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBRTFDLHdGQUE4RjtBQUc5Riw0RUFBbUY7QUFFbkYsTUFBTSw0Q0FBNEMsR0FBRyxJQUFBLDBCQUFVLEVBQzdELDhDQUE4QyxFQUM5QyxLQUFLLEVBQ0gsS0FBb0QsRUFDcEQsRUFBRSxTQUFTLEVBQUUsRUFDYixFQUFFO0lBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBQSw4Q0FBMkIsRUFBQyxTQUFTLENBQUMsQ0FBQTtJQUN0RCx5RUFBeUU7SUFDekUsa0NBQWtDO0lBQ2xDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLE1BQU0sSUFBQSxxREFBOEIsRUFBQyxTQUFTLENBQUM7UUFDakQsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNiLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUMxRSxPQUFPLElBQUksNEJBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNuQyxDQUFDLENBQ0YsQ0FBQTtBQUVZLFFBQUEsOENBQThDLEdBQUcsSUFBQSw4QkFBYyxFQUMxRSw0Q0FBNEMsRUFDNUMsQ0FBQyxLQUFvRCxFQUFFLEVBQUUsQ0FDdkQsSUFBSSxnQ0FBZ0IsQ0FDbEIsNENBQTRDLENBQzFDLEtBQUssQ0FDc0MsQ0FDOUMsQ0FDSixDQUFBIn0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.submitTaxIdentificationWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const tax_runtime_settings_1 = require("../../tax-compliance/lib/tax-runtime-settings");
|
|
6
|
+
const resolve_services_1 = require("../../tax-compliance/resolve-services");
|
|
7
|
+
const validateTaxIdentificationStep = (0, workflows_sdk_1.createStep)("validate-cart-tax-identification", async (input, { container }) => {
|
|
8
|
+
const service = (0, resolve_services_1.resolveTaxComplianceService)(container);
|
|
9
|
+
// Read here, not passed as workflow input, so the credentials never land
|
|
10
|
+
// in the workflow's stored input.
|
|
11
|
+
const credentials = (await service.requiresFinanzOnlineCredentials(input))
|
|
12
|
+
? await (0, tax_runtime_settings_1.resolveFinanzOnlineCredentials)(container)
|
|
13
|
+
: undefined;
|
|
14
|
+
const evidence = await service.validateCart(input, credentials);
|
|
15
|
+
return new workflows_sdk_1.StepResponse(evidence);
|
|
16
|
+
});
|
|
17
|
+
exports.submitTaxIdentificationWorkflow = (0, workflows_sdk_1.createWorkflow)("submit-cart-tax-identification", (input) => new workflows_sdk_1.WorkflowResponse(validateTaxIdentificationStep(input)));
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LXRheC1pZGVudGlmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvdGF4LWNvbXBsaWFuY2Uvc3VibWl0LXRheC1pZGVudGlmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFLMEM7QUFFMUMsd0ZBQThGO0FBRzlGLDRFQUFtRjtBQUVuRixNQUFNLDZCQUE2QixHQUFHLElBQUEsMEJBQVUsRUFDOUMsa0NBQWtDLEVBQ2xDLEtBQUssRUFBRSxLQUF5QyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFBLDhDQUEyQixFQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3RELHlFQUF5RTtJQUN6RSxrQ0FBa0M7SUFDbEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsTUFBTSxJQUFBLHFEQUE4QixFQUFDLFNBQVMsQ0FBQztRQUNqRCxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2IsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUMvRCxPQUFPLElBQUksNEJBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNuQyxDQUFDLENBQ0YsQ0FBQTtBQUVZLFFBQUEsK0JBQStCLEdBQUcsSUFBQSw4QkFBYyxFQUMzRCxnQ0FBZ0MsRUFDaEMsQ0FBQyxLQUF5QyxFQUFFLEVBQUUsQ0FDNUMsSUFBSSxnQ0FBZ0IsQ0FDbEIsNkJBQTZCLENBQUMsS0FBSyxDQUE2QyxDQUNqRixDQUNKLENBQUEifQ==
|