@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,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
+
const lib_1 = require("../../../../../shared/lib");
|
|
7
|
+
const tax_compliance_1 = require("@hartl-services/medusa-food-supplements-contracts/paths/tax-compliance");
|
|
8
|
+
const tax_runtime_settings_1 = require("../../../../../tax-compliance/lib/tax-runtime-settings");
|
|
9
|
+
const validation_policy_1 = require("../../../../../modules/tax-compliance/domain/validation-policy");
|
|
10
|
+
const service_1 = require("../../../../../modules/tax-compliance/service");
|
|
11
|
+
const resolve_services_1 = require("../../../../../tax-compliance/resolve-services");
|
|
12
|
+
const tax_identification_message_1 = require("../../../../tax-identification-message");
|
|
13
|
+
const to_response_amount_1 = require("../../../../to-response-amount");
|
|
14
|
+
const submit_tax_identification_1 = require("../../../../../workflows/tax-compliance/submit-tax-identification");
|
|
15
|
+
const cartFields = [
|
|
16
|
+
"id",
|
|
17
|
+
"currency_code",
|
|
18
|
+
"sales_channel_id",
|
|
19
|
+
"subtotal",
|
|
20
|
+
"discount_total",
|
|
21
|
+
"shipping_total",
|
|
22
|
+
"tax_total",
|
|
23
|
+
"total",
|
|
24
|
+
"billing_address.*",
|
|
25
|
+
"shipping_address.*",
|
|
26
|
+
"items.*",
|
|
27
|
+
"items.tax_lines.*",
|
|
28
|
+
"items.adjustments.*",
|
|
29
|
+
"shipping_methods.*",
|
|
30
|
+
"shipping_methods.tax_lines.*",
|
|
31
|
+
"shipping_methods.adjustments.*",
|
|
32
|
+
"payment_collection.id",
|
|
33
|
+
];
|
|
34
|
+
const requireCompleteAddress = (address, label) => {
|
|
35
|
+
if (!address?.address_1?.trim() ||
|
|
36
|
+
!address.city?.trim() ||
|
|
37
|
+
!address.country_code?.trim() ||
|
|
38
|
+
!address.postal_code?.trim()) {
|
|
39
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `${label} address is incomplete.`);
|
|
40
|
+
}
|
|
41
|
+
return address;
|
|
42
|
+
};
|
|
43
|
+
const loadStoreCart = async (id, scope, allowedSalesChannelIds) => {
|
|
44
|
+
const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
45
|
+
const { data } = await query.graph({
|
|
46
|
+
entity: "cart",
|
|
47
|
+
fields: cartFields,
|
|
48
|
+
filters: { id },
|
|
49
|
+
});
|
|
50
|
+
const cart = data[0];
|
|
51
|
+
if (!cart || !allowedSalesChannelIds.includes(cart.sales_channel_id)) {
|
|
52
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Cart with id '${id}' not found.`);
|
|
53
|
+
}
|
|
54
|
+
return cart;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Checks the UID of the cart's billing address (company and
|
|
58
|
+
* `metadata.vat_number`) and recomputes the cart's tax. Without a UID the cart
|
|
59
|
+
* is taxed ordinarily: an exemption from an earlier check falls away. The
|
|
60
|
+
* deprecated body (`company_name` + `vat_number`) is written into the billing
|
|
61
|
+
* address first.
|
|
62
|
+
*/
|
|
63
|
+
const POST = async (req, res) => {
|
|
64
|
+
const allowedSalesChannelIds = req.publishable_key_context.sales_channel_ids ?? [];
|
|
65
|
+
const initialCart = await loadStoreCart(req.params.id, req.scope, allowedSalesChannelIds);
|
|
66
|
+
const { company_name: legacyCompanyName, vat_number: legacyVatNumber } = req.validatedBody;
|
|
67
|
+
if (legacyCompanyName && legacyVatNumber) {
|
|
68
|
+
const billingAddress = requireCompleteAddress(initialCart.billing_address, "Billing");
|
|
69
|
+
requireCompleteAddress(initialCart.shipping_address, "Shipping");
|
|
70
|
+
const vatMetadata = {
|
|
71
|
+
[tax_compliance_1.TAX_IDENTIFICATION_METADATA_KEY]: legacyVatNumber.replace(/\s+/g, ""),
|
|
72
|
+
};
|
|
73
|
+
await (0, core_flows_1.updateCartWorkflow)(req.scope).run({
|
|
74
|
+
input: {
|
|
75
|
+
id: initialCart.id,
|
|
76
|
+
billing_address: billingAddress.id
|
|
77
|
+
? {
|
|
78
|
+
id: billingAddress.id,
|
|
79
|
+
company: legacyCompanyName,
|
|
80
|
+
metadata: vatMetadata,
|
|
81
|
+
}
|
|
82
|
+
: {
|
|
83
|
+
address_1: billingAddress.address_1,
|
|
84
|
+
city: billingAddress.city,
|
|
85
|
+
company: legacyCompanyName,
|
|
86
|
+
country_code: billingAddress.country_code,
|
|
87
|
+
postal_code: billingAddress.postal_code,
|
|
88
|
+
metadata: vatMetadata,
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const currentCart = await loadStoreCart(req.params.id, req.scope, allowedSalesChannelIds);
|
|
94
|
+
const vatNumber = (0, service_1.readAddressVatNumber)(currentCart.billing_address?.metadata);
|
|
95
|
+
let status = null;
|
|
96
|
+
const merchant = vatNumber
|
|
97
|
+
? await (0, tax_runtime_settings_1.resolveMerchantProfile)(req.scope, {
|
|
98
|
+
failSafe: true,
|
|
99
|
+
subject: "tax identification",
|
|
100
|
+
})
|
|
101
|
+
: null;
|
|
102
|
+
if (vatNumber && !merchant) {
|
|
103
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Tax compliance merchant configuration is unavailable.");
|
|
104
|
+
}
|
|
105
|
+
// A domestic company is an ordinary purchase: no check, no status, and an
|
|
106
|
+
// exemption from an earlier foreign address falls away below.
|
|
107
|
+
const checksVatNumber = vatNumber &&
|
|
108
|
+
merchant &&
|
|
109
|
+
!(0, validation_policy_1.isDomesticCompany)(currentCart.billing_address?.country_code ?? "", merchant.countryCode);
|
|
110
|
+
if (checksVatNumber && merchant) {
|
|
111
|
+
const billingAddress = requireCompleteAddress(currentCart.billing_address, "Billing");
|
|
112
|
+
const shippingAddress = requireCompleteAddress(currentCart.shipping_address, "Shipping");
|
|
113
|
+
const companyName = billingAddress.company?.trim();
|
|
114
|
+
if (!companyName) {
|
|
115
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Billing address needs a company for its VAT number.");
|
|
116
|
+
}
|
|
117
|
+
const { result: evidence } = await (0, submit_tax_identification_1.submitTaxIdentificationWorkflow)(req.scope).run({
|
|
118
|
+
input: {
|
|
119
|
+
cart_id: currentCart.id,
|
|
120
|
+
company_name: companyName,
|
|
121
|
+
customer_vat_number: vatNumber,
|
|
122
|
+
billing_address: {
|
|
123
|
+
address1: billingAddress.address_1,
|
|
124
|
+
address2: billingAddress.address_2,
|
|
125
|
+
city: billingAddress.city,
|
|
126
|
+
countryCode: billingAddress.country_code,
|
|
127
|
+
postalCode: billingAddress.postal_code,
|
|
128
|
+
},
|
|
129
|
+
delivery_country_code: shippingAddress.country_code,
|
|
130
|
+
merchant_country_code: merchant.countryCode,
|
|
131
|
+
merchant_vat_number: merchant.vatNumber,
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
status = evidence.status;
|
|
135
|
+
}
|
|
136
|
+
// Medusa recomputes taxes only when the shipping address changes, not when
|
|
137
|
+
// the billing company or UID does. Without a UID to check only a cart checked before
|
|
138
|
+
// can still carry an exemption, so ordinary carts skip the recomputation.
|
|
139
|
+
if (checksVatNumber ||
|
|
140
|
+
(await (0, resolve_services_1.resolveTaxComplianceService)(req.scope).hasCurrentCartEvidence(currentCart.id))) {
|
|
141
|
+
await (0, core_flows_1.updateTaxLinesWorkflow)(req.scope).run({
|
|
142
|
+
input: {
|
|
143
|
+
cart_id: currentCart.id,
|
|
144
|
+
force_tax_calculation: true,
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
// The recomputed tax lines change the cart total, but only a cart
|
|
148
|
+
// workflow reconciles the payment collection. Without this, a payment
|
|
149
|
+
// session opened on the B2C total keeps charging it after zero-rating
|
|
150
|
+
// (and vice versa). Medusa leaves the sessions alone while the amount is
|
|
151
|
+
// unchanged; otherwise the storefront re-initiates payment afterwards.
|
|
152
|
+
// Guarded because the workflow expects a collection.
|
|
153
|
+
if (currentCart.payment_collection?.id) {
|
|
154
|
+
await (0, core_flows_1.refreshPaymentCollectionForCartWorkflow)(req.scope).run({
|
|
155
|
+
input: { cart_id: currentCart.id },
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const cart = await loadStoreCart(req.params.id, req.scope, allowedSalesChannelIds);
|
|
160
|
+
// The change is already done: an unreadable total is logged and sent as 0
|
|
161
|
+
// instead of failing the request.
|
|
162
|
+
const logger = (0, lib_1.resolveOptionalLogger)(req.scope);
|
|
163
|
+
const toAmount = (field, value) => (0, to_response_amount_1.toResponseAmount)(value, () => logger?.warn(`Tax identification: cart ${cart.id} total "${field}" is not a number; sending 0.`));
|
|
164
|
+
res.status(200).json({
|
|
165
|
+
status,
|
|
166
|
+
message: status ? (0, tax_identification_message_1.taxIdentificationMessageFor)(status) : null,
|
|
167
|
+
cart: {
|
|
168
|
+
id: cart.id,
|
|
169
|
+
currency_code: cart.currency_code,
|
|
170
|
+
subtotal: toAmount("subtotal", cart.subtotal),
|
|
171
|
+
discount_total: toAmount("discount_total", cart.discount_total),
|
|
172
|
+
shipping_total: toAmount("shipping_total", cart.shipping_total),
|
|
173
|
+
tax_total: toAmount("tax_total", cart.tax_total),
|
|
174
|
+
total: toAmount("total", cart.total),
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
exports.POST = POST;
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhcnRzL1tpZF0vdGF4LWlkZW50aWZpY2F0aW9uL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUdrQztBQUVsQyw0REFJb0M7QUFFcEMsbURBQWlFO0FBQ2pFLDJHQUF3SDtBQUl4SCxpR0FBK0Y7QUFDL0Ysc0dBQWtHO0FBQ2xHLDJFQUFvRjtBQUNwRixxRkFBNEY7QUFDNUYsdUZBQW9GO0FBQ3BGLHVFQUFpRTtBQUVqRSxpSEFBbUg7QUFtQ25ILE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUk7SUFDSixlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLFdBQVc7SUFDWCxPQUFPO0lBQ1AsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixTQUFTO0lBQ1QsbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsOEJBQThCO0lBQzlCLGdDQUFnQztJQUNoQyx1QkFBdUI7Q0FDeEIsQ0FBQTtBQUVELE1BQU0sc0JBQXNCLEdBQUcsQ0FDN0IsT0FBdUMsRUFDdkMsS0FBYSxFQU1iLEVBQUU7SUFDRixJQUNFLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7UUFDM0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtRQUNyQixDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFO1FBQzdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFDNUIsQ0FBQztRQUNELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLEdBQUcsS0FBSyx5QkFBeUIsQ0FDbEMsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLE9BS04sQ0FBQTtBQUNILENBQUMsQ0FBQTtBQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssRUFDekIsRUFBVSxFQUNWLEtBQWtDLEVBQ2xDLHNCQUFnQyxFQUNBLEVBQUU7SUFDbEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1RCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLFVBQVU7UUFDbEIsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFO0tBQ2hCLENBQUMsQ0FBQTtJQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQXNDLENBQUE7SUFDekQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLGlCQUFpQixFQUFFLGNBQWMsQ0FDbEMsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMsQ0FBQTtBQUdEOzs7Ozs7R0FNRztBQUNJLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBb0QsRUFDcEQsR0FBb0QsRUFDckMsRUFBRTtJQUNqQixNQUFNLHNCQUFzQixHQUMxQixHQUFHLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFBO0lBQ3JELE1BQU0sV0FBVyxHQUFHLE1BQU0sYUFBYSxDQUNyQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFDYixHQUFHLENBQUMsS0FBSyxFQUNULHNCQUFzQixDQUN2QixDQUFBO0lBQ0QsTUFBTSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLEdBQ3BFLEdBQUcsQ0FBQyxhQUFhLENBQUE7SUFFbkIsSUFBSSxpQkFBaUIsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FDM0MsV0FBVyxDQUFDLGVBQWUsRUFDM0IsU0FBUyxDQUNWLENBQUE7UUFDRCxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDaEUsTUFBTSxXQUFXLEdBQUc7WUFDbEIsQ0FBQyxnREFBK0IsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztTQUN2RSxDQUFBO1FBRUQsTUFBTSxJQUFBLCtCQUFrQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDdEMsS0FBSyxFQUFFO2dCQUNMLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRTtnQkFDbEIsZUFBZSxFQUFFLGNBQWMsQ0FBQyxFQUFFO29CQUNoQyxDQUFDLENBQUM7d0JBQ0UsRUFBRSxFQUFFLGNBQWMsQ0FBQyxFQUFFO3dCQUNyQixPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixRQUFRLEVBQUUsV0FBVztxQkFDdEI7b0JBQ0gsQ0FBQyxDQUFDO3dCQUNFLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUzt3QkFDbkMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO3dCQUN6QixPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixZQUFZLEVBQUUsY0FBYyxDQUFDLFlBQVk7d0JBQ3pDLFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVzt3QkFDdkMsUUFBUSxFQUFFLFdBQVc7cUJBQ3RCO2FBQ047U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxhQUFhLENBQ3JDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUNiLEdBQUcsQ0FBQyxLQUFLLEVBQ1Qsc0JBQXNCLENBQ3ZCLENBQUE7SUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFBLDhCQUFvQixFQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDN0UsSUFBSSxNQUFNLEdBQStCLElBQUksQ0FBQTtJQUU3QyxNQUFNLFFBQVEsR0FBRyxTQUFTO1FBQ3hCLENBQUMsQ0FBQyxNQUFNLElBQUEsNkNBQXNCLEVBQUMsR0FBRyxDQUFDLEtBQUssRUFBRTtZQUN0QyxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxvQkFBb0I7U0FDOUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDUixJQUFJLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsdURBQXVELENBQ3hELENBQUE7SUFDSCxDQUFDO0lBQ0QsMEVBQTBFO0lBQzFFLDhEQUE4RDtJQUM5RCxNQUFNLGVBQWUsR0FDbkIsU0FBUztRQUNULFFBQVE7UUFDUixDQUFDLElBQUEscUNBQWlCLEVBQ2hCLFdBQVcsQ0FBQyxlQUFlLEVBQUUsWUFBWSxJQUFJLEVBQUUsRUFDL0MsUUFBUSxDQUFDLFdBQVcsQ0FDckIsQ0FBQTtJQUVILElBQUksZUFBZSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLHNCQUFzQixDQUMzQyxXQUFXLENBQUMsZUFBZSxFQUMzQixTQUFTLENBQ1YsQ0FBQTtRQUNELE1BQU0sZUFBZSxHQUFHLHNCQUFzQixDQUM1QyxXQUFXLENBQUMsZ0JBQWdCLEVBQzVCLFVBQVUsQ0FDWCxDQUFBO1FBQ0QsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUNsRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscURBQXFELENBQ3RELENBQUE7UUFDSCxDQUFDO1FBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUEsMkRBQStCLEVBQ2hFLEdBQUcsQ0FBQyxLQUFLLENBQ1YsQ0FBQyxHQUFHLENBQUM7WUFDSixLQUFLLEVBQUU7Z0JBQ0wsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFO2dCQUN2QixZQUFZLEVBQUUsV0FBVztnQkFDekIsbUJBQW1CLEVBQUUsU0FBUztnQkFDOUIsZUFBZSxFQUFFO29CQUNmLFFBQVEsRUFBRSxjQUFjLENBQUMsU0FBUztvQkFDbEMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxTQUFTO29CQUNsQyxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUk7b0JBQ3pCLFdBQVcsRUFBRSxjQUFjLENBQUMsWUFBWTtvQkFDeEMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxXQUFXO2lCQUN2QztnQkFDRCxxQkFBcUIsRUFBRSxlQUFlLENBQUMsWUFBWTtnQkFDbkQscUJBQXFCLEVBQUUsUUFBUSxDQUFDLFdBQVc7Z0JBQzNDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxTQUFTO2FBQ3hDO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUE2QixDQUFBO0lBQ2pELENBQUM7SUFFRCwyRUFBMkU7SUFDM0UscUZBQXFGO0lBQ3JGLDBFQUEwRTtJQUMxRSxJQUNFLGVBQWU7UUFDZixDQUFDLE1BQU0sSUFBQSw4Q0FBMkIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsc0JBQXNCLENBQ2xFLFdBQVcsQ0FBQyxFQUFFLENBQ2YsQ0FBQyxFQUNGLENBQUM7UUFDRCxNQUFNLElBQUEsbUNBQXNCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMxQyxLQUFLLEVBQUU7Z0JBQ0wsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFO2dCQUN2QixxQkFBcUIsRUFBRSxJQUFJO2FBQzVCO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsa0VBQWtFO1FBQ2xFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxxREFBcUQ7UUFDckQsSUFBSSxXQUFXLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFBLG9EQUF1QyxFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQzNELEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO2FBQ25DLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxhQUFhLENBQzlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUNiLEdBQUcsQ0FBQyxLQUFLLEVBQ1Qsc0JBQXNCLENBQ3ZCLENBQUE7SUFFRCwwRUFBMEU7SUFDMUUsa0NBQWtDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUEsMkJBQXFCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQy9DLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBYSxFQUFFLEtBQWMsRUFBVSxFQUFFLENBQ3pELElBQUEscUNBQWdCLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUMzQixNQUFNLEVBQUUsSUFBSSxDQUNWLDRCQUE0QixJQUFJLENBQUMsRUFBRSxXQUFXLEtBQUssK0JBQStCLENBQ25GLENBQ0YsQ0FBQTtJQUVILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25CLE1BQU07UUFDTixPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLHdEQUEyQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQzVELElBQUksRUFBRTtZQUNKLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdDLGNBQWMsRUFBRSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMvRCxjQUFjLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDL0QsU0FBUyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNoRCxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ3JDO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBNUtZLFFBQUEsSUFBSSxRQTRLaEIifQ==
|
package/.medusa/server/src/api/store/customers/me/addresses/[address_id]/tax-identification/route.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = void 0;
|
|
4
|
+
const check_customer_address_tax_identification_1 = require("../../../../../../check-customer-address-tax-identification");
|
|
5
|
+
/** Checks the UID of one of the logged-in customer's saved addresses. */
|
|
6
|
+
const POST = async (req, res) => {
|
|
7
|
+
res
|
|
8
|
+
.status(200)
|
|
9
|
+
.json(await (0, check_customer_address_tax_identification_1.checkCustomerAddressTaxIdentification)(req.scope, req.params.address_id, req.auth_context.actor_id));
|
|
10
|
+
};
|
|
11
|
+
exports.POST = POST;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9hZGRyZXNzZXMvW2FkZHJlc3NfaWRdL3RheC1pZGVudGlmaWNhdGlvbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSwySEFBbUg7QUFFbkgseUVBQXlFO0FBQ2xFLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBK0IsRUFDL0IsR0FBbUUsRUFDcEQsRUFBRTtJQUNqQixHQUFHO1NBQ0EsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNYLElBQUksQ0FDSCxNQUFNLElBQUEsaUZBQXFDLEVBQ3pDLEdBQUcsQ0FBQyxLQUFLLEVBQ1QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQ3JCLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUMxQixDQUNGLENBQUE7QUFDTCxDQUFDLENBQUE7QUFiWSxRQUFBLElBQUksUUFhaEIifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const resolve_services_1 = require("../../../../../tax-compliance/resolve-services");
|
|
5
|
+
const customer_address_identification_response_1 = require("../../../../customer-address-identification-response");
|
|
6
|
+
/** Check result of each saved address of the logged-in customer that still matches it. */
|
|
7
|
+
const GET = async (req, res) => {
|
|
8
|
+
const identifications = await (0, resolve_services_1.resolveTaxComplianceService)(req.scope).listCustomerAddressIdentifications(req.auth_context.actor_id);
|
|
9
|
+
res.status(200).json({
|
|
10
|
+
identifications: identifications.map(customer_address_identification_response_1.toCustomerAddressTaxIdentificationWire),
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
exports.GET = GET;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS90YXgtaWRlbnRpZmljYXRpb25zL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLHFGQUE0RjtBQUM1RixtSEFBNkc7QUFFN0csMEZBQTBGO0FBQ25GLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBMkQsRUFDNUMsRUFBRTtJQUNqQixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUEsOENBQTJCLEVBQ3ZELEdBQUcsQ0FBQyxLQUFLLENBQ1YsQ0FBQyxrQ0FBa0MsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRS9ELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25CLGVBQWUsRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLGlGQUFzQyxDQUFDO0tBQzdFLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQVhZLFFBQUEsR0FBRyxPQVdmIn0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const tax_runtime_settings_1 = require("../../../tax-compliance/lib/tax-runtime-settings");
|
|
5
|
+
/**
|
|
6
|
+
* The merchant country from the shop master data: a company there is never
|
|
7
|
+
* checked (see the cart tax-identification route), so a storefront asks for
|
|
8
|
+
* a UID only for other countries. Unreadable or unset master data answer
|
|
9
|
+
* `null`, and the storefront then asks everywhere.
|
|
10
|
+
*/
|
|
11
|
+
const GET = async (req, res) => {
|
|
12
|
+
const merchant = await (0, tax_runtime_settings_1.resolveMerchantProfile)(req.scope, {
|
|
13
|
+
failSafe: true,
|
|
14
|
+
subject: "the tax identification policy",
|
|
15
|
+
});
|
|
16
|
+
res.status(200).json({
|
|
17
|
+
merchant_country_code: merchant?.countryCode ?? null,
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
exports.GET = GET;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3RheC1pZGVudGlmaWNhdGlvbi1wb2xpY3kvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EsMkZBQXlGO0FBRXpGOzs7OztHQUtHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUF1QixFQUN2QixHQUF1RCxFQUN4QyxFQUFFO0lBQ2pCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSw2Q0FBc0IsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFO1FBQ3ZELFFBQVEsRUFBRSxJQUFJO1FBQ2QsT0FBTyxFQUFFLCtCQUErQjtLQUN6QyxDQUFDLENBQUE7SUFFRixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuQixxQkFBcUIsRUFBRSxRQUFRLEVBQUUsV0FBVyxJQUFJLElBQUk7S0FDckQsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBWlksUUFBQSxHQUFHLE9BWWYifQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.taxIdentificationMessageFor = void 0;
|
|
4
|
+
/** The only public message: shown when no qualified answer could be obtained. */
|
|
5
|
+
const taxIdentificationMessageFor = (status) => status === "unavailable"
|
|
6
|
+
? "Die UID-Prüfung ist derzeit nicht verfügbar. Bitte versuchen Sie es später erneut."
|
|
7
|
+
: null;
|
|
8
|
+
exports.taxIdentificationMessageFor = taxIdentificationMessageFor;
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4LWlkZW50aWZpY2F0aW9uLW1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3RheC1pZGVudGlmaWNhdGlvbi1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGlGQUFpRjtBQUMxRSxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLE1BQTJCLEVBQ1osRUFBRSxDQUNqQixNQUFNLEtBQUssYUFBYTtJQUN0QixDQUFDLENBQUMsb0ZBQW9GO0lBQ3RGLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFMRyxRQUFBLDJCQUEyQiwrQkFLOUIifQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toResponseAmount = void 0;
|
|
4
|
+
const lib_1 = require("../shared/lib");
|
|
5
|
+
/**
|
|
6
|
+
* A cart total for a response that is sent after the change already happened:
|
|
7
|
+
* an unreadable value is reported through `onInvalid` and sent as 0 instead of
|
|
8
|
+
* failing the request.
|
|
9
|
+
*/
|
|
10
|
+
const toResponseAmount = (value, onInvalid) => {
|
|
11
|
+
const amount = (0, lib_1.toNumericAmount)(value);
|
|
12
|
+
if (amount === null) {
|
|
13
|
+
onInvalid();
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
return amount;
|
|
17
|
+
};
|
|
18
|
+
exports.toResponseAmount = toResponseAmount;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tcmVzcG9uc2UtYW1vdW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS90by1yZXNwb25zZS1hbW91bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQStDO0FBRS9DOzs7O0dBSUc7QUFDSSxNQUFNLGdCQUFnQixHQUFHLENBQzlCLEtBQWMsRUFDZCxTQUFxQixFQUNiLEVBQUU7SUFDVixNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFlLEVBQUMsS0FBSyxDQUFDLENBQUE7SUFDckMsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEIsU0FBUyxFQUFFLENBQUE7UUFDWCxPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMsQ0FBQTtBQVZZLFFBQUEsZ0JBQWdCLG9CQVU1QiJ9
|
|
@@ -45,8 +45,6 @@ const failClaim = async (email, claim, code, now, notificationId = null) => {
|
|
|
45
45
|
* the content to the notification module and records the outcome on the
|
|
46
46
|
* attempt. The message stores no template data of the secret, the notification
|
|
47
47
|
* record keeps only ids, and nothing here is logged.
|
|
48
|
-
*
|
|
49
|
-
* Customer mails only (`resource_type` "customer").
|
|
50
48
|
*/
|
|
51
49
|
const deliverEphemeralAuthMail = async ({ claim, container, email, expiresAt, getNow, kind, maxAttempts, render, retryDelayMs, triggerType, }) => {
|
|
52
50
|
// A stored template never fails the mail: it falls back to the default.
|
|
@@ -104,7 +102,7 @@ const deliverEphemeralAuthMail = async ({ claim, container, email, expiresAt, ge
|
|
|
104
102
|
...(claim.message.resource_id
|
|
105
103
|
? { resource_id: claim.message.resource_id }
|
|
106
104
|
: {}),
|
|
107
|
-
resource_type:
|
|
105
|
+
resource_type: claim.message.resource_type,
|
|
108
106
|
template: claim.message.kind,
|
|
109
107
|
to: claim.message.recipient,
|
|
110
108
|
trigger_type: triggerType,
|
|
@@ -183,4 +181,4 @@ const deliverEphemeralAuthMail = async ({ claim, container, email, expiresAt, ge
|
|
|
183
181
|
};
|
|
184
182
|
};
|
|
185
183
|
exports.deliverEphemeralAuthMail = deliverEphemeralAuthMail;
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsaXZlci1lcGhlbWVyYWwtYXV0aC1tYWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VtYWlsL2FwcGxpY2F0aW9uL2RlbGl2ZXItZXBoZW1lcmFsLWF1dGgtbWFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFBb0Q7QUFFcEQsNkVBRzBDO0FBRzFDLGtGQUE0RTtBQUU1RSw4REFBK0Q7QUFPL0QseUZBQXVGO0FBK0N2RixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBYyxFQUE2QixFQUFFO0lBQ3pFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBZ0MsQ0FBQztJQUNoRCxJQUNFLE9BQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxRQUFRO1FBQzdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFDakIsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFDMUIsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQzNCLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLEVBQzlCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsRCxDQUFDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQ3JCLEtBQXlCLEVBQ3pCLEtBQXdCLEVBQ3hCLElBQVksRUFDWixHQUFTLEVBQ1QsaUJBQWdDLElBQUksRUFDRCxFQUFFO0lBQ3JDLE1BQU0sU0FBUyxHQUFHLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQzlDLFVBQVUsRUFBRSxLQUFLLENBQUMsT0FB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
|
|
@@ -18,7 +18,7 @@ exports.PASSWORD_RESET_RETRY_SENTINEL = "EMAIL_PASSWORD_RESET_RETRY";
|
|
|
18
18
|
const emailAddressPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
19
19
|
const PasswordResetClaimsSchema = zod_1.z
|
|
20
20
|
.object({
|
|
21
|
-
actor_type: zod_1.z.
|
|
21
|
+
actor_type: zod_1.z.enum(["customer", "user"]),
|
|
22
22
|
entity_id: zod_1.z.string().trim().min(1),
|
|
23
23
|
exp: zod_1.z.number().int().positive(),
|
|
24
24
|
jti: zod_1.z.string().trim().min(1),
|
|
@@ -57,6 +57,43 @@ const verifyClaims = (token, secret, entityId) => {
|
|
|
57
57
|
}
|
|
58
58
|
return parsed.data;
|
|
59
59
|
};
|
|
60
|
+
const exactMatchId = (matches, email) => {
|
|
61
|
+
const exact = matches.filter((match) => match.email?.trim().toLowerCase() === email.toLowerCase());
|
|
62
|
+
return exact.length === 1 ? exact[0].id : null;
|
|
63
|
+
};
|
|
64
|
+
const RESET_ACTORS = {
|
|
65
|
+
customer: {
|
|
66
|
+
kind: "auth.password_reset",
|
|
67
|
+
resourceType: "customer",
|
|
68
|
+
resolveResourceId: async (container, email) => {
|
|
69
|
+
const customers = container.resolve(utils_1.Modules.CUSTOMER);
|
|
70
|
+
return exactMatchId(await customers.listCustomers({ email }, { select: ["id", "email"], take: 2 }), email);
|
|
71
|
+
},
|
|
72
|
+
requiresResource: false,
|
|
73
|
+
resetUrl: (configuration, token, locale) => {
|
|
74
|
+
const url = new URL(configuration.passwordResetUrl({ locale }));
|
|
75
|
+
url.hash = new URLSearchParams({ token }).toString();
|
|
76
|
+
return url.toString();
|
|
77
|
+
},
|
|
78
|
+
triggerType: "email.password_reset.dispatch",
|
|
79
|
+
},
|
|
80
|
+
user: {
|
|
81
|
+
kind: "auth.admin_password_reset",
|
|
82
|
+
resourceType: "user",
|
|
83
|
+
resolveResourceId: async (container, email) => {
|
|
84
|
+
const users = container.resolve(utils_1.Modules.USER);
|
|
85
|
+
return exactMatchId(await users.listUsers({ email }, { select: ["id", "email"], take: 2 }), email);
|
|
86
|
+
},
|
|
87
|
+
requiresResource: true,
|
|
88
|
+
resetUrl: (configuration, token) => {
|
|
89
|
+
if (!configuration.adminPasswordResetUrl) {
|
|
90
|
+
throw new Error("adminPasswordResetUrl is not configured.");
|
|
91
|
+
}
|
|
92
|
+
return configuration.adminPasswordResetUrl({ token });
|
|
93
|
+
},
|
|
94
|
+
triggerType: "email.admin_password_reset.dispatch",
|
|
95
|
+
},
|
|
96
|
+
};
|
|
60
97
|
const localeFromMetadata = (metadata) => {
|
|
61
98
|
const locale = metadata.locale;
|
|
62
99
|
return typeof locale === "string" &&
|
|
@@ -65,12 +102,6 @@ const localeFromMetadata = (metadata) => {
|
|
|
65
102
|
? locale.trim()
|
|
66
103
|
: null;
|
|
67
104
|
};
|
|
68
|
-
const resolveCustomerId = async (container, email) => {
|
|
69
|
-
const customers = container.resolve(utils_1.Modules.CUSTOMER);
|
|
70
|
-
const matches = await customers.listCustomers({ email }, { select: ["id", "email"], take: 2 });
|
|
71
|
-
const exact = matches.filter((customer) => customer.email?.trim().toLowerCase() === email.toLowerCase());
|
|
72
|
-
return exact.length === 1 ? exact[0].id : null;
|
|
73
|
-
};
|
|
74
105
|
const reconcileSendingMessage = async (container, email, message, now) => {
|
|
75
106
|
const attempts = await email.listEmailAttempts({ message_id: message.id });
|
|
76
107
|
const current = [...attempts]
|
|
@@ -110,32 +141,39 @@ const reconcileSendingMessage = async (container, email, message, now) => {
|
|
|
110
141
|
}
|
|
111
142
|
return retry();
|
|
112
143
|
};
|
|
113
|
-
const deliverPasswordReset = async (container, email, claim, token, expiresAt, validMinutes, getNow) => {
|
|
144
|
+
const deliverPasswordReset = async (container, email, actor, claim, token, expiresAt, validMinutes, getNow) => {
|
|
114
145
|
const outcome = await (0, deliver_ephemeral_auth_mail_1.deliverEphemeralAuthMail)({
|
|
115
146
|
claim,
|
|
116
147
|
container,
|
|
117
148
|
email,
|
|
118
149
|
expiresAt,
|
|
119
150
|
getNow,
|
|
120
|
-
kind:
|
|
151
|
+
kind: actor.kind,
|
|
121
152
|
maxAttempts: exports.PASSWORD_RESET_MAX_ATTEMPTS,
|
|
122
153
|
render: ({ configuration, shop, template }) => {
|
|
154
|
+
const validity = validMinutes ? { valid_minutes: validMinutes } : {};
|
|
155
|
+
if (actor.kind === "auth.admin_password_reset") {
|
|
156
|
+
return (0, render_email_1.renderEmail)(configuration, {
|
|
157
|
+
kind: "auth.admin_password_reset",
|
|
158
|
+
data: {
|
|
159
|
+
reset_url: actor.resetUrl(configuration, token, null),
|
|
160
|
+
...validity,
|
|
161
|
+
},
|
|
162
|
+
}, shop, template);
|
|
163
|
+
}
|
|
123
164
|
const resetData = claim.message.template_data;
|
|
124
|
-
const
|
|
125
|
-
locale: resetData?.locale ?? null,
|
|
126
|
-
}));
|
|
127
|
-
resetUrl.hash = new URLSearchParams({ token }).toString();
|
|
165
|
+
const locale = resetData?.locale ?? null;
|
|
128
166
|
return (0, render_email_1.renderEmail)(configuration, {
|
|
129
167
|
kind: "auth.password_reset",
|
|
130
168
|
data: {
|
|
131
|
-
locale
|
|
132
|
-
reset_url: resetUrl
|
|
133
|
-
...
|
|
169
|
+
locale,
|
|
170
|
+
reset_url: actor.resetUrl(configuration, token, locale),
|
|
171
|
+
...validity,
|
|
134
172
|
},
|
|
135
173
|
}, shop, template);
|
|
136
174
|
},
|
|
137
175
|
retryDelayMs: 1_000,
|
|
138
|
-
triggerType:
|
|
176
|
+
triggerType: actor.triggerType,
|
|
139
177
|
});
|
|
140
178
|
return outcome.kind === "retry" ? retry() : outcome.result;
|
|
141
179
|
};
|
|
@@ -151,22 +189,31 @@ const tokenValidMinutes = (claims) => {
|
|
|
151
189
|
const handleVerifiedPasswordReset = async (container, event, claims, getNow) => {
|
|
152
190
|
const now = getNow();
|
|
153
191
|
const expiresAt = new Date(claims.exp * 1_000);
|
|
192
|
+
const actor = RESET_ACTORS[claims.actor_type];
|
|
154
193
|
const email = container.resolve(email_1.EMAIL_MODULE);
|
|
155
194
|
const businessKey = (0, business_keys_1.passwordResetBusinessKey)(event.token);
|
|
156
195
|
let message = await email.findMessageByBusinessKey(businessKey);
|
|
157
196
|
if (!message) {
|
|
158
|
-
const
|
|
197
|
+
const expired = expiresAt.getTime() <= now.getTime();
|
|
198
|
+
const resourceId = expired && !actor.requiresResource
|
|
159
199
|
? null
|
|
160
|
-
: await
|
|
200
|
+
: await actor.resolveResourceId(container, event.entity_id);
|
|
201
|
+
// The shared emailpass identity lets anyone with a customer account ask
|
|
202
|
+
// for an Admin reset; only an actual Admin user gets that mail.
|
|
203
|
+
if (actor.requiresResource && !resourceId) {
|
|
204
|
+
return { code: "no_admin_user", status: "ignored" };
|
|
205
|
+
}
|
|
161
206
|
message = await email.upsertMessageFact({
|
|
162
|
-
kind:
|
|
207
|
+
kind: actor.kind,
|
|
163
208
|
business_key: businessKey,
|
|
164
|
-
resource_type:
|
|
165
|
-
resource_id:
|
|
209
|
+
resource_type: actor.resourceType,
|
|
210
|
+
resource_id: resourceId,
|
|
166
211
|
recipient: event.entity_id,
|
|
167
212
|
required_facts: ["reset"],
|
|
168
213
|
fact: "reset",
|
|
169
|
-
template_data:
|
|
214
|
+
template_data: actor.kind === "auth.admin_password_reset"
|
|
215
|
+
? {}
|
|
216
|
+
: { locale: localeFromMetadata(event.metadata ?? {}) },
|
|
170
217
|
payload_expires_at: expiresAt,
|
|
171
218
|
});
|
|
172
219
|
}
|
|
@@ -198,12 +245,13 @@ const handleVerifiedPasswordReset = async (container, event, claims, getNow) =>
|
|
|
198
245
|
}
|
|
199
246
|
return retry();
|
|
200
247
|
}
|
|
201
|
-
return await deliverPasswordReset(container, email, claim, event.token, expiresAt, tokenValidMinutes(claims), getNow);
|
|
248
|
+
return await deliverPasswordReset(container, email, actor, claim, event.token, expiresAt, tokenValidMinutes(claims), getNow);
|
|
202
249
|
};
|
|
203
250
|
const handlePasswordResetEvent = async (container, payload, clock = () => new Date()) => {
|
|
204
251
|
const event = event_schemas_1.NativePasswordResetEventSchema.safeParse(payload);
|
|
205
252
|
if (!event.success ||
|
|
206
|
-
event.data.actor_type !== "customer"
|
|
253
|
+
(event.data.actor_type !== "customer" &&
|
|
254
|
+
event.data.actor_type !== "user") ||
|
|
207
255
|
!emailAddressPattern.test(event.data.entity_id)) {
|
|
208
256
|
return { code: "invalid_event", status: "ignored" };
|
|
209
257
|
}
|
|
@@ -218,7 +266,7 @@ const handlePasswordResetEvent = async (container, payload, clock = () => new Da
|
|
|
218
266
|
return retry();
|
|
219
267
|
}
|
|
220
268
|
const claims = verifyClaims(event.data.token, jwtSecret, event.data.entity_id);
|
|
221
|
-
if (!claims) {
|
|
269
|
+
if (!claims || claims.actor_type !== event.data.actor_type) {
|
|
222
270
|
return { code: "invalid_token", status: "ignored" };
|
|
223
271
|
}
|
|
224
272
|
try {
|
|
@@ -229,4 +277,4 @@ const handlePasswordResetEvent = async (container, payload, clock = () => new Da
|
|
|
229
277
|
}
|
|
230
278
|
};
|
|
231
279
|
exports.handlePasswordResetEvent = handlePasswordResetEvent;
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLXBhc3N3b3JkLXJlc2V0LWV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VtYWlsL2FwcGxpY2F0aW9uL2hhbmRsZS1wYXNzd29yZC1yZXNldC1ldmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSxxREFBb0Q7QUFDcEQsaURBQTRDO0FBQzVDLGdFQUFvRDtBQUVwRCwyREFBbUU7QUFDbkUsMkRBR2lDO0FBQ2pDLCtDQUFtRDtBQU1uRCw0REFBd0Q7QUFFeEQseUZBQXVGO0FBQ3ZGLCtFQUF5RTtBQUU1RCxRQUFBLDJCQUEyQixHQUFHLENBQUMsQ0FBQztBQUNoQyxRQUFBLDZCQUE2QixHQUFHLDRCQUE0QixDQUFDO0FBRTFFLE1BQU0sbUJBQW1CLEdBQUcsNEJBQTRCLENBQUM7QUFFekQsTUFBTSx5QkFBeUIsR0FBRyxPQUFDO0tBQ2hDLE1BQU0sQ0FBQztJQUNOLFVBQVUsRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNqQyxTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkMsR0FBRyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDaEMsR0FBRyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdCLFFBQVEsRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUNoQyxPQUFPLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Q0FDNUIsQ0FBQztLQUNELFdBQVcsRUFBRSxDQUFDO0FBV2pCLE1BQU0sS0FBSyxHQUFHLEdBQVUsRUFBRTtJQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUE2QixDQUFDLENB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
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLXBhc3N3b3JkLXJlc2V0LWV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VtYWlsL2FwcGxpY2F0aW9uL2hhbmRsZS1wYXNzd29yZC1yZXNldC1ldmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFLQSxxREFBb0Q7QUFDcEQsaURBQTRDO0FBQzVDLGdFQUFvRDtBQUVwRCwyREFBbUU7QUFDbkUsMkRBR2lDO0FBQ2pDLCtDQUFtRDtBQU1uRCw0REFBd0Q7QUFLeEQseUZBQXVGO0FBQ3ZGLCtFQUF5RTtBQUU1RCxRQUFBLDJCQUEyQixHQUFHLENBQUMsQ0FBQztBQUNoQyxRQUFBLDZCQUE2QixHQUFHLDRCQUE0QixDQUFDO0FBRTFFLE1BQU0sbUJBQW1CLEdBQUcsNEJBQTRCLENBQUM7QUFFekQsTUFBTSx5QkFBeUIsR0FBRyxPQUFDO0tBQ2hDLE1BQU0sQ0FBQztJQUNOLFVBQVUsRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQyxHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNoQyxHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0IsUUFBUSxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQ2hDLE9BQU8sRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUM1QixDQUFDO0tBQ0QsV0FBVyxFQUFFLENBQUM7QUF3Q2pCLE1BQU0sS0FBSyxHQUFHLEdBQVUsRUFBRTtJQUN4QixNQUFNLElBQUksS0FB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
|