@shopify/shopify-api 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/__tests__/fake-resource-with-custom-prefix.d.ts.map +1 -1
  3. package/dist/__tests__/fake-resource-with-custom-prefix.js +7 -5
  4. package/dist/__tests__/fake-resource.d.ts.map +1 -1
  5. package/dist/__tests__/fake-resource.js +15 -13
  6. package/dist/auth/oauth/oauth.d.ts.map +1 -1
  7. package/dist/auth/oauth/oauth.js +11 -11
  8. package/dist/auth/scopes/index.js +5 -5
  9. package/dist/auth/session/index.d.ts +11 -1
  10. package/dist/auth/session/index.d.ts.map +1 -1
  11. package/dist/auth/session/index.js +16 -1
  12. package/dist/auth/session/session-utils.d.ts +7 -0
  13. package/dist/auth/session/session-utils.d.ts.map +1 -0
  14. package/dist/auth/session/session-utils.js +50 -0
  15. package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts +3 -0
  16. package/dist/auth/session/storage/__tests__/battery-of-tests.d.ts.map +1 -0
  17. package/dist/auth/session/storage/__tests__/battery-of-tests.js +78 -0
  18. package/dist/auth/session/storage/__tests__/utils.d.ts +10 -0
  19. package/dist/auth/session/storage/__tests__/utils.d.ts.map +1 -0
  20. package/dist/auth/session/storage/__tests__/utils.js +87 -0
  21. package/dist/auth/session/storage/custom.js +4 -4
  22. package/dist/auth/session/storage/mongodb.d.ts +23 -0
  23. package/dist/auth/session/storage/mongodb.d.ts.map +1 -0
  24. package/dist/auth/session/storage/mongodb.js +150 -0
  25. package/dist/auth/session/storage/mysql.d.ts +22 -0
  26. package/dist/auth/session/storage/mysql.d.ts.map +1 -0
  27. package/dist/auth/session/storage/mysql.js +154 -0
  28. package/dist/auth/session/storage/postgresql.d.ts +24 -0
  29. package/dist/auth/session/storage/postgresql.d.ts.map +1 -0
  30. package/dist/auth/session/storage/postgresql.js +172 -0
  31. package/dist/auth/session/storage/redis.d.ts +20 -0
  32. package/dist/auth/session/storage/redis.d.ts.map +1 -0
  33. package/dist/auth/session/storage/redis.js +105 -0
  34. package/dist/auth/session/storage/sqlite.d.ts +19 -0
  35. package/dist/auth/session/storage/sqlite.d.ts.map +1 -0
  36. package/dist/auth/session/storage/sqlite.js +125 -0
  37. package/dist/base-rest-resource.d.ts +2 -1
  38. package/dist/base-rest-resource.d.ts.map +1 -1
  39. package/dist/base-rest-resource.js +29 -19
  40. package/dist/base-types.d.ts +1 -0
  41. package/dist/base-types.d.ts.map +1 -1
  42. package/dist/clients/graphql/graphql_client.js +1 -1
  43. package/dist/clients/http_client/http_client.js +16 -16
  44. package/dist/clients/rest/rest_client.js +5 -3
  45. package/dist/context.d.ts +1 -0
  46. package/dist/context.d.ts.map +1 -1
  47. package/dist/context.js +9 -3
  48. package/dist/error.js +4 -3
  49. package/dist/index.d.ts +5 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/rest-resources/2021-07/index.js +2 -0
  52. package/dist/rest-resources/2021-10/index.js +2 -0
  53. package/dist/rest-resources/2022-01/index.js +2 -0
  54. package/dist/rest-resources/2022-04/index.js +2 -0
  55. package/dist/utils/decode-session-token.js +1 -1
  56. package/dist/utils/graphql_proxy.js +1 -1
  57. package/dist/utils/hmac-validator.js +2 -5
  58. package/dist/utils/processed-query.js +3 -3
  59. package/dist/utils/safe-compare.d.ts.map +1 -1
  60. package/dist/utils/safe-compare.js +17 -15
  61. package/dist/utils/setup-jest.d.ts.map +1 -1
  62. package/dist/utils/setup-jest.js +4 -3
  63. package/dist/utils/with-session.js +3 -3
  64. package/dist/version.d.ts +1 -1
  65. package/dist/version.js +1 -1
  66. package/dist/webhooks/registry.d.ts +2 -1
  67. package/dist/webhooks/registry.d.ts.map +1 -1
  68. package/dist/webhooks/registry.js +39 -13
  69. package/package.json +12 -4
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedisSessionStorage = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var redis_1 = require("redis");
6
+ var session_utils_1 = require("../session-utils");
7
+ var defaultRedisSessionStorageOptions = {
8
+ sessionKeyPrefix: 'shopify_sessions',
9
+ };
10
+ var RedisSessionStorage = /** @class */ (function () {
11
+ function RedisSessionStorage(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({}, defaultRedisSessionStorageOptions), opts);
18
+ this.ready = this.init();
19
+ }
20
+ RedisSessionStorage.withCredentials = function (host, db, username, password, opts) {
21
+ return new RedisSessionStorage(new URL("redis://".concat(encodeURIComponent(username), ":").concat(encodeURIComponent(password), "@").concat(host, "/").concat(db)), opts);
22
+ };
23
+ RedisSessionStorage.prototype.storeSession = function (session) {
24
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
25
+ return tslib_1.__generator(this, function (_a) {
26
+ switch (_a.label) {
27
+ case 0: return [4 /*yield*/, this.ready];
28
+ case 1:
29
+ _a.sent();
30
+ return [4 /*yield*/, this.client.set(this.fullKey(session.id), JSON.stringify((0, session_utils_1.sessionEntries)(session)))];
31
+ case 2:
32
+ _a.sent();
33
+ return [2 /*return*/, true];
34
+ }
35
+ });
36
+ });
37
+ };
38
+ RedisSessionStorage.prototype.loadSession = function (id) {
39
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
40
+ var rawResult;
41
+ return tslib_1.__generator(this, function (_a) {
42
+ switch (_a.label) {
43
+ case 0: return [4 /*yield*/, this.ready];
44
+ case 1:
45
+ _a.sent();
46
+ return [4 /*yield*/, this.client.get(this.fullKey(id))];
47
+ case 2:
48
+ rawResult = _a.sent();
49
+ if (!rawResult)
50
+ return [2 /*return*/, undefined];
51
+ rawResult = JSON.parse(rawResult);
52
+ return [2 /*return*/, (0, session_utils_1.sessionFromEntries)(rawResult)];
53
+ }
54
+ });
55
+ });
56
+ };
57
+ RedisSessionStorage.prototype.deleteSession = function (id) {
58
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
59
+ return tslib_1.__generator(this, function (_a) {
60
+ switch (_a.label) {
61
+ case 0: return [4 /*yield*/, this.ready];
62
+ case 1:
63
+ _a.sent();
64
+ return [4 /*yield*/, this.client.del(this.fullKey(id))];
65
+ case 2:
66
+ _a.sent();
67
+ return [2 /*return*/, true];
68
+ }
69
+ });
70
+ });
71
+ };
72
+ RedisSessionStorage.prototype.disconnect = function () {
73
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
74
+ return tslib_1.__generator(this, function (_a) {
75
+ switch (_a.label) {
76
+ case 0: return [4 /*yield*/, this.client.quit()];
77
+ case 1:
78
+ _a.sent();
79
+ return [2 /*return*/];
80
+ }
81
+ });
82
+ });
83
+ };
84
+ RedisSessionStorage.prototype.fullKey = function (name) {
85
+ return "".concat(this.options.sessionKeyPrefix, "_").concat(name);
86
+ };
87
+ RedisSessionStorage.prototype.init = function () {
88
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
89
+ return tslib_1.__generator(this, function (_a) {
90
+ switch (_a.label) {
91
+ case 0:
92
+ this.client = (0, redis_1.createClient)({
93
+ url: this.dbUrl.toString(),
94
+ });
95
+ return [4 /*yield*/, this.client.connect()];
96
+ case 1:
97
+ _a.sent();
98
+ return [2 /*return*/];
99
+ }
100
+ });
101
+ });
102
+ };
103
+ return RedisSessionStorage;
104
+ }());
105
+ exports.RedisSessionStorage = RedisSessionStorage;
@@ -0,0 +1,19 @@
1
+ import { SessionInterface } from '../types';
2
+ import { SessionStorage } from '../session_storage';
3
+ export interface SQLiteSessionStorageOptions {
4
+ sessionTableName: string;
5
+ }
6
+ export declare class SQLiteSessionStorage implements SessionStorage {
7
+ private filename;
8
+ private options;
9
+ private db;
10
+ private ready;
11
+ constructor(filename: string, opts?: Partial<SQLiteSessionStorageOptions>);
12
+ storeSession(session: SessionInterface): Promise<boolean>;
13
+ loadSession(id: string): Promise<SessionInterface | undefined>;
14
+ deleteSession(id: string): Promise<boolean>;
15
+ private hasSessionTable;
16
+ private init;
17
+ private query;
18
+ }
19
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../src/auth/session/storage/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,qBAAa,oBAAqB,YAAW,cAAc;IAMvD,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,KAAK,CAAgB;gBAGnB,QAAQ,EAAE,MAAM,EACxB,IAAI,GAAE,OAAO,CAAC,2BAA2B,CAAM;IAOpC,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAa9D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAU1C,eAAe;YAWf,IAAI;IAiBlB,OAAO,CAAC,KAAK;CAWd"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SQLiteSessionStorage = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var sqlite3_1 = tslib_1.__importDefault(require("sqlite3"));
6
+ var session_utils_1 = require("../session-utils");
7
+ var defaultSQLiteSessionStorageOptions = {
8
+ sessionTableName: 'shopify_sessions',
9
+ };
10
+ var SQLiteSessionStorage = /** @class */ (function () {
11
+ function SQLiteSessionStorage(filename, opts) {
12
+ if (opts === void 0) { opts = {}; }
13
+ this.filename = filename;
14
+ this.options = tslib_1.__assign(tslib_1.__assign({}, defaultSQLiteSessionStorageOptions), opts);
15
+ this.db = new sqlite3_1.default.Database(this.filename);
16
+ this.ready = this.init();
17
+ }
18
+ SQLiteSessionStorage.prototype.storeSession = function (session) {
19
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
20
+ var entries, query;
21
+ return tslib_1.__generator(this, function (_a) {
22
+ switch (_a.label) {
23
+ case 0: return [4 /*yield*/, this.ready];
24
+ case 1:
25
+ _a.sent();
26
+ entries = (0, session_utils_1.sessionEntries)(session);
27
+ query = "\n INSERT OR REPLACE INTO ".concat(this.options.sessionTableName, "\n (").concat(Object.keys(session).join(', '), ")\n VALUES (").concat(entries.map(function () { return '?'; }).join(', '), ");\n ");
28
+ return [4 /*yield*/, this.query(query, entries.map(function (_a) {
29
+ var _b = tslib_1.__read(_a, 2), _key = _b[0], value = _b[1];
30
+ return value;
31
+ }))];
32
+ case 2:
33
+ _a.sent();
34
+ return [2 /*return*/, true];
35
+ }
36
+ });
37
+ });
38
+ };
39
+ SQLiteSessionStorage.prototype.loadSession = function (id) {
40
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
41
+ var query, rows, rawResult;
42
+ return tslib_1.__generator(this, function (_a) {
43
+ switch (_a.label) {
44
+ case 0: return [4 /*yield*/, this.ready];
45
+ case 1:
46
+ _a.sent();
47
+ query = "\n SELECT * FROM ".concat(this.options.sessionTableName, "\n WHERE id = ?;\n ");
48
+ return [4 /*yield*/, this.query(query, [id])];
49
+ case 2:
50
+ rows = _a.sent();
51
+ if (!Array.isArray(rows) || (rows === null || rows === void 0 ? void 0 : rows.length) !== 1)
52
+ return [2 /*return*/, undefined];
53
+ rawResult = rows[0];
54
+ return [2 /*return*/, (0, session_utils_1.sessionFromEntries)(Object.entries(rawResult))];
55
+ }
56
+ });
57
+ });
58
+ };
59
+ SQLiteSessionStorage.prototype.deleteSession = function (id) {
60
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
61
+ var query;
62
+ return tslib_1.__generator(this, function (_a) {
63
+ switch (_a.label) {
64
+ case 0: return [4 /*yield*/, this.ready];
65
+ case 1:
66
+ _a.sent();
67
+ query = "\n DELETE FROM ".concat(this.options.sessionTableName, "\n WHERE id = ?;\n ");
68
+ return [4 /*yield*/, this.query(query, [id])];
69
+ case 2:
70
+ _a.sent();
71
+ return [2 /*return*/, true];
72
+ }
73
+ });
74
+ });
75
+ };
76
+ SQLiteSessionStorage.prototype.hasSessionTable = function () {
77
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
78
+ var query, rows;
79
+ return tslib_1.__generator(this, function (_a) {
80
+ switch (_a.label) {
81
+ case 0:
82
+ query = "\n SELECT name FROM sqlite_schema\n WHERE\n type = 'table' AND\n name = ?;\n ";
83
+ return [4 /*yield*/, this.query(query, [this.options.sessionTableName])];
84
+ case 1:
85
+ rows = _a.sent();
86
+ return [2 /*return*/, rows.length === 1];
87
+ }
88
+ });
89
+ });
90
+ };
91
+ SQLiteSessionStorage.prototype.init = function () {
92
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
93
+ var hasSessionTable, query;
94
+ return tslib_1.__generator(this, function (_a) {
95
+ switch (_a.label) {
96
+ case 0: return [4 /*yield*/, this.hasSessionTable()];
97
+ case 1:
98
+ hasSessionTable = _a.sent();
99
+ if (!!hasSessionTable) return [3 /*break*/, 3];
100
+ 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 ");
101
+ return [4 /*yield*/, this.query(query)];
102
+ case 2:
103
+ _a.sent();
104
+ _a.label = 3;
105
+ case 3: return [2 /*return*/];
106
+ }
107
+ });
108
+ });
109
+ };
110
+ SQLiteSessionStorage.prototype.query = function (sql, params) {
111
+ var _this = this;
112
+ if (params === void 0) { params = []; }
113
+ return new Promise(function (resolve, reject) {
114
+ _this.db.all(sql, params, function (err, result) {
115
+ if (err) {
116
+ reject(err);
117
+ return;
118
+ }
119
+ resolve(result);
120
+ });
121
+ });
122
+ };
123
+ return SQLiteSessionStorage;
124
+ }());
125
+ exports.SQLiteSessionStorage = SQLiteSessionStorage;
@@ -62,9 +62,10 @@ declare class Base {
62
62
  }): Promise<void>;
63
63
  saveAndUpdate(): Promise<void>;
64
64
  delete(): Promise<void>;
65
- serialize(): Body;
65
+ serialize(saving?: boolean): Body;
66
66
  protected setData(data: Body): void;
67
67
  private resource;
68
+ private serializeSubAttribute;
68
69
  }
69
70
  export default Base;
70
71
  //# sourceMappingURL=base-rest-resource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-rest-resource.d.ts","sourceRoot":"","sources":["../src/base-rest-resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-rest-resource.d.ts","sourceRoot":"","sources":["../src/base-rest-resource.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,7 @@ var Base = /** @class */ (function () {
42
42
  var client, path, cleanParams, key;
43
43
  return tslib_1.__generator(this, function (_b) {
44
44
  if (context_1.Context.API_VERSION !== this.API_VERSION) {
45
- throw new error_1.RestResourceError("Current Context.API_VERSION '" + context_1.Context.API_VERSION + "' does not match resource version " + this.API_VERSION);
45
+ throw new error_1.RestResourceError("Current Context.API_VERSION '".concat(context_1.Context.API_VERSION, "' does not match resource version ").concat(this.API_VERSION));
46
46
  }
47
47
  client = new rest_1.RestClient(session.shop, session.accessToken);
48
48
  path = this.getPath({ http_method: http_method, operation: operation, urlIds: urlIds, entity: entity });
@@ -74,7 +74,7 @@ var Base = /** @class */ (function () {
74
74
  case 'delete':
75
75
  return [2 /*return*/, client.delete({ path: path, query: cleanParams })];
76
76
  default:
77
- throw new Error("Unrecognized HTTP method \"" + http_method + "\"");
77
+ throw new Error("Unrecognized HTTP method \"".concat(http_method, "\""));
78
78
  }
79
79
  return [2 /*return*/];
80
80
  });
@@ -114,13 +114,13 @@ var Base = /** @class */ (function () {
114
114
  specificity = path.ids.length;
115
115
  match = path.path.replace(/(<([^>]+)>)/g,
116
116
  // eslint-disable-next-line @typescript-eslint/naming-convention
117
- function (_m1, _m2, id) { return "" + pathUrlIds[id]; });
117
+ function (_m1, _m2, id) { return "".concat(pathUrlIds[id]); });
118
118
  });
119
119
  if (!match) {
120
120
  throw new error_1.RestResourceError('Could not find a path for request');
121
121
  }
122
122
  if (this.CUSTOM_PREFIX) {
123
- return this.CUSTOM_PREFIX + "/" + match;
123
+ return "".concat(this.CUSTOM_PREFIX, "/").concat(match);
124
124
  }
125
125
  else {
126
126
  return match;
@@ -148,26 +148,26 @@ var Base = /** @class */ (function () {
148
148
  return instance;
149
149
  };
150
150
  Base.prototype.save = function (_a) {
151
- var _b = (_a === void 0 ? {} : _a).update, update = _b === void 0 ? false : _b;
151
+ var _b = _a === void 0 ? {} : _a, _c = _b.update, update = _c === void 0 ? false : _c;
152
152
  return tslib_1.__awaiter(this, void 0, void 0, function () {
153
- var _c, PRIMARY_KEY, NAME, method, data, response, body;
154
- var _d;
155
- return tslib_1.__generator(this, function (_e) {
156
- switch (_e.label) {
153
+ var _d, PRIMARY_KEY, NAME, method, data, response, body;
154
+ var _e;
155
+ return tslib_1.__generator(this, function (_f) {
156
+ switch (_f.label) {
157
157
  case 0:
158
- _c = this.resource(), PRIMARY_KEY = _c.PRIMARY_KEY, NAME = _c.NAME;
158
+ _d = this.resource(), PRIMARY_KEY = _d.PRIMARY_KEY, NAME = _d.NAME;
159
159
  method = this[PRIMARY_KEY] ? 'put' : 'post';
160
- data = this.serialize();
160
+ data = this.serialize(true);
161
161
  return [4 /*yield*/, this.resource().request({
162
162
  http_method: method,
163
163
  operation: method,
164
164
  session: this.session,
165
165
  urlIds: {},
166
- body: (_d = {}, _d[this.resource().getJsonBodyName()] = data, _d),
166
+ body: (_e = {}, _e[this.resource().getJsonBodyName()] = data, _e),
167
167
  entity: this,
168
168
  })];
169
169
  case 1:
170
- response = _e.sent();
170
+ response = _f.sent();
171
171
  body = response.body[NAME];
172
172
  if (update && body) {
173
173
  this.setData(body);
@@ -207,21 +207,24 @@ var Base = /** @class */ (function () {
207
207
  });
208
208
  });
209
209
  };
210
- Base.prototype.serialize = function () {
210
+ Base.prototype.serialize = function (saving) {
211
+ var _this = this;
212
+ if (saving === void 0) { saving = false; }
211
213
  var _a = this.resource(), HAS_MANY = _a.HAS_MANY, HAS_ONE = _a.HAS_ONE, READ_ONLY_ATTRIBUTES = _a.READ_ONLY_ATTRIBUTES;
212
214
  return Object.entries(this).reduce(function (acc, _a) {
213
215
  var _b = tslib_1.__read(_a, 2), attribute = _b[0], value = _b[1];
214
- if (['session'].includes(attribute) ||
215
- READ_ONLY_ATTRIBUTES.includes(attribute)) {
216
+ if (saving &&
217
+ (['session'].includes(attribute) ||
218
+ READ_ONLY_ATTRIBUTES.includes(attribute))) {
216
219
  return acc;
217
220
  }
218
221
  if (attribute in HAS_MANY && value) {
219
222
  acc[attribute] = value.reduce(function (attrAcc, entry) {
220
- return attrAcc.concat(entry.serialize ? entry.serialize() : entry);
223
+ return attrAcc.concat(_this.serializeSubAttribute(entry, saving));
221
224
  }, []);
222
225
  }
223
- else if (attribute in HAS_ONE && value && value.serialize) {
224
- acc[attribute] = value.serialize();
226
+ else if (attribute in HAS_ONE && value) {
227
+ acc[attribute] = _this.serializeSubAttribute(value, saving);
225
228
  }
226
229
  else {
227
230
  acc[attribute] = value;
@@ -256,6 +259,13 @@ var Base = /** @class */ (function () {
256
259
  Base.prototype.resource = function () {
257
260
  return this.constructor;
258
261
  };
262
+ Base.prototype.serializeSubAttribute = function (attribute, saving) {
263
+ return attribute.serialize
264
+ ? attribute.serialize(saving)
265
+ : this.resource()
266
+ .createInstance(this.session, attribute)
267
+ .serialize(saving);
268
+ };
259
269
  Base.NAME = '';
260
270
  Base.PLURAL_NAME = '';
261
271
  Base.PRIMARY_KEY = 'id';
@@ -5,6 +5,7 @@ export interface ContextParams {
5
5
  API_SECRET_KEY: string;
6
6
  SCOPES: string[] | AuthScopes;
7
7
  HOST_NAME: string;
8
+ HOST_SCHEME?: string;
8
9
  API_VERSION: ApiVersion;
9
10
  IS_EMBEDDED_APP: boolean;
10
11
  IS_PRIVATE_APP?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"base-types.d.ts","sourceRoot":"","sources":["../src/base-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC,CAAC,EAAE,MAAM,CAAC;CAC9C;AAED,oBAAY,UAAU;IACpB,MAAM,YAAY;IAClB,SAAS,YAAY;IACrB,SAAS,YAAY;IACrB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED,oBAAY,aAAa;IACvB,WAAW,2BAA2B;IACtC,qBAAqB,sCAAsC;IAC3D,IAAI,0BAA0B;IAC9B,KAAK,oBAAoB;IACzB,MAAM,0BAA0B;CACjC"}
1
+ {"version":3,"file":"base-types.d.ts","sourceRoot":"","sources":["../src/base-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,UAAU,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC,CAAC,EAAE,MAAM,CAAC;CAC9C;AAED,oBAAY,UAAU;IACpB,MAAM,YAAY;IAClB,SAAS,YAAY;IACrB,SAAS,YAAY;IACrB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED,oBAAY,aAAa;IACvB,WAAW,2BAA2B;IACtC,qBAAqB,sCAAsC;IAC3D,IAAI,0BAA0B;IAC9B,KAAK,oBAAoB;IACzB,MAAM,0BAA0B;CACjC"}
@@ -28,7 +28,7 @@ var GraphqlClient = /** @class */ (function () {
28
28
  }
29
29
  accessTokenHeader = this.getAccessTokenHeader();
30
30
  params.extraHeaders = tslib_1.__assign((_a = {}, _a[accessTokenHeader.header] = accessTokenHeader.value, _a), params.extraHeaders);
31
- path = this.baseApiPath + "/" + context_1.Context.API_VERSION + "/graphql.json";
31
+ path = "".concat(this.baseApiPath, "/").concat(context_1.Context.API_VERSION, "/graphql.json");
32
32
  if (typeof params.data === 'object') {
33
33
  dataType = types_1.DataType.JSON;
34
34
  }
@@ -73,19 +73,19 @@ var HttpClient = /** @class */ (function () {
73
73
  case 0:
74
74
  maxTries = params.tries ? params.tries : 1;
75
75
  if (maxTries <= 0) {
76
- throw new ShopifyErrors.HttpRequestError("Number of tries must be >= 0, got " + maxTries);
76
+ throw new ShopifyErrors.HttpRequestError("Number of tries must be >= 0, got ".concat(maxTries));
77
77
  }
78
- userAgent = "Shopify API Library v" + version_1.SHOPIFY_API_LIBRARY_VERSION + " | Node " + process.version;
78
+ userAgent = "Shopify API Library v".concat(version_1.SHOPIFY_API_LIBRARY_VERSION, " | Node ").concat(process.version);
79
79
  if (context_1.Context.USER_AGENT_PREFIX) {
80
- userAgent = context_1.Context.USER_AGENT_PREFIX + " | " + userAgent;
80
+ userAgent = "".concat(context_1.Context.USER_AGENT_PREFIX, " | ").concat(userAgent);
81
81
  }
82
82
  if (params.extraHeaders) {
83
83
  if (params.extraHeaders['user-agent']) {
84
- userAgent = params.extraHeaders['user-agent'] + " | " + userAgent;
84
+ userAgent = "".concat(params.extraHeaders['user-agent'], " | ").concat(userAgent);
85
85
  delete params.extraHeaders['user-agent'];
86
86
  }
87
87
  else if (params.extraHeaders['User-Agent']) {
88
- userAgent = params.extraHeaders['User-Agent'] + " | " + userAgent;
88
+ userAgent = "".concat(params.extraHeaders['User-Agent'], " | ").concat(userAgent);
89
89
  }
90
90
  }
91
91
  headers = tslib_1.__assign(tslib_1.__assign({}, params.extraHeaders), { 'User-Agent': userAgent });
@@ -110,7 +110,7 @@ var HttpClient = /** @class */ (function () {
110
110
  headers = tslib_1.__assign({ 'Content-Type': type, 'Content-Length': Buffer.byteLength(body) }, params.extraHeaders);
111
111
  }
112
112
  }
113
- url = "https://" + this.domain + this.getRequestPath(params.path) + processed_query_1.default.stringify(params.query);
113
+ url = "https://".concat(this.domain).concat(this.getRequestPath(params.path)).concat(processed_query_1.default.stringify(params.query));
114
114
  options = {
115
115
  method: params.method.toString(),
116
116
  headers: headers,
@@ -142,7 +142,7 @@ var HttpClient = /** @class */ (function () {
142
142
  case 6:
143
143
  // We're set to multiple tries but ran out
144
144
  if (maxTries > 1) {
145
- throw new ShopifyErrors.HttpMaxRetriesError("Exceeded maximum retry count of " + maxTries + ". Last message: " + error_1.message);
145
+ throw new ShopifyErrors.HttpMaxRetriesError("Exceeded maximum retry count of ".concat(maxTries, ". Last message: ").concat(error_1.message));
146
146
  }
147
147
  _b.label = 7;
148
148
  case 7:
@@ -158,13 +158,13 @@ var HttpClient = /** @class */ (function () {
158
158
  });
159
159
  };
160
160
  HttpClient.prototype.getRequestPath = function (path) {
161
- return "/" + path.replace(/^\//, '');
161
+ return "/".concat(path.replace(/^\//, ''));
162
162
  };
163
163
  HttpClient.prototype.doRequest = function (url, options) {
164
164
  return tslib_1.__awaiter(this, void 0, void 0, function () {
165
165
  var _this = this;
166
166
  return tslib_1.__generator(this, function (_a) {
167
- return [2 /*return*/, node_fetch_1.default(url, options)
167
+ return [2 /*return*/, (0, node_fetch_1.default)(url, options)
168
168
  .then(function (response) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
169
169
  var body, deprecation, depHash, stack, log, errorMessages, errorMessage, headers, code, statusText, retryAfter;
170
170
  return tslib_1.__generator(this, function (_a) {
@@ -189,7 +189,7 @@ var HttpClient = /** @class */ (function () {
189
189
  this.LOGGED_DEPRECATIONS[depHash] = Date.now();
190
190
  if (context_1.Context.LOG_FILE) {
191
191
  stack = new Error().stack;
192
- log = "API Deprecation Notice " + new Date().toLocaleString() + " : " + JSON.stringify(deprecation) + "\n Stack Trace: " + stack + "\n";
192
+ log = "API Deprecation Notice ".concat(new Date().toLocaleString(), " : ").concat(JSON.stringify(deprecation), "\n Stack Trace: ").concat(stack, "\n");
193
193
  fs_1.default.writeFileSync(context_1.Context.LOG_FILE, log, {
194
194
  flag: 'a',
195
195
  encoding: 'utf-8',
@@ -211,10 +211,10 @@ var HttpClient = /** @class */ (function () {
211
211
  errorMessages.push(JSON.stringify(body.errors, null, 2));
212
212
  }
213
213
  if (response.headers && response.headers.get('x-request-id')) {
214
- errorMessages.push("If you report this error, please include this id: " + response.headers.get('x-request-id'));
214
+ errorMessages.push("If you report this error, please include this id: ".concat(response.headers.get('x-request-id')));
215
215
  }
216
216
  errorMessage = errorMessages.length
217
- ? ":\n" + errorMessages.join('\n')
217
+ ? ":\n".concat(errorMessages.join('\n'))
218
218
  : '';
219
219
  headers = response.headers.raw();
220
220
  code = response.status;
@@ -223,7 +223,7 @@ var HttpClient = /** @class */ (function () {
223
223
  case response.status === network_1.StatusCode.TooManyRequests: {
224
224
  retryAfter = response.headers.get('Retry-After');
225
225
  throw new ShopifyErrors.HttpThrottlingError({
226
- message: "Shopify is throttling requests" + errorMessage,
226
+ message: "Shopify is throttling requests".concat(errorMessage),
227
227
  code: code,
228
228
  statusText: statusText,
229
229
  body: body,
@@ -233,7 +233,7 @@ var HttpClient = /** @class */ (function () {
233
233
  }
234
234
  case response.status >= network_1.StatusCode.InternalServerError:
235
235
  throw new ShopifyErrors.HttpInternalError({
236
- message: "Shopify internal error" + errorMessage,
236
+ message: "Shopify internal error".concat(errorMessage),
237
237
  code: code,
238
238
  statusText: statusText,
239
239
  body: body,
@@ -241,7 +241,7 @@ var HttpClient = /** @class */ (function () {
241
241
  });
242
242
  default:
243
243
  throw new ShopifyErrors.HttpResponseError({
244
- message: "Received an error response (" + response.status + " " + response.statusText + ") from Shopify" + errorMessage,
244
+ message: "Received an error response (".concat(response.status, " ").concat(response.statusText, ") from Shopify").concat(errorMessage),
245
245
  code: code,
246
246
  statusText: statusText,
247
247
  body: body,
@@ -258,7 +258,7 @@ var HttpClient = /** @class */ (function () {
258
258
  throw error;
259
259
  }
260
260
  else {
261
- throw new ShopifyErrors.HttpRequestError("Failed to make Shopify HTTP request: " + error);
261
+ throw new ShopifyErrors.HttpRequestError("Failed to make Shopify HTTP request: ".concat(error));
262
262
  }
263
263
  })];
264
264
  });
@@ -34,7 +34,9 @@ var RestClient = /** @class */ (function (_super) {
34
34
  link = ret.headers.get('link');
35
35
  if (link !== undefined) {
36
36
  pageInfo = {
37
- limit: ((_a = params.query) === null || _a === void 0 ? void 0 : _a.limit) ? (_b = params.query) === null || _b === void 0 ? void 0 : _b.limit.toString() : RestClient.DEFAULT_LIMIT,
37
+ limit: ((_a = params.query) === null || _a === void 0 ? void 0 : _a.limit)
38
+ ? (_b = params.query) === null || _b === void 0 ? void 0 : _b.limit.toString()
39
+ : RestClient.DEFAULT_LIMIT,
38
40
  };
39
41
  if (link) {
40
42
  links = link.split(', ');
@@ -84,10 +86,10 @@ var RestClient = /** @class */ (function (_super) {
84
86
  RestClient.prototype.getRequestPath = function (path) {
85
87
  var cleanPath = _super.prototype.getRequestPath.call(this, path);
86
88
  if (cleanPath.startsWith('/admin')) {
87
- return cleanPath.replace(/\.json$/, '') + ".json";
89
+ return "".concat(cleanPath.replace(/\.json$/, ''), ".json");
88
90
  }
89
91
  else {
90
- return "/admin/api/" + context_1.Context.API_VERSION + cleanPath.replace(/\.json$/, '') + ".json";
92
+ return "/admin/api/".concat(context_1.Context.API_VERSION).concat(cleanPath.replace(/\.json$/, ''), ".json");
91
93
  }
92
94
  };
93
95
  RestClient.prototype.buildRequestParams = function (newPageUrl) {
package/dist/context.d.ts CHANGED
@@ -2,6 +2,7 @@ import { SessionStorage } from './auth/session/session_storage';
2
2
  import { ContextParams } from './base-types';
3
3
  import { AuthScopes } from './auth/scopes';
4
4
  interface ContextInterface extends ContextParams {
5
+ HOST_SCHEME: string;
5
6
  SESSION_STORAGE: SessionStorage;
6
7
  SCOPES: AuthScopes;
7
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAa,aAAa,EAAC,MAAM,cAAc,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,UAAU,gBAAiB,SAAQ,aAAa;IAC9C,eAAe,EAAE,cAAc,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAExC;;OAEG;IACH,oBAAoB,IAAI,IAAI,GAAG,KAAK,CAAC;IAErC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;CAClD;AAED,QAAA,MAAM,OAAO,EAAE,gBAgFd,CAAC;AAEF,OAAO,EAAC,OAAO,EAAE,gBAAgB,EAAC,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAa,aAAa,EAAC,MAAM,cAAc,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,UAAU,gBAAiB,SAAQ,aAAa;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,cAAc,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAExC;;OAEG;IACH,oBAAoB,IAAI,IAAI,GAAG,KAAK,CAAC;IAErC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;CAClD;AAOD,QAAA,MAAM,OAAO,EAAE,gBAqFd,CAAC;AAEF,OAAO,EAAC,OAAO,EAAE,gBAAgB,EAAC,CAAC"}
package/dist/context.js CHANGED
@@ -2,19 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Context = void 0;
4
4
  var tslib_1 = require("tslib");
5
+ var path_1 = tslib_1.__importDefault(require("path"));
5
6
  var ShopifyErrors = tslib_1.__importStar(require("./error"));
6
- var memory_1 = require("./auth/session/storage/memory");
7
+ var sqlite_1 = require("./auth/session/storage/sqlite");
7
8
  var base_types_1 = require("./base-types");
8
9
  var scopes_1 = require("./auth/scopes");
10
+ var dbFile = path_1.default.join(require.main ? path_1.default.dirname(require.main.filename) : process.cwd(), 'database.sqlite');
9
11
  var Context = {
10
12
  API_KEY: '',
11
13
  API_SECRET_KEY: '',
12
14
  SCOPES: new scopes_1.AuthScopes([]),
13
15
  HOST_NAME: '',
16
+ HOST_SCHEME: 'https',
14
17
  API_VERSION: base_types_1.ApiVersion.Unstable,
15
18
  IS_EMBEDDED_APP: true,
16
19
  IS_PRIVATE_APP: false,
17
- SESSION_STORAGE: new memory_1.MemorySessionStorage(),
20
+ SESSION_STORAGE: new sqlite_1.SQLiteSessionStorage(dbFile),
18
21
  initialize: function (params) {
19
22
  var scopes;
20
23
  if (params.SCOPES instanceof scopes_1.AuthScopes) {
@@ -38,7 +41,7 @@ var Context = {
38
41
  missing.push('HOST_NAME');
39
42
  }
40
43
  if (missing.length) {
41
- throw new ShopifyErrors.ShopifyError("Cannot initialize Shopify API Library. Missing values for: " + missing.join(', '));
44
+ throw new ShopifyErrors.ShopifyError("Cannot initialize Shopify API Library. Missing values for: ".concat(missing.join(', ')));
42
45
  }
43
46
  this.API_KEY = params.API_KEY;
44
47
  this.API_SECRET_KEY = params.API_SECRET_KEY;
@@ -47,6 +50,9 @@ var Context = {
47
50
  this.API_VERSION = params.API_VERSION;
48
51
  this.IS_EMBEDDED_APP = params.IS_EMBEDDED_APP;
49
52
  this.IS_PRIVATE_APP = params.IS_PRIVATE_APP;
53
+ if (params.HOST_SCHEME) {
54
+ this.HOST_SCHEME = params.HOST_SCHEME;
55
+ }
50
56
  if (params.SESSION_STORAGE) {
51
57
  this.SESSION_STORAGE = params.SESSION_STORAGE;
52
58
  }