@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.
- package/build/cjs/server/authenticate/admin/authenticate.js +4 -8
- package/build/cjs/server/authenticate/login/login.js +1 -1
- package/build/cjs/server/authenticate/public/appProxy/authenticate.js +82 -0
- package/build/cjs/server/authenticate/public/{authenticate.js → checkout/authenticate.js} +9 -9
- package/build/cjs/server/authenticate/public/factory.js +22 -0
- package/build/cjs/server/shopify-app.js +8 -8
- package/build/cjs/server/version.js +1 -1
- package/build/ts/server/__test-helpers/const.d.ts +9 -0
- package/build/ts/server/__test-helpers/const.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/const.js +13 -0
- package/build/ts/server/__test-helpers/const.js.map +1 -0
- package/build/ts/server/__test-helpers/expect-admin-api-client.d.ts +8 -0
- package/build/ts/server/__test-helpers/expect-admin-api-client.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/expect-admin-api-client.js +165 -0
- package/build/ts/server/__test-helpers/expect-admin-api-client.js.map +1 -0
- package/build/ts/server/__test-helpers/expect-begin-auth-redirect.d.ts +3 -0
- package/build/ts/server/__test-helpers/expect-begin-auth-redirect.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/expect-begin-auth-redirect.js +16 -0
- package/build/ts/server/__test-helpers/expect-begin-auth-redirect.js.map +1 -0
- package/build/ts/server/__test-helpers/expect-document-request-headers.d.ts +2 -0
- package/build/ts/server/__test-helpers/expect-document-request-headers.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/expect-document-request-headers.js +18 -0
- package/build/ts/server/__test-helpers/expect-document-request-headers.js.map +1 -0
- package/build/ts/server/__test-helpers/expect-exit-iframe.d.ts +8 -0
- package/build/ts/server/__test-helpers/expect-exit-iframe.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/expect-exit-iframe.js +17 -0
- package/build/ts/server/__test-helpers/expect-exit-iframe.js.map +1 -0
- package/build/ts/server/__test-helpers/expect-login-redirect.d.ts +2 -0
- package/build/ts/server/__test-helpers/expect-login-redirect.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/expect-login-redirect.js +11 -0
- package/build/ts/server/__test-helpers/expect-login-redirect.js.map +1 -0
- package/build/ts/server/__test-helpers/get-hmac.d.ts +2 -0
- package/build/ts/server/__test-helpers/get-hmac.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/get-hmac.js +14 -0
- package/build/ts/server/__test-helpers/get-hmac.js.map +1 -0
- package/build/ts/server/__test-helpers/get-jwt.d.ts +8 -0
- package/build/ts/server/__test-helpers/get-jwt.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/get-jwt.js +17 -0
- package/build/ts/server/__test-helpers/get-jwt.js.map +1 -0
- package/build/ts/server/__test-helpers/get-thrown-response.d.ts +2 -0
- package/build/ts/server/__test-helpers/get-thrown-response.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/get-thrown-response.js +28 -0
- package/build/ts/server/__test-helpers/get-thrown-response.js.map +1 -0
- package/build/ts/server/__test-helpers/index.d.ts +16 -0
- package/build/ts/server/__test-helpers/index.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/index.js +19 -0
- package/build/ts/server/__test-helpers/index.js.map +1 -0
- package/build/ts/server/__test-helpers/request-mock.d.ts +10 -0
- package/build/ts/server/__test-helpers/request-mock.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/request-mock.js +192 -0
- package/build/ts/server/__test-helpers/request-mock.js.map +1 -0
- package/build/ts/server/__test-helpers/setup-valid-session.d.ts +4 -0
- package/build/ts/server/__test-helpers/setup-valid-session.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/setup-valid-session.js +45 -0
- package/build/ts/server/__test-helpers/setup-valid-session.js.map +1 -0
- package/build/ts/server/__test-helpers/sign-request-cookie.d.ts +6 -0
- package/build/ts/server/__test-helpers/sign-request-cookie.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/sign-request-cookie.js +14 -0
- package/build/ts/server/__test-helpers/sign-request-cookie.js.map +1 -0
- package/build/ts/server/__test-helpers/test-config.d.ts +6 -0
- package/build/ts/server/__test-helpers/test-config.d.ts.map +1 -0
- package/build/ts/server/__test-helpers/test-config.js +16 -0
- package/build/ts/server/__test-helpers/test-config.js.map +1 -0
- package/build/ts/server/authenticate/admin/authenticate.d.ts.map +1 -1
- package/build/ts/server/authenticate/admin/authenticate.js +5 -8
- package/build/ts/server/authenticate/admin/authenticate.js.map +1 -1
- package/build/ts/server/authenticate/login/login.d.ts.map +1 -1
- package/build/ts/server/authenticate/login/login.js +3 -1
- package/build/ts/server/authenticate/login/login.js.map +1 -1
- package/build/ts/server/authenticate/public/appProxy/authenticate.d.ts +5 -0
- package/build/ts/server/authenticate/public/appProxy/authenticate.d.ts.map +1 -0
- package/build/ts/server/authenticate/public/appProxy/authenticate.js +79 -0
- package/build/ts/server/authenticate/public/appProxy/authenticate.js.map +1 -0
- package/build/ts/server/authenticate/public/appProxy/types.d.ts +70 -0
- package/build/ts/server/authenticate/public/appProxy/types.d.ts.map +1 -0
- package/build/ts/server/authenticate/public/appProxy/types.js +3 -0
- package/build/ts/server/authenticate/public/appProxy/types.js.map +1 -0
- package/build/ts/server/authenticate/public/checkout/authenticate.d.ts +4 -0
- package/build/ts/server/authenticate/public/checkout/authenticate.d.ts.map +1 -0
- package/build/ts/server/authenticate/public/{authenticate.js → checkout/authenticate.js} +6 -6
- package/build/ts/server/authenticate/public/checkout/authenticate.js.map +1 -0
- package/build/ts/server/authenticate/public/checkout/types.d.ts +56 -0
- package/build/ts/server/authenticate/public/checkout/types.d.ts.map +1 -0
- package/build/ts/server/authenticate/public/checkout/types.js +3 -0
- package/build/ts/server/authenticate/public/checkout/types.js.map +1 -0
- package/build/ts/server/authenticate/public/factory.d.ts +5 -0
- package/build/ts/server/authenticate/public/factory.d.ts.map +1 -0
- package/build/ts/server/authenticate/public/factory.js +18 -0
- package/build/ts/server/authenticate/public/factory.js.map +1 -0
- package/build/ts/server/authenticate/public/index.d.ts +2 -0
- package/build/ts/server/authenticate/public/index.d.ts.map +1 -0
- package/build/ts/server/authenticate/public/index.js +5 -0
- package/build/ts/server/authenticate/public/index.js.map +1 -0
- package/build/ts/server/authenticate/public/types.d.ts +31 -25
- package/build/ts/server/authenticate/public/types.d.ts.map +1 -1
- package/build/ts/server/shopify-app.js +2 -2
- package/build/ts/server/shopify-app.js.map +1 -1
- package/build/ts/server/types.d.ts +1 -2
- package/build/ts/server/types.d.ts.map +1 -1
- package/build/ts/server/types.js.map +1 -1
- package/build/ts/server/version.d.ts +1 -1
- package/build/ts/server/version.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/build/ts/server/authenticate/public/authenticate.d.ts +0 -4
- package/build/ts/server/authenticate/public/authenticate.d.ts.map +0 -1
- 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
|
-
//
|
|
505
|
-
//
|
|
506
|
-
|
|
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}
|
|
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('
|
|
6
|
-
var validateSessionToken = require('
|
|
7
|
-
var getSessionTokenHeader = require('
|
|
8
|
-
var rejectBotRequest = require('
|
|
9
|
-
var respondToOptionsRequest = require('
|
|
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
|
|
12
|
-
return async function
|
|
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
|
|
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.
|
|
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$
|
|
11
|
-
var authenticate
|
|
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$
|
|
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:
|
|
59
|
-
webhook: authenticate
|
|
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)) {
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|