@agnostack/next-shopify 1.10.0-beta.24 → 1.10.0-beta.26

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,18 @@
1
+ # [1.10.0-beta.26](https://github.com/agnostack/next-shopify/compare/v1.10.0-beta.25...v1.10.0-beta.26) (2023-07-10)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * prepareHeaders ([a702a51](https://github.com/agnostack/next-shopify/commit/a702a510dfbec943392a09f4da830fbf98f8c0aa))
7
+ * prepareHeaders ([7586780](https://github.com/agnostack/next-shopify/commit/75867801517af87a5e2d0daea2487f76ca53944e))
8
+
9
+ # [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)
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * prepareHeaders ([fa3f8b1](https://github.com/agnostack/next-shopify/commit/fa3f8b10cceedab716abc822e7421f4fe9786061))
15
+
1
16
  # [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)
2
17
 
3
18
 
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../../src/lib/handlers/api/proxy.js"],"names":[],"mappings":"AAgCO,sHAkJN"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../../src/lib/handlers/api/proxy.js"],"names":[],"mappings":"AAgCO,sHA4IN"}
@@ -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,61 +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
- const { iat, nbf, exp } = decoded, verifiable = tslib_1.__rest(decoded, ["iat", "nbf", "exp"]);
83
- console.log(`>>> > handleProxy > verifiable:`, verifiable);
84
- // TODO: clean up/move to helper
85
- const hmac = (0, utils_1.generateHMAC)((0, shared_1.objectToSortedString)(verifiable), APP_CONFIG.apiSecretKey);
86
- console.log(`>>> > handleProxy > hmac:`, hmac);
87
- const verified = (0, jsonwebtoken_1.verify)(sessionToken, hmac);
88
- 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
+ });
89
91
  }
90
- const { headers: targetHeaders, params: targetParams } = (0, shared_1.ensureObject)(safelistedTarget);
91
- if ((0, shared_1.objectNotEmpty)(targetParams)) {
92
- 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 });
93
94
  }
94
- const _prepareHeaders = (0, utils_1.prepareHeaders)(serverRuntimeConfig);
95
- const headers = yield _prepareHeaders({
96
- generateReplacements,
97
- shop,
98
- appId,
99
- headers: Object.assign(Object.assign({}, _headers), targetHeaders),
100
- });
101
95
  const proxy = http_proxy_1.default.createProxy();
102
96
  return new Promise((_resolve, reject) => {
103
97
  req.url = targetPath;
104
- req.headers = headers;
98
+ if (headers) {
99
+ req.headers = headers;
100
+ }
105
101
  proxy.once('error', reject);
106
102
  proxy.web(req, res, {
107
103
  target,
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/proxy.js"],"names":[],"mappings":"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"}
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.24",
3
+ "version": "1.10.0-beta.26",
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",