@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,34 +19,39 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
19
|
}
|
|
19
20
|
return t;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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.beginAuth = void 0;
|
|
27
|
+
const isbot_1 = __importDefault(require("isbot"));
|
|
28
|
+
const runtime_1 = require("@shopify/shopify-api/runtime");
|
|
29
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
30
|
+
const crypto_1 = require("../crypto");
|
|
31
|
+
const shared_1 = require("../../../shared");
|
|
26
32
|
// NOTE this is a custom implementation of shopify.auth.begin from @shopify/shopify-api
|
|
27
33
|
// for leveraging a custom auth state
|
|
28
|
-
|
|
34
|
+
const beginAuth = (_a) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
35
|
var { config, isOnline, callbackPath, shop: shopProp, state: stateProp } = _a, adapterArgs = __rest(_a, ["config", "isOnline", "callbackPath", "shop", "state"]);
|
|
30
36
|
if (config.isCustomStoreApp) {
|
|
31
|
-
throw new PrivateAppError('Cannot perform OAuth for private apps');
|
|
37
|
+
throw new shopify_api_1.PrivateAppError('Cannot perform OAuth for private apps');
|
|
32
38
|
}
|
|
33
|
-
const request = yield abstractConvertRequest(adapterArgs);
|
|
34
|
-
const response = yield abstractConvertIncomingResponse(adapterArgs);
|
|
35
|
-
if (
|
|
39
|
+
const request = yield (0, runtime_1.abstractConvertRequest)(adapterArgs);
|
|
40
|
+
const response = yield (0, runtime_1.abstractConvertIncomingResponse)(adapterArgs);
|
|
41
|
+
if ((0, isbot_1.default)(request.headers['User-Agent'])) {
|
|
36
42
|
console.log(`Possible bot request to beginAuth: `, {
|
|
37
43
|
userAgent: request.headers['User-Agent'],
|
|
38
44
|
});
|
|
39
45
|
response.statusCode = 410;
|
|
40
|
-
return abstractConvertResponse(response, adapterArgs);
|
|
46
|
+
return (0, runtime_1.abstractConvertResponse)(response, adapterArgs);
|
|
41
47
|
}
|
|
42
|
-
const cookies = new Cookies(request, response, {
|
|
48
|
+
const cookies = new runtime_1.Cookies(request, response, {
|
|
43
49
|
keys: [config.apiSecretKey],
|
|
44
50
|
secure: true,
|
|
45
51
|
});
|
|
46
|
-
const { shop } = getSanitizedShopData(shopProp);
|
|
47
|
-
const state = stateProp !== null && stateProp !== void 0 ? stateProp : getNonce();
|
|
48
|
-
yield cookies.setAndSign(STATE_COOKIE_NAME, state, {
|
|
52
|
+
const { shop } = (0, shared_1.getSanitizedShopData)(shopProp);
|
|
53
|
+
const state = stateProp !== null && stateProp !== void 0 ? stateProp : (0, crypto_1.getNonce)();
|
|
54
|
+
yield cookies.setAndSign(shopify_api_1.STATE_COOKIE_NAME, state, {
|
|
49
55
|
expires: new Date(Date.now() + 60000),
|
|
50
56
|
sameSite: 'lax',
|
|
51
57
|
secure: true,
|
|
@@ -61,6 +67,7 @@ export const beginAuth = (_a) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
61
67
|
response.statusCode = 302;
|
|
62
68
|
response.statusText = 'Found';
|
|
63
69
|
response.headers = Object.assign(Object.assign(Object.assign({}, response.headers), cookies.response.headers), { Location: `https://${shop}/admin/oauth/authorize?${queryParams}` });
|
|
64
|
-
return abstractConvertResponse(response, adapterArgs);
|
|
70
|
+
return (0, runtime_1.abstractConvertResponse)(response, adapterArgs);
|
|
65
71
|
});
|
|
72
|
+
exports.beginAuth = beginAuth;
|
|
66
73
|
//# sourceMappingURL=oauth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/lib/utils/shopify-api-js/oauth.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/lib/utils/shopify-api-js/oauth.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAyB;AACzB,0DAKqC;AACrC,sDAG6B;AAE7B,sCAAoC;AACpC,4CAAsD;AAEtD,uFAAuF;AACvF,qCAAqC;AAC9B,MAAM,SAAS,GAAG,CAAO,EAO/B,EAAE,EAAE;QAP2B,EAC9B,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,OAEjB,EADI,WAAW,cANgB,uDAO/B,CADe;IAEd,IAAI,MAAM,CAAC,gBAAgB,EAAE;QAC3B,MAAM,IAAI,6BAAe,CAAC,uCAAuC,CAAC,CAAA;KACnE;IAED,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAsB,EAAC,WAAW,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,MAAM,IAAA,yCAA+B,EAAC,WAAW,CAAC,CAAA;IAEnE,IAAI,IAAA,eAAK,EAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE;QACxC,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE;YACjD,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;SACzC,CAAC,CAAA;QACF,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;QACzB,OAAO,IAAA,iCAAuB,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;KACtD;IAED,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,OAAO,EAAE,QAAQ,EAAE;QAC7C,IAAI,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QAC3B,MAAM,EAAE,IAAI;KACb,CAAC,CAAA;IAEF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,6BAAoB,EAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAA,iBAAQ,GAAE,CAAA;IAErC,MAAM,OAAO,CAAC,UAAU,CAAC,+BAAiB,EAAE,KAAK,EAAE;QACjD,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACrC,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,YAAY;KACnB,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;QACtC,SAAS,EAAE,MAAM,CAAC,MAAM;QACxB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC/B,YAAY,EAAE,GAAG,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,QAAQ,GAAG,YAAY,EAAE;QACxE,KAAK;QACL,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;KAC9C,CAAC,CAAC,QAAQ,EAAE,CAAA;IAEb,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;IACzB,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAA;IAC7B,QAAQ,CAAC,OAAO,iDACX,QAAQ,CAAC,OAAO,GAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,KAC3B,QAAQ,EAAE,WAAW,IAAI,0BAA0B,WAAW,EAAE,GACjE,CAAA;IAED,OAAO,IAAA,iCAAuB,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;AACvD,CAAC,CAAA,CAAA;AAvDY,QAAA,SAAS,aAuDrB"}
|
|
@@ -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,42 +19,50 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
19
|
}
|
|
19
20
|
return t;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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.SHOP_QUERY = exports.getAuthErrorResponse = exports.getCallback = exports.prepareWebhookHandlers = exports.getInitializedShopify = exports.allowLocalBypass = exports.getSecurityHeader = void 0;
|
|
27
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
28
|
+
require("@shopify/shopify-api/adapters/node");
|
|
29
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
30
|
+
const shared_1 = require("../../shared");
|
|
31
|
+
const VALID_WEBHOOK_TOPICS = Object.keys(shared_1.API_WEBHOOK_TOPICS);
|
|
26
32
|
// NOTE rejection response shows accepted value is "frame-ancestors https://admin.shopify.com https://[shop].myshopify.com"
|
|
27
|
-
|
|
33
|
+
const getSecurityHeader = (shop, { isEmbeddedApp } = {}) => (((0, shared_1.stringNotEmpty)(shop) && (0, shared_1.isTrue)(isEmbeddedApp))
|
|
28
34
|
? `frame-ancestors https://${encodeURIComponent(shop)} https://admin.shopify.com;`
|
|
29
35
|
: "frame-ancestors 'none';");
|
|
36
|
+
exports.getSecurityHeader = getSecurityHeader;
|
|
30
37
|
// NOTE: this should handle running in next to test non-shopify functionality
|
|
31
|
-
|
|
38
|
+
const allowLocalBypass = ({ SHOPIFY_RUN_MODE, APP_CONFIG } = {}) => ((SHOPIFY_RUN_MODE !== 'cli') &&
|
|
32
39
|
(!APP_CONFIG.apiSecretKey ||
|
|
33
40
|
!APP_CONFIG.hostName ||
|
|
34
41
|
!APP_CONFIG.apiKey ||
|
|
35
42
|
!APP_CONFIG.scopes));
|
|
36
|
-
|
|
43
|
+
exports.allowLocalBypass = allowLocalBypass;
|
|
44
|
+
const getInitializedShopify = (serverRuntimeConfig) => {
|
|
37
45
|
// NOTE: this should handle running in next to test non-shopify functionality
|
|
38
|
-
const shouldBypassProtect = allowLocalBypass(serverRuntimeConfig);
|
|
46
|
+
const shouldBypassProtect = (0, exports.allowLocalBypass)(serverRuntimeConfig);
|
|
39
47
|
if (shouldBypassProtect) {
|
|
40
|
-
console.info(`${
|
|
48
|
+
console.info(`${chalk_1.default.yellowBright('next-shopify')} - [${chalk_1.default.bold('getInitializedShopify')}]: ${`Bypassing local protect - should ONLY happen when running in next to test non-shopify functionality!`}`);
|
|
41
49
|
return undefined;
|
|
42
50
|
}
|
|
43
|
-
return shopifyApi(serverRuntimeConfig.APP_CONFIG);
|
|
51
|
+
return (0, shopify_api_1.shopifyApi)(serverRuntimeConfig.APP_CONFIG);
|
|
44
52
|
};
|
|
45
|
-
|
|
53
|
+
exports.getInitializedShopify = getInitializedShopify;
|
|
54
|
+
const prepareWebhookHandlers = (serverRuntimeConfig, params) => (Object.entries((0, shared_1.ensureObject)(serverRuntimeConfig.APP_WEBHOOKS)).reduce((_webhookHandlers, [webhookTopic, webhooks]) => {
|
|
46
55
|
if (!VALID_WEBHOOK_TOPICS.includes(webhookTopic)) {
|
|
47
56
|
console.warn(`Ignoring unsupported webhook topic: ${webhookTopic}`);
|
|
48
57
|
return _webhookHandlers;
|
|
49
58
|
}
|
|
50
59
|
const queryString = new URLSearchParams(params).toString();
|
|
51
|
-
return Object.assign(Object.assign({}, _webhookHandlers), { [webhookTopic]: ensureArray(webhooks).reduce((_topicWebhooks, _a) => {
|
|
52
|
-
var { url, path, callback: _callback, callbackUrl: _callbackUrl, deliveryMethod = DeliveryMethod.Http } = _a,
|
|
60
|
+
return Object.assign(Object.assign({}, _webhookHandlers), { [webhookTopic]: (0, shared_1.ensureArray)(webhooks).reduce((_topicWebhooks, _a) => {
|
|
61
|
+
var { url, path, callback: _callback, callbackUrl: _callbackUrl, deliveryMethod = shopify_api_1.DeliveryMethod.Http } = _a,
|
|
53
62
|
// NOTE: this lets us support more advanced webhook types (EventBridgeWebhookHandler or PubSubWebhookHandler)
|
|
54
63
|
webhookConfig = __rest(_a, ["url", "path", "callback", "callbackUrl", "deliveryMethod"]);
|
|
55
|
-
const callbackUrl = appendQuery(_callbackUrl || url || path, queryString);
|
|
56
|
-
console.info(`${
|
|
64
|
+
const callbackUrl = (0, shared_1.appendQuery)(_callbackUrl || url || path, queryString);
|
|
65
|
+
console.info(`${chalk_1.default.yellowBright('next-shopify')} - [${chalk_1.default.bold(webhookTopic)}]: ${`Adding webhook handler [${deliveryMethod}]${callbackUrl ? ` using callbackUrl: ${callbackUrl}` : ''}.`}`);
|
|
57
66
|
return [
|
|
58
67
|
..._topicWebhooks,
|
|
59
68
|
Object.assign(Object.assign(Object.assign({ deliveryMethod }, webhookConfig), callbackUrl && { callbackUrl }), (callbackUrl || _callback) && {
|
|
@@ -68,26 +77,28 @@ export const prepareWebhookHandlers = (serverRuntimeConfig, params) => (Object.e
|
|
|
68
77
|
];
|
|
69
78
|
}, []) });
|
|
70
79
|
}, {}));
|
|
71
|
-
|
|
80
|
+
exports.prepareWebhookHandlers = prepareWebhookHandlers;
|
|
81
|
+
const getCallback = (data, { reAuth, isOnline }) => {
|
|
72
82
|
const authCallbacks = reAuth ? {
|
|
73
|
-
online: data[API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK_REAUTH],
|
|
74
|
-
offline: data[API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK_REAUTH],
|
|
83
|
+
online: data[shared_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK_REAUTH],
|
|
84
|
+
offline: data[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK_REAUTH],
|
|
75
85
|
} : {
|
|
76
|
-
online: data[API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK],
|
|
77
|
-
offline: data[API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK],
|
|
86
|
+
online: data[shared_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK],
|
|
87
|
+
offline: data[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK],
|
|
78
88
|
};
|
|
79
89
|
return isOnline
|
|
80
90
|
? authCallbacks.online
|
|
81
91
|
: authCallbacks.offline || authCallbacks.online;
|
|
82
92
|
};
|
|
83
|
-
|
|
93
|
+
exports.getCallback = getCallback;
|
|
94
|
+
const getAuthErrorResponse = (serverRuntimeConfig, { error, shop }) => {
|
|
84
95
|
const { message, data } = error;
|
|
85
96
|
const { API_URLS } = serverRuntimeConfig;
|
|
86
97
|
const queryParams = new URLSearchParams({
|
|
87
98
|
shop,
|
|
88
|
-
reAuth: (error instanceof ShopifySessionAuthenticationError),
|
|
99
|
+
reAuth: (error instanceof shared_1.ShopifySessionAuthenticationError),
|
|
89
100
|
}).toString();
|
|
90
|
-
const reauthorizationUrl = (data === null || data === void 0 ? void 0 : data.redirectUrl) || `${API_URLS[API_ROUTE_NAMES.AUTH_ONLINE]}?${queryParams}`; // HMMMMM: do we not need host here??
|
|
101
|
+
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??
|
|
91
102
|
return {
|
|
92
103
|
statusCode: 403,
|
|
93
104
|
message,
|
|
@@ -97,7 +108,8 @@ export const getAuthErrorResponse = (serverRuntimeConfig, { error, shop }) => {
|
|
|
97
108
|
},
|
|
98
109
|
};
|
|
99
110
|
};
|
|
100
|
-
|
|
111
|
+
exports.getAuthErrorResponse = getAuthErrorResponse;
|
|
112
|
+
exports.SHOP_QUERY = `
|
|
101
113
|
{
|
|
102
114
|
shop {
|
|
103
115
|
name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify.js","sourceRoot":"","sources":["../../../src/lib/utils/shopify.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shopify.js","sourceRoot":"","sources":["../../../src/lib/utils/shopify.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAyB;AAEzB,8CAA2C;AAC3C,sDAAiE;AAEjE,yCASqB;AAErB,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,2BAAkB,CAAC,CAAA;AAE5D,2HAA2H;AACpH,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CACjE,CAAC,IAAA,uBAAc,EAAC,IAAI,CAAC,IAAI,IAAA,eAAM,EAAC,aAAa,CAAC,CAAC;IAC7C,CAAC,CAAC,2BAA2B,kBAAkB,CAAC,IAAI,CAAC,6BAA6B;IAClF,CAAC,CAAC,yBAAyB,CAC9B,CAAA;AAJY,QAAA,iBAAiB,qBAI7B;AAED,6EAA6E;AACtE,MAAM,gBAAgB,GAAG,CAAC,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CACzE,CAAC,gBAAgB,KAAK,KAAK,CAAC;IAC5B,CACE,CAAC,UAAU,CAAC,YAAY;QACxB,CAAC,UAAU,CAAC,QAAQ;QACpB,CAAC,UAAU,CAAC,MAAM;QAClB,CAAC,UAAU,CAAC,MAAM,CACnB,CACF,CAAA;AARY,QAAA,gBAAgB,oBAQ5B;AAEM,MAAM,qBAAqB,GAAG,CAAC,mBAAmB,EAAE,EAAE;IAC3D,6EAA6E;IAC7E,MAAM,mBAAmB,GAAG,IAAA,wBAAgB,EAAC,mBAAmB,CAAC,CAAA;IAEjE,IAAI,mBAAmB,EAAE;QACvB,OAAO,CAAC,IAAI,CAAC,GAAG,eAAK,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAC1F,sGACF,EAAE,CAAC,CAAA;QACH,OAAO,SAAS,CAAA;KACjB;IAED,OAAO,IAAA,wBAAU,EAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;AACnD,CAAC,CAAA;AAZY,QAAA,qBAAqB,yBAYjC;AAEM,MAAM,sBAAsB,GAAG,CAAC,mBAAmB,EAAE,MAAM,EAAE,EAAE,CAAC,CACrE,MAAM,CAAC,OAAO,CAAC,IAAA,qBAAY,EAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CACpE,gBAAgB,EAChB,CAAC,YAAY,EAAE,QAAQ,CAAC,EACxB,EAAE;IACF,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;QAChD,OAAO,CAAC,IAAI,CAAC,uCAAuC,YAAY,EAAE,CAAC,CAAA;QACnE,OAAO,gBAAgB,CAAA;KACxB;IAED,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC1D,uCACK,gBAAgB,KACnB,CAAC,YAAY,CAAC,EAAE,IAAA,oBAAW,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,EAQ7D,EAAE,EAAE;gBARyD,EAC5D,GAAG,EACH,IAAI,EACJ,QAAQ,EAAE,SAAS,EACnB,WAAW,EAAE,YAAY,EACzB,cAAc,GAAG,4BAAc,CAAC,IAAI,OAGrC;YAFC,6GAA6G;YAC1G,aAAa,cAP4C,4DAQ7D,CADiB;YAEhB,MAAM,WAAW,GAAG,IAAA,oBAAW,EAAC,YAAY,IAAI,GAAG,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;YAEzE,OAAO,CAAC,IAAI,CAAC,GAAG,eAAK,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAC/E,2BAA2B,cAAc,IAAI,WAAW,CAAC,CAAC,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,GACtG,EAAE,CAAC,CAAA;YAEH,OAAO;gBACL,GAAG,cAAc;4DAEf,cAAc,IACX,aAAa,GACb,WAAW,IAAI,EAAE,WAAW,EAAE,GAE9B,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI;oBAC/B,QAAQ,EAAE,CACR,KAAK,EACL,IAAI,EACJ,OAAO,EACP,SAAS,EACT,GAAG,MAAM,EACT,EAAE;wBACF,IAAI,SAAS,EAAE;4BACb,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC,CAAA;4BACjE,OAAO,SAAS,CACd,KAAK,EACL,IAAI,EACJ,OAAO,EACP,SAAS,EACT,GAAG,MAAM,CACV,CAAA;yBACF;wBAED,OAAO,IAAI,CAAA;oBACb,CAAC,CAAA;iBACF;aAEJ,CAAA;QACH,CAAC,EAAE,EAAE,CAAC,IACP;AACH,CAAC,EAAE,EAAE,CAAC,CACP,CAAA;AA9DY,QAAA,sBAAsB,0BA8DlC;AAEM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxD,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC;QAC7B,MAAM,EAAE,IAAI,CAAC,wBAAe,CAAC,2BAA2B,CAAC;QACzD,OAAO,EAAE,IAAI,CAAC,wBAAe,CAAC,4BAA4B,CAAC;KAC5D,CAAC,CAAC,CAAC;QACF,MAAM,EAAE,IAAI,CAAC,wBAAe,CAAC,oBAAoB,CAAC;QAClD,OAAO,EAAE,IAAI,CAAC,wBAAe,CAAC,qBAAqB,CAAC;KACrD,CAAA;IAED,OAAO,QAAQ;QACb,CAAC,CAAC,aAAa,CAAC,MAAM;QACtB,CAAC,CAAC,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,MAAM,CAAA;AACnD,CAAC,CAAA;AAZY,QAAA,WAAW,eAYvB;AAEM,MAAM,oBAAoB,GAAG,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IAC3E,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAA;IACxC,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;QACtC,IAAI;QACJ,MAAM,EAAE,CAAC,KAAK,YAAY,0CAAiC,CAAC;KAC7D,CAAC,CAAC,QAAQ,EAAE,CAAA;IACb,MAAM,kBAAkB,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,KAAI,GAAG,QAAQ,CAAC,wBAAe,CAAC,WAAW,CAAC,IAAI,WAAW,EAAE,CAAA,CAAC,qCAAqC;IAE/I,OAAO;QACL,UAAU,EAAE,GAAG;QACf,OAAO;QACP,OAAO,EAAE;YACP,2CAA2C,EAAE,GAAG;YAChD,+CAA+C,EAAE,kBAAkB;SACpE;KACF,CAAA;AACH,CAAC,CAAA;AAjBY,QAAA,oBAAoB,wBAiBhC;AAEY,QAAA,UAAU,GAAG;;;;;;CAMzB,CAAA"}
|
package/dist/lib/utils/token.js
CHANGED
|
@@ -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,37 +19,40 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
19
|
}
|
|
19
20
|
return t;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.getVerifiedSessionData = void 0;
|
|
24
|
+
const jsonwebtoken_1 = require("jsonwebtoken");
|
|
25
|
+
const shared_1 = require("../../shared");
|
|
26
|
+
const crypto_1 = require("./crypto");
|
|
24
27
|
// NOTE: this signingSecret is not current used, but just in case we ever need it
|
|
25
|
-
|
|
28
|
+
const getVerifiedSessionData = (serverRuntimeConfig, { signingSecret: _signingSecret } = {}) => {
|
|
26
29
|
const { APP_CONFIG } = serverRuntimeConfig;
|
|
27
30
|
return (sessionToken, { shop, host } = {}) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
31
|
let data;
|
|
29
32
|
try {
|
|
30
33
|
// NOTE: this does not always contain sid (depending on if calling from appbridge)
|
|
31
34
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
32
|
-
const _a = decodeShopData(sessionToken), { decoded, token } = _a, _data = __rest(_a, ["decoded", "token"]);
|
|
35
|
+
const _a = (0, shared_1.decodeShopData)(sessionToken), { decoded, token } = _a, _data = __rest(_a, ["decoded", "token"]);
|
|
33
36
|
const { shop: sessionShop, host: sessionHost } = _data;
|
|
34
37
|
data = _data;
|
|
35
38
|
if (!shop || !host || (sessionShop !== shop) || (sessionHost !== host)) {
|
|
36
|
-
throw new ShopifySessionInvalidError('Unauthorized shop or host', { shop, host, sessionShop, sessionHost });
|
|
39
|
+
throw new shared_1.ShopifySessionInvalidError('Unauthorized shop or host', { shop, host, sessionShop, sessionHost });
|
|
37
40
|
}
|
|
38
41
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
42
|
const { iat, nbf, exp } = decoded, verifiable = __rest(decoded, ["iat", "nbf", "exp"]);
|
|
40
|
-
const signingSecret = _signingSecret || generateHMAC(objectToSortedString(verifiable), APP_CONFIG.apiSecretKey);
|
|
41
|
-
const verified = verify(sessionToken, signingSecret);
|
|
43
|
+
const signingSecret = _signingSecret || (0, crypto_1.generateHMAC)((0, shared_1.objectToSortedString)(verifiable), APP_CONFIG.apiSecretKey);
|
|
44
|
+
const verified = (0, jsonwebtoken_1.verify)(sessionToken, signingSecret);
|
|
42
45
|
if (verified == undefined) {
|
|
43
|
-
throw new ShopifySessionInvalidError('Verified Undefined');
|
|
46
|
+
throw new shared_1.ShopifySessionInvalidError('Verified Undefined');
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
catch (error) {
|
|
47
50
|
// eslint-disable-next-line max-len
|
|
48
|
-
console.error('Error verifying session token', 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)));
|
|
49
|
-
throw new ShopifySessionInvalidError('Error verifying session token', Object.assign({ message: error === null || error === void 0 ? void 0 : error.message, name: error === null || error === void 0 ? void 0 : error.name }, error === null || error === void 0 ? void 0 : error.data));
|
|
51
|
+
console.error('Error verifying session token', (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)));
|
|
52
|
+
throw new shared_1.ShopifySessionInvalidError('Error verifying session token', Object.assign({ message: error === null || error === void 0 ? void 0 : error.message, name: error === null || error === void 0 ? void 0 : error.name }, error === null || error === void 0 ? void 0 : error.data));
|
|
50
53
|
}
|
|
51
54
|
return data;
|
|
52
55
|
});
|
|
53
56
|
};
|
|
57
|
+
exports.getVerifiedSessionData = getVerifiedSessionData;
|
|
54
58
|
//# sourceMappingURL=token.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/lib/utils/token.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/lib/utils/token.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAqC;AAErC,yCAKqB;AACrB,qCAAuC;AAEvC,iFAAiF;AAC1E,MAAM,sBAAsB,GAAG,CAAC,mBAAmB,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,EAAE;IACpG,MAAM,EAAC,UAAU,EAAE,GAAG,mBAAmB,CAAA;IAEzC,OAAO,CAAO,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;QACjD,IAAI,IAAI,CAAA;QACR,IAAI;YACF,kFAAkF;YAClF,6DAA6D;YAC7D,MAAM,KAA+B,IAAA,uBAAc,EAAC,YAAY,CAAC,EAA3D,EAAE,OAAO,EAAE,KAAK,OAA2C,EAAtC,KAAK,cAA1B,oBAA4B,CAA+B,CAAA;YACjE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;YACtD,IAAI,GAAG,KAAK,CAAA;YAEZ,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE;gBACtE,MAAM,IAAI,mCAA0B,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAA;aAC5G;YAED,6DAA6D;YAC7D,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAoB,OAAO,EAAtB,UAAU,UAAK,OAAO,EAA1C,qBAAgC,CAAU,CAAA;YAEhD,MAAM,aAAa,GAAG,cAAc,IAAI,IAAA,qBAAY,EAAC,IAAA,6BAAoB,EAAC,UAAU,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAA;YAE/G,MAAM,QAAQ,GAAG,IAAA,qBAAM,EAAC,YAAY,EAAE,aAAa,CAAC,CAAA;YAEpD,IAAI,QAAQ,IAAI,SAAS,EAAE;gBACzB,MAAM,IAAI,mCAA0B,CAAC,oBAAoB,CAAC,CAAA;aAC3D;SACF;QAAC,OAAO,KAAK,EAAE;YACd,mCAAmC;YACnC,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,IAAA,oBAAW,kBAAG,IAAI,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,IAAI,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,IAAI,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,IAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAG,CAAC,CAAA;YACjK,MAAM,IAAI,mCAA0B,CAAC,+BAA+B,kBAAI,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,IAAI,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,IAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAG,CAAA;SACtI;QAED,OAAO,IAAI,CAAA;IACb,CAAC,CAAA,CAAA;AACH,CAAC,CAAA;AAlCY,QAAA,sBAAsB,0BAkClC"}
|
package/dist/plugins/index.js
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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("./withShopify"), exports);
|
|
18
|
+
__exportStar(require("../shared/constants"), exports);
|
|
3
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,sDAAmC"}
|