@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.
Files changed (87) hide show
  1. package/.medusa/server/src/admin/index.js +44 -40
  2. package/.medusa/server/src/admin/index.mjs +44 -40
  3. package/.medusa/server/src/api/admin/tax-compliance/customer-addresses/[address_id]/tax-identification/route.js +15 -0
  4. package/.medusa/server/src/api/check-customer-address-tax-identification.js +93 -0
  5. package/.medusa/server/src/api/customer-address-identification-response.js +14 -0
  6. package/.medusa/server/src/api/middlewares.js +55 -1
  7. package/.medusa/server/src/api/store/carts/[id]/tax-identification/route.js +179 -0
  8. package/.medusa/server/src/api/store/customers/me/addresses/[address_id]/tax-identification/route.js +12 -0
  9. package/.medusa/server/src/api/store/customers/me/tax-identifications/route.js +14 -0
  10. package/.medusa/server/src/api/store/tax-identification-policy/route.js +21 -0
  11. package/.medusa/server/src/api/tax-identification-message.js +9 -0
  12. package/.medusa/server/src/api/to-response-amount.js +19 -0
  13. package/.medusa/server/src/email/application/deliver-ephemeral-auth-mail.js +2 -4
  14. package/.medusa/server/src/email/application/handle-password-reset-event.js +75 -27
  15. package/.medusa/server/src/email/rendering/default-templates.js +2 -1
  16. package/.medusa/server/src/email/rendering/render-email.js +2 -1
  17. package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +5 -1
  18. package/.medusa/server/src/email/templates/blocks/dynamic-blocks.js +5 -2
  19. package/.medusa/server/src/email/templates/defaults/documents.js +8 -1
  20. package/.medusa/server/src/email/templates/defaults/subjects.js +3 -1
  21. package/.medusa/server/src/email/templates/defaults/texts.js +4 -2
  22. package/.medusa/server/src/email/templates/render.js +2 -1
  23. package/.medusa/server/src/email/templates/sample-data.js +5 -1
  24. package/.medusa/server/src/email/types/email-kinds.js +3 -1
  25. package/.medusa/server/src/email/types/template-data.js +8 -1
  26. package/.medusa/server/src/jobs/tax-compliance-state-sync.js +26 -0
  27. package/.medusa/server/src/modules/email/migrations/Migration20261013120000.js +20 -0
  28. package/.medusa/server/src/modules/tax-compliance/domain/validation-policy.js +48 -0
  29. package/.medusa/server/src/modules/tax-compliance/index.js +15 -0
  30. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260814120459.js +18 -0
  31. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260814121724.js +14 -0
  32. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260814153410.js +14 -0
  33. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20260929091620.js +27 -0
  34. package/.medusa/server/src/modules/tax-compliance/migrations/Migration20261011090147.js +16 -0
  35. package/.medusa/server/src/modules/tax-compliance/models/tax-compliance-state.js +29 -0
  36. package/.medusa/server/src/modules/tax-compliance/models/tax-compliance-validation.js +74 -0
  37. package/.medusa/server/src/modules/tax-compliance/runtime-settings.js +43 -0
  38. package/.medusa/server/src/modules/tax-compliance/service.js +693 -0
  39. package/.medusa/server/src/providers/tax-compliance/index.js +11 -0
  40. package/.medusa/server/src/providers/tax-compliance/service.js +179 -0
  41. package/.medusa/server/src/public/constants.js +4 -2
  42. package/.medusa/server/src/public/index.js +6 -2
  43. package/.medusa/server/src/public/tax-compliance.js +22 -0
  44. package/.medusa/server/src/shared/lib/index.js +2 -1
  45. package/.medusa/server/src/shared/lib/optional-registration.js +34 -0
  46. package/.medusa/server/src/shop-config/build-food-shop-config.js +12 -9
  47. package/.medusa/server/src/subscribers/tax-compliance-plugin-features-updated.js +25 -0
  48. package/.medusa/server/src/tax-compliance/complete-cart-hooks.js +26 -0
  49. package/.medusa/server/src/tax-compliance/integrations/finanzonline/client.js +222 -0
  50. package/.medusa/server/src/tax-compliance/integrations/finanzonline/validator.js +50 -0
  51. package/.medusa/server/src/tax-compliance/integrations/registry.js +26 -0
  52. package/.medusa/server/src/tax-compliance/integrations/validator.js +19 -0
  53. package/.medusa/server/src/tax-compliance/lib/order-tax-context.js +100 -0
  54. package/.medusa/server/src/tax-compliance/lib/tax-compliance-state.js +59 -0
  55. package/.medusa/server/src/tax-compliance/lib/tax-runtime-settings.js +79 -0
  56. package/.medusa/server/src/tax-compliance/plugin-features.js +73 -0
  57. package/.medusa/server/src/tax-compliance/resolve-services.js +7 -0
  58. package/.medusa/server/src/tax-compliance/types/tax-compliance.js +6 -0
  59. package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +25 -30
  60. package/.medusa/server/src/workflows/documents/issue-packing-list.js +3 -14
  61. package/.medusa/server/src/workflows/hooks/cart-tax-context.js +78 -0
  62. package/.medusa/server/src/workflows/hooks/order-tax-context.js +7 -0
  63. package/.medusa/server/src/workflows/hooks/shipping-tax-apportionment.js +145 -0
  64. package/.medusa/server/src/workflows/tax-compliance/apportion-order-shipping-tax.js +72 -0
  65. package/.medusa/server/src/workflows/tax-compliance/domain/requires-frozen-tax-evidence.js +27 -0
  66. package/.medusa/server/src/workflows/tax-compliance/freeze-order-evidence.js +125 -0
  67. package/.medusa/server/src/workflows/tax-compliance/submit-customer-address-tax-identification.js +18 -0
  68. package/.medusa/server/src/workflows/tax-compliance/submit-tax-identification.js +18 -0
  69. package/README.md +369 -27
  70. package/dist/email/types/email-kinds.d.ts +3 -2
  71. package/dist/email/types/email-kinds.js +2 -0
  72. package/dist/email/types/shop-configuration.d.ts +8 -0
  73. package/dist/email/types/template-data.d.ts +6 -1
  74. package/dist/email/types/template-data.js +7 -0
  75. package/dist/public/constants.d.ts +2 -0
  76. package/dist/public/constants.js +3 -1
  77. package/dist/public/index.d.ts +2 -1
  78. package/dist/public/index.js +5 -1
  79. package/dist/public/tax-compliance.d.ts +30 -0
  80. package/dist/public/tax-compliance.js +21 -0
  81. package/dist/shared/lib/index.d.ts +1 -0
  82. package/dist/shared/lib/index.js +1 -0
  83. package/dist/shared/lib/optional-registration.d.ts +18 -0
  84. package/dist/shared/lib/optional-registration.js +33 -0
  85. package/dist/shop-config/build-food-shop-config.d.ts +2 -2
  86. package/dist/shop-config/build-food-shop-config.js +11 -8
  87. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2NhcnRzL1tpZF0vdGF4LWlkZW50aWZpY2F0aW9uL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUdrQztBQUVsQyw0REFJb0M7QUFFcEMsbURBQWlFO0FBQ2pFLDJHQUF3SDtBQUl4SCxpR0FBK0Y7QUFDL0Ysc0dBQWtHO0FBQ2xHLDJFQUFvRjtBQUNwRixxRkFBNEY7QUFDNUYsdUZBQW9GO0FBQ3BGLHVFQUFpRTtBQUVqRSxpSEFBbUg7QUFtQ25ILE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUk7SUFDSixlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLFdBQVc7SUFDWCxPQUFPO0lBQ1AsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixTQUFTO0lBQ1QsbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsOEJBQThCO0lBQzlCLGdDQUFnQztJQUNoQyx1QkFBdUI7Q0FDeEIsQ0FBQTtBQUVELE1BQU0sc0JBQXNCLEdBQUcsQ0FDN0IsT0FBdUMsRUFDdkMsS0FBYSxFQU1iLEVBQUU7SUFDRixJQUNFLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7UUFDM0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtRQUNyQixDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFO1FBQzdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFDNUIsQ0FBQztRQUNELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLEdBQUcsS0FBSyx5QkFBeUIsQ0FDbEMsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLE9BS04sQ0FBQTtBQUNILENB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
@@ -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: "customer",
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsaXZlci1lcGhlbWVyYWwtYXV0aC1tYWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VtYWlsL2FwcGxpY2F0aW9uL2RlbGl2ZXItZXBoZW1lcmFsLWF1dGgtbWFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFBb0Q7QUFFcEQsNkVBRzBDO0FBRzFDLGtGQUE0RTtBQUU1RSw4REFBK0Q7QUFPL0QseUZBQXVGO0FBK0N2RixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBYyxFQUE2QixFQUFFO0lBQ3pFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBZ0MsQ0FBQztJQUNoRCxJQUNFLE9BQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxRQUFRO1FBQzdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFDakIsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFDMUIsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQzNCLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLEVBQzlCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsRCxDQUFDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQ3JCLEtBQXlCLEVBQ3pCLEtBQXdCLEVBQ3hCLElBQVksRUFDWixHQUFTLEVBQ1QsaUJBQWdDLElBQUksRUFDRCxFQUFFO0lBQ3JDLE1BQU0sU0FBUyxHQUFHLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQzlDLFVBQVUsRUFBRSxLQUFLLENBQUMsT0FB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
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.literal("customer"),
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: "auth.password_reset",
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 resetUrl = new URL(configuration.passwordResetUrl({
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: resetData?.locale ?? null,
132
- reset_url: resetUrl.toString(),
133
- ...(validMinutes ? { valid_minutes: validMinutes } : {}),
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: "email.password_reset.dispatch",
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 customerId = expiresAt.getTime() <= now.getTime()
197
+ const expired = expiresAt.getTime() <= now.getTime();
198
+ const resourceId = expired && !actor.requiresResource
159
199
  ? null
160
- : await resolveCustomerId(container, event.entity_id);
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: "auth.password_reset",
207
+ kind: actor.kind,
163
208
  business_key: businessKey,
164
- resource_type: "customer",
165
- resource_id: customerId,
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: { locale: localeFromMetadata(event.metadata ?? {}) },
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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