@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.
Files changed (321) hide show
  1. package/lib/accounts/google-oauth.d.ts +4 -0
  2. package/lib/accounts/google-oauth.d.ts.map +1 -0
  3. package/lib/accounts/google-oauth.js +145 -0
  4. package/lib/accounts/google-oauth.js.map +1 -0
  5. package/lib/accounts/linkedin-oauth.d.ts +4 -0
  6. package/lib/accounts/linkedin-oauth.d.ts.map +1 -0
  7. package/lib/accounts/linkedin-oauth.js +82 -0
  8. package/lib/accounts/linkedin-oauth.js.map +1 -0
  9. package/lib/delivery/send-message.js.map +1 -1
  10. package/lib/enrollments/licensed.js +15 -2
  11. package/lib/enrollments/licensed.js.map +1 -1
  12. package/lib/files/gridfs/adapter.d.ts.map +1 -1
  13. package/lib/files/gridfs/adapter.js +11 -8
  14. package/lib/files/gridfs/adapter.js.map +1 -1
  15. package/lib/files/gridfs/gridfs-adapter.d.ts +3 -0
  16. package/lib/files/gridfs/gridfs-adapter.d.ts.map +1 -0
  17. package/lib/files/gridfs/gridfs-adapter.js +97 -0
  18. package/lib/files/gridfs/gridfs-adapter.js.map +1 -0
  19. package/lib/files/gridfs/gridfs-webhook.d.ts +11 -0
  20. package/lib/files/gridfs/gridfs-webhook.d.ts.map +1 -0
  21. package/lib/files/gridfs/gridfs-webhook.js +84 -0
  22. package/lib/files/gridfs/gridfs-webhook.js.map +1 -0
  23. package/lib/files/gridfs/handler-express.d.ts.map +1 -1
  24. package/lib/files/gridfs/handler-express.js +21 -25
  25. package/lib/files/gridfs/handler-express.js.map +1 -1
  26. package/lib/files/gridfs/handler-fastify.d.ts.map +1 -1
  27. package/lib/files/gridfs/handler-fastify.js +50 -13
  28. package/lib/files/gridfs/handler-fastify.js.map +1 -1
  29. package/lib/files/gridfs/module.d.ts +2 -2
  30. package/lib/files/minio/handler-express.d.ts.map +1 -1
  31. package/lib/files/minio/handler-express.js +4 -7
  32. package/lib/files/minio/handler-express.js.map +1 -1
  33. package/lib/files/minio/handler-fastify.js +2 -2
  34. package/lib/files/minio/handler-fastify.js.map +1 -1
  35. package/lib/files/minio/index.d.ts +1 -1
  36. package/lib/files/minio/index.d.ts.map +1 -1
  37. package/lib/files/minio/index.js +7 -7
  38. package/lib/files/minio/index.js.map +1 -1
  39. package/lib/files/minio/minio-adapter.d.ts +6 -0
  40. package/lib/files/minio/minio-adapter.d.ts.map +1 -0
  41. package/lib/files/minio/minio-adapter.js +181 -0
  42. package/lib/files/minio/minio-adapter.js.map +1 -0
  43. package/lib/files/minio/minio-webhook.d.ts +2 -0
  44. package/lib/files/minio/minio-webhook.d.ts.map +1 -0
  45. package/lib/files/minio/minio-webhook.js +33 -0
  46. package/lib/files/minio/minio-webhook.js.map +1 -0
  47. package/lib/filters/local-search.js +1 -1
  48. package/lib/filters/local-search.js.map +1 -1
  49. package/lib/filters/strict-equal.js +0 -18
  50. package/lib/filters/strict-equal.js.map +1 -1
  51. package/lib/payment/apple-iap/adapter.js +12 -10
  52. package/lib/payment/apple-iap/adapter.js.map +1 -1
  53. package/lib/payment/apple-iap/db/AppleTransactionsCollection.d.ts +1 -1
  54. package/lib/payment/apple-iap/db/AppleTransactionsCollection.d.ts.map +1 -1
  55. package/lib/payment/apple-iap/handler-express.d.ts.map +1 -1
  56. package/lib/payment/apple-iap/handler-express.js +14 -10
  57. package/lib/payment/apple-iap/handler-express.js.map +1 -1
  58. package/lib/payment/apple-iap/handler-fastify.d.ts.map +1 -1
  59. package/lib/payment/apple-iap/handler-fastify.js +15 -8
  60. package/lib/payment/apple-iap/handler-fastify.js.map +1 -1
  61. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts +9 -0
  62. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts.map +1 -0
  63. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js +17 -0
  64. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js.map +1 -0
  65. package/lib/payment/apple-iap/module.d.ts +4 -4
  66. package/lib/payment/apple-iap/module.d.ts.map +1 -1
  67. package/lib/payment/apple-iap/module.js +4 -2
  68. package/lib/payment/apple-iap/module.js.map +1 -1
  69. package/lib/payment/braintree.js +3 -1
  70. package/lib/payment/braintree.js.map +1 -1
  71. package/lib/payment/cryptopay/db/CryptopayTransactions.d.ts +1 -1
  72. package/lib/payment/cryptopay/db/CryptopayTransactions.d.ts.map +1 -1
  73. package/lib/payment/cryptopay/derive-btc-address.d.ts.map +1 -1
  74. package/lib/payment/cryptopay/derive-btc-address.js +2 -3
  75. package/lib/payment/cryptopay/derive-btc-address.js.map +1 -1
  76. package/lib/payment/cryptopay/derive-eth-address.d.ts.map +1 -1
  77. package/lib/payment/cryptopay/derive-eth-address.js +5 -3
  78. package/lib/payment/cryptopay/derive-eth-address.js.map +1 -1
  79. package/lib/payment/cryptopay/handle-webhook.js +2 -2
  80. package/lib/payment/cryptopay/handle-webhook.js.map +1 -1
  81. package/lib/payment/cryptopay/handler-express.d.ts.map +1 -1
  82. package/lib/payment/cryptopay/handler-express.js +4 -7
  83. package/lib/payment/cryptopay/handler-express.js.map +1 -1
  84. package/lib/payment/cryptopay/handler-fastify.js +1 -1
  85. package/lib/payment/cryptopay/handler-fastify.js.map +1 -1
  86. package/lib/payment/cryptopay/middleware.d.ts +2 -0
  87. package/lib/payment/cryptopay/middleware.d.ts.map +1 -0
  88. package/lib/payment/cryptopay/middleware.js +75 -0
  89. package/lib/payment/cryptopay/middleware.js.map +1 -0
  90. package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts +25 -0
  91. package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts.map +1 -0
  92. package/lib/payment/cryptopay/module/configureCryptopayModule.js +75 -0
  93. package/lib/payment/cryptopay/module/configureCryptopayModule.js.map +1 -0
  94. package/lib/payment/cryptopay/module.d.ts +2 -2
  95. package/lib/payment/cryptopay/module.d.ts.map +1 -1
  96. package/lib/payment/cryptopay/module.js +4 -4
  97. package/lib/payment/cryptopay/module.js.map +1 -1
  98. package/lib/payment/cryptopay/plugin.d.ts.map +1 -1
  99. package/lib/payment/cryptopay/plugin.js +18 -4
  100. package/lib/payment/cryptopay/plugin.js.map +1 -1
  101. package/lib/payment/datatrans-v2/handler-express.d.ts.map +1 -1
  102. package/lib/payment/datatrans-v2/handler-express.js +13 -11
  103. package/lib/payment/datatrans-v2/handler-express.js.map +1 -1
  104. package/lib/payment/datatrans-v2/handler-fastify.d.ts.map +1 -1
  105. package/lib/payment/datatrans-v2/handler-fastify.js +11 -5
  106. package/lib/payment/datatrans-v2/handler-fastify.js.map +1 -1
  107. package/lib/payment/datatrans-v2/index.js +63 -37
  108. package/lib/payment/datatrans-v2/index.js.map +1 -1
  109. package/lib/payment/datatrans-v2/middleware.d.ts +2 -0
  110. package/lib/payment/datatrans-v2/middleware.d.ts.map +1 -0
  111. package/lib/payment/datatrans-v2/middleware.js +68 -0
  112. package/lib/payment/datatrans-v2/middleware.js.map +1 -0
  113. package/lib/payment/datatrans-v2/parseRegistrationData.d.ts +1 -1
  114. package/lib/payment/datatrans-v2/parseRegistrationData.d.ts.map +1 -1
  115. package/lib/payment/paypal-checkout.js +4 -2
  116. package/lib/payment/paypal-checkout.js.map +1 -1
  117. package/lib/payment/payrexx/api/index.d.ts +1 -1
  118. package/lib/payment/payrexx/api/index.d.ts.map +1 -1
  119. package/lib/payment/payrexx/api/makeFetcher.d.ts +1 -1
  120. package/lib/payment/payrexx/api/makeFetcher.d.ts.map +1 -1
  121. package/lib/payment/payrexx/api/makeFetcher.js +1 -1
  122. package/lib/payment/payrexx/api/makeFetcher.js.map +1 -1
  123. package/lib/payment/payrexx/handler-express.d.ts.map +1 -1
  124. package/lib/payment/payrexx/handler-express.js +15 -15
  125. package/lib/payment/payrexx/handler-express.js.map +1 -1
  126. package/lib/payment/payrexx/handler-fastify.js +23 -15
  127. package/lib/payment/payrexx/handler-fastify.js.map +1 -1
  128. package/lib/payment/payrexx/index.js +21 -15
  129. package/lib/payment/payrexx/index.js.map +1 -1
  130. package/lib/payment/payrexx/middleware.d.ts +2 -0
  131. package/lib/payment/payrexx/middleware.d.ts.map +1 -0
  132. package/lib/payment/payrexx/middleware.js +86 -0
  133. package/lib/payment/payrexx/middleware.js.map +1 -0
  134. package/lib/payment/postfinance-checkout/api-client.d.ts.map +1 -1
  135. package/lib/payment/postfinance-checkout/api-client.js +7 -7
  136. package/lib/payment/postfinance-checkout/api-client.js.map +1 -1
  137. package/lib/payment/postfinance-checkout/handler-express.js +7 -8
  138. package/lib/payment/postfinance-checkout/handler-express.js.map +1 -1
  139. package/lib/payment/postfinance-checkout/handler-fastify.d.ts.map +1 -1
  140. package/lib/payment/postfinance-checkout/handler-fastify.js +6 -4
  141. package/lib/payment/postfinance-checkout/handler-fastify.js.map +1 -1
  142. package/lib/payment/postfinance-checkout/index.d.ts.map +1 -1
  143. package/lib/payment/postfinance-checkout/index.js +20 -7
  144. package/lib/payment/postfinance-checkout/index.js.map +1 -1
  145. package/lib/payment/postfinance-checkout/middleware.d.ts +2 -0
  146. package/lib/payment/postfinance-checkout/middleware.d.ts.map +1 -0
  147. package/lib/payment/postfinance-checkout/middleware.js +38 -0
  148. package/lib/payment/postfinance-checkout/middleware.js.map +1 -0
  149. package/lib/payment/saferpay/adapter.d.ts.map +1 -1
  150. package/lib/payment/saferpay/adapter.js +9 -0
  151. package/lib/payment/saferpay/adapter.js.map +1 -1
  152. package/lib/payment/saferpay/handler-express.d.ts.map +1 -1
  153. package/lib/payment/saferpay/handler-express.js +10 -8
  154. package/lib/payment/saferpay/handler-express.js.map +1 -1
  155. package/lib/payment/saferpay/handler-fastify.d.ts.map +1 -1
  156. package/lib/payment/saferpay/handler-fastify.js +11 -5
  157. package/lib/payment/saferpay/handler-fastify.js.map +1 -1
  158. package/lib/payment/saferpay/middleware.d.ts +2 -0
  159. package/lib/payment/saferpay/middleware.d.ts.map +1 -0
  160. package/lib/payment/saferpay/middleware.js +57 -0
  161. package/lib/payment/saferpay/middleware.js.map +1 -0
  162. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts +10 -0
  163. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts.map +1 -0
  164. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js +24 -0
  165. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js.map +1 -0
  166. package/lib/payment/saferpay/module.d.ts +2 -2
  167. package/lib/payment/stripe/handler-express.js +25 -17
  168. package/lib/payment/stripe/handler-express.js.map +1 -1
  169. package/lib/payment/stripe/handler-fastify.d.ts.map +1 -1
  170. package/lib/payment/stripe/handler-fastify.js +33 -12
  171. package/lib/payment/stripe/handler-fastify.js.map +1 -1
  172. package/lib/payment/stripe/index.js +21 -15
  173. package/lib/payment/stripe/index.js.map +1 -1
  174. package/lib/payment/stripe/middleware.d.ts +6 -0
  175. package/lib/payment/stripe/middleware.d.ts.map +1 -0
  176. package/lib/payment/stripe/middleware.js +114 -0
  177. package/lib/payment/stripe/middleware.js.map +1 -0
  178. package/lib/payment/stripe/stripe.d.ts +2 -2
  179. package/lib/payment/stripe/stripe.d.ts.map +1 -1
  180. package/lib/payment/stripe/stripe.js +14 -11
  181. package/lib/payment/stripe/stripe.js.map +1 -1
  182. package/lib/plugins-index.d.ts +48 -0
  183. package/lib/plugins-index.d.ts.map +1 -0
  184. package/lib/plugins-index.js +107 -0
  185. package/lib/plugins-index.js.map +1 -0
  186. package/lib/presets/all.d.ts +8 -6
  187. package/lib/presets/all.d.ts.map +1 -1
  188. package/lib/presets/all.js +3 -1
  189. package/lib/presets/all.js.map +1 -1
  190. package/lib/pricing/delivery-swiss-tax.d.ts.map +1 -1
  191. package/lib/pricing/delivery-swiss-tax.js +13 -20
  192. package/lib/pricing/delivery-swiss-tax.js.map +1 -1
  193. package/lib/pricing/order-discount.d.ts.map +1 -1
  194. package/lib/pricing/order-discount.js +5 -3
  195. package/lib/pricing/order-discount.js.map +1 -1
  196. package/lib/pricing/order-round.d.ts.map +1 -1
  197. package/lib/pricing/order-round.js +4 -3
  198. package/lib/pricing/order-round.js.map +1 -1
  199. package/lib/pricing/product-catalog-price-options.d.ts +2 -0
  200. package/lib/pricing/product-catalog-price-options.d.ts.map +1 -0
  201. package/lib/pricing/product-catalog-price-options.js +52 -0
  202. package/lib/pricing/product-catalog-price-options.js.map +1 -0
  203. package/lib/pricing/product-catalog-price.d.ts.map +1 -1
  204. package/lib/pricing/product-catalog-price.js +26 -2
  205. package/lib/pricing/product-catalog-price.js.map +1 -1
  206. package/lib/pricing/product-price-rateconversion.js +3 -3
  207. package/lib/pricing/product-price-rateconversion.js.map +1 -1
  208. package/lib/pricing/product-swiss-tax.d.ts +1 -5
  209. package/lib/pricing/product-swiss-tax.d.ts.map +1 -1
  210. package/lib/pricing/product-swiss-tax.js +26 -22
  211. package/lib/pricing/product-swiss-tax.js.map +1 -1
  212. package/lib/pricing/tax/ch.d.ts +7 -2
  213. package/lib/pricing/tax/ch.d.ts.map +1 -1
  214. package/lib/pricing/tax/ch.js +16 -1
  215. package/lib/pricing/tax/ch.js.map +1 -1
  216. package/lib/pricing/utils/isDeliveryAddressInCountry.d.ts +7 -0
  217. package/lib/pricing/utils/isDeliveryAddressInCountry.d.ts.map +1 -0
  218. package/lib/pricing/utils/isDeliveryAddressInCountry.js +13 -0
  219. package/lib/pricing/utils/isDeliveryAddressInCountry.js.map +1 -0
  220. package/lib/warehousing/eth-minter.js +23 -11
  221. package/lib/warehousing/eth-minter.js.map +1 -1
  222. package/lib/worker/budgetsms.d.ts +10 -0
  223. package/lib/worker/budgetsms.d.ts.map +1 -0
  224. package/lib/worker/budgetsms.js +217 -0
  225. package/lib/worker/budgetsms.js.map +1 -0
  226. package/lib/worker/bulk-import.d.ts +1 -1
  227. package/lib/worker/bulk-import.d.ts.map +1 -1
  228. package/lib/worker/bulk-import.js +11 -33
  229. package/lib/worker/bulk-import.js.map +1 -1
  230. package/lib/worker/bulkgate.d.ts +2 -0
  231. package/lib/worker/bulkgate.d.ts.map +1 -0
  232. package/lib/worker/bulkgate.js +104 -0
  233. package/lib/worker/bulkgate.js.map +1 -0
  234. package/lib/worker/email.d.ts.map +1 -1
  235. package/lib/worker/email.js +25 -7
  236. package/lib/worker/email.js.map +1 -1
  237. package/lib/worker/enrollment-order-generator.d.ts.map +1 -1
  238. package/lib/worker/enrollment-order-generator.js +7 -49
  239. package/lib/worker/enrollment-order-generator.js.map +1 -1
  240. package/lib/worker/error-notifications.js +1 -1
  241. package/lib/worker/error-notifications.js.map +1 -1
  242. package/lib/worker/export-token.d.ts.map +1 -1
  243. package/lib/worker/export-token.js +0 -1
  244. package/lib/worker/export-token.js.map +1 -1
  245. package/lib/worker/message.d.ts +1 -1
  246. package/lib/worker/message.d.ts.map +1 -1
  247. package/lib/worker/message.js +4 -2
  248. package/lib/worker/message.js.map +1 -1
  249. package/lib/worker/sms.js +17 -17
  250. package/lib/worker/sms.js.map +1 -1
  251. package/lib/worker/twilio.d.ts +2 -0
  252. package/lib/worker/twilio.d.ts.map +1 -0
  253. package/lib/worker/twilio.js +60 -0
  254. package/lib/worker/twilio.js.map +1 -0
  255. package/package.json +22 -33
  256. package/src/delivery/send-message.ts +1 -1
  257. package/src/enrollments/licensed.ts +15 -2
  258. package/src/files/gridfs/adapter.ts +12 -7
  259. package/src/files/gridfs/handler-express.ts +23 -25
  260. package/src/files/gridfs/handler-fastify.ts +53 -14
  261. package/src/files/minio/handler-express.ts +4 -7
  262. package/src/files/minio/handler-fastify.ts +2 -2
  263. package/src/files/minio/index.ts +16 -16
  264. package/src/filters/local-search.ts +1 -1
  265. package/src/filters/strict-equal.ts +0 -21
  266. package/src/payment/apple-iap/adapter.ts +12 -14
  267. package/src/payment/apple-iap/db/AppleTransactionsCollection.ts +1 -1
  268. package/src/payment/apple-iap/handler-express.ts +17 -11
  269. package/src/payment/apple-iap/handler-fastify.ts +19 -9
  270. package/src/payment/apple-iap/module.ts +9 -4
  271. package/src/payment/braintree.ts +4 -1
  272. package/src/payment/cryptopay/db/CryptopayTransactions.ts +1 -1
  273. package/src/payment/cryptopay/derive-btc-address.ts +1 -3
  274. package/src/payment/cryptopay/derive-eth-address.ts +5 -3
  275. package/src/payment/cryptopay/handle-webhook.ts +6 -6
  276. package/src/payment/cryptopay/handler-express.ts +4 -7
  277. package/src/payment/cryptopay/handler-fastify.ts +1 -1
  278. package/src/payment/cryptopay/module.ts +8 -5
  279. package/src/payment/cryptopay/plugin.ts +21 -4
  280. package/src/payment/datatrans-v2/handler-express.ts +17 -12
  281. package/src/payment/datatrans-v2/handler-fastify.ts +15 -6
  282. package/src/payment/datatrans-v2/index.ts +82 -50
  283. package/src/payment/paypal-checkout.ts +4 -2
  284. package/src/payment/payrexx/api/index.ts +1 -1
  285. package/src/payment/payrexx/api/makeFetcher.ts +2 -2
  286. package/src/payment/payrexx/handler-express.ts +24 -32
  287. package/src/payment/payrexx/handler-fastify.ts +33 -33
  288. package/src/payment/payrexx/index.ts +26 -16
  289. package/src/payment/postfinance-checkout/api-client.ts +13 -8
  290. package/src/payment/postfinance-checkout/handler-express.ts +8 -8
  291. package/src/payment/postfinance-checkout/handler-fastify.ts +7 -4
  292. package/src/payment/postfinance-checkout/index.ts +20 -8
  293. package/src/payment/saferpay/adapter.ts +14 -2
  294. package/src/payment/saferpay/handler-express.ts +14 -13
  295. package/src/payment/saferpay/handler-fastify.ts +14 -9
  296. package/src/payment/stripe/handler-express.ts +33 -33
  297. package/src/payment/stripe/handler-fastify.ts +40 -27
  298. package/src/payment/stripe/index.ts +18 -16
  299. package/src/payment/stripe/stripe.ts +17 -12
  300. package/src/presets/all.ts +3 -1
  301. package/src/pricing/delivery-swiss-tax.ts +16 -31
  302. package/src/pricing/order-discount.ts +6 -4
  303. package/src/pricing/order-round.ts +5 -4
  304. package/src/pricing/product-catalog-price-options.ts +67 -0
  305. package/src/pricing/product-catalog-price.ts +25 -2
  306. package/src/pricing/product-price-rateconversion.ts +3 -3
  307. package/src/pricing/product-swiss-tax.ts +39 -40
  308. package/src/pricing/tax/ch.ts +33 -7
  309. package/src/pricing/utils/isDeliveryAddressInCountry.test.ts +106 -0
  310. package/src/pricing/utils/isDeliveryAddressInCountry.ts +26 -0
  311. package/src/warehousing/eth-minter.ts +30 -11
  312. package/src/worker/budgetsms.ts +268 -0
  313. package/src/worker/bulk-import.ts +12 -53
  314. package/src/worker/bulkgate.ts +138 -0
  315. package/src/worker/email.ts +30 -8
  316. package/src/worker/enrollment-order-generator.ts +14 -72
  317. package/src/worker/error-notifications.ts +2 -2
  318. package/src/worker/export-token.ts +0 -1
  319. package/src/worker/message.ts +5 -3
  320. package/src/worker/{sms.ts → twilio.ts} +15 -26
  321. 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
- export const getTaxRate = (context) => {
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
- if (!(await isDeliveryAddressInSwitzerland(context))) {
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
- const taxRate = getTaxRate(context);
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":"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"}
1
+ {"version":3,"file":"product-swiss-tax.js","sourceRoot":"","sources":["../../src/pricing/product-swiss-tax.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,10 @@
1
- export declare const SwissTaxCategories: Record<string, {
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":"AAIA,eAAO,MAAM,kBAAkB,EAAE,MAAM,CACrC,MAAM,EACN;IACE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;CACxC,CA6BF,CAAC"}
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"}
@@ -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":"AAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAE7D,oFAAoF;AAEpF,MAAM,CAAC,MAAM,kBAAkB,GAM3B;IACF,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"}
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
- chainTokenId: tokenId,
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 chainTokenId unique!
54
- const items = new Array(orderPosition?.quantity).fill(null).map((_, i) => ({
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
- chainTokenId: Number(parseInt(MINTER_TOKEN_OFFSET, 10) + tokensCreated + (i + 1)).toString(),
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
- chainTokenId: tokenId,
77
+ tokenSerialNumber: tokenId,
69
78
  contractAddress,
70
- quantity: orderPosition?.quantity,
79
+ quantity: orderPosition.quantity,
71
80
  chainId,
72
81
  meta,
73
82
  },
74
83
  ];
75
84
  },
76
- tokenMetadata: async (chainTokenId) => {
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 fileUploadAdapter = getFileAdapter();
89
- const signedUrl = await fileUploadAdapter.createDownloadURL(file);
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} #${chainTokenId}`;
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,EAKL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,EAAE,mBAAmB,GAAG,GAAG,EAAE,QAAQ,GAAG,uBAAuB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAEtF,MAAM,SAAS,GAAwB;IACrC,GAAG,kBAAkB;IAErB,GAAG,EAAE,4CAA4C;IACjD,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,iBAAiB;IACxB,UAAU,EAAE,CAAC;IAEb,oBAAoB,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAEtD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QACtB,OAAO,IAAI,KAAK,uBAAuB,CAAC,OAAO,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE;QAClC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAC5C,CAAC;QAChB,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,GACjF,OAAO,EAAE,YAAY,IAAI,EAAE,CAAC;QAE9B,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;YAClC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,CACzD,gBAAgB,KAAK,uBAAuB,CAAC,MAAM;gBACjD,CAAC,CAAC,EAAE,eAAe,EAAE,gBAAgB,EAAE;gBACvC,CAAC,CAAC;oBACE,eAAe,EAAE,gBAAgB;oBACjC,YAAY,EAAE,OAAO;iBACtB,CACN,CAAC;YACF,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;gBAC5D,OAAO,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACjC,CAAC,EAAE,CAAC,CAAC,CAAC;YACN,OAAO,aAAa,CAAC;QACvB,CAAC,CAAC;QAEF,OAAO;YACL,GAAG,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC;YAErD,QAAQ;gBACN,OAAO,OAAO,EAAE,IAAI,KAAK,YAAY,CAAC,gBAAgB,CAAC;YACzD,CAAC;YAED,kBAAkB;gBAChB,OAAO,IAA+B,CAAC;YACzC,CAAC;YAED,KAAK,EAAE,KAAK,IAAI,EAAE;gBAChB,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBAC/C,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;YAED,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,uBAAuB;gBACvB,0BAA0B;gBAC1B,mBAAmB;gBAEnB,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,SAAS,CAAC;gBACvF,MAAM,IAAI,GAAG,EAAE,gBAAgB,EAAE,CAAC;gBAClC,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBAE/C,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;oBAClC,0DAA0D;oBAC1D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;wBACzE,GAAG,EAAE,kBAAkB,EAAE;wBACzB,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;wBAC5F,eAAe;wBACf,QAAQ,EAAE,CAAC;wBACX,OAAO;wBACP,IAAI;qBACL,CAAC,CAAC,CAAC;oBACJ,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,8CAA8C;gBAC9C,OAAO;oBACL;wBACE,GAAG,EAAE,kBAAkB,EAAE;wBACzB,YAAY,EAAE,OAAO;wBACrB,eAAe;wBACf,QAAQ,EAAE,aAAa,EAAE,QAAQ;wBACjC,OAAO;wBACP,IAAI;qBACL;iBACF,CAAC;YACJ,CAAC;YAED,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;gBACpC,+BAA+B;gBAC/B,yEAAyE;gBACzE,yCAAyC;gBAEzC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC;oBACzD,eAAe,EAAE,KAAK;iBACvB,CAAC,CAAC;gBAEH,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;oBAClE,SAAS,EAAE,OAAO,CAAC,GAAG;oBACtB,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,UAAU,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAE1F,MAAM,iBAAiB,GAAG,cAAc,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAClE,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;oBAC1D,SAAS,EAAE,OAAO,CAAC,GAAG;oBACtB,MAAM,EAAE,MAAM,IAAI,YAAY;iBAC/B,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;gBAE9C,MAAM,uBAAuB,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1F,MAAM,YAAY,GAAG,uBAAuB;oBAC1C,CAAC,CAAC;wBACE,GAAG,EAAE,GAAG,QAAQ,iBAAiB,OAAO,CAAC,GAAG,aAAa,OAAO,OAAO;wBACvE,OAAO,EAAE,YAAY,CAAC,QAAQ;wBAC9B,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;qBAClD;oBACH,CAAC,CAAC,SAAS,CAAC;gBAEd,OAAO;oBACL,IAAI;oBACJ,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,KAAK,EAAE,GAAG;oBACV,UAAU,EAAE,qBAAqB;oBACjC,YAAY;oBACZ,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;iBACvB,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,mBAAmB,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"eth-minter.js","sourceRoot":"","sources":["../../src/warehousing/eth-minter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare function checkBudgetSmsCredentials(): Promise<{
2
+ success: boolean;
3
+ credit: number;
4
+ error?: undefined;
5
+ } | {
6
+ error: any;
7
+ success?: undefined;
8
+ credit?: undefined;
9
+ }>;
10
+ //# sourceMappingURL=budgetsms.d.ts.map
@@ -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":"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"}
@@ -1,3 +1,3 @@
1
1
  import { IWorkerAdapter } from '@unchainedshop/core';
2
- export declare const BulkImportWorker: IWorkerAdapter<any, Record<string, unknown>>;
2
+ export declare const BulkImportWorker: IWorkerAdapter<any, Record<string, any>>;
3
3
  //# sourceMappingURL=bulk-import.d.ts.map
@@ -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;AAqDpF,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8DzE,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
- import JSONStream from 'JSONStream';
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
- await streamPayloadToBulkImporter(bulkImporter, rawPayload.payloadId, unchainedAPI);
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) {