@agnostack/next-shopify 1.15.0-beta.13 → 1.15.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/lib/handlers/api/auth.js +15 -11
- package/dist/lib/handlers/api/auth.js.map +1 -1
- package/dist/lib/handlers/api/billing.js +13 -9
- package/dist/lib/handlers/api/billing.js.map +1 -1
- package/dist/lib/handlers/api/callback.js +37 -33
- package/dist/lib/handlers/api/callback.js.map +1 -1
- package/dist/lib/handlers/api/index.js +25 -7
- package/dist/lib/handlers/api/index.js.map +1 -1
- package/dist/lib/handlers/api/uninstall.js +12 -8
- package/dist/lib/handlers/api/uninstall.js.map +1 -1
- package/dist/lib/handlers/api/verifiable/appInstallation.js +11 -7
- package/dist/lib/handlers/api/verifiable/appInstallation.js.map +1 -1
- package/dist/lib/handlers/api/verifiable/graph.js +26 -22
- package/dist/lib/handlers/api/verifiable/graph.js.map +1 -1
- package/dist/lib/handlers/api/verifiable/index.js +21 -5
- package/dist/lib/handlers/api/verifiable/index.js.map +1 -1
- package/dist/lib/handlers/api/verifiable/proxy.js +39 -32
- package/dist/lib/handlers/api/verifiable/proxy.js.map +1 -1
- package/dist/lib/handlers/api/verifiable/rest.js +23 -19
- package/dist/lib/handlers/api/verifiable/rest.js.map +1 -1
- package/dist/lib/handlers/api/verifiable/token.js +27 -23
- package/dist/lib/handlers/api/verifiable/token.js.map +1 -1
- package/dist/lib/handlers/api/webhook.js +13 -9
- package/dist/lib/handlers/api/webhook.js.map +1 -1
- package/dist/lib/handlers/index.js +18 -2
- package/dist/lib/handlers/index.js.map +1 -1
- package/dist/lib/handlers/ssr/index.js +18 -2
- package/dist/lib/handlers/ssr/index.js.map +1 -1
- package/dist/lib/handlers/ssr/protect.js +24 -17
- package/dist/lib/handlers/ssr/protect.js.map +1 -1
- package/dist/lib/handlers/ssr/wrap.js +10 -6
- package/dist/lib/handlers/ssr/wrap.js.map +1 -1
- package/dist/lib/index.js +23 -4
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/utils/billing.js +23 -18
- package/dist/lib/utils/billing.js.map +1 -1
- package/dist/lib/utils/crypto.js +25 -15
- package/dist/lib/utils/crypto.js.map +1 -1
- package/dist/lib/utils/firebase.js +29 -17
- package/dist/lib/utils/firebase.js.map +1 -1
- package/dist/lib/utils/headers.js +13 -6
- package/dist/lib/utils/headers.js.map +1 -1
- package/dist/lib/utils/index.js +24 -8
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/session.js +64 -59
- package/dist/lib/utils/session.js.map +1 -1
- package/dist/lib/utils/shopify-api-js/oauth.js +23 -16
- package/dist/lib/utils/shopify-api-js/oauth.js.map +1 -1
- package/dist/lib/utils/shopify.js +37 -25
- package/dist/lib/utils/shopify.js.map +1 -1
- package/dist/lib/utils/token.js +15 -11
- package/dist/lib/utils/token.js.map +1 -1
- package/dist/plugins/index.js +18 -2
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/withShopify.js +83 -79
- package/dist/plugins/withShopify.js.map +1 -1
- package/dist/react/hooks/index.js +17 -1
- package/dist/react/hooks/index.js.map +1 -1
- package/dist/react/hooks/useVerification.js +11 -7
- package/dist/react/hooks/useVerification.js.map +1 -1
- package/dist/react/index.js +18 -2
- package/dist/react/index.js.map +1 -1
- package/dist/runtime/index.js +17 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/shared/constants.js +15 -11
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/datetime.js +110 -83
- package/dist/shared/datetime.js.map +1 -1
- package/dist/shared/display.js +231 -151
- package/dist/shared/display.js.map +1 -1
- package/dist/shared/errors.js +12 -5
- package/dist/shared/errors.js.map +1 -1
- package/dist/shared/graph.js +14 -11
- package/dist/shared/graph.js.map +1 -1
- package/dist/shared/index.js +27 -11
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/match.js +25 -17
- package/dist/shared/match.js.map +1 -1
- package/dist/shared/request.js +19 -13
- package/dist/shared/request.js.map +1 -1
- package/dist/shared/shopify.js +31 -21
- package/dist/shared/shopify.js.map +1 -1
- package/dist/shared/subtlecrypto.js +39 -13
- package/dist/shared/subtlecrypto.js.map +1 -1
- package/dist/shared/uuid.js +8 -3
- package/dist/shared/uuid.js.map +1 -1
- package/dist/shared/verification.js +28 -22
- package/dist/shared/verification.js.map +1 -1
- package/dist/umd/plugins.js +807 -0
- package/dist/umd/plugins.js.map +1 -0
- package/dist/verification/index.js +19 -3
- package/dist/verification/index.js.map +1 -1
- package/dist/verification/utils/errors.js +5 -1
- package/dist/verification/utils/errors.js.map +1 -1
- package/dist/verification/utils/index.js +18 -2
- package/dist/verification/utils/index.js.map +1 -1
- package/dist/verification/utils/rawbody.js +5 -1
- package/dist/verification/utils/rawbody.js.map +1 -1
- package/dist/verification/verification.js +23 -19
- package/dist/verification/verification.js.map +1 -1
- package/package.json +6 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -18,12 +19,14 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
19
|
}
|
|
19
20
|
return t;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.handleGraph = void 0;
|
|
24
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
25
|
+
const utils_1 = require("../../../utils");
|
|
26
|
+
const shared_1 = require("../../../../shared");
|
|
27
|
+
const verification_1 = require("../../../../verification");
|
|
28
|
+
const handleGraph = (serverRuntimeConfig) => {
|
|
29
|
+
const _getVerificationHelpers = (0, verification_1.getVerificationHelpers)(serverRuntimeConfig);
|
|
27
30
|
return (req, res, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
31
|
var _a, _b, _c;
|
|
29
32
|
let requestBody;
|
|
@@ -32,18 +35,18 @@ export const handleGraph = (serverRuntimeConfig) => {
|
|
|
32
35
|
({ requestBody, processResponse } = yield _getVerificationHelpers(req));
|
|
33
36
|
}
|
|
34
37
|
catch (error) {
|
|
35
|
-
if (error instanceof VerificationError) {
|
|
38
|
+
if (error instanceof verification_1.VerificationError) {
|
|
36
39
|
return res.status(error.code).json(Object.assign({ message: error.message }, error.data));
|
|
37
40
|
}
|
|
38
41
|
return res.status(403).json({ message: 'Verification error' });
|
|
39
42
|
}
|
|
40
43
|
const _d = (_a = req.query) !== null && _a !== void 0 ? _a : {}, { shop, apiVersion } = _d, _query = __rest(_d, ["shop", "apiVersion"]);
|
|
41
|
-
const _e = params !== null && params !== void 0 ? params : safeParse(requestBody || '{}'), { isOnline, query: graphQuery, variables: graphVariables, transform = (_data) => _data } = _e, graphParams = __rest(_e, ["isOnline", "query", "variables", "transform"]);
|
|
44
|
+
const _e = params !== null && params !== void 0 ? params : (0, shared_1.safeParse)(requestBody || '{}'), { isOnline, query: graphQuery, variables: graphVariables, transform = (_data) => _data } = _e, graphParams = __rest(_e, ["isOnline", "query", "variables", "transform"]);
|
|
42
45
|
let query = _query;
|
|
43
|
-
if (isType(query, 'string')) {
|
|
44
|
-
query = querystringToObject(query);
|
|
46
|
+
if ((0, shared_1.isType)(query, 'string')) {
|
|
47
|
+
query = (0, shared_1.querystringToObject)(query);
|
|
45
48
|
}
|
|
46
|
-
if (stringEmpty(shop) || stringEmpty(graphQuery)) {
|
|
49
|
+
if ((0, shared_1.stringEmpty)(shop) || (0, shared_1.stringEmpty)(graphQuery)) {
|
|
47
50
|
return res.status(400).json({ message: 'Invalid arguments' });
|
|
48
51
|
}
|
|
49
52
|
let statusCode;
|
|
@@ -51,21 +54,21 @@ export const handleGraph = (serverRuntimeConfig) => {
|
|
|
51
54
|
let headers = {};
|
|
52
55
|
let message = 'Error handling query call';
|
|
53
56
|
try {
|
|
54
|
-
const { getVerifiedClients } = yield getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
57
|
+
const { getVerifiedClients } = yield (0, utils_1.getShopifyHelpers)(serverRuntimeConfig, { shop });
|
|
55
58
|
const { Graphql } = yield getVerifiedClients({ req, res, shop, apiVersion, isOnline });
|
|
56
59
|
response = yield Graphql.query(Object.assign(Object.assign({ data: graphVariables ? {
|
|
57
60
|
query: graphQuery,
|
|
58
61
|
variables: graphVariables,
|
|
59
|
-
} : graphQuery }, objectNotEmpty(query) && { query }), graphParams));
|
|
62
|
+
} : graphQuery }, (0, shared_1.objectNotEmpty)(query) && { query }), graphParams));
|
|
60
63
|
statusCode = 200;
|
|
61
64
|
}
|
|
62
65
|
catch (error) {
|
|
63
66
|
statusCode = 500;
|
|
64
67
|
// TODO: clean up to share between rest and graph (pr at least keep in sync)
|
|
65
68
|
switch (true) {
|
|
66
|
-
case error instanceof ShopifyAuthenticationError: {
|
|
69
|
+
case error instanceof shared_1.ShopifyAuthenticationError: {
|
|
67
70
|
console.error(`${message}. Authentication Error.`, error);
|
|
68
|
-
const errorResponse = getAuthErrorResponse(serverRuntimeConfig, { error, shop });
|
|
71
|
+
const errorResponse = (0, utils_1.getAuthErrorResponse)(serverRuntimeConfig, { error, shop });
|
|
69
72
|
statusCode = errorResponse.statusCode;
|
|
70
73
|
message = errorResponse.message;
|
|
71
74
|
// HMMMM, should this be:
|
|
@@ -73,7 +76,7 @@ export const handleGraph = (serverRuntimeConfig) => {
|
|
|
73
76
|
headers = errorResponse.headers;
|
|
74
77
|
break;
|
|
75
78
|
}
|
|
76
|
-
case error instanceof BillingError: {
|
|
79
|
+
case error instanceof shopify_api_1.BillingError: {
|
|
77
80
|
// HMMMM, should this be:
|
|
78
81
|
// message = `${message}. Billing Error - ${error.message}.`
|
|
79
82
|
console.error(`${message}. Billing Error - ${error.message}.`, error.errorData);
|
|
@@ -83,8 +86,8 @@ export const handleGraph = (serverRuntimeConfig) => {
|
|
|
83
86
|
}
|
|
84
87
|
break;
|
|
85
88
|
}
|
|
86
|
-
case error instanceof GraphqlQueryError: {
|
|
87
|
-
const errorMessages = ensureArray((_b = error.response) === null || _b === void 0 ? void 0 : _b.errors).map(({ message }) => ensureString(message));
|
|
89
|
+
case error instanceof shopify_api_1.GraphqlQueryError: {
|
|
90
|
+
const errorMessages = (0, shared_1.ensureArray)((_b = error.response) === null || _b === void 0 ? void 0 : _b.errors).map(({ message }) => (0, shared_1.ensureString)(message));
|
|
88
91
|
console.error(`${message}. ${errorMessages.join('. ')}.`);
|
|
89
92
|
// HMMMM, should this be:
|
|
90
93
|
// message = `${message}. ${errorMessages.join('. ')}.`
|
|
@@ -104,11 +107,11 @@ export const handleGraph = (serverRuntimeConfig) => {
|
|
|
104
107
|
if (!(response === null || response === void 0 ? void 0 : response.body)) {
|
|
105
108
|
return res.status(statusCode).json({ message });
|
|
106
109
|
}
|
|
107
|
-
const responseBody = ensureObject((_c = response.body.data) !== null && _c !== void 0 ? _c : response.body);
|
|
110
|
+
const responseBody = (0, shared_1.ensureObject)((_c = response.body.data) !== null && _c !== void 0 ? _c : response.body);
|
|
108
111
|
const [_responseData] = Object.values(responseBody);
|
|
109
|
-
const _f = ensureObject(_responseData), { userErrors } = _f, responseData = __rest(_f, ["userErrors"]);
|
|
110
|
-
if (arrayNotEmpty(userErrors)) {
|
|
111
|
-
const errorMessages = ensureArray(userErrors).map(({ message }) => ensureString(message));
|
|
112
|
+
const _f = (0, shared_1.ensureObject)(_responseData), { userErrors } = _f, responseData = __rest(_f, ["userErrors"]);
|
|
113
|
+
if ((0, shared_1.arrayNotEmpty)(userErrors)) {
|
|
114
|
+
const errorMessages = (0, shared_1.ensureArray)(userErrors).map(({ message }) => (0, shared_1.ensureString)(message));
|
|
112
115
|
return res.status(500).json({ message: `${message}. ${errorMessages.join('. ')}.` });
|
|
113
116
|
}
|
|
114
117
|
// NOTE: sending in both to transform in case someone needs the userErrors
|
|
@@ -120,4 +123,5 @@ export const handleGraph = (serverRuntimeConfig) => {
|
|
|
120
123
|
}
|
|
121
124
|
});
|
|
122
125
|
};
|
|
126
|
+
exports.handleGraph = handleGraph;
|
|
123
127
|
//# sourceMappingURL=graph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/graph.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/graph.js"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./appInstallation"), exports);
|
|
18
|
+
__exportStar(require("./graph"), exports);
|
|
19
|
+
__exportStar(require("./proxy"), exports);
|
|
20
|
+
__exportStar(require("./rest"), exports);
|
|
21
|
+
__exportStar(require("./token"), exports);
|
|
6
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/index.js"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC;AACjC,0CAAuB;AACvB,0CAAuB;AACvB,yCAAsB;AACtB,0CAAuB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -18,24 +19,29 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
19
|
}
|
|
19
20
|
return t;
|
|
20
21
|
};
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.handleProxy = void 0;
|
|
21
27
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
const nextjs_cors_1 = __importDefault(require("nextjs-cors"));
|
|
29
|
+
const http_proxy_1 = __importDefault(require("http-proxy"));
|
|
30
|
+
const node_http_proxy_json_1 = __importDefault(require("node-http-proxy-json"));
|
|
31
|
+
const utils_1 = require("../../../utils");
|
|
32
|
+
const shared_1 = require("../../../../shared");
|
|
33
|
+
const verification_1 = require("../../../../verification");
|
|
28
34
|
const PROXY_TIMEOUT = 6000; // NOTE: 6 seconds
|
|
29
35
|
const verifyAppProxySignature = (signature, verifiable, hmacSecret) => {
|
|
30
|
-
const hmac = generateHMAC(objectToSortedString(verifiable), hmacSecret);
|
|
31
|
-
return compareHashes(signature, hmac);
|
|
36
|
+
const hmac = (0, utils_1.generateHMAC)((0, shared_1.objectToSortedString)(verifiable), hmacSecret);
|
|
37
|
+
return (0, utils_1.compareHashes)(signature, hmac);
|
|
32
38
|
};
|
|
33
|
-
|
|
39
|
+
const handleProxy = (serverRuntimeConfig, config) => {
|
|
34
40
|
const { generateReplacements } = config !== null && config !== void 0 ? config : {};
|
|
35
41
|
const { API_BASE_PATH, API_URLS, API_PATHS, APP_CONFIG, APP_BASE_URL, TARGET_SAFELIST, ORIGIN_SAFELIST, } = serverRuntimeConfig;
|
|
36
|
-
const _prepareHeaders = prepareHeaders(serverRuntimeConfig);
|
|
37
|
-
const _getVerificationHelpers = getVerificationHelpers(serverRuntimeConfig);
|
|
38
|
-
const _getVerifiedSessionData = getVerifiedSessionData(serverRuntimeConfig);
|
|
42
|
+
const _prepareHeaders = (0, utils_1.prepareHeaders)(serverRuntimeConfig);
|
|
43
|
+
const _getVerificationHelpers = (0, verification_1.getVerificationHelpers)(serverRuntimeConfig);
|
|
44
|
+
const _getVerifiedSessionData = (0, utils_1.getVerifiedSessionData)(serverRuntimeConfig);
|
|
39
45
|
return (req, res, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
46
|
var _a, _b, _c, _d;
|
|
41
47
|
const _e = (_a = req.headers) !== null && _a !== void 0 ? _a : {}, { origin, 'x-forwarded-for': _forwardFor, 'x-forwarded-proto': _forwardProto, 'x-forwarded-host': forwardHost, 'x-proxy-origin': proxyOrigin } = _e, _headers = __rest(_e, ["origin", 'x-forwarded-for', 'x-forwarded-proto', 'x-forwarded-host', 'x-proxy-origin']);
|
|
@@ -47,16 +53,16 @@ export const handleProxy = (serverRuntimeConfig, config) => {
|
|
|
47
53
|
let targetPath;
|
|
48
54
|
try {
|
|
49
55
|
// NOTE: GET requests are not always sending along origin
|
|
50
|
-
if (stringEmpty(origin)) {
|
|
56
|
+
if ((0, shared_1.stringEmpty)(origin)) {
|
|
51
57
|
req.headers = Object.assign(Object.assign({}, req.headers), { origin: proxyOrigin || forwardHost });
|
|
52
58
|
}
|
|
53
59
|
const _f = (_b = req.query) !== null && _b !== void 0 ? _b : {}, { signature, proxyEncoded } = _f, verifiable = __rest(_f, ["signature", "proxyEncoded"]);
|
|
54
60
|
const { shop: _shop, host, timestamp, path_prefix } = verifiable;
|
|
55
61
|
const shop = _shop || shopHeader;
|
|
56
|
-
yield
|
|
62
|
+
yield (0, nextjs_cors_1.default)(req, res, {
|
|
57
63
|
methods: ['PUT', 'PATCH', 'POST', 'DELETE'],
|
|
58
64
|
origin: (origin, callback) => {
|
|
59
|
-
const isSafelisted = matchHostname(origin, [
|
|
65
|
+
const isSafelisted = (0, shared_1.matchHostname)(origin, [
|
|
60
66
|
...ORIGIN_SAFELIST,
|
|
61
67
|
'cdn.shopify.com' // NOTE: this is the domain for checkout UI extensions
|
|
62
68
|
]);
|
|
@@ -69,10 +75,10 @@ export const handleProxy = (serverRuntimeConfig, config) => {
|
|
|
69
75
|
});
|
|
70
76
|
const { target: targetParam } = params !== null && params !== void 0 ? params : {};
|
|
71
77
|
// eslint-disable-next-line max-len
|
|
72
|
-
const _targetUrl = (stringEmpty(targetParam) || targetParam.startsWith('http')) ? targetParam : `${APP_BASE_URL}/${removeLeadingSlash(targetParam)}`;
|
|
73
|
-
const { origin: target, hostname, pathname, search } = stringNotEmpty(_targetUrl) ? new URL(_targetUrl) : {};
|
|
74
|
-
targetPath = [pathname, search].filter(stringNotEmpty).join('');
|
|
75
|
-
const safelistedTarget = matchHostname(hostname, Object.assign({ [new URL(APP_BASE_URL).hostname]: {
|
|
78
|
+
const _targetUrl = ((0, shared_1.stringEmpty)(targetParam) || targetParam.startsWith('http')) ? targetParam : `${APP_BASE_URL}/${(0, shared_1.removeLeadingSlash)(targetParam)}`;
|
|
79
|
+
const { origin: target, hostname, pathname, search } = (0, shared_1.stringNotEmpty)(_targetUrl) ? new URL(_targetUrl) : {};
|
|
80
|
+
targetPath = [pathname, search].filter(shared_1.stringNotEmpty).join('');
|
|
81
|
+
const safelistedTarget = (0, shared_1.matchHostname)(hostname, Object.assign({ [new URL(APP_BASE_URL).hostname]: {
|
|
76
82
|
// HMMM: can we generate our own session token (or use the current one) so as to not have to tell handleGraph/Rest to behave as offline?
|
|
77
83
|
// headers: {
|
|
78
84
|
// Authorization: 'Bearer {{setting.zendesk.token}}',
|
|
@@ -82,30 +88,30 @@ export const handleProxy = (serverRuntimeConfig, config) => {
|
|
|
82
88
|
host,
|
|
83
89
|
},
|
|
84
90
|
} }, TARGET_SAFELIST));
|
|
85
|
-
if (stringEmpty(targetPath) || (safelistedTarget == undefined)) {
|
|
91
|
+
if ((0, shared_1.stringEmpty)(targetPath) || (safelistedTarget == undefined)) {
|
|
86
92
|
return res.status(407).json({ message: 'Unproxyable target' });
|
|
87
93
|
}
|
|
88
94
|
if (!shop || !host || !extensionPoint || !signature || !proxyEncoded) {
|
|
89
95
|
return res.status(400).json({ message: 'Invalid or missing headers', extensionPoint });
|
|
90
96
|
}
|
|
91
|
-
const isShopifyOriginOrRelative = stringNotEmpty(ensureString(path_prefix).startsWith('http')
|
|
92
|
-
? sanitizeShop(new URL(path_prefix).hostname)
|
|
97
|
+
const isShopifyOriginOrRelative = (0, shared_1.stringNotEmpty)((0, shared_1.ensureString)(path_prefix).startsWith('http')
|
|
98
|
+
? (0, shared_1.sanitizeShop)(new URL(path_prefix).hostname)
|
|
93
99
|
: path_prefix);
|
|
94
100
|
// TODO: once Shopify fixes CORS issue when origin is cdn.shopify.com, update this!
|
|
95
101
|
if (!verifyAppProxySignature(signature, verifiable, isShopifyOriginOrRelative ? APP_CONFIG.apiSecretKey : timestamp)) {
|
|
96
102
|
return res.status(403).json({ message: 'Invalid signature' });
|
|
97
103
|
}
|
|
98
|
-
const isTokenRequest = ((targetParam === null || targetParam === void 0 ? void 0 : targetParam.startsWith(API_PATHS[API_ROUTE_NAMES.SESSION_TOKEN])) ||
|
|
99
|
-
(targetParam === null || targetParam === void 0 ? void 0 : targetParam.startsWith(API_URLS[API_ROUTE_NAMES.SESSION_TOKEN])));
|
|
104
|
+
const isTokenRequest = ((targetParam === null || targetParam === void 0 ? void 0 : targetParam.startsWith(API_PATHS[shared_1.API_ROUTE_NAMES.SESSION_TOKEN])) ||
|
|
105
|
+
(targetParam === null || targetParam === void 0 ? void 0 : targetParam.startsWith(API_URLS[shared_1.API_ROUTE_NAMES.SESSION_TOKEN])));
|
|
100
106
|
if (!isTokenRequest) {
|
|
101
107
|
const isVerifiedSession = yield _getVerifiedSessionData(sessionToken, { shop, host });
|
|
102
108
|
if (!isVerifiedSession) {
|
|
103
109
|
return res.status(403).json({ message: 'Unverified signature' });
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
|
-
const { headers: targetHeaders, params: targetParams } = ensureObject(safelistedTarget);
|
|
107
|
-
if (objectNotEmpty(targetParams)) {
|
|
108
|
-
targetPath = appendQuery(targetPath, new URLSearchParams(targetParams).toString());
|
|
112
|
+
const { headers: targetHeaders, params: targetParams } = (0, shared_1.ensureObject)(safelistedTarget);
|
|
113
|
+
if ((0, shared_1.objectNotEmpty)(targetParams)) {
|
|
114
|
+
targetPath = (0, shared_1.appendQuery)(targetPath, new URLSearchParams(targetParams).toString());
|
|
109
115
|
}
|
|
110
116
|
let requestBody;
|
|
111
117
|
let processResponse;
|
|
@@ -116,7 +122,7 @@ export const handleProxy = (serverRuntimeConfig, config) => {
|
|
|
116
122
|
}));
|
|
117
123
|
}
|
|
118
124
|
catch (error) {
|
|
119
|
-
if (error instanceof VerificationError) {
|
|
125
|
+
if (error instanceof verification_1.VerificationError) {
|
|
120
126
|
return res.status(error.code).json({ message: error.message });
|
|
121
127
|
}
|
|
122
128
|
return res.status(403).json({ message: 'Verification error' });
|
|
@@ -127,7 +133,7 @@ export const handleProxy = (serverRuntimeConfig, config) => {
|
|
|
127
133
|
appId,
|
|
128
134
|
headers: Object.assign(Object.assign({}, _headers), targetHeaders),
|
|
129
135
|
});
|
|
130
|
-
const proxy =
|
|
136
|
+
const proxy = http_proxy_1.default.createProxy();
|
|
131
137
|
return new Promise((resolve, reject) => {
|
|
132
138
|
req.url = targetPath;
|
|
133
139
|
if (headers) {
|
|
@@ -141,7 +147,7 @@ export const handleProxy = (serverRuntimeConfig, config) => {
|
|
|
141
147
|
}
|
|
142
148
|
});
|
|
143
149
|
proxy.on('proxyRes', function (proxyRes, proxyResRequest, proxyResResponse) {
|
|
144
|
-
|
|
150
|
+
(0, node_http_proxy_json_1.default)(proxyResResponse, proxyRes, function (proxyResBody) {
|
|
145
151
|
return __awaiter(this, void 0, void 0, function* () {
|
|
146
152
|
return processResponse(proxyResBody);
|
|
147
153
|
});
|
|
@@ -163,12 +169,13 @@ export const handleProxy = (serverRuntimeConfig, config) => {
|
|
|
163
169
|
}
|
|
164
170
|
catch (error) {
|
|
165
171
|
// eslint-disable-next-line max-len
|
|
166
|
-
console.error(`Error handling proxy request: ${targetPath}`, cleanObject(Object.assign({ type: error === null || error === void 0 ? void 0 : error.type, code: error === null || error === void 0 ? void 0 : error.code, name: error === null || error === void 0 ? void 0 : error.name, message: error === null || error === void 0 ? void 0 : error.message }, error === null || error === void 0 ? void 0 : error.data)));
|
|
167
|
-
if (error instanceof ShopifySessionInvalidError) {
|
|
172
|
+
console.error(`Error handling proxy request: ${targetPath}`, (0, shared_1.cleanObject)(Object.assign({ type: error === null || error === void 0 ? void 0 : error.type, code: error === null || error === void 0 ? void 0 : error.code, name: error === null || error === void 0 ? void 0 : error.name, message: error === null || error === void 0 ? void 0 : error.message }, error === null || error === void 0 ? void 0 : error.data)));
|
|
173
|
+
if (error instanceof shared_1.ShopifySessionInvalidError) {
|
|
168
174
|
return res.status((_c = error === null || error === void 0 ? void 0 : error.code) !== null && _c !== void 0 ? _c : 407).json({ message: error.message, type: (_d = error === null || error === void 0 ? void 0 : error.type) !== null && _d !== void 0 ? _d : 'ShopifySessionInvalidError' });
|
|
169
175
|
}
|
|
170
176
|
return res.status(400).json({ message: (error === null || error === void 0 ? void 0 : error.message) || 'Error handling proxy request', targetPath });
|
|
171
177
|
}
|
|
172
178
|
});
|
|
173
179
|
};
|
|
180
|
+
exports.handleProxy = handleProxy;
|
|
174
181
|
//# sourceMappingURL=proxy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/proxy.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/proxy.js"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -18,12 +19,14 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
19
|
}
|
|
19
20
|
return t;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.handleRest = void 0;
|
|
24
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
25
|
+
const utils_1 = require("../../../utils");
|
|
26
|
+
const shared_1 = require("../../../../shared");
|
|
27
|
+
const verification_1 = require("../../../../verification");
|
|
28
|
+
const handleRest = (serverRuntimeConfig) => {
|
|
29
|
+
const _getVerificationHelpers = (0, verification_1.getVerificationHelpers)(serverRuntimeConfig);
|
|
27
30
|
return (req, res, _params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
31
|
let requestBody;
|
|
29
32
|
let processResponse;
|
|
@@ -31,7 +34,7 @@ export const handleRest = (serverRuntimeConfig) => {
|
|
|
31
34
|
({ requestBody, processResponse } = yield _getVerificationHelpers(req));
|
|
32
35
|
}
|
|
33
36
|
catch (error) {
|
|
34
|
-
if (error instanceof VerificationError) {
|
|
37
|
+
if (error instanceof verification_1.VerificationError) {
|
|
35
38
|
return res.status(error.code).json(Object.assign({ message: error.message }, error.data));
|
|
36
39
|
}
|
|
37
40
|
return res.status(403).json({ message: 'Verification error' });
|
|
@@ -39,7 +42,7 @@ export const handleRest = (serverRuntimeConfig) => {
|
|
|
39
42
|
const { query: _query, method: _method } = req;
|
|
40
43
|
const { shop } = _query !== null && _query !== void 0 ? _query : {};
|
|
41
44
|
const _a = _params !== null && _params !== void 0 ? _params : {}, { path, isOnline, method: methodParam, query: queryParam, body: bodyParam, transform = (_data) => _data } = _a, params = __rest(_a, ["path", "isOnline", "method", "query", "body", "transform"]);
|
|
42
|
-
if (stringEmpty(shop) || stringEmpty(path)) {
|
|
45
|
+
if ((0, shared_1.stringEmpty)(shop) || (0, shared_1.stringEmpty)(path)) {
|
|
43
46
|
return {
|
|
44
47
|
statusCode: 400,
|
|
45
48
|
message: 'Invalid arguments',
|
|
@@ -51,17 +54,17 @@ export const handleRest = (serverRuntimeConfig) => {
|
|
|
51
54
|
let headers = {};
|
|
52
55
|
try {
|
|
53
56
|
let queryData = queryParam !== null && queryParam !== void 0 ? queryParam : _query;
|
|
54
|
-
if (isType(queryData, 'string')) {
|
|
55
|
-
queryData = querystringToObject(queryData);
|
|
57
|
+
if ((0, shared_1.isType)(queryData, 'string')) {
|
|
58
|
+
queryData = (0, shared_1.querystringToObject)(queryData);
|
|
56
59
|
}
|
|
57
|
-
const _b = ensureObject(queryData), { apiVersion } = _b, query = __rest(_b, ["apiVersion"]);
|
|
58
|
-
const body = safeParse(bodyParam !== null && bodyParam !== void 0 ? bodyParam : requestBody);
|
|
59
|
-
const method = ensureString(methodParam !== null && methodParam !== void 0 ? methodParam : _method).toLowerCase();
|
|
60
|
-
const { getVerifiedClients } = yield getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
60
|
+
const _b = (0, shared_1.ensureObject)(queryData), { apiVersion } = _b, query = __rest(_b, ["apiVersion"]);
|
|
61
|
+
const body = (0, shared_1.safeParse)(bodyParam !== null && bodyParam !== void 0 ? bodyParam : requestBody);
|
|
62
|
+
const method = (0, shared_1.ensureString)(methodParam !== null && methodParam !== void 0 ? methodParam : _method).toLowerCase();
|
|
63
|
+
const { getVerifiedClients } = yield (0, utils_1.getShopifyHelpers)(serverRuntimeConfig, { shop });
|
|
61
64
|
const { Rest } = yield getVerifiedClients({ req, res, shop, apiVersion, isOnline });
|
|
62
65
|
response = yield Rest[method](Object.assign({ path,
|
|
63
66
|
query,
|
|
64
|
-
body, type: DataType.JSON }, params));
|
|
67
|
+
body, type: shopify_api_1.DataType.JSON }, params));
|
|
65
68
|
statusCode = 200;
|
|
66
69
|
}
|
|
67
70
|
catch (error) {
|
|
@@ -69,15 +72,15 @@ export const handleRest = (serverRuntimeConfig) => {
|
|
|
69
72
|
statusCode = 500;
|
|
70
73
|
// TODO: clean up to share between rest and graph (pr at least keep in sync)
|
|
71
74
|
switch (true) {
|
|
72
|
-
case error instanceof ShopifyAuthenticationError: {
|
|
75
|
+
case error instanceof shared_1.ShopifyAuthenticationError: {
|
|
73
76
|
console.error(`${message}. Authentication Error.`, error);
|
|
74
|
-
const errorResponse = getAuthErrorResponse(serverRuntimeConfig, { error, shop });
|
|
77
|
+
const errorResponse = (0, utils_1.getAuthErrorResponse)(serverRuntimeConfig, { error, shop });
|
|
75
78
|
statusCode = errorResponse.statusCode;
|
|
76
79
|
message = errorResponse.message;
|
|
77
80
|
headers = errorResponse.headers;
|
|
78
81
|
break;
|
|
79
82
|
}
|
|
80
|
-
case error instanceof BillingError: {
|
|
83
|
+
case error instanceof shopify_api_1.BillingError: {
|
|
81
84
|
console.error(`${message}. Billing Error - ${error.message}.`, error.errorData);
|
|
82
85
|
statusCode = 402;
|
|
83
86
|
if (error === null || error === void 0 ? void 0 : error.message) {
|
|
@@ -99,7 +102,7 @@ export const handleRest = (serverRuntimeConfig) => {
|
|
|
99
102
|
return res.status(statusCode).json(transformedResponse);
|
|
100
103
|
}
|
|
101
104
|
// HMMMMM???
|
|
102
|
-
if ((params === null || params === void 0 ? void 0 : params.type) && ![DataType.GraphQL, DataType.JSON].includes(params.type)) {
|
|
105
|
+
if ((params === null || params === void 0 ? void 0 : params.type) && ![shopify_api_1.DataType.GraphQL, shopify_api_1.DataType.JSON].includes(params.type)) {
|
|
103
106
|
const transformedResponse = yield processResponse(response);
|
|
104
107
|
return res.status(statusCode).send(transformedResponse);
|
|
105
108
|
}
|
|
@@ -111,4 +114,5 @@ export const handleRest = (serverRuntimeConfig) => {
|
|
|
111
114
|
return res.status(statusCode).json(transformedResponse);
|
|
112
115
|
});
|
|
113
116
|
};
|
|
117
|
+
exports.handleRest = handleRest;
|
|
114
118
|
//# sourceMappingURL=rest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/rest.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/rest.js"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -18,17 +19,19 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
19
|
}
|
|
19
20
|
return t;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.handleSessionToken = void 0;
|
|
24
|
+
const js_base64_1 = require("js-base64");
|
|
25
|
+
const jsonwebtoken_1 = require("jsonwebtoken");
|
|
26
|
+
const uuid_1 = require("uuid");
|
|
27
|
+
const utils_1 = require("../../../utils");
|
|
28
|
+
const shared_1 = require("../../../../shared");
|
|
29
|
+
const verification_1 = require("../../../../verification");
|
|
27
30
|
// NOTE: typically handling: "/api/token"
|
|
28
|
-
|
|
31
|
+
const handleSessionToken = (serverRuntimeConfig, _a = {}) => {
|
|
29
32
|
var { signingSecret: _signingSecret } = _a, signingData = __rest(_a, ["signingSecret"]);
|
|
30
33
|
const { APP_CONFIG } = serverRuntimeConfig !== null && serverRuntimeConfig !== void 0 ? serverRuntimeConfig : {};
|
|
31
|
-
const _getVerificationHelpers = getVerificationHelpers(serverRuntimeConfig);
|
|
34
|
+
const _getVerificationHelpers = (0, verification_1.getVerificationHelpers)(serverRuntimeConfig);
|
|
32
35
|
return (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
36
|
var _b, _c;
|
|
34
37
|
const { host } = (_b = req.query) !== null && _b !== void 0 ? _b : {};
|
|
@@ -36,7 +39,7 @@ export const handleSessionToken = (serverRuntimeConfig, _a = {}) => {
|
|
|
36
39
|
// TODO: pass along providerSetId??
|
|
37
40
|
'x-client-id': clientId, 'x-shop-domain': shopDomain, 'x-shopify-shop-domain': shopifyShopDomain, 'x-shopify-shop': shop = shopifyShopDomain !== null && shopifyShopDomain !== void 0 ? shopifyShopDomain : shopDomain } = _d, headers = __rest(_d, ['x-shopify-app-installation-id', 'x-shopify-app-id', 'x-app-installation-id', 'x-app-id', 'x-client-id', 'x-shop-domain', 'x-shopify-shop-domain', 'x-shopify-shop']);
|
|
38
41
|
// TODO: un-btoa the host and check??
|
|
39
|
-
if (stringEmpty(shop) || stringEmpty(host)) {
|
|
42
|
+
if ((0, shared_1.stringEmpty)(shop) || (0, shared_1.stringEmpty)(host)) {
|
|
40
43
|
return res.status(412).json({ message: 'Missing required param' });
|
|
41
44
|
}
|
|
42
45
|
let requestBody;
|
|
@@ -45,29 +48,29 @@ export const handleSessionToken = (serverRuntimeConfig, _a = {}) => {
|
|
|
45
48
|
({ requestBody, processResponse } = yield _getVerificationHelpers(req));
|
|
46
49
|
}
|
|
47
50
|
catch (error) {
|
|
48
|
-
if (error instanceof VerificationError) {
|
|
51
|
+
if (error instanceof verification_1.VerificationError) {
|
|
49
52
|
return res.status(error.code).json(Object.assign({ message: error.message }, error.data));
|
|
50
53
|
}
|
|
51
54
|
return res.status(403).json({ message: 'Verification error' });
|
|
52
55
|
}
|
|
53
56
|
try {
|
|
54
57
|
const appClaims = Object.entries(headers).reduce((_appClaims, [headerKey, headerValue]) => (Object.assign(Object.assign({}, _appClaims), headerKey.startsWith('x-shopify-app-metafield-') && {
|
|
55
|
-
[snakecase(headerKey.replace('x-shopify-app-metafield-', ''))]: headerValue,
|
|
56
|
-
})), Object.assign(Object.assign({}, appId && { app_id: normalizeShopifyId(appId).id }), appInstallationId && { installation_id: normalizeShopifyId(appInstallationId).id }));
|
|
58
|
+
[(0, shared_1.snakecase)(headerKey.replace('x-shopify-app-metafield-', ''))]: headerValue,
|
|
59
|
+
})), Object.assign(Object.assign({}, appId && { app_id: (0, shared_1.normalizeShopifyId)(appId).id }), appInstallationId && { installation_id: (0, shared_1.normalizeShopifyId)(appInstallationId).id }));
|
|
57
60
|
const _e = requestBody !== null && requestBody !== void 0 ? requestBody : {}, { sub, aud: _aud } = _e, body = __rest(_e, ["sub", "aud"]);
|
|
58
|
-
const aud = [clientId, _aud, APP_CONFIG.apiKey].find(stringNotEmpty);
|
|
61
|
+
const aud = [clientId, _aud, APP_CONFIG.apiKey].find(shared_1.stringNotEmpty);
|
|
59
62
|
let { dest, iss, sid, jti } = body, tokenBody = __rest(body, ["dest", "iss", "sid", "jti"]);
|
|
60
|
-
if (stringEmpty(dest)) {
|
|
63
|
+
if ((0, shared_1.stringEmpty)(dest)) {
|
|
61
64
|
dest = shop;
|
|
62
65
|
}
|
|
63
|
-
if (stringEmpty(iss)) {
|
|
64
|
-
iss = decode(host);
|
|
66
|
+
if ((0, shared_1.stringEmpty)(iss)) {
|
|
67
|
+
iss = (0, js_base64_1.decode)(host);
|
|
65
68
|
}
|
|
66
|
-
if (stringEmpty(sid)) {
|
|
67
|
-
sid =
|
|
69
|
+
if ((0, shared_1.stringEmpty)(sid)) {
|
|
70
|
+
sid = (0, uuid_1.v4)();
|
|
68
71
|
}
|
|
69
|
-
if (stringEmpty(jti)) {
|
|
70
|
-
jti =
|
|
72
|
+
if ((0, shared_1.stringEmpty)(jti)) {
|
|
73
|
+
jti = (0, uuid_1.v4)();
|
|
71
74
|
sid = `${sid}.${jti}`;
|
|
72
75
|
}
|
|
73
76
|
const payload = Object.assign(Object.assign(Object.assign({ shop,
|
|
@@ -78,9 +81,9 @@ export const handleSessionToken = (serverRuntimeConfig, _a = {}) => {
|
|
|
78
81
|
sid,
|
|
79
82
|
aud }, sub && { sub }), appClaims), tokenBody);
|
|
80
83
|
// NOTE: signingSecret should only be sent in here from the /api/token/zendesk endpoint
|
|
81
|
-
const signingSecret = _signingSecret || generateHMAC(objectToSortedString(payload), APP_CONFIG.apiSecretKey);
|
|
82
|
-
const token = sign(payload, signingSecret, signingData);
|
|
83
|
-
if (stringEmpty(token)) {
|
|
84
|
+
const signingSecret = _signingSecret || (0, utils_1.generateHMAC)((0, shared_1.objectToSortedString)(payload), APP_CONFIG.apiSecretKey);
|
|
85
|
+
const token = (0, jsonwebtoken_1.sign)(payload, signingSecret, signingData);
|
|
86
|
+
if ((0, shared_1.stringEmpty)(token)) {
|
|
84
87
|
throw new Error('Error signing token');
|
|
85
88
|
}
|
|
86
89
|
const response = yield processResponse({ token });
|
|
@@ -92,4 +95,5 @@ export const handleSessionToken = (serverRuntimeConfig, _a = {}) => {
|
|
|
92
95
|
}
|
|
93
96
|
});
|
|
94
97
|
};
|
|
98
|
+
exports.handleSessionToken = handleSessionToken;
|
|
95
99
|
//# sourceMappingURL=token.js.map
|