@shopify/shopify-app-remix 1.0.0-rc.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 (161) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +373 -0
  3. package/build/cjs/adapters/node/index.js +13 -0
  4. package/build/cjs/auth/admin/authenticate.js +599 -0
  5. package/build/cjs/auth/admin/graphql-client.js +57 -0
  6. package/build/cjs/auth/admin/rest-client.js +124 -0
  7. package/build/cjs/auth/const.js +17 -0
  8. package/build/cjs/auth/helpers/add-response-headers.js +69 -0
  9. package/build/cjs/auth/helpers/begin-auth.js +18 -0
  10. package/build/cjs/auth/helpers/get-session-token-header.js +10 -0
  11. package/build/cjs/auth/helpers/handle-client-error.js +37 -0
  12. package/build/cjs/auth/helpers/redirect-to-auth-page.js +22 -0
  13. package/build/cjs/auth/helpers/redirect-with-app-bridge-headers.js +31 -0
  14. package/build/cjs/auth/helpers/redirect-with-exitiframe.js +23 -0
  15. package/build/cjs/auth/helpers/reject-bot-request.js +23 -0
  16. package/build/cjs/auth/helpers/validate-session-token.js +25 -0
  17. package/build/cjs/auth/login/login.js +54 -0
  18. package/build/cjs/auth/public/authenticate.js +32 -0
  19. package/build/cjs/auth/webhooks/authenticate.js +68 -0
  20. package/build/cjs/auth/webhooks/register.js +40 -0
  21. package/build/cjs/billing/cancel.js +40 -0
  22. package/build/cjs/billing/request.js +83 -0
  23. package/build/cjs/billing/require.js +47 -0
  24. package/build/cjs/index.js +140 -0
  25. package/build/cjs/override-logger.js +55 -0
  26. package/build/cjs/types.js +25 -0
  27. package/build/cjs/version.js +7 -0
  28. package/build/ts/adapters/node/index.d.ts +2 -0
  29. package/build/ts/adapters/node/index.d.ts.map +1 -0
  30. package/build/ts/adapters/node/index.js +10 -0
  31. package/build/ts/adapters/node/index.js.map +1 -0
  32. package/build/ts/auth/admin/authenticate.d.ts +32 -0
  33. package/build/ts/auth/admin/authenticate.d.ts.map +1 -0
  34. package/build/ts/auth/admin/authenticate.js +571 -0
  35. package/build/ts/auth/admin/authenticate.js.map +1 -0
  36. package/build/ts/auth/admin/graphql-client.d.ts +22 -0
  37. package/build/ts/auth/admin/graphql-client.d.ts.map +1 -0
  38. package/build/ts/auth/admin/graphql-client.js +53 -0
  39. package/build/ts/auth/admin/graphql-client.js.map +1 -0
  40. package/build/ts/auth/admin/rest-client.d.ts +34 -0
  41. package/build/ts/auth/admin/rest-client.d.ts.map +1 -0
  42. package/build/ts/auth/admin/rest-client.js +134 -0
  43. package/build/ts/auth/admin/rest-client.js.map +1 -0
  44. package/build/ts/auth/admin/types.d.ts +100 -0
  45. package/build/ts/auth/admin/types.d.ts.map +1 -0
  46. package/build/ts/auth/admin/types.js +3 -0
  47. package/build/ts/auth/admin/types.js.map +1 -0
  48. package/build/ts/auth/const.d.ts +9 -0
  49. package/build/ts/auth/const.d.ts.map +1 -0
  50. package/build/ts/auth/const.js +12 -0
  51. package/build/ts/auth/const.js.map +1 -0
  52. package/build/ts/auth/helpers/add-response-headers.d.ts +5 -0
  53. package/build/ts/auth/helpers/add-response-headers.d.ts.map +1 -0
  54. package/build/ts/auth/helpers/add-response-headers.js +60 -0
  55. package/build/ts/auth/helpers/add-response-headers.js.map +1 -0
  56. package/build/ts/auth/helpers/begin-auth.d.ts +3 -0
  57. package/build/ts/auth/helpers/begin-auth.d.ts.map +1 -0
  58. package/build/ts/auth/helpers/begin-auth.js +24 -0
  59. package/build/ts/auth/helpers/begin-auth.js.map +1 -0
  60. package/build/ts/auth/helpers/get-session-token-header.d.ts +2 -0
  61. package/build/ts/auth/helpers/get-session-token-header.d.ts.map +1 -0
  62. package/build/ts/auth/helpers/get-session-token-header.js +9 -0
  63. package/build/ts/auth/helpers/get-session-token-header.js.map +1 -0
  64. package/build/ts/auth/helpers/handle-client-error.d.ts +11 -0
  65. package/build/ts/auth/helpers/handle-client-error.d.ts.map +1 -0
  66. package/build/ts/auth/helpers/handle-client-error.js +40 -0
  67. package/build/ts/auth/helpers/handle-client-error.js.map +1 -0
  68. package/build/ts/auth/helpers/index.d.ts +8 -0
  69. package/build/ts/auth/helpers/index.d.ts.map +1 -0
  70. package/build/ts/auth/helpers/index.js +18 -0
  71. package/build/ts/auth/helpers/index.js.map +1 -0
  72. package/build/ts/auth/helpers/redirect-to-auth-page.d.ts +3 -0
  73. package/build/ts/auth/helpers/redirect-to-auth-page.d.ts.map +1 -0
  74. package/build/ts/auth/helpers/redirect-to-auth-page.js +33 -0
  75. package/build/ts/auth/helpers/redirect-to-auth-page.js.map +1 -0
  76. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts +4 -0
  77. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts.map +1 -0
  78. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.js +24 -0
  79. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.js.map +1 -0
  80. package/build/ts/auth/helpers/redirect-with-exitiframe.d.ts +3 -0
  81. package/build/ts/auth/helpers/redirect-with-exitiframe.d.ts.map +1 -0
  82. package/build/ts/auth/helpers/redirect-with-exitiframe.js +18 -0
  83. package/build/ts/auth/helpers/redirect-with-exitiframe.js.map +1 -0
  84. package/build/ts/auth/helpers/reject-bot-request.d.ts +3 -0
  85. package/build/ts/auth/helpers/reject-bot-request.d.ts.map +1 -0
  86. package/build/ts/auth/helpers/reject-bot-request.js +14 -0
  87. package/build/ts/auth/helpers/reject-bot-request.js.map +1 -0
  88. package/build/ts/auth/helpers/validate-session-token.d.ts +4 -0
  89. package/build/ts/auth/helpers/validate-session-token.d.ts.map +1 -0
  90. package/build/ts/auth/helpers/validate-session-token.js +36 -0
  91. package/build/ts/auth/helpers/validate-session-token.js.map +1 -0
  92. package/build/ts/auth/login/login.d.ts +3 -0
  93. package/build/ts/auth/login/login.d.ts.map +1 -0
  94. package/build/ts/auth/login/login.js +56 -0
  95. package/build/ts/auth/login/login.js.map +1 -0
  96. package/build/ts/auth/public/authenticate.d.ts +4 -0
  97. package/build/ts/auth/public/authenticate.d.ts.map +1 -0
  98. package/build/ts/auth/public/authenticate.js +35 -0
  99. package/build/ts/auth/public/authenticate.js.map +1 -0
  100. package/build/ts/auth/public/types.d.ts +27 -0
  101. package/build/ts/auth/public/types.d.ts.map +1 -0
  102. package/build/ts/auth/public/types.js +3 -0
  103. package/build/ts/auth/public/types.js.map +1 -0
  104. package/build/ts/auth/webhooks/authenticate.d.ts +5 -0
  105. package/build/ts/auth/webhooks/authenticate.d.ts.map +1 -0
  106. package/build/ts/auth/webhooks/authenticate.js +71 -0
  107. package/build/ts/auth/webhooks/authenticate.js.map +1 -0
  108. package/build/ts/auth/webhooks/index.d.ts +2 -0
  109. package/build/ts/auth/webhooks/index.d.ts.map +1 -0
  110. package/build/ts/auth/webhooks/index.js +6 -0
  111. package/build/ts/auth/webhooks/index.js.map +1 -0
  112. package/build/ts/auth/webhooks/register.d.ts +4 -0
  113. package/build/ts/auth/webhooks/register.d.ts.map +1 -0
  114. package/build/ts/auth/webhooks/register.js +39 -0
  115. package/build/ts/auth/webhooks/register.js.map +1 -0
  116. package/build/ts/auth/webhooks/types.d.ts +18 -0
  117. package/build/ts/auth/webhooks/types.d.ts.map +1 -0
  118. package/build/ts/auth/webhooks/types.js +3 -0
  119. package/build/ts/auth/webhooks/types.js.map +1 -0
  120. package/build/ts/billing/cancel.d.ts +5 -0
  121. package/build/ts/billing/cancel.d.ts.map +1 -0
  122. package/build/ts/billing/cancel.js +43 -0
  123. package/build/ts/billing/cancel.js.map +1 -0
  124. package/build/ts/billing/index.d.ts +4 -0
  125. package/build/ts/billing/index.d.ts.map +1 -0
  126. package/build/ts/billing/index.js +10 -0
  127. package/build/ts/billing/index.js.map +1 -0
  128. package/build/ts/billing/request.d.ts +6 -0
  129. package/build/ts/billing/request.d.ts.map +1 -0
  130. package/build/ts/billing/request.js +84 -0
  131. package/build/ts/billing/request.js.map +1 -0
  132. package/build/ts/billing/require.d.ts +6 -0
  133. package/build/ts/billing/require.d.ts.map +1 -0
  134. package/build/ts/billing/require.js +55 -0
  135. package/build/ts/billing/require.js.map +1 -0
  136. package/build/ts/billing/types.d.ts +228 -0
  137. package/build/ts/billing/types.d.ts.map +1 -0
  138. package/build/ts/billing/types.js +3 -0
  139. package/build/ts/billing/types.js.map +1 -0
  140. package/build/ts/config-types.d.ts +325 -0
  141. package/build/ts/config-types.d.ts.map +1 -0
  142. package/build/ts/config-types.js +3 -0
  143. package/build/ts/config-types.js.map +1 -0
  144. package/build/ts/index.d.ts +29 -0
  145. package/build/ts/index.d.ts.map +1 -0
  146. package/build/ts/index.js +108 -0
  147. package/build/ts/index.js.map +1 -0
  148. package/build/ts/override-logger.d.ts +3 -0
  149. package/build/ts/override-logger.d.ts.map +1 -0
  150. package/build/ts/override-logger.js +40 -0
  151. package/build/ts/override-logger.js.map +1 -0
  152. package/build/ts/types.d.ts +353 -0
  153. package/build/ts/types.d.ts.map +1 -0
  154. package/build/ts/types.js +17 -0
  155. package/build/ts/types.js.map +1 -0
  156. package/build/ts/version.d.ts +2 -0
  157. package/build/ts/version.d.ts.map +1 -0
  158. package/build/ts/version.js +5 -0
  159. package/build/ts/version.js.map +1 -0
  160. package/build/tsconfig.tsbuildinfo +1 -0
  161. package/package.json +65 -0
@@ -0,0 +1,571 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthStrategy = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var server_runtime_1 = require("@remix-run/server-runtime");
6
+ var shopify_api_1 = require("@shopify/shopify-api");
7
+ var billing_1 = require("../../billing");
8
+ var add_response_headers_1 = require("../helpers/add-response-headers");
9
+ var helpers_1 = require("../helpers");
10
+ var const_1 = require("../const");
11
+ var graphql_client_1 = require("./graphql-client");
12
+ var rest_client_1 = require("./rest-client");
13
+ var SESSION_TOKEN_PARAM = 'id_token';
14
+ var AuthStrategy = /** @class */ (function () {
15
+ function AuthStrategy(_a) {
16
+ var api = _a.api, config = _a.config, logger = _a.logger;
17
+ this.api = api;
18
+ this.config = config;
19
+ this.logger = logger;
20
+ }
21
+ AuthStrategy.prototype.authenticateAdmin = function (request) {
22
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
23
+ var _a, api, logger, config, sessionContext, errorOrResponse_1, context;
24
+ return tslib_1.__generator(this, function (_b) {
25
+ switch (_b.label) {
26
+ case 0:
27
+ _a = this, api = _a.api, logger = _a.logger, config = _a.config;
28
+ (0, helpers_1.rejectBotRequest)({ api: api, logger: logger, config: config }, request);
29
+ this.respondToOptionsRequest(request);
30
+ _b.label = 1;
31
+ case 1:
32
+ _b.trys.push([1, 3, , 4]);
33
+ return [4 /*yield*/, this.authenticateAndGetSessionContext(request)];
34
+ case 2:
35
+ sessionContext = _b.sent();
36
+ return [3 /*break*/, 4];
37
+ case 3:
38
+ errorOrResponse_1 = _b.sent();
39
+ if (errorOrResponse_1 instanceof Response) {
40
+ this.ensureResponseHeaders(request, errorOrResponse_1);
41
+ }
42
+ throw errorOrResponse_1;
43
+ case 4:
44
+ context = {
45
+ admin: this.createAdminApiContext(request, sessionContext.session),
46
+ billing: this.createBillingContext(request, sessionContext.session),
47
+ session: sessionContext.session,
48
+ };
49
+ if (config.isEmbeddedApp) {
50
+ return [2 /*return*/, tslib_1.__assign(tslib_1.__assign({}, context), { sessionToken: sessionContext.token })];
51
+ }
52
+ else {
53
+ return [2 /*return*/, context];
54
+ }
55
+ return [2 /*return*/];
56
+ }
57
+ });
58
+ });
59
+ };
60
+ AuthStrategy.prototype.authenticateAndGetSessionContext = function (request) {
61
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
62
+ var _a, api, logger, config, url, isPatchSessionToken, isExitIframe, isAuthRequest, isAuthCallbackRequest, sessionTokenHeader, destination, sessionToken;
63
+ return tslib_1.__generator(this, function (_b) {
64
+ switch (_b.label) {
65
+ case 0:
66
+ _a = this, api = _a.api, logger = _a.logger, config = _a.config;
67
+ url = new URL(request.url);
68
+ isPatchSessionToken = url.pathname === config.auth.patchSessionTokenPath;
69
+ isExitIframe = url.pathname === config.auth.exitIframePath;
70
+ isAuthRequest = url.pathname === config.auth.path;
71
+ isAuthCallbackRequest = url.pathname === config.auth.callbackPath;
72
+ sessionTokenHeader = (0, helpers_1.getSessionTokenHeader)(request);
73
+ logger.info('Authenticating admin request');
74
+ if (!isPatchSessionToken) return [3 /*break*/, 1];
75
+ logger.debug('Rendering bounce page');
76
+ throw this.renderAppBridge();
77
+ case 1:
78
+ if (!isExitIframe) return [3 /*break*/, 2];
79
+ destination = url.searchParams.get('exitIframe');
80
+ logger.debug('Rendering exit iframe page', { destination: destination });
81
+ throw this.renderAppBridge(destination);
82
+ case 2:
83
+ if (!isAuthCallbackRequest) return [3 /*break*/, 4];
84
+ return [4 /*yield*/, this.handleAuthCallbackRequest(request)];
85
+ case 3: throw _b.sent();
86
+ case 4:
87
+ if (!isAuthRequest) return [3 /*break*/, 6];
88
+ return [4 /*yield*/, this.handleAuthBeginRequest(request)];
89
+ case 5: throw _b.sent();
90
+ case 6:
91
+ if (!sessionTokenHeader) return [3 /*break*/, 8];
92
+ return [4 /*yield*/, (0, helpers_1.validateSessionToken)({ api: api, logger: logger, config: config }, sessionTokenHeader)];
93
+ case 7:
94
+ sessionToken = _b.sent();
95
+ return [2 /*return*/, this.validateAuthenticatedSession(request, sessionToken)];
96
+ case 8: return [4 /*yield*/, this.validateUrlParams(request)];
97
+ case 9:
98
+ _b.sent();
99
+ return [4 /*yield*/, this.ensureInstalledOnShop(request)];
100
+ case 10:
101
+ _b.sent();
102
+ return [4 /*yield*/, this.ensureAppIsEmbeddedIfRequired(request)];
103
+ case 11:
104
+ _b.sent();
105
+ return [4 /*yield*/, this.ensureSessionTokenSearchParamIfRequired(request)];
106
+ case 12:
107
+ _b.sent();
108
+ return [2 /*return*/, this.ensureSessionExists(request)];
109
+ }
110
+ });
111
+ });
112
+ };
113
+ AuthStrategy.prototype.handleAuthBeginRequest = function (request) {
114
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
115
+ var _a, api, config, logger, shop;
116
+ return tslib_1.__generator(this, function (_b) {
117
+ switch (_b.label) {
118
+ case 0:
119
+ _a = this, api = _a.api, config = _a.config, logger = _a.logger;
120
+ logger.info('Handling OAuth begin request');
121
+ shop = this.ensureValidShopParam(request);
122
+ logger.debug('OAuth request contained valid shop', { shop: shop });
123
+ if (!(config.isEmbeddedApp &&
124
+ request.headers.get('Sec-Fetch-Dest') === 'iframe')) return [3 /*break*/, 1];
125
+ logger.debug('Auth request in iframe detected, exiting iframe', { shop: shop });
126
+ throw (0, helpers_1.redirectWithExitIframe)({ api: api, config: config, logger: logger }, request, shop);
127
+ case 1: return [4 /*yield*/, (0, helpers_1.beginAuth)({ api: api, config: config, logger: logger }, request, false, shop)];
128
+ case 2: throw _b.sent();
129
+ }
130
+ });
131
+ });
132
+ };
133
+ AuthStrategy.prototype.handleAuthCallbackRequest = function (request) {
134
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
135
+ var _a, api, config, logger, shop, _b, session, responseHeaders, error_1;
136
+ return tslib_1.__generator(this, function (_c) {
137
+ switch (_c.label) {
138
+ case 0:
139
+ _a = this, api = _a.api, config = _a.config, logger = _a.logger;
140
+ logger.info('Handling OAuth callback request');
141
+ shop = this.ensureValidShopParam(request);
142
+ _c.label = 1;
143
+ case 1:
144
+ _c.trys.push([1, 9, , 13]);
145
+ return [4 /*yield*/, api.auth.callback({
146
+ rawRequest: request,
147
+ })];
148
+ case 2:
149
+ _b = _c.sent(), session = _b.session, responseHeaders = _b.headers;
150
+ return [4 /*yield*/, config.sessionStorage.storeSession(session)];
151
+ case 3:
152
+ _c.sent();
153
+ if (!(config.useOnlineTokens && !session.isOnline)) return [3 /*break*/, 5];
154
+ logger.info('Requesting online access token for offline session');
155
+ return [4 /*yield*/, (0, helpers_1.beginAuth)({ api: api, config: config, logger: logger }, request, true, shop)];
156
+ case 4:
157
+ _c.sent();
158
+ _c.label = 5;
159
+ case 5:
160
+ if (!config.hooks.afterAuth) return [3 /*break*/, 7];
161
+ logger.info('Running afterAuth hook');
162
+ return [4 /*yield*/, config.hooks.afterAuth({
163
+ session: session,
164
+ admin: this.createAdminApiContext(request, session),
165
+ })];
166
+ case 6:
167
+ _c.sent();
168
+ _c.label = 7;
169
+ case 7: return [4 /*yield*/, this.redirectToShopifyOrAppRoot(request, responseHeaders)];
170
+ case 8: throw _c.sent();
171
+ case 9:
172
+ error_1 = _c.sent();
173
+ if (error_1 instanceof Response) {
174
+ throw error_1;
175
+ }
176
+ logger.error('Error during OAuth callback', { error: error_1.message });
177
+ if (!(error_1 instanceof shopify_api_1.CookieNotFound)) return [3 /*break*/, 11];
178
+ return [4 /*yield*/, this.handleAuthBeginRequest(request)];
179
+ case 10: throw _c.sent();
180
+ case 11:
181
+ if (error_1 instanceof shopify_api_1.InvalidHmacError ||
182
+ error_1 instanceof shopify_api_1.InvalidOAuthError) {
183
+ throw new Response(undefined, {
184
+ status: 400,
185
+ statusText: 'Invalid OAuth Request',
186
+ });
187
+ }
188
+ else {
189
+ throw new Response(undefined, {
190
+ status: 500,
191
+ statusText: 'Internal Server Error',
192
+ });
193
+ }
194
+ _c.label = 12;
195
+ case 12: return [3 /*break*/, 13];
196
+ case 13: return [2 /*return*/];
197
+ }
198
+ });
199
+ });
200
+ };
201
+ AuthStrategy.prototype.validateUrlParams = function (request) {
202
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
203
+ var _a, api, config, logger, url, shop, host;
204
+ return tslib_1.__generator(this, function (_b) {
205
+ _a = this, api = _a.api, config = _a.config, logger = _a.logger;
206
+ url = new URL(request.url);
207
+ shop = api.utils.sanitizeShop(url.searchParams.get('shop'));
208
+ if (!shop) {
209
+ logger.debug('Missing or invalid shop, redirecting to login path', {
210
+ shop: shop,
211
+ });
212
+ throw (0, server_runtime_1.redirect)(config.auth.loginPath);
213
+ }
214
+ if (this.config.isEmbeddedApp) {
215
+ host = api.utils.sanitizeHost(url.searchParams.get('host'));
216
+ if (!host) {
217
+ logger.debug('Invalid host, redirecting to login path', {
218
+ host: url.searchParams.get('host'),
219
+ });
220
+ throw (0, server_runtime_1.redirect)(config.auth.loginPath);
221
+ }
222
+ }
223
+ return [2 /*return*/];
224
+ });
225
+ });
226
+ };
227
+ AuthStrategy.prototype.ensureInstalledOnShop = function (request) {
228
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
229
+ var _a, api, config, logger, url, shop, isEmbedded, offlineSession, error_2, message, context;
230
+ return tslib_1.__generator(this, function (_b) {
231
+ switch (_b.label) {
232
+ case 0:
233
+ _a = this, api = _a.api, config = _a.config, logger = _a.logger;
234
+ url = new URL(request.url);
235
+ shop = url.searchParams.get('shop');
236
+ isEmbedded = url.searchParams.get('embedded') === '1';
237
+ // Ensure app is installed
238
+ logger.debug('Ensuring app is installed on shop', { shop: shop });
239
+ return [4 /*yield*/, config.sessionStorage.loadSession(api.session.getOfflineId(shop))];
240
+ case 1:
241
+ offlineSession = _b.sent();
242
+ if (!!offlineSession) return [3 /*break*/, 4];
243
+ logger.info("Shop hasn't installed app yet, redirecting to OAuth", {
244
+ shop: shop,
245
+ });
246
+ if (!isEmbedded) return [3 /*break*/, 2];
247
+ (0, helpers_1.redirectWithExitIframe)({ api: api, config: config, logger: logger }, request, shop);
248
+ return [3 /*break*/, 4];
249
+ case 2: return [4 /*yield*/, (0, helpers_1.beginAuth)({ api: api, config: config, logger: logger }, request, false, shop)];
250
+ case 3: throw _b.sent();
251
+ case 4:
252
+ if (!(config.isEmbeddedApp && !isEmbedded)) return [3 /*break*/, 13];
253
+ _b.label = 5;
254
+ case 5:
255
+ _b.trys.push([5, 7, , 13]);
256
+ logger.debug('Ensuring offline session is valid before embedding', {
257
+ shop: shop,
258
+ });
259
+ return [4 /*yield*/, this.testSession(offlineSession)];
260
+ case 6:
261
+ _b.sent();
262
+ logger.debug('Offline session is still valid, embedding app', { shop: shop });
263
+ return [3 /*break*/, 13];
264
+ case 7:
265
+ error_2 = _b.sent();
266
+ if (!(error_2 instanceof shopify_api_1.HttpResponseError)) return [3 /*break*/, 11];
267
+ if (!(error_2.response.code === 401)) return [3 /*break*/, 9];
268
+ logger.info('Shop session is no longer valid, redirecting to OAuth', { shop: shop });
269
+ return [4 /*yield*/, (0, helpers_1.beginAuth)({ api: api, config: config, logger: logger }, request, false, shop)];
270
+ case 8: throw _b.sent();
271
+ case 9:
272
+ message = JSON.stringify(error_2.response.body, null, 2);
273
+ logger.error("Unexpected error during session validation: ".concat(message), { shop: shop });
274
+ throw new Response(undefined, {
275
+ status: error_2.response.code,
276
+ statusText: error_2.response.statusText,
277
+ });
278
+ case 10: return [3 /*break*/, 12];
279
+ case 11:
280
+ if (error_2 instanceof shopify_api_1.GraphqlQueryError) {
281
+ context = { shop: shop };
282
+ if (error_2.response) {
283
+ context.response = JSON.stringify(error_2.response);
284
+ }
285
+ logger.error("Unexpected error during session validation: ".concat(error_2.message), context);
286
+ throw new Response(undefined, {
287
+ status: 500,
288
+ statusText: 'Internal Server Error',
289
+ });
290
+ }
291
+ _b.label = 12;
292
+ case 12: return [3 /*break*/, 13];
293
+ case 13: return [2 /*return*/];
294
+ }
295
+ });
296
+ });
297
+ };
298
+ AuthStrategy.prototype.testSession = function (session) {
299
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
300
+ var api, client;
301
+ return tslib_1.__generator(this, function (_a) {
302
+ switch (_a.label) {
303
+ case 0:
304
+ api = this.api;
305
+ client = new api.clients.Graphql({
306
+ session: session,
307
+ });
308
+ return [4 /*yield*/, client.query({
309
+ data: "#graphql\n query {\n shop {\n name\n }\n }\n ",
310
+ })];
311
+ case 1:
312
+ _a.sent();
313
+ return [2 /*return*/];
314
+ }
315
+ });
316
+ });
317
+ };
318
+ AuthStrategy.prototype.ensureValidShopParam = function (request) {
319
+ var url = new URL(request.url);
320
+ var api = this.api;
321
+ var shop = api.utils.sanitizeShop(url.searchParams.get('shop'));
322
+ if (!shop) {
323
+ throw new Response('Shop param is invalid', {
324
+ status: 400,
325
+ });
326
+ }
327
+ return shop;
328
+ };
329
+ AuthStrategy.prototype.ensureAppIsEmbeddedIfRequired = function (request) {
330
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
331
+ var _a, api, logger, url, shop;
332
+ return tslib_1.__generator(this, function (_b) {
333
+ switch (_b.label) {
334
+ case 0:
335
+ _a = this, api = _a.api, logger = _a.logger;
336
+ url = new URL(request.url);
337
+ shop = url.searchParams.get('shop');
338
+ if (!(api.config.isEmbeddedApp && url.searchParams.get('embedded') !== '1')) return [3 /*break*/, 2];
339
+ logger.debug('App is not embedded, redirecting to Shopify', { shop: shop });
340
+ return [4 /*yield*/, this.redirectToShopifyOrAppRoot(request)];
341
+ case 1:
342
+ _b.sent();
343
+ _b.label = 2;
344
+ case 2: return [2 /*return*/];
345
+ }
346
+ });
347
+ });
348
+ };
349
+ AuthStrategy.prototype.ensureSessionTokenSearchParamIfRequired = function (request) {
350
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
351
+ var _a, api, logger, url, shop, searchParamSessionToken;
352
+ return tslib_1.__generator(this, function (_b) {
353
+ _a = this, api = _a.api, logger = _a.logger;
354
+ url = new URL(request.url);
355
+ shop = url.searchParams.get('shop');
356
+ searchParamSessionToken = url.searchParams.get(SESSION_TOKEN_PARAM);
357
+ if (api.config.isEmbeddedApp && !searchParamSessionToken) {
358
+ logger.debug('Missing session token in search params, going to bounce page', { shop: shop });
359
+ this.redirectToBouncePage(url);
360
+ }
361
+ return [2 /*return*/];
362
+ });
363
+ });
364
+ };
365
+ AuthStrategy.prototype.ensureSessionExists = function (request) {
366
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
367
+ var _a, api, config, logger, url, shop, searchParamSessionToken, sessionToken, sessionId;
368
+ var _b;
369
+ return tslib_1.__generator(this, function (_c) {
370
+ switch (_c.label) {
371
+ case 0:
372
+ _a = this, api = _a.api, config = _a.config, logger = _a.logger;
373
+ url = new URL(request.url);
374
+ shop = url.searchParams.get('shop');
375
+ searchParamSessionToken = url.searchParams.get(SESSION_TOKEN_PARAM);
376
+ if (!api.config.isEmbeddedApp) return [3 /*break*/, 2];
377
+ logger.debug('Session token is present in query params, validating session', { shop: shop });
378
+ return [4 /*yield*/, (0, helpers_1.validateSessionToken)({ api: api, config: config, logger: logger }, searchParamSessionToken)];
379
+ case 1:
380
+ sessionToken = _c.sent();
381
+ return [2 /*return*/, this.validateAuthenticatedSession(request, sessionToken)];
382
+ case 2: return [4 /*yield*/, api.session.getCurrentId({
383
+ isOnline: config.useOnlineTokens,
384
+ rawRequest: request,
385
+ })];
386
+ case 3:
387
+ sessionId = _c.sent();
388
+ if (!!sessionId) return [3 /*break*/, 5];
389
+ logger.debug('Session id not found in cookies, redirecting to OAuth', {
390
+ shop: shop,
391
+ });
392
+ return [4 /*yield*/, (0, helpers_1.beginAuth)({ api: api, config: config, logger: logger }, request, false, shop)];
393
+ case 4: throw _c.sent();
394
+ case 5:
395
+ _b = {};
396
+ return [4 /*yield*/, this.loadSession(request, shop, sessionId)];
397
+ case 6: return [2 /*return*/, (_b.session = _c.sent(), _b)];
398
+ }
399
+ });
400
+ });
401
+ };
402
+ AuthStrategy.prototype.validateAuthenticatedSession = function (request, payload) {
403
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
404
+ var _a, config, logger, api, dest, shop, sessionId, session;
405
+ return tslib_1.__generator(this, function (_b) {
406
+ switch (_b.label) {
407
+ case 0:
408
+ _a = this, config = _a.config, logger = _a.logger, api = _a.api;
409
+ dest = new URL(payload.dest);
410
+ shop = dest.hostname;
411
+ sessionId = config.useOnlineTokens
412
+ ? api.session.getJwtSessionId(shop, payload.sub)
413
+ : api.session.getOfflineId(shop);
414
+ return [4 /*yield*/, this.loadSession(request, shop, sessionId)];
415
+ case 1:
416
+ session = _b.sent();
417
+ logger.debug('Found session, request is valid', { shop: shop });
418
+ return [2 /*return*/, { session: session, token: payload }];
419
+ }
420
+ });
421
+ });
422
+ };
423
+ AuthStrategy.prototype.loadSession = function (request, shop, sessionId) {
424
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
425
+ var _a, api, config, logger, session;
426
+ return tslib_1.__generator(this, function (_b) {
427
+ switch (_b.label) {
428
+ case 0:
429
+ _a = this, api = _a.api, config = _a.config, logger = _a.logger;
430
+ logger.debug('Loading session from storage', { sessionId: sessionId });
431
+ return [4 /*yield*/, config.sessionStorage.loadSession(sessionId)];
432
+ case 1:
433
+ session = _b.sent();
434
+ if (!!session) return [3 /*break*/, 3];
435
+ logger.debug('No session found, redirecting to OAuth', { shop: shop });
436
+ return [4 /*yield*/, (0, helpers_1.redirectToAuthPage)({ api: api, config: config, logger: logger }, request, shop)];
437
+ case 2:
438
+ _b.sent();
439
+ return [3 /*break*/, 5];
440
+ case 3:
441
+ if (!!session.isActive(config.scopes)) return [3 /*break*/, 5];
442
+ logger.debug('Found a session, but it has expired, redirecting to OAuth', { shop: shop });
443
+ return [4 /*yield*/, (0, helpers_1.redirectToAuthPage)({ api: api, config: config, logger: logger }, request, shop)];
444
+ case 4:
445
+ _b.sent();
446
+ _b.label = 5;
447
+ case 5: return [2 /*return*/, session];
448
+ }
449
+ });
450
+ });
451
+ };
452
+ AuthStrategy.prototype.redirectToShopifyOrAppRoot = function (request, responseHeaders) {
453
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
454
+ var api, url, host, shop, redirectUrl, _a;
455
+ return tslib_1.__generator(this, function (_b) {
456
+ switch (_b.label) {
457
+ case 0:
458
+ api = this.api;
459
+ url = new URL(request.url);
460
+ host = api.utils.sanitizeHost(url.searchParams.get('host'));
461
+ shop = api.utils.sanitizeShop(url.searchParams.get('shop'));
462
+ if (!api.config.isEmbeddedApp) return [3 /*break*/, 2];
463
+ return [4 /*yield*/, api.auth.getEmbeddedAppUrl({ rawRequest: request })];
464
+ case 1:
465
+ _a = _b.sent();
466
+ return [3 /*break*/, 3];
467
+ case 2:
468
+ _a = "/?shop=".concat(shop, "&host=").concat(encodeURIComponent(host));
469
+ _b.label = 3;
470
+ case 3:
471
+ redirectUrl = _a;
472
+ throw (0, server_runtime_1.redirect)(redirectUrl, { headers: responseHeaders });
473
+ }
474
+ });
475
+ });
476
+ };
477
+ AuthStrategy.prototype.redirectToBouncePage = function (url) {
478
+ var _a = this, api = _a.api, config = _a.config;
479
+ // eslint-disable-next-line no-warning-comments
480
+ // TODO this is to work around a remix bug
481
+ // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650
482
+ url.protocol = "".concat(api.config.hostScheme, ":");
483
+ var params = new URLSearchParams(url.search);
484
+ params.set('shopify-reload', url.href);
485
+ // eslint-disable-next-line no-warning-comments
486
+ // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue)
487
+ // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650
488
+ throw (0, server_runtime_1.redirect)("".concat(config.auth.patchSessionTokenPath, "?").concat(params.toString()));
489
+ };
490
+ AuthStrategy.prototype.renderAppBridge = function (redirectTo) {
491
+ var config = this.config;
492
+ var redirectToScript = '';
493
+ if (redirectTo) {
494
+ var redirectUrl = decodeURIComponent(redirectTo.startsWith('/')
495
+ ? "".concat(config.appUrl).concat(redirectTo)
496
+ : redirectTo);
497
+ redirectToScript = "<script>window.open(\"".concat(redirectUrl, "\", \"_top\")</script>");
498
+ }
499
+ throw new Response("\n <script data-api-key=\"".concat(config.apiKey, "\" src=\"").concat(const_1.APP_BRIDGE_NEXT_URL, "\"></script>\n ").concat(redirectToScript, "\n "), { headers: { 'content-type': 'text/html;charset=utf-8' } });
500
+ };
501
+ AuthStrategy.prototype.respondToOptionsRequest = function (request) {
502
+ if (request.method === 'OPTIONS') {
503
+ throw new Response(null, {
504
+ status: 204,
505
+ headers: {
506
+ 'Access-Control-Max-Age': '7200',
507
+ },
508
+ });
509
+ }
510
+ };
511
+ AuthStrategy.prototype.ensureResponseHeaders = function (request, response) {
512
+ var config = this.config;
513
+ var shop = new URL(request.url).searchParams.get('shop');
514
+ // We want the headers to be present on all responses:
515
+ (0, add_response_headers_1.addResponseHeaders)(response.headers, config.isEmbeddedApp, shop);
516
+ };
517
+ AuthStrategy.prototype.overriddenRestClient = function (request, session) {
518
+ var _a = this, api = _a.api, config = _a.config, logger = _a.logger;
519
+ var client = new rest_client_1.RemixRestClient({
520
+ params: { api: api, config: config, logger: logger },
521
+ request: request,
522
+ session: session,
523
+ });
524
+ if (api.rest) {
525
+ client.resources = {};
526
+ var RestResourceClient_1 = (0, rest_client_1.restResourceClientFactory)({
527
+ params: { api: api, config: config, logger: logger },
528
+ request: request,
529
+ session: session,
530
+ });
531
+ Object.entries(api.rest).forEach(function (_a) {
532
+ var _b = tslib_1.__read(_a, 2), name = _b[0], resource = _b[1];
533
+ var RemixResource = /** @class */ (function (_super) {
534
+ tslib_1.__extends(RemixResource, _super);
535
+ function RemixResource() {
536
+ return _super !== null && _super.apply(this, arguments) || this;
537
+ }
538
+ RemixResource.Client = RestResourceClient_1;
539
+ return RemixResource;
540
+ }(resource));
541
+ Reflect.defineProperty(RemixResource, 'name', {
542
+ value: name,
543
+ });
544
+ Reflect.set(client.resources, name, RemixResource);
545
+ });
546
+ }
547
+ return client;
548
+ };
549
+ AuthStrategy.prototype.createBillingContext = function (request, session) {
550
+ var _a = this, api = _a.api, logger = _a.logger, config = _a.config;
551
+ return {
552
+ require: (0, billing_1.requireBillingFactory)({ api: api, logger: logger, config: config }, request, session),
553
+ request: (0, billing_1.requestBillingFactory)({ api: api, logger: logger, config: config }, request, session),
554
+ cancel: (0, billing_1.cancelBillingFactory)({ api: api, logger: logger, config: config }, request, session),
555
+ };
556
+ };
557
+ AuthStrategy.prototype.createAdminApiContext = function (request, session) {
558
+ var _a = this, api = _a.api, config = _a.config, logger = _a.logger;
559
+ return {
560
+ rest: this.overriddenRestClient(request, session),
561
+ graphql: (0, graphql_client_1.graphqlClientFactory)({
562
+ params: { api: api, config: config, logger: logger },
563
+ request: request,
564
+ session: session,
565
+ }),
566
+ };
567
+ };
568
+ return AuthStrategy;
569
+ }());
570
+ exports.AuthStrategy = AuthStrategy;
571
+ //# sourceMappingURL=authenticate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../../../../src/auth/admin/authenticate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ApiVersion, Session } from '@shopify/shopify-api';
2
+ import type { BasicParams } from '../../types';
3
+ interface QueryVariables {
4
+ [key: string]: any;
5
+ }
6
+ interface QueryOptions {
7
+ variables?: QueryVariables;
8
+ apiVersion?: ApiVersion;
9
+ headers?: {
10
+ [key: string]: any;
11
+ };
12
+ tries?: number;
13
+ }
14
+ export type GraphqlQueryFunction = (query: string, options?: QueryOptions) => Promise<Response>;
15
+ export interface GraphqlFunctionOptions {
16
+ params: BasicParams;
17
+ request: Request;
18
+ session: Session;
19
+ }
20
+ export declare function graphqlClientFactory({ params, request, session, }: GraphqlFunctionOptions): (query: string, options?: QueryOptions) => Promise<Response>;
21
+ export {};
22
+ //# sourceMappingURL=graphql-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../../../src/auth/admin/graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAG7C,UAAU,cAAc;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,OAAO,EACP,OAAO,GACR,EAAE,sBAAsB,WACY,MAAM,YAAY,YAAY,uBA4BlE"}