@unchainedshop/plugins 4.0.0-rc.13 → 4.0.0-rc.15

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.
@@ -8,24 +8,6 @@ const StrictQualFilter = {
8
8
  actions: (params) => {
9
9
  return {
10
10
  ...FilterAdapter.actions(params),
11
- searchProducts: async ({ productIds }) => {
12
- // Search Products
13
- const { queryString } = params.searchQuery;
14
- if (!queryString && !productIds) {
15
- // If no query string is provided, return all product IDs
16
- return params.modules.products.findProductIds({});
17
- }
18
- return productIds;
19
- },
20
- searchAssortments: async ({ assortmentIds }) => {
21
- // Search Assortments
22
- const { queryString } = params.searchQuery;
23
- if (!queryString && !assortmentIds) {
24
- // If no query string is provided, return all assortment IDs
25
- return params.modules.assortments.findAssortmentIds({});
26
- }
27
- return assortmentIds;
28
- },
29
11
  transformProductSelector: async (lastSelector, options) => {
30
12
  const { key, value } = options || {};
31
13
  if (key) {
@@ -1 +1 @@
1
- {"version":3,"file":"strict-equal.js","sourceRoot":"","sources":["../../src/filters/strict-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpF,MAAM,gBAAgB,GAAmB;IACvC,GAAG,aAAa;IAEhB,GAAG,EAAE,oCAAoC;IACzC,KAAK,EAAE,+BAA+B;IACtC,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,CAAC;IAEb,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,OAAO;YACL,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;YAEhC,cAAc,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;gBACvC,kBAAkB;gBAClB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;gBAE3C,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChC,yDAAyD;oBACzD,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBACpD,CAAC;gBACD,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,iBAAiB,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;gBAC7C,qBAAqB;gBACrB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;gBAC3C,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnC,4DAA4D;oBAC5D,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBACD,OAAO,aAAa,CAAC;YACvB,CAAC;YAED,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;gBACxD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;gBAErC,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO;wBACL,GAAG,YAAY;wBACf,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;qBACvD,CAAC;gBACJ,CAAC;gBACD,OAAO,YAAY,CAAC;YACtB,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,cAAc,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"strict-equal.js","sourceRoot":"","sources":["../../src/filters/strict-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpF,MAAM,gBAAgB,GAAmB;IACvC,GAAG,aAAa;IAEhB,GAAG,EAAE,oCAAoC;IACzC,KAAK,EAAE,+BAA+B;IACtC,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,CAAC;IAEb,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,OAAO;YACL,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;YAEhC,wBAAwB,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;gBACxD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;gBAErC,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO;wBACL,GAAG,YAAY;wBACf,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;qBACvD,CAAC;gBACJ,CAAC;gBACD,OAAO,YAAY,CAAC;YACtB,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,cAAc,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { HDKey } from '@scure/bip32';
2
- import { keccak_256 } from '@noble/hashes/sha3';
3
- import { secp256k1 } from '@noble/curves/secp256k1';
2
+ import { keccak_256 } from '@noble/hashes/sha3.js';
3
+ import { secp256k1 } from '@noble/curves/secp256k1.js';
4
4
  function getChecksumAddress(address) {
5
5
  const chars = address.split('');
6
6
  const expanded = new Uint8Array(40);
@@ -23,7 +23,7 @@ export default (xpub, index) => {
23
23
  hardenedMaster.wipePrivateData(); // Neuter
24
24
  const child = hardenedMaster.deriveChild(0).deriveChild(index);
25
25
  // ETH Address (secp256k1 + keccak_256 + checksum)
26
- const childSigningKey = secp256k1.ProjectivePoint.fromHex(child.publicKey).toRawBytes(false);
26
+ const childSigningKey = secp256k1.Point.fromBytes(child.publicKey).toBytes(false);
27
27
  const address = Buffer.from(keccak_256(childSigningKey.slice(1)))
28
28
  .toString('hex')
29
29
  .substring(24);
@@ -1 +1 @@
1
- {"version":3,"file":"derive-eth-address.js","sourceRoot":"","sources":["../../../src/payment/cryptopay/derive-eth-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,SAAS,kBAAkB,CAAC,OAAO;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;IAC7B,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACnD,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,SAAS;IAE3C,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAE/D,kDAAkD;IAClD,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9D,QAAQ,CAAC,KAAK,CAAC;SACf,SAAS,CAAC,EAAE,CAAC,CAAC;IAEjB,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC"}
1
+ {"version":3,"file":"derive-eth-address.js","sourceRoot":"","sources":["../../../src/payment/cryptopay/derive-eth-address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,SAAS,kBAAkB,CAAC,OAAO;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;IAC7B,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACnD,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,SAAS;IAE3C,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAE/D,kDAAkD;IAClD,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9D,QAAQ,CAAC,KAAK,CAAC;SACf,SAAS,CAAC,EAAE,CAAC,CAAC;IAEjB,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/payment/postfinance-checkout/api-client.ts"],"names":[],"mappings":"AAIA,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAI7B,OAAO,CAAC,kBAAkB;IAuBpB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IA+C1E,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIpC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;CAGlD"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/payment/postfinance-checkout/api-client.ts"],"names":[],"mappings":"AAEA,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;YAIf,kBAAkB;IA8B1B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IA+C1E,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIpC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;CAGlD"}
@@ -1,21 +1,21 @@
1
- import crypto from 'crypto';
2
1
  const API_BASE_URL = 'https://checkout.postfinance.ch/api';
3
2
  export class PostFinanceApiClient {
4
3
  config;
5
4
  constructor(config) {
6
5
  this.config = config;
7
6
  }
8
- generateMacHeaders(method, path) {
7
+ async generateMacHeaders(method, path) {
9
8
  const version = '1';
10
9
  const timestamp = Math.floor(Date.now() / 1000).toString();
11
10
  const userId = this.config.userId.toString();
12
11
  // Use path as-is since it already includes /api from the URL
13
12
  const resourcePath = path;
14
13
  const dataToSign = [version, userId, timestamp, method, resourcePath].join('|');
15
- const macValue = crypto
16
- .createHmac('sha512', Buffer.from(this.config.apiSecret, 'base64'))
17
- .update(dataToSign, 'utf8')
18
- .digest('base64');
14
+ // Use Web Crypto API instead of crypto.createHmac
15
+ const secretBytes = Uint8Array.from(atob(this.config.apiSecret), (c) => c.charCodeAt(0));
16
+ const key = await crypto.subtle.importKey('raw', secretBytes, { name: 'HMAC', hash: 'SHA-512' }, false, ['sign']);
17
+ const signature = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(dataToSign));
18
+ const macValue = btoa(String.fromCharCode(...new Uint8Array(signature)));
19
19
  return {
20
20
  'x-mac-version': version,
21
21
  'x-mac-userid': userId,
@@ -28,7 +28,7 @@ export class PostFinanceApiClient {
28
28
  const urlObj = new URL(url);
29
29
  // Include both pathname and search (query parameters) for MAC signature
30
30
  const pathWithQuery = urlObj.pathname + urlObj.search;
31
- const macHeaders = this.generateMacHeaders(method, pathWithQuery);
31
+ const macHeaders = await this.generateMacHeaders(method, pathWithQuery);
32
32
  const headers = {
33
33
  ...macHeaders,
34
34
  'Content-Type': 'application/json',
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/payment/postfinance-checkout/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/payment/postfinance-checkout/api-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"product-catalog-price.d.ts","sourceRoot":"","sources":["../../src/pricing/product-catalog-price.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,YAAY,EAAE,sBAuC1B,CAAC"}
1
+ {"version":3,"file":"product-catalog-price.d.ts","sourceRoot":"","sources":["../../src/pricing/product-catalog-price.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,YAAY,EAAE,sBA6D1B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { ProductPricingDirector, ProductPricingAdapter, } from '@unchainedshop/core';
2
+ import { ProductTypes } from '@unchainedshop/core-products';
2
3
  export const ProductPrice = {
3
4
  ...ProductPricingAdapter,
4
5
  key: 'shop.unchained.pricing.product-price',
@@ -28,6 +29,29 @@ export const ProductPrice = {
28
29
  meta: { adapter: ProductPrice.key },
29
30
  });
30
31
  }
32
+ else if (product.type === ProductTypes.BundleProduct) {
33
+ for (const bundleItem of product.bundleItems || []) {
34
+ const bundledProduct = await modules.products.findProduct({
35
+ productId: bundleItem.productId,
36
+ });
37
+ if (bundledProduct) {
38
+ const bundleItemPrice = await modules.products.prices.price(bundledProduct, {
39
+ countryCode,
40
+ currencyCode,
41
+ quantity: bundleItem.quantity * quantity,
42
+ });
43
+ if (bundleItemPrice) {
44
+ const bundleItemTotal = bundleItemPrice.amount * bundleItem.quantity * quantity;
45
+ pricingAdapter.resultSheet().addItem({
46
+ amount: bundleItemTotal,
47
+ isTaxable: bundleItemPrice.isTaxable,
48
+ isNetPrice: bundleItemPrice.isNetPrice,
49
+ meta: { adapter: ProductPrice.key },
50
+ });
51
+ }
52
+ }
53
+ }
54
+ }
31
55
  return pricingAdapter.calculate();
32
56
  },
33
57
  };
@@ -1 +1 @@
1
- {"version":3,"file":"product-catalog-price.js","sourceRoot":"","sources":["../../src/pricing/product-catalog-price.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,GAAG,qBAAqB;IAExB,GAAG,EAAE,sCAAsC;IAC3C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,4BAA4B;IACnC,UAAU,EAAE,CAAC;IAEb,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7D,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;gBACjF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzD,WAAW;oBACX,YAAY;oBACZ,QAAQ;iBACT,CAAC,CAAC;gBACH,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;oBAC1C,cAAc,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;wBACnC,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE;qBACpC,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,sBAAsB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"product-catalog-price.js","sourceRoot":"","sources":["../../src/pricing/product-catalog-price.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,GAAG,qBAAqB;IAExB,GAAG,EAAE,sCAAsC;IAC3C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,4BAA4B;IACnC,UAAU,EAAE,CAAC;IAEb,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7D,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;gBACjF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzD,WAAW;oBACX,YAAY;oBACZ,QAAQ;iBACT,CAAC,CAAC;gBACH,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;oBAC1C,cAAc,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;wBACnC,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE;qBACpC,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,aAAa,EAAE,CAAC;oBACvD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;wBACnD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;4BACxD,SAAS,EAAE,UAAU,CAAC,SAAS;yBAChC,CAAC,CAAC;wBACH,IAAI,cAAc,EAAE,CAAC;4BACnB,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE;gCAC1E,WAAW;gCACX,YAAY;gCACZ,QAAQ,EAAE,UAAU,CAAC,QAAQ,GAAG,QAAQ;6BACzC,CAAC,CAAC;4BACH,IAAI,eAAe,EAAE,CAAC;gCACpB,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;gCAChF,cAAc,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;oCACnC,MAAM,EAAE,eAAe;oCACvB,SAAS,EAAE,eAAe,CAAC,SAAS;oCACpC,UAAU,EAAE,eAAe,CAAC,UAAU;oCACtC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE;iCACpC,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,sBAAsB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/plugins",
3
- "version": "4.0.0-rc.13",
3
+ "version": "4.0.0-rc.15",
4
4
  "main": "lib/plugins-index.js",
5
5
  "types": "lib/plugins-index.d.ts",
6
6
  "exports": {
@@ -34,18 +34,18 @@
34
34
  },
35
35
  "homepage": "https://github.com/unchainedshop/unchained#readme",
36
36
  "dependencies": {
37
- "@unchainedshop/api": "^4.0.0-rc.13",
38
- "@unchainedshop/core-delivery": "^4.0.0-rc.13",
39
- "@unchainedshop/core-enrollments": "^4.0.0-rc.13",
40
- "@unchainedshop/core-orders": "^4.0.0-rc.13",
41
- "@unchainedshop/core-payment": "^4.0.0-rc.13",
42
- "@unchainedshop/core-products": "^4.0.0-rc.13",
43
- "@unchainedshop/core-warehousing": "^4.0.0-rc.13",
44
- "@unchainedshop/core-worker": "^4.0.0-rc.13",
45
- "@unchainedshop/events": "^4.0.0-rc.13",
46
- "@unchainedshop/file-upload": "^4.0.0-rc.13",
47
- "@unchainedshop/logger": "^4.0.0-rc.13",
48
- "@unchainedshop/utils": "^4.0.0-rc.13",
37
+ "@unchainedshop/api": "^4.0.0-rc.15",
38
+ "@unchainedshop/core-delivery": "^4.0.0-rc.15",
39
+ "@unchainedshop/core-enrollments": "^4.0.0-rc.15",
40
+ "@unchainedshop/core-orders": "^4.0.0-rc.15",
41
+ "@unchainedshop/core-payment": "^4.0.0-rc.15",
42
+ "@unchainedshop/core-products": "^4.0.0-rc.15",
43
+ "@unchainedshop/core-warehousing": "^4.0.0-rc.15",
44
+ "@unchainedshop/core-worker": "^4.0.0-rc.15",
45
+ "@unchainedshop/events": "^4.0.0-rc.15",
46
+ "@unchainedshop/file-upload": "^4.0.0-rc.15",
47
+ "@unchainedshop/logger": "^4.0.0-rc.15",
48
+ "@unchainedshop/utils": "^4.0.0-rc.15",
49
49
  "event-iterator": "^2.0.0",
50
50
  "JSONStream": "^1.3.5"
51
51
  },
@@ -54,8 +54,8 @@
54
54
  "@breejs/later": "^4.2.0",
55
55
  "@paypal/checkout-server-sdk": "1.x",
56
56
  "@redis/client": ">= 1 < 6",
57
- "@scure/bip32": ">= 1.7 < 2",
58
- "@scure/btc-signer": ">= 1.8 < 2",
57
+ "@scure/bip32": ">= 2",
58
+ "@scure/btc-signer": ">= 2",
59
59
  "expiry-map": "2.x",
60
60
  "express": ">= 5 < 6",
61
61
  "fastify": ">= 5.2 < 6",
@@ -125,8 +125,8 @@
125
125
  "@breejs/later": "^4.2.0",
126
126
  "@paypal/checkout-server-sdk": "^1.0.3",
127
127
  "@redis/client": "^5.6.0",
128
- "@scure/bip32": "^1.7.0",
129
- "@scure/btc-signer": "^1.8.1",
128
+ "@scure/bip32": "^2.0.0",
129
+ "@scure/btc-signer": "^2.0.0",
130
130
  "@types/breejs__later": "^4.1.5",
131
131
  "@types/express": "^5.0.3",
132
132
  "@types/node": "^24.0.13",
@@ -12,27 +12,6 @@ const StrictQualFilter: IFilterAdapter = {
12
12
  return {
13
13
  ...FilterAdapter.actions(params),
14
14
 
15
- searchProducts: async ({ productIds }) => {
16
- // Search Products
17
- const { queryString } = params.searchQuery;
18
-
19
- if (!queryString && !productIds) {
20
- // If no query string is provided, return all product IDs
21
- return params.modules.products.findProductIds({});
22
- }
23
- return productIds;
24
- },
25
-
26
- searchAssortments: async ({ assortmentIds }) => {
27
- // Search Assortments
28
- const { queryString } = params.searchQuery;
29
- if (!queryString && !assortmentIds) {
30
- // If no query string is provided, return all assortment IDs
31
- return params.modules.assortments.findAssortmentIds({});
32
- }
33
- return assortmentIds;
34
- },
35
-
36
15
  transformProductSelector: async (lastSelector, options) => {
37
16
  const { key, value } = options || {};
38
17
 
@@ -1,6 +1,6 @@
1
1
  import { HDKey } from '@scure/bip32';
2
- import { keccak_256 } from '@noble/hashes/sha3';
3
- import { secp256k1 } from '@noble/curves/secp256k1';
2
+ import { keccak_256 } from '@noble/hashes/sha3.js';
3
+ import { secp256k1 } from '@noble/curves/secp256k1.js';
4
4
 
5
5
  function getChecksumAddress(address) {
6
6
  const chars = address.split('');
@@ -29,7 +29,7 @@ export default (xpub, index) => {
29
29
  const child = hardenedMaster.deriveChild(0).deriveChild(index);
30
30
 
31
31
  // ETH Address (secp256k1 + keccak_256 + checksum)
32
- const childSigningKey = secp256k1.ProjectivePoint.fromHex(child.publicKey).toRawBytes(false);
32
+ const childSigningKey = secp256k1.Point.fromBytes(child.publicKey).toBytes(false);
33
33
  const address = Buffer.from(keccak_256(childSigningKey.slice(1)))
34
34
  .toString('hex')
35
35
  .substring(24);
@@ -1,5 +1,3 @@
1
- import crypto from 'crypto';
2
-
3
1
  const API_BASE_URL = 'https://checkout.postfinance.ch/api';
4
2
 
5
3
  interface ApiConfig {
@@ -22,7 +20,7 @@ export class PostFinanceApiClient {
22
20
  this.config = config;
23
21
  }
24
22
 
25
- private generateMacHeaders(method: string, path: string): MacHeaders {
23
+ private async generateMacHeaders(method: string, path: string): Promise<MacHeaders> {
26
24
  const version = '1';
27
25
  const timestamp = Math.floor(Date.now() / 1000).toString();
28
26
  const userId = this.config.userId.toString();
@@ -32,10 +30,17 @@ export class PostFinanceApiClient {
32
30
 
33
31
  const dataToSign = [version, userId, timestamp, method, resourcePath].join('|');
34
32
 
35
- const macValue = crypto
36
- .createHmac('sha512', Buffer.from(this.config.apiSecret, 'base64'))
37
- .update(dataToSign, 'utf8')
38
- .digest('base64');
33
+ // Use Web Crypto API instead of crypto.createHmac
34
+ const secretBytes = Uint8Array.from(atob(this.config.apiSecret), (c) => c.charCodeAt(0));
35
+ const key = await crypto.subtle.importKey(
36
+ 'raw',
37
+ secretBytes,
38
+ { name: 'HMAC', hash: 'SHA-512' },
39
+ false,
40
+ ['sign'],
41
+ );
42
+ const signature = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(dataToSign));
43
+ const macValue = btoa(String.fromCharCode(...new Uint8Array(signature)));
39
44
 
40
45
  return {
41
46
  'x-mac-version': version,
@@ -50,7 +55,7 @@ export class PostFinanceApiClient {
50
55
  const urlObj = new URL(url);
51
56
  // Include both pathname and search (query parameters) for MAC signature
52
57
  const pathWithQuery = urlObj.pathname + urlObj.search;
53
- const macHeaders = this.generateMacHeaders(method, pathWithQuery);
58
+ const macHeaders = await this.generateMacHeaders(method, pathWithQuery);
54
59
 
55
60
  const headers: Record<string, string> = {
56
61
  ...macHeaders,
@@ -3,6 +3,7 @@ import {
3
3
  ProductPricingAdapter,
4
4
  IProductPricingAdapter,
5
5
  } from '@unchainedshop/core';
6
+ import { ProductTypes } from '@unchainedshop/core-products';
6
7
 
7
8
  export const ProductPrice: IProductPricingAdapter = {
8
9
  ...ProductPricingAdapter,
@@ -37,6 +38,28 @@ export const ProductPrice: IProductPricingAdapter = {
37
38
  isNetPrice: price.isNetPrice,
38
39
  meta: { adapter: ProductPrice.key },
39
40
  });
41
+ } else if (product.type === ProductTypes.BundleProduct) {
42
+ for (const bundleItem of product.bundleItems || []) {
43
+ const bundledProduct = await modules.products.findProduct({
44
+ productId: bundleItem.productId,
45
+ });
46
+ if (bundledProduct) {
47
+ const bundleItemPrice = await modules.products.prices.price(bundledProduct, {
48
+ countryCode,
49
+ currencyCode,
50
+ quantity: bundleItem.quantity * quantity,
51
+ });
52
+ if (bundleItemPrice) {
53
+ const bundleItemTotal = bundleItemPrice.amount * bundleItem.quantity * quantity;
54
+ pricingAdapter.resultSheet().addItem({
55
+ amount: bundleItemTotal,
56
+ isTaxable: bundleItemPrice.isTaxable,
57
+ isNetPrice: bundleItemPrice.isNetPrice,
58
+ meta: { adapter: ProductPrice.key },
59
+ });
60
+ }
61
+ }
62
+ }
40
63
  }
41
64
 
42
65
  return pricingAdapter.calculate();