@shopify/shopify-app-remix 1.1.0 → 1.2.1

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 (107) hide show
  1. package/build/cjs/server/authenticate/admin/authenticate.js +4 -8
  2. package/build/cjs/server/authenticate/login/login.js +1 -1
  3. package/build/cjs/server/authenticate/public/appProxy/authenticate.js +82 -0
  4. package/build/cjs/server/authenticate/public/{authenticate.js → checkout/authenticate.js} +9 -9
  5. package/build/cjs/server/authenticate/public/factory.js +22 -0
  6. package/build/cjs/server/shopify-app.js +8 -8
  7. package/build/cjs/server/version.js +1 -1
  8. package/build/ts/server/__test-helpers/const.d.ts +9 -0
  9. package/build/ts/server/__test-helpers/const.d.ts.map +1 -0
  10. package/build/ts/server/__test-helpers/const.js +13 -0
  11. package/build/ts/server/__test-helpers/const.js.map +1 -0
  12. package/build/ts/server/__test-helpers/expect-admin-api-client.d.ts +8 -0
  13. package/build/ts/server/__test-helpers/expect-admin-api-client.d.ts.map +1 -0
  14. package/build/ts/server/__test-helpers/expect-admin-api-client.js +165 -0
  15. package/build/ts/server/__test-helpers/expect-admin-api-client.js.map +1 -0
  16. package/build/ts/server/__test-helpers/expect-begin-auth-redirect.d.ts +3 -0
  17. package/build/ts/server/__test-helpers/expect-begin-auth-redirect.d.ts.map +1 -0
  18. package/build/ts/server/__test-helpers/expect-begin-auth-redirect.js +16 -0
  19. package/build/ts/server/__test-helpers/expect-begin-auth-redirect.js.map +1 -0
  20. package/build/ts/server/__test-helpers/expect-document-request-headers.d.ts +2 -0
  21. package/build/ts/server/__test-helpers/expect-document-request-headers.d.ts.map +1 -0
  22. package/build/ts/server/__test-helpers/expect-document-request-headers.js +18 -0
  23. package/build/ts/server/__test-helpers/expect-document-request-headers.js.map +1 -0
  24. package/build/ts/server/__test-helpers/expect-exit-iframe.d.ts +8 -0
  25. package/build/ts/server/__test-helpers/expect-exit-iframe.d.ts.map +1 -0
  26. package/build/ts/server/__test-helpers/expect-exit-iframe.js +17 -0
  27. package/build/ts/server/__test-helpers/expect-exit-iframe.js.map +1 -0
  28. package/build/ts/server/__test-helpers/expect-login-redirect.d.ts +2 -0
  29. package/build/ts/server/__test-helpers/expect-login-redirect.d.ts.map +1 -0
  30. package/build/ts/server/__test-helpers/expect-login-redirect.js +11 -0
  31. package/build/ts/server/__test-helpers/expect-login-redirect.js.map +1 -0
  32. package/build/ts/server/__test-helpers/get-hmac.d.ts +2 -0
  33. package/build/ts/server/__test-helpers/get-hmac.d.ts.map +1 -0
  34. package/build/ts/server/__test-helpers/get-hmac.js +14 -0
  35. package/build/ts/server/__test-helpers/get-hmac.js.map +1 -0
  36. package/build/ts/server/__test-helpers/get-jwt.d.ts +8 -0
  37. package/build/ts/server/__test-helpers/get-jwt.d.ts.map +1 -0
  38. package/build/ts/server/__test-helpers/get-jwt.js +17 -0
  39. package/build/ts/server/__test-helpers/get-jwt.js.map +1 -0
  40. package/build/ts/server/__test-helpers/get-thrown-response.d.ts +2 -0
  41. package/build/ts/server/__test-helpers/get-thrown-response.d.ts.map +1 -0
  42. package/build/ts/server/__test-helpers/get-thrown-response.js +28 -0
  43. package/build/ts/server/__test-helpers/get-thrown-response.js.map +1 -0
  44. package/build/ts/server/__test-helpers/index.d.ts +16 -0
  45. package/build/ts/server/__test-helpers/index.d.ts.map +1 -0
  46. package/build/ts/server/__test-helpers/index.js +19 -0
  47. package/build/ts/server/__test-helpers/index.js.map +1 -0
  48. package/build/ts/server/__test-helpers/request-mock.d.ts +10 -0
  49. package/build/ts/server/__test-helpers/request-mock.d.ts.map +1 -0
  50. package/build/ts/server/__test-helpers/request-mock.js +192 -0
  51. package/build/ts/server/__test-helpers/request-mock.js.map +1 -0
  52. package/build/ts/server/__test-helpers/setup-valid-session.d.ts +4 -0
  53. package/build/ts/server/__test-helpers/setup-valid-session.d.ts.map +1 -0
  54. package/build/ts/server/__test-helpers/setup-valid-session.js +45 -0
  55. package/build/ts/server/__test-helpers/setup-valid-session.js.map +1 -0
  56. package/build/ts/server/__test-helpers/sign-request-cookie.d.ts +6 -0
  57. package/build/ts/server/__test-helpers/sign-request-cookie.d.ts.map +1 -0
  58. package/build/ts/server/__test-helpers/sign-request-cookie.js +14 -0
  59. package/build/ts/server/__test-helpers/sign-request-cookie.js.map +1 -0
  60. package/build/ts/server/__test-helpers/test-config.d.ts +6 -0
  61. package/build/ts/server/__test-helpers/test-config.d.ts.map +1 -0
  62. package/build/ts/server/__test-helpers/test-config.js +16 -0
  63. package/build/ts/server/__test-helpers/test-config.js.map +1 -0
  64. package/build/ts/server/authenticate/admin/authenticate.d.ts.map +1 -1
  65. package/build/ts/server/authenticate/admin/authenticate.js +5 -8
  66. package/build/ts/server/authenticate/admin/authenticate.js.map +1 -1
  67. package/build/ts/server/authenticate/login/login.d.ts.map +1 -1
  68. package/build/ts/server/authenticate/login/login.js +3 -1
  69. package/build/ts/server/authenticate/login/login.js.map +1 -1
  70. package/build/ts/server/authenticate/public/appProxy/authenticate.d.ts +5 -0
  71. package/build/ts/server/authenticate/public/appProxy/authenticate.d.ts.map +1 -0
  72. package/build/ts/server/authenticate/public/appProxy/authenticate.js +79 -0
  73. package/build/ts/server/authenticate/public/appProxy/authenticate.js.map +1 -0
  74. package/build/ts/server/authenticate/public/appProxy/types.d.ts +70 -0
  75. package/build/ts/server/authenticate/public/appProxy/types.d.ts.map +1 -0
  76. package/build/ts/server/authenticate/public/appProxy/types.js +3 -0
  77. package/build/ts/server/authenticate/public/appProxy/types.js.map +1 -0
  78. package/build/ts/server/authenticate/public/checkout/authenticate.d.ts +4 -0
  79. package/build/ts/server/authenticate/public/checkout/authenticate.d.ts.map +1 -0
  80. package/build/ts/server/authenticate/public/{authenticate.js → checkout/authenticate.js} +6 -6
  81. package/build/ts/server/authenticate/public/checkout/authenticate.js.map +1 -0
  82. package/build/ts/server/authenticate/public/checkout/types.d.ts +56 -0
  83. package/build/ts/server/authenticate/public/checkout/types.d.ts.map +1 -0
  84. package/build/ts/server/authenticate/public/checkout/types.js +3 -0
  85. package/build/ts/server/authenticate/public/checkout/types.js.map +1 -0
  86. package/build/ts/server/authenticate/public/factory.d.ts +5 -0
  87. package/build/ts/server/authenticate/public/factory.d.ts.map +1 -0
  88. package/build/ts/server/authenticate/public/factory.js +18 -0
  89. package/build/ts/server/authenticate/public/factory.js.map +1 -0
  90. package/build/ts/server/authenticate/public/index.d.ts +2 -0
  91. package/build/ts/server/authenticate/public/index.d.ts.map +1 -0
  92. package/build/ts/server/authenticate/public/index.js +5 -0
  93. package/build/ts/server/authenticate/public/index.js.map +1 -0
  94. package/build/ts/server/authenticate/public/types.d.ts +31 -25
  95. package/build/ts/server/authenticate/public/types.d.ts.map +1 -1
  96. package/build/ts/server/shopify-app.js +2 -2
  97. package/build/ts/server/shopify-app.js.map +1 -1
  98. package/build/ts/server/types.d.ts +1 -2
  99. package/build/ts/server/types.d.ts.map +1 -1
  100. package/build/ts/server/types.js.map +1 -1
  101. package/build/ts/server/version.d.ts +1 -1
  102. package/build/ts/server/version.js +1 -1
  103. package/build/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +4 -4
  105. package/build/ts/server/authenticate/public/authenticate.d.ts +0 -4
  106. package/build/ts/server/authenticate/public/authenticate.d.ts.map +0 -1
  107. package/build/ts/server/authenticate/public/authenticate.js.map +0 -1
@@ -497,21 +497,17 @@ class AuthStrategy {
497
497
  }
498
498
  redirectToBouncePage(url) {
499
499
  const {
500
- api,
501
500
  config
502
501
  } = this;
503
502
 
504
- // eslint-disable-next-line no-warning-comments
505
- // TODO this is to work around a remix bug
506
- // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650
507
- url.protocol = `${api.config.hostScheme}:`;
508
- const params = new URLSearchParams(url.search);
509
- params.set('shopify-reload', url.href);
503
+ // Make sure we always point to the configured app URL so it also works behind reverse proxies (that alter the Host
504
+ // header).
505
+ url.searchParams.set('shopify-reload', `${config.appUrl}${url.pathname}${url.search}`);
510
506
 
511
507
  // eslint-disable-next-line no-warning-comments
512
508
  // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue)
513
509
  // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650
514
- throw serverRuntime.redirect(`${config.auth.patchSessionTokenPath}?${params.toString()}`);
510
+ throw serverRuntime.redirect(`${config.auth.patchSessionTokenPath}${url.search}`);
515
511
  }
516
512
  createBillingContext(request$1, session) {
517
513
  const {
@@ -26,7 +26,7 @@ function loginFactory(params) {
26
26
  shop: types.LoginErrorType.MissingShop
27
27
  };
28
28
  }
29
- const shopWithoutProtocol = shop.replace(/^https?:\/\//, '');
29
+ const shopWithoutProtocol = shop.replace(/^https?:\/\//, '').replace(/\/$/, '');
30
30
  const shopWithDomain = (shop === null || shop === void 0 ? void 0 : shop.indexOf('.')) === -1 ? `${shopWithoutProtocol}.myshopify.com` : shopWithoutProtocol;
31
31
  const sanitizedShop = api.utils.sanitizeShop(shopWithDomain);
32
32
  if (!sanitizedShop) {
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var factory = require('../../../clients/admin/factory.js');
6
+
7
+ function authenticateAppProxyFactory(params) {
8
+ const {
9
+ api,
10
+ config,
11
+ logger
12
+ } = params;
13
+ return async function authenticate(request) {
14
+ logger.info('Authenticating app proxy request');
15
+ const {
16
+ searchParams
17
+ } = new URL(request.url);
18
+ const query = Object.fromEntries(searchParams.entries());
19
+ let isValid = false;
20
+ try {
21
+ isValid = await api.utils.validateHmac(query, {
22
+ signator: 'appProxy'
23
+ });
24
+ } catch (error) {
25
+ logger.info(error.message);
26
+ throw new Response(undefined, {
27
+ status: 400,
28
+ statusText: 'Bad Request'
29
+ });
30
+ }
31
+ if (!isValid) {
32
+ logger.info('App proxy request has invalid signature');
33
+ throw new Response(undefined, {
34
+ status: 400,
35
+ statusText: 'Bad Request'
36
+ });
37
+ }
38
+ const shop = searchParams.get('shop');
39
+ const sessionId = api.session.getOfflineId(shop);
40
+ const session = await config.sessionStorage.loadSession(sessionId);
41
+ if (!session) {
42
+ const context = {
43
+ liquid,
44
+ session: undefined,
45
+ admin: undefined
46
+ };
47
+ return context;
48
+ }
49
+ const context = {
50
+ liquid,
51
+ session,
52
+ admin: factory.adminClientFactory({
53
+ params,
54
+ session
55
+ })
56
+ };
57
+ return context;
58
+ };
59
+ }
60
+ const liquid = (body, initAndOptions) => {
61
+ if (typeof initAndOptions !== 'object') {
62
+ return new Response(body, {
63
+ status: initAndOptions || 200,
64
+ headers: {
65
+ 'Content-Type': 'application/liquid'
66
+ }
67
+ });
68
+ }
69
+ const {
70
+ layout,
71
+ ...responseInit
72
+ } = initAndOptions || {};
73
+ const responseBody = layout === false ? `{% layout none %} ${body}` : body;
74
+ const headers = new Headers(responseInit.headers);
75
+ headers.set('Content-Type', 'application/liquid');
76
+ return new Response(responseBody, {
77
+ ...responseInit,
78
+ headers
79
+ });
80
+ };
81
+
82
+ exports.authenticateAppProxyFactory = authenticateAppProxyFactory;
@@ -2,14 +2,14 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var ensureCorsHeaders = require('../helpers/ensure-cors-headers.js');
6
- var validateSessionToken = require('../helpers/validate-session-token.js');
7
- var getSessionTokenHeader = require('../helpers/get-session-token-header.js');
8
- var rejectBotRequest = require('../helpers/reject-bot-request.js');
9
- var respondToOptionsRequest = require('../helpers/respond-to-options-request.js');
5
+ var ensureCorsHeaders = require('../../helpers/ensure-cors-headers.js');
6
+ var validateSessionToken = require('../../helpers/validate-session-token.js');
7
+ var getSessionTokenHeader = require('../../helpers/get-session-token-header.js');
8
+ var rejectBotRequest = require('../../helpers/reject-bot-request.js');
9
+ var respondToOptionsRequest = require('../../helpers/respond-to-options-request.js');
10
10
 
11
- function authenticatePublicFactory(params) {
12
- return async function authenticatePublic(request, options = {}) {
11
+ function authenticateCheckoutFactory(params) {
12
+ return async function authenticateCheckout(request, options = {}) {
13
13
  var _options$corsHeaders;
14
14
  const {
15
15
  logger
@@ -18,7 +18,7 @@ function authenticatePublicFactory(params) {
18
18
  rejectBotRequest.rejectBotRequest(params, request);
19
19
  respondToOptionsRequest.respondToOptionsRequest(params, request, corsHeaders);
20
20
  const sessionTokenHeader = getSessionTokenHeader.getSessionTokenHeader(request);
21
- logger.info('Authenticating public request');
21
+ logger.info('Authenticating checkout request');
22
22
  if (!sessionTokenHeader) {
23
23
  logger.debug('Request did not contain a session token');
24
24
  throw new Response(undefined, {
@@ -35,4 +35,4 @@ function authenticatePublicFactory(params) {
35
35
  };
36
36
  }
37
37
 
38
- exports.authenticatePublicFactory = authenticatePublicFactory;
38
+ exports.authenticateCheckoutFactory = authenticateCheckoutFactory;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var authenticate$1 = require('./checkout/authenticate.js');
6
+ var authenticate = require('./appProxy/authenticate.js');
7
+
8
+ function authenticatePublicFactory(params) {
9
+ const {
10
+ logger
11
+ } = params;
12
+ const authenticateCheckout = authenticate$1.authenticateCheckoutFactory(params);
13
+ const authenticatePublic = (request, options) => {
14
+ logger.deprecated('2.0.0', 'authenticate.public() will be deprecated in v2. Use authenticate.public.checkout() instead.');
15
+ return authenticateCheckout(request, options);
16
+ };
17
+ authenticatePublic.checkout = authenticateCheckout;
18
+ authenticatePublic.appProxy = authenticate.authenticateAppProxyFactory(params);
19
+ return authenticatePublic;
20
+ }
21
+
22
+ exports.authenticatePublicFactory = authenticatePublicFactory;
@@ -7,14 +7,14 @@ var shopifyApi = require('@shopify/shopify-api');
7
7
  var types = require('./types.js');
8
8
  var version = require('./version.js');
9
9
  var register = require('./authenticate/webhooks/register.js');
10
- var authenticate$2 = require('./authenticate/admin/authenticate.js');
11
- var authenticate$1 = require('./authenticate/webhooks/authenticate.js');
12
- var authenticate = require('./authenticate/public/authenticate.js');
10
+ var authenticate$1 = require('./authenticate/admin/authenticate.js');
11
+ var authenticate = require('./authenticate/webhooks/authenticate.js');
13
12
  var overrideLogger = require('./override-logger.js');
14
13
  var addResponseHeaders = require('./authenticate/helpers/add-response-headers.js');
15
14
  require('isbot');
16
15
  var login = require('./authenticate/login/login.js');
17
- var factory = require('./unauthenticated/admin/factory.js');
16
+ var factory$1 = require('./unauthenticated/admin/factory.js');
17
+ var factory = require('./authenticate/public/factory.js');
18
18
 
19
19
  /**
20
20
  * Creates an object your app will use to interact with Shopify.
@@ -48,18 +48,18 @@ function shopifyApp(appConfig) {
48
48
  config,
49
49
  logger
50
50
  };
51
- const oauth = new authenticate$2.AuthStrategy(params);
51
+ const oauth = new authenticate$1.AuthStrategy(params);
52
52
  const shopify = {
53
53
  sessionStorage: config.sessionStorage,
54
54
  addDocumentResponseHeaders: addResponseHeaders.addDocumentResponseHeadersFactory(params),
55
55
  registerWebhooks: register.registerWebhooksFactory(params),
56
56
  authenticate: {
57
57
  admin: oauth.authenticateAdmin.bind(oauth),
58
- public: authenticate.authenticatePublicFactory(params),
59
- webhook: authenticate$1.authenticateWebhookFactory(params)
58
+ public: factory.authenticatePublicFactory(params),
59
+ webhook: authenticate.authenticateWebhookFactory(params)
60
60
  },
61
61
  unauthenticated: {
62
- admin: factory.unauthenticatedAdminContextFactory(params)
62
+ admin: factory$1.unauthenticatedAdminContextFactory(params)
63
63
  }
64
64
  };
65
65
  if (isAppStoreApp(shopify, appConfig) || isSingleMerchantApp(shopify, appConfig)) {
@@ -2,6 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const SHOPIFY_REMIX_LIBRARY_VERSION = '1.1.0';
5
+ const SHOPIFY_REMIX_LIBRARY_VERSION = '1.2.1';
6
6
 
7
7
  exports.SHOPIFY_REMIX_LIBRARY_VERSION = SHOPIFY_REMIX_LIBRARY_VERSION;
@@ -0,0 +1,9 @@
1
+ export declare const API_SECRET_KEY = "testApiSecretKey";
2
+ export declare const API_KEY = "testApiKey";
3
+ export declare const APP_URL = "https://my-test-app.myshopify.io";
4
+ export declare const SHOPIFY_HOST = "totally-real-host.myshopify.io";
5
+ export declare const BASE64_HOST: string;
6
+ export declare const TEST_SHOP = "test-shop.myshopify.com";
7
+ export declare const GRAPHQL_URL: string;
8
+ export declare const USER_ID = 12345;
9
+ //# sourceMappingURL=const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../../src/server/__test-helpers/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,qBAAqB,CAAC;AACjD,eAAO,MAAM,OAAO,eAAe,CAAC;AACpC,eAAO,MAAM,OAAO,qCAAqC,CAAC;AAC1D,eAAO,MAAM,YAAY,mCAAmC,CAAC;AAC7D,eAAO,MAAM,WAAW,QAA+C,CAAC;AACxE,eAAO,MAAM,SAAS,4BAA4B,CAAC;AACnD,eAAO,MAAM,WAAW,QAAsE,CAAC;AAC/F,eAAO,MAAM,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.USER_ID = exports.GRAPHQL_URL = exports.TEST_SHOP = exports.BASE64_HOST = exports.SHOPIFY_HOST = exports.APP_URL = exports.API_KEY = exports.API_SECRET_KEY = void 0;
4
+ var shopify_api_1 = require("@shopify/shopify-api");
5
+ exports.API_SECRET_KEY = 'testApiSecretKey';
6
+ exports.API_KEY = 'testApiKey';
7
+ exports.APP_URL = 'https://my-test-app.myshopify.io';
8
+ exports.SHOPIFY_HOST = 'totally-real-host.myshopify.io';
9
+ exports.BASE64_HOST = Buffer.from(exports.SHOPIFY_HOST).toString('base64');
10
+ exports.TEST_SHOP = 'test-shop.myshopify.com';
11
+ exports.GRAPHQL_URL = "https://".concat(exports.TEST_SHOP, "/admin/api/").concat(shopify_api_1.LATEST_API_VERSION, "/graphql.json");
12
+ exports.USER_ID = 12345;
13
+ //# sourceMappingURL=const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/server/__test-helpers/const.ts"],"names":[],"mappings":";;;AAAA,oDAAwD;AAE3C,QAAA,cAAc,GAAG,kBAAkB,CAAC;AACpC,QAAA,OAAO,GAAG,YAAY,CAAC;AACvB,QAAA,OAAO,GAAG,kCAAkC,CAAC;AAC7C,QAAA,YAAY,GAAG,gCAAgC,CAAC;AAChD,QAAA,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3D,QAAA,SAAS,GAAG,yBAAyB,CAAC;AACtC,QAAA,WAAW,GAAG,kBAAW,iBAAS,wBAAc,gCAAkB,kBAAe,CAAC;AAClF,QAAA,OAAO,GAAG,KAAK,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Session } from '@shopify/shopify-api';
2
+ import { AdminApiContext } from '../config-types';
3
+ export declare function expectAdminApiClient(factory: () => Promise<{
4
+ admin: AdminApiContext;
5
+ expectedSession: Session;
6
+ actualSession: Session;
7
+ }>): void;
8
+ //# sourceMappingURL=expect-admin-api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-admin-api-client.d.ts","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-admin-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAG7C,OAAO,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAOhD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,OAAO,CAAC;IACrB,KAAK,EAAE,eAAe,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC,QAqGH"}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expectAdminApiClient = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var __1 = require("..");
6
+ var request_mock_1 = require("./request-mock");
7
+ var const_1 = require("./const");
8
+ var REQUEST_URL = "https://".concat(const_1.TEST_SHOP, "/admin/api/").concat(__1.LATEST_API_VERSION, "/customers.json");
9
+ function expectAdminApiClient(factory) {
10
+ var _this = this;
11
+ it('REST client can perform GET requests', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
12
+ var admin, response, _a;
13
+ return tslib_1.__generator(this, function (_b) {
14
+ switch (_b.label) {
15
+ case 0: return [4 /*yield*/, factory()];
16
+ case 1:
17
+ admin = (_b.sent()).admin;
18
+ return [4 /*yield*/, (0, request_mock_1.mockExternalRequest)({
19
+ request: new Request(REQUEST_URL),
20
+ response: new Response(JSON.stringify({ customers: [] })),
21
+ })];
22
+ case 2:
23
+ _b.sent();
24
+ return [4 /*yield*/, admin.rest.get({ path: 'customers' })];
25
+ case 3:
26
+ response = _b.sent();
27
+ // THEN
28
+ expect(response.status).toEqual(200);
29
+ _a = expect;
30
+ return [4 /*yield*/, response.json()];
31
+ case 4:
32
+ _a.apply(void 0, [_b.sent()]).toEqual({ customers: [] });
33
+ return [2 /*return*/];
34
+ }
35
+ });
36
+ }); });
37
+ it('REST client can perform POST requests', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
38
+ var admin, response, _a;
39
+ return tslib_1.__generator(this, function (_b) {
40
+ switch (_b.label) {
41
+ case 0: return [4 /*yield*/, factory()];
42
+ case 1:
43
+ admin = (_b.sent()).admin;
44
+ return [4 /*yield*/, (0, request_mock_1.mockExternalRequest)({
45
+ request: new Request(REQUEST_URL, { method: 'POST' }),
46
+ response: new Response(JSON.stringify({ customers: [] })),
47
+ })];
48
+ case 2:
49
+ _b.sent();
50
+ return [4 /*yield*/, admin.rest.post({
51
+ path: '/customers.json',
52
+ data: '',
53
+ })];
54
+ case 3:
55
+ response = _b.sent();
56
+ // THEN
57
+ expect(response.status).toEqual(200);
58
+ _a = expect;
59
+ return [4 /*yield*/, response.json()];
60
+ case 4:
61
+ _a.apply(void 0, [_b.sent()]).toEqual({ customers: [] });
62
+ return [2 /*return*/];
63
+ }
64
+ });
65
+ }); });
66
+ it('REST client can perform PUT requests', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
67
+ var admin, response, _a;
68
+ return tslib_1.__generator(this, function (_b) {
69
+ switch (_b.label) {
70
+ case 0: return [4 /*yield*/, factory()];
71
+ case 1:
72
+ admin = (_b.sent()).admin;
73
+ return [4 /*yield*/, (0, request_mock_1.mockExternalRequest)({
74
+ request: new Request(REQUEST_URL, { method: 'PUT' }),
75
+ response: new Response(JSON.stringify({ customers: [] })),
76
+ })];
77
+ case 2:
78
+ _b.sent();
79
+ return [4 /*yield*/, admin.rest.put({
80
+ path: '/customers.json',
81
+ data: '',
82
+ })];
83
+ case 3:
84
+ response = _b.sent();
85
+ // THEN
86
+ expect(response.status).toEqual(200);
87
+ _a = expect;
88
+ return [4 /*yield*/, response.json()];
89
+ case 4:
90
+ _a.apply(void 0, [_b.sent()]).toEqual({ customers: [] });
91
+ return [2 /*return*/];
92
+ }
93
+ });
94
+ }); });
95
+ it('REST client can perform DELETE requests', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
96
+ var admin, response, _a;
97
+ return tslib_1.__generator(this, function (_b) {
98
+ switch (_b.label) {
99
+ case 0: return [4 /*yield*/, factory()];
100
+ case 1:
101
+ admin = (_b.sent()).admin;
102
+ return [4 /*yield*/, (0, request_mock_1.mockExternalRequest)({
103
+ request: new Request(REQUEST_URL, { method: 'DELETE' }),
104
+ response: new Response(JSON.stringify({ customers: [] })),
105
+ })];
106
+ case 2:
107
+ _b.sent();
108
+ return [4 /*yield*/, admin.rest.delete({ path: '/customers.json' })];
109
+ case 3:
110
+ response = _b.sent();
111
+ // THEN
112
+ expect(response.status).toEqual(200);
113
+ _a = expect;
114
+ return [4 /*yield*/, response.json()];
115
+ case 4:
116
+ _a.apply(void 0, [_b.sent()]).toEqual({ customers: [] });
117
+ return [2 /*return*/];
118
+ }
119
+ });
120
+ }); });
121
+ it('GraphQL client can perform requests', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
122
+ var _a, admin, actualSession, response, _b;
123
+ return tslib_1.__generator(this, function (_c) {
124
+ switch (_c.label) {
125
+ case 0: return [4 /*yield*/, factory()];
126
+ case 1:
127
+ _a = _c.sent(), admin = _a.admin, actualSession = _a.actualSession;
128
+ return [4 /*yield*/, (0, request_mock_1.mockExternalRequest)({
129
+ request: new Request("https://".concat(const_1.TEST_SHOP, "/admin/api/").concat(__1.LATEST_API_VERSION, "/graphql.json"), {
130
+ method: 'POST',
131
+ headers: { 'X-Shopify-Access-Token': actualSession.accessToken },
132
+ }),
133
+ response: new Response(JSON.stringify({ shop: { name: 'Test shop' } })),
134
+ })];
135
+ case 2:
136
+ _c.sent();
137
+ return [4 /*yield*/, admin.graphql('{ shop { name } }')];
138
+ case 3:
139
+ response = _c.sent();
140
+ // THEN
141
+ expect(response.status).toEqual(200);
142
+ _b = expect;
143
+ return [4 /*yield*/, response.json()];
144
+ case 4:
145
+ _b.apply(void 0, [_c.sent()]).toEqual({ shop: { name: 'Test shop' } });
146
+ return [2 /*return*/];
147
+ }
148
+ });
149
+ }); });
150
+ it('returns a session object as part of the context', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
151
+ var _a, expectedSession, actualSession;
152
+ return tslib_1.__generator(this, function (_b) {
153
+ switch (_b.label) {
154
+ case 0: return [4 /*yield*/, factory()];
155
+ case 1:
156
+ _a = _b.sent(), expectedSession = _a.expectedSession, actualSession = _a.actualSession;
157
+ // THEN
158
+ expect(expectedSession).toEqual(actualSession);
159
+ return [2 /*return*/];
160
+ }
161
+ });
162
+ }); });
163
+ }
164
+ exports.expectAdminApiClient = expectAdminApiClient;
165
+ //# sourceMappingURL=expect-admin-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-admin-api-client.js","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-admin-api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { testConfig } from './test-config';
2
+ export declare function expectBeginAuthRedirect(config: ReturnType<typeof testConfig>, response: Response): void;
3
+ //# sourceMappingURL=expect-begin-auth-redirect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-begin-auth-redirect.d.ts","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-begin-auth-redirect.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,EACrC,QAAQ,EAAE,QAAQ,QAgBnB"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expectBeginAuthRedirect = void 0;
4
+ var const_1 = require("./const");
5
+ function expectBeginAuthRedirect(config, response) {
6
+ expect(response.status).toEqual(302);
7
+ var _a = new URL(response.headers.get('location')), hostname = _a.hostname, pathname = _a.pathname, searchParams = _a.searchParams;
8
+ expect(hostname).toBe(const_1.TEST_SHOP);
9
+ expect(pathname).toBe('/admin/oauth/authorize');
10
+ expect(searchParams.get('client_id')).toBe(config.apiKey);
11
+ expect(searchParams.get('scope')).toBe(config.scopes.toString());
12
+ expect(searchParams.get('redirect_uri')).toBe("".concat(config.appUrl, "/auth/callback"));
13
+ expect(searchParams.get('state')).toStrictEqual(expect.any(String));
14
+ }
15
+ exports.expectBeginAuthRedirect = expectBeginAuthRedirect;
16
+ //# sourceMappingURL=expect-begin-auth-redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-begin-auth-redirect.js","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-begin-auth-redirect.ts"],"names":[],"mappings":";;;AAAA,iCAAkC;AAGlC,SAAgB,uBAAuB,CACrC,MAAqC,EACrC,QAAkB;IAElB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAA,KAAqC,IAAI,GAAG,CAChD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAE,CAClC,EAFM,QAAQ,cAAA,EAAE,QAAQ,cAAA,EAAE,YAAY,kBAEtC,CAAC;IAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,iBAAS,CAAC,CAAC;IACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAC3C,UAAG,MAAM,CAAC,MAAM,mBAAgB,CACjC,CAAC;IACF,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACtE,CAAC;AAlBD,0DAkBC"}
@@ -0,0 +1,2 @@
1
+ export declare function expectDocumentRequestHeaders(response: Response, isEmbeddedApp?: boolean): void;
2
+ //# sourceMappingURL=expect-document-request-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-document-request-headers.d.ts","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-document-request-headers.ts"],"names":[],"mappings":"AAIA,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,QAAQ,EAClB,aAAa,UAAO,QAkBrB"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expectDocumentRequestHeaders = void 0;
4
+ var const_1 = require("../authenticate/const");
5
+ var const_2 = require("./const");
6
+ function expectDocumentRequestHeaders(response, isEmbeddedApp) {
7
+ if (isEmbeddedApp === void 0) { isEmbeddedApp = true; }
8
+ var headers = response.headers;
9
+ if (isEmbeddedApp) {
10
+ expect(headers.get('Content-Security-Policy')).toEqual("frame-ancestors https://".concat(encodeURIComponent(const_2.TEST_SHOP), " https://admin.shopify.com https://*.spin.dev;"));
11
+ expect(headers.get('Link')).toEqual("<".concat(const_1.APP_BRIDGE_URL, ">; rel=\"preload\"; as=\"script\";"));
12
+ }
13
+ else {
14
+ expect(headers.get('Content-Security-Policy')).toEqual("frame-ancestors 'none';");
15
+ }
16
+ }
17
+ exports.expectDocumentRequestHeaders = expectDocumentRequestHeaders;
18
+ //# sourceMappingURL=expect-document-request-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-document-request-headers.js","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-document-request-headers.ts"],"names":[],"mappings":";;;AAAA,+CAAqD;AAErD,iCAAkC;AAElC,SAAgB,4BAA4B,CAC1C,QAAkB,EAClB,aAAoB;IAApB,8BAAA,EAAA,oBAAoB;IAEpB,IAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAEjC,IAAI,aAAa,EAAE;QACjB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,OAAO,CACpD,kCAA2B,kBAAkB,CAC3C,iBAAS,CACV,mDAAgD,CAClD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACjC,WAAI,sBAAc,uCAAgC,CACnD,CAAC;KACH;SAAM;QACL,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,OAAO,CACpD,yBAAyB,CAC1B,CAAC;KACH;AACH,CAAC;AApBD,oEAoBC"}
@@ -0,0 +1,8 @@
1
+ interface ExpectExitIframeRedirectOptions {
2
+ shop?: string;
3
+ host?: string | null;
4
+ destination?: string;
5
+ }
6
+ export declare function expectExitIframeRedirect(response: Response, { shop, host, destination, }?: ExpectExitIframeRedirectOptions): void;
7
+ export {};
8
+ //# sourceMappingURL=expect-exit-iframe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-exit-iframe.d.ts","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-exit-iframe.ts"],"names":[],"mappings":"AAEA,UAAU,+BAA+B;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,EAClB,EACE,IAAgB,EAChB,IAAkB,EAClB,WAAkC,GACnC,GAAE,+BAAoC,QAgBxC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expectExitIframeRedirect = void 0;
4
+ var const_1 = require("./const");
5
+ function expectExitIframeRedirect(response, _a) {
6
+ var _b = _a === void 0 ? {} : _a, _c = _b.shop, shop = _c === void 0 ? const_1.TEST_SHOP : _c, _d = _b.host, host = _d === void 0 ? const_1.BASE64_HOST : _d, _e = _b.destination, destination = _e === void 0 ? "/auth?shop=".concat(shop) : _e;
7
+ expect(response.status).toBe(302);
8
+ var _f = new URL(response.headers.get('location'), const_1.APP_URL), pathname = _f.pathname, searchParams = _f.searchParams;
9
+ expect(pathname).toBe('/auth/exit-iframe');
10
+ expect(searchParams.get('shop')).toBe(shop);
11
+ expect(searchParams.get('exitIframe')).toBe(destination);
12
+ if (host) {
13
+ expect(searchParams.get('host')).toBe(host);
14
+ }
15
+ }
16
+ exports.expectExitIframeRedirect = expectExitIframeRedirect;
17
+ //# sourceMappingURL=expect-exit-iframe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-exit-iframe.js","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-exit-iframe.ts"],"names":[],"mappings":";;;AAAA,iCAAwD;AAQxD,SAAgB,wBAAwB,CACtC,QAAkB,EAClB,EAIuC;QAJvC,qBAIqC,EAAE,KAAA,EAHrC,YAAgB,EAAhB,IAAI,mBAAG,iBAAS,KAAA,EAChB,YAAkB,EAAlB,IAAI,mBAAG,mBAAW,KAAA,EAClB,mBAAkC,EAAlC,WAAW,mBAAG,qBAAc,IAAI,CAAE,KAAA;IAGpC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAA,KAA2B,IAAI,GAAG,CACtC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAE,EACjC,eAAO,CACR,EAHM,QAAQ,cAAA,EAAE,YAAY,kBAG5B,CAAC;IACF,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAE3C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEzD,IAAI,IAAI,EAAE;QACR,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7C;AACH,CAAC;AAtBD,4DAsBC"}
@@ -0,0 +1,2 @@
1
+ export declare function expectLoginRedirect(response: Response): void;
2
+ //# sourceMappingURL=expect-login-redirect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-login-redirect.d.ts","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-login-redirect.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,QAKrD"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expectLoginRedirect = void 0;
4
+ var const_1 = require("./const");
5
+ function expectLoginRedirect(response) {
6
+ expect(response.status).toBe(302);
7
+ var pathname = new URL(response.headers.get('location'), const_1.APP_URL).pathname;
8
+ expect(pathname).toBe('/auth/login');
9
+ }
10
+ exports.expectLoginRedirect = expectLoginRedirect;
11
+ //# sourceMappingURL=expect-login-redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-login-redirect.js","sourceRoot":"","sources":["../../../../src/server/__test-helpers/expect-login-redirect.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAEhC,SAAgB,mBAAmB,CAAC,QAAkB;IACpD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE3B,IAAA,QAAQ,GAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAE,EAAE,eAAO,CAAC,SAAvD,CAAwD;IACvE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvC,CAAC;AALD,kDAKC"}
@@ -0,0 +1,2 @@
1
+ export declare function getHmac(body: string): string;
2
+ //# sourceMappingURL=get-hmac.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-hmac.d.ts","sourceRoot":"","sources":["../../../../src/server/__test-helpers/get-hmac.ts"],"names":[],"mappings":"AAIA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5C"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getHmac = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var crypto_1 = tslib_1.__importDefault(require("crypto"));
6
+ var const_1 = require("./const");
7
+ function getHmac(body) {
8
+ return crypto_1.default
9
+ .createHmac('sha256', const_1.API_SECRET_KEY)
10
+ .update(body, 'utf8')
11
+ .digest('base64');
12
+ }
13
+ exports.getHmac = getHmac;
14
+ //# sourceMappingURL=get-hmac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-hmac.js","sourceRoot":"","sources":["../../../../src/server/__test-helpers/get-hmac.ts"],"names":[],"mappings":";;;;AAAA,0DAA4B;AAE5B,iCAAuC;AAEvC,SAAgB,OAAO,CAAC,IAAY;IAClC,OAAO,gBAAM;SACV,UAAU,CAAC,QAAQ,EAAE,sBAAc,CAAC;SACpC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;SACpB,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtB,CAAC;AALD,0BAKC"}
@@ -0,0 +1,8 @@
1
+ import { JwtPayload } from '@shopify/shopify-api';
2
+ interface TestJwt {
3
+ token: string;
4
+ payload: JwtPayload;
5
+ }
6
+ export declare function getJwt(overrides?: Partial<JwtPayload>): TestJwt;
7
+ export {};
8
+ //# sourceMappingURL=get-jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-jwt.d.ts","sourceRoot":"","sources":["../../../../src/server/__test-helpers/get-jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAKhD,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,wBAAgB,MAAM,CAAC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,OAAO,CAoBnE"}