@agnostack/next-shopify 1.8.15-alpha.8 → 1.8.15
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/handlers/api/auth.js +5 -63
- package/dist/handlers/api/auth.js.map +1 -1
- package/dist/handlers/api/callback.js +19 -18
- package/dist/handlers/api/callback.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/shopify-api-js/oauth.d.ts +8 -0
- package/dist/utils/shopify-api-js/oauth.js +61 -0
- package/dist/utils/shopify-api-js/oauth.js.map +1 -0
- package/package.json +1 -1
|
@@ -12,64 +12,15 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.handleAuth = void 0;
|
|
15
|
-
const runtime_1 = require("@shopify/shopify-api/runtime");
|
|
16
|
-
const shopify_api_1 = require("@shopify/shopify-api");
|
|
17
15
|
const utils_1 = require("../../utils");
|
|
18
|
-
const beginAuth = async (_a) => {
|
|
19
|
-
// throwIfCustomStoreApp(
|
|
20
|
-
// config.isCustomStoreApp,
|
|
21
|
-
// 'Cannot perform OAuth for private apps',
|
|
22
|
-
// );
|
|
23
|
-
var { config, shop, callbackPath, isOnline, state: stateProp } = _a, adapterArgs = __rest(_a, ["config", "shop", "callbackPath", "isOnline", "state"]);
|
|
24
|
-
const request = await runtime_1.abstractConvertRequest(adapterArgs);
|
|
25
|
-
const response = await runtime_1.abstractConvertIncomingResponse(adapterArgs);
|
|
26
|
-
// if (isbot(request.headers['User-Agent'])) {
|
|
27
|
-
// logForBot({request, log, func: 'begin'});
|
|
28
|
-
// response.statusCode = 410;
|
|
29
|
-
// return abstractConvertResponse(response, adapterArgs);
|
|
30
|
-
// }
|
|
31
|
-
const cookies = new runtime_1.Cookies(request, response, {
|
|
32
|
-
keys: [config.apiSecretKey],
|
|
33
|
-
secure: true,
|
|
34
|
-
});
|
|
35
|
-
const state = stateProp !== null && stateProp !== void 0 ? stateProp : utils_1.getNonce();
|
|
36
|
-
console.log(`>>> STATE ~ stateProp`, stateProp);
|
|
37
|
-
console.log(`>>> STATE ~ state`, state);
|
|
38
|
-
await cookies.setAndSign(shopify_api_1.STATE_COOKIE_NAME, state, {
|
|
39
|
-
expires: new Date(Date.now() + 60000),
|
|
40
|
-
sameSite: 'lax',
|
|
41
|
-
secure: true,
|
|
42
|
-
path: callbackPath,
|
|
43
|
-
});
|
|
44
|
-
const queryParams = new URLSearchParams({
|
|
45
|
-
client_id: config.apiKey,
|
|
46
|
-
scope: config.scopes.toString(),
|
|
47
|
-
redirect_uri: `${config.hostScheme}://${config.hostName}${callbackPath}`,
|
|
48
|
-
state,
|
|
49
|
-
'grant_options[]': isOnline ? 'per-user' : '',
|
|
50
|
-
}).toString();
|
|
51
|
-
// const processedQuery = new ProcessedQuery();
|
|
52
|
-
// processedQuery.putAll(query);
|
|
53
|
-
const { shop: cleanShop } = utils_1.getSanitizedShopData(shop);
|
|
54
|
-
// const cleanShop = sanitizeShop(config)(shop, true)!;
|
|
55
|
-
const redirectUrl = `https://${cleanShop}/admin/oauth/authorize?${queryParams}`;
|
|
56
|
-
response.statusCode = 302;
|
|
57
|
-
response.statusText = 'Found';
|
|
58
|
-
response.headers = Object.assign(Object.assign(Object.assign({}, response.headers), cookies.response.headers), { Location: redirectUrl });
|
|
59
|
-
return runtime_1.abstractConvertResponse(response, adapterArgs);
|
|
60
|
-
};
|
|
61
16
|
// NOTE: typically handling: "/api/auth/online" and "/api/auth/offline"
|
|
62
17
|
const handleAuth = (serverRuntimeConfig) => async (req, res, params) => {
|
|
63
18
|
var _a;
|
|
64
19
|
const { PAGE_PATHS, API_PATHS, API_URLS, APP_CONFIG, } = serverRuntimeConfig;
|
|
65
20
|
const { isOnline } = params !== null && params !== void 0 ? params : {};
|
|
66
|
-
const _b = (_a = req.query) !== null && _a !== void 0 ? _a : {}, { reAuth: _reAuth } = _b,
|
|
67
|
-
const { embedded, host, shop: _shop
|
|
21
|
+
const _b = (_a = req.query) !== null && _a !== void 0 ? _a : {}, { reAuth: _reAuth } = _b, query = __rest(_b, ["reAuth"]);
|
|
22
|
+
const { embedded, state, host, shop: _shop } = query;
|
|
68
23
|
const reAuth = utils_1.isTrue(_reAuth, 'undefined');
|
|
69
|
-
const onlineId = `AUTH-${isOnline ? 'ONLINE' : 'OFFLINE'} `;
|
|
70
|
-
console.log(`>>> ~ ${onlineId} START`);
|
|
71
|
-
console.log(`>>> ~ ${onlineId} params`, params);
|
|
72
|
-
console.log(`>>> ~ ${onlineId} req.query`, req.query);
|
|
73
24
|
const shopify = utils_1.getInitializedShopify(serverRuntimeConfig);
|
|
74
25
|
const shop = shopify.utils.sanitizeShop(_shop);
|
|
75
26
|
if (utils_1.stringEmpty(shop)) {
|
|
@@ -83,24 +34,15 @@ const handleAuth = (serverRuntimeConfig) => async (req, res, params) => {
|
|
|
83
34
|
return res.redirect(`${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.EXIT]}?${queryParams}`);
|
|
84
35
|
}
|
|
85
36
|
const callbackPath = utils_1.getCallback(API_PATHS, { reAuth, isOnline });
|
|
86
|
-
|
|
87
|
-
console.log(`>>> ~ ${onlineId} END`);
|
|
88
|
-
return beginAuth({
|
|
89
|
-
config: APP_CONFIG,
|
|
37
|
+
return utils_1.beginAuth({
|
|
90
38
|
shop,
|
|
39
|
+
state,
|
|
91
40
|
isOnline,
|
|
92
41
|
callbackPath,
|
|
93
|
-
state,
|
|
94
42
|
rawRequest: req,
|
|
95
43
|
rawResponse: res,
|
|
44
|
+
config: APP_CONFIG,
|
|
96
45
|
});
|
|
97
|
-
// return shopify.auth.begin({
|
|
98
|
-
// shop,
|
|
99
|
-
// isOnline,
|
|
100
|
-
// callbackPath,
|
|
101
|
-
// rawRequest: req,
|
|
102
|
-
// rawResponse: res,
|
|
103
|
-
// })
|
|
104
46
|
};
|
|
105
47
|
exports.handleAuth = handleAuth;
|
|
106
48
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/handlers/api/auth.js"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/handlers/api/auth.js"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,uCAOoB;AAEpB,wEAAwE;AACjE,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;;IAC5E,MAAM,EACJ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,UAAU,GACX,GAAG,mBAAmB,CAAA;IACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAA;IACjC,MAAM,KAAgC,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,EAA/C,EAAE,MAAM,EAAE,OAAO,OAA8B,EAAzB,KAAK,cAA3B,UAA6B,CAAkB,CAAA;IACrD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IACpD,MAAM,MAAM,GAAG,cAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAE3C,MAAM,OAAO,GAAG,6BAAqB,CAAC,mBAAmB,CAAC,CAAA;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAE9C,IAAI,mBAAW,CAAC,IAAI,CAAC,EAAE;QACrB,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,wBAAgB,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;KACnG;IAED,IAAI,QAAQ,KAAK,GAAG,EAAE;QACpB,MAAM,WAAW,GAAG,mBAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC/D,oCAAoC;QACpC,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC/E,MAAM,WAAW,GAAG,IAAI,eAAe,iCAClC,MAAM,KACT,IAAI,EACJ,WAAW,EAAE,GAAG,WAAW,IAAI,iBAAiB,EAAE,IAClD,CAAC,QAAQ,EAAE,CAAA;QAEb,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,wBAAgB,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,CAAA;KAC3E;IAED,MAAM,YAAY,GAAG,mBAAW,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;IAEjE,OAAO,iBAAS,CAAC;QACf,IAAI;QACJ,KAAK;QACL,QAAQ;QACR,YAAY;QACZ,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,GAAG;QAChB,MAAM,EAAE,UAAU;KACnB,CAAC,CAAA;AACJ,CAAC,CAAA;AA3CY,QAAA,UAAU,cA2CtB"}
|
|
@@ -27,14 +27,10 @@ const handleCallback = (serverRuntimeConfig) => async (req, res, params) => {
|
|
|
27
27
|
_f = utils_1.API_WEBHOOK_TOPICS.APP_UNINSTALLED,
|
|
28
28
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
29
29
|
_uninstalledWebhook = _e[_f], webhooks = __rest(_e, [typeof _f === "symbol" ? _f : _f + ""]);
|
|
30
|
+
const errorPath = PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR];
|
|
30
31
|
const { isOnline, reAuth } = params !== null && params !== void 0 ? params : {};
|
|
31
32
|
const { shop, host, state } = (_a = req.query) !== null && _a !== void 0 ? _a : {};
|
|
32
33
|
const authPayload = { rawRequest: req, rawResponse: res };
|
|
33
|
-
const onlineId = `CALLBACK-${isOnline ? 'ONLINE' : 'OFFLINE'} `;
|
|
34
|
-
console.log(`>>> ~ ${onlineId} START`);
|
|
35
|
-
console.log(`>>> ~ ${onlineId} params`, params);
|
|
36
|
-
console.log(`>>> ~ ${onlineId} req.query`, req.query);
|
|
37
|
-
const errorPath = PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR];
|
|
38
34
|
if (utils_1.stringEmpty(shop) || utils_1.stringEmpty(host)) {
|
|
39
35
|
// HMMM: why is this a 303 (rather than a 302 or or anything)??
|
|
40
36
|
return res.redirect(303, `${errorPath}?code=${utils_1.ERROR_CODES.INVALID_CALLBACK}`);
|
|
@@ -44,18 +40,22 @@ const handleCallback = (serverRuntimeConfig) => async (req, res, params) => {
|
|
|
44
40
|
try {
|
|
45
41
|
const { shopify: _shopify, storeSession, loadSession, ensureBilling } = await utils_1.getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
46
42
|
shopify = _shopify;
|
|
47
|
-
// NOTE our review approach requires that all paid apps must support offline tokens
|
|
48
|
-
const reviewMode = ((SHOPIFY_RUN_MODE === 'review') &&
|
|
49
|
-
(PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required) &&
|
|
50
|
-
API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_OFFLINE]);
|
|
51
43
|
const { session: _session } = await shopify.auth.callback(authPayload);
|
|
52
44
|
const session = _session.toObject();
|
|
45
|
+
const isReviewMode = ((SHOPIFY_RUN_MODE === 'review') &&
|
|
46
|
+
(PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required) &&
|
|
47
|
+
API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_OFFLINE]);
|
|
48
|
+
const shouldStoreSession = isOnline || !isReviewMode;
|
|
49
|
+
const shouldProcessOfflineAuth = isOnline && utils_1.objectNotEmpty(webhooks) && API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_OFFLINE];
|
|
50
|
+
const shouldRegisterWebhooks = !utils_1.isTrue(session === null || session === void 0 ? void 0 : session.isOnline) || !API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_OFFLINE];
|
|
51
|
+
const shouldCheckBilling = PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required;
|
|
53
52
|
// NOTE: billingStatus is a custom field we add when we're in review mode to handle reauth billing correctly
|
|
54
53
|
let billingStatus = 'PENDING';
|
|
55
|
-
if (
|
|
54
|
+
if (shouldStoreSession) {
|
|
56
55
|
await storeSession(session);
|
|
57
56
|
}
|
|
58
57
|
else {
|
|
58
|
+
// NOTE our review approach requires that all paid apps must support offline tokens
|
|
59
59
|
const offlineSession = await loadSession().catch((_error) => {
|
|
60
60
|
// NOTE: first time install, this is expected
|
|
61
61
|
if (!(_error instanceof utils_1.ShopifySessionMissingError)) {
|
|
@@ -66,26 +66,29 @@ const handleCallback = (serverRuntimeConfig) => async (req, res, params) => {
|
|
|
66
66
|
await storeSession(Object.assign(Object.assign({}, session), { billingStatus }));
|
|
67
67
|
}
|
|
68
68
|
// NOTE: return early to set up an offline token as webhooks cannot use the online one to make API calls
|
|
69
|
-
if (
|
|
69
|
+
if (shouldProcessOfflineAuth) {
|
|
70
70
|
// TODO: explore objectToQuerystring
|
|
71
71
|
const queryParams = new URLSearchParams({ host, shop, state, reAuth, isOnline: false }).toString();
|
|
72
72
|
return res.redirect(302, `${API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_OFFLINE]}?${queryParams}`);
|
|
73
73
|
}
|
|
74
|
-
if (
|
|
74
|
+
if (shouldRegisterWebhooks) {
|
|
75
75
|
const webhookHandlers = utils_1.getWebhookHandlers(serverRuntimeConfig);
|
|
76
76
|
shopify.webhooks.addHandlers(webhookHandlers);
|
|
77
77
|
// NOTE: webhooks cannot use an online session to make API calls to Shopify (but not all webooks may be doing that for all apps)
|
|
78
78
|
await shopify.webhooks.register({ session });
|
|
79
79
|
}
|
|
80
|
+
// NOTE this is the final/successful return URL
|
|
80
81
|
redirectUrl = await shopify.auth.getEmbeddedAppUrl(authPayload);
|
|
81
|
-
if (
|
|
82
|
+
if (shouldCheckBilling) {
|
|
82
83
|
// NOTE this ensures while in "review" mode that we rebill each time
|
|
83
|
-
const skipBillingCheck =
|
|
84
|
+
const skipBillingCheck = isReviewMode && (!utils_1.isTrue(reAuth) || (billingStatus != 'ACTIVE'));
|
|
84
85
|
const confirmationUrl = await ensureBilling(session, skipBillingCheck);
|
|
85
86
|
if (utils_1.stringNotEmpty(confirmationUrl)) {
|
|
86
87
|
redirectUrl = confirmationUrl;
|
|
87
88
|
}
|
|
88
89
|
}
|
|
90
|
+
// NOTE confirm that state can be appended to the confirmationUrl,
|
|
91
|
+
// otherwise we can append to the redirectUrl above the billing check
|
|
89
92
|
redirectUrl = utils_1.appendQuery(redirectUrl, new URLSearchParams({ state }).toString());
|
|
90
93
|
}
|
|
91
94
|
catch (error) {
|
|
@@ -112,7 +115,7 @@ const handleCallback = (serverRuntimeConfig) => async (req, res, params) => {
|
|
|
112
115
|
? authOnlinePath
|
|
113
116
|
: API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_OFFLINE] || authOnlinePath;
|
|
114
117
|
// TODO: explore objectToQuerystring
|
|
115
|
-
const queryParams = new URLSearchParams({ host, shop }).toString();
|
|
118
|
+
const queryParams = new URLSearchParams({ host, shop, state }).toString();
|
|
116
119
|
redirectUrl = `${authPath}?${queryParams}`;
|
|
117
120
|
break;
|
|
118
121
|
}
|
|
@@ -124,7 +127,7 @@ const handleCallback = (serverRuntimeConfig) => async (req, res, params) => {
|
|
|
124
127
|
? authOnlinePath
|
|
125
128
|
: API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_OFFLINE] || authOnlinePath;
|
|
126
129
|
// TODO: explore objectToQuerystring
|
|
127
|
-
const queryParams = new URLSearchParams({ host, shop }).toString();
|
|
130
|
+
const queryParams = new URLSearchParams({ host, shop, state }).toString();
|
|
128
131
|
redirectUrl = `${authPath}?${queryParams}`;
|
|
129
132
|
break;
|
|
130
133
|
}
|
|
@@ -150,8 +153,6 @@ const handleCallback = (serverRuntimeConfig) => async (req, res, params) => {
|
|
|
150
153
|
}
|
|
151
154
|
}
|
|
152
155
|
}
|
|
153
|
-
console.log(`>>> ~ ${onlineId} redirectUrl`, redirectUrl);
|
|
154
|
-
console.log(`>>> ~ ${onlineId} END`);
|
|
155
156
|
return res.redirect(302, redirectUrl);
|
|
156
157
|
};
|
|
157
158
|
exports.handleCallback = handleCallback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../src/handlers/api/callback.js"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sDAM6B;AAE7B,uCAgBoB;AAEpB;;;;;EAKE;AACK,MAAM,cAAc,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;;IAChF,MAUI,KAAA,mBAAmB,EAVjB,EACJ,SAAS,EACT,UAAU,EACV,cAAc,EACd,gBAAgB,OAMK,EALrB,oBAIM,EAJN,qBAII,EAAE,KAAA;IAHJ,6DAA6D;IAC7D,KAAC,0BAAkB,CAAC,eAAgB;IADpC,6DAA6D;IACvB,mBAAmB,SAAA,EACtD,QAAQ,cAHC,uCAIb,CACoB,CAAA;IACvB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAA;IACzC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,CAAA;IAC7C,MAAM,WAAW,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAA;IAEzD,
|
|
1
|
+
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../src/handlers/api/callback.js"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.js
CHANGED
|
@@ -18,4 +18,5 @@ __exportStar(require("./errors"), exports);
|
|
|
18
18
|
__exportStar(require("./firebase"), exports);
|
|
19
19
|
__exportStar(require("./session"), exports);
|
|
20
20
|
__exportStar(require("./shopify"), exports);
|
|
21
|
+
__exportStar(require("./shopify-api-js/oauth"), exports);
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.js"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAAyB;AACzB,8CAA2B;AAC3B,2CAAwB;AACxB,4CAAyB;AACzB,2CAAwB;AACxB,6CAA0B;AAC1B,4CAAyB;AACzB,4CAAyB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.js"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAAyB;AACzB,8CAA2B;AAC3B,2CAAwB;AACxB,4CAAyB;AACzB,2CAAwB;AACxB,6CAA0B;AAC1B,4CAAyB;AACzB,4CAAyB;AACzB,yDAAsC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.beginAuth = void 0;
|
|
15
|
+
const runtime_1 = require("@shopify/shopify-api/runtime");
|
|
16
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
17
|
+
const crypto_1 = require("../crypto");
|
|
18
|
+
const shopify_1 = require("../shopify");
|
|
19
|
+
// NOTE this is a custom implementation of shopify.auth.begin from @shopify/shopify-api
|
|
20
|
+
// for leveraging a custom auth state
|
|
21
|
+
const beginAuth = async (_a) => {
|
|
22
|
+
// TODO re-enable
|
|
23
|
+
// throwIfCustomStoreApp(
|
|
24
|
+
// config.isCustomStoreApp,
|
|
25
|
+
// 'Cannot perform OAuth for private apps',
|
|
26
|
+
// );
|
|
27
|
+
var { config, isOnline, callbackPath, shop: shopProp, state: stateProp } = _a, adapterArgs = __rest(_a, ["config", "isOnline", "callbackPath", "shop", "state"]);
|
|
28
|
+
const request = await runtime_1.abstractConvertRequest(adapterArgs);
|
|
29
|
+
const response = await runtime_1.abstractConvertIncomingResponse(adapterArgs);
|
|
30
|
+
// TODO re-enable
|
|
31
|
+
// if (isbot(request.headers['User-Agent'])) {
|
|
32
|
+
// logForBot({request, log, func: 'begin'});
|
|
33
|
+
// response.statusCode = 410;
|
|
34
|
+
// return abstractConvertResponse(response, adapterArgs);
|
|
35
|
+
// }
|
|
36
|
+
const cookies = new runtime_1.Cookies(request, response, {
|
|
37
|
+
keys: [config.apiSecretKey],
|
|
38
|
+
secure: true,
|
|
39
|
+
});
|
|
40
|
+
const { shop } = shopify_1.getSanitizedShopData(shopProp);
|
|
41
|
+
const state = stateProp !== null && stateProp !== void 0 ? stateProp : crypto_1.getNonce();
|
|
42
|
+
await cookies.setAndSign(shopify_api_1.STATE_COOKIE_NAME, state, {
|
|
43
|
+
expires: new Date(Date.now() + 60000),
|
|
44
|
+
sameSite: 'lax',
|
|
45
|
+
secure: true,
|
|
46
|
+
path: callbackPath,
|
|
47
|
+
});
|
|
48
|
+
const queryParams = new URLSearchParams({
|
|
49
|
+
client_id: config.apiKey,
|
|
50
|
+
scope: config.scopes.toString(),
|
|
51
|
+
redirect_uri: `${config.hostScheme}://${config.hostName}${callbackPath}`,
|
|
52
|
+
state,
|
|
53
|
+
'grant_options[]': isOnline ? 'per-user' : '',
|
|
54
|
+
}).toString();
|
|
55
|
+
response.statusCode = 302;
|
|
56
|
+
response.statusText = 'Found';
|
|
57
|
+
response.headers = Object.assign(Object.assign(Object.assign({}, response.headers), cookies.response.headers), { Location: `https://${shop}/admin/oauth/authorize?${queryParams}` });
|
|
58
|
+
return runtime_1.abstractConvertResponse(response, adapterArgs);
|
|
59
|
+
};
|
|
60
|
+
exports.beginAuth = beginAuth;
|
|
61
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/utils/shopify-api-js/oauth.js"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,0DAAwI;AACxI,sDAAwD;AAExD,sCAAoC;AACpC,wCAAiD;AAEjD,uFAAuF;AACvF,qCAAqC;AAC9B,MAAM,SAAS,GAAG,KAAK,EAAE,EAO/B,EAAE,EAAE;IACH,iBAAiB;IACjB,yBAAyB;IACzB,6BAA6B;IAC7B,6CAA6C;IAC7C,KAAK;QAZyB,EAC9B,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,OAEjB,EADI,WAAW,cANgB,uDAO/B,CADe;IAQd,MAAM,OAAO,GAAG,MAAM,gCAAsB,CAAC,WAAW,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,MAAM,yCAA+B,CAAC,WAAW,CAAC,CAAA;IAEnE,iBAAiB;IACjB,8CAA8C;IAC9C,8CAA8C;IAC9C,+BAA+B;IAC/B,2DAA2D;IAC3D,IAAI;IAEJ,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,8BAAoB,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,iBAAQ,EAAE,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,iCAAuB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;AACvD,CAAC,CAAA;AAxDY,QAAA,SAAS,aAwDrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agnostack/next-shopify",
|
|
3
|
-
"version": "1.8.15
|
|
3
|
+
"version": "1.8.15",
|
|
4
4
|
"author": "agnoStack Dev <developers@agnostack.com> (https://agnostack.com)",
|
|
5
5
|
"owner": "agnoStack",
|
|
6
6
|
"description": "Please contact agnoStack via info@agnostack.com for any questions",
|