@unchainedshop/plugins 4.0.0-rc.14 → 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 +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.14",
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.14",
38
- "@unchainedshop/core-delivery": "^4.0.0-rc.14",
39
- "@unchainedshop/core-enrollments": "^4.0.0-rc.14",
40
- "@unchainedshop/core-orders": "^4.0.0-rc.14",
41
- "@unchainedshop/core-payment": "^4.0.0-rc.14",
42
- "@unchainedshop/core-products": "^4.0.0-rc.14",
43
- "@unchainedshop/core-warehousing": "^4.0.0-rc.14",
44
- "@unchainedshop/core-worker": "^4.0.0-rc.14",
45
- "@unchainedshop/events": "^4.0.0-rc.14",
46
- "@unchainedshop/file-upload": "^4.0.0-rc.14",
47
- "@unchainedshop/logger": "^4.0.0-rc.14",
48
- "@unchainedshop/utils": "^4.0.0-rc.14",
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
  },
@@ -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,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();