@unchainedshop/plugins 4.0.0-rc.8 → 4.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/lib/accounts/google-oauth.d.ts +4 -0
- package/lib/accounts/google-oauth.d.ts.map +1 -0
- package/lib/accounts/google-oauth.js +145 -0
- package/lib/accounts/google-oauth.js.map +1 -0
- package/lib/accounts/linkedin-oauth.d.ts +4 -0
- package/lib/accounts/linkedin-oauth.d.ts.map +1 -0
- package/lib/accounts/linkedin-oauth.js +82 -0
- package/lib/accounts/linkedin-oauth.js.map +1 -0
- package/lib/delivery/send-message.js.map +1 -1
- package/lib/enrollments/licensed.js +15 -2
- package/lib/enrollments/licensed.js.map +1 -1
- package/lib/files/gridfs/adapter.d.ts.map +1 -1
- package/lib/files/gridfs/adapter.js +11 -8
- package/lib/files/gridfs/adapter.js.map +1 -1
- package/lib/files/gridfs/gridfs-adapter.d.ts +3 -0
- package/lib/files/gridfs/gridfs-adapter.d.ts.map +1 -0
- package/lib/files/gridfs/gridfs-adapter.js +97 -0
- package/lib/files/gridfs/gridfs-adapter.js.map +1 -0
- package/lib/files/gridfs/gridfs-webhook.d.ts +11 -0
- package/lib/files/gridfs/gridfs-webhook.d.ts.map +1 -0
- package/lib/files/gridfs/gridfs-webhook.js +84 -0
- package/lib/files/gridfs/gridfs-webhook.js.map +1 -0
- package/lib/files/gridfs/handler-express.d.ts.map +1 -1
- package/lib/files/gridfs/handler-express.js +21 -25
- package/lib/files/gridfs/handler-express.js.map +1 -1
- package/lib/files/gridfs/handler-fastify.d.ts.map +1 -1
- package/lib/files/gridfs/handler-fastify.js +50 -13
- package/lib/files/gridfs/handler-fastify.js.map +1 -1
- package/lib/files/gridfs/module.d.ts +2 -2
- package/lib/files/minio/handler-express.d.ts.map +1 -1
- package/lib/files/minio/handler-express.js +4 -7
- package/lib/files/minio/handler-express.js.map +1 -1
- package/lib/files/minio/handler-fastify.js +2 -2
- package/lib/files/minio/handler-fastify.js.map +1 -1
- package/lib/files/minio/index.d.ts +1 -1
- package/lib/files/minio/index.d.ts.map +1 -1
- package/lib/files/minio/index.js +7 -7
- package/lib/files/minio/index.js.map +1 -1
- package/lib/files/minio/minio-adapter.d.ts +6 -0
- package/lib/files/minio/minio-adapter.d.ts.map +1 -0
- package/lib/files/minio/minio-adapter.js +181 -0
- package/lib/files/minio/minio-adapter.js.map +1 -0
- package/lib/files/minio/minio-webhook.d.ts +2 -0
- package/lib/files/minio/minio-webhook.d.ts.map +1 -0
- package/lib/files/minio/minio-webhook.js +33 -0
- package/lib/files/minio/minio-webhook.js.map +1 -0
- package/lib/filters/local-search.js +1 -1
- package/lib/filters/local-search.js.map +1 -1
- package/lib/filters/strict-equal.js +0 -18
- package/lib/filters/strict-equal.js.map +1 -1
- package/lib/payment/apple-iap/adapter.js +12 -10
- package/lib/payment/apple-iap/adapter.js.map +1 -1
- package/lib/payment/apple-iap/db/AppleTransactionsCollection.d.ts +1 -1
- package/lib/payment/apple-iap/db/AppleTransactionsCollection.d.ts.map +1 -1
- package/lib/payment/apple-iap/handler-express.d.ts.map +1 -1
- package/lib/payment/apple-iap/handler-express.js +14 -10
- package/lib/payment/apple-iap/handler-express.js.map +1 -1
- package/lib/payment/apple-iap/handler-fastify.d.ts.map +1 -1
- package/lib/payment/apple-iap/handler-fastify.js +15 -8
- package/lib/payment/apple-iap/handler-fastify.js.map +1 -1
- package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts +9 -0
- package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts.map +1 -0
- package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js +17 -0
- package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js.map +1 -0
- package/lib/payment/apple-iap/module.d.ts +4 -4
- package/lib/payment/apple-iap/module.d.ts.map +1 -1
- package/lib/payment/apple-iap/module.js +4 -2
- package/lib/payment/apple-iap/module.js.map +1 -1
- package/lib/payment/braintree.js +3 -1
- package/lib/payment/braintree.js.map +1 -1
- package/lib/payment/cryptopay/db/CryptopayTransactions.d.ts +1 -1
- package/lib/payment/cryptopay/db/CryptopayTransactions.d.ts.map +1 -1
- package/lib/payment/cryptopay/derive-btc-address.d.ts.map +1 -1
- package/lib/payment/cryptopay/derive-btc-address.js +2 -3
- package/lib/payment/cryptopay/derive-btc-address.js.map +1 -1
- package/lib/payment/cryptopay/derive-eth-address.d.ts.map +1 -1
- package/lib/payment/cryptopay/derive-eth-address.js +5 -3
- package/lib/payment/cryptopay/derive-eth-address.js.map +1 -1
- package/lib/payment/cryptopay/handle-webhook.js +2 -2
- package/lib/payment/cryptopay/handle-webhook.js.map +1 -1
- package/lib/payment/cryptopay/handler-express.d.ts.map +1 -1
- package/lib/payment/cryptopay/handler-express.js +4 -7
- package/lib/payment/cryptopay/handler-express.js.map +1 -1
- package/lib/payment/cryptopay/handler-fastify.js +1 -1
- package/lib/payment/cryptopay/handler-fastify.js.map +1 -1
- package/lib/payment/cryptopay/middleware.d.ts +2 -0
- package/lib/payment/cryptopay/middleware.d.ts.map +1 -0
- package/lib/payment/cryptopay/middleware.js +75 -0
- package/lib/payment/cryptopay/middleware.js.map +1 -0
- package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts +25 -0
- package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts.map +1 -0
- package/lib/payment/cryptopay/module/configureCryptopayModule.js +75 -0
- package/lib/payment/cryptopay/module/configureCryptopayModule.js.map +1 -0
- package/lib/payment/cryptopay/module.d.ts +2 -2
- package/lib/payment/cryptopay/module.d.ts.map +1 -1
- package/lib/payment/cryptopay/module.js +4 -4
- package/lib/payment/cryptopay/module.js.map +1 -1
- package/lib/payment/cryptopay/plugin.d.ts.map +1 -1
- package/lib/payment/cryptopay/plugin.js +18 -4
- package/lib/payment/cryptopay/plugin.js.map +1 -1
- package/lib/payment/datatrans-v2/handler-express.d.ts.map +1 -1
- package/lib/payment/datatrans-v2/handler-express.js +13 -11
- package/lib/payment/datatrans-v2/handler-express.js.map +1 -1
- package/lib/payment/datatrans-v2/handler-fastify.d.ts.map +1 -1
- package/lib/payment/datatrans-v2/handler-fastify.js +11 -5
- package/lib/payment/datatrans-v2/handler-fastify.js.map +1 -1
- package/lib/payment/datatrans-v2/index.js +63 -37
- package/lib/payment/datatrans-v2/index.js.map +1 -1
- package/lib/payment/datatrans-v2/middleware.d.ts +2 -0
- package/lib/payment/datatrans-v2/middleware.d.ts.map +1 -0
- package/lib/payment/datatrans-v2/middleware.js +68 -0
- package/lib/payment/datatrans-v2/middleware.js.map +1 -0
- package/lib/payment/datatrans-v2/parseRegistrationData.d.ts +1 -1
- package/lib/payment/datatrans-v2/parseRegistrationData.d.ts.map +1 -1
- package/lib/payment/paypal-checkout.js +4 -2
- package/lib/payment/paypal-checkout.js.map +1 -1
- package/lib/payment/payrexx/api/index.d.ts +1 -1
- package/lib/payment/payrexx/api/index.d.ts.map +1 -1
- package/lib/payment/payrexx/api/makeFetcher.d.ts +1 -1
- package/lib/payment/payrexx/api/makeFetcher.d.ts.map +1 -1
- package/lib/payment/payrexx/api/makeFetcher.js +1 -1
- package/lib/payment/payrexx/api/makeFetcher.js.map +1 -1
- package/lib/payment/payrexx/handler-express.d.ts.map +1 -1
- package/lib/payment/payrexx/handler-express.js +15 -15
- package/lib/payment/payrexx/handler-express.js.map +1 -1
- package/lib/payment/payrexx/handler-fastify.js +23 -15
- package/lib/payment/payrexx/handler-fastify.js.map +1 -1
- package/lib/payment/payrexx/index.js +21 -15
- package/lib/payment/payrexx/index.js.map +1 -1
- package/lib/payment/payrexx/middleware.d.ts +2 -0
- package/lib/payment/payrexx/middleware.d.ts.map +1 -0
- package/lib/payment/payrexx/middleware.js +86 -0
- package/lib/payment/payrexx/middleware.js.map +1 -0
- package/lib/payment/postfinance-checkout/api-client.d.ts.map +1 -1
- package/lib/payment/postfinance-checkout/api-client.js +7 -7
- package/lib/payment/postfinance-checkout/api-client.js.map +1 -1
- package/lib/payment/postfinance-checkout/handler-express.js +7 -8
- package/lib/payment/postfinance-checkout/handler-express.js.map +1 -1
- package/lib/payment/postfinance-checkout/handler-fastify.d.ts.map +1 -1
- package/lib/payment/postfinance-checkout/handler-fastify.js +6 -4
- package/lib/payment/postfinance-checkout/handler-fastify.js.map +1 -1
- package/lib/payment/postfinance-checkout/index.d.ts.map +1 -1
- package/lib/payment/postfinance-checkout/index.js +20 -7
- package/lib/payment/postfinance-checkout/index.js.map +1 -1
- package/lib/payment/postfinance-checkout/middleware.d.ts +2 -0
- package/lib/payment/postfinance-checkout/middleware.d.ts.map +1 -0
- package/lib/payment/postfinance-checkout/middleware.js +38 -0
- package/lib/payment/postfinance-checkout/middleware.js.map +1 -0
- package/lib/payment/saferpay/adapter.d.ts.map +1 -1
- package/lib/payment/saferpay/adapter.js +9 -0
- package/lib/payment/saferpay/adapter.js.map +1 -1
- package/lib/payment/saferpay/handler-express.d.ts.map +1 -1
- package/lib/payment/saferpay/handler-express.js +10 -8
- package/lib/payment/saferpay/handler-express.js.map +1 -1
- package/lib/payment/saferpay/handler-fastify.d.ts.map +1 -1
- package/lib/payment/saferpay/handler-fastify.js +11 -5
- package/lib/payment/saferpay/handler-fastify.js.map +1 -1
- package/lib/payment/saferpay/middleware.d.ts +2 -0
- package/lib/payment/saferpay/middleware.d.ts.map +1 -0
- package/lib/payment/saferpay/middleware.js +57 -0
- package/lib/payment/saferpay/middleware.js.map +1 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts +10 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts.map +1 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js +24 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js.map +1 -0
- package/lib/payment/saferpay/module.d.ts +2 -2
- package/lib/payment/stripe/handler-express.js +25 -17
- package/lib/payment/stripe/handler-express.js.map +1 -1
- package/lib/payment/stripe/handler-fastify.d.ts.map +1 -1
- package/lib/payment/stripe/handler-fastify.js +33 -12
- package/lib/payment/stripe/handler-fastify.js.map +1 -1
- package/lib/payment/stripe/index.js +21 -15
- package/lib/payment/stripe/index.js.map +1 -1
- package/lib/payment/stripe/middleware.d.ts +6 -0
- package/lib/payment/stripe/middleware.d.ts.map +1 -0
- package/lib/payment/stripe/middleware.js +114 -0
- package/lib/payment/stripe/middleware.js.map +1 -0
- package/lib/payment/stripe/stripe.d.ts +2 -2
- package/lib/payment/stripe/stripe.d.ts.map +1 -1
- package/lib/payment/stripe/stripe.js +14 -11
- package/lib/payment/stripe/stripe.js.map +1 -1
- package/lib/plugins-index.d.ts +48 -0
- package/lib/plugins-index.d.ts.map +1 -0
- package/lib/plugins-index.js +107 -0
- package/lib/plugins-index.js.map +1 -0
- package/lib/presets/all.d.ts +8 -6
- package/lib/presets/all.d.ts.map +1 -1
- package/lib/presets/all.js +3 -1
- package/lib/presets/all.js.map +1 -1
- package/lib/pricing/delivery-swiss-tax.d.ts.map +1 -1
- package/lib/pricing/delivery-swiss-tax.js +13 -20
- package/lib/pricing/delivery-swiss-tax.js.map +1 -1
- package/lib/pricing/order-discount.d.ts.map +1 -1
- package/lib/pricing/order-discount.js +5 -3
- package/lib/pricing/order-discount.js.map +1 -1
- package/lib/pricing/order-round.d.ts.map +1 -1
- package/lib/pricing/order-round.js +4 -3
- package/lib/pricing/order-round.js.map +1 -1
- package/lib/pricing/product-catalog-price-options.d.ts +2 -0
- package/lib/pricing/product-catalog-price-options.d.ts.map +1 -0
- package/lib/pricing/product-catalog-price-options.js +52 -0
- package/lib/pricing/product-catalog-price-options.js.map +1 -0
- package/lib/pricing/product-catalog-price.d.ts.map +1 -1
- package/lib/pricing/product-catalog-price.js +26 -2
- package/lib/pricing/product-catalog-price.js.map +1 -1
- package/lib/pricing/product-price-rateconversion.js +3 -3
- package/lib/pricing/product-price-rateconversion.js.map +1 -1
- package/lib/pricing/product-swiss-tax.d.ts +1 -5
- package/lib/pricing/product-swiss-tax.d.ts.map +1 -1
- package/lib/pricing/product-swiss-tax.js +26 -22
- package/lib/pricing/product-swiss-tax.js.map +1 -1
- package/lib/pricing/tax/ch.d.ts +7 -2
- package/lib/pricing/tax/ch.d.ts.map +1 -1
- package/lib/pricing/tax/ch.js +16 -1
- package/lib/pricing/tax/ch.js.map +1 -1
- package/lib/pricing/utils/isDeliveryAddressInCountry.d.ts +7 -0
- package/lib/pricing/utils/isDeliveryAddressInCountry.d.ts.map +1 -0
- package/lib/pricing/utils/isDeliveryAddressInCountry.js +13 -0
- package/lib/pricing/utils/isDeliveryAddressInCountry.js.map +1 -0
- package/lib/warehousing/eth-minter.js +23 -11
- package/lib/warehousing/eth-minter.js.map +1 -1
- package/lib/worker/budgetsms.d.ts +10 -0
- package/lib/worker/budgetsms.d.ts.map +1 -0
- package/lib/worker/budgetsms.js +217 -0
- package/lib/worker/budgetsms.js.map +1 -0
- package/lib/worker/bulk-import.d.ts +1 -1
- package/lib/worker/bulk-import.d.ts.map +1 -1
- package/lib/worker/bulk-import.js +11 -33
- package/lib/worker/bulk-import.js.map +1 -1
- package/lib/worker/bulkgate.d.ts +2 -0
- package/lib/worker/bulkgate.d.ts.map +1 -0
- package/lib/worker/bulkgate.js +104 -0
- package/lib/worker/bulkgate.js.map +1 -0
- package/lib/worker/email.d.ts.map +1 -1
- package/lib/worker/email.js +25 -7
- package/lib/worker/email.js.map +1 -1
- package/lib/worker/enrollment-order-generator.d.ts.map +1 -1
- package/lib/worker/enrollment-order-generator.js +7 -49
- package/lib/worker/enrollment-order-generator.js.map +1 -1
- package/lib/worker/error-notifications.js +1 -1
- package/lib/worker/error-notifications.js.map +1 -1
- package/lib/worker/export-token.d.ts.map +1 -1
- package/lib/worker/export-token.js +0 -1
- package/lib/worker/export-token.js.map +1 -1
- package/lib/worker/message.d.ts +1 -1
- package/lib/worker/message.d.ts.map +1 -1
- package/lib/worker/message.js +4 -2
- package/lib/worker/message.js.map +1 -1
- package/lib/worker/sms.js +17 -17
- package/lib/worker/sms.js.map +1 -1
- package/lib/worker/twilio.d.ts +2 -0
- package/lib/worker/twilio.d.ts.map +1 -0
- package/lib/worker/twilio.js +60 -0
- package/lib/worker/twilio.js.map +1 -0
- package/package.json +22 -33
- package/src/delivery/send-message.ts +1 -1
- package/src/enrollments/licensed.ts +15 -2
- package/src/files/gridfs/adapter.ts +12 -7
- package/src/files/gridfs/handler-express.ts +23 -25
- package/src/files/gridfs/handler-fastify.ts +53 -14
- package/src/files/minio/handler-express.ts +4 -7
- package/src/files/minio/handler-fastify.ts +2 -2
- package/src/files/minio/index.ts +16 -16
- package/src/filters/local-search.ts +1 -1
- package/src/filters/strict-equal.ts +0 -21
- package/src/payment/apple-iap/adapter.ts +12 -14
- package/src/payment/apple-iap/db/AppleTransactionsCollection.ts +1 -1
- package/src/payment/apple-iap/handler-express.ts +17 -11
- package/src/payment/apple-iap/handler-fastify.ts +19 -9
- package/src/payment/apple-iap/module.ts +9 -4
- package/src/payment/braintree.ts +4 -1
- package/src/payment/cryptopay/db/CryptopayTransactions.ts +1 -1
- package/src/payment/cryptopay/derive-btc-address.ts +1 -3
- package/src/payment/cryptopay/derive-eth-address.ts +5 -3
- package/src/payment/cryptopay/handle-webhook.ts +6 -6
- package/src/payment/cryptopay/handler-express.ts +4 -7
- package/src/payment/cryptopay/handler-fastify.ts +1 -1
- package/src/payment/cryptopay/module.ts +8 -5
- package/src/payment/cryptopay/plugin.ts +21 -4
- package/src/payment/datatrans-v2/handler-express.ts +17 -12
- package/src/payment/datatrans-v2/handler-fastify.ts +15 -6
- package/src/payment/datatrans-v2/index.ts +82 -50
- package/src/payment/paypal-checkout.ts +4 -2
- package/src/payment/payrexx/api/index.ts +1 -1
- package/src/payment/payrexx/api/makeFetcher.ts +2 -2
- package/src/payment/payrexx/handler-express.ts +24 -32
- package/src/payment/payrexx/handler-fastify.ts +33 -33
- package/src/payment/payrexx/index.ts +26 -16
- package/src/payment/postfinance-checkout/api-client.ts +13 -8
- package/src/payment/postfinance-checkout/handler-express.ts +8 -8
- package/src/payment/postfinance-checkout/handler-fastify.ts +7 -4
- package/src/payment/postfinance-checkout/index.ts +20 -8
- package/src/payment/saferpay/adapter.ts +14 -2
- package/src/payment/saferpay/handler-express.ts +14 -13
- package/src/payment/saferpay/handler-fastify.ts +14 -9
- package/src/payment/stripe/handler-express.ts +33 -33
- package/src/payment/stripe/handler-fastify.ts +40 -27
- package/src/payment/stripe/index.ts +18 -16
- package/src/payment/stripe/stripe.ts +17 -12
- package/src/presets/all.ts +3 -1
- package/src/pricing/delivery-swiss-tax.ts +16 -31
- package/src/pricing/order-discount.ts +6 -4
- package/src/pricing/order-round.ts +5 -4
- package/src/pricing/product-catalog-price-options.ts +67 -0
- package/src/pricing/product-catalog-price.ts +25 -2
- package/src/pricing/product-price-rateconversion.ts +3 -3
- package/src/pricing/product-swiss-tax.ts +39 -40
- package/src/pricing/tax/ch.ts +33 -7
- package/src/pricing/utils/isDeliveryAddressInCountry.test.ts +106 -0
- package/src/pricing/utils/isDeliveryAddressInCountry.ts +26 -0
- package/src/warehousing/eth-minter.ts +30 -11
- package/src/worker/budgetsms.ts +268 -0
- package/src/worker/bulk-import.ts +12 -53
- package/src/worker/bulkgate.ts +138 -0
- package/src/worker/email.ts +30 -8
- package/src/worker/enrollment-order-generator.ts +14 -72
- package/src/worker/error-notifications.ts +2 -2
- package/src/worker/export-token.ts +0 -1
- package/src/worker/message.ts +5 -3
- package/src/worker/{sms.ts → twilio.ts} +15 -26
- package/src/pricing/product-swiss-tax.test.ts +0 -139
|
@@ -1,24 +1,6 @@
|
|
|
1
1
|
import { ProductPricingDirector, ProductPricingAdapter, ProductPricingRowCategory, } from '@unchainedshop/core';
|
|
2
|
-
import { SwissTaxCategories } from './tax/ch.js';
|
|
3
|
-
|
|
4
|
-
const { product, order } = context;
|
|
5
|
-
const productSpecialTaxTag = product.tags?.find((tag) => tag?.trim().toLowerCase().startsWith('swiss-tax-category:'));
|
|
6
|
-
const taxCategory = Object.values(SwissTaxCategories).find((t) => `swiss-tax-category:${t.value}` === productSpecialTaxTag?.trim().toLowerCase()) || SwissTaxCategories.DEFAULT;
|
|
7
|
-
return taxCategory.rate(order?.ordered);
|
|
8
|
-
};
|
|
9
|
-
export const isDeliveryAddressInSwitzerland = async ({ order, countryCode: forceCountryCode, modules, }) => {
|
|
10
|
-
let countryCode = forceCountryCode?.toUpperCase().trim() || order.countryCode;
|
|
11
|
-
if (order) {
|
|
12
|
-
const orderDelivery = await modules.orders.deliveries.findDelivery({
|
|
13
|
-
orderDeliveryId: order.deliveryId,
|
|
14
|
-
});
|
|
15
|
-
const address = orderDelivery?.context?.address || order.billingAddress;
|
|
16
|
-
if (address?.countryCode > '') {
|
|
17
|
-
countryCode = address.countryCode?.toUpperCase().trim();
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
return countryCode === 'CH' || countryCode === 'LI';
|
|
21
|
-
};
|
|
2
|
+
import { resolveTaxCategoryFromDeliveryProvider, resolveTaxCategoryFromProduct, SwissTaxCategories, } from './tax/ch.js';
|
|
3
|
+
import isDeliveryAddressInCountry from './utils/isDeliveryAddressInCountry.js';
|
|
22
4
|
export const ProductSwissTax = {
|
|
23
5
|
...ProductPricingAdapter,
|
|
24
6
|
key: 'shop.unchained.pricing.product-swiss-tax',
|
|
@@ -34,10 +16,32 @@ export const ProductSwissTax = {
|
|
|
34
16
|
return {
|
|
35
17
|
...pricingAdapter,
|
|
36
18
|
calculate: async () => {
|
|
37
|
-
|
|
19
|
+
const orderDelivery = context.order?.deliveryId
|
|
20
|
+
? await context.modules.orders.deliveries.findDelivery({
|
|
21
|
+
orderDeliveryId: context.order?.deliveryId,
|
|
22
|
+
})
|
|
23
|
+
: null;
|
|
24
|
+
if (!isDeliveryAddressInCountry({
|
|
25
|
+
...context,
|
|
26
|
+
orderDelivery,
|
|
27
|
+
}, ['CH', 'LI'])) {
|
|
38
28
|
return pricingAdapter.calculate();
|
|
39
29
|
}
|
|
40
|
-
|
|
30
|
+
let taxCategory = resolveTaxCategoryFromProduct(context.product);
|
|
31
|
+
if (!taxCategory) {
|
|
32
|
+
// No special tax category found, use default from delivery provider
|
|
33
|
+
const provider = orderDelivery?.deliveryProviderId
|
|
34
|
+
? await context.modules.delivery.findProvider({
|
|
35
|
+
deliveryProviderId: orderDelivery?.deliveryProviderId,
|
|
36
|
+
})
|
|
37
|
+
: null;
|
|
38
|
+
if (provider)
|
|
39
|
+
taxCategory = resolveTaxCategoryFromDeliveryProvider(provider);
|
|
40
|
+
}
|
|
41
|
+
// If still no tax category found, use default
|
|
42
|
+
if (!taxCategory)
|
|
43
|
+
taxCategory = SwissTaxCategories.DEFAULT;
|
|
44
|
+
const taxRate = taxCategory.rate(context.order?.ordered);
|
|
41
45
|
ProductPricingAdapter.log(`ProductSwissTax -> Tax Multiplicator: ${taxRate}`);
|
|
42
46
|
params.calculationSheet.filterBy({ isTaxable: true }).forEach(({ isNetPrice, ...row }) => {
|
|
43
47
|
if (!isNetPrice) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-swiss-tax.js","sourceRoot":"","sources":["../../src/pricing/product-swiss-tax.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"product-swiss-tax.js","sourceRoot":"","sources":["../../src/pricing/product-swiss-tax.ts"],"names":[],"mappings":"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"}
|
package/lib/pricing/tax/ch.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import { DeliveryProvider } from '@unchainedshop/core-delivery';
|
|
2
|
+
import { Product } from '@unchainedshop/core-products';
|
|
3
|
+
export interface SwissTaxCategoryResolver {
|
|
2
4
|
value: string;
|
|
3
5
|
rate: (referenceDate?: Date) => number;
|
|
4
|
-
}
|
|
6
|
+
}
|
|
7
|
+
export declare const SwissTaxCategories: Record<string, SwissTaxCategoryResolver>;
|
|
8
|
+
export declare const resolveTaxCategoryFromDeliveryProvider: (provider: DeliveryProvider) => SwissTaxCategoryResolver | null;
|
|
9
|
+
export declare const resolveTaxCategoryFromProduct: (product: Product) => SwissTaxCategoryResolver | null;
|
|
5
10
|
//# sourceMappingURL=ch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ch.d.ts","sourceRoot":"","sources":["../../../src/pricing/tax/ch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ch.d.ts","sourceRoot":"","sources":["../../../src/pricing/tax/ch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAMvD,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;CACxC;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CA4BvE,CAAC;AAEF,eAAO,MAAM,sCAAsC,GACjD,UAAU,gBAAgB,KACzB,wBAAwB,GAAG,IAU7B,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,SAAS,OAAO,KAAG,wBAAwB,GAAG,IAQ3F,CAAC"}
|
package/lib/pricing/tax/ch.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const startOf2024 = new Date('2024-01-01T00:00:00.000+0100');
|
|
2
|
-
// https://www.estv.admin.ch/estv/en/home/value-added-tax/vat-rates-switzerland.html
|
|
3
2
|
export const SwissTaxCategories = {
|
|
4
3
|
DEFAULT: {
|
|
5
4
|
value: 'default',
|
|
@@ -29,4 +28,20 @@ export const SwissTaxCategories = {
|
|
|
29
28
|
},
|
|
30
29
|
},
|
|
31
30
|
};
|
|
31
|
+
export const resolveTaxCategoryFromDeliveryProvider = (provider) => {
|
|
32
|
+
const taxCategoryFromProvider = provider?.configuration
|
|
33
|
+
?.find(({ key }) => {
|
|
34
|
+
if (key === 'swiss-tax-category')
|
|
35
|
+
return true;
|
|
36
|
+
return null;
|
|
37
|
+
})
|
|
38
|
+
?.value?.toUpperCase();
|
|
39
|
+
const taxCategory = taxCategoryFromProvider ? SwissTaxCategories[taxCategoryFromProvider] : null;
|
|
40
|
+
return taxCategory;
|
|
41
|
+
};
|
|
42
|
+
export const resolveTaxCategoryFromProduct = (product) => {
|
|
43
|
+
const productSpecialTaxTag = product.tags?.find((tag) => tag?.trim().toLowerCase().startsWith('swiss-tax-category:'));
|
|
44
|
+
const taxCategory = Object.values(SwissTaxCategories).find((t) => `swiss-tax-category:${t.value}` === productSpecialTaxTag?.trim().toLowerCase());
|
|
45
|
+
return taxCategory || null;
|
|
46
|
+
};
|
|
32
47
|
//# sourceMappingURL=ch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ch.js","sourceRoot":"","sources":["../../../src/pricing/tax/ch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ch.js","sourceRoot":"","sources":["../../../src/pricing/tax/ch.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAS7D,MAAM,CAAC,MAAM,kBAAkB,GAA6C;IAC1E,OAAO,EAAE;QACP,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,EAAE,EAAE;YACnC,IAAI,aAAa,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,EAAE,EAAE;YACnC,IAAI,aAAa,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,EAAE,EAAE;YACnC,IAAI,aAAa,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACpD,QAA0B,EACO,EAAE;IACnC,MAAM,uBAAuB,GAAG,QAAQ,EAAE,aAAa;QACrD,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;QACjB,IAAI,GAAG,KAAK,oBAAoB;YAAE,OAAO,IAAI,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;QACF,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAEzB,MAAM,WAAW,GAAG,uBAAuB,CAAC,CAAC,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,OAAgB,EAAmC,EAAE;IACjG,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACtD,GAAG,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAC5D,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CACxD,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,KAAK,oBAAoB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CACtF,CAAC;IACF,OAAO,WAAW,IAAI,IAAI,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Order, OrderDelivery } from '@unchainedshop/core-orders';
|
|
2
|
+
export default function isDeliveryAddressInCountry({ orderDelivery, order, countryCode: forceCountryCode, }: {
|
|
3
|
+
orderDelivery?: OrderDelivery | null;
|
|
4
|
+
order?: Order | null;
|
|
5
|
+
countryCode?: string | null;
|
|
6
|
+
}, allowedCountryCodes: string[]): boolean;
|
|
7
|
+
//# sourceMappingURL=isDeliveryAddressInCountry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isDeliveryAddressInCountry.d.ts","sourceRoot":"","sources":["../../../src/pricing/utils/isDeliveryAddressInCountry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,EACE,aAAa,EACb,KAAK,EACL,WAAW,EAAE,gBAAuB,GACrC,EAAE;IACD,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,EACD,mBAAmB,EAAE,MAAM,EAAE,WAa9B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default function isDeliveryAddressInCountry({ orderDelivery, order, countryCode: forceCountryCode = null, }, allowedCountryCodes) {
|
|
2
|
+
let countryCode = forceCountryCode?.toUpperCase().trim() || order?.countryCode;
|
|
3
|
+
if (orderDelivery || order) {
|
|
4
|
+
const address = orderDelivery?.context?.address || order?.billingAddress;
|
|
5
|
+
if (address?.countryCode > '') {
|
|
6
|
+
countryCode = address.countryCode?.toUpperCase().trim();
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
if (!countryCode)
|
|
10
|
+
return false;
|
|
11
|
+
return allowedCountryCodes.includes(countryCode);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=isDeliveryAddressInCountry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isDeliveryAddressInCountry.js","sourceRoot":"","sources":["../../../src/pricing/utils/isDeliveryAddressInCountry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,EACE,aAAa,EACb,KAAK,EACL,WAAW,EAAE,gBAAgB,GAAG,IAAI,GAKrC,EACD,mBAA6B;IAE7B,IAAI,WAAW,GAAG,gBAAgB,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,WAAW,CAAC;IAE/E,IAAI,aAAa,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,aAAa,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,cAAc,CAAC;QACzE,IAAI,OAAO,EAAE,WAAW,GAAG,EAAE,EAAE,CAAC;YAC9B,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { WarehousingDirector, WarehousingAdapter, } from '@unchainedshop/core';
|
|
1
|
+
import { WarehousingError, WarehousingDirector, WarehousingAdapter, } from '@unchainedshop/core';
|
|
2
2
|
import { WarehousingProviderType } from '@unchainedshop/core-warehousing';
|
|
3
3
|
import { ProductContractStandard, ProductTypes } from '@unchainedshop/core-products';
|
|
4
4
|
import { systemLocale } from '@unchainedshop/utils';
|
|
5
5
|
import { generateDbObjectId } from '@unchainedshop/mongodb';
|
|
6
6
|
import { getFileAdapter } from '@unchainedshop/core-files';
|
|
7
|
+
import { createLogger } from '@unchainedshop/logger';
|
|
7
8
|
const { MINTER_TOKEN_OFFSET = '0', ROOT_URL = 'http://localhost:4010' } = process.env;
|
|
9
|
+
const logger = createLogger('unchained:eth-minter');
|
|
8
10
|
const ETHMinter = {
|
|
9
11
|
...WarehousingAdapter,
|
|
10
12
|
key: 'shop.unchained.warehousing.infinite-minter',
|
|
@@ -23,7 +25,7 @@ const ETHMinter = {
|
|
|
23
25
|
? { contractAddress: contractStandard }
|
|
24
26
|
: {
|
|
25
27
|
contractAddress: contractStandard,
|
|
26
|
-
|
|
28
|
+
tokenSerialNumber: tokenId,
|
|
27
29
|
});
|
|
28
30
|
const tokensCreated = existingTokens.reduce((acc, curToken) => {
|
|
29
31
|
return acc + curToken.quantity;
|
|
@@ -36,6 +38,10 @@ const ETHMinter = {
|
|
|
36
38
|
return product?.type === ProductTypes.TokenizedProduct;
|
|
37
39
|
},
|
|
38
40
|
configurationError() {
|
|
41
|
+
if (contractStandard === 'ERC1155' && !tokenId) {
|
|
42
|
+
logger.error(`Token ID is required for ERC1155 contract standard (productId: ${product._id})`);
|
|
43
|
+
return WarehousingError.INCOMPLETE_CONFIGURATION;
|
|
44
|
+
}
|
|
39
45
|
return null;
|
|
40
46
|
},
|
|
41
47
|
stock: async () => {
|
|
@@ -49,11 +55,14 @@ const ETHMinter = {
|
|
|
49
55
|
const chainId = configuration.find(({ key }) => key === 'chainId')?.value || undefined;
|
|
50
56
|
const meta = { contractStandard };
|
|
51
57
|
const tokensCreated = await getTokensCreated();
|
|
58
|
+
if (!orderPosition) {
|
|
59
|
+
throw new Error('Order position not found in context');
|
|
60
|
+
}
|
|
52
61
|
if (contractStandard === 'ERC721') {
|
|
53
|
-
// ERC721 is non-fungible, thus every
|
|
54
|
-
const items = new Array(orderPosition
|
|
62
|
+
// ERC721 is non-fungible, thus every tokenSerialNumber unique!
|
|
63
|
+
const items = new Array(orderPosition.quantity).fill(null).map((_, i) => ({
|
|
55
64
|
_id: generateDbObjectId(),
|
|
56
|
-
|
|
65
|
+
tokenSerialNumber: Number(parseInt(MINTER_TOKEN_OFFSET, 10) + tokensCreated + (i + 1)).toString(),
|
|
57
66
|
contractAddress,
|
|
58
67
|
quantity: 1,
|
|
59
68
|
chainId,
|
|
@@ -65,18 +74,21 @@ const ETHMinter = {
|
|
|
65
74
|
return [
|
|
66
75
|
{
|
|
67
76
|
_id: generateDbObjectId(),
|
|
68
|
-
|
|
77
|
+
tokenSerialNumber: tokenId,
|
|
69
78
|
contractAddress,
|
|
70
|
-
quantity: orderPosition
|
|
79
|
+
quantity: orderPosition.quantity,
|
|
71
80
|
chainId,
|
|
72
81
|
meta,
|
|
73
82
|
},
|
|
74
83
|
];
|
|
75
84
|
},
|
|
76
|
-
tokenMetadata: async (
|
|
85
|
+
tokenMetadata: async (tokenSerialNumber) => {
|
|
77
86
|
// Metadata standards supported
|
|
78
87
|
// https://eips.ethereum.org/EIPS/eip-1155 (backward compatible with 721)
|
|
79
88
|
// https://eips.ethereum.org/EIPS/eip-721
|
|
89
|
+
if (!product) {
|
|
90
|
+
throw new Error('Product not found in context');
|
|
91
|
+
}
|
|
80
92
|
const allLanguages = await modules.languages.findLanguages({
|
|
81
93
|
includeInactive: false,
|
|
82
94
|
});
|
|
@@ -85,14 +97,14 @@ const ETHMinter = {
|
|
|
85
97
|
limit: 1,
|
|
86
98
|
});
|
|
87
99
|
const file = firstMedia && (await modules.files.findFile({ fileId: firstMedia.mediaId }));
|
|
88
|
-
const
|
|
89
|
-
const signedUrl = await
|
|
100
|
+
const fileAdapter = file && getFileAdapter();
|
|
101
|
+
const signedUrl = await fileAdapter?.createDownloadURL(file);
|
|
90
102
|
const url = signedUrl && (await modules.files.normalizeUrl(signedUrl, {}));
|
|
91
103
|
const text = await modules.products.texts.findLocalizedText({
|
|
92
104
|
productId: product._id,
|
|
93
105
|
locale: locale || systemLocale,
|
|
94
106
|
});
|
|
95
|
-
const name = `${text.title} #${
|
|
107
|
+
const name = `${text.title} #${tokenSerialNumber}`;
|
|
96
108
|
const isDefaultLanguageActive = locale ? locale.language === systemLocale.language : true;
|
|
97
109
|
const localization = isDefaultLanguageActive
|
|
98
110
|
? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eth-minter.js","sourceRoot":"","sources":["../../src/warehousing/eth-minter.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"eth-minter.js","sourceRoot":"","sources":["../../src/warehousing/eth-minter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgetsms.d.ts","sourceRoot":"","sources":["../../src/worker/budgetsms.ts"],"names":[],"mappings":"AA8OA,wBAAsB,yBAAyB;;;;;;;;GA6B9C"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { WorkerAdapter, WorkerDirector } from '@unchainedshop/core';
|
|
2
|
+
const { BUDGETSMS_USERNAME, BUDGETSMS_USERID, BUDGETSMS_HANDLE } = process.env;
|
|
3
|
+
// BudgetSMS Plugin - Verified against official API documentation
|
|
4
|
+
// Note: BudgetSMS API has a quirk where it returns error 1001 (authentication failed)
|
|
5
|
+
// when you have insufficient credit, instead of the correct error 1003.
|
|
6
|
+
const BudgetSMSWorker = {
|
|
7
|
+
...WorkerAdapter,
|
|
8
|
+
key: 'shop.unchained.worker-plugin.budgetsms',
|
|
9
|
+
label: 'Send Messages through BudgetSMS',
|
|
10
|
+
version: '1.0.0',
|
|
11
|
+
type: 'BUDGETSMS',
|
|
12
|
+
doWork: async ({ from, to, text, test = false, customid, price = false, mccmnc = false, credit = false, ...params }) => {
|
|
13
|
+
try {
|
|
14
|
+
// Validate credentials
|
|
15
|
+
if (!BUDGETSMS_USERNAME || !BUDGETSMS_USERID || !BUDGETSMS_HANDLE) {
|
|
16
|
+
throw new Error('Missing BudgetSMS credentials. Please set BUDGETSMS_USERNAME, BUDGETSMS_USERID, and BUDGETSMS_HANDLE');
|
|
17
|
+
}
|
|
18
|
+
// Trim credentials to remove any whitespace
|
|
19
|
+
const username = BUDGETSMS_USERNAME.trim();
|
|
20
|
+
const userid = BUDGETSMS_USERID.trim();
|
|
21
|
+
const handle = BUDGETSMS_HANDLE.trim();
|
|
22
|
+
// Validate userid is numeric only
|
|
23
|
+
if (!/^\d+$/.test(userid)) {
|
|
24
|
+
throw new Error('BUDGETSMS_USERID must be numeric only. Found: ' + userid);
|
|
25
|
+
}
|
|
26
|
+
// Choose endpoint based on test mode
|
|
27
|
+
const url = test ? 'https://api.budgetsms.net/testsms/' : 'https://api.budgetsms.net/sendsms/';
|
|
28
|
+
// Format phone number according to E.164 (no + or 00, no spaces/dashes)
|
|
29
|
+
const formattedTo = to.replace(/^\+|^00/, '').replace(/[\s-]/g, '');
|
|
30
|
+
// Build query parameters
|
|
31
|
+
const queryParams = new URLSearchParams({
|
|
32
|
+
username: username,
|
|
33
|
+
userid: userid,
|
|
34
|
+
handle: handle,
|
|
35
|
+
msg: text || '', // Note: parameter is 'msg' not 'text'
|
|
36
|
+
from: from || '',
|
|
37
|
+
to: formattedTo,
|
|
38
|
+
...(customid && { customid }),
|
|
39
|
+
...(!test && price && { price: '1' }), // Price info only for real sends
|
|
40
|
+
...(!test && mccmnc && { mccmnc: '1' }), // Carrier info only for real sends
|
|
41
|
+
...(!test && credit && { credit: '1' }), // Credit info only for real sends
|
|
42
|
+
...params,
|
|
43
|
+
});
|
|
44
|
+
// Make GET request
|
|
45
|
+
const fullUrl = `${url}?${queryParams.toString()}`;
|
|
46
|
+
const response = await fetch(fullUrl, {
|
|
47
|
+
method: 'GET',
|
|
48
|
+
headers: {
|
|
49
|
+
Accept: 'text/plain',
|
|
50
|
+
'User-Agent': 'Unchained/BudgetSMS-Plugin',
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
const responseText = await response.text().then((text) => text.trim());
|
|
54
|
+
// Parse response: "OK <smsid> [price] [parts] [mccmnc] [credit]" or "ERR <errorcode>"
|
|
55
|
+
if (responseText.startsWith('OK')) {
|
|
56
|
+
const parts = responseText.split(' ');
|
|
57
|
+
const result = {
|
|
58
|
+
sms_id: parts[1] || null,
|
|
59
|
+
status: test ? 'test_successful' : 'sent',
|
|
60
|
+
test_mode: test,
|
|
61
|
+
};
|
|
62
|
+
if (test) {
|
|
63
|
+
result.message = 'Test SMS validated successfully (no credit deducted)';
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Parse additional info based on parameters used
|
|
67
|
+
let index = 2;
|
|
68
|
+
if (price && parts[index] && parts[index + 1]) {
|
|
69
|
+
result.price = parseFloat(parts[index]);
|
|
70
|
+
result.parts = parseInt(parts[index + 1]);
|
|
71
|
+
index += 2;
|
|
72
|
+
}
|
|
73
|
+
if (mccmnc && parts[index]) {
|
|
74
|
+
result.mccmnc = parts[index];
|
|
75
|
+
index += 1;
|
|
76
|
+
}
|
|
77
|
+
if (credit && parts[index]) {
|
|
78
|
+
result.remaining_credit = parseFloat(parts[index]);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
success: true,
|
|
83
|
+
result,
|
|
84
|
+
error: null,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
if (responseText.startsWith('ERR')) {
|
|
88
|
+
const parts = responseText.split(' ');
|
|
89
|
+
const errorCode = parts[1] || 'UNKNOWN';
|
|
90
|
+
// Error code mappings from documentation
|
|
91
|
+
const errorMessages = {
|
|
92
|
+
'1001': 'Authentication failed OR insufficient credit (BudgetSMS returns 1001 for both)',
|
|
93
|
+
'1002': 'Account not active',
|
|
94
|
+
'1003': 'Insufficient credit',
|
|
95
|
+
'1004': 'No access to this API',
|
|
96
|
+
'1005': 'No handle provided',
|
|
97
|
+
'1006': 'No UserID provided',
|
|
98
|
+
'1007': 'No Username provided',
|
|
99
|
+
'2001': 'SMS message text is empty',
|
|
100
|
+
'2002': 'SMS numeric senderid can be max. 16 numbers',
|
|
101
|
+
'2003': 'SMS alphanumeric sender can be max. 11 characters',
|
|
102
|
+
'2004': 'SMS senderid is empty or invalid',
|
|
103
|
+
'2005': 'Destination number is too short',
|
|
104
|
+
'2006': 'Destination is not numeric',
|
|
105
|
+
'2007': 'Destination is empty',
|
|
106
|
+
'2008': 'SMS text is not OK (check encoding?)',
|
|
107
|
+
'2009': 'Parameter issue',
|
|
108
|
+
'2010': 'Destination number is invalidly formatted',
|
|
109
|
+
'2011': 'Destination is invalid',
|
|
110
|
+
'2012': 'SMS message text is too long',
|
|
111
|
+
'2013': 'SMS message is invalid',
|
|
112
|
+
'2014': 'SMS CustomID is used before',
|
|
113
|
+
'2015': 'Charset problem',
|
|
114
|
+
'2016': 'Invalid UTF-8 encoding',
|
|
115
|
+
'3001': 'No route to destination',
|
|
116
|
+
'3002': 'No routes are setup',
|
|
117
|
+
'3003': 'Invalid destination',
|
|
118
|
+
'4001': 'System error, related to customid',
|
|
119
|
+
'4002': 'System error, temporary issue',
|
|
120
|
+
};
|
|
121
|
+
// Special handling for 1001 error
|
|
122
|
+
let message = errorMessages[errorCode] || `Unknown error code: ${errorCode}`;
|
|
123
|
+
if (errorCode === '1001') {
|
|
124
|
+
message += '. Note: Check your account balance - BudgetSMS may return 1001 when credit is 0.';
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
error: {
|
|
129
|
+
name: 'BUDGETSMS_ERROR',
|
|
130
|
+
code: errorCode,
|
|
131
|
+
message,
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// Unexpected response
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
error: {
|
|
139
|
+
name: 'BUDGETSMS_ERROR',
|
|
140
|
+
message: 'Unexpected response format from BudgetSMS API',
|
|
141
|
+
response: responseText,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
error: {
|
|
149
|
+
name: err.name,
|
|
150
|
+
message: err.message,
|
|
151
|
+
stack: err.stack,
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
WorkerDirector.registerAdapter(BudgetSMSWorker);
|
|
158
|
+
// Environment variables needed:
|
|
159
|
+
// BUDGETSMS_USERNAME=your_username (alphanumeric)
|
|
160
|
+
// BUDGETSMS_USERID=your_userid (NUMERIC ONLY - found in BudgetSMS control panel)
|
|
161
|
+
// BUDGETSMS_HANDLE=your_api_handle (alphanumeric - found in BudgetSMS control panel)
|
|
162
|
+
// IMPORTANT: The userid MUST be numeric only. You can find it in the BudgetSMS control panel after login.
|
|
163
|
+
// Example: BUDGETSMS_USERID=12345 (NOT "user12345" or any non-numeric value)
|
|
164
|
+
// Usage examples:
|
|
165
|
+
//
|
|
166
|
+
// Send real SMS (requires credits):
|
|
167
|
+
// await WorkerDirector.doWork({
|
|
168
|
+
// type: 'BUDGETSMS',
|
|
169
|
+
// from: 'YourCompany',
|
|
170
|
+
// to: '+41791234567',
|
|
171
|
+
// text: 'Your message here',
|
|
172
|
+
// price: true, // Get price info
|
|
173
|
+
// credit: true, // Get remaining credit
|
|
174
|
+
// });
|
|
175
|
+
//
|
|
176
|
+
// Test SMS (no credit deducted):
|
|
177
|
+
// await WorkerDirector.doWork({
|
|
178
|
+
// type: 'BUDGETSMS',
|
|
179
|
+
// test: true,
|
|
180
|
+
// from: 'YourCompany',
|
|
181
|
+
// to: '+41791234567',
|
|
182
|
+
// text: 'Test message',
|
|
183
|
+
// });
|
|
184
|
+
//
|
|
185
|
+
// IMPORTANT: If you get error 1001, it could mean either:
|
|
186
|
+
// 1. Authentication failed (wrong credentials)
|
|
187
|
+
// 2. Insufficient credit (0 balance)
|
|
188
|
+
// Use the checkBudgetSmsCredentials() helper to verify which one it is.
|
|
189
|
+
// Helper function to check credentials and balance
|
|
190
|
+
export async function checkBudgetSmsCredentials() {
|
|
191
|
+
const url = 'https://api.budgetsms.net/checkcredit/';
|
|
192
|
+
const username = process.env.BUDGETSMS_USERNAME?.trim();
|
|
193
|
+
const userid = process.env.BUDGETSMS_USERID?.trim();
|
|
194
|
+
const handle = process.env.BUDGETSMS_HANDLE?.trim();
|
|
195
|
+
if (!username || !userid || !handle) {
|
|
196
|
+
return { error: 'Missing credentials' };
|
|
197
|
+
}
|
|
198
|
+
if (!/^\d+$/.test(userid)) {
|
|
199
|
+
return { error: 'UserID must be numeric only' };
|
|
200
|
+
}
|
|
201
|
+
const queryParams = new URLSearchParams({ username, userid, handle });
|
|
202
|
+
try {
|
|
203
|
+
const response = await fetch(`${url}?${queryParams.toString()}`, { method: 'GET' });
|
|
204
|
+
const text = await response.text();
|
|
205
|
+
if (text.startsWith('OK')) {
|
|
206
|
+
const credit = parseFloat(text.split(' ')[1]) || 0;
|
|
207
|
+
return { success: true, credit };
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
return { error: text };
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
return { error: err.message };
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=budgetsms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgetsms.js","sourceRoot":"","sources":["../../src/worker/budgetsms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEpF,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAE/E,iEAAiE;AACjE,sFAAsF;AACtF,wEAAwE;AACxE,MAAM,eAAe,GAajB;IACF,GAAG,aAAa;IAEhB,GAAG,EAAE,wCAAwC;IAC7C,KAAK,EAAE,iCAAiC;IACxC,OAAO,EAAE,OAAO;IAEhB,IAAI,EAAE,WAAW;IAEjB,MAAM,EAAE,KAAK,EAAE,EACb,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,IAAI,GAAG,KAAK,EACZ,QAAQ,EACR,KAAK,GAAG,KAAK,EACb,MAAM,GAAG,KAAK,EACd,MAAM,GAAG,KAAK,EACd,GAAG,MAAM,EACV,EAAE,EAAE;QACH,IAAI,CAAC;YACH,uBAAuB;YACvB,IAAI,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;YACJ,CAAC;YAED,4CAA4C;YAC5C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;YAEvC,kCAAkC;YAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,gDAAgD,GAAG,MAAM,CAAC,CAAC;YAC7E,CAAC;YAED,qCAAqC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,oCAAoC,CAAC;YAE/F,wEAAwE;YACxE,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAEpE,yBAAyB;YACzB,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;gBACtC,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,sCAAsC;gBACvD,IAAI,EAAE,IAAI,IAAI,EAAE;gBAChB,EAAE,EAAE,WAAW;gBACf,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC7B,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,iCAAiC;gBACxE,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,mCAAmC;gBAC5E,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,kCAAkC;gBAC3E,GAAG,MAAM;aACV,CAAC,CAAC;YAEH,mBAAmB;YACnB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;YAEnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;gBACpC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,MAAM,EAAE,YAAY;oBACpB,YAAY,EAAE,4BAA4B;iBAC3C;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAEvE,sFAAsF;YACtF,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,MAAM,GAAQ;oBAClB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;oBACxB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM;oBACzC,SAAS,EAAE,IAAI;iBAChB,CAAC;gBAEF,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,CAAC,OAAO,GAAG,sDAAsD,CAAC;gBAC1E,CAAC;qBAAM,CAAC;oBACN,iDAAiD;oBACjD,IAAI,KAAK,GAAG,CAAC,CAAC;oBACd,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;wBAC9C,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;wBACxC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC1C,KAAK,IAAI,CAAC,CAAC;oBACb,CAAC;oBACD,IAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC7B,KAAK,IAAI,CAAC,CAAC;oBACb,CAAC;oBACD,IAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3B,MAAM,CAAC,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM;oBACN,KAAK,EAAE,IAAI;iBACZ,CAAC;YACJ,CAAC;YAED,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;gBAExC,yCAAyC;gBACzC,MAAM,aAAa,GAA2B;oBAC5C,MAAM,EAAE,gFAAgF;oBACxF,MAAM,EAAE,oBAAoB;oBAC5B,MAAM,EAAE,qBAAqB;oBAC7B,MAAM,EAAE,uBAAuB;oBAC/B,MAAM,EAAE,oBAAoB;oBAC5B,MAAM,EAAE,oBAAoB;oBAC5B,MAAM,EAAE,sBAAsB;oBAC9B,MAAM,EAAE,2BAA2B;oBACnC,MAAM,EAAE,6CAA6C;oBACrD,MAAM,EAAE,mDAAmD;oBAC3D,MAAM,EAAE,kCAAkC;oBAC1C,MAAM,EAAE,iCAAiC;oBACzC,MAAM,EAAE,4BAA4B;oBACpC,MAAM,EAAE,sBAAsB;oBAC9B,MAAM,EAAE,sCAAsC;oBAC9C,MAAM,EAAE,iBAAiB;oBACzB,MAAM,EAAE,2CAA2C;oBACnD,MAAM,EAAE,wBAAwB;oBAChC,MAAM,EAAE,8BAA8B;oBACtC,MAAM,EAAE,wBAAwB;oBAChC,MAAM,EAAE,6BAA6B;oBACrC,MAAM,EAAE,iBAAiB;oBACzB,MAAM,EAAE,wBAAwB;oBAChC,MAAM,EAAE,yBAAyB;oBACjC,MAAM,EAAE,qBAAqB;oBAC7B,MAAM,EAAE,qBAAqB;oBAC7B,MAAM,EAAE,mCAAmC;oBAC3C,MAAM,EAAE,+BAA+B;iBACxC,CAAC;gBAEF,kCAAkC;gBAClC,IAAI,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,uBAAuB,SAAS,EAAE,CAAC;gBAC7E,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;oBACzB,OAAO,IAAI,kFAAkF,CAAC;gBAChG,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,iBAAiB;wBACvB,IAAI,EAAE,SAAS;wBACf,OAAO;qBACR;iBACF,CAAC;YACJ,CAAC;YAED,sBAAsB;YACtB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,+CAA+C;oBACxD,QAAQ,EAAE,YAAY;iBACvB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;iBACjB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC;AAEF,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;AAEhD,gCAAgC;AAChC,kDAAkD;AAClD,iFAAiF;AACjF,qFAAqF;AAErF,0GAA0G;AAC1G,6EAA6E;AAE7E,kBAAkB;AAClB,EAAE;AACF,oCAAoC;AACpC,gCAAgC;AAChC,uBAAuB;AACvB,yBAAyB;AACzB,wBAAwB;AACxB,+BAA+B;AAC/B,mCAAmC;AACnC,0CAA0C;AAC1C,MAAM;AACN,EAAE;AACF,iCAAiC;AACjC,gCAAgC;AAChC,uBAAuB;AACvB,gBAAgB;AAChB,yBAAyB;AACzB,wBAAwB;AACxB,0BAA0B;AAC1B,MAAM;AACN,EAAE;AACF,0DAA0D;AAC1D,+CAA+C;AAC/C,qCAAqC;AACrC,wEAAwE;AAExE,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,GAAG,GAAG,wCAAwC,CAAC;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAEpD,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulk-import.d.ts","sourceRoot":"","sources":["../../src/worker/bulk-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"bulk-import.d.ts","sourceRoot":"","sources":["../../src/worker/bulk-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKpF,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAqErE,CAAC"}
|
|
@@ -1,35 +1,6 @@
|
|
|
1
1
|
import { WorkerDirector, WorkerAdapter } from '@unchainedshop/core';
|
|
2
2
|
import { createLogger } from '@unchainedshop/logger';
|
|
3
|
-
|
|
4
|
-
import { EventIterator } from 'event-iterator';
|
|
5
|
-
const logger = createLogger('unchained:worker:bulk-import');
|
|
6
|
-
const streamPayloadToBulkImporter = async (bulkImporter, payloadId, unchainedAPI) => {
|
|
7
|
-
logger.trace(`parseAsync start`);
|
|
8
|
-
const readStream = await unchainedAPI.services.files.createDownloadStream({ fileId: payloadId });
|
|
9
|
-
if (!readStream) {
|
|
10
|
-
throw new Error('The current file adapter does not support streams when downloading required for streamed events. Please use a different file adapter.');
|
|
11
|
-
}
|
|
12
|
-
const eventIterator = new EventIterator((queue) => {
|
|
13
|
-
const jsonStream = JSONStream.parse('events.*'); // rows, ANYTHING, doc
|
|
14
|
-
jsonStream.on('data', queue.push);
|
|
15
|
-
jsonStream.on('close', queue.stop);
|
|
16
|
-
jsonStream.on('error', queue.fail);
|
|
17
|
-
queue.on('highWater', () => readStream.pause());
|
|
18
|
-
queue.on('lowWater', () => readStream.resume());
|
|
19
|
-
readStream.pipe(jsonStream);
|
|
20
|
-
readStream.on('error', queue.fail);
|
|
21
|
-
return () => {
|
|
22
|
-
jsonStream.removeListener('data', queue.push);
|
|
23
|
-
jsonStream.removeListener('close', queue.stop);
|
|
24
|
-
jsonStream.removeListener('error', queue.fail);
|
|
25
|
-
jsonStream.destroy();
|
|
26
|
-
};
|
|
27
|
-
}, { highWaterMark: 100, lowWaterMark: 5 });
|
|
28
|
-
for await (const event of eventIterator) {
|
|
29
|
-
await bulkImporter.prepare(event, unchainedAPI);
|
|
30
|
-
}
|
|
31
|
-
logger.trace(`parseAsync done`);
|
|
32
|
-
};
|
|
3
|
+
const logger = createLogger('unchained:bulk-import');
|
|
33
4
|
export const BulkImportWorker = {
|
|
34
5
|
...WorkerAdapter,
|
|
35
6
|
key: 'shop.unchained.worker-plugin.bulk-import',
|
|
@@ -47,7 +18,13 @@ export const BulkImportWorker = {
|
|
|
47
18
|
});
|
|
48
19
|
if (rawPayload.payloadId) {
|
|
49
20
|
// stream payload from gridfs
|
|
50
|
-
|
|
21
|
+
const readStream = await unchainedAPI.services.files.createDownloadStream({
|
|
22
|
+
fileId: rawPayload.payloadId,
|
|
23
|
+
});
|
|
24
|
+
if (!readStream) {
|
|
25
|
+
throw new Error('Could not create download stream from uploaded file');
|
|
26
|
+
}
|
|
27
|
+
await unchainedAPI.bulkImporter.pipeEventStream(readStream, bulkImporter, unchainedAPI);
|
|
51
28
|
}
|
|
52
29
|
else {
|
|
53
30
|
const { events } = rawPayload;
|
|
@@ -55,6 +32,7 @@ export const BulkImportWorker = {
|
|
|
55
32
|
throw new Error('No events submitted');
|
|
56
33
|
await events.reduce(async (currentEventPromise, nextEvent) => {
|
|
57
34
|
await currentEventPromise;
|
|
35
|
+
await bulkImporter.validate(nextEvent);
|
|
58
36
|
return bulkImporter.prepare(nextEvent, unchainedAPI);
|
|
59
37
|
}, Promise.resolve());
|
|
60
38
|
}
|
|
@@ -63,13 +41,13 @@ export const BulkImportWorker = {
|
|
|
63
41
|
if (error) {
|
|
64
42
|
return {
|
|
65
43
|
success: false,
|
|
66
|
-
result,
|
|
44
|
+
result: result,
|
|
67
45
|
error,
|
|
68
46
|
};
|
|
69
47
|
}
|
|
70
48
|
return {
|
|
71
49
|
success: true,
|
|
72
|
-
result,
|
|
50
|
+
result: result,
|
|
73
51
|
};
|
|
74
52
|
}
|
|
75
53
|
catch (err) {
|