@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.
- package/CHANGELOG.md +11 -0
- package/dist/__tests__/fake-resource-with-custom-prefix.d.ts.map +1 -1
- package/dist/__tests__/fake-resource-with-custom-prefix.js +7 -5
- package/dist/__tests__/fake-resource.d.ts.map +1 -1
- package/dist/__tests__/fake-resource.js +15 -13
- package/dist/auth/oauth/oauth.d.ts.map +1 -1
- package/dist/auth/oauth/oauth.js +11 -11
- package/dist/auth/scopes/index.js +5 -5
- package/dist/auth/session/index.d.ts +11 -1
- package/dist/auth/session/index.d.ts.map +1 -1
- package/dist/auth/session/index.js +16 -1
- package/dist/auth/session/session-utils.d.ts +7 -0
- package/dist/auth/session/session-utils.d.ts.map +1 -0
- package/dist/auth/session/session-utils.js +50 -0
- package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts +3 -0
- package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts.map +1 -0
- package/dist/auth/session/storage/__tests__/battery-of-tests.js +78 -0
- package/dist/auth/session/storage/__tests__/utils.d.ts +10 -0
- package/dist/auth/session/storage/__tests__/utils.d.ts.map +1 -0
- package/dist/auth/session/storage/__tests__/utils.js +87 -0
- package/dist/auth/session/storage/custom.js +4 -4
- package/dist/auth/session/storage/mongodb.d.ts +23 -0
- package/dist/auth/session/storage/mongodb.d.ts.map +1 -0
- package/dist/auth/session/storage/mongodb.js +150 -0
- package/dist/auth/session/storage/mysql.d.ts +22 -0
- package/dist/auth/session/storage/mysql.d.ts.map +1 -0
- package/dist/auth/session/storage/mysql.js +154 -0
- package/dist/auth/session/storage/postgresql.d.ts +24 -0
- package/dist/auth/session/storage/postgresql.d.ts.map +1 -0
- package/dist/auth/session/storage/postgresql.js +172 -0
- package/dist/auth/session/storage/redis.d.ts +20 -0
- package/dist/auth/session/storage/redis.d.ts.map +1 -0
- package/dist/auth/session/storage/redis.js +105 -0
- package/dist/auth/session/storage/sqlite.d.ts +19 -0
- package/dist/auth/session/storage/sqlite.d.ts.map +1 -0
- package/dist/auth/session/storage/sqlite.js +125 -0
- package/dist/base-rest-resource.d.ts +2 -1
- package/dist/base-rest-resource.d.ts.map +1 -1
- package/dist/base-rest-resource.js +29 -19
- package/dist/base-types.d.ts +1 -0
- package/dist/base-types.d.ts.map +1 -1
- package/dist/clients/graphql/graphql_client.js +1 -1
- package/dist/clients/http_client/http_client.js +16 -16
- package/dist/clients/rest/rest_client.js +5 -3
- package/dist/context.d.ts +1 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +9 -3
- package/dist/error.js +4 -3
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/index.js +2 -0
- package/dist/rest-resources/2021-10/index.js +2 -0
- package/dist/rest-resources/2022-01/index.js +2 -0
- package/dist/rest-resources/2022-04/index.js +2 -0
- package/dist/utils/decode-session-token.js +1 -1
- package/dist/utils/graphql_proxy.js +1 -1
- package/dist/utils/hmac-validator.js +2 -5
- package/dist/utils/processed-query.js +3 -3
- package/dist/utils/safe-compare.d.ts.map +1 -1
- package/dist/utils/safe-compare.js +17 -15
- package/dist/utils/setup-jest.d.ts.map +1 -1
- package/dist/utils/setup-jest.js +4 -3
- package/dist/utils/with-session.js +3 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/webhooks/registry.d.ts +2 -1
- package/dist/webhooks/registry.d.ts.map +1 -1
- package/dist/webhooks/registry.js +39 -13
- 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,
|
|
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 (
|
|
26
|
-
var session =
|
|
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(
|
|
30
|
-
switch (
|
|
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 =
|
|
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,
|
|
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 (
|
|
73
|
+
FakeResource.find = function (_b) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
72
74
|
var result;
|
|
73
|
-
var session =
|
|
74
|
-
return tslib_1.__generator(
|
|
75
|
-
switch (
|
|
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 =
|
|
84
|
+
result = _d.sent();
|
|
83
85
|
return [2 /*return*/, result ? result[0] : null];
|
|
84
86
|
}
|
|
85
87
|
});
|
|
86
88
|
}); };
|
|
87
|
-
FakeResource.all = function (
|
|
88
|
-
var session =
|
|
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(
|
|
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 (
|
|
100
|
-
var session =
|
|
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(
|
|
104
|
-
switch (
|
|
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 =
|
|
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,
|
|
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"}
|
package/dist/auth/oauth/oauth.js
CHANGED
|
@@ -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: "
|
|
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://"
|
|
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: "
|
|
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: "
|
|
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, ""
|
|
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
|
|
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_"
|
|
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
|
|
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.
|
|
21
|
-
this.expandedScopes = new Set(tslib_1.
|
|
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.
|
|
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] : ''
|
|
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
|
|
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 @@
|
|
|
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: "
|
|
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: "
|
|
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 "
|
|
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: "
|
|
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
|
});
|