@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.
- package/CHANGELOG.md +19 -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 +1 -0
- package/dist/__tests__/fake-resource.d.ts.map +1 -1
- package/dist/__tests__/fake-resource.js +16 -13
- package/dist/auth/oauth/oauth.d.ts.map +1 -1
- package/dist/auth/oauth/oauth.js +12 -15
- 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 +3 -1
- package/dist/base-rest-resource.d.ts.map +1 -1
- package/dist/base-rest-resource.js +31 -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.d.ts.map +1 -1
- package/dist/clients/http_client/http_client.js +16 -20
- 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/abandoned_checkout.d.ts +2 -2
- package/dist/rest-resources/2021-07/abandoned_checkout.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/abandoned_checkout.js +2 -3
- package/dist/rest-resources/2021-07/article.d.ts +4 -1
- package/dist/rest-resources/2021-07/article.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/article.js +7 -6
- package/dist/rest-resources/2021-07/checkout.d.ts +2 -0
- package/dist/rest-resources/2021-07/checkout.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/customer.d.ts +2 -1
- package/dist/rest-resources/2021-07/customer.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/customer.js +5 -5
- package/dist/rest-resources/2021-07/draft_order.d.ts +1 -0
- package/dist/rest-resources/2021-07/draft_order.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/fulfillment.d.ts +0 -21
- package/dist/rest-resources/2021-07/fulfillment.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/fulfillment.js +1 -74
- package/dist/rest-resources/2021-07/gift_card_adjustment.js +1 -1
- package/dist/rest-resources/2021-07/index.js +2 -0
- package/dist/rest-resources/2021-07/metafield.d.ts +54 -5
- package/dist/rest-resources/2021-07/metafield.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/metafield.js +82 -22
- package/dist/rest-resources/2021-07/order.d.ts +2 -0
- package/dist/rest-resources/2021-07/order.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/variant.d.ts +1 -0
- package/dist/rest-resources/2021-07/variant.d.ts.map +1 -1
- package/dist/rest-resources/2021-07/variant.js +4 -0
- package/dist/rest-resources/2021-10/abandoned_checkout.d.ts +2 -2
- package/dist/rest-resources/2021-10/abandoned_checkout.d.ts.map +1 -1
- package/dist/rest-resources/2021-10/abandoned_checkout.js +2 -3
- package/dist/rest-resources/2021-10/article.d.ts +4 -1
- package/dist/rest-resources/2021-10/article.d.ts.map +1 -1
- package/dist/rest-resources/2021-10/article.js +7 -6
- package/dist/rest-resources/2021-10/checkout.d.ts +2 -0
- package/dist/rest-resources/2021-10/checkout.d.ts.map +1 -1
- package/dist/rest-resources/2021-10/customer.d.ts +2 -1
- package/dist/rest-resources/2021-10/customer.d.ts.map +1 -1
- package/dist/rest-resources/2021-10/customer.js +5 -5
- package/dist/rest-resources/2021-10/draft_order.d.ts +1 -0
- package/dist/rest-resources/2021-10/draft_order.d.ts.map +1 -1
- package/dist/rest-resources/2021-10/fulfillment.d.ts +0 -21
- package/dist/rest-resources/2021-10/fulfillment.d.ts.map +1 -1
- package/dist/rest-resources/2021-10/fulfillment.js +1 -74
- package/dist/rest-resources/2021-10/gift_card_adjustment.js +1 -1
- package/dist/rest-resources/2021-10/index.js +2 -0
- package/dist/rest-resources/2021-10/metafield.d.ts +54 -5
- package/dist/rest-resources/2021-10/metafield.d.ts.map +1 -1
- package/dist/rest-resources/2021-10/metafield.js +82 -22
- package/dist/rest-resources/2021-10/order.d.ts +2 -0
- package/dist/rest-resources/2021-10/order.d.ts.map +1 -1
- package/dist/rest-resources/2021-10/variant.d.ts +1 -0
- package/dist/rest-resources/2021-10/variant.d.ts.map +1 -1
- package/dist/rest-resources/2021-10/variant.js +4 -0
- package/dist/rest-resources/2022-01/abandoned_checkout.d.ts +2 -2
- package/dist/rest-resources/2022-01/abandoned_checkout.d.ts.map +1 -1
- package/dist/rest-resources/2022-01/abandoned_checkout.js +2 -3
- package/dist/rest-resources/2022-01/article.d.ts +4 -1
- package/dist/rest-resources/2022-01/article.d.ts.map +1 -1
- package/dist/rest-resources/2022-01/article.js +7 -6
- package/dist/rest-resources/2022-01/checkout.d.ts +2 -0
- package/dist/rest-resources/2022-01/checkout.d.ts.map +1 -1
- package/dist/rest-resources/2022-01/customer.d.ts +2 -1
- package/dist/rest-resources/2022-01/customer.d.ts.map +1 -1
- package/dist/rest-resources/2022-01/customer.js +5 -5
- package/dist/rest-resources/2022-01/draft_order.d.ts +1 -0
- package/dist/rest-resources/2022-01/draft_order.d.ts.map +1 -1
- package/dist/rest-resources/2022-01/fulfillment.d.ts +0 -21
- package/dist/rest-resources/2022-01/fulfillment.d.ts.map +1 -1
- package/dist/rest-resources/2022-01/fulfillment.js +1 -74
- package/dist/rest-resources/2022-01/gift_card_adjustment.js +1 -1
- package/dist/rest-resources/2022-01/index.js +2 -0
- package/dist/rest-resources/2022-01/metafield.d.ts +54 -5
- package/dist/rest-resources/2022-01/metafield.d.ts.map +1 -1
- package/dist/rest-resources/2022-01/metafield.js +82 -22
- package/dist/rest-resources/2022-01/order.d.ts +2 -0
- package/dist/rest-resources/2022-01/order.d.ts.map +1 -1
- package/dist/rest-resources/2022-01/variant.d.ts +1 -0
- package/dist/rest-resources/2022-01/variant.d.ts.map +1 -1
- package/dist/rest-resources/2022-01/variant.js +4 -0
- package/dist/rest-resources/2022-04/abandoned_checkout.d.ts +2 -2
- package/dist/rest-resources/2022-04/abandoned_checkout.d.ts.map +1 -1
- package/dist/rest-resources/2022-04/abandoned_checkout.js +2 -3
- package/dist/rest-resources/2022-04/article.d.ts +4 -1
- package/dist/rest-resources/2022-04/article.d.ts.map +1 -1
- package/dist/rest-resources/2022-04/article.js +7 -6
- package/dist/rest-resources/2022-04/checkout.d.ts +2 -0
- package/dist/rest-resources/2022-04/checkout.d.ts.map +1 -1
- package/dist/rest-resources/2022-04/customer.d.ts +5 -1
- package/dist/rest-resources/2022-04/customer.d.ts.map +1 -1
- package/dist/rest-resources/2022-04/customer.js +5 -5
- package/dist/rest-resources/2022-04/draft_order.d.ts +1 -0
- package/dist/rest-resources/2022-04/draft_order.d.ts.map +1 -1
- package/dist/rest-resources/2022-04/gift_card_adjustment.js +1 -1
- package/dist/rest-resources/2022-04/index.js +2 -0
- package/dist/rest-resources/2022-04/metafield.d.ts +54 -5
- package/dist/rest-resources/2022-04/metafield.d.ts.map +1 -1
- package/dist/rest-resources/2022-04/metafield.js +82 -22
- package/dist/rest-resources/2022-04/order.d.ts +2 -0
- package/dist/rest-resources/2022-04/order.d.ts.map +1 -1
- package/dist/rest-resources/2022-04/variant.d.ts +1 -0
- package/dist/rest-resources/2022-04/variant.d.ts.map +1 -1
- package/dist/rest-resources/2022-04/variant.js +4 -0
- package/dist/utils/decode-session-token.d.ts.map +1 -1
- package/dist/utils/decode-session-token.js +1 -5
- 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/shop-validator.d.ts.map +1 -1
- package/dist/utils/shop-validator.js +1 -0
- 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
|
@@ -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
|
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SessionInterface } from '../types';
|
|
2
|
+
import { SessionStorage } from '../session_storage';
|
|
3
|
+
export interface MongoDBSessionStorageOptions {
|
|
4
|
+
sessionCollectionName: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class MongoDBSessionStorage implements SessionStorage {
|
|
7
|
+
private dbUrl;
|
|
8
|
+
private dbName;
|
|
9
|
+
static withCredentials(host: string, dbName: string, username: string, password: string, opts: Partial<MongoDBSessionStorageOptions>): MongoDBSessionStorage;
|
|
10
|
+
readonly ready: Promise<void>;
|
|
11
|
+
private options;
|
|
12
|
+
private client;
|
|
13
|
+
constructor(dbUrl: URL, dbName: string, opts?: Partial<MongoDBSessionStorageOptions>);
|
|
14
|
+
storeSession(session: SessionInterface): Promise<boolean>;
|
|
15
|
+
loadSession(id: string): Promise<SessionInterface | undefined>;
|
|
16
|
+
deleteSession(id: string): Promise<boolean>;
|
|
17
|
+
disconnect(): Promise<void>;
|
|
18
|
+
private get collection();
|
|
19
|
+
private init;
|
|
20
|
+
private hasSessionCollection;
|
|
21
|
+
private createCollection;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=mongodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/mongodb.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,4BAA4B;IAC3C,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAKD,qBAAa,qBAAsB,YAAW,cAAc;IAyBxD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IAzBhB,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,4BAA4B,CAAC;IAa7C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAA+B;IAE9C,OAAO,CAAC,MAAM,CAAM;gBAGV,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,MAAM,EACtB,IAAI,GAAE,OAAO,CAAC,4BAA4B,CAAM;IASrC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAazD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAS9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,OAAO,KAAK,UAAU,GAIrB;YAEa,IAAI;YAOJ,oBAAoB;YAOpB,gBAAgB;CAM/B"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MongoDBSessionStorage = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var mongodb = tslib_1.__importStar(require("mongodb"));
|
|
6
|
+
var session_utils_1 = require("../session-utils");
|
|
7
|
+
var defaultMongoDBSessionStorageOptions = {
|
|
8
|
+
sessionCollectionName: 'shopify_sessions',
|
|
9
|
+
};
|
|
10
|
+
var MongoDBSessionStorage = /** @class */ (function () {
|
|
11
|
+
function MongoDBSessionStorage(dbUrl, dbName, opts) {
|
|
12
|
+
if (opts === void 0) { opts = {}; }
|
|
13
|
+
this.dbUrl = dbUrl;
|
|
14
|
+
this.dbName = dbName;
|
|
15
|
+
if (typeof this.dbUrl === 'string') {
|
|
16
|
+
this.dbUrl = new URL(this.dbUrl);
|
|
17
|
+
}
|
|
18
|
+
this.options = tslib_1.__assign(tslib_1.__assign({}, defaultMongoDBSessionStorageOptions), opts);
|
|
19
|
+
this.ready = this.init();
|
|
20
|
+
}
|
|
21
|
+
MongoDBSessionStorage.withCredentials = function (host, dbName, username, password, opts) {
|
|
22
|
+
return new MongoDBSessionStorage(new URL("mongodb://".concat(encodeURIComponent(username), ":").concat(encodeURIComponent(password), "@").concat(host, "/")), dbName, opts);
|
|
23
|
+
};
|
|
24
|
+
MongoDBSessionStorage.prototype.storeSession = function (session) {
|
|
25
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
26
|
+
return tslib_1.__generator(this, function (_a) {
|
|
27
|
+
switch (_a.label) {
|
|
28
|
+
case 0: return [4 /*yield*/, this.ready];
|
|
29
|
+
case 1:
|
|
30
|
+
_a.sent();
|
|
31
|
+
return [4 /*yield*/, this.collection.findOneAndReplace({ id: session.id }, { id: session.id, entries: (0, session_utils_1.sessionEntries)(session) }, {
|
|
32
|
+
upsert: true,
|
|
33
|
+
})];
|
|
34
|
+
case 2:
|
|
35
|
+
_a.sent();
|
|
36
|
+
return [2 /*return*/, true];
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
MongoDBSessionStorage.prototype.loadSession = function (id) {
|
|
42
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
43
|
+
var rawResult;
|
|
44
|
+
return tslib_1.__generator(this, function (_a) {
|
|
45
|
+
switch (_a.label) {
|
|
46
|
+
case 0: return [4 /*yield*/, this.ready];
|
|
47
|
+
case 1:
|
|
48
|
+
_a.sent();
|
|
49
|
+
return [4 /*yield*/, this.collection.findOne({ id: id })];
|
|
50
|
+
case 2:
|
|
51
|
+
rawResult = _a.sent();
|
|
52
|
+
if (!rawResult)
|
|
53
|
+
return [2 /*return*/, undefined];
|
|
54
|
+
return [2 /*return*/, (0, session_utils_1.sessionFromEntries)(rawResult.entries)];
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
MongoDBSessionStorage.prototype.deleteSession = function (id) {
|
|
60
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
61
|
+
return tslib_1.__generator(this, function (_a) {
|
|
62
|
+
switch (_a.label) {
|
|
63
|
+
case 0: return [4 /*yield*/, this.ready];
|
|
64
|
+
case 1:
|
|
65
|
+
_a.sent();
|
|
66
|
+
return [4 /*yield*/, this.collection.deleteOne({ id: id })];
|
|
67
|
+
case 2:
|
|
68
|
+
_a.sent();
|
|
69
|
+
return [2 /*return*/, true];
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
MongoDBSessionStorage.prototype.disconnect = function () {
|
|
75
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
76
|
+
return tslib_1.__generator(this, function (_a) {
|
|
77
|
+
switch (_a.label) {
|
|
78
|
+
case 0: return [4 /*yield*/, this.client.close()];
|
|
79
|
+
case 1:
|
|
80
|
+
_a.sent();
|
|
81
|
+
return [2 /*return*/];
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
Object.defineProperty(MongoDBSessionStorage.prototype, "collection", {
|
|
87
|
+
get: function () {
|
|
88
|
+
return this.client
|
|
89
|
+
.db(this.dbName)
|
|
90
|
+
.collection(this.options.sessionCollectionName);
|
|
91
|
+
},
|
|
92
|
+
enumerable: false,
|
|
93
|
+
configurable: true
|
|
94
|
+
});
|
|
95
|
+
MongoDBSessionStorage.prototype.init = function () {
|
|
96
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
97
|
+
return tslib_1.__generator(this, function (_a) {
|
|
98
|
+
switch (_a.label) {
|
|
99
|
+
case 0:
|
|
100
|
+
this.client = new mongodb.MongoClient(this.dbUrl.toString());
|
|
101
|
+
return [4 /*yield*/, this.client.connect()];
|
|
102
|
+
case 1:
|
|
103
|
+
_a.sent();
|
|
104
|
+
return [4 /*yield*/, this.client.db().command({ ping: 1 })];
|
|
105
|
+
case 2:
|
|
106
|
+
_a.sent();
|
|
107
|
+
return [4 /*yield*/, this.createCollection()];
|
|
108
|
+
case 3:
|
|
109
|
+
_a.sent();
|
|
110
|
+
return [2 /*return*/];
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
MongoDBSessionStorage.prototype.hasSessionCollection = function () {
|
|
116
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
117
|
+
var collections;
|
|
118
|
+
return tslib_1.__generator(this, function (_a) {
|
|
119
|
+
switch (_a.label) {
|
|
120
|
+
case 0: return [4 /*yield*/, this.client.db().collections()];
|
|
121
|
+
case 1:
|
|
122
|
+
collections = _a.sent();
|
|
123
|
+
return [2 /*return*/, collections
|
|
124
|
+
.map(function (collection) { return collection.collectionName; })
|
|
125
|
+
.includes(this.options.sessionCollectionName)];
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
MongoDBSessionStorage.prototype.createCollection = function () {
|
|
131
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
132
|
+
var hasSessionCollection;
|
|
133
|
+
return tslib_1.__generator(this, function (_a) {
|
|
134
|
+
switch (_a.label) {
|
|
135
|
+
case 0: return [4 /*yield*/, this.hasSessionCollection()];
|
|
136
|
+
case 1:
|
|
137
|
+
hasSessionCollection = _a.sent();
|
|
138
|
+
if (!!hasSessionCollection) return [3 /*break*/, 3];
|
|
139
|
+
return [4 /*yield*/, this.client.db().collection(this.options.sessionCollectionName)];
|
|
140
|
+
case 2:
|
|
141
|
+
_a.sent();
|
|
142
|
+
_a.label = 3;
|
|
143
|
+
case 3: return [2 /*return*/];
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
return MongoDBSessionStorage;
|
|
149
|
+
}());
|
|
150
|
+
exports.MongoDBSessionStorage = MongoDBSessionStorage;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SessionInterface } from '../types';
|
|
2
|
+
import { SessionStorage } from '../session_storage';
|
|
3
|
+
export interface MySQLSessionStorageOptions {
|
|
4
|
+
sessionTableName: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class MySQLSessionStorage implements SessionStorage {
|
|
7
|
+
private dbUrl;
|
|
8
|
+
static withCredentials(host: string, dbName: string, username: string, password: string, opts: Partial<MySQLSessionStorageOptions>): MySQLSessionStorage;
|
|
9
|
+
readonly ready: Promise<void>;
|
|
10
|
+
private options;
|
|
11
|
+
private connection;
|
|
12
|
+
constructor(dbUrl: URL, opts?: Partial<MySQLSessionStorageOptions>);
|
|
13
|
+
storeSession(session: SessionInterface): Promise<boolean>;
|
|
14
|
+
loadSession(id: string): Promise<SessionInterface | undefined>;
|
|
15
|
+
deleteSession(id: string): Promise<boolean>;
|
|
16
|
+
disconnect(): Promise<void>;
|
|
17
|
+
private init;
|
|
18
|
+
private hasSessionTable;
|
|
19
|
+
private createTable;
|
|
20
|
+
private query;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=mysql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/mysql.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,qBAAa,mBAAoB,YAAW,cAAc;IAuBtD,OAAO,CAAC,KAAK;IAtBf,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC;IAY3C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAAmB;gBAG3B,KAAK,EAAE,GAAG,EAClB,IAAI,GAAE,OAAO,CAAC,0BAA0B,CAAM;IASnC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAY9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU3C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAI1B,IAAI;YAKJ,eAAe;YAQf,WAAW;IAiBzB,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MySQLSessionStorage = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var promise_1 = tslib_1.__importDefault(require("mysql2/promise"));
|
|
6
|
+
var session_utils_1 = require("../session-utils");
|
|
7
|
+
var defaultMySQLSessionStorageOptions = {
|
|
8
|
+
sessionTableName: 'shopify_sessions',
|
|
9
|
+
};
|
|
10
|
+
var MySQLSessionStorage = /** @class */ (function () {
|
|
11
|
+
function MySQLSessionStorage(dbUrl, opts) {
|
|
12
|
+
if (opts === void 0) { opts = {}; }
|
|
13
|
+
this.dbUrl = dbUrl;
|
|
14
|
+
if (typeof this.dbUrl === 'string') {
|
|
15
|
+
this.dbUrl = new URL(this.dbUrl);
|
|
16
|
+
}
|
|
17
|
+
this.options = tslib_1.__assign(tslib_1.__assign({}, defaultMySQLSessionStorageOptions), opts);
|
|
18
|
+
this.ready = this.init();
|
|
19
|
+
}
|
|
20
|
+
MySQLSessionStorage.withCredentials = function (host, dbName, username, password, opts) {
|
|
21
|
+
return new MySQLSessionStorage(new URL("mysql://".concat(encodeURIComponent(username), ":").concat(encodeURIComponent(password), "@").concat(host, "/").concat(encodeURIComponent(dbName))), opts);
|
|
22
|
+
};
|
|
23
|
+
MySQLSessionStorage.prototype.storeSession = function (session) {
|
|
24
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
25
|
+
var entries, query;
|
|
26
|
+
return tslib_1.__generator(this, function (_a) {
|
|
27
|
+
switch (_a.label) {
|
|
28
|
+
case 0: return [4 /*yield*/, this.ready];
|
|
29
|
+
case 1:
|
|
30
|
+
_a.sent();
|
|
31
|
+
entries = (0, session_utils_1.sessionEntries)(session);
|
|
32
|
+
query = "\n REPLACE INTO ".concat(this.options.sessionTableName, "\n (").concat(entries.map(function (_a) {
|
|
33
|
+
var _b = tslib_1.__read(_a, 1), key = _b[0];
|
|
34
|
+
return key;
|
|
35
|
+
}).join(', '), ")\n VALUES (").concat(entries.map(function () { return "?"; }).join(', '), ")\n ");
|
|
36
|
+
return [4 /*yield*/, this.query(query, entries.map(function (_a) {
|
|
37
|
+
var _b = tslib_1.__read(_a, 2), _key = _b[0], value = _b[1];
|
|
38
|
+
return value;
|
|
39
|
+
}))];
|
|
40
|
+
case 2:
|
|
41
|
+
_a.sent();
|
|
42
|
+
return [2 /*return*/, true];
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
MySQLSessionStorage.prototype.loadSession = function (id) {
|
|
48
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
49
|
+
var query, _a, rows, rawResult;
|
|
50
|
+
return tslib_1.__generator(this, function (_b) {
|
|
51
|
+
switch (_b.label) {
|
|
52
|
+
case 0: return [4 /*yield*/, this.ready];
|
|
53
|
+
case 1:
|
|
54
|
+
_b.sent();
|
|
55
|
+
query = "\n SELECT * FROM `".concat(this.options.sessionTableName, "`\n WHERE id = ?;\n ");
|
|
56
|
+
return [4 /*yield*/, this.query(query, [id])];
|
|
57
|
+
case 2:
|
|
58
|
+
_a = tslib_1.__read.apply(void 0, [_b.sent(), 1]), rows = _a[0];
|
|
59
|
+
if (!Array.isArray(rows) || (rows === null || rows === void 0 ? void 0 : rows.length) !== 1)
|
|
60
|
+
return [2 /*return*/, undefined];
|
|
61
|
+
rawResult = rows[0];
|
|
62
|
+
return [2 /*return*/, (0, session_utils_1.sessionFromEntries)(Object.entries(rawResult))];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
MySQLSessionStorage.prototype.deleteSession = function (id) {
|
|
68
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
69
|
+
var query;
|
|
70
|
+
return tslib_1.__generator(this, function (_a) {
|
|
71
|
+
switch (_a.label) {
|
|
72
|
+
case 0: return [4 /*yield*/, this.ready];
|
|
73
|
+
case 1:
|
|
74
|
+
_a.sent();
|
|
75
|
+
query = "\n DELETE FROM ".concat(this.options.sessionTableName, "\n WHERE id = ?;\n ");
|
|
76
|
+
return [4 /*yield*/, this.query(query, [id])];
|
|
77
|
+
case 2:
|
|
78
|
+
_a.sent();
|
|
79
|
+
return [2 /*return*/, true];
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
MySQLSessionStorage.prototype.disconnect = function () {
|
|
85
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
86
|
+
return tslib_1.__generator(this, function (_a) {
|
|
87
|
+
switch (_a.label) {
|
|
88
|
+
case 0: return [4 /*yield*/, this.connection.end()];
|
|
89
|
+
case 1:
|
|
90
|
+
_a.sent();
|
|
91
|
+
return [2 /*return*/];
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
MySQLSessionStorage.prototype.init = function () {
|
|
97
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
98
|
+
var _a;
|
|
99
|
+
return tslib_1.__generator(this, function (_b) {
|
|
100
|
+
switch (_b.label) {
|
|
101
|
+
case 0:
|
|
102
|
+
_a = this;
|
|
103
|
+
return [4 /*yield*/, promise_1.default.createConnection(this.dbUrl.toString())];
|
|
104
|
+
case 1:
|
|
105
|
+
_a.connection = _b.sent();
|
|
106
|
+
return [4 /*yield*/, this.createTable()];
|
|
107
|
+
case 2:
|
|
108
|
+
_b.sent();
|
|
109
|
+
return [2 /*return*/];
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
MySQLSessionStorage.prototype.hasSessionTable = function () {
|
|
115
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
116
|
+
var query, _a, rows;
|
|
117
|
+
return tslib_1.__generator(this, function (_b) {
|
|
118
|
+
switch (_b.label) {
|
|
119
|
+
case 0:
|
|
120
|
+
query = "\n SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ?;\n ";
|
|
121
|
+
return [4 /*yield*/, this.query(query, [this.options.sessionTableName])];
|
|
122
|
+
case 1:
|
|
123
|
+
_a = tslib_1.__read.apply(void 0, [_b.sent(), 1]), rows = _a[0];
|
|
124
|
+
return [2 /*return*/, Array.isArray(rows) && rows.length === 1];
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
MySQLSessionStorage.prototype.createTable = function () {
|
|
130
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
131
|
+
var hasSessionTable, query;
|
|
132
|
+
return tslib_1.__generator(this, function (_a) {
|
|
133
|
+
switch (_a.label) {
|
|
134
|
+
case 0: return [4 /*yield*/, this.hasSessionTable()];
|
|
135
|
+
case 1:
|
|
136
|
+
hasSessionTable = _a.sent();
|
|
137
|
+
if (!!hasSessionTable) return [3 /*break*/, 3];
|
|
138
|
+
query = "\n CREATE TABLE ".concat(this.options.sessionTableName, " (\n id varchar(255) NOT NULL PRIMARY KEY,\n shop varchar(255) NOT NULL,\n state varchar(255) NOT NULL,\n isOnline tinyint NOT NULL,\n scope varchar(255),\n accessToken varchar(255)\n )\n ");
|
|
139
|
+
return [4 /*yield*/, this.query(query)];
|
|
140
|
+
case 2:
|
|
141
|
+
_a.sent();
|
|
142
|
+
_a.label = 3;
|
|
143
|
+
case 3: return [2 /*return*/];
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
MySQLSessionStorage.prototype.query = function (sql, params) {
|
|
149
|
+
if (params === void 0) { params = []; }
|
|
150
|
+
return this.connection.query(sql, params);
|
|
151
|
+
};
|
|
152
|
+
return MySQLSessionStorage;
|
|
153
|
+
}());
|
|
154
|
+
exports.MySQLSessionStorage = MySQLSessionStorage;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SessionInterface } from '../types';
|
|
2
|
+
import { SessionStorage } from '../session_storage';
|
|
3
|
+
export interface PostgreSQLSessionStorageOptions {
|
|
4
|
+
sessionTableName: string;
|
|
5
|
+
port: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class PostgreSQLSessionStorage implements SessionStorage {
|
|
8
|
+
private dbUrl;
|
|
9
|
+
static withCredentials(host: string, dbName: string, username: string, password: string, opts: Partial<PostgreSQLSessionStorageOptions>): PostgreSQLSessionStorage;
|
|
10
|
+
readonly ready: Promise<void>;
|
|
11
|
+
private options;
|
|
12
|
+
private client;
|
|
13
|
+
constructor(dbUrl: URL, opts?: Partial<PostgreSQLSessionStorageOptions>);
|
|
14
|
+
storeSession(session: SessionInterface): Promise<boolean>;
|
|
15
|
+
loadSession(id: string): Promise<SessionInterface | undefined>;
|
|
16
|
+
deleteSession(id: string): Promise<boolean>;
|
|
17
|
+
disconnect(): Promise<void>;
|
|
18
|
+
private init;
|
|
19
|
+
private connectClient;
|
|
20
|
+
private hasSessionTable;
|
|
21
|
+
private createTable;
|
|
22
|
+
private query;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=postgresql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/postgresql.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,+BAA+B;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,qBAAa,wBAAyB,YAAW,cAAc;IAuB3D,OAAO,CAAC,KAAK;IAtBf,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,+BAA+B,CAAC;IAYhD,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAAY;gBAGhB,KAAK,EAAE,GAAG,EAClB,IAAI,GAAE,OAAO,CAAC,+BAA+B,CAAM;IASxC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAY9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUjD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAIpB,IAAI;YAMJ,aAAa;YAIb,eAAe;YAQf,WAAW;YAiBX,KAAK;CAIpB"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostgreSQLSessionStorage = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var pg_1 = tslib_1.__importDefault(require("pg"));
|
|
6
|
+
var session_utils_1 = require("../session-utils");
|
|
7
|
+
var defaultPostgreSQLSessionStorageOptions = {
|
|
8
|
+
sessionTableName: 'shopify_sessions',
|
|
9
|
+
port: 3211,
|
|
10
|
+
};
|
|
11
|
+
var PostgreSQLSessionStorage = /** @class */ (function () {
|
|
12
|
+
function PostgreSQLSessionStorage(dbUrl, opts) {
|
|
13
|
+
if (opts === void 0) { opts = {}; }
|
|
14
|
+
this.dbUrl = dbUrl;
|
|
15
|
+
if (typeof this.dbUrl === 'string') {
|
|
16
|
+
this.dbUrl = new URL(this.dbUrl);
|
|
17
|
+
}
|
|
18
|
+
this.options = tslib_1.__assign(tslib_1.__assign({}, defaultPostgreSQLSessionStorageOptions), opts);
|
|
19
|
+
this.ready = this.init();
|
|
20
|
+
}
|
|
21
|
+
PostgreSQLSessionStorage.withCredentials = function (host, dbName, username, password, opts) {
|
|
22
|
+
return new PostgreSQLSessionStorage(new URL("postgres://".concat(encodeURIComponent(username), ":").concat(encodeURIComponent(password), "@").concat(host, "/").concat(encodeURIComponent(dbName))), opts);
|
|
23
|
+
};
|
|
24
|
+
PostgreSQLSessionStorage.prototype.storeSession = function (session) {
|
|
25
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
26
|
+
var entries, query;
|
|
27
|
+
return tslib_1.__generator(this, function (_a) {
|
|
28
|
+
switch (_a.label) {
|
|
29
|
+
case 0: return [4 /*yield*/, this.ready];
|
|
30
|
+
case 1:
|
|
31
|
+
_a.sent();
|
|
32
|
+
entries = (0, session_utils_1.sessionEntries)(session);
|
|
33
|
+
query = "\n INSERT INTO ".concat(this.options.sessionTableName, "\n (").concat(entries.map(function (_a) {
|
|
34
|
+
var _b = tslib_1.__read(_a, 1), key = _b[0];
|
|
35
|
+
return key;
|
|
36
|
+
}).join(', '), ")\n VALUES (").concat(entries.map(function (_, i) { return "$".concat(i + 1); }).join(', '), ")\n ON CONFLICT (id) DO UPDATE SET ").concat(entries
|
|
37
|
+
.map(function (_a) {
|
|
38
|
+
var _b = tslib_1.__read(_a, 1), key = _b[0];
|
|
39
|
+
return "".concat(key, " = Excluded.").concat(key);
|
|
40
|
+
})
|
|
41
|
+
.join(', '), ";\n ");
|
|
42
|
+
return [4 /*yield*/, this.query(query, entries.map(function (_a) {
|
|
43
|
+
var _b = tslib_1.__read(_a, 2), _key = _b[0], value = _b[1];
|
|
44
|
+
return value;
|
|
45
|
+
}))];
|
|
46
|
+
case 2:
|
|
47
|
+
_a.sent();
|
|
48
|
+
return [2 /*return*/, true];
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
PostgreSQLSessionStorage.prototype.loadSession = function (id) {
|
|
54
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
55
|
+
var query, rows, rawResult;
|
|
56
|
+
return tslib_1.__generator(this, function (_a) {
|
|
57
|
+
switch (_a.label) {
|
|
58
|
+
case 0: return [4 /*yield*/, this.ready];
|
|
59
|
+
case 1:
|
|
60
|
+
_a.sent();
|
|
61
|
+
query = "\n SELECT * FROM ".concat(this.options.sessionTableName, "\n WHERE id = $1;\n ");
|
|
62
|
+
return [4 /*yield*/, this.query(query, [id])];
|
|
63
|
+
case 2:
|
|
64
|
+
rows = _a.sent();
|
|
65
|
+
if (!Array.isArray(rows) || (rows === null || rows === void 0 ? void 0 : rows.length) !== 1)
|
|
66
|
+
return [2 /*return*/, undefined];
|
|
67
|
+
rawResult = rows[0];
|
|
68
|
+
return [2 /*return*/, (0, session_utils_1.sessionFromEntries)(Object.entries(rawResult))];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
PostgreSQLSessionStorage.prototype.deleteSession = function (id) {
|
|
74
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
75
|
+
var query;
|
|
76
|
+
return tslib_1.__generator(this, function (_a) {
|
|
77
|
+
switch (_a.label) {
|
|
78
|
+
case 0: return [4 /*yield*/, this.ready];
|
|
79
|
+
case 1:
|
|
80
|
+
_a.sent();
|
|
81
|
+
query = "\n DELETE FROM ".concat(this.options.sessionTableName, "\n WHERE id = $1;\n ");
|
|
82
|
+
return [4 /*yield*/, this.query(query, [id])];
|
|
83
|
+
case 2:
|
|
84
|
+
_a.sent();
|
|
85
|
+
return [2 /*return*/, true];
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
PostgreSQLSessionStorage.prototype.disconnect = function () {
|
|
91
|
+
return this.client.end();
|
|
92
|
+
};
|
|
93
|
+
PostgreSQLSessionStorage.prototype.init = function () {
|
|
94
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
95
|
+
return tslib_1.__generator(this, function (_a) {
|
|
96
|
+
switch (_a.label) {
|
|
97
|
+
case 0:
|
|
98
|
+
this.client = new pg_1.default.Client({ connectionString: this.dbUrl.toString() });
|
|
99
|
+
return [4 /*yield*/, this.connectClient()];
|
|
100
|
+
case 1:
|
|
101
|
+
_a.sent();
|
|
102
|
+
return [4 /*yield*/, this.createTable()];
|
|
103
|
+
case 2:
|
|
104
|
+
_a.sent();
|
|
105
|
+
return [2 /*return*/];
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
PostgreSQLSessionStorage.prototype.connectClient = function () {
|
|
111
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
112
|
+
return tslib_1.__generator(this, function (_a) {
|
|
113
|
+
switch (_a.label) {
|
|
114
|
+
case 0: return [4 /*yield*/, this.client.connect()];
|
|
115
|
+
case 1:
|
|
116
|
+
_a.sent();
|
|
117
|
+
return [2 /*return*/];
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
PostgreSQLSessionStorage.prototype.hasSessionTable = function () {
|
|
123
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
124
|
+
var query, _a, rows;
|
|
125
|
+
return tslib_1.__generator(this, function (_b) {
|
|
126
|
+
switch (_b.label) {
|
|
127
|
+
case 0:
|
|
128
|
+
query = "\n SELECT * FROM pg_catalog.pg_tables WHERE tablename = $1\n ";
|
|
129
|
+
return [4 /*yield*/, this.query(query, [this.options.sessionTableName])];
|
|
130
|
+
case 1:
|
|
131
|
+
_a = tslib_1.__read.apply(void 0, [_b.sent(), 1]), rows = _a[0];
|
|
132
|
+
return [2 /*return*/, Array.isArray(rows) && rows.length === 1];
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
PostgreSQLSessionStorage.prototype.createTable = function () {
|
|
138
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
139
|
+
var hasSessionTable, query;
|
|
140
|
+
return tslib_1.__generator(this, function (_a) {
|
|
141
|
+
switch (_a.label) {
|
|
142
|
+
case 0: return [4 /*yield*/, this.hasSessionTable()];
|
|
143
|
+
case 1:
|
|
144
|
+
hasSessionTable = _a.sent();
|
|
145
|
+
if (!!hasSessionTable) return [3 /*break*/, 3];
|
|
146
|
+
query = "\n CREATE TABLE ".concat(this.options.sessionTableName, " (\n id varchar(255) NOT NULL PRIMARY KEY,\n shop varchar(255) NOT NULL,\n state varchar(255) NOT NULL,\n isOnline boolean NOT NULL,\n scope varchar(255),\n accessToken varchar(255)\n )\n ");
|
|
147
|
+
return [4 /*yield*/, this.query(query)];
|
|
148
|
+
case 2:
|
|
149
|
+
_a.sent();
|
|
150
|
+
_a.label = 3;
|
|
151
|
+
case 3: return [2 /*return*/];
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
};
|
|
156
|
+
PostgreSQLSessionStorage.prototype.query = function (sql, params) {
|
|
157
|
+
if (params === void 0) { params = []; }
|
|
158
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
159
|
+
var result;
|
|
160
|
+
return tslib_1.__generator(this, function (_a) {
|
|
161
|
+
switch (_a.label) {
|
|
162
|
+
case 0: return [4 /*yield*/, this.client.query(sql, params)];
|
|
163
|
+
case 1:
|
|
164
|
+
result = _a.sent();
|
|
165
|
+
return [2 /*return*/, result.rows];
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
};
|
|
170
|
+
return PostgreSQLSessionStorage;
|
|
171
|
+
}());
|
|
172
|
+
exports.PostgreSQLSessionStorage = PostgreSQLSessionStorage;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SessionInterface } from '../types';
|
|
2
|
+
import { SessionStorage } from '../session_storage';
|
|
3
|
+
export interface RedisSessionStorageOptions {
|
|
4
|
+
sessionKeyPrefix: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class RedisSessionStorage implements SessionStorage {
|
|
7
|
+
private dbUrl;
|
|
8
|
+
static withCredentials(host: string, db: number, username: string, password: string, opts: Partial<RedisSessionStorageOptions>): RedisSessionStorage;
|
|
9
|
+
readonly ready: Promise<void>;
|
|
10
|
+
private options;
|
|
11
|
+
private client;
|
|
12
|
+
constructor(dbUrl: URL, opts?: Partial<RedisSessionStorageOptions>);
|
|
13
|
+
storeSession(session: SessionInterface): Promise<boolean>;
|
|
14
|
+
loadSession(id: string): Promise<SessionInterface | undefined>;
|
|
15
|
+
deleteSession(id: string): Promise<boolean>;
|
|
16
|
+
disconnect(): Promise<void>;
|
|
17
|
+
private fullKey;
|
|
18
|
+
private init;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=redis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/redis.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,qBAAa,mBAAoB,YAAW,cAAc;IAuBtD,OAAO,CAAC,KAAK;IAtBf,MAAM,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC;IAY3C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAkB;gBAGtB,KAAK,EAAE,GAAG,EAClB,IAAI,GAAE,OAAO,CAAC,0BAA0B,CAAM;IASnC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAW9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,OAAO,CAAC,OAAO;YAID,IAAI;CAMnB"}
|