@agnostack/next-shopify 1.9.0-beta.1 → 1.9.0-beta.3
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/dist/lib/handlers/api/appInstallation.js +4 -4
- package/dist/lib/handlers/api/appInstallation.js.map +1 -1
- package/dist/lib/handlers/api/auth.js +5 -4
- package/dist/lib/handlers/api/auth.js.map +1 -1
- package/dist/lib/handlers/api/billing.js +3 -2
- package/dist/lib/handlers/api/billing.js.map +1 -1
- package/dist/lib/handlers/api/callback.js +24 -23
- package/dist/lib/handlers/api/callback.js.map +1 -1
- package/dist/lib/handlers/api/graph.js +11 -10
- package/dist/lib/handlers/api/graph.js.map +1 -1
- package/dist/lib/handlers/api/proxy.js +12 -11
- package/dist/lib/handlers/api/proxy.js.map +1 -1
- package/dist/lib/handlers/api/rest.js +7 -6
- package/dist/lib/handlers/api/rest.js.map +1 -1
- package/dist/lib/handlers/api/uninstall.js +3 -2
- package/dist/lib/handlers/api/uninstall.js.map +1 -1
- package/dist/lib/handlers/api/webhook.js +3 -2
- package/dist/lib/handlers/api/webhook.js.map +1 -1
- package/dist/lib/handlers/ssr/protect.js +10 -9
- package/dist/lib/handlers/ssr/protect.js.map +1 -1
- package/dist/lib/handlers/ssr/wrap.js +2 -1
- package/dist/lib/handlers/ssr/wrap.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +1 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/utils/billing.js +13 -13
- package/dist/lib/utils/billing.js.map +1 -1
- package/dist/lib/utils/crypto.js +3 -3
- package/dist/lib/utils/crypto.js.map +1 -1
- package/dist/lib/utils/firebase.js +6 -6
- package/dist/lib/utils/firebase.js.map +1 -1
- package/dist/lib/utils/index.d.ts +0 -1
- package/dist/lib/utils/index.js +0 -4
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/session.js +15 -15
- package/dist/lib/utils/session.js.map +1 -1
- package/dist/lib/utils/shopify.d.ts +11 -0
- package/dist/lib/utils/shopify.js +33 -15
- package/dist/lib/utils/shopify.js.map +1 -1
- package/dist/lib/withShopify.js +60 -59
- package/dist/lib/withShopify.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/display.js.map +1 -0
- package/dist/{runtime/utils → shared}/errors.d.ts +0 -11
- package/dist/{runtime/utils → shared}/errors.js +1 -20
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/index.js.map +1 -0
- package/package.json +1 -1
- package/dist/lib/utils/runtime.d.ts +0 -1
- package/dist/lib/utils/runtime.js +0 -14
- package/dist/lib/utils/runtime.js.map +0 -1
- package/dist/runtime/utils/constants.js.map +0 -1
- package/dist/runtime/utils/display.js.map +0 -1
- package/dist/runtime/utils/errors.js.map +0 -1
- package/dist/runtime/utils/index.js.map +0 -1
- /package/dist/{runtime/utils → shared}/constants.d.ts +0 -0
- /package/dist/{runtime/utils → shared}/constants.js +0 -0
- /package/dist/{runtime/utils → shared}/display.d.ts +0 -0
- /package/dist/{runtime/utils → shared}/display.js +0 -0
- /package/dist/{runtime/utils → shared}/index.d.ts +0 -0
- /package/dist/{runtime/utils → shared}/index.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/webhook.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wDAAiC;AAEjC,
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/webhook.js"],"names":[],"mappings":"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"}
|
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.protectRoute = void 0;
|
|
4
4
|
const utils_1 = require("../../utils");
|
|
5
|
+
const shared_1 = require("../../../shared");
|
|
5
6
|
const protectRoute = (serverRuntimeConfig, props) => async ({ req, res, query, locale } = {}, data) => {
|
|
6
7
|
var _a, _b, _c, _d;
|
|
7
8
|
const { PAGE_PATHS, API_PATHS } = serverRuntimeConfig;
|
|
8
9
|
const shop = (_a = query === null || query === void 0 ? void 0 : query.shop) !== null && _a !== void 0 ? _a : (_b = req.query) === null || _b === void 0 ? void 0 : _b.shop;
|
|
9
10
|
const embedded = (_c = query === null || query === void 0 ? void 0 : query.embedded) !== null && _c !== void 0 ? _c : (_d = req.query) === null || _d === void 0 ? void 0 : _d.embedded;
|
|
10
|
-
if (
|
|
11
|
+
if (shared_1.stringEmpty(shop)) {
|
|
11
12
|
return {
|
|
12
13
|
redirect: {
|
|
13
|
-
destination: `${PAGE_PATHS[
|
|
14
|
+
destination: `${PAGE_PATHS[shared_1.PAGE_ROUTE_NAMES.ERROR]}?code=no_shop_provided&type=protectRoute`,
|
|
14
15
|
permanent: false,
|
|
15
16
|
},
|
|
16
17
|
};
|
|
@@ -18,18 +19,18 @@ const protectRoute = (serverRuntimeConfig, props) => async ({ req, res, query, l
|
|
|
18
19
|
// NOTE: this should handle running in next to test non-shopify functionality
|
|
19
20
|
if (utils_1.allowLocalBypass(serverRuntimeConfig)) {
|
|
20
21
|
return {
|
|
21
|
-
props:
|
|
22
|
+
props: shared_1.cleanObject(Object.assign(Object.assign({ locale }, props), data)),
|
|
22
23
|
};
|
|
23
24
|
}
|
|
24
25
|
const { shopify, findSessionIds, loadSession } = await utils_1.getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
25
26
|
res.setHeader('Content-Security-Policy', utils_1.getSecurityHeader(shop, shopify.config));
|
|
26
27
|
const existingSessionIds = await findSessionIds(shop);
|
|
27
|
-
if (
|
|
28
|
+
if (shared_1.arrayEmpty(existingSessionIds)) {
|
|
28
29
|
// TODO: explore objectToQuerystring
|
|
29
30
|
const queryParams = new URLSearchParams(Object.assign(Object.assign({}, query), { shop })).toString();
|
|
30
31
|
return {
|
|
31
32
|
redirect: {
|
|
32
|
-
destination: `${API_PATHS[
|
|
33
|
+
destination: `${API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_ONLINE]}?${queryParams}`,
|
|
33
34
|
permanent: false,
|
|
34
35
|
},
|
|
35
36
|
};
|
|
@@ -50,12 +51,12 @@ const protectRoute = (serverRuntimeConfig, props) => async ({ req, res, query, l
|
|
|
50
51
|
};
|
|
51
52
|
}
|
|
52
53
|
catch (error) {
|
|
53
|
-
if (error instanceof
|
|
54
|
+
if (error instanceof shared_1.ShopifyAuthenticationError) {
|
|
54
55
|
// TODO: explore objectToQuerystring
|
|
55
|
-
const queryParams = new URLSearchParams(Object.assign(Object.assign({}, query), { shop, reAuth: (error instanceof
|
|
56
|
+
const queryParams = new URLSearchParams(Object.assign(Object.assign({}, query), { shop, reAuth: (error instanceof shared_1.ShopifySessionAuthenticationError) })).toString();
|
|
56
57
|
return {
|
|
57
58
|
redirect: {
|
|
58
|
-
destination: `${API_PATHS[
|
|
59
|
+
destination: `${API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_ONLINE]}?${queryParams}`,
|
|
59
60
|
permanent: false,
|
|
60
61
|
},
|
|
61
62
|
};
|
|
@@ -65,7 +66,7 @@ const protectRoute = (serverRuntimeConfig, props) => async ({ req, res, query, l
|
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
return {
|
|
68
|
-
props:
|
|
69
|
+
props: shared_1.cleanObject(Object.assign(Object.assign({ locale }, props), data)),
|
|
69
70
|
};
|
|
70
71
|
};
|
|
71
72
|
exports.protectRoute = protectRoute;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protect.js","sourceRoot":"","sources":["../../../../src/lib/handlers/ssr/protect.js"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"protect.js","sourceRoot":"","sources":["../../../../src/lib/handlers/ssr/protect.js"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.wrapRoute = void 0;
|
|
4
|
+
const shared_1 = require("../../../shared");
|
|
4
5
|
const utils_1 = require("../../utils");
|
|
5
6
|
const wrapRoute = (serverRuntimeConfig, props) => async ({ req, res, query, locale } = {}, data) => {
|
|
6
7
|
var _a, _b;
|
|
@@ -8,7 +9,7 @@ const wrapRoute = (serverRuntimeConfig, props) => async ({ req, res, query, loca
|
|
|
8
9
|
const shopify = utils_1.getInitializedShopify(serverRuntimeConfig);
|
|
9
10
|
res.setHeader('Content-Security-Policy', utils_1.getSecurityHeader(shop, shopify.config));
|
|
10
11
|
return {
|
|
11
|
-
props:
|
|
12
|
+
props: shared_1.cleanObject(Object.assign(Object.assign({ locale }, props), data)),
|
|
12
13
|
};
|
|
13
14
|
};
|
|
14
15
|
exports.wrapRoute = wrapRoute;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../../../src/lib/handlers/ssr/wrap.js"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../../../src/lib/handlers/ssr/wrap.js"],"names":[],"mappings":";;;AAAA,4CAA6C;AAC7C,uCAAsE;AAE/D,MAAM,SAAS,GAAG,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE;;IACxG,MAAM,IAAI,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,mCAAI,MAAA,GAAG,CAAC,KAAK,0CAAE,IAAI,CAAA;IAE3C,MAAM,OAAO,GAAG,6BAAqB,CAAC,mBAAmB,CAAC,CAAA;IAC1D,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,yBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAEjF,OAAO;QACL,KAAK,EAAE,oBAAW,+BAChB,MAAM,IACH,KAAK,GACL,IAAI,EACP;KACH,CAAA;AACH,CAAC,CAAA;AAbY,QAAA,SAAS,aAarB"}
|
package/dist/lib/index.d.ts
CHANGED
package/dist/lib/index.js
CHANGED
|
@@ -11,9 +11,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.decodeShopData = exports.getSanitizedShopData = exports.getShopifyHelpers = void 0;
|
|
14
|
+
__exportStar(require("../shared"), exports);
|
|
14
15
|
__exportStar(require("./handlers"), exports);
|
|
15
16
|
__exportStar(require("./withShopify"), exports);
|
|
16
|
-
__exportStar(require("./utils/runtime"), exports);
|
|
17
17
|
var session_1 = require("./utils/session");
|
|
18
18
|
Object.defineProperty(exports, "getShopifyHelpers", { enumerable: true, get: function () { return session_1.getShopifyHelpers; } });
|
|
19
19
|
var shopify_1 = require("./utils/shopify");
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA0B;AAC1B,gDAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,4CAAyB;AACzB,6CAA0B;AAC1B,gDAA6B;AAC7B,2CAAmD;AAA1C,4GAAA,iBAAiB,OAAA;AAC1B,2CAAsE;AAA7D,+GAAA,oBAAoB,OAAA;AAAE,yGAAA,cAAc,OAAA"}
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generatePaymentConfig = exports.ensureBilling = void 0;
|
|
4
4
|
const shopify_api_1 = require("@shopify/shopify-api");
|
|
5
|
-
const
|
|
5
|
+
const shared_1 = require("../../shared");
|
|
6
6
|
const ensureBilling = async (paymentConfig, { shopify, session, skipBillingCheck }) => {
|
|
7
|
-
const { shop, accessToken } =
|
|
8
|
-
const { name: plan, test, config, required } =
|
|
7
|
+
const { shop, accessToken } = shared_1.ensureObject(session);
|
|
8
|
+
const { name: plan, test, config, required } = shared_1.ensureObject(paymentConfig);
|
|
9
9
|
if (!required) {
|
|
10
10
|
return undefined;
|
|
11
11
|
}
|
|
12
|
-
const isTest =
|
|
13
|
-
const hasValidBilling = (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
Object.values(
|
|
12
|
+
const isTest = shared_1.isTrue(test);
|
|
13
|
+
const hasValidBilling = (shared_1.stringNotEmpty(shop) &&
|
|
14
|
+
shared_1.stringNotEmpty(accessToken) &&
|
|
15
|
+
shared_1.stringNotEmpty(plan) &&
|
|
16
|
+
shared_1.objectNotEmpty(config) &&
|
|
17
|
+
Object.values(shared_1.BILLING_INTERVALS).includes(config === null || config === void 0 ? void 0 : config.interval));
|
|
18
18
|
if (!hasValidBilling) {
|
|
19
19
|
throw new shopify_api_1.BillingError({
|
|
20
20
|
message: 'Invalid billing configuration',
|
|
@@ -22,7 +22,7 @@ const ensureBilling = async (paymentConfig, { shopify, session, skipBillingCheck
|
|
|
22
22
|
}
|
|
23
23
|
try {
|
|
24
24
|
// NOTE: this ensures while in "review" mode that we rebill each time
|
|
25
|
-
if (!
|
|
25
|
+
if (!shared_1.isTrue(skipBillingCheck) && shared_1.isTrue(await shopify.billing.check({ plans: [plan], isTest, session }))) {
|
|
26
26
|
return undefined;
|
|
27
27
|
}
|
|
28
28
|
return shopify.billing.request({ plan, isTest, session });
|
|
@@ -37,14 +37,14 @@ const ensureBilling = async (paymentConfig, { shopify, session, skipBillingCheck
|
|
|
37
37
|
exports.ensureBilling = ensureBilling;
|
|
38
38
|
// eslint-disable-next-line arrow-body-style
|
|
39
39
|
const generatePaymentConfig = (paymentConfig, { SHOPIFY_RUN_MODE, appTitle: _appTitle, data: { appName, debugMode, environment, } = {}, }) => {
|
|
40
|
-
if (
|
|
40
|
+
if (shared_1.objectEmpty(paymentConfig) || shared_1.stringEmpty(environment)) {
|
|
41
41
|
return undefined;
|
|
42
42
|
}
|
|
43
|
-
const { name, price, currency = 'USD', type =
|
|
43
|
+
const { name, price, currency = 'USD', type = shared_1.BILLING_INTERVALS.ONE_TIME, } = paymentConfig;
|
|
44
44
|
const appTitle = name || _appTitle || appName;
|
|
45
45
|
const isProduction = (environment === 'production');
|
|
46
46
|
const notProduction = !isProduction;
|
|
47
|
-
const billingName = `${appTitle}${notProduction ? ` - ${environment}` : ''} - ${
|
|
47
|
+
const billingName = `${appTitle}${notProduction ? ` - ${environment}` : ''} - ${shared_1.unsnakecase(type)}`;
|
|
48
48
|
return {
|
|
49
49
|
required: (isProduction || debugMode || (['cli', 'review'].includes(SHOPIFY_RUN_MODE))),
|
|
50
50
|
test: (notProduction || debugMode || (SHOPIFY_RUN_MODE === 'review')),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../../src/lib/utils/billing.js"],"names":[],"mappings":";;;AAAA,sDAAmD;AAEnD,
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../../src/lib/utils/billing.js"],"names":[],"mappings":"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"}
|
package/dist/lib/utils/crypto.js
CHANGED
|
@@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getNonce = exports.CryptoHandler = exports.compareHashes = exports.generateHMAC = void 0;
|
|
7
7
|
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
-
const
|
|
9
|
-
const wrapKeyData = (keyData, keyType = 'RSA PRIVATE') => (`-----BEGIN ${keyType} KEY-----${
|
|
8
|
+
const shared_1 = require("../../shared");
|
|
9
|
+
const wrapKeyData = (keyData, keyType = 'RSA PRIVATE') => (`-----BEGIN ${keyType} KEY-----${shared_1.ensureString(keyData).replace(/"/g, '')}-----END ${keyType} KEY-----\n`.replace(/\\n/g, '\n'));
|
|
10
10
|
const getRecrypted = (encrypted) => {
|
|
11
11
|
const [beginning, hiddenInitialVector, end = ''] = encrypted.split(/_(.*==)=/g);
|
|
12
12
|
return { initialVector: hiddenInitialVector, encrypted: `${beginning}${end}` };
|
|
@@ -60,7 +60,7 @@ class CryptoHandler {
|
|
|
60
60
|
return (this.cryptoConfig != undefined);
|
|
61
61
|
}
|
|
62
62
|
initialize() {
|
|
63
|
-
if (
|
|
63
|
+
if (shared_1.objectNotEmpty(this.config)) {
|
|
64
64
|
const { encryptedPrivateKey, encryptedPublicKey, sharedSecret } = this.config;
|
|
65
65
|
const { initialVector: hiddenPublicIv, encrypted: recryptedPublicKey, } = getRecrypted(encryptedPublicKey);
|
|
66
66
|
const { initialVector: hiddenPrivateIv, encrypted: recryptedPrivateKey, } = getRecrypted(encryptedPrivateKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/lib/utils/crypto.js"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAE3B,
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/lib/utils/crypto.js"],"names":[],"mappings":"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"}
|
|
@@ -16,11 +16,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.findSessionIdsByShop = exports.deleteSessionsCallback = exports.loadCallback = exports.updateCallback = exports.storeCallback = exports.FirebaseSessionHandler = void 0;
|
|
18
18
|
const firebase_admin_1 = __importDefault(require("firebase-admin"));
|
|
19
|
-
const
|
|
19
|
+
const shared_1 = require("../../shared");
|
|
20
20
|
const singleton = Symbol('singleton');
|
|
21
21
|
const singletonEnforcer = Symbol('singletonEnforcer');
|
|
22
22
|
class FirebaseSessionHandler {
|
|
23
|
-
constructor(enforcer, { configurationId, collection =
|
|
23
|
+
constructor(enforcer, { configurationId, collection = shared_1.COLLECTION_ROOT }) {
|
|
24
24
|
if (enforcer !== singletonEnforcer) {
|
|
25
25
|
throw new Error('Cannot instantiate FirebaseSessionHandler directly, please use getInstance()');
|
|
26
26
|
}
|
|
@@ -32,7 +32,7 @@ class FirebaseSessionHandler {
|
|
|
32
32
|
return (this.firestore != undefined);
|
|
33
33
|
}
|
|
34
34
|
initializeFireStore(firebaseConfig) {
|
|
35
|
-
if (
|
|
35
|
+
if (shared_1.objectNotEmpty(firebaseConfig)) {
|
|
36
36
|
const project = !firebase_admin_1.default.apps.length
|
|
37
37
|
? firebase_admin_1.default.initializeApp({
|
|
38
38
|
credential: firebase_admin_1.default.credential.cert(firebaseConfig),
|
|
@@ -97,7 +97,7 @@ const updateCallback = async (instance, shopId, session) => {
|
|
|
97
97
|
};
|
|
98
98
|
exports.updateCallback = updateCallback;
|
|
99
99
|
const loadCallback = async (instance, shopId, sessionId) => {
|
|
100
|
-
if (
|
|
100
|
+
if (shared_1.stringEmpty(sessionId)) {
|
|
101
101
|
return undefined;
|
|
102
102
|
}
|
|
103
103
|
try {
|
|
@@ -133,7 +133,7 @@ const deleteSessionsCallback = async (instance, shopId, sessionIds) => {
|
|
|
133
133
|
.collection(instance.collection)
|
|
134
134
|
.doc(shopId)
|
|
135
135
|
.collection(instance.configurationId);
|
|
136
|
-
return Promise.all(
|
|
136
|
+
return Promise.all(shared_1.ensureArray(sessionIds).map((sessionId) => deleteSessionCallback(collectionRef, sessionId)));
|
|
137
137
|
}
|
|
138
138
|
catch (error) {
|
|
139
139
|
console.error('FirebaseSessionHandler.deleteSessionsCallback error', error);
|
|
@@ -142,7 +142,7 @@ const deleteSessionsCallback = async (instance, shopId, sessionIds) => {
|
|
|
142
142
|
};
|
|
143
143
|
exports.deleteSessionsCallback = deleteSessionsCallback;
|
|
144
144
|
const findSessionIdsByShop = async (instance, shopId) => {
|
|
145
|
-
if (
|
|
145
|
+
if (shared_1.stringEmpty(shopId)) {
|
|
146
146
|
// NOTE: this happens on initial install
|
|
147
147
|
return [];
|
|
148
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../../src/lib/utils/firebase.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oEAAkC;AAElC,
|
|
1
|
+
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../../src/lib/utils/firebase.js"],"names":[],"mappings":"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"}
|
package/dist/lib/utils/index.js
CHANGED
|
@@ -11,12 +11,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./billing"), exports);
|
|
14
|
-
__exportStar(require("./constants"), exports);
|
|
15
14
|
__exportStar(require("./crypto"), exports);
|
|
16
|
-
__exportStar(require("./display"), exports);
|
|
17
|
-
__exportStar(require("./errors"), exports);
|
|
18
15
|
__exportStar(require("./firebase"), exports);
|
|
19
|
-
__exportStar(require("./runtime"), exports);
|
|
20
16
|
__exportStar(require("./session"), exports);
|
|
21
17
|
__exportStar(require("./shopify"), exports);
|
|
22
18
|
__exportStar(require("./shopify-api-js/oauth"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/utils/index.js"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/utils/index.js"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAAyB;AACzB,2CAAwB;AACxB,6CAA0B;AAC1B,4CAAyB;AACzB,4CAAyB;AACzB,yDAAsC"}
|
|
@@ -15,11 +15,11 @@ exports.getVerifiedClients = exports.getShopifyHelpers = void 0;
|
|
|
15
15
|
const js_base64_1 = require("js-base64");
|
|
16
16
|
const shopify_api_1 = require("@shopify/shopify-api");
|
|
17
17
|
const luxon_1 = require("luxon");
|
|
18
|
+
const shared_1 = require("../../shared");
|
|
18
19
|
const billing_1 = require("./billing");
|
|
19
20
|
const shopify_1 = require("./shopify");
|
|
20
21
|
const firebase_1 = require("./firebase");
|
|
21
22
|
const crypto_1 = require("./crypto");
|
|
22
|
-
const runtime_1 = require("./runtime");
|
|
23
23
|
const getShopifyHelpers = async (serverRuntimeConfig, { shop }) => {
|
|
24
24
|
var _a, _b;
|
|
25
25
|
const shopify = shopify_1.getInitializedShopify(serverRuntimeConfig);
|
|
@@ -43,25 +43,25 @@ const getShopifyHelpers = async (serverRuntimeConfig, { shop }) => {
|
|
|
43
43
|
})) : (await shopify.session.getOfflineId(shop) // NOTE: not sure if this is working yet?
|
|
44
44
|
);
|
|
45
45
|
const _d = (_a = (await firebase_1.loadCallback(sessionHandler, shopId, sessionId))) !== null && _a !== void 0 ? _a : {}, { accessToken: encryptedAccessToken } = _d, session = __rest(_d, ["accessToken"]);
|
|
46
|
-
if (
|
|
47
|
-
throw new
|
|
46
|
+
if (shared_1.stringEmpty(encryptedAccessToken)) {
|
|
47
|
+
throw new shared_1.ShopifySessionMissingError('Missing session');
|
|
48
48
|
}
|
|
49
|
-
if (
|
|
49
|
+
if (shared_1.stringNotEmpty(session === null || session === void 0 ? void 0 : session.shop) && (session.shop !== shop)) {
|
|
50
50
|
throw new Error('Invalid shop');
|
|
51
51
|
}
|
|
52
52
|
// NOTE only online sessions have expirations
|
|
53
53
|
const sessionExpired = isOnline && (!(session === null || session === void 0 ? void 0 : session.expires) || (luxon_1.DateTime.fromISO(session.expires) < luxon_1.DateTime.now()));
|
|
54
|
-
const sessionActive = (!sessionExpired &&
|
|
54
|
+
const sessionActive = (!sessionExpired && shared_1.arraysMatch(shared_1.splitCommas((_c = (_b = shopify.config) === null || _b === void 0 ? void 0 : _b.scopes) === null || _c === void 0 ? void 0 : _c.toString()), shared_1.splitCommas(session === null || session === void 0 ? void 0 : session.scope)));
|
|
55
55
|
if (!sessionActive) {
|
|
56
|
-
throw new
|
|
56
|
+
throw new shared_1.ShopifySessionAuthenticationError('Inactive session');
|
|
57
57
|
}
|
|
58
58
|
return Object.assign(Object.assign({}, session), { accessToken: cryptoHandler.decrypt(encryptedAccessToken) });
|
|
59
59
|
}
|
|
60
60
|
catch (error) {
|
|
61
|
-
if (error instanceof
|
|
61
|
+
if (error instanceof shared_1.ShopifySessionAuthenticationError) {
|
|
62
62
|
throw error;
|
|
63
63
|
}
|
|
64
|
-
throw new
|
|
64
|
+
throw new shared_1.ShopifyAuthenticationError(error === null || error === void 0 ? void 0 : error.message);
|
|
65
65
|
}
|
|
66
66
|
};
|
|
67
67
|
// TODO: handle encrypting other keys
|
|
@@ -75,12 +75,12 @@ const getShopifyHelpers = async (serverRuntimeConfig, { shop }) => {
|
|
|
75
75
|
// TODO: handle encrypting other keys
|
|
76
76
|
const encryptUpdateSession = async (session) => (firebase_1.updateCallback(sessionHandler, shopId, ensureEncryptedSession(session)));
|
|
77
77
|
const buildEmbeddedAppUrl = async (_appPath) => {
|
|
78
|
-
if (
|
|
78
|
+
if (shared_1.stringEmpty(shop)) {
|
|
79
79
|
return undefined;
|
|
80
80
|
}
|
|
81
81
|
const embeddedAppBaseUrl = await shopify.auth.buildEmbeddedAppUrl(js_base64_1.encode(`${shop}/admin`));
|
|
82
|
-
const appPath =
|
|
83
|
-
return `${embeddedAppBaseUrl}${
|
|
82
|
+
const appPath = shared_1.removeLeadingSlash(_appPath);
|
|
83
|
+
return `${embeddedAppBaseUrl}${shared_1.stringNotEmpty(appPath) ? `/${appPath}` : ''}`;
|
|
84
84
|
};
|
|
85
85
|
//#endregion internal shopifyHelper implementations
|
|
86
86
|
return Object.assign({ shopify, getAppUrl: () => undefined, loadSession: () => ({}), storeSession: () => ({}), updateSession: () => ({}), deleteSessions: () => undefined, findSessionIds: () => ([]), ensureBilling: () => undefined }, shopify && {
|
|
@@ -102,10 +102,10 @@ const getVerifiedClients = async (serverRuntimeConfig, { req, res, shop, apiVers
|
|
|
102
102
|
const { shopify, loadSession, ensureBilling } = await exports.getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
103
103
|
const session = await loadSession({ req, res });
|
|
104
104
|
const Graphql = new shopify.clients.Graphql(Object.assign({ session }, apiVersion && { apiVersion }));
|
|
105
|
-
if (isOnline &&
|
|
105
|
+
if (isOnline && shared_1.isTrue((_a = serverRuntimeConfig.PAYMENT_CONFIG) === null || _a === void 0 ? void 0 : _a.required)) {
|
|
106
106
|
const confirmationUrl = await ensureBilling(session);
|
|
107
|
-
if (
|
|
108
|
-
throw new
|
|
107
|
+
if (shared_1.stringNotEmpty(confirmationUrl)) {
|
|
108
|
+
throw new shared_1.ShopifyAuthenticationError('Invalid payment status', { redirectUrl: confirmationUrl });
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
else {
|
|
@@ -122,7 +122,7 @@ const getVerifiedClients = async (serverRuntimeConfig, { req, res, shop, apiVers
|
|
|
122
122
|
catch (error) {
|
|
123
123
|
if (error instanceof shopify_api_1.HttpResponseError &&
|
|
124
124
|
error.response.code === 401) {
|
|
125
|
-
throw new
|
|
125
|
+
throw new shared_1.ShopifyAuthenticationError('Not authenticated');
|
|
126
126
|
}
|
|
127
127
|
throw error;
|
|
128
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/lib/utils/session.js"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,yCAAkC;AAClC,sDAAwD;AACxD,iCAAgC;AAEhC,uCAAyC;AACzC,uCAA6D;AAC7D,yCAOmB;AACnB,qCAAwC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/lib/utils/session.js"],"names":[],"mappings":"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"}
|
|
@@ -32,4 +32,15 @@ export function getCallback(data: any, { reAuth, isOnline }: {
|
|
|
32
32
|
reAuth: any;
|
|
33
33
|
isOnline: any;
|
|
34
34
|
}): any;
|
|
35
|
+
export function getAuthErrorResponse(serverRuntimeConfig: any, { error, shop }: {
|
|
36
|
+
error: any;
|
|
37
|
+
shop: any;
|
|
38
|
+
}): {
|
|
39
|
+
statusCode: number;
|
|
40
|
+
message: any;
|
|
41
|
+
headers: {
|
|
42
|
+
'X-Shopify-API-Request-Failure-Reauthorize': string;
|
|
43
|
+
'X-Shopify-API-Request-Failure-Reauthorize-Url': any;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
35
46
|
export const SHOP_QUERY: "\n {\n shop {\n name\n }\n }\n";
|
|
@@ -14,16 +14,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.SHOP_QUERY = exports.getCallback = exports.getWebhookHandlers = exports.getInitializedShopify = exports.decodeShopData = exports.getSanitizedShopData = exports.allowLocalBypass = exports.getSecurityHeader = void 0;
|
|
17
|
+
exports.SHOP_QUERY = exports.getAuthErrorResponse = exports.getCallback = exports.getWebhookHandlers = exports.getInitializedShopify = exports.decodeShopData = exports.getSanitizedShopData = exports.allowLocalBypass = exports.getSecurityHeader = void 0;
|
|
18
18
|
const chalk_1 = __importDefault(require("chalk"));
|
|
19
19
|
require("@shopify/shopify-api/adapters/node");
|
|
20
20
|
const shopify_api_1 = require("@shopify/shopify-api");
|
|
21
21
|
const jwt_decode_1 = __importDefault(require("jwt-decode"));
|
|
22
22
|
const js_base64_1 = require("js-base64");
|
|
23
|
-
const
|
|
24
|
-
const VALID_WEBHOOK_TOPICS = Object.keys(
|
|
23
|
+
const shared_1 = require("../../shared");
|
|
24
|
+
const VALID_WEBHOOK_TOPICS = Object.keys(shared_1.API_WEBHOOK_TOPICS);
|
|
25
25
|
// NOTE rejection response shows accepted value is "frame-ancestors https://admin.shopify.com https://[shop].myshopify.com"
|
|
26
|
-
const getSecurityHeader = (shop, { isEmbeddedApp } = {}) => ((
|
|
26
|
+
const getSecurityHeader = (shop, { isEmbeddedApp } = {}) => ((shared_1.stringNotEmpty(shop) && shared_1.isTrue(isEmbeddedApp))
|
|
27
27
|
? `frame-ancestors https://${encodeURIComponent(shop)} https://admin.shopify.com;`
|
|
28
28
|
: "frame-ancestors 'none';");
|
|
29
29
|
exports.getSecurityHeader = getSecurityHeader;
|
|
@@ -37,7 +37,7 @@ exports.allowLocalBypass = allowLocalBypass;
|
|
|
37
37
|
// NOTE: This is a semi-replica of shopify-api-node/src/utils/shop-validator.ts
|
|
38
38
|
const getSanitizedShopData = (shop, customDomains) => {
|
|
39
39
|
var _a;
|
|
40
|
-
const domainsRegex =
|
|
40
|
+
const domainsRegex = shared_1.ensureArray(customDomains).reduce((_domainsRegex, customDomain) => {
|
|
41
41
|
var _a;
|
|
42
42
|
return ([
|
|
43
43
|
..._domainsRegex,
|
|
@@ -45,7 +45,7 @@ const getSanitizedShopData = (shop, customDomains) => {
|
|
|
45
45
|
]);
|
|
46
46
|
}, ['myshopify\\.com', 'myshopify\\.io']); // HMMM: do we need to add: shopify\\.com
|
|
47
47
|
const shopUrlRegex = new RegExp(`^([a-zA-Z0-9][a-zA-Z0-9-_]*)\\.(${domainsRegex.join('|')})[/]*$`);
|
|
48
|
-
const [sanitizedShop, store_name] = (_a =
|
|
48
|
+
const [sanitizedShop, store_name] = (_a = shared_1.ensureString(shop).match(shopUrlRegex)) !== null && _a !== void 0 ? _a : [];
|
|
49
49
|
return {
|
|
50
50
|
shop: sanitizedShop,
|
|
51
51
|
store_name,
|
|
@@ -53,11 +53,11 @@ const getSanitizedShopData = (shop, customDomains) => {
|
|
|
53
53
|
};
|
|
54
54
|
exports.getSanitizedShopData = getSanitizedShopData;
|
|
55
55
|
const decodeShopData = (token) => {
|
|
56
|
-
if (
|
|
56
|
+
if (shared_1.stringEmpty(token)) {
|
|
57
57
|
return {};
|
|
58
58
|
}
|
|
59
59
|
const { dest, sid } = jwt_decode_1.default(token.replace('Bearer '));
|
|
60
|
-
if (
|
|
60
|
+
if (shared_1.stringEmpty(dest)) {
|
|
61
61
|
return {};
|
|
62
62
|
}
|
|
63
63
|
let _shop;
|
|
@@ -68,7 +68,7 @@ const decodeShopData = (token) => {
|
|
|
68
68
|
console.log('Ignoring error decoding dest', ignore);
|
|
69
69
|
}
|
|
70
70
|
const { shop, store_name, } = exports.getSanitizedShopData(_shop !== null && _shop !== void 0 ? _shop : dest);
|
|
71
|
-
const host =
|
|
71
|
+
const host = shared_1.stringNotEmpty(shop) ? js_base64_1.encode(`${shop}/admin`) : undefined;
|
|
72
72
|
return {
|
|
73
73
|
token,
|
|
74
74
|
dest,
|
|
@@ -87,12 +87,12 @@ const getInitializedShopify = (props) => {
|
|
|
87
87
|
return shopify_api_1.shopifyApi(props.APP_CONFIG);
|
|
88
88
|
};
|
|
89
89
|
exports.getInitializedShopify = getInitializedShopify;
|
|
90
|
-
const getWebhookHandlers = ({ APP_WEBHOOKS } = {}) => (Object.entries(
|
|
90
|
+
const getWebhookHandlers = ({ APP_WEBHOOKS } = {}) => (Object.entries(shared_1.ensureObject(APP_WEBHOOKS)).reduce((_webhookHandlers, [webhookTopic, webhooks]) => {
|
|
91
91
|
if (!VALID_WEBHOOK_TOPICS.includes(webhookTopic)) {
|
|
92
92
|
console.warn(`Ignoring unsupported webhook topic: ${webhookTopic}`);
|
|
93
93
|
return _webhookHandlers;
|
|
94
94
|
}
|
|
95
|
-
return Object.assign(Object.assign({}, _webhookHandlers), { [webhookTopic]:
|
|
95
|
+
return Object.assign(Object.assign({}, _webhookHandlers), { [webhookTopic]: shared_1.ensureArray(webhooks).reduce((_topicWebhooks, _a) => {
|
|
96
96
|
var { url, path, callback: _callback, callbackUrl: _callbackUrl, deliveryMethod = shopify_api_1.DeliveryMethod.Http } = _a,
|
|
97
97
|
// NOTE: this lets us support more advanced webhook types (EventBridgeWebhookHandler or PubSubWebhookHandler)
|
|
98
98
|
webhookConfig = __rest(_a, ["url", "path", "callback", "callbackUrl", "deliveryMethod"]);
|
|
@@ -115,17 +115,35 @@ const getWebhookHandlers = ({ APP_WEBHOOKS } = {}) => (Object.entries(runtime_1.
|
|
|
115
115
|
exports.getWebhookHandlers = getWebhookHandlers;
|
|
116
116
|
const getCallback = (data, { reAuth, isOnline }) => {
|
|
117
117
|
const authCallbacks = reAuth ? {
|
|
118
|
-
online: data[
|
|
119
|
-
offline: data[
|
|
118
|
+
online: data[shared_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK_REAUTH],
|
|
119
|
+
offline: data[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK_REAUTH],
|
|
120
120
|
} : {
|
|
121
|
-
online: data[
|
|
122
|
-
offline: data[
|
|
121
|
+
online: data[shared_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK],
|
|
122
|
+
offline: data[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK],
|
|
123
123
|
};
|
|
124
124
|
return isOnline
|
|
125
125
|
? authCallbacks.online
|
|
126
126
|
: authCallbacks.offline || authCallbacks.online;
|
|
127
127
|
};
|
|
128
128
|
exports.getCallback = getCallback;
|
|
129
|
+
const getAuthErrorResponse = (serverRuntimeConfig, { error, shop }) => {
|
|
130
|
+
const { message, data } = error;
|
|
131
|
+
const { API_URLS } = serverRuntimeConfig;
|
|
132
|
+
const queryParams = new URLSearchParams({
|
|
133
|
+
shop,
|
|
134
|
+
reAuth: (error instanceof shared_1.ShopifySessionAuthenticationError),
|
|
135
|
+
}).toString();
|
|
136
|
+
const reauthorizationUrl = (data === null || data === void 0 ? void 0 : data.redirectUrl) || `${API_URLS[shared_1.API_ROUTE_NAMES.AUTH_ONLINE]}?${queryParams}`; // HMMMMM: do we not need host here??
|
|
137
|
+
return {
|
|
138
|
+
statusCode: 403,
|
|
139
|
+
message,
|
|
140
|
+
headers: {
|
|
141
|
+
'X-Shopify-API-Request-Failure-Reauthorize': '1',
|
|
142
|
+
'X-Shopify-API-Request-Failure-Reauthorize-Url': reauthorizationUrl,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
exports.getAuthErrorResponse = getAuthErrorResponse;
|
|
129
147
|
exports.SHOP_QUERY = `
|
|
130
148
|
{
|
|
131
149
|
shop {
|