@agnostack/next-shopify 1.10.0-beta.23 → 1.10.0-beta.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [1.10.0-beta.25](https://github.com/agnostack/next-shopify/compare/v1.10.0-beta.24...v1.10.0-beta.25) (2023-07-10)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * prepareHeaders ([fa3f8b1](https://github.com/agnostack/next-shopify/commit/fa3f8b10cceedab716abc822e7421f4fe9786061))
7
+
8
+ # [1.10.0-beta.24](https://github.com/agnostack/next-shopify/compare/v1.10.0-beta.23...v1.10.0-beta.24) (2023-07-10)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * prepareHeaders ([4416cf6](https://github.com/agnostack/next-shopify/commit/4416cf6c000acd719ba6fecfe03802e17742fa34))
14
+
1
15
  # [1.10.0-beta.23](https://github.com/agnostack/next-shopify/compare/v1.10.0-beta.22...v1.10.0-beta.23) (2023-07-10)
2
16
 
3
17
 
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../../src/lib/handlers/api/proxy.js"],"names":[],"mappings":"AAgCO,sHAgJN"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../../src/lib/handlers/api/proxy.js"],"names":[],"mappings":"AAgCO,sHA6IN"}
@@ -5,7 +5,6 @@ const tslib_1 = require("tslib");
5
5
  /* eslint-disable @typescript-eslint/no-unused-vars */
6
6
  const nextjs_cors_1 = tslib_1.__importDefault(require("nextjs-cors"));
7
7
  const http_proxy_1 = tslib_1.__importDefault(require("http-proxy"));
8
- const jsonwebtoken_1 = require("jsonwebtoken");
9
8
  const utils_1 = require("../../utils");
10
9
  const shared_1 = require("../../../shared");
11
10
  const PROXY_TIMEOUT = 6000; // NOTE: 6 seconds
@@ -21,7 +20,6 @@ const handleProxy = (serverRuntimeConfig, config) => (req, res, params) => tslib
21
20
  const { 'x-extension-session': sessionToken, 'x-extension-point': extensionPoint, 'x-shop-domain': shopDomainHeader, 'x-shopify-shop-domain': shopifyShopDomainHeader, 'x-shopify-shop': shopHeader = shopifyShopDomainHeader !== null && shopifyShopDomainHeader !== void 0 ? shopifyShopDomainHeader : shopDomainHeader, 'x-shopify-app-id': appId,
22
21
  // 'x-shopify-app-installation-id': appInstallationId,
23
22
  } = _headers;
24
- console.log(`>>> > handleProxy > sessionToken:`, JSON.stringify(sessionToken, null, 2));
25
23
  // NOTE: GET requests are not always sending along origin
26
24
  if ((0, shared_1.stringEmpty)(origin)) {
27
25
  req.headers = Object.assign(Object.assign({}, req.headers), { origin: proxyOrigin || forwardHost });
@@ -47,59 +45,59 @@ const handleProxy = (serverRuntimeConfig, config) => (req, res, params) => tslib
47
45
  const _targetUrl = ((0, shared_1.stringEmpty)(targetParam) || targetParam.startsWith('http')) ? targetParam : `${APP_BASE_URL}/${(0, shared_1.removeLeadingSlash)(targetParam)}`;
48
46
  const { origin: target, hostname, pathname, search } = (0, shared_1.stringNotEmpty)(_targetUrl) ? new URL(_targetUrl) : {};
49
47
  let targetPath = [pathname, search].filter(shared_1.stringNotEmpty).join('');
50
- const safelistedTarget = (0, shared_1.matchHostname)(hostname, Object.assign({ [new URL(APP_BASE_URL).hostname]: {
51
- // HMMM: can we generate our own session token so we can not have to tell handleGraph/Rest to behave as offline?
52
- // headers: {
53
- // Authorization: 'Bearer {{setting.zendesk.token}}',
54
- // },
55
- params: {
56
- shop,
57
- host,
58
- },
59
- } }, TARGET_SAFELIST));
60
- if ((0, shared_1.stringEmpty)(targetPath) || (safelistedTarget == undefined)) {
61
- return res.status(407).json({ message: 'Unproxyable target.' });
62
- }
63
- if (!shop || !host || !extensionPoint || !signature || !proxyEncoded) {
64
- return res.status(400).json({ message: 'Invalid or missing headers.', extensionPoint });
65
- }
66
- const isShopifyOriginOrRelative = (0, shared_1.stringNotEmpty)((0, shared_1.ensureString)(path_prefix).startsWith('http')
67
- ? (0, shared_1.sanitizeShop)(new URL(path_prefix).hostname)
68
- : path_prefix);
69
- // TODO: confirm if we still need this logic on isShopifyOriginOrRelative
70
- if (!verifyAppProxySignature(signature, verifiable, isShopifyOriginOrRelative ? APP_CONFIG.apiSecretKey : timestamp)) {
71
- return res.status(403).json({ message: 'Invalid signature.' });
72
- }
73
- // TODO: explore moving this to sessionToken middleware??
74
- // TODO: verify signature!!!
75
- if (sessionToken) {
76
- // NOTE: this does not always contain sid (depending on if calling from appbridge)
77
- const { decoded, shop: sessionShop, host: sessionHost } = (0, shared_1.decodeShopData)(sessionToken);
78
- console.log(`>>> > handleProxy > decoded:`, decoded);
79
- if ((sessionShop !== shop) || (sessionHost !== host)) {
80
- return res.status(403).json({ message: 'Unauthorized shop or host.' });
48
+ let headers;
49
+ try {
50
+ const safelistedTarget = (0, shared_1.matchHostname)(hostname, Object.assign({ [new URL(APP_BASE_URL).hostname]: {
51
+ // HMMM: can we generate our own session token so we can not have to tell handleGraph/Rest to behave as offline?
52
+ // headers: {
53
+ // Authorization: 'Bearer {{setting.zendesk.token}}',
54
+ // },
55
+ params: {
56
+ shop,
57
+ host,
58
+ },
59
+ } }, TARGET_SAFELIST));
60
+ if ((0, shared_1.stringEmpty)(targetPath) || (safelistedTarget == undefined)) {
61
+ return res.status(407).json({ message: 'Unproxyable target' });
81
62
  }
82
- // TODO: clean up/move to helper
83
- const hmac = (0, utils_1.generateHMAC)((0, shared_1.objectToSortedString)(decoded), APP_CONFIG.apiSecretKey);
84
- console.log(`>>> > handleProxy > hmac:`, hmac);
85
- const verified = (0, jsonwebtoken_1.verify)(sessionToken, hmac);
86
- console.log(`>>> > handleProxy > verified:`, verified);
63
+ if (!shop || !host || !extensionPoint || !signature || !proxyEncoded) {
64
+ return res.status(400).json({ message: 'Invalid or missing headers', extensionPoint });
65
+ }
66
+ const isShopifyOriginOrRelative = (0, shared_1.stringNotEmpty)((0, shared_1.ensureString)(path_prefix).startsWith('http')
67
+ ? (0, shared_1.sanitizeShop)(new URL(path_prefix).hostname)
68
+ : path_prefix);
69
+ // TODO: confirm if we still need this logic on isShopifyOriginOrRelative
70
+ if (!verifyAppProxySignature(signature, verifiable, isShopifyOriginOrRelative ? APP_CONFIG.apiSecretKey : timestamp)) {
71
+ return res.status(403).json({ message: 'Invalid signature' });
72
+ }
73
+ const _getVerifiedSessionData = (0, utils_1.getVerifiedSessionData)(serverRuntimeConfig);
74
+ _getVerifiedSessionData(sessionToken, { shop, host }).catch((_error) => {
75
+ if (_error instanceof shared_1.ShopifySessionInvalidError) {
76
+ return res.status(403).json({ message: _error.message });
77
+ }
78
+ throw _error;
79
+ });
80
+ const { headers: targetHeaders, params: targetParams } = (0, shared_1.ensureObject)(safelistedTarget);
81
+ if ((0, shared_1.objectNotEmpty)(targetParams)) {
82
+ targetPath = (0, shared_1.appendQuery)(targetPath, new URLSearchParams(targetParams).toString());
83
+ }
84
+ const _prepareHeaders = (0, utils_1.prepareHeaders)(serverRuntimeConfig);
85
+ headers = yield _prepareHeaders({
86
+ generateReplacements,
87
+ shop,
88
+ appId,
89
+ headers: Object.assign(Object.assign({}, _headers), targetHeaders),
90
+ });
87
91
  }
88
- const { headers: targetHeaders, params: targetParams } = (0, shared_1.ensureObject)(safelistedTarget);
89
- if ((0, shared_1.objectNotEmpty)(targetParams)) {
90
- targetPath = (0, shared_1.appendQuery)(targetPath, new URLSearchParams(targetParams).toString());
92
+ catch (error) {
93
+ return res.status(500).json({ message: 'Error handling proxy request', targetPath });
91
94
  }
92
- const _prepareHeaders = (0, utils_1.prepareHeaders)(serverRuntimeConfig);
93
- const headers = yield _prepareHeaders({
94
- generateReplacements,
95
- shop,
96
- appId,
97
- headers: Object.assign(Object.assign({}, _headers), targetHeaders),
98
- });
99
95
  const proxy = http_proxy_1.default.createProxy();
100
96
  return new Promise((_resolve, reject) => {
101
97
  req.url = targetPath;
102
- req.headers = headers;
98
+ if (headers) {
99
+ req.headers = headers;
100
+ }
103
101
  proxy.once('error', reject);
104
102
  proxy.web(req, res, {
105
103
  target,
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/proxy.js"],"names":[],"mappings":";;;;AAAA,sDAAsD;AACtD,sEAAkC;AAClC,oEAAkC;AAClC,+CAAqC;AAErC,uCAIoB;AACpB,4CAYwB;AAExB,MAAM,aAAa,GAAG,IAAI,CAAA,CAAC,kBAAkB;AAE7C,MAAM,uBAAuB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;IACpE,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,IAAA,6BAAoB,EAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAA;IAEvE,OAAO,IAAA,qBAAa,EAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AACvC,CAAC,CAAA;AAEM,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,MAAM,EAAE,EAAE,CAAC,CAAO,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;;IACrF,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAA;IAC7C,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,mBAAmB,CAAA;IAC1F,MAAM,KAOF,MAAA,GAAG,CAAC,OAAO,mCAAI,EAAE,EAPf,EACJ,MAAM,EACN,iBAAiB,EAAE,WAAW,EAC9B,mBAAmB,EAAE,aAAa,EAClC,kBAAkB,EAAE,WAAW,EAC/B,gBAAgB,EAAE,WAAW,OAEV,EADhB,QAAQ,sBANP,wFAOL,CAAoB,CAAA;IAErB,MAAM,EACJ,qBAAqB,EAAE,YAAY,EACnC,mBAAmB,EAAE,cAAc,EACnC,eAAe,EAAE,gBAAgB,EACjC,uBAAuB,EAAE,uBAAuB,EAChD,gBAAgB,EAAE,UAAU,GAAG,uBAAuB,aAAvB,uBAAuB,cAAvB,uBAAuB,GAAI,gBAAgB,EAC1E,kBAAkB,EAAE,KAAK;IACzB,sDAAsD;MACvD,GAAG,QAAQ,CAAA;IAEZ,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAEvF,yDAAyD;IACzD,IAAI,IAAA,oBAAW,EAAC,MAAM,CAAC,EAAE;QACvB,GAAG,CAAC,OAAO,mCACN,GAAG,CAAC,OAAO,KACd,MAAM,EAAE,WAAW,IAAI,WAAW,GACnC,CAAA;KACF;IAED,MAAM,KAA6C,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,EAA5D,EAAE,SAAS,EAAE,YAAY,OAAmC,EAA9B,UAAU,sBAAxC,6BAA0C,CAAkB,CAAA;IAClE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,UAAU,CAAA;IAChE,MAAM,IAAI,GAAG,KAAK,IAAI,UAAU,CAAA;IAEhC,MAAM,IAAA,qBAAQ,EAAC,GAAG,EAAE,GAAG,EAAE;QACvB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;QAC3C,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YAC3B,MAAM,YAAY,GAAG,IAAA,sBAAa,EAAC,MAAM,EAAE;gBACzC,GAAG,eAAe;gBAClB,iBAAiB,CAAC,sDAAsD;aACzE,CAAC,CAAA;YAEF,IAAI,YAAY,EAAE;gBAChB,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;aAC5B;YAED,OAAO,QAAQ,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAA;QACnD,CAAC;QACD,oBAAoB,EAAE,GAAG,EAAE,6DAA6D;KACzF,CAAC,CAAA;IAEF,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAA;IAC5C,MAAM,UAAU,GAAG,CAAC,IAAA,oBAAW,EAAC,WAAW,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,IAAA,2BAAkB,EAAC,WAAW,CAAC,EAAE,CAAA;IACpJ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAA,uBAAc,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5G,IAAI,UAAU,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,uBAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEnE,MAAM,gBAAgB,GAAG,IAAA,sBAAa,EAAC,QAAQ,kBAC7C,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE;YAChC,gHAAgH;YAChH,aAAa;YACb,uDAAuD;YACvD,KAAK;YACL,MAAM,EAAE;gBACN,IAAI;gBACJ,IAAI;aACL;SACF,IACE,eAAe,EAClB,CAAA;IAEF,IAAI,IAAA,oBAAW,EAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,IAAI,SAAS,CAAC,EAAE;QAC9D,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAA;KAChE;IAED,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE;QACpE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,cAAc,EAAE,CAAC,CAAA;KACxF;IAED,MAAM,yBAAyB,GAAG,IAAA,uBAAc,EAC9C,IAAA,qBAAY,EAAC,WAAW,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1C,CAAC,CAAC,IAAA,qBAAY,EAAC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC;QAC7C,CAAC,CAAC,WAAW,CAChB,CAAA;IAED,yEAAyE;IACzE,IAAI,CAAC,uBAAuB,CAC1B,SAAS,EACT,UAAU,EACV,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAChE,EAAE;QACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAA;KAC/D;IAED,yDAAyD;IACzD,4BAA4B;IAC5B,IAAI,YAAY,EAAE;QAChB,kFAAkF;QAClF,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAA,uBAAc,EAAC,YAAY,CAAC,CAAA;QACtF,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAA;QACpD,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE;YACpD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAA;SACvE;QAED,gCAAgC;QAChC,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,IAAA,6BAAoB,EAAC,OAAO,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAA;QACjF,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAA;QAC9C,MAAM,QAAQ,GAAG,IAAA,qBAAM,EAAC,YAAY,EAAE,IAAI,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,QAAQ,CAAC,CAAA;KACvD;IAED,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,qBAAY,EAAC,gBAAgB,CAAC,CAAA;IACvF,IAAI,IAAA,uBAAc,EAAC,YAAY,CAAC,EAAE;QAChC,UAAU,GAAG,IAAA,oBAAW,EAAC,UAAU,EAAE,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;KACnF;IAED,MAAM,eAAe,GAAG,IAAA,sBAAc,EAAC,mBAAmB,CAAC,CAAA;IAC3D,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC;QACpC,oBAAoB;QACpB,IAAI;QACJ,KAAK;QACL,OAAO,kCACF,QAAQ,GACR,aAAa,CACjB;KACF,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,oBAAS,CAAC,WAAW,EAAE,CAAA;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QACtC,GAAG,CAAC,GAAG,GAAG,UAAU,CAAA;QACpB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAA;QAErB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAE3B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;YAClB,MAAM;YACN,OAAO,EAAE,aAAa;YACtB,YAAY,EAAE,aAAa;YAC3B,eAAe,EAAE,KAAK;YACtB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI;SACb,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA;AAhJY,QAAA,WAAW,eAgJvB"}
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/proxy.js"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../src/lib/handlers/api/token.js"],"names":[],"mappings":"AAWO;;sDAkEN"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../src/lib/handlers/api/token.js"],"names":[],"mappings":"AAWO;;sDAqEN"}
@@ -12,42 +12,46 @@ const shared_1 = require("../../../shared");
12
12
  // NOTE: typically handling: "/api/token"
13
13
  const handleSessionToken = ({ APP_CONFIG }, config) => (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
14
14
  var _a, _b;
15
- console.log(`>>> > handleSessionToken > config:`, config);
16
15
  const { host } = (_a = req.query) !== null && _a !== void 0 ? _a : {};
17
16
  const { 'x-shop-domain': shopDomain, 'x-shopify-shop-domain': shopifyShopDomain, 'x-shopify-shop': shop = shopifyShopDomain !== null && shopifyShopDomain !== void 0 ? shopifyShopDomain : shopDomain, } = (_b = req.headers) !== null && _b !== void 0 ? _b : {};
18
17
  // TODO: un-btoa the host and check??
19
18
  if ((0, shared_1.stringEmpty)(shop) || (0, shared_1.stringEmpty)(host)) {
20
19
  return res.status(412).json({ message: 'Missing required param' });
21
20
  }
22
- // TODO: try/catch/error handling??
23
- // NOTE raw request body is required for validation
24
- const _rawBody = yield (0, raw_body_1.default)(req);
25
- const rawBody = _rawBody.toString();
26
- const _c = JSON.parse(rawBody), { sub, aud = APP_CONFIG.apiKey } = _c, _body = tslib_1.__rest(_c, ["sub", "aud"]);
27
- let { dest, iss, sid, jti } = _body, body = tslib_1.__rest(_body, ["dest", "iss", "sid", "jti"]);
28
- if ((0, shared_1.stringEmpty)(dest)) {
29
- dest = shop;
21
+ let token;
22
+ try {
23
+ // NOTE raw request body is required for validation
24
+ const _rawBody = yield (0, raw_body_1.default)(req);
25
+ const rawBody = _rawBody.toString();
26
+ const _c = JSON.parse(rawBody), { sub, aud = APP_CONFIG.apiKey } = _c, _body = tslib_1.__rest(_c, ["sub", "aud"]);
27
+ let { dest, iss, sid, jti } = _body, body = tslib_1.__rest(_body, ["dest", "iss", "sid", "jti"]);
28
+ if ((0, shared_1.stringEmpty)(dest)) {
29
+ dest = shop;
30
+ }
31
+ if ((0, shared_1.stringEmpty)(iss)) {
32
+ iss = (0, js_base64_1.decode)(host);
33
+ }
34
+ if ((0, next_plugins_1.stringNotEmpty)(sid)) {
35
+ sid = (0, uuid_1.v4)();
36
+ }
37
+ if ((0, shared_1.stringEmpty)(jti)) {
38
+ jti = (0, uuid_1.v4)();
39
+ sid = `${sid}.${jti}`;
40
+ }
41
+ const payload = Object.assign(Object.assign({ shop,
42
+ host,
43
+ iss,
44
+ dest,
45
+ jti,
46
+ sid,
47
+ aud }, sub && { sub }), body);
48
+ const hmac = (0, utils_1.generateHMAC)((0, shared_1.objectToSortedString)(payload), APP_CONFIG.apiSecretKey);
49
+ token = (0, jsonwebtoken_1.sign)(payload, hmac, config);
30
50
  }
31
- if ((0, shared_1.stringEmpty)(iss)) {
32
- iss = (0, js_base64_1.decode)(host);
51
+ catch (error) {
52
+ console.error('Error generating session token', error);
53
+ return res.status(500).json({ message: 'Error generating session token' });
33
54
  }
34
- if ((0, next_plugins_1.stringNotEmpty)(sid)) {
35
- sid = (0, uuid_1.v4)();
36
- }
37
- if ((0, shared_1.stringEmpty)(jti)) {
38
- jti = (0, uuid_1.v4)();
39
- sid = `${sid}.${jti}`;
40
- }
41
- const payload = Object.assign(Object.assign({ shop,
42
- host,
43
- iss,
44
- dest,
45
- jti,
46
- sid,
47
- aud }, sub && { sub }), body);
48
- // HMMM: not sure which key (pub vs private) to use here??
49
- const hmac = (0, utils_1.generateHMAC)((0, shared_1.objectToSortedString)(payload), APP_CONFIG.apiSecretKey);
50
- const token = (0, jsonwebtoken_1.sign)(payload, hmac, config);
51
55
  return res.status(200).json({ token });
52
56
  });
53
57
  exports.handleSessionToken = handleSessionToken;
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/token.js"],"names":[],"mappings":";;;;AAAA,gEAAiC;AACjC,yCAAkC;AAClC,+CAAmC;AACnC,+BAAmC;AAEnC,0DAAwD;AAExD,uCAA0C;AAC1C,4CAAmE;AAEnE,yCAAyC;AAClC,MAAM,kBAAkB,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAO,GAAG,EAAE,GAAG,EAAE,EAAE;;IAC/E,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,MAAM,CAAC,CAAA;IACzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,CAAA;IAChC,MAAM,EACJ,eAAe,EAAE,UAAU,EAC3B,uBAAuB,EAAE,iBAAiB,EAC1C,gBAAgB,EAAE,IAAI,GAAG,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,UAAU,GACzD,GAAG,MAAA,GAAG,CAAC,OAAO,mCAAI,EAAE,CAAA;IAErB,qCAAqC;IACrC,IAAI,IAAA,oBAAW,EAAC,IAAI,CAAC,IAAI,IAAA,oBAAW,EAAC,IAAI,CAAC,EAAE;QAC1C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAA;KACnE;IAED,mCAAmC;IAEnC,mDAAmD;IACnD,MAAM,QAAQ,GAAG,MAAM,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAA;IACnC,MAAM,KAIF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAJjB,EACJ,GAAG,EACH,GAAG,GAAG,UAAU,CAAC,MAAM,OAEF,EADlB,KAAK,sBAHJ,cAIL,CAAsB,CAAA;IACvB,IAAI,EACF,IAAI,EACJ,GAAG,EACH,GAAG,EACH,GAAG,KAED,KAAK,EADJ,IAAI,kBACL,KAAK,EANL,6BAMH,CAAQ,CAAA;IAET,IAAI,IAAA,oBAAW,EAAC,IAAI,CAAC,EAAE;QACrB,IAAI,GAAG,IAAI,CAAA;KACZ;IAED,IAAI,IAAA,oBAAW,EAAC,GAAG,CAAC,EAAE;QACpB,GAAG,GAAG,IAAA,kBAAM,EAAC,IAAI,CAAC,CAAA;KACnB;IAED,IAAI,IAAA,6BAAc,EAAC,GAAG,CAAC,EAAE;QACvB,GAAG,GAAG,IAAA,SAAM,GAAE,CAAA;KACf;IAED,IAAI,IAAA,oBAAW,EAAC,GAAG,CAAC,EAAE;QACpB,GAAG,GAAG,IAAA,SAAM,GAAE,CAAA;QACd,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;KACtB;IAED,MAAM,OAAO,iCACX,IAAI;QACJ,IAAI;QACJ,GAAG;QACH,IAAI;QACJ,GAAG;QACH,GAAG;QACH,GAAG,IACA,GAAG,IAAI,EAAE,GAAG,EAAE,GACd,IAAI,CACR,CAAA;IAED,0DAA0D;IAC1D,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,IAAA,6BAAoB,EAAC,OAAO,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAA;IACjF,MAAM,KAAK,GAAG,IAAA,mBAAI,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAEzC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AACxC,CAAC,CAAA,CAAA;AAlEY,QAAA,kBAAkB,sBAkE9B"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/token.js"],"names":[],"mappings":";;;;AAAA,gEAAiC;AACjC,yCAAkC;AAClC,+CAAmC;AACnC,+BAAmC;AAEnC,0DAAwD;AAExD,uCAA0C;AAC1C,4CAAmE;AAEnE,yCAAyC;AAClC,MAAM,kBAAkB,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAO,GAAG,EAAE,GAAG,EAAE,EAAE;;IAC/E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,CAAA;IAChC,MAAM,EACJ,eAAe,EAAE,UAAU,EAC3B,uBAAuB,EAAE,iBAAiB,EAC1C,gBAAgB,EAAE,IAAI,GAAG,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,UAAU,GACzD,GAAG,MAAA,GAAG,CAAC,OAAO,mCAAI,EAAE,CAAA;IAErB,qCAAqC;IACrC,IAAI,IAAA,oBAAW,EAAC,IAAI,CAAC,IAAI,IAAA,oBAAW,EAAC,IAAI,CAAC,EAAE;QAC1C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAA;KACnE;IAED,IAAI,KAAK,CAAA;IACT,IAAI;QACF,mDAAmD;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAA;QACnC,MAAM,KAIF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAJjB,EACJ,GAAG,EACH,GAAG,GAAG,UAAU,CAAC,MAAM,OAEF,EADlB,KAAK,sBAHJ,cAIL,CAAsB,CAAA;QAEvB,IAAI,EACF,IAAI,EACJ,GAAG,EACH,GAAG,EACH,GAAG,KAED,KAAK,EADJ,IAAI,kBACL,KAAK,EANL,6BAMH,CAAQ,CAAA;QAET,IAAI,IAAA,oBAAW,EAAC,IAAI,CAAC,EAAE;YACrB,IAAI,GAAG,IAAI,CAAA;SACZ;QAED,IAAI,IAAA,oBAAW,EAAC,GAAG,CAAC,EAAE;YACpB,GAAG,GAAG,IAAA,kBAAM,EAAC,IAAI,CAAC,CAAA;SACnB;QAED,IAAI,IAAA,6BAAc,EAAC,GAAG,CAAC,EAAE;YACvB,GAAG,GAAG,IAAA,SAAM,GAAE,CAAA;SACf;QAED,IAAI,IAAA,oBAAW,EAAC,GAAG,CAAC,EAAE;YACpB,GAAG,GAAG,IAAA,SAAM,GAAE,CAAA;YACd,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;SACtB;QAED,MAAM,OAAO,iCACX,IAAI;YACJ,IAAI;YACJ,GAAG;YACH,IAAI;YACJ,GAAG;YACH,GAAG;YACH,GAAG,IACA,GAAG,IAAI,EAAE,GAAG,EAAE,GACd,IAAI,CACR,CAAA;QAED,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,IAAA,6BAAoB,EAAC,OAAO,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAA;QACjF,KAAK,GAAG,IAAA,mBAAI,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;KACpC;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;QACtD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAA;KAC3E;IAED,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AACxC,CAAC,CAAA,CAAA;AArEY,QAAA,kBAAkB,sBAqE9B"}
@@ -5,4 +5,5 @@ export * from "./headers";
5
5
  export * from "./session";
6
6
  export * from "./shopify";
7
7
  export * from "./shopify-api-js/oauth";
8
+ export * from "./token";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -8,4 +8,5 @@ tslib_1.__exportStar(require("./headers"), exports);
8
8
  tslib_1.__exportStar(require("./session"), exports);
9
9
  tslib_1.__exportStar(require("./shopify"), exports);
10
10
  tslib_1.__exportStar(require("./shopify-api-js/oauth"), exports);
11
+ tslib_1.__exportStar(require("./token"), exports);
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/utils/index.js"],"names":[],"mappings":";;;AAAA,oDAAyB;AACzB,mDAAwB;AACxB,qDAA0B;AAC1B,oDAAyB;AACzB,oDAAyB;AACzB,oDAAyB;AACzB,iEAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/utils/index.js"],"names":[],"mappings":";;;AAAA,oDAAyB;AACzB,mDAAwB;AACxB,qDAA0B;AAC1B,oDAAyB;AACzB,oDAAyB;AACzB,oDAAyB;AACzB,iEAAsC;AACtC,kDAAuB"}
@@ -0,0 +1,17 @@
1
+ export function getVerifiedSessionData(serverRuntimeConfig: any): (sessionToken: any, { shop, host }: {
2
+ shop: any;
3
+ host: any;
4
+ }) => Promise<{
5
+ dest?: undefined;
6
+ sid?: undefined;
7
+ shop?: undefined;
8
+ host?: undefined;
9
+ store_name?: undefined;
10
+ } | {
11
+ dest: any;
12
+ sid: any;
13
+ shop: string;
14
+ host: any;
15
+ store_name: string;
16
+ }>;
17
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/token.js"],"names":[],"mappings":"AASO;;;;;;;;;;;;;;;GA2BN"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getVerifiedSessionData = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const jsonwebtoken_1 = require("jsonwebtoken");
6
+ const shared_1 = require("../../shared");
7
+ const crypto_1 = require("./crypto");
8
+ const getVerifiedSessionData = (serverRuntimeConfig) => (sessionToken, { shop, host }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
9
+ const { APP_CONFIG } = serverRuntimeConfig;
10
+ let data;
11
+ try {
12
+ // NOTE: this does not always contain sid (depending on if calling from appbridge)
13
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
14
+ const _a = (0, shared_1.decodeShopData)(sessionToken), { decoded, token } = _a, _data = tslib_1.__rest(_a, ["decoded", "token"]);
15
+ const { shop: sessionShop, host: sessionHost } = _data;
16
+ data = _data;
17
+ if ((sessionShop !== shop) || (sessionHost !== host)) {
18
+ throw new shared_1.ShopifySessionInvalidError('Unauthorized shop or host');
19
+ }
20
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
21
+ const { iat, nbf, exp } = decoded, verifiable = tslib_1.__rest(decoded, ["iat", "nbf", "exp"]);
22
+ const hmac = (0, crypto_1.generateHMAC)((0, shared_1.objectToSortedString)(verifiable), APP_CONFIG.apiSecretKey);
23
+ const verified = (0, jsonwebtoken_1.verify)(sessionToken, hmac);
24
+ if (verified == undefined) {
25
+ throw new shared_1.ShopifySessionInvalidError('Error verifying session token');
26
+ }
27
+ }
28
+ catch (_error) {
29
+ console.error('Error verifying session token', _error);
30
+ throw new shared_1.ShopifySessionInvalidError('Error verifying session token');
31
+ }
32
+ return data;
33
+ });
34
+ exports.getVerifiedSessionData = getVerifiedSessionData;
35
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/lib/utils/token.js"],"names":[],"mappings":";;;;AAAA,+CAAqC;AAErC,yCAIqB;AACrB,qCAAuC;AAEhC,MAAM,sBAAsB,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAO,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;IACpG,MAAM,EAAC,UAAU,EAAE,GAAG,mBAAmB,CAAA;IACzC,IAAI,IAAI,CAAA;IACR,IAAI;QACF,kFAAkF;QAClF,6DAA6D;QAC7D,MAAM,KAA+B,IAAA,uBAAc,EAAC,YAAY,CAAC,EAA3D,EAAE,OAAO,EAAE,KAAK,OAA2C,EAAtC,KAAK,sBAA1B,oBAA4B,CAA+B,CAAA;QACjE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;QACtD,IAAI,GAAG,KAAK,CAAA;QAEZ,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE;YACpD,MAAM,IAAI,mCAA0B,CAAC,2BAA2B,CAAC,CAAA;SAClE;QAED,6DAA6D;QAC7D,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAoB,OAAO,EAAtB,UAAU,kBAAK,OAAO,EAA1C,qBAAgC,CAAU,CAAA;QAChD,MAAM,IAAI,GAAG,IAAA,qBAAY,EAAC,IAAA,6BAAoB,EAAC,UAAU,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAA;QAEpF,MAAM,QAAQ,GAAG,IAAA,qBAAM,EAAC,YAAY,EAAE,IAAI,CAAC,CAAA;QAC3C,IAAI,QAAQ,IAAI,SAAS,EAAE;YACzB,MAAM,IAAI,mCAA0B,CAAC,+BAA+B,CAAC,CAAA;SACtE;KACF;IAAC,OAAO,MAAM,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAA;QACtD,MAAM,IAAI,mCAA0B,CAAC,+BAA+B,CAAC,CAAA;KACtE;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,CAAA;AA3BY,QAAA,sBAAsB,0BA2BlC"}
@@ -4,6 +4,8 @@ export class ShopifyAuthenticationError extends Error {
4
4
  }
5
5
  export class ShopifySessionAuthenticationError extends ShopifyAuthenticationError {
6
6
  }
7
+ export class ShopifySessionInvalidError extends ShopifySessionAuthenticationError {
8
+ }
7
9
  export class ShopifySessionMissingError extends ShopifySessionAuthenticationError {
8
10
  }
9
11
  export namespace ERROR_CODES {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/shared/errors.js"],"names":[],"mappings":"AAAA;IACE,qCAKC;IAHC,UAAgB;CAInB;AAED;CAMC;AAED;CAMC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/shared/errors.js"],"names":[],"mappings":"AAAA;IACE,qCAKC;IAHC,UAAgB;CAInB;AAED;CAMC;AAED;CAMC;AAED;CAMC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ERROR_CODES = exports.ShopifySessionMissingError = exports.ShopifySessionAuthenticationError = exports.ShopifyAuthenticationError = void 0;
3
+ exports.ERROR_CODES = exports.ShopifySessionMissingError = exports.ShopifySessionInvalidError = exports.ShopifySessionAuthenticationError = exports.ShopifyAuthenticationError = void 0;
4
4
  class ShopifyAuthenticationError extends Error {
5
5
  constructor(message, data) {
6
6
  super(message);
@@ -18,6 +18,14 @@ class ShopifySessionAuthenticationError extends ShopifyAuthenticationError {
18
18
  }
19
19
  }
20
20
  exports.ShopifySessionAuthenticationError = ShopifySessionAuthenticationError;
21
+ class ShopifySessionInvalidError extends ShopifySessionAuthenticationError {
22
+ constructor(message, data) {
23
+ super(message, data);
24
+ this.name = 'ShopifySessionInvalidError';
25
+ Object.setPrototypeOf(this, ShopifySessionInvalidError.prototype);
26
+ }
27
+ }
28
+ exports.ShopifySessionInvalidError = ShopifySessionInvalidError;
21
29
  class ShopifySessionMissingError extends ShopifySessionAuthenticationError {
22
30
  constructor(message, data) {
23
31
  super(message, data);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/shared/errors.js"],"names":[],"mappings":";;;AAAA,MAAa,0BAA2B,SAAQ,KAAK;IACnD,YAAY,OAAO,EAAE,IAAI;QACvB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAA;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAA;IACnE,CAAC;CACF;AAPD,gEAOC;AAED,MAAa,iCAAkC,SAAQ,0BAA0B;IAC/E,YAAY,OAAO,EAAE,IAAI;QACvB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAA;QAC/C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,iCAAiC,CAAC,SAAS,CAAC,CAAA;IAC1E,CAAC;CACF;AAND,8EAMC;AAED,MAAa,0BAA2B,SAAQ,iCAAiC;IAC/E,YAAY,OAAO,EAAE,IAAI;QACvB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAA;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAA;IACnE,CAAC;CACF;AAND,gEAMC;AAEY,QAAA,WAAW,GAAG;IACzB,QAAQ,EAAE,gBAAgB;IAC1B,KAAK,EAAE,aAAa;IACpB,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,aAAa;IACpB,YAAY,EAAE,kBAAkB;IAChC,gBAAgB,EAAE,kBAAkB;CACrC,CAAA"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/shared/errors.js"],"names":[],"mappings":";;;AAAA,MAAa,0BAA2B,SAAQ,KAAK;IACnD,YAAY,OAAO,EAAE,IAAI;QACvB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAA;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAA;IACnE,CAAC;CACF;AAPD,gEAOC;AAED,MAAa,iCAAkC,SAAQ,0BAA0B;IAC/E,YAAY,OAAO,EAAE,IAAI;QACvB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAA;QAC/C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,iCAAiC,CAAC,SAAS,CAAC,CAAA;IAC1E,CAAC;CACF;AAND,8EAMC;AAED,MAAa,0BAA2B,SAAQ,iCAAiC;IAC/E,YAAY,OAAO,EAAE,IAAI;QACvB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAA;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAA;IACnE,CAAC;CACF;AAND,gEAMC;AAED,MAAa,0BAA2B,SAAQ,iCAAiC;IAC/E,YAAY,OAAO,EAAE,IAAI;QACvB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAA;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAA;IACnE,CAAC;CACF;AAND,gEAMC;AAEY,QAAA,WAAW,GAAG;IACzB,QAAQ,EAAE,gBAAgB;IAC1B,KAAK,EAAE,aAAa;IACpB,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,aAAa;IACpB,YAAY,EAAE,kBAAkB;IAChC,gBAAgB,EAAE,kBAAkB;CACrC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agnostack/next-shopify",
3
- "version": "1.10.0-beta.23",
3
+ "version": "1.10.0-beta.25",
4
4
  "author": "agnoStack Dev <developers@agnostack.com> (https://agnostack.com)",
5
5
  "owner": "agnoStack",
6
6
  "description": "Please contact agnoStack via info@agnostack.com for any questions",