@shopify/shopify-api 3.0.1 → 3.1.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 (69) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/__tests__/fake-resource-with-custom-prefix.d.ts.map +1 -1
  3. package/dist/__tests__/fake-resource-with-custom-prefix.js +7 -5
  4. package/dist/__tests__/fake-resource.d.ts.map +1 -1
  5. package/dist/__tests__/fake-resource.js +15 -13
  6. package/dist/auth/oauth/oauth.d.ts.map +1 -1
  7. package/dist/auth/oauth/oauth.js +11 -11
  8. package/dist/auth/scopes/index.js +5 -5
  9. package/dist/auth/session/index.d.ts +11 -1
  10. package/dist/auth/session/index.d.ts.map +1 -1
  11. package/dist/auth/session/index.js +16 -1
  12. package/dist/auth/session/session-utils.d.ts +7 -0
  13. package/dist/auth/session/session-utils.d.ts.map +1 -0
  14. package/dist/auth/session/session-utils.js +50 -0
  15. package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts +3 -0
  16. package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts.map +1 -0
  17. package/dist/auth/session/storage/__tests__/battery-of-tests.js +78 -0
  18. package/dist/auth/session/storage/__tests__/utils.d.ts +10 -0
  19. package/dist/auth/session/storage/__tests__/utils.d.ts.map +1 -0
  20. package/dist/auth/session/storage/__tests__/utils.js +87 -0
  21. package/dist/auth/session/storage/custom.js +4 -4
  22. package/dist/auth/session/storage/mongodb.d.ts +23 -0
  23. package/dist/auth/session/storage/mongodb.d.ts.map +1 -0
  24. package/dist/auth/session/storage/mongodb.js +150 -0
  25. package/dist/auth/session/storage/mysql.d.ts +22 -0
  26. package/dist/auth/session/storage/mysql.d.ts.map +1 -0
  27. package/dist/auth/session/storage/mysql.js +154 -0
  28. package/dist/auth/session/storage/postgresql.d.ts +24 -0
  29. package/dist/auth/session/storage/postgresql.d.ts.map +1 -0
  30. package/dist/auth/session/storage/postgresql.js +172 -0
  31. package/dist/auth/session/storage/redis.d.ts +20 -0
  32. package/dist/auth/session/storage/redis.d.ts.map +1 -0
  33. package/dist/auth/session/storage/redis.js +105 -0
  34. package/dist/auth/session/storage/sqlite.d.ts +19 -0
  35. package/dist/auth/session/storage/sqlite.d.ts.map +1 -0
  36. package/dist/auth/session/storage/sqlite.js +125 -0
  37. package/dist/base-rest-resource.d.ts +2 -1
  38. package/dist/base-rest-resource.d.ts.map +1 -1
  39. package/dist/base-rest-resource.js +29 -19
  40. package/dist/base-types.d.ts +1 -0
  41. package/dist/base-types.d.ts.map +1 -1
  42. package/dist/clients/graphql/graphql_client.js +1 -1
  43. package/dist/clients/http_client/http_client.js +16 -16
  44. package/dist/clients/rest/rest_client.js +5 -3
  45. package/dist/context.d.ts +1 -0
  46. package/dist/context.d.ts.map +1 -1
  47. package/dist/context.js +9 -3
  48. package/dist/error.js +4 -3
  49. package/dist/index.d.ts +5 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/rest-resources/2021-07/index.js +2 -0
  52. package/dist/rest-resources/2021-10/index.js +2 -0
  53. package/dist/rest-resources/2022-01/index.js +2 -0
  54. package/dist/rest-resources/2022-04/index.js +2 -0
  55. package/dist/utils/decode-session-token.js +1 -1
  56. package/dist/utils/graphql_proxy.js +1 -1
  57. package/dist/utils/hmac-validator.js +2 -5
  58. package/dist/utils/processed-query.js +3 -3
  59. package/dist/utils/safe-compare.d.ts.map +1 -1
  60. package/dist/utils/safe-compare.js +17 -15
  61. package/dist/utils/setup-jest.d.ts.map +1 -1
  62. package/dist/utils/setup-jest.js +4 -3
  63. package/dist/utils/with-session.js +3 -3
  64. package/dist/version.d.ts +1 -1
  65. package/dist/version.js +1 -1
  66. package/dist/webhooks/registry.d.ts +2 -1
  67. package/dist/webhooks/registry.d.ts.map +1 -1
  68. package/dist/webhooks/registry.js +39 -13
  69. package/package.json +12 -4
package/CHANGELOG.md CHANGED
@@ -7,6 +7,17 @@ and adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## [3.1.0] - 2022-05-16
11
+
12
+ ### Added
13
+ - Support for specifying the URI scheme of the host [#385](https://github.com/Shopify/shopify-node-api/pull/385)
14
+ - Add optional `saving` parameter to `serialize` of `Base` class - default is `false` and will include read-only attributes in returned object; `true` used for `save` when committing via API to Shopify.
15
+
16
+ ### Fixed
17
+ - Fixes [#363](https://github.com/Shopify/shopify-node-api/issues/363)
18
+ - Webhooks `register` now checks for any attempt to register a GDPR topic (not done via API but by Partner Dashboard), provides an error message in response
19
+ - For topics that don't exist, `register` checks the response from the initial API call for an `errors` field and returns accordingly
20
+
10
21
  ## [3.0.1] - 2022-04-11
11
22
 
12
23
  ### Added
@@ -1 +1 @@
1
- {"version":3,"file":"fake-resource-with-custom-prefix.d.ts","sourceRoot":"","sources":["../../src/__tests__/fake-resource-with-custom-prefix.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,UAAU,oCAAoC;IAC5C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,IAAI;IAC5D,OAAc,WAAW,aAAuB;IAChD,SAAS,CAAC,MAAM,CAAC,IAAI,SAAsC;IAC3D,SAAS,CAAC,MAAM,CAAC,WAAW,SAAwC;IACpE,SAAS,CAAC,MAAM,CAAC,aAAa,SAA0B;IAExD,SAAS,CAAC,MAAM,CAAC,OAAO,KAAM;IAC9B,SAAS,CAAC,MAAM,CAAC,QAAQ,KAAM;IAE/B,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,CAOpC;IAEF,OAAc,IAAI,qBAGf,oCAAoC,KAAG,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAMpF;IAEF,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
1
+ {"version":3,"file":"fake-resource-with-custom-prefix.d.ts","sourceRoot":"","sources":["../../src/__tests__/fake-resource-with-custom-prefix.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,UAAU,oCAAoC;IAC5C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,IAAI;IAC5D,OAAc,WAAW,aAAuB;IAChD,SAAS,CAAC,MAAM,CAAC,IAAI,SAAsC;IAC3D,SAAS,CAAC,MAAM,CAAC,WAAW,SAAwC;IACpE,SAAS,CAAC,MAAM,CAAC,aAAa,SAA0B;IAExD,SAAS,CAAC,MAAM,CAAC,OAAO,KAAM;IAC9B,SAAS,CAAC,MAAM,CAAC,QAAQ,KAAM;IAE/B,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,CAOpC;IAEF,OAAc,IAAI,qBAGf,oCAAoC,KAAG,QAAQ,4BAA4B,GAAG,IAAI,CAAC,CAMpF;IAEF,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
@@ -8,6 +8,8 @@ var FakeResourceWithCustomPrefix = /** @class */ (function (_super) {
8
8
  function FakeResourceWithCustomPrefix() {
9
9
  return _super !== null && _super.apply(this, arguments) || this;
10
10
  }
11
+ var _a;
12
+ _a = FakeResourceWithCustomPrefix;
11
13
  FakeResourceWithCustomPrefix.API_VERSION = base_types_1.ApiVersion.Unstable;
12
14
  FakeResourceWithCustomPrefix.NAME = 'fake_resource_with_custom_prefix';
13
15
  FakeResourceWithCustomPrefix.PLURAL_NAME = 'fake_resource_with_custom_prefixes';
@@ -22,18 +24,18 @@ var FakeResourceWithCustomPrefix = /** @class */ (function (_super) {
22
24
  path: 'fake_resource_with_custom_prefix/<id>.json',
23
25
  },
24
26
  ];
25
- FakeResourceWithCustomPrefix.find = function (_a) {
26
- var session = _a.session, id = _a.id;
27
+ FakeResourceWithCustomPrefix.find = function (_b) {
28
+ var session = _b.session, id = _b.id;
27
29
  return tslib_1.__awaiter(void 0, void 0, void 0, function () {
28
30
  var result;
29
- return tslib_1.__generator(this, function (_b) {
30
- switch (_b.label) {
31
+ return tslib_1.__generator(_a, function (_c) {
32
+ switch (_c.label) {
31
33
  case 0: return [4 /*yield*/, FakeResourceWithCustomPrefix.baseFind({
32
34
  session: session,
33
35
  urlIds: { id: id },
34
36
  })];
35
37
  case 1:
36
- result = _b.sent();
38
+ result = _c.sent();
37
39
  return [2 /*return*/, result ? result[0] : null];
38
40
  }
39
41
  });
@@ -1 +1 @@
1
- {"version":3,"file":"fake-resource.d.ts","sourceRoot":"","sources":["../../src/__tests__/fake-resource.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAC,QAAQ,EAAE,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,UAAU,sBAAsB;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,IAAI;IAC5C,OAAc,WAAW,aAAuB;IAChD,SAAS,CAAC,MAAM,CAAC,IAAI,SAAmB;IACxC,SAAS,CAAC,MAAM,CAAC,WAAW,SAAoB;IAEhD,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,EAAE,CAA4B;IAE3E,SAAS,CAAC,MAAM,CAAC,OAAO;;MAEtB;IAEF,SAAS,CAAC,MAAM,CAAC,QAAQ;;MAEvB;IAEF,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,CAiDpC;IAEF,OAAc,IAAI,6DAMf,oBAAoB,KAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAOpD;IAEF,OAAc,GAAG,yBAGd,mBAAmB,KAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAM9C;IAEF,OAAc,MAAM,wCAIjB,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAAC,CASvC;IAEF,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,kBAAkB,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC"}
1
+ {"version":3,"file":"fake-resource.d.ts","sourceRoot":"","sources":["../../src/__tests__/fake-resource.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAC,QAAQ,EAAE,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,UAAU,sBAAsB;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,IAAI;IAC5C,OAAc,WAAW,aAAuB;IAChD,SAAS,CAAC,MAAM,CAAC,IAAI,SAAmB;IACxC,SAAS,CAAC,MAAM,CAAC,WAAW,SAAoB;IAEhD,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,EAAE,CAA4B;IAE3E,SAAS,CAAC,MAAM,CAAC,OAAO;;MAEtB;IAEF,SAAS,CAAC,MAAM,CAAC,QAAQ;;MAEvB;IAEF,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,CAiDpC;IAEF,OAAc,IAAI,6DAMf,oBAAoB,KAAG,QAAQ,YAAY,GAAG,IAAI,CAAC,CAOpD;IAEF,OAAc,GAAG,yBAGd,mBAAmB,KAAG,QAAQ,YAAY,EAAE,CAAC,CAM9C;IAEF,OAAc,MAAM,wCAIjB,sBAAsB,KAAG,QAAQ,IAAI,CAAC,CASvC;IAEF,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,kBAAkB,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC"}
@@ -8,6 +8,8 @@ var FakeResource = /** @class */ (function (_super) {
8
8
  function FakeResource() {
9
9
  return _super !== null && _super.apply(this, arguments) || this;
10
10
  }
11
+ var _a;
12
+ _a = FakeResource;
11
13
  FakeResource.API_VERSION = base_types_1.ApiVersion.Unstable;
12
14
  FakeResource.NAME = 'fake_resource';
13
15
  FakeResource.PLURAL_NAME = 'fake_resources';
@@ -68,26 +70,26 @@ var FakeResource = /** @class */ (function (_super) {
68
70
  path: 'other_resources/<other_resource_id>/fake_resources/<id>.json',
69
71
  },
70
72
  ];
71
- FakeResource.find = function (_a) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
73
+ FakeResource.find = function (_b) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
72
74
  var result;
73
- var session = _a.session, params = _a.params, id = _a.id, _b = _a.other_resource_id, other_resource_id = _b === void 0 ? null : _b, otherArgs = tslib_1.__rest(_a, ["session", "params", "id", "other_resource_id"]);
74
- return tslib_1.__generator(this, function (_c) {
75
- switch (_c.label) {
75
+ var session = _b.session, params = _b.params, id = _b.id, _c = _b.other_resource_id, other_resource_id = _c === void 0 ? null : _c, otherArgs = tslib_1.__rest(_b, ["session", "params", "id", "other_resource_id"]);
76
+ return tslib_1.__generator(_a, function (_d) {
77
+ switch (_d.label) {
76
78
  case 0: return [4 /*yield*/, FakeResource.baseFind({
77
79
  session: session,
78
80
  urlIds: { id: id, other_resource_id: other_resource_id },
79
81
  params: tslib_1.__assign(tslib_1.__assign({}, params), otherArgs),
80
82
  })];
81
83
  case 1:
82
- result = _c.sent();
84
+ result = _d.sent();
83
85
  return [2 /*return*/, result ? result[0] : null];
84
86
  }
85
87
  });
86
88
  }); };
87
- FakeResource.all = function (_a) {
88
- var session = _a.session, params = _a.params;
89
+ FakeResource.all = function (_b) {
90
+ var session = _b.session, params = _b.params;
89
91
  return tslib_1.__awaiter(void 0, void 0, void 0, function () {
90
- return tslib_1.__generator(this, function (_b) {
92
+ return tslib_1.__generator(_a, function (_c) {
91
93
  return [2 /*return*/, FakeResource.baseFind({
92
94
  session: session,
93
95
  params: params,
@@ -96,12 +98,12 @@ var FakeResource = /** @class */ (function (_super) {
96
98
  });
97
99
  });
98
100
  };
99
- FakeResource.custom = function (_a) {
100
- var session = _a.session, id = _a.id, other_resource_id = _a.other_resource_id;
101
+ FakeResource.custom = function (_b) {
102
+ var session = _b.session, id = _b.id, other_resource_id = _b.other_resource_id;
101
103
  return tslib_1.__awaiter(void 0, void 0, void 0, function () {
102
104
  var response;
103
- return tslib_1.__generator(this, function (_b) {
104
- switch (_b.label) {
105
+ return tslib_1.__generator(_a, function (_c) {
106
+ switch (_c.label) {
105
107
  case 0: return [4 /*yield*/, FakeResource.request({
106
108
  http_method: 'get',
107
109
  operation: 'custom',
@@ -109,7 +111,7 @@ var FakeResource = /** @class */ (function (_super) {
109
111
  urlIds: { id: id, other_resource_id: other_resource_id },
110
112
  })];
111
113
  case 1:
112
- response = _b.sent();
114
+ response = _c.sent();
113
115
  return [2 /*return*/, response.body];
114
116
  }
115
117
  });
@@ -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,IAAI,CAAC,eAAe,YACnB,IAAI,CAAC,cAAc,QACvB,MAAM,gBACE,MAAM,uBAEnB,OAAO,CAAC,MAAM,CAAC;IAgDlB;;;;;;;;;;OAUG;kCAEQ,IAAI,CAAC,eAAe,YACnB,IAAI,CAAC,cAAc,SACtB,SAAS,GACf,OAAO,CAAC,gBAAgB,CAAC;IAuG5B;;;;;OAKG;gCAEQ,IAAI,CAAC,eAAe,YACnB,IAAI,CAAC,cAAc,GAC5B,MAAM,GAAG,SAAS;IAQrB;;;;;OAKG;0BACmB,MAAM,UAAU,MAAM,GAAG,MAAM;IAIrD;;;;OAIG;8BACuB,MAAM,GAAG,MAAM;IAIzC;;;;;;OAMG;iCAEQ,IAAI,CAAC,eAAe,YACnB,IAAI,CAAC,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;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"}
@@ -40,8 +40,8 @@ var ShopifyOAuth = {
40
40
  keys: [context_1.Context.API_SECRET_KEY],
41
41
  secure: true,
42
42
  });
43
- state = nonce_1.default();
44
- session = new session_1.Session(isOnline ? uuid_1.v4() : this.getOfflineSessionId(shop), shop, state, isOnline);
43
+ state = (0, nonce_1.default)();
44
+ session = new session_1.Session(isOnline ? (0, uuid_1.v4)() : this.getOfflineSessionId(shop), shop, state, isOnline);
45
45
  return [4 /*yield*/, context_1.Context.SESSION_STORAGE.storeSession(session)];
46
46
  case 1:
47
47
  sessionStored = _a.sent();
@@ -57,12 +57,12 @@ var ShopifyOAuth = {
57
57
  query = {
58
58
  client_id: context_1.Context.API_KEY,
59
59
  scope: context_1.Context.SCOPES.toString(),
60
- redirect_uri: "https://" + context_1.Context.HOST_NAME + redirectPath,
60
+ redirect_uri: "".concat(context_1.Context.HOST_SCHEME, "://").concat(context_1.Context.HOST_NAME).concat(redirectPath),
61
61
  state: state,
62
62
  'grant_options[]': isOnline ? 'per-user' : '',
63
63
  };
64
64
  queryString = querystring_1.default.stringify(query);
65
- return [2 /*return*/, "https://" + shop + "/admin/oauth/authorize?" + queryString];
65
+ return [2 /*return*/, "https://".concat(shop, "/admin/oauth/authorize?").concat(queryString)];
66
66
  }
67
67
  });
68
68
  });
@@ -92,13 +92,13 @@ var ShopifyOAuth = {
92
92
  });
93
93
  sessionCookie = this.getCookieSessionId(request, response);
94
94
  if (!sessionCookie) {
95
- throw new ShopifyErrors.CookieNotFound("Cannot complete OAuth process. Could not find an OAuth cookie for shop url: " + query.shop);
95
+ throw new ShopifyErrors.CookieNotFound("Cannot complete OAuth process. Could not find an OAuth cookie for shop url: ".concat(query.shop));
96
96
  }
97
97
  return [4 /*yield*/, context_1.Context.SESSION_STORAGE.loadSession(sessionCookie)];
98
98
  case 1:
99
99
  currentSession = _a.sent();
100
100
  if (!currentSession) {
101
- throw new ShopifyErrors.SessionNotFound("Cannot complete OAuth process. No session found for the specified shop url: " + query.shop);
101
+ throw new ShopifyErrors.SessionNotFound("Cannot complete OAuth process. No session found for the specified shop url: ".concat(query.shop));
102
102
  }
103
103
  if (!validQuery(query, currentSession)) {
104
104
  throw new ShopifyErrors.InvalidOAuthError('Invalid OAuth callback.');
@@ -127,7 +127,7 @@ var ShopifyOAuth = {
127
127
  currentSession.onlineAccessInfo = rest;
128
128
  if (!context_1.Context.IS_EMBEDDED_APP) return [3 /*break*/, 4];
129
129
  onlineInfo = currentSession.onlineAccessInfo;
130
- jwtSessionId = this.getJwtSessionId(currentSession.shop, "" + onlineInfo.associated_user.id);
130
+ jwtSessionId = this.getJwtSessionId(currentSession.shop, "".concat(onlineInfo.associated_user.id));
131
131
  jwtSession = session_1.Session.cloneSession(currentSession, jwtSessionId);
132
132
  return [4 /*yield*/, context_1.Context.SESSION_STORAGE.deleteSession(currentSession.id)];
133
133
  case 3:
@@ -181,7 +181,7 @@ var ShopifyOAuth = {
181
181
  * @param userId Current actor id
182
182
  */
183
183
  getJwtSessionId: function (shop, userId) {
184
- return shop + "_" + userId;
184
+ return "".concat(shop, "_").concat(userId);
185
185
  },
186
186
  /**
187
187
  * Builds an offline session id for the given shop.
@@ -189,7 +189,7 @@ var ShopifyOAuth = {
189
189
  * @param shop Shopify shop domain
190
190
  */
191
191
  getOfflineSessionId: function (shop) {
192
- return "offline_" + shop;
192
+ return "offline_".concat(shop);
193
193
  },
194
194
  /**
195
195
  * Extracts the current session id from the request / response pair.
@@ -208,7 +208,7 @@ var ShopifyOAuth = {
208
208
  if (!matches) {
209
209
  throw new ShopifyErrors.MissingJwtTokenError('Missing Bearer token in authorization header');
210
210
  }
211
- var jwtPayload = decode_session_token_1.default(matches[1]);
211
+ var jwtPayload = (0, decode_session_token_1.default)(matches[1]);
212
212
  var shop = jwtPayload.dest.replace(/^https:\/\//, '');
213
213
  if (isOnline) {
214
214
  currentSessionId = this.getJwtSessionId(shop, jwtPayload.sub);
@@ -236,5 +236,5 @@ exports.ShopifyOAuth = ShopifyOAuth;
236
236
  * @param session Current session
237
237
  */
238
238
  function validQuery(query, session) {
239
- return (hmac_validator_1.default(query) && safe_compare_1.default(query.state, session.state));
239
+ return ((0, hmac_validator_1.default)(query) && (0, safe_compare_1.default)(query.state, session.state));
240
240
  }
@@ -6,7 +6,7 @@ var AuthScopes = /** @class */ (function () {
6
6
  function AuthScopes(scopes) {
7
7
  var scopesArray = [];
8
8
  if (typeof scopes === 'string') {
9
- scopesArray = scopes.split(new RegExp(AuthScopes.SCOPE_DELIMITER + "\\s*"));
9
+ scopesArray = scopes.split(new RegExp("".concat(AuthScopes.SCOPE_DELIMITER, "\\s*")));
10
10
  }
11
11
  else if (scopes) {
12
12
  scopesArray = scopes;
@@ -17,8 +17,8 @@ var AuthScopes = /** @class */ (function () {
17
17
  var impliedScopes = this.getImpliedScopes(scopesArray);
18
18
  var scopeSet = new Set(scopesArray);
19
19
  var impliedSet = new Set(impliedScopes);
20
- this.compressedScopes = new Set(tslib_1.__spread(scopeSet).filter(function (x) { return !impliedSet.has(x); }));
21
- this.expandedScopes = new Set(tslib_1.__spread(scopeSet, impliedSet));
20
+ this.compressedScopes = new Set(tslib_1.__spreadArray([], tslib_1.__read(scopeSet), false).filter(function (x) { return !impliedSet.has(x); }));
21
+ this.expandedScopes = new Set(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(scopeSet), false), tslib_1.__read(impliedSet), false));
22
22
  }
23
23
  AuthScopes.prototype.has = function (scope) {
24
24
  var _this = this;
@@ -46,13 +46,13 @@ var AuthScopes = /** @class */ (function () {
46
46
  return this.toArray().join(AuthScopes.SCOPE_DELIMITER);
47
47
  };
48
48
  AuthScopes.prototype.toArray = function () {
49
- return tslib_1.__spread(this.compressedScopes);
49
+ return tslib_1.__spreadArray([], tslib_1.__read(this.compressedScopes), false);
50
50
  };
51
51
  AuthScopes.prototype.getImpliedScopes = function (scopesArray) {
52
52
  return scopesArray.reduce(function (array, current) {
53
53
  var matches = current.match(/^(unauthenticated_)?write_(.*)$/);
54
54
  if (matches) {
55
- array.push((matches[1] ? matches[1] : '') + "read_" + matches[2]);
55
+ array.push("".concat(matches[1] ? matches[1] : '', "read_").concat(matches[2]));
56
56
  }
57
57
  return array;
58
58
  }, []);
@@ -2,11 +2,21 @@ import { Session } from './session';
2
2
  import { SessionStorage } from './session_storage';
3
3
  import { MemorySessionStorage } from './storage/memory';
4
4
  import { CustomSessionStorage } from './storage/custom';
5
+ import { MySQLSessionStorage } from './storage/mysql';
6
+ import { MongoDBSessionStorage } from './storage/mongodb';
7
+ import { PostgreSQLSessionStorage } from './storage/postgresql';
8
+ import { RedisSessionStorage } from './storage/redis';
9
+ import { SQLiteSessionStorage } from './storage/sqlite';
5
10
  declare const ShopifySession: {
6
11
  Session: typeof Session;
7
12
  MemorySessionStorage: typeof MemorySessionStorage;
8
13
  CustomSessionStorage: typeof CustomSessionStorage;
14
+ MySQLSessionStorage: typeof MySQLSessionStorage;
15
+ MongoDBSessionStorage: typeof MongoDBSessionStorage;
16
+ PostgreSQLSessionStorage: typeof PostgreSQLSessionStorage;
17
+ RedisSessionStorage: typeof RedisSessionStorage;
18
+ SQLiteSessionStorage: typeof SQLiteSessionStorage;
9
19
  };
10
20
  export default ShopifySession;
11
- export { Session, SessionStorage, MemorySessionStorage, CustomSessionStorage };
21
+ export { Session, SessionStorage, MemorySessionStorage, CustomSessionStorage, MySQLSessionStorage, MongoDBSessionStorage, PostgreSQLSessionStorage, RedisSessionStorage, SQLiteSessionStorage, };
12
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAEtD,QAAA,MAAM,cAAc;;;;CAInB,CAAC;AAEF,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAC,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAC,wBAAwB,EAAC,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAC,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAEtD,QAAA,MAAM,cAAc;;;;;;;;;CASnB,CAAC;AAEF,eAAe,cAAc,CAAC;AAC9B,OAAO,EACL,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,GACrB,CAAC"}
@@ -1,15 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CustomSessionStorage = exports.MemorySessionStorage = exports.Session = void 0;
3
+ exports.SQLiteSessionStorage = exports.RedisSessionStorage = exports.PostgreSQLSessionStorage = exports.MongoDBSessionStorage = exports.MySQLSessionStorage = exports.CustomSessionStorage = exports.MemorySessionStorage = exports.Session = void 0;
4
4
  var session_1 = require("./session");
5
5
  Object.defineProperty(exports, "Session", { enumerable: true, get: function () { return session_1.Session; } });
6
6
  var memory_1 = require("./storage/memory");
7
7
  Object.defineProperty(exports, "MemorySessionStorage", { enumerable: true, get: function () { return memory_1.MemorySessionStorage; } });
8
8
  var custom_1 = require("./storage/custom");
9
9
  Object.defineProperty(exports, "CustomSessionStorage", { enumerable: true, get: function () { return custom_1.CustomSessionStorage; } });
10
+ var mysql_1 = require("./storage/mysql");
11
+ Object.defineProperty(exports, "MySQLSessionStorage", { enumerable: true, get: function () { return mysql_1.MySQLSessionStorage; } });
12
+ var mongodb_1 = require("./storage/mongodb");
13
+ Object.defineProperty(exports, "MongoDBSessionStorage", { enumerable: true, get: function () { return mongodb_1.MongoDBSessionStorage; } });
14
+ var postgresql_1 = require("./storage/postgresql");
15
+ Object.defineProperty(exports, "PostgreSQLSessionStorage", { enumerable: true, get: function () { return postgresql_1.PostgreSQLSessionStorage; } });
16
+ var redis_1 = require("./storage/redis");
17
+ Object.defineProperty(exports, "RedisSessionStorage", { enumerable: true, get: function () { return redis_1.RedisSessionStorage; } });
18
+ var sqlite_1 = require("./storage/sqlite");
19
+ Object.defineProperty(exports, "SQLiteSessionStorage", { enumerable: true, get: function () { return sqlite_1.SQLiteSessionStorage; } });
10
20
  var ShopifySession = {
11
21
  Session: session_1.Session,
12
22
  MemorySessionStorage: memory_1.MemorySessionStorage,
13
23
  CustomSessionStorage: custom_1.CustomSessionStorage,
24
+ MySQLSessionStorage: mysql_1.MySQLSessionStorage,
25
+ MongoDBSessionStorage: mongodb_1.MongoDBSessionStorage,
26
+ PostgreSQLSessionStorage: postgresql_1.PostgreSQLSessionStorage,
27
+ RedisSessionStorage: redis_1.RedisSessionStorage,
28
+ SQLiteSessionStorage: sqlite_1.SQLiteSessionStorage,
14
29
  };
15
30
  exports.default = ShopifySession;
@@ -0,0 +1,7 @@
1
+ import type { SessionInterface } from './types';
2
+ /**
3
+ * Like Object.fromEntries(), but normalizes the keys and filters out null values.
4
+ */
5
+ export declare function sessionFromEntries(entries: [string, string | number][]): SessionInterface;
6
+ export declare function sessionEntries(session: SessionInterface): [string, string | number][];
7
+ //# sourceMappingURL=session-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-utils.d.ts","sourceRoot":"","sources":["../../../src/auth/session/session-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAE9C;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,GACnC,gBAAgB,CAsBlB;AAUD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,GACxB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,CAE7B"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sessionEntries = exports.sessionFromEntries = void 0;
4
+ var tslib_1 = require("tslib");
5
+ /**
6
+ * Like Object.fromEntries(), but normalizes the keys and filters out null values.
7
+ */
8
+ function sessionFromEntries(entries) {
9
+ var obj = Object.fromEntries(entries
10
+ .filter(function (_a) {
11
+ var _b = tslib_1.__read(_a, 2), _key = _b[0], value = _b[1];
12
+ return value !== null;
13
+ })
14
+ .map(function (_a) {
15
+ var _b = tslib_1.__read(_a, 2), key = _b[0], value = _b[1];
16
+ switch (key.toLowerCase()) {
17
+ case 'isonline':
18
+ return ['isOnline', value];
19
+ case 'accesstoken':
20
+ return ['accessToken', value];
21
+ default:
22
+ return [key.toLowerCase(), value];
23
+ }
24
+ }));
25
+ if (typeof obj.isOnline === 'string') {
26
+ obj.isOnline = obj.isOnline.toString().toLowerCase() === 'true';
27
+ }
28
+ else if (typeof obj.isOnline === 'number') {
29
+ obj.isOnline = Boolean(obj.isOnline);
30
+ }
31
+ if (obj.scope)
32
+ obj.scope = obj.scope.toString();
33
+ return obj;
34
+ }
35
+ exports.sessionFromEntries = sessionFromEntries;
36
+ var includedKeys = [
37
+ 'id',
38
+ 'shop',
39
+ 'state',
40
+ 'isOnline',
41
+ 'scope',
42
+ 'accessToken',
43
+ ];
44
+ function sessionEntries(session) {
45
+ return Object.entries(session).filter(function (_a) {
46
+ var _b = tslib_1.__read(_a, 1), key = _b[0];
47
+ return includedKeys.includes(key);
48
+ });
49
+ }
50
+ exports.sessionEntries = sessionEntries;
@@ -0,0 +1,3 @@
1
+ import { SessionStorage } from '../../session_storage';
2
+ export declare function batteryOfTests(storageFactory: () => Promise<SessionStorage>): void;
3
+ //# sourceMappingURL=battery-of-tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"battery-of-tests.d.ts","sourceRoot":"","sources":["../../../../../src/auth/session/storage/__tests__/battery-of-tests.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAErD,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QAkC3E"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.batteryOfTests = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var session_1 = require("../../session");
6
+ function batteryOfTests(storageFactory) {
7
+ var _this = this;
8
+ it('can store and delete offline sessions', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
9
+ var storage, sessionId, session;
10
+ return tslib_1.__generator(this, function (_a) {
11
+ switch (_a.label) {
12
+ case 0: return [4 /*yield*/, storageFactory()];
13
+ case 1:
14
+ storage = _a.sent();
15
+ sessionId = 'test_session';
16
+ session = new session_1.Session(sessionId, 'shop', 'state', false);
17
+ return [4 /*yield*/, expect(storage.storeSession(session)).resolves.toBe(true)];
18
+ case 2:
19
+ _a.sent();
20
+ return [4 /*yield*/, expect(storage.loadSession(sessionId)).resolves.toEqual(session)];
21
+ case 3:
22
+ _a.sent();
23
+ return [4 /*yield*/, expect(storage.storeSession(session)).resolves.toBe(true)];
24
+ case 4:
25
+ _a.sent();
26
+ return [4 /*yield*/, expect(storage.loadSession(sessionId)).resolves.toEqual(session)];
27
+ case 5:
28
+ _a.sent();
29
+ return [4 /*yield*/, expect(storage.deleteSession(sessionId)).resolves.toBe(true)];
30
+ case 6:
31
+ _a.sent();
32
+ return [4 /*yield*/, expect(storage.loadSession(sessionId)).resolves.toBeUndefined()];
33
+ case 7:
34
+ _a.sent();
35
+ // Deleting a non-existing session should work
36
+ return [4 /*yield*/, expect(storage.deleteSession(sessionId)).resolves.toBe(true)];
37
+ case 8:
38
+ // Deleting a non-existing session should work
39
+ _a.sent();
40
+ return [2 /*return*/];
41
+ }
42
+ });
43
+ }); });
44
+ it('can store and delete sessions with online tokens', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
45
+ var storage, sessionId, session;
46
+ return tslib_1.__generator(this, function (_a) {
47
+ switch (_a.label) {
48
+ case 0: return [4 /*yield*/, storageFactory()];
49
+ case 1:
50
+ storage = _a.sent();
51
+ sessionId = 'test_session';
52
+ session = new session_1.Session(sessionId, 'shop', 'state', true);
53
+ return [4 /*yield*/, expect(storage.storeSession(session)).resolves.toBe(true)];
54
+ case 2:
55
+ _a.sent();
56
+ return [4 /*yield*/, expect(storage.loadSession(sessionId)).resolves.toEqual(session)];
57
+ case 3:
58
+ _a.sent();
59
+ return [2 /*return*/];
60
+ }
61
+ });
62
+ }); });
63
+ it('wrong ids return null sessions', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
64
+ var storage;
65
+ return tslib_1.__generator(this, function (_a) {
66
+ switch (_a.label) {
67
+ case 0: return [4 /*yield*/, storageFactory()];
68
+ case 1:
69
+ storage = _a.sent();
70
+ return [4 /*yield*/, expect(storage.loadSession('not_a_session_id')).resolves.toBeUndefined()];
71
+ case 2:
72
+ _a.sent();
73
+ return [2 /*return*/];
74
+ }
75
+ });
76
+ }); });
77
+ }
78
+ exports.batteryOfTests = batteryOfTests;
@@ -0,0 +1,10 @@
1
+ /// <reference types="node" />
2
+ import { Socket, SocketConnectOpts } from 'net';
3
+ export declare function wait(ms: number): Promise<void>;
4
+ export declare function poll(func: () => Promise<boolean>, { interval, timeout }?: {
5
+ interval?: number | undefined;
6
+ timeout?: number | undefined;
7
+ }): Promise<void>;
8
+ export declare function waitForData(socket: Socket): Promise<string>;
9
+ export declare function connectSocket(socket: Socket, opts: SocketConnectOpts): Promise<void>;
10
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/auth/session/storage/__tests__/utils.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,iBAAiB,EAAC,MAAM,KAAK,CAAC;AAE9C,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9C;AAED,wBAAsB,IAAI,CACxB,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC5B,EAAC,QAAc,EAAE,OAAc,EAAC;;;CAAK,iBAiBtC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB3D;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAef"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.connectSocket = exports.waitForData = exports.poll = exports.wait = void 0;
4
+ var tslib_1 = require("tslib");
5
+ function wait(ms) {
6
+ return new Promise(function (resolve) { return setTimeout(function () { return resolve(); }, ms); });
7
+ }
8
+ exports.wait = wait;
9
+ function poll(func, _a) {
10
+ var _b = _a === void 0 ? {} : _a, _c = _b.interval, interval = _c === void 0 ? 100 : _c, _d = _b.timeout, timeout = _d === void 0 ? 5000 : _d;
11
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
12
+ var start, elapsed, success, _e;
13
+ return tslib_1.__generator(this, function (_f) {
14
+ switch (_f.label) {
15
+ case 0:
16
+ start = Date.now();
17
+ _f.label = 1;
18
+ case 1:
19
+ if (!true) return [3 /*break*/, 7];
20
+ elapsed = Date.now() - start;
21
+ if (elapsed > timeout) {
22
+ throw Error('Timeout');
23
+ }
24
+ _f.label = 2;
25
+ case 2:
26
+ _f.trys.push([2, 4, , 5]);
27
+ return [4 /*yield*/, func()];
28
+ case 3:
29
+ success = _f.sent();
30
+ if (success)
31
+ return [2 /*return*/];
32
+ return [3 /*break*/, 5];
33
+ case 4:
34
+ _e = _f.sent();
35
+ return [3 /*break*/, 5];
36
+ case 5: return [4 /*yield*/, wait(interval)];
37
+ case 6:
38
+ _f.sent();
39
+ return [3 /*break*/, 1];
40
+ case 7: return [2 /*return*/];
41
+ }
42
+ });
43
+ });
44
+ }
45
+ exports.poll = poll;
46
+ function waitForData(socket) {
47
+ return new Promise(function (resolve, reject) {
48
+ function data() {
49
+ resolve('data');
50
+ cleanup();
51
+ }
52
+ function error(err) {
53
+ reject(err);
54
+ cleanup();
55
+ }
56
+ function close() {
57
+ resolve('no data');
58
+ cleanup();
59
+ }
60
+ function cleanup() {
61
+ socket.off('data', data);
62
+ socket.off('error', error);
63
+ socket.off('close', close);
64
+ }
65
+ socket.on('data', data);
66
+ socket.on('error', error);
67
+ socket.on('close', close);
68
+ });
69
+ }
70
+ exports.waitForData = waitForData;
71
+ function connectSocket(socket, opts) {
72
+ return new Promise(function (resolve, reject) {
73
+ function error(err) {
74
+ reject(err);
75
+ cleanup();
76
+ }
77
+ function cleanup() {
78
+ socket.off('error', error);
79
+ }
80
+ socket.on('error', error);
81
+ socket.connect(opts, function () {
82
+ resolve();
83
+ cleanup();
84
+ });
85
+ });
86
+ }
87
+ exports.connectSocket = connectSocket;
@@ -24,7 +24,7 @@ var CustomSessionStorage = /** @class */ (function () {
24
24
  case 1: return [2 /*return*/, _a.sent()];
25
25
  case 2:
26
26
  error_1 = _a.sent();
27
- throw new ShopifyErrors.SessionStorageError("CustomSessionStorage failed to store a session. Error Details: " + error_1);
27
+ throw new ShopifyErrors.SessionStorageError("CustomSessionStorage failed to store a session. Error Details: ".concat(error_1));
28
28
  case 3: return [2 /*return*/];
29
29
  }
30
30
  });
@@ -43,7 +43,7 @@ var CustomSessionStorage = /** @class */ (function () {
43
43
  return [3 /*break*/, 3];
44
44
  case 2:
45
45
  error_2 = _a.sent();
46
- throw new ShopifyErrors.SessionStorageError("CustomSessionStorage failed to load a session. Error Details: " + error_2);
46
+ throw new ShopifyErrors.SessionStorageError("CustomSessionStorage failed to load a session. Error Details: ".concat(error_2));
47
47
  case 3:
48
48
  if (result) {
49
49
  if (result instanceof session_1.Session) {
@@ -61,7 +61,7 @@ var CustomSessionStorage = /** @class */ (function () {
61
61
  return [2 /*return*/, session];
62
62
  }
63
63
  else {
64
- throw new ShopifyErrors.SessionStorageError("Expected return to be instanceof Session, but received instanceof " + result.constructor.name + ".");
64
+ throw new ShopifyErrors.SessionStorageError("Expected return to be instanceof Session, but received instanceof ".concat(result.constructor.name, "."));
65
65
  }
66
66
  }
67
67
  else {
@@ -83,7 +83,7 @@ var CustomSessionStorage = /** @class */ (function () {
83
83
  case 1: return [2 /*return*/, _a.sent()];
84
84
  case 2:
85
85
  error_3 = _a.sent();
86
- throw new ShopifyErrors.SessionStorageError("CustomSessionStorage failed to delete a session. Error Details: " + error_3);
86
+ throw new ShopifyErrors.SessionStorageError("CustomSessionStorage failed to delete a session. Error Details: ".concat(error_3));
87
87
  case 3: return [2 /*return*/];
88
88
  }
89
89
  });