@shopify/shopify-api 3.0.0-rc.3 → 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 (171) hide show
  1. package/CHANGELOG.md +19 -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 +1 -0
  5. package/dist/__tests__/fake-resource.d.ts.map +1 -1
  6. package/dist/__tests__/fake-resource.js +16 -13
  7. package/dist/auth/oauth/oauth.d.ts.map +1 -1
  8. package/dist/auth/oauth/oauth.js +12 -15
  9. package/dist/auth/scopes/index.js +5 -5
  10. package/dist/auth/session/index.d.ts +11 -1
  11. package/dist/auth/session/index.d.ts.map +1 -1
  12. package/dist/auth/session/index.js +16 -1
  13. package/dist/auth/session/session-utils.d.ts +7 -0
  14. package/dist/auth/session/session-utils.d.ts.map +1 -0
  15. package/dist/auth/session/session-utils.js +50 -0
  16. package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts +3 -0
  17. package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts.map +1 -0
  18. package/dist/auth/session/storage/__tests__/battery-of-tests.js +78 -0
  19. package/dist/auth/session/storage/__tests__/utils.d.ts +10 -0
  20. package/dist/auth/session/storage/__tests__/utils.d.ts.map +1 -0
  21. package/dist/auth/session/storage/__tests__/utils.js +87 -0
  22. package/dist/auth/session/storage/custom.js +4 -4
  23. package/dist/auth/session/storage/mongodb.d.ts +23 -0
  24. package/dist/auth/session/storage/mongodb.d.ts.map +1 -0
  25. package/dist/auth/session/storage/mongodb.js +150 -0
  26. package/dist/auth/session/storage/mysql.d.ts +22 -0
  27. package/dist/auth/session/storage/mysql.d.ts.map +1 -0
  28. package/dist/auth/session/storage/mysql.js +154 -0
  29. package/dist/auth/session/storage/postgresql.d.ts +24 -0
  30. package/dist/auth/session/storage/postgresql.d.ts.map +1 -0
  31. package/dist/auth/session/storage/postgresql.js +172 -0
  32. package/dist/auth/session/storage/redis.d.ts +20 -0
  33. package/dist/auth/session/storage/redis.d.ts.map +1 -0
  34. package/dist/auth/session/storage/redis.js +105 -0
  35. package/dist/auth/session/storage/sqlite.d.ts +19 -0
  36. package/dist/auth/session/storage/sqlite.d.ts.map +1 -0
  37. package/dist/auth/session/storage/sqlite.js +125 -0
  38. package/dist/base-rest-resource.d.ts +3 -1
  39. package/dist/base-rest-resource.d.ts.map +1 -1
  40. package/dist/base-rest-resource.js +31 -19
  41. package/dist/base-types.d.ts +1 -0
  42. package/dist/base-types.d.ts.map +1 -1
  43. package/dist/clients/graphql/graphql_client.js +1 -1
  44. package/dist/clients/http_client/http_client.d.ts.map +1 -1
  45. package/dist/clients/http_client/http_client.js +16 -20
  46. package/dist/clients/rest/rest_client.js +5 -3
  47. package/dist/context.d.ts +1 -0
  48. package/dist/context.d.ts.map +1 -1
  49. package/dist/context.js +9 -3
  50. package/dist/error.js +4 -3
  51. package/dist/index.d.ts +5 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/rest-resources/2021-07/abandoned_checkout.d.ts +2 -2
  54. package/dist/rest-resources/2021-07/abandoned_checkout.d.ts.map +1 -1
  55. package/dist/rest-resources/2021-07/abandoned_checkout.js +2 -3
  56. package/dist/rest-resources/2021-07/article.d.ts +4 -1
  57. package/dist/rest-resources/2021-07/article.d.ts.map +1 -1
  58. package/dist/rest-resources/2021-07/article.js +7 -6
  59. package/dist/rest-resources/2021-07/checkout.d.ts +2 -0
  60. package/dist/rest-resources/2021-07/checkout.d.ts.map +1 -1
  61. package/dist/rest-resources/2021-07/customer.d.ts +2 -1
  62. package/dist/rest-resources/2021-07/customer.d.ts.map +1 -1
  63. package/dist/rest-resources/2021-07/customer.js +5 -5
  64. package/dist/rest-resources/2021-07/draft_order.d.ts +1 -0
  65. package/dist/rest-resources/2021-07/draft_order.d.ts.map +1 -1
  66. package/dist/rest-resources/2021-07/fulfillment.d.ts +0 -21
  67. package/dist/rest-resources/2021-07/fulfillment.d.ts.map +1 -1
  68. package/dist/rest-resources/2021-07/fulfillment.js +1 -74
  69. package/dist/rest-resources/2021-07/gift_card_adjustment.js +1 -1
  70. package/dist/rest-resources/2021-07/index.js +2 -0
  71. package/dist/rest-resources/2021-07/metafield.d.ts +54 -5
  72. package/dist/rest-resources/2021-07/metafield.d.ts.map +1 -1
  73. package/dist/rest-resources/2021-07/metafield.js +82 -22
  74. package/dist/rest-resources/2021-07/order.d.ts +2 -0
  75. package/dist/rest-resources/2021-07/order.d.ts.map +1 -1
  76. package/dist/rest-resources/2021-07/variant.d.ts +1 -0
  77. package/dist/rest-resources/2021-07/variant.d.ts.map +1 -1
  78. package/dist/rest-resources/2021-07/variant.js +4 -0
  79. package/dist/rest-resources/2021-10/abandoned_checkout.d.ts +2 -2
  80. package/dist/rest-resources/2021-10/abandoned_checkout.d.ts.map +1 -1
  81. package/dist/rest-resources/2021-10/abandoned_checkout.js +2 -3
  82. package/dist/rest-resources/2021-10/article.d.ts +4 -1
  83. package/dist/rest-resources/2021-10/article.d.ts.map +1 -1
  84. package/dist/rest-resources/2021-10/article.js +7 -6
  85. package/dist/rest-resources/2021-10/checkout.d.ts +2 -0
  86. package/dist/rest-resources/2021-10/checkout.d.ts.map +1 -1
  87. package/dist/rest-resources/2021-10/customer.d.ts +2 -1
  88. package/dist/rest-resources/2021-10/customer.d.ts.map +1 -1
  89. package/dist/rest-resources/2021-10/customer.js +5 -5
  90. package/dist/rest-resources/2021-10/draft_order.d.ts +1 -0
  91. package/dist/rest-resources/2021-10/draft_order.d.ts.map +1 -1
  92. package/dist/rest-resources/2021-10/fulfillment.d.ts +0 -21
  93. package/dist/rest-resources/2021-10/fulfillment.d.ts.map +1 -1
  94. package/dist/rest-resources/2021-10/fulfillment.js +1 -74
  95. package/dist/rest-resources/2021-10/gift_card_adjustment.js +1 -1
  96. package/dist/rest-resources/2021-10/index.js +2 -0
  97. package/dist/rest-resources/2021-10/metafield.d.ts +54 -5
  98. package/dist/rest-resources/2021-10/metafield.d.ts.map +1 -1
  99. package/dist/rest-resources/2021-10/metafield.js +82 -22
  100. package/dist/rest-resources/2021-10/order.d.ts +2 -0
  101. package/dist/rest-resources/2021-10/order.d.ts.map +1 -1
  102. package/dist/rest-resources/2021-10/variant.d.ts +1 -0
  103. package/dist/rest-resources/2021-10/variant.d.ts.map +1 -1
  104. package/dist/rest-resources/2021-10/variant.js +4 -0
  105. package/dist/rest-resources/2022-01/abandoned_checkout.d.ts +2 -2
  106. package/dist/rest-resources/2022-01/abandoned_checkout.d.ts.map +1 -1
  107. package/dist/rest-resources/2022-01/abandoned_checkout.js +2 -3
  108. package/dist/rest-resources/2022-01/article.d.ts +4 -1
  109. package/dist/rest-resources/2022-01/article.d.ts.map +1 -1
  110. package/dist/rest-resources/2022-01/article.js +7 -6
  111. package/dist/rest-resources/2022-01/checkout.d.ts +2 -0
  112. package/dist/rest-resources/2022-01/checkout.d.ts.map +1 -1
  113. package/dist/rest-resources/2022-01/customer.d.ts +2 -1
  114. package/dist/rest-resources/2022-01/customer.d.ts.map +1 -1
  115. package/dist/rest-resources/2022-01/customer.js +5 -5
  116. package/dist/rest-resources/2022-01/draft_order.d.ts +1 -0
  117. package/dist/rest-resources/2022-01/draft_order.d.ts.map +1 -1
  118. package/dist/rest-resources/2022-01/fulfillment.d.ts +0 -21
  119. package/dist/rest-resources/2022-01/fulfillment.d.ts.map +1 -1
  120. package/dist/rest-resources/2022-01/fulfillment.js +1 -74
  121. package/dist/rest-resources/2022-01/gift_card_adjustment.js +1 -1
  122. package/dist/rest-resources/2022-01/index.js +2 -0
  123. package/dist/rest-resources/2022-01/metafield.d.ts +54 -5
  124. package/dist/rest-resources/2022-01/metafield.d.ts.map +1 -1
  125. package/dist/rest-resources/2022-01/metafield.js +82 -22
  126. package/dist/rest-resources/2022-01/order.d.ts +2 -0
  127. package/dist/rest-resources/2022-01/order.d.ts.map +1 -1
  128. package/dist/rest-resources/2022-01/variant.d.ts +1 -0
  129. package/dist/rest-resources/2022-01/variant.d.ts.map +1 -1
  130. package/dist/rest-resources/2022-01/variant.js +4 -0
  131. package/dist/rest-resources/2022-04/abandoned_checkout.d.ts +2 -2
  132. package/dist/rest-resources/2022-04/abandoned_checkout.d.ts.map +1 -1
  133. package/dist/rest-resources/2022-04/abandoned_checkout.js +2 -3
  134. package/dist/rest-resources/2022-04/article.d.ts +4 -1
  135. package/dist/rest-resources/2022-04/article.d.ts.map +1 -1
  136. package/dist/rest-resources/2022-04/article.js +7 -6
  137. package/dist/rest-resources/2022-04/checkout.d.ts +2 -0
  138. package/dist/rest-resources/2022-04/checkout.d.ts.map +1 -1
  139. package/dist/rest-resources/2022-04/customer.d.ts +5 -1
  140. package/dist/rest-resources/2022-04/customer.d.ts.map +1 -1
  141. package/dist/rest-resources/2022-04/customer.js +5 -5
  142. package/dist/rest-resources/2022-04/draft_order.d.ts +1 -0
  143. package/dist/rest-resources/2022-04/draft_order.d.ts.map +1 -1
  144. package/dist/rest-resources/2022-04/gift_card_adjustment.js +1 -1
  145. package/dist/rest-resources/2022-04/index.js +2 -0
  146. package/dist/rest-resources/2022-04/metafield.d.ts +54 -5
  147. package/dist/rest-resources/2022-04/metafield.d.ts.map +1 -1
  148. package/dist/rest-resources/2022-04/metafield.js +82 -22
  149. package/dist/rest-resources/2022-04/order.d.ts +2 -0
  150. package/dist/rest-resources/2022-04/order.d.ts.map +1 -1
  151. package/dist/rest-resources/2022-04/variant.d.ts +1 -0
  152. package/dist/rest-resources/2022-04/variant.d.ts.map +1 -1
  153. package/dist/rest-resources/2022-04/variant.js +4 -0
  154. package/dist/utils/decode-session-token.d.ts.map +1 -1
  155. package/dist/utils/decode-session-token.js +1 -5
  156. package/dist/utils/graphql_proxy.js +1 -1
  157. package/dist/utils/hmac-validator.js +2 -5
  158. package/dist/utils/processed-query.js +3 -3
  159. package/dist/utils/safe-compare.d.ts.map +1 -1
  160. package/dist/utils/safe-compare.js +17 -15
  161. package/dist/utils/setup-jest.d.ts.map +1 -1
  162. package/dist/utils/setup-jest.js +4 -3
  163. package/dist/utils/shop-validator.d.ts.map +1 -1
  164. package/dist/utils/shop-validator.js +1 -0
  165. package/dist/utils/with-session.js +3 -3
  166. package/dist/version.d.ts +1 -1
  167. package/dist/version.js +1 -1
  168. package/dist/webhooks/registry.d.ts +2 -1
  169. package/dist/webhooks/registry.d.ts.map +1 -1
  170. package/dist/webhooks/registry.js +39 -13
  171. package/package.json +12 -4
package/CHANGELOG.md CHANGED
@@ -7,6 +7,25 @@ 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
+
21
+ ## [3.0.1] - 2022-04-11
22
+
23
+ ### Added
24
+
25
+ - Allow REST resources to configure a deny list of attributes to be excluded when saving [#355](https://github.com/Shopify/shopify-node-api/pull/355)
26
+
27
+ ## [3.0.0] - 2022-04-04
28
+
10
29
  ### Added
11
30
 
12
31
  - ⚠️ [Breaking] Removing API version `2021-04` [#343](https://github.com/Shopify/shopify-node-api/pull/343)
@@ -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
  });
@@ -20,6 +20,7 @@ export default class FakeResource extends Base {
20
20
  static API_VERSION: ApiVersion;
21
21
  protected static NAME: string;
22
22
  protected static PLURAL_NAME: string;
23
+ protected static READ_ONLY_ATTRIBUTES: string[];
23
24
  protected static HAS_ONE: {
24
25
  has_one_attribute: typeof FakeResource;
25
26
  };
@@ -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,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,9 +8,12 @@ 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';
16
+ FakeResource.READ_ONLY_ATTRIBUTES = ['unsaveable_attribute'];
14
17
  FakeResource.HAS_ONE = {
15
18
  has_one_attribute: FakeResource,
16
19
  };
@@ -67,26 +70,26 @@ var FakeResource = /** @class */ (function (_super) {
67
70
  path: 'other_resources/<other_resource_id>/fake_resources/<id>.json',
68
71
  },
69
72
  ];
70
- 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 () {
71
74
  var result;
72
- 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"]);
73
- return tslib_1.__generator(this, function (_c) {
74
- 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) {
75
78
  case 0: return [4 /*yield*/, FakeResource.baseFind({
76
79
  session: session,
77
80
  urlIds: { id: id, other_resource_id: other_resource_id },
78
81
  params: tslib_1.__assign(tslib_1.__assign({}, params), otherArgs),
79
82
  })];
80
83
  case 1:
81
- result = _c.sent();
84
+ result = _d.sent();
82
85
  return [2 /*return*/, result ? result[0] : null];
83
86
  }
84
87
  });
85
88
  }); };
86
- FakeResource.all = function (_a) {
87
- var session = _a.session, params = _a.params;
89
+ FakeResource.all = function (_b) {
90
+ var session = _b.session, params = _b.params;
88
91
  return tslib_1.__awaiter(void 0, void 0, void 0, function () {
89
- return tslib_1.__generator(this, function (_b) {
92
+ return tslib_1.__generator(_a, function (_c) {
90
93
  return [2 /*return*/, FakeResource.baseFind({
91
94
  session: session,
92
95
  params: params,
@@ -95,12 +98,12 @@ var FakeResource = /** @class */ (function (_super) {
95
98
  });
96
99
  });
97
100
  };
98
- FakeResource.custom = function (_a) {
99
- 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;
100
103
  return tslib_1.__awaiter(void 0, void 0, void 0, function () {
101
104
  var response;
102
- return tslib_1.__generator(this, function (_b) {
103
- switch (_b.label) {
105
+ return tslib_1.__generator(_a, function (_c) {
106
+ switch (_c.label) {
104
107
  case 0: return [4 /*yield*/, FakeResource.request({
105
108
  http_method: 'get',
106
109
  operation: 'custom',
@@ -108,7 +111,7 @@ var FakeResource = /** @class */ (function (_super) {
108
111
  urlIds: { id: id, other_resource_id: other_resource_id },
109
112
  })];
110
113
  case 1:
111
- response = _b.sent();
114
+ response = _c.sent();
112
115
  return [2 /*return*/, response.body];
113
116
  }
114
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;AAgBxB,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;AAgBF,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"}
@@ -8,7 +8,6 @@ var cookies_1 = tslib_1.__importDefault(require("cookies"));
8
8
  var context_1 = require("../../context");
9
9
  var nonce_1 = tslib_1.__importDefault(require("../../utils/nonce"));
10
10
  var hmac_validator_1 = tslib_1.__importDefault(require("../../utils/hmac-validator"));
11
- var shop_validator_1 = tslib_1.__importDefault(require("../../utils/shop-validator"));
12
11
  var safe_compare_1 = tslib_1.__importDefault(require("../../utils/safe-compare"));
13
12
  var decode_session_token_1 = tslib_1.__importDefault(require("../../utils/decode-session-token"));
14
13
  var session_1 = require("../session");
@@ -41,8 +40,8 @@ var ShopifyOAuth = {
41
40
  keys: [context_1.Context.API_SECRET_KEY],
42
41
  secure: true,
43
42
  });
44
- state = nonce_1.default();
45
- 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);
46
45
  return [4 /*yield*/, context_1.Context.SESSION_STORAGE.storeSession(session)];
47
46
  case 1:
48
47
  sessionStored = _a.sent();
@@ -58,12 +57,12 @@ var ShopifyOAuth = {
58
57
  query = {
59
58
  client_id: context_1.Context.API_KEY,
60
59
  scope: context_1.Context.SCOPES.toString(),
61
- 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),
62
61
  state: state,
63
62
  'grant_options[]': isOnline ? 'per-user' : '',
64
63
  };
65
64
  queryString = querystring_1.default.stringify(query);
66
- return [2 /*return*/, "https://" + shop + "/admin/oauth/authorize?" + queryString];
65
+ return [2 /*return*/, "https://".concat(shop, "/admin/oauth/authorize?").concat(queryString)];
67
66
  }
68
67
  });
69
68
  });
@@ -93,13 +92,13 @@ var ShopifyOAuth = {
93
92
  });
94
93
  sessionCookie = this.getCookieSessionId(request, response);
95
94
  if (!sessionCookie) {
96
- 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));
97
96
  }
98
97
  return [4 /*yield*/, context_1.Context.SESSION_STORAGE.loadSession(sessionCookie)];
99
98
  case 1:
100
99
  currentSession = _a.sent();
101
100
  if (!currentSession) {
102
- 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));
103
102
  }
104
103
  if (!validQuery(query, currentSession)) {
105
104
  throw new ShopifyErrors.InvalidOAuthError('Invalid OAuth callback.');
@@ -128,7 +127,7 @@ var ShopifyOAuth = {
128
127
  currentSession.onlineAccessInfo = rest;
129
128
  if (!context_1.Context.IS_EMBEDDED_APP) return [3 /*break*/, 4];
130
129
  onlineInfo = currentSession.onlineAccessInfo;
131
- jwtSessionId = this.getJwtSessionId(currentSession.shop, "" + onlineInfo.associated_user.id);
130
+ jwtSessionId = this.getJwtSessionId(currentSession.shop, "".concat(onlineInfo.associated_user.id));
132
131
  jwtSession = session_1.Session.cloneSession(currentSession, jwtSessionId);
133
132
  return [4 /*yield*/, context_1.Context.SESSION_STORAGE.deleteSession(currentSession.id)];
134
133
  case 3:
@@ -182,7 +181,7 @@ var ShopifyOAuth = {
182
181
  * @param userId Current actor id
183
182
  */
184
183
  getJwtSessionId: function (shop, userId) {
185
- return shop + "_" + userId;
184
+ return "".concat(shop, "_").concat(userId);
186
185
  },
187
186
  /**
188
187
  * Builds an offline session id for the given shop.
@@ -190,7 +189,7 @@ var ShopifyOAuth = {
190
189
  * @param shop Shopify shop domain
191
190
  */
192
191
  getOfflineSessionId: function (shop) {
193
- return "offline_" + shop;
192
+ return "offline_".concat(shop);
194
193
  },
195
194
  /**
196
195
  * Extracts the current session id from the request / response pair.
@@ -209,7 +208,7 @@ var ShopifyOAuth = {
209
208
  if (!matches) {
210
209
  throw new ShopifyErrors.MissingJwtTokenError('Missing Bearer token in authorization header');
211
210
  }
212
- var jwtPayload = decode_session_token_1.default(matches[1]);
211
+ var jwtPayload = (0, decode_session_token_1.default)(matches[1]);
213
212
  var shop = jwtPayload.dest.replace(/^https:\/\//, '');
214
213
  if (isOnline) {
215
214
  currentSessionId = this.getJwtSessionId(shop, jwtPayload.sub);
@@ -231,13 +230,11 @@ var ShopifyOAuth = {
231
230
  };
232
231
  exports.ShopifyOAuth = ShopifyOAuth;
233
232
  /**
234
- * Uses the validation utils validateHmac, validateShop, and safeCompare to assess whether the callback is valid.
233
+ * Uses the validation utils validateHmac, and safeCompare to assess whether the callback is valid.
235
234
  *
236
235
  * @param query Current HTTP Request Query
237
236
  * @param session Current session
238
237
  */
239
238
  function validQuery(query, session) {
240
- return (hmac_validator_1.default(query) &&
241
- shop_validator_1.default(query.shop) &&
242
- 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));
243
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;