@agnostack/next-shopify 1.8.1-beta.33 → 1.8.1-beta.34
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 +20 -13
- package/dist/handlers/api/auth.js.map +1 -1
- package/dist/handlers/api/callback.d.ts +1 -1
- package/dist/handlers/api/callback.js +71 -15
- package/dist/handlers/api/callback.js.map +1 -1
- package/dist/handlers/api/index.d.ts +1 -0
- package/dist/handlers/api/index.js +1 -0
- package/dist/handlers/api/index.js.map +1 -1
- package/dist/handlers/api/offline.d.ts +1 -0
- package/dist/handlers/api/offline.js +81 -0
- package/dist/handlers/api/offline.js.map +1 -0
- package/package.json +1 -1
|
@@ -5,30 +5,37 @@ const utils_1 = require("../../utils");
|
|
|
5
5
|
// NOTE: typically handling: "/api/auth"
|
|
6
6
|
const handleAuth = (serverRuntimeConfig) => async (req, res) => {
|
|
7
7
|
var _a;
|
|
8
|
-
const { API_URLS, API_PATHS, PAGE_PATHS } = serverRuntimeConfig;
|
|
9
8
|
const query = (_a = req.query) !== null && _a !== void 0 ? _a : {};
|
|
10
|
-
const {
|
|
9
|
+
const { PAGE_PATHS, API_PATHS, API_URLS, } = serverRuntimeConfig;
|
|
10
|
+
const { embedded, host, shop: _shop, isOnline: _isOnline } = query !== null && query !== void 0 ? query : {};
|
|
11
|
+
const isOnline = true; // isTrue(_isOnline)
|
|
12
|
+
console.log(`>>> > handleAuth > req > isOnline/_isOnline:`, { _isOnline, isOnline });
|
|
11
13
|
const shopify = await utils_1.getInitializedShopify(serverRuntimeConfig);
|
|
12
14
|
const shop = shopify.utils.sanitizeShop(_shop);
|
|
13
15
|
if (utils_1.stringEmpty(shop)) {
|
|
14
16
|
return res.redirect(`${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR]}?code=no_shop_provided&type=handleAuth`);
|
|
15
17
|
}
|
|
16
18
|
if (embedded === '1') {
|
|
19
|
+
const authCallbackUrl = API_URLS[utils_1.API_ROUTE_NAMES.AUTH_CALLBACK];
|
|
20
|
+
const callbackURL = isOnline
|
|
21
|
+
? authCallbackUrl
|
|
22
|
+
: API_URLS[utils_1.API_ROUTE_NAMES.AUTH_CALLBACK_OFFLINE] || authCallbackUrl;
|
|
17
23
|
// TODO: explore objectToQuerystring
|
|
18
|
-
const redirectUriParams = new URLSearchParams({
|
|
19
|
-
|
|
20
|
-
host,
|
|
21
|
-
}).toString();
|
|
22
|
-
const queryParams = new URLSearchParams(Object.assign(Object.assign({}, query), { shop, redirectUri: `${API_URLS[utils_1.API_ROUTE_NAMES.AUTH_CALLBACK]}?${redirectUriParams}` })).toString();
|
|
24
|
+
const redirectUriParams = new URLSearchParams({ shop, host }).toString();
|
|
25
|
+
const queryParams = new URLSearchParams(Object.assign(Object.assign({}, query), { shop, redirectUri: `${callbackURL}?${redirectUriParams}` })).toString();
|
|
23
26
|
return res.redirect(`${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.EXIT]}?${queryParams}`);
|
|
24
27
|
}
|
|
25
|
-
|
|
28
|
+
const authCallbackPath = API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_CALLBACK];
|
|
29
|
+
const callbackPath = isOnline
|
|
30
|
+
? authCallbackPath
|
|
31
|
+
: API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_CALLBACK_OFFLINE] || authCallbackPath;
|
|
32
|
+
const authPayload = {
|
|
26
33
|
shop,
|
|
27
|
-
isOnline
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
});
|
|
34
|
+
isOnline,
|
|
35
|
+
callbackPath,
|
|
36
|
+
};
|
|
37
|
+
console.log(`>>> > handleAuth > authPayload:`, authPayload);
|
|
38
|
+
return shopify.auth.begin(Object.assign(Object.assign({}, authPayload), { rawRequest: req, rawResponse: res }));
|
|
32
39
|
};
|
|
33
40
|
exports.handleAuth = handleAuth;
|
|
34
41
|
//# 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,uCAMoB;AAEpB,wCAAwC;AACjC,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;;IACpE,MAAM,KAAK,GAAG,MAAA,GAAG,CAAC,KAAK,mCAAI,EAAE,CAAA;IAC7B,MAAM,EACJ,UAAU,EACV,SAAS,EACT,QAAQ,GACT,GAAG,mBAAmB,CAAA;IACvB,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAA;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAA,CAAC,oBAAoB;IAC1C,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAC,CAAC,CAAA;IAElF,MAAM,OAAO,GAAG,MAAM,6BAAqB,CAAC,mBAAmB,CAAC,CAAA;IAChE,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,eAAe,GAAG,QAAQ,CAAC,uBAAe,CAAC,aAAa,CAAC,CAAA;QAC/D,MAAM,WAAW,GAAG,QAAQ;YAC1B,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,QAAQ,CAAC,uBAAe,CAAC,qBAAqB,CAAC,IAAI,eAAe,CAAA;QAEtE,oCAAoC;QACpC,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;QACxE,MAAM,WAAW,GAAG,IAAI,eAAe,iCAClC,KAAK,KACR,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,gBAAgB,GAAG,SAAS,CAAC,uBAAe,CAAC,aAAa,CAAC,CAAA;IACjE,MAAM,YAAY,GAAG,QAAQ;QAC3B,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,SAAS,CAAC,uBAAe,CAAC,qBAAqB,CAAC,IAAI,gBAAgB,CAAA;IAExE,MAAM,WAAW,GAAG;QAClB,IAAI;QACJ,QAAQ;QACR,YAAY;KACb,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAAA;IAE3D,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,iCACpB,WAAW,KACd,UAAU,EAAE,GAAG,EACf,WAAW,EAAE,GAAG,IAChB,CAAA;AACJ,CAAC,CAAA;AApDY,QAAA,UAAU,cAoDtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function handleCallback(serverRuntimeConfig: any): (req: any, res: any) => Promise<any>;
|
|
1
|
+
export function handleCallback(serverRuntimeConfig: any, params: any): (req: any, res: any) => Promise<any>;
|
|
@@ -3,29 +3,85 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.handleCallback = void 0;
|
|
4
4
|
const shopify_api_1 = require("@shopify/shopify-api");
|
|
5
5
|
const utils_1 = require("../../utils");
|
|
6
|
-
// NOTE: typically handling: "/api/auth/callback"
|
|
7
|
-
const handleCallback = (serverRuntimeConfig) => async (req, res) => {
|
|
8
|
-
var _a;
|
|
9
|
-
const {
|
|
10
|
-
|
|
6
|
+
// NOTE: typically handling: "/api/auth/callback" and "/api/auth/callback/offline"
|
|
7
|
+
const handleCallback = (serverRuntimeConfig, params) => async (req, res) => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const {
|
|
10
|
+
// PAYMENT_CONFIG,
|
|
11
|
+
PAGE_PATHS, API_PATHS,
|
|
12
|
+
// APP_WEBHOOKS: {
|
|
13
|
+
// // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
14
|
+
// [API_WEBHOOK_TOPICS.APP_UNINSTALLED]: _uninstalledWebhook,
|
|
15
|
+
// ...webhooks
|
|
16
|
+
// } = {},
|
|
17
|
+
} = serverRuntimeConfig;
|
|
18
|
+
// const { isOnline } = params ?? {}
|
|
19
|
+
const { shop, host } = (_a = req.query) !== null && _a !== void 0 ? _a : {};
|
|
20
|
+
console.log(`>>> > handleCallback > req.query:`, req.query);
|
|
21
|
+
const errorPath = PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR];
|
|
11
22
|
if (utils_1.stringEmpty(shop) || utils_1.stringEmpty(host)) {
|
|
12
23
|
// HMMM: why is this a 303 (rather than a 302 or or anything)??
|
|
13
|
-
return res.redirect(303, `${
|
|
24
|
+
return res.redirect(303, `${errorPath}?code=${utils_1.ERROR_CODES.INVALID_CALLBACK}`);
|
|
14
25
|
}
|
|
15
|
-
let redirectUrl = `${
|
|
26
|
+
let redirectUrl = `${errorPath}?invalid_callback_response`;
|
|
16
27
|
try {
|
|
17
28
|
const { shopify, storeSession } = await utils_1.getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
29
|
+
// const { shopify, storeSession, ensureBilling } = await getShopifyHelpers(serverRuntimeConfig, { shop })
|
|
30
|
+
// const authPayload = { rawRequest: req, rawResponse: res }
|
|
31
|
+
// const { session } = await shopify.auth.callback(authPayload)
|
|
32
|
+
// const encryptedSession = await storeSession(session.toObject())
|
|
33
|
+
// console.log(`>>> > handleCallback > isOnline:`, {
|
|
34
|
+
// isOnline,
|
|
35
|
+
// session: session.toObject(),
|
|
36
|
+
// isTOnline: isTrue(isOnline),
|
|
37
|
+
// webhooks,
|
|
38
|
+
// encryptedSession,
|
|
39
|
+
// })
|
|
40
|
+
// if (isTrue(isOnline) && objectNotEmpty(webhooks)) {
|
|
41
|
+
// console.log(`>>> > handleCallback > YEP!!!!`)
|
|
42
|
+
// // TODO: explore objectToQuerystring
|
|
43
|
+
// const queryParams = new URLSearchParams({ host, shop }).toString()
|
|
44
|
+
// console.log(`>>> > handleCallback > YEP > redirectUrl:`, `${API_PATHS[API_ROUTE_NAMES.AUTH]}?${queryParams}`)
|
|
45
|
+
// // return res.redirect(302, `${API_PATHS[API_ROUTE_NAMES.AUTH]}?${queryParams}`)
|
|
46
|
+
// return shopify.auth.begin({
|
|
47
|
+
// shop,
|
|
48
|
+
// rawRequest: req,
|
|
49
|
+
// rawResponse: res,
|
|
50
|
+
// callbackPath: API_PATHS[API_ROUTE_NAMES.AUTH_CALLBACK_OFFLINE],
|
|
51
|
+
// })
|
|
52
|
+
// }
|
|
53
|
+
// console.log(`>>> > handleCallback > session?.isOnline: '${session?.isOnline}'`)
|
|
54
|
+
// if (!isTrue(session?.isOnline)) {
|
|
55
|
+
// await shopify.webhooks.register({ session })
|
|
56
|
+
// }
|
|
57
|
+
// redirectUrl = await shopify.auth.getEmbeddedAppUrl(authPayload)
|
|
58
|
+
// console.log(`>>> > handleCallback > redirectUrl:`, redirectUrl)
|
|
59
|
+
// // TODO!!!!!: is this where we may actually need to fix???!?
|
|
60
|
+
// if (PAYMENT_CONFIG?.required) {
|
|
61
|
+
// const confirmationUrl = await ensureBilling(session)
|
|
62
|
+
// if (stringNotEmpty(confirmationUrl)) {
|
|
63
|
+
// redirectUrl = confirmationUrl
|
|
64
|
+
// }
|
|
65
|
+
// }
|
|
18
66
|
const authPayload = { rawRequest: req, rawResponse: res };
|
|
19
67
|
const { session } = await shopify.auth.callback(authPayload);
|
|
20
|
-
|
|
21
|
-
|
|
68
|
+
const encryptedSession = await storeSession(session.toObject());
|
|
69
|
+
console.log(`>>> > handleCallback > isOnline:`, {
|
|
70
|
+
// isOnline,
|
|
71
|
+
session: session.toObject(),
|
|
72
|
+
// isTOnline: isTrue(isOnline),
|
|
73
|
+
// webhooks,
|
|
74
|
+
encryptedSession,
|
|
75
|
+
});
|
|
76
|
+
// HMMM: move to handleOffline ONLY??
|
|
22
77
|
await shopify.webhooks.register({ session });
|
|
78
|
+
// TODO: conditionally do this
|
|
23
79
|
// NOTE redirect a second time to fetch the offline token
|
|
24
80
|
return shopify.auth.begin({
|
|
25
81
|
shop,
|
|
26
82
|
rawRequest: req,
|
|
27
83
|
rawResponse: res,
|
|
28
|
-
callbackPath: `${API_PATHS[utils_1.API_ROUTE_NAMES.
|
|
84
|
+
callbackPath: `${API_PATHS[utils_1.API_ROUTE_NAMES.AUTH_CALLBACK_OFFLINE]}`,
|
|
29
85
|
});
|
|
30
86
|
}
|
|
31
87
|
catch (error) {
|
|
@@ -51,26 +107,26 @@ const handleCallback = (serverRuntimeConfig) => async (req, res) => {
|
|
|
51
107
|
// TODO: fix these to not just redirect as standalone route (as app already installed)
|
|
52
108
|
case error instanceof shopify_api_1.BillingError: {
|
|
53
109
|
console.error(`${errorMessage}. Billing Error ${error.message}`, error.errorData);
|
|
54
|
-
redirectUrl =
|
|
110
|
+
redirectUrl = `${errorPath}?code=${utils_1.ERROR_CODES.BILLING}`;
|
|
55
111
|
break;
|
|
56
112
|
}
|
|
57
113
|
// TODO: fix these to not just redirect as standalone route (as app already installed)
|
|
58
114
|
case error instanceof shopify_api_1.GraphqlQueryError: {
|
|
59
|
-
const errorMessages = utils_1.ensureArray((
|
|
115
|
+
const errorMessages = utils_1.ensureArray((_b = error.response) === null || _b === void 0 ? void 0 : _b.errors).map(({ message }) => utils_1.ensureString(message));
|
|
60
116
|
console.error(`${errorMessage}. GraphqlQuery Error ${errorMessages.join('. ')}`);
|
|
61
|
-
redirectUrl =
|
|
117
|
+
redirectUrl = `${errorPath}?code=${utils_1.ERROR_CODES.QUERY}`;
|
|
62
118
|
break;
|
|
63
119
|
}
|
|
64
120
|
// TODO: fix these to not just redirect as standalone route (as app already installed)
|
|
65
121
|
case error instanceof shopify_api_1.InvalidOAuthError: {
|
|
66
122
|
console.error(`${errorMessage}. InvalidOAuth Error`, error);
|
|
67
|
-
redirectUrl =
|
|
123
|
+
redirectUrl = `${errorPath}?code=${utils_1.ERROR_CODES.OAUTH}`;
|
|
68
124
|
break;
|
|
69
125
|
}
|
|
70
126
|
// TODO: fix these to not just redirect as standalone route (as app already installed)
|
|
71
127
|
default: {
|
|
72
128
|
console.error(errorMessage, error);
|
|
73
|
-
redirectUrl =
|
|
129
|
+
redirectUrl = `${errorPath}?code=${utils_1.ERROR_CODES.CALLBACK}`;
|
|
74
130
|
}
|
|
75
131
|
}
|
|
76
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../src/handlers/api/callback.js"],"names":[],"mappings":";;;AAAA,sDAM6B;AAE7B,
|
|
1
|
+
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../src/handlers/api/callback.js"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ __exportStar(require("./auth"), exports);
|
|
|
15
15
|
__exportStar(require("./billing"), exports);
|
|
16
16
|
__exportStar(require("./callback"), exports);
|
|
17
17
|
__exportStar(require("./graph"), exports);
|
|
18
|
+
__exportStar(require("./offline"), exports);
|
|
18
19
|
__exportStar(require("./proxy"), exports);
|
|
19
20
|
__exportStar(require("./rest"), exports);
|
|
20
21
|
__exportStar(require("./token"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/api/index.js"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,yCAAsB;AACtB,4CAAyB;AACzB,6CAA0B;AAC1B,0CAAuB;AACvB,0CAAuB;AACvB,yCAAsB;AACtB,0CAAuB;AACvB,8CAA2B;AAC3B,4CAAyB;AAEzB,mEAAmE;AAC5D,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,GAAG,kBACD,UAAU,EAAE,KAAK,IACd,MAAM,CACV;CACF,CAAC,CAAA;AALW,QAAA,YAAY,gBAKvB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/api/index.js"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,yCAAsB;AACtB,4CAAyB;AACzB,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,0CAAuB;AACvB,yCAAsB;AACtB,0CAAuB;AACvB,8CAA2B;AAC3B,4CAAyB;AAEzB,mEAAmE;AAC5D,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,GAAG,kBACD,UAAU,EAAE,KAAK,IACd,MAAM,CACV;CACF,CAAC,CAAA;AALW,QAAA,YAAY,gBAKvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function handleOffline(serverRuntimeConfig: any): (req: any, res: any) => Promise<any>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleOffline = void 0;
|
|
4
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
5
|
+
const utils_1 = require("../../utils");
|
|
6
|
+
// NOTE: typically handling: "/api/auth/callback/offline"
|
|
7
|
+
const handleOffline = (serverRuntimeConfig) => async (req, res) => {
|
|
8
|
+
var _a;
|
|
9
|
+
const { PAGE_PATHS, PAYMENT_CONFIG, API_PATHS } = serverRuntimeConfig;
|
|
10
|
+
const { shop, host } = req.query;
|
|
11
|
+
const errorPath = PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR];
|
|
12
|
+
if (utils_1.stringEmpty(shop) || utils_1.stringEmpty(host)) {
|
|
13
|
+
// HMMM: why is this a 303 (rather than a 302 or or anything)??
|
|
14
|
+
return res.redirect(303, `${errorPath}?code=${utils_1.ERROR_CODES.INVALID_CALLBACK}`);
|
|
15
|
+
}
|
|
16
|
+
let redirectUrl = `${errorPath}?invalid_callback_response`;
|
|
17
|
+
try {
|
|
18
|
+
const { shopify, storeSession, ensureBilling } = await utils_1.getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
19
|
+
const authPayload = { rawRequest: req, rawResponse: res };
|
|
20
|
+
const { session } = await shopify.auth.callback(authPayload);
|
|
21
|
+
await storeSession(session.toObject());
|
|
22
|
+
await shopify.webhooks.register({ session });
|
|
23
|
+
redirectUrl = await shopify.auth.getEmbeddedAppUrl(authPayload);
|
|
24
|
+
// TODO!!!!!: is this where we may actually need to fix???!?
|
|
25
|
+
if (PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required) {
|
|
26
|
+
const confirmationUrl = await ensureBilling(session);
|
|
27
|
+
if (utils_1.stringNotEmpty(confirmationUrl)) {
|
|
28
|
+
redirectUrl = confirmationUrl;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error('Error handling offline route', error);
|
|
34
|
+
const errorMessage = 'Error handling offline route';
|
|
35
|
+
switch (true) {
|
|
36
|
+
// TODO implement a custom SessionNotFound error
|
|
37
|
+
case error instanceof shopify_api_1.InvalidHmacError: {
|
|
38
|
+
console.warn(`${errorMessage}. InvalidHmac Error ${error.message}`);
|
|
39
|
+
// TODO: explore objectToQuerystring
|
|
40
|
+
const queryParams = new URLSearchParams({ host, shop }).toString();
|
|
41
|
+
redirectUrl = `${API_PATHS[utils_1.API_ROUTE_NAMES.AUTH]}?${queryParams}`;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
case error instanceof shopify_api_1.CookieNotFound: {
|
|
45
|
+
console.warn(`${errorMessage}. This may occur if Cookie is already deleted. CookieNotFound Error ${error.message}`);
|
|
46
|
+
// TODO: explore objectToQuerystring
|
|
47
|
+
const queryParams = new URLSearchParams({ host, shop }).toString();
|
|
48
|
+
redirectUrl = `${API_PATHS[utils_1.API_ROUTE_NAMES.AUTH]}?${queryParams}`;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
// getEmbeddedAppUrl??
|
|
52
|
+
// TODO: fix these to not just redirect as standalone route (as app already installed)
|
|
53
|
+
case error instanceof shopify_api_1.BillingError: {
|
|
54
|
+
console.error(`${errorMessage}. Billing Error ${error.message}`, error.errorData);
|
|
55
|
+
redirectUrl = `${errorPath}?code=${utils_1.ERROR_CODES.BILLING}`;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
// TODO: fix these to not just redirect as standalone route (as app already installed)
|
|
59
|
+
case error instanceof shopify_api_1.GraphqlQueryError: {
|
|
60
|
+
const errorMessages = utils_1.ensureArray((_a = error.response) === null || _a === void 0 ? void 0 : _a.errors).map(({ message }) => utils_1.ensureString(message));
|
|
61
|
+
console.error(`${errorMessage}. GraphqlQuery Error ${errorMessages.join('. ')}`);
|
|
62
|
+
redirectUrl = `${errorPath}?code=${utils_1.ERROR_CODES.QUERY}`;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
// TODO: fix these to not just redirect as standalone route (as app already installed)
|
|
66
|
+
case error instanceof shopify_api_1.InvalidOAuthError: {
|
|
67
|
+
console.error(`${errorMessage}. InvalidOAuth Error`, error);
|
|
68
|
+
redirectUrl = `${errorPath}?code=${utils_1.ERROR_CODES.OAUTH}`;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
// TODO: fix these to not just redirect as standalone route (as app already installed)
|
|
72
|
+
default: {
|
|
73
|
+
console.error(errorMessage, error);
|
|
74
|
+
redirectUrl = `${errorPath}?code=${utils_1.ERROR_CODES.CALLBACK}`;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return res.redirect(302, redirectUrl);
|
|
79
|
+
};
|
|
80
|
+
exports.handleOffline = handleOffline;
|
|
81
|
+
//# sourceMappingURL=offline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offline.js","sourceRoot":"","sources":["../../../src/handlers/api/offline.js"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agnostack/next-shopify",
|
|
3
|
-
"version": "1.8.1-beta.
|
|
3
|
+
"version": "1.8.1-beta.34",
|
|
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",
|