@shopify/shopify-api 4.2.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +11 -4
  2. package/dist/auth/oauth/oauth.d.ts.map +1 -1
  3. package/dist/auth/oauth/oauth.js +7 -5
  4. package/dist/auth/session/storage/custom.d.ts.map +1 -1
  5. package/dist/auth/session/storage/custom.js +5 -2
  6. package/dist/auth/session/storage/memory.d.ts.map +1 -1
  7. package/dist/auth/session/storage/memory.js +4 -2
  8. package/dist/auth/session/storage/mongodb.d.ts.map +1 -1
  9. package/dist/auth/session/storage/mongodb.js +4 -2
  10. package/dist/auth/session/storage/mysql.d.ts.map +1 -1
  11. package/dist/auth/session/storage/mysql.js +4 -2
  12. package/dist/auth/session/storage/postgresql.d.ts.map +1 -1
  13. package/dist/auth/session/storage/postgresql.js +4 -2
  14. package/dist/auth/session/storage/redis.d.ts +2 -1
  15. package/dist/auth/session/storage/redis.d.ts.map +1 -1
  16. package/dist/auth/session/storage/redis.js +5 -5
  17. package/dist/auth/session/storage/sqlite.d.ts.map +1 -1
  18. package/dist/auth/session/storage/sqlite.js +6 -3
  19. package/dist/base-types.d.ts +1 -0
  20. package/dist/base-types.d.ts.map +1 -1
  21. package/dist/clients/graphql/graphql_client.d.ts.map +1 -1
  22. package/dist/clients/graphql/graphql_client.js +25 -14
  23. package/dist/clients/http_client/http_client.js +1 -1
  24. package/dist/context.d.ts.map +1 -1
  25. package/dist/context.js +3 -0
  26. package/dist/error.d.ts +13 -0
  27. package/dist/error.d.ts.map +1 -1
  28. package/dist/error.js +20 -1
  29. package/dist/index.d.ts +2 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/utils/delete-offline-session.d.ts.map +1 -1
  32. package/dist/utils/delete-offline-session.js +4 -2
  33. package/dist/utils/get-embedded-app-url.d.ts.map +1 -1
  34. package/dist/utils/get-embedded-app-url.js +2 -1
  35. package/dist/utils/index.d.ts +3 -2
  36. package/dist/utils/index.d.ts.map +1 -1
  37. package/dist/utils/index.js +3 -2
  38. package/dist/utils/load-offline-session.d.ts.map +1 -1
  39. package/dist/utils/load-offline-session.js +4 -2
  40. package/dist/utils/setup-jest.d.ts.map +1 -1
  41. package/dist/utils/setup-jest.js +1 -0
  42. package/dist/utils/shop-validator.d.ts +12 -3
  43. package/dist/utils/shop-validator.d.ts.map +1 -1
  44. package/dist/utils/shop-validator.js +39 -7
  45. package/dist/version.d.ts +1 -1
  46. package/dist/version.js +1 -1
  47. package/dist/webhooks/registry.d.ts.map +1 -1
  48. package/dist/webhooks/registry.js +21 -18
  49. package/package.json +1 -1
  50. package/dist/__tests__/fake-resource-with-custom-prefix.d.ts +0 -21
  51. package/dist/__tests__/fake-resource-with-custom-prefix.d.ts.map +0 -1
  52. package/dist/__tests__/fake-resource-with-custom-prefix.js +0 -46
  53. package/dist/__tests__/fake-resource.d.ts +0 -41
  54. package/dist/__tests__/fake-resource.d.ts.map +0 -1
  55. package/dist/__tests__/fake-resource.js +0 -122
  56. package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts +0 -3
  57. package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts.map +0 -1
  58. package/dist/auth/session/storage/__tests__/battery-of-tests.js +0 -315
  59. package/dist/auth/session/storage/__tests__/session-test-utils.d.ts +0 -3
  60. package/dist/auth/session/storage/__tests__/session-test-utils.d.ts.map +0 -1
  61. package/dist/auth/session/storage/__tests__/session-test-utils.js +0 -46
  62. package/dist/auth/session/storage/__tests__/utils.d.ts +0 -10
  63. package/dist/auth/session/storage/__tests__/utils.d.ts.map +0 -1
  64. package/dist/auth/session/storage/__tests__/utils.js +0 -87
package/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ and adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## [5.0.0] - 2022-07-28
11
+
12
+ - ⚠️ [Breaking] If a response from a GraphQL query contains an `errors` attribute, `GraphqlClient` will now throw a `GraphqlQueryError`. The caller can check the `error.response` attribute to see what was returned from the GraphQL API. [#431](https://github.com/Shopify/shopify-api-node/pull/431)
13
+ - ⚠️ [Breaking] Add utils functions to sanitize shops and hosts, and remove the `validateShop` utils function [#434](https://github.com/Shopify/shopify-api-node/pull/434)
14
+ - Allow passing in options for the Redis client used by the session storage strategy [#430](https://github.com/Shopify/shopify-api-node/pull/430)
15
+ - Fix User-Agent header sent in PUT / POST requests [#435](https://github.com/Shopify/shopify-api-node/pull/435)
16
+
10
17
  ## [4.2.0] - 2022-07-20
11
18
 
12
19
  - Return a 401 instead of 403 when webhooks fail validation [#425](https://github.com/Shopify/shopify-api-node/pull/425)
@@ -107,12 +114,12 @@ and adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
107
114
  ### Added
108
115
 
109
116
  - Add a 5 second `clockTolerance` to fix `jwt not active` error [#227](https://github.com/Shopify/shopify-api-node/pull/227)
110
- - [Breaking] Change default for OAuth.beginAuth to online sessions [#203](https://github.com/Shopify/shopify-api-node/pull/203)
117
+ - ⚠️ [Breaking] Change default for OAuth.beginAuth to online sessions [#203](https://github.com/Shopify/shopify-api-node/pull/203)
111
118
  - see [oauth.md](https://github.com/Shopify/shopify-api-node/blob/main/docs/usage/oauth.md) for updated docs
112
- - [Breaking] Return and delete session in `validateAuthCallback` [#217](https://github.com/Shopify/shopify-api-node/pull/217)
119
+ - ⚠️ [Breaking] Return and delete session in `validateAuthCallback` [#217](https://github.com/Shopify/shopify-api-node/pull/217)
113
120
  - see [oauth.md](https://github.com/Shopify/shopify-api-node/blob/main/docs/usage/oauth.md) for updated usage
114
- - [Breaking] Extract `addHandler` and `getHandler` methods for webhooks out of `register` [#205](https://github.com/Shopify/shopify-api-node/pull/205)
115
- - [Breaking] Sessions no longer default to `false` for `isOnline` [#169](https://github.com/Shopify/shopify-api-node/pull/169)
121
+ - ⚠️ [Breaking] Extract `addHandler` and `getHandler` methods for webhooks out of `register` [#205](https://github.com/Shopify/shopify-api-node/pull/205)
122
+ - ⚠️ [Breaking] Sessions no longer default to `false` for `isOnline` [#169](https://github.com/Shopify/shopify-api-node/pull/169)
116
123
  - Required `Session` arguments must be passed to the constructor [#169](https://github.com/Shopify/shopify-api-node/pull/169)
117
124
  - Allow `undefined` in `AuthScopes` [#169](https://github.com/Shopify/shopify-api-node/pull/169)
118
125
 
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAexB,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAElD,OAAO,EACL,SAAS,EAIV,MAAM,SAAS,CAAC;AAEjB,QAAA,MAAM,YAAY;;IAGhB;;;;;;;;;;OAUG;uBAEQ,KAAK,eAAe,YACnB,KAAK,cAAc,QACvB,MAAM,gBACE,MAAM,uBAEnB,QAAQ,MAAM,CAAC;IAgDlB;;;;;;;;;;OAUG;kCAEQ,KAAK,eAAe,YACnB,KAAK,cAAc,SACtB,SAAS,GACf,QAAQ,gBAAgB,CAAC;IAuG5B;;;;;OAKG;gCAEQ,KAAK,eAAe,YACnB,KAAK,cAAc,GAC5B,MAAM,GAAG,SAAS;IAQrB;;;;;OAKG;0BACmB,MAAM,UAAU,MAAM,GAAG,MAAM;IAIrD;;;;OAIG;8BACuB,MAAM,GAAG,MAAM;IAIzC;;;;;;OAMG;iCAEQ,KAAK,eAAe,YACnB,KAAK,cAAc,uBAE5B,MAAM,GAAG,SAAS;CAiCtB,CAAC;AAcF,OAAO,EAAC,YAAY,EAAC,CAAC"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAexB,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EACL,SAAS,EAIV,MAAM,SAAS,CAAC;AAEjB,QAAA,MAAM,YAAY;;IAGhB;;;;;;;;;;OAUG;uBAEQ,KAAK,eAAe,YACnB,KAAK,cAAc,QACvB,MAAM,gBACE,MAAM,uBAEnB,QAAQ,MAAM,CAAC;IAiDlB;;;;;;;;;;OAUG;kCAEQ,KAAK,eAAe,YACnB,KAAK,cAAc,SACtB,SAAS,GACf,QAAQ,gBAAgB,CAAC;IAuG5B;;;;;OAKG;gCAEQ,KAAK,eAAe,YACnB,KAAK,cAAc,GAC5B,MAAM,GAAG,SAAS;IAQrB;;;;;OAKG;0BACmB,MAAM,UAAU,MAAM,GAAG,MAAM;IAIrD;;;;OAIG;8BACuB,MAAM,GAAG,MAAM;IAIzC;;;;;;OAMG;iCAEQ,KAAK,eAAe,YACnB,KAAK,cAAc,uBAE5B,MAAM,GAAG,SAAS;CAiCtB,CAAC;AAcF,OAAO,EAAC,YAAY,EAAC,CAAC"}
@@ -14,6 +14,7 @@ var session_1 = require("../session");
14
14
  var http_client_1 = require("../../clients/http_client/http_client");
15
15
  var types_1 = require("../../clients/http_client/types");
16
16
  var ShopifyErrors = tslib_1.__importStar(require("../../error"));
17
+ var shop_validator_1 = require("../../utils/shop-validator");
17
18
  var ShopifyOAuth = {
18
19
  SESSION_COOKIE_NAME: 'shopify_app_session',
19
20
  /**
@@ -30,18 +31,19 @@ var ShopifyOAuth = {
30
31
  beginAuth: function (request, response, shop, redirectPath, isOnline) {
31
32
  if (isOnline === void 0) { isOnline = true; }
32
33
  return tslib_1.__awaiter(this, void 0, void 0, function () {
33
- var cookies, state, session, sessionStored, query, queryString;
34
+ var cleanShop, cookies, state, session, sessionStored, query, queryString;
34
35
  return tslib_1.__generator(this, function (_a) {
35
36
  switch (_a.label) {
36
37
  case 0:
37
38
  context_1.Context.throwIfUninitialized();
38
39
  context_1.Context.throwIfPrivateApp('Cannot perform OAuth for private apps');
40
+ cleanShop = (0, shop_validator_1.sanitizeShop)(shop, true);
39
41
  cookies = new cookies_1.default(request, response, {
40
42
  keys: [context_1.Context.API_SECRET_KEY],
41
43
  secure: true,
42
44
  });
43
45
  state = (0, nonce_1.default)();
44
- session = new session_1.Session(isOnline ? (0, uuid_1.v4)() : this.getOfflineSessionId(shop), shop, state, isOnline);
46
+ session = new session_1.Session(isOnline ? (0, uuid_1.v4)() : this.getOfflineSessionId(cleanShop), cleanShop, state, isOnline);
45
47
  return [4 /*yield*/, context_1.Context.SESSION_STORAGE.storeSession(session)];
46
48
  case 1:
47
49
  sessionStored = _a.sent();
@@ -62,7 +64,7 @@ var ShopifyOAuth = {
62
64
  'grant_options[]': isOnline ? 'per-user' : '',
63
65
  };
64
66
  queryString = querystring_1.default.stringify(query);
65
- return [2 /*return*/, "https://".concat(shop, "/admin/oauth/authorize?").concat(queryString)];
67
+ return [2 /*return*/, "https://".concat(cleanShop, "/admin/oauth/authorize?").concat(queryString)];
66
68
  }
67
69
  });
68
70
  });
@@ -181,7 +183,7 @@ var ShopifyOAuth = {
181
183
  * @param userId Current actor id
182
184
  */
183
185
  getJwtSessionId: function (shop, userId) {
184
- return "".concat(shop, "_").concat(userId);
186
+ return "".concat((0, shop_validator_1.sanitizeShop)(shop, true), "_").concat(userId);
185
187
  },
186
188
  /**
187
189
  * Builds an offline session id for the given shop.
@@ -189,7 +191,7 @@ var ShopifyOAuth = {
189
191
  * @param shop Shopify shop domain
190
192
  */
191
193
  getOfflineSessionId: function (shop) {
192
- return "offline_".concat(shop);
194
+ return "offline_".concat((0, shop_validator_1.sanitizeShop)(shop, true));
193
195
  },
194
196
  /**
195
197
  * Extracts the current session id from the request / response pair.
@@ -1 +1 @@
1
- {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/custom.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,qBAAa,oBAAqB,YAAW,cAAc;IAEvD,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC;IACvE,QAAQ,CAAC,YAAY,EAAE,CACrB,EAAE,EAAE,MAAM,KACP,OAAO,CAAC,gBAAgB,GAAG;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,GAAG,SAAS,CAAC;IACrE,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC;IACzD,QAAQ,CAAC,sBAAsB,CAAC,SAAQ,MAAM,EAAE,KAAK,QAAQ,OAAO,CAAC;IACrE,QAAQ,CAAC,0BAA0B,CAAC,UAC5B,MAAM,KACT,QAAQ,gBAAgB,EAAE,CAAC;gBARvB,aAAa,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,EAC9D,YAAY,EAAE,CACrB,EAAE,EAAE,MAAM,KACP,OAAO,CAAC,gBAAgB,GAAG;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,GAAG,SAAS,CAAC,EAC5D,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAChD,sBAAsB,CAAC,SAAQ,MAAM,EAAE,KAAK,QAAQ,OAAO,CAAC,aAAA,EAC5D,0BAA0B,CAAC,UAC5B,MAAM,KACT,QAAQ,gBAAgB,EAAE,CAAC,aAAA;IASrB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IA0C9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAkB3E"}
1
+ {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/custom.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAIlD,qBAAa,oBAAqB,YAAW,cAAc;IAEvD,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC;IACvE,QAAQ,CAAC,YAAY,EAAE,CACrB,EAAE,EAAE,MAAM,KACP,OAAO,CAAC,gBAAgB,GAAG;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,GAAG,SAAS,CAAC;IACrE,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC;IACzD,QAAQ,CAAC,sBAAsB,CAAC,SAAQ,MAAM,EAAE,KAAK,QAAQ,OAAO,CAAC;IACrE,QAAQ,CAAC,0BAA0B,CAAC,UAC5B,MAAM,KACT,QAAQ,gBAAgB,EAAE,CAAC;gBARvB,aAAa,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,EAC9D,YAAY,EAAE,CACrB,EAAE,EAAE,MAAM,KACP,OAAO,CAAC,gBAAgB,GAAG;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,GAAG,SAAS,CAAC,EAC5D,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAChD,sBAAsB,CAAC,SAAQ,MAAM,EAAE,KAAK,QAAQ,OAAO,CAAC,aAAA,EAC5D,0BAA0B,CAAC,UAC5B,MAAM,KACT,QAAQ,gBAAgB,EAAE,CAAC,aAAA;IASrB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IA2C9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAoB3E"}
@@ -4,6 +4,7 @@ exports.CustomSessionStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var session_1 = require("../session");
6
6
  var ShopifyErrors = tslib_1.__importStar(require("../../../error"));
7
+ var shop_validator_1 = require("../../../utils/shop-validator");
7
8
  var CustomSessionStorage = /** @class */ (function () {
8
9
  function CustomSessionStorage(storeCallback, loadCallback, deleteCallback, deleteSessionsCallback, findSessionsByShopCallback) {
9
10
  this.storeCallback = storeCallback;
@@ -62,6 +63,7 @@ var CustomSessionStorage = /** @class */ (function () {
62
63
  if (session.expires && typeof session.expires === 'string') {
63
64
  session.expires = new Date(session.expires);
64
65
  }
66
+ Object.setPrototypeOf(session, session_1.Session.prototype);
65
67
  return [2 /*return*/, session];
66
68
  }
67
69
  else {
@@ -119,16 +121,17 @@ var CustomSessionStorage = /** @class */ (function () {
119
121
  };
120
122
  CustomSessionStorage.prototype.findSessionsByShop = function (shop) {
121
123
  return tslib_1.__awaiter(this, void 0, void 0, function () {
122
- var sessions, error_5;
124
+ var cleanShop, sessions, error_5;
123
125
  return tslib_1.__generator(this, function (_a) {
124
126
  switch (_a.label) {
125
127
  case 0:
128
+ cleanShop = (0, shop_validator_1.sanitizeShop)(shop, true);
126
129
  sessions = [];
127
130
  if (!this.findSessionsByShopCallback) return [3 /*break*/, 5];
128
131
  _a.label = 1;
129
132
  case 1:
130
133
  _a.trys.push([1, 3, , 4]);
131
- return [4 /*yield*/, this.findSessionsByShopCallback(shop)];
134
+ return [4 /*yield*/, this.findSessionsByShopCallback(cleanShop)];
132
135
  case 2:
133
136
  sessions = _a.sent();
134
137
  return [3 /*break*/, 4];
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAElD,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAwC;IAE3C,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAI9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAM3E"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAwC;IAE3C,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAI9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAQ3E"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MemorySessionStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
+ var shop_validator_1 = require("../../../utils/shop-validator");
5
6
  var MemorySessionStorage = /** @class */ (function () {
6
7
  function MemorySessionStorage() {
7
8
  this.sessions = {};
@@ -42,9 +43,10 @@ var MemorySessionStorage = /** @class */ (function () {
42
43
  };
43
44
  MemorySessionStorage.prototype.findSessionsByShop = function (shop) {
44
45
  return tslib_1.__awaiter(this, void 0, void 0, function () {
45
- var results;
46
+ var cleanShop, results;
46
47
  return tslib_1.__generator(this, function (_a) {
47
- results = Object.values(this.sessions).filter(function (session) { return session.shop === shop; });
48
+ cleanShop = (0, shop_validator_1.sanitizeShop)(shop, true);
49
+ results = Object.values(this.sessions).filter(function (session) { return session.shop === cleanShop; });
48
50
  return [2 /*return*/, results];
49
51
  });
50
52
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/mongodb.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,4BAA4B;IAC3C,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAKD,qBAAa,qBAAsB,YAAW,cAAc;IAyBxD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IAzBhB,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,4BAA4B,CAAC;IAa7C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAA+B;IAE9C,OAAO,CAAC,MAAM,CAAM;gBAGV,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,MAAM,EACtB,IAAI,GAAE,OAAO,CAAC,4BAA4B,CAAM;IASrC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAazD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQ9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAM/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAW7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,OAAO,KAAK,UAAU,GAIrB;YAEa,IAAI;YAOJ,oBAAoB;YAOpB,gBAAgB;CAM/B"}
1
+ {"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/mongodb.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAIlD,MAAM,WAAW,4BAA4B;IAC3C,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAKD,qBAAa,qBAAsB,YAAW,cAAc;IAyBxD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IAzBhB,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,4BAA4B,CAAC;IAa7C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAA+B;IAE9C,OAAO,CAAC,MAAM,CAAM;gBAGV,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,MAAM,EACtB,IAAI,GAAE,OAAO,CAAC,4BAA4B,CAAM;IASrC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAazD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQ9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAM/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAY7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,OAAO,KAAK,UAAU,GAIrB;YAEa,IAAI;YAOJ,oBAAoB;YAOpB,gBAAgB;CAM/B"}
@@ -4,6 +4,7 @@ exports.MongoDBSessionStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var mongodb = tslib_1.__importStar(require("mongodb"));
6
6
  var session_utils_1 = require("../session-utils");
7
+ var shop_validator_1 = require("../../../utils/shop-validator");
7
8
  var defaultMongoDBSessionStorageOptions = {
8
9
  sessionCollectionName: 'shopify_sessions',
9
10
  };
@@ -86,13 +87,14 @@ var MongoDBSessionStorage = /** @class */ (function () {
86
87
  };
87
88
  MongoDBSessionStorage.prototype.findSessionsByShop = function (shop) {
88
89
  return tslib_1.__awaiter(this, void 0, void 0, function () {
89
- var rawResults;
90
+ var cleanShop, rawResults;
90
91
  return tslib_1.__generator(this, function (_a) {
91
92
  switch (_a.label) {
92
93
  case 0: return [4 /*yield*/, this.ready];
93
94
  case 1:
94
95
  _a.sent();
95
- return [4 /*yield*/, this.collection.find({ shop: shop }).toArray()];
96
+ cleanShop = (0, shop_validator_1.sanitizeShop)(shop, true);
97
+ return [4 /*yield*/, this.collection.find({ shop: cleanShop }).toArray()];
96
98
  case 2:
97
99
  rawResults = _a.sent();
98
100
  if (!rawResults || (rawResults === null || rawResults === void 0 ? void 0 : rawResults.length) === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/mysql.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,qBAAa,mBAAoB,YAAW,cAAc;IAuBtD,OAAO,CAAC,KAAK;IAtBf,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC;IAY3C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAAmB;gBAG3B,KAAK,EAAE,GAAG,EAClB,IAAI,GAAE,OAAO,CAAC,0BAA0B,CAAM;IASnC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAY9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAe7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAI1B,IAAI;YAKJ,eAAe;YAQf,WAAW;IAmBzB,OAAO,CAAC,KAAK;CAGd"}
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/mysql.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAIlD,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,qBAAa,mBAAoB,YAAW,cAAc;IAuBtD,OAAO,CAAC,KAAK;IAtBf,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC;IAY3C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAAmB;gBAG3B,KAAK,EAAE,GAAG,EAClB,IAAI,GAAE,OAAO,CAAC,0BAA0B,CAAM;IASnC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAY9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAiB7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAI1B,IAAI;YAKJ,eAAe;YAQf,WAAW;IAmBzB,OAAO,CAAC,KAAK;CAGd"}
@@ -4,6 +4,7 @@ exports.MySQLSessionStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var promise_1 = tslib_1.__importDefault(require("mysql2/promise"));
6
6
  var session_utils_1 = require("../session-utils");
7
+ var shop_validator_1 = require("../../../utils/shop-validator");
7
8
  var defaultMySQLSessionStorageOptions = {
8
9
  sessionTableName: 'shopify_sessions',
9
10
  };
@@ -100,14 +101,15 @@ var MySQLSessionStorage = /** @class */ (function () {
100
101
  };
101
102
  MySQLSessionStorage.prototype.findSessionsByShop = function (shop) {
102
103
  return tslib_1.__awaiter(this, void 0, void 0, function () {
103
- var query, _a, rows, results;
104
+ var cleanShop, query, _a, rows, results;
104
105
  return tslib_1.__generator(this, function (_b) {
105
106
  switch (_b.label) {
106
107
  case 0: return [4 /*yield*/, this.ready];
107
108
  case 1:
108
109
  _b.sent();
110
+ cleanShop = (0, shop_validator_1.sanitizeShop)(shop, true);
109
111
  query = "\n SELECT * FROM ".concat(this.options.sessionTableName, "\n WHERE shop = ?;\n ");
110
- return [4 /*yield*/, this.query(query, [shop])];
112
+ return [4 /*yield*/, this.query(query, [cleanShop])];
111
113
  case 2:
112
114
  _a = tslib_1.__read.apply(void 0, [_b.sent(), 1]), rows = _a[0];
113
115
  if (!Array.isArray(rows) || (rows === null || rows === void 0 ? void 0 : rows.length) === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/postgresql.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,+BAA+B;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,qBAAa,wBAAyB,YAAW,cAAc;IAuB3D,OAAO,CAAC,KAAK;IAtBf,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,+BAA+B,CAAC;IAYhD,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAAY;gBAGhB,KAAK,EAAE,GAAG,EAClB,IAAI,GAAE,OAAO,CAAC,+BAA+B,CAAM;IASxC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAY9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAenE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAIpB,IAAI;YAMJ,aAAa;YAIb,eAAe;YAQf,WAAW;YAmBX,KAAK;CAIpB"}
1
+ {"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/postgresql.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAIlD,MAAM,WAAW,+BAA+B;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,qBAAa,wBAAyB,YAAW,cAAc;IAuB3D,OAAO,CAAC,KAAK;IAtBf,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,+BAA+B,CAAC;IAYhD,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAAY;gBAGhB,KAAK,EAAE,GAAG,EAClB,IAAI,GAAE,OAAO,CAAC,+BAA+B,CAAM;IASxC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAY9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAiBnE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAIpB,IAAI;YAMJ,aAAa;YAIb,eAAe;YAQf,WAAW;YAmBX,KAAK;CAIpB"}
@@ -4,6 +4,7 @@ exports.PostgreSQLSessionStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var pg_1 = tslib_1.__importDefault(require("pg"));
6
6
  var session_utils_1 = require("../session-utils");
7
+ var shop_validator_1 = require("../../../utils/shop-validator");
7
8
  var defaultPostgreSQLSessionStorageOptions = {
8
9
  sessionTableName: 'shopify_sessions',
9
10
  port: 3211,
@@ -106,14 +107,15 @@ var PostgreSQLSessionStorage = /** @class */ (function () {
106
107
  };
107
108
  PostgreSQLSessionStorage.prototype.findSessionsByShop = function (shop) {
108
109
  return tslib_1.__awaiter(this, void 0, void 0, function () {
109
- var query, rows, results;
110
+ var cleanShop, query, rows, results;
110
111
  return tslib_1.__generator(this, function (_a) {
111
112
  switch (_a.label) {
112
113
  case 0: return [4 /*yield*/, this.ready];
113
114
  case 1:
114
115
  _a.sent();
116
+ cleanShop = (0, shop_validator_1.sanitizeShop)(shop, true);
115
117
  query = "\n SELECT * FROM ".concat(this.options.sessionTableName, "\n WHERE shop = $1;\n ");
116
- return [4 /*yield*/, this.query(query, [shop])];
118
+ return [4 /*yield*/, this.query(query, [cleanShop])];
117
119
  case 2:
118
120
  rows = _a.sent();
119
121
  if (!Array.isArray(rows) || (rows === null || rows === void 0 ? void 0 : rows.length) === 0)
@@ -1,6 +1,7 @@
1
+ import { RedisClientOptions } from 'redis';
1
2
  import { SessionInterface } from '../types';
2
3
  import { SessionStorage } from '../session_storage';
3
- export interface RedisSessionStorageOptions {
4
+ export interface RedisSessionStorageOptions extends RedisClientOptions {
4
5
  sessionKeyPrefix: string;
5
6
  }
6
7
  export declare class RedisSessionStorage implements SessionStorage {
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/redis.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,qBAAa,mBAAoB,YAAW,cAAc;IAuBtD,OAAO,CAAC,KAAK;IAtBf,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC;IAY3C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAkB;gBAGtB,KAAK,EAAE,GAAG,EAClB,IAAI,GAAE,OAAO,CAAC,0BAA0B,CAAM;IASnC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAW9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAM/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAgB7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,OAAO,CAAC,OAAO;YAID,IAAI;CAMnB"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,kBAAkB,EAAC,MAAM,OAAO,CAAC;AAExE,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAIlD,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,qBAAa,mBAAoB,YAAW,cAAc;IAuBtD,OAAO,CAAC,KAAK;IAtBf,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC;IAY3C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAkB;gBAGtB,KAAK,EAAE,GAAG,EAClB,IAAI,GAAE,OAAO,CAAC,0BAA0B,CAAM;IASnC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAW9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAM/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAiB7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,OAAO,CAAC,OAAO;YAID,IAAI;CAOnB"}
@@ -4,6 +4,7 @@ exports.RedisSessionStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var redis_1 = require("redis");
6
6
  var session_utils_1 = require("../session-utils");
7
+ var shop_validator_1 = require("../../../utils/shop-validator");
7
8
  var defaultRedisSessionStorageOptions = {
8
9
  sessionKeyPrefix: 'shopify_sessions',
9
10
  };
@@ -87,13 +88,14 @@ var RedisSessionStorage = /** @class */ (function () {
87
88
  };
88
89
  RedisSessionStorage.prototype.findSessionsByShop = function (shop) {
89
90
  return tslib_1.__awaiter(this, void 0, void 0, function () {
90
- var keys, results, keys_1, keys_1_1, key, rawResult, session, e_1_1;
91
+ var cleanShop, keys, results, keys_1, keys_1_1, key, rawResult, session, e_1_1;
91
92
  var e_1, _a;
92
93
  return tslib_1.__generator(this, function (_b) {
93
94
  switch (_b.label) {
94
95
  case 0: return [4 /*yield*/, this.ready];
95
96
  case 1:
96
97
  _b.sent();
98
+ cleanShop = (0, shop_validator_1.sanitizeShop)(shop, true);
97
99
  return [4 /*yield*/, this.client.keys('*')];
98
100
  case 2:
99
101
  keys = _b.sent();
@@ -112,7 +114,7 @@ var RedisSessionStorage = /** @class */ (function () {
112
114
  if (!rawResult)
113
115
  return [3 /*break*/, 6];
114
116
  session = (0, session_utils_1.sessionFromEntries)(JSON.parse(rawResult));
115
- if (session.shop === shop)
117
+ if (session.shop === cleanShop)
116
118
  results.push(session);
117
119
  _b.label = 6;
118
120
  case 6:
@@ -154,9 +156,7 @@ var RedisSessionStorage = /** @class */ (function () {
154
156
  return tslib_1.__generator(this, function (_a) {
155
157
  switch (_a.label) {
156
158
  case 0:
157
- this.client = (0, redis_1.createClient)({
158
- url: this.dbUrl.toString(),
159
- });
159
+ this.client = (0, redis_1.createClient)(tslib_1.__assign(tslib_1.__assign({}, this.options), { url: this.dbUrl.toString() }));
160
160
  return [4 /*yield*/, this.client.connect()];
161
161
  case 1:
162
162
  _a.sent();
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,qBAAa,oBAAqB,YAAW,cAAc;IAMvD,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,KAAK,CAAgB;gBAGnB,QAAQ,EAAE,MAAM,EACxB,IAAI,GAAE,OAAO,CAAC,2BAA2B,CAAM;IAOpC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAa9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAe5D,eAAe;YAWf,IAAI;IAmBlB,OAAO,CAAC,KAAK;CAWd"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAIlD,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,qBAAa,oBAAqB,YAAW,cAAc;IAMvD,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,KAAK,CAAgB;gBAGnB,QAAQ,EAAE,MAAM,EACxB,IAAI,GAAE,OAAO,CAAC,2BAA2B,CAAM;IAOpC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAa9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAiB5D,eAAe;YAWf,IAAI;IAmBlB,OAAO,CAAC,KAAK;CAWd"}
@@ -4,6 +4,7 @@ exports.SQLiteSessionStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var sqlite3_1 = tslib_1.__importDefault(require("sqlite3"));
6
6
  var session_utils_1 = require("../session-utils");
7
+ var shop_validator_1 = require("../../../utils/shop-validator");
7
8
  var defaultSQLiteSessionStorageOptions = {
8
9
  sessionTableName: 'shopify_sessions',
9
10
  };
@@ -95,14 +96,16 @@ var SQLiteSessionStorage = /** @class */ (function () {
95
96
  };
96
97
  SQLiteSessionStorage.prototype.findSessionsByShop = function (shop) {
97
98
  return tslib_1.__awaiter(this, void 0, void 0, function () {
98
- var query, rows, results;
99
+ var cleanShop, query, rows, results;
99
100
  return tslib_1.__generator(this, function (_a) {
100
101
  switch (_a.label) {
101
- case 0: return [4 /*yield*/, this.ready];
102
+ case 0:
103
+ cleanShop = (0, shop_validator_1.sanitizeShop)(shop, true);
104
+ return [4 /*yield*/, this.ready];
102
105
  case 1:
103
106
  _a.sent();
104
107
  query = "\n SELECT * FROM ".concat(this.options.sessionTableName, "\n WHERE shop = ?;\n ");
105
- return [4 /*yield*/, this.query(query, [shop])];
108
+ return [4 /*yield*/, this.query(query, [cleanShop])];
106
109
  case 2:
107
110
  rows = _a.sent();
108
111
  if (!Array.isArray(rows) || (rows === null || rows === void 0 ? void 0 : rows.length) === 0)
@@ -13,6 +13,7 @@ export interface ContextParams {
13
13
  LOG_FILE?: string;
14
14
  USER_AGENT_PREFIX?: string;
15
15
  PRIVATE_APP_STOREFRONT_ACCESS_TOKEN?: string;
16
+ CUSTOM_SHOP_DOMAINS?: (RegExp | string)[];
16
17
  }
17
18
  export declare enum ApiVersion {
18
19
  October21 = "2021-10",
@@ -1 +1 @@
1
- {"version":3,"file":"base-types.d.ts","sourceRoot":"","sources":["../src/base-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,UAAU,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC,CAAC,EAAE,MAAM,CAAC;CAC9C;AAED,oBAAY,UAAU;IACpB,SAAS,YAAY;IACrB,SAAS,YAAY;IACrB,OAAO,YAAY;IACnB,MAAM,YAAY;IAClB,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAEpD,oBAAY,aAAa;IACvB,WAAW,2BAA2B;IACtC,qBAAqB,sCAAsC;IAC3D,IAAI,0BAA0B;IAC9B,KAAK,oBAAoB;IACzB,MAAM,0BAA0B;CACjC"}
1
+ {"version":3,"file":"base-types.d.ts","sourceRoot":"","sources":["../src/base-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,UAAU,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC,CAAC,EAAE,MAAM,CAAC;IAC7C,mBAAmB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CAC3C;AAED,oBAAY,UAAU;IACpB,SAAS,YAAY;IACrB,SAAS,YAAY;IACrB,OAAO,YAAY;IACnB,MAAM,YAAY;IAClB,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAEpD,oBAAY,aAAa;IACvB,WAAW,2BAA2B;IACtC,qBAAqB,sCAAsC;IAC3D,IAAI,0BAA0B;IAC9B,KAAK,oBAAoB;IACzB,MAAM,0BAA0B;CACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"graphql_client.d.ts","sourceRoot":"","sources":["../../../src/clients/graphql/graphql_client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAW,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,aAAa;IAKZ,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,WAAW,CAAC;IAJ1D,SAAS,CAAC,WAAW,SAAgB;IAErC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,MAAM,EAAW,WAAW,CAAC,oBAAQ;IAU5D,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAwB1D,SAAS,CAAC,oBAAoB,IAAI,iBAAiB;CAQpD"}
1
+ {"version":3,"file":"graphql_client.d.ts","sourceRoot":"","sources":["../../../src/clients/graphql/graphql_client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,aAAa;IAKZ,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,WAAW,CAAC;IAJ1D,SAAS,CAAC,WAAW,SAAgB;IAErC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,MAAM,EAAW,WAAW,CAAC,oBAAQ;IAU5D,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAgC1D,SAAS,CAAC,oBAAoB,IAAI,iBAAiB;CAQpD"}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GraphqlClient = void 0;
4
4
  var tslib_1 = require("tslib");
5
- var error_1 = require("../../error");
6
5
  var context_1 = require("../../context");
7
6
  var base_types_1 = require("../../base-types");
8
7
  var http_client_1 = require("../http_client/http_client");
@@ -20,22 +19,34 @@ var GraphqlClient = /** @class */ (function () {
20
19
  }
21
20
  GraphqlClient.prototype.query = function (params) {
22
21
  return tslib_1.__awaiter(this, void 0, void 0, function () {
23
- var accessTokenHeader, path, dataType;
22
+ var accessTokenHeader, path, dataType, result;
24
23
  var _a;
25
24
  return tslib_1.__generator(this, function (_b) {
26
- if (params.data.length === 0) {
27
- throw new error_1.MissingRequiredArgument('Query missing.');
25
+ switch (_b.label) {
26
+ case 0:
27
+ if (params.data.length === 0) {
28
+ throw new ShopifyErrors.MissingRequiredArgument('Query missing.');
29
+ }
30
+ accessTokenHeader = this.getAccessTokenHeader();
31
+ params.extraHeaders = tslib_1.__assign((_a = {}, _a[accessTokenHeader.header] = accessTokenHeader.value, _a), params.extraHeaders);
32
+ path = "".concat(this.baseApiPath, "/").concat(context_1.Context.API_VERSION, "/graphql.json");
33
+ if (typeof params.data === 'object') {
34
+ dataType = types_1.DataType.JSON;
35
+ }
36
+ else {
37
+ dataType = types_1.DataType.GraphQL;
38
+ }
39
+ return [4 /*yield*/, this.client.post(tslib_1.__assign({ path: path, type: dataType }, params))];
40
+ case 1:
41
+ result = _b.sent();
42
+ if (result.body.errors) {
43
+ throw new ShopifyErrors.GraphqlQueryError({
44
+ message: 'GraphQL query returned errors',
45
+ response: result.body,
46
+ });
47
+ }
48
+ return [2 /*return*/, result];
28
49
  }
29
- accessTokenHeader = this.getAccessTokenHeader();
30
- params.extraHeaders = tslib_1.__assign((_a = {}, _a[accessTokenHeader.header] = accessTokenHeader.value, _a), params.extraHeaders);
31
- path = "".concat(this.baseApiPath, "/").concat(context_1.Context.API_VERSION, "/graphql.json");
32
- if (typeof params.data === 'object') {
33
- dataType = types_1.DataType.JSON;
34
- }
35
- else {
36
- dataType = types_1.DataType.GraphQL;
37
- }
38
- return [2 /*return*/, this.client.post(tslib_1.__assign({ path: path, type: dataType }, params))];
39
50
  });
40
51
  });
41
52
  };
@@ -107,7 +107,7 @@ var HttpClient = /** @class */ (function () {
107
107
  body = data;
108
108
  break;
109
109
  }
110
- headers = tslib_1.__assign({ 'Content-Type': type, 'Content-Length': Buffer.byteLength(body) }, params.extraHeaders);
110
+ headers = tslib_1.__assign(tslib_1.__assign({}, headers), { 'Content-Type': type, 'Content-Length': Buffer.byteLength(body) });
111
111
  }
112
112
  }
113
113
  url = "https://".concat(this.domain).concat(this.getRequestPath(params.path)).concat(processed_query_1.default.stringify(params.query));
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAa,aAAa,EAAC,MAAM,cAAc,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,UAAU,gBAAiB,SAAQ,aAAa;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,cAAc,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAExC;;OAEG;IACH,oBAAoB,IAAI,IAAI,GAAG,KAAK,CAAC;IAErC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;CAClD;AAOD,QAAA,MAAM,OAAO,EAAE,gBAqFd,CAAC;AAEF,OAAO,EAAC,OAAO,EAAE,gBAAgB,EAAC,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAa,aAAa,EAAC,MAAM,cAAc,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,UAAU,gBAAiB,SAAQ,aAAa;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,cAAc,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAExC;;OAEG;IACH,oBAAoB,IAAI,IAAI,GAAG,KAAK,CAAC;IAErC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;CAClD;AAOD,QAAA,MAAM,OAAO,EAAE,gBAyFd,CAAC;AAEF,OAAO,EAAC,OAAO,EAAE,gBAAgB,EAAC,CAAC"}
package/dist/context.js CHANGED
@@ -68,6 +68,9 @@ var Context = {
68
68
  this.PRIVATE_APP_STOREFRONT_ACCESS_TOKEN =
69
69
  params.PRIVATE_APP_STOREFRONT_ACCESS_TOKEN;
70
70
  }
71
+ if (params.CUSTOM_SHOP_DOMAINS) {
72
+ this.CUSTOM_SHOP_DOMAINS = params.CUSTOM_SHOP_DOMAINS;
73
+ }
71
74
  },
72
75
  throwIfUninitialized: function () {
73
76
  if (!this.API_KEY || this.API_KEY.length === 0) {
package/dist/error.d.ts CHANGED
@@ -5,6 +5,8 @@ export declare class InvalidHmacError extends ShopifyError {
5
5
  }
6
6
  export declare class InvalidShopError extends ShopifyError {
7
7
  }
8
+ export declare class InvalidHostError extends ShopifyError {
9
+ }
8
10
  export declare class InvalidJwtError extends ShopifyError {
9
11
  }
10
12
  export declare class MissingJwtTokenError extends ShopifyError {
@@ -52,6 +54,17 @@ export declare class HttpThrottlingError extends HttpRetriableError {
52
54
  }
53
55
  export declare class RestResourceError extends ShopifyError {
54
56
  }
57
+ export declare class GraphqlQueryError extends ShopifyError {
58
+ readonly response: {
59
+ [key: string]: unknown;
60
+ };
61
+ constructor({ message, response, }: {
62
+ message: string;
63
+ response: {
64
+ [key: string]: unknown;
65
+ };
66
+ });
67
+ }
55
68
  export declare class InvalidOAuthError extends ShopifyError {
56
69
  }
57
70
  export declare class SessionNotFound extends ShopifyError {
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;gBACzB,GAAG,IAAI,EAAE,GAAG;CAIzB;AAED,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,eAAgB,SAAQ,YAAY;CAAG;AACpD,qBAAa,oBAAqB,SAAQ,YAAY;CAAG;AAEzD,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,yBAA0B,SAAQ,YAAY;CAAG;AAC9D,qBAAa,eAAgB,SAAQ,YAAY;CAAG;AAEpD,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AAExD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IAChC,OAAO,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;CACpC;AACD,UAAU,uBAAwB,SAAQ,gBAAgB;IACxD,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;gBAEjB,EACjB,OAAO,EACP,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,OAAO,GACR,EAAE,uBAAuB;CAS3B;AACD,qBAAa,kBAAmB,SAAQ,iBAAiB;CAAG;AAC5D,qBAAa,iBAAkB,SAAQ,kBAAkB;CAAG;AAE5D,UAAU,uBAAwB,SAAQ,gBAAgB;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,UAAU,yBAA0B,SAAQ,uBAAuB;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;gBAExB,EAAC,UAAU,EAAE,GAAG,MAAM,EAAC,EAAE,yBAAyB;CAItE;AAED,qBAAa,iBAAkB,SAAQ,YAAY;CAAG;AAEtD,qBAAa,iBAAkB,SAAQ,YAAY;CAAG;AACtD,qBAAa,eAAgB,SAAQ,YAAY;CAAG;AACpD,qBAAa,cAAe,SAAQ,YAAY;CAAG;AACnD,qBAAa,cAAe,SAAQ,YAAY;CAAG;AAEnD,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AACxD,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AAExD,qBAAa,uBAAwB,SAAQ,YAAY;CAAG;AAC5D,qBAAa,qBAAsB,SAAQ,YAAY;CAAG;AAE1D,qBAAa,mBAAoB,SAAQ,YAAY;CAAG"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;gBACzB,GAAG,IAAI,EAAE,GAAG;CAIzB;AAED,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,eAAgB,SAAQ,YAAY;CAAG;AACpD,qBAAa,oBAAqB,SAAQ,YAAY;CAAG;AAEzD,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,yBAA0B,SAAQ,YAAY;CAAG;AAC9D,qBAAa,eAAgB,SAAQ,YAAY;CAAG;AAEpD,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AAExD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IAChC,OAAO,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;CACpC;AACD,UAAU,uBAAwB,SAAQ,gBAAgB;IACxD,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;gBAEjB,EACjB,OAAO,EACP,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,OAAO,GACR,EAAE,uBAAuB;CAS3B;AACD,qBAAa,kBAAmB,SAAQ,iBAAiB;CAAG;AAC5D,qBAAa,iBAAkB,SAAQ,kBAAkB;CAAG;AAE5D,UAAU,uBAAwB,SAAQ,gBAAgB;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,UAAU,yBAA0B,SAAQ,uBAAuB;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;gBAExB,EAAC,UAAU,EAAE,GAAG,MAAM,EAAC,EAAE,yBAAyB;CAItE;AAED,qBAAa,iBAAkB,SAAQ,YAAY;CAAG;AACtD,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,QAAQ,CAAC,QAAQ,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;gBAEzB,EACjB,OAAO,EACP,QAAQ,GACT,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAC,CAAC;KACpC;CAIF;AAED,qBAAa,iBAAkB,SAAQ,YAAY;CAAG;AACtD,qBAAa,eAAgB,SAAQ,YAAY;CAAG;AACpD,qBAAa,cAAe,SAAQ,YAAY;CAAG;AACnD,qBAAa,cAAe,SAAQ,YAAY;CAAG;AAEnD,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AACxD,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AAExD,qBAAa,uBAAwB,SAAQ,YAAY;CAAG;AAC5D,qBAAa,qBAAsB,SAAQ,YAAY;CAAG;AAE1D,qBAAa,mBAAoB,SAAQ,YAAY;CAAG"}
package/dist/error.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InvalidRequestError = exports.UnsupportedClientType = exports.MissingRequiredArgument = exports.SessionStorageError = exports.InvalidWebhookError = exports.InvalidSession = exports.CookieNotFound = exports.SessionNotFound = exports.InvalidOAuthError = exports.RestResourceError = exports.HttpThrottlingError = exports.HttpInternalError = exports.HttpRetriableError = exports.HttpResponseError = exports.HttpMaxRetriesError = exports.HttpRequestError = exports.PrivateAppError = exports.UninitializedContextError = exports.SafeCompareError = exports.MissingJwtTokenError = exports.InvalidJwtError = exports.InvalidShopError = exports.InvalidHmacError = exports.ShopifyError = void 0;
3
+ exports.InvalidRequestError = exports.UnsupportedClientType = exports.MissingRequiredArgument = exports.SessionStorageError = exports.InvalidWebhookError = exports.InvalidSession = exports.CookieNotFound = exports.SessionNotFound = exports.InvalidOAuthError = exports.GraphqlQueryError = exports.RestResourceError = exports.HttpThrottlingError = exports.HttpInternalError = exports.HttpRetriableError = exports.HttpResponseError = exports.HttpMaxRetriesError = exports.HttpRequestError = exports.PrivateAppError = exports.UninitializedContextError = exports.SafeCompareError = exports.MissingJwtTokenError = exports.InvalidJwtError = exports.InvalidHostError = exports.InvalidShopError = exports.InvalidHmacError = exports.ShopifyError = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var ShopifyError = /** @class */ (function (_super) {
6
6
  tslib_1.__extends(ShopifyError, _super);
@@ -33,6 +33,14 @@ var InvalidShopError = /** @class */ (function (_super) {
33
33
  return InvalidShopError;
34
34
  }(ShopifyError));
35
35
  exports.InvalidShopError = InvalidShopError;
36
+ var InvalidHostError = /** @class */ (function (_super) {
37
+ tslib_1.__extends(InvalidHostError, _super);
38
+ function InvalidHostError() {
39
+ return _super !== null && _super.apply(this, arguments) || this;
40
+ }
41
+ return InvalidHostError;
42
+ }(ShopifyError));
43
+ exports.InvalidHostError = InvalidHostError;
36
44
  var InvalidJwtError = /** @class */ (function (_super) {
37
45
  tslib_1.__extends(InvalidJwtError, _super);
38
46
  function InvalidJwtError() {
@@ -141,6 +149,17 @@ var RestResourceError = /** @class */ (function (_super) {
141
149
  return RestResourceError;
142
150
  }(ShopifyError));
143
151
  exports.RestResourceError = RestResourceError;
152
+ var GraphqlQueryError = /** @class */ (function (_super) {
153
+ tslib_1.__extends(GraphqlQueryError, _super);
154
+ function GraphqlQueryError(_a) {
155
+ var message = _a.message, response = _a.response;
156
+ var _this = _super.call(this, message) || this;
157
+ _this.response = response;
158
+ return _this;
159
+ }
160
+ return GraphqlQueryError;
161
+ }(ShopifyError));
162
+ exports.GraphqlQueryError = GraphqlQueryError;
144
163
  var InvalidOAuthError = /** @class */ (function (_super) {
145
164
  tslib_1.__extends(InvalidOAuthError, _super);
146
165
  function InvalidOAuthError() {
package/dist/index.d.ts CHANGED
@@ -37,7 +37,8 @@ export declare const Shopify: {
37
37
  safeCompare: typeof import("./utils/safe-compare").default;
38
38
  storeSession: typeof import("./utils/store-session").default;
39
39
  validateHmac: typeof import("./utils/hmac-validator").default;
40
- validateShop: typeof import("./utils/shop-validator").default;
40
+ sanitizeShop: typeof import("./utils/shop-validator").sanitizeShop;
41
+ sanitizeHost: typeof import("./utils/shop-validator").sanitizeHost;
41
42
  versionCompatible: typeof import("./utils/version-compatible").default;
42
43
  withSession: typeof import("./utils/with-session").default;
43
44
  getEmbeddedAppUrl: typeof import("./utils/get-embedded-app-url").default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,aAAa,MAAM,SAAS,CAAC;AAOzC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQnB,CAAC;AAEF,eAAe,OAAO,CAAC;AACvB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,aAAa,MAAM,SAAS,CAAC;AAOzC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQnB,CAAC;AAEF,eAAe,OAAO,CAAC;AACvB,cAAc,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete-offline-session.d.ts","sourceRoot":"","sources":["../../src/utils/delete-offline-session.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAA8B,oBAAoB,CAChD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAMlB"}
1
+ {"version":3,"file":"delete-offline-session.d.ts","sourceRoot":"","sources":["../../src/utils/delete-offline-session.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAA8B,oBAAoB,CAChD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAOlB"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var tslib_1 = require("tslib");
4
4
  var context_1 = require("../context");
5
5
  var oauth_1 = tslib_1.__importDefault(require("../auth/oauth"));
6
+ var shop_validator_1 = require("./shop-validator");
6
7
  /**
7
8
  * Helper method to find and delete offline sessions by shop url.
8
9
  *
@@ -10,10 +11,11 @@ var oauth_1 = tslib_1.__importDefault(require("../auth/oauth"));
10
11
  */
11
12
  function deleteOfflineSession(shop) {
12
13
  return tslib_1.__awaiter(this, void 0, void 0, function () {
13
- var sessionId;
14
+ var cleanShop, sessionId;
14
15
  return tslib_1.__generator(this, function (_a) {
15
16
  context_1.Context.throwIfUninitialized();
16
- sessionId = oauth_1.default.getOfflineSessionId(shop);
17
+ cleanShop = (0, shop_validator_1.sanitizeShop)(shop, true);
18
+ sessionId = oauth_1.default.getOfflineSessionId(cleanShop);
17
19
  return [2 /*return*/, context_1.Context.SESSION_STORAGE.deleteSession(sessionId)];
18
20
  });
19
21
  });
@@ -1 +1 @@
1
- {"version":3,"file":"get-embedded-app-url.d.ts","sourceRoot":"","sources":["../../src/utils/get-embedded-app-url.ts"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAKxB;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,OAAO,EAAE,IAAI,CAAC,eAAe,GAC5B,MAAM,CAyBR"}
1
+ {"version":3,"file":"get-embedded-app-url.d.ts","sourceRoot":"","sources":["../../src/utils/get-embedded-app-url.ts"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,OAAO,EAAE,IAAI,CAAC,eAAe,GAC5B,MAAM,CAyBR"}