@agnostack/next-shopify 1.7.0-alpha.54 → 1.7.0-alpha.56
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/auth.d.ts +1 -0
- package/dist/handlers/auth.js +8 -0
- package/dist/handlers/auth.js.map +1 -0
- package/dist/handlers/callback.d.ts +1 -0
- package/dist/handlers/callback.js +75 -0
- package/dist/handlers/callback.js.map +1 -0
- package/dist/handlers/graph.d.ts +1 -0
- package/dist/handlers/graph.js +75 -0
- package/dist/handlers/graph.js.map +1 -0
- package/dist/handlers/index.d.ts +5 -0
- package/dist/handlers/rest.d.ts +1 -0
- package/dist/handlers/rest.js +83 -0
- package/dist/handlers/rest.js.map +1 -0
- package/dist/handlers/uninstall.d.ts +6 -0
- package/dist/handlers/uninstall.js +62 -0
- package/dist/handlers/uninstall.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function handleAuth(serverRuntimeConfig: any): (req: any, res: any) => Promise<any>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleAuth = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
// NOTE: typically handling: "/api/auth"
|
|
6
|
+
const handleAuth = (serverRuntimeConfig) => async (req, res) => (utils_1.getRedirectUrl(serverRuntimeConfig, { req, res }));
|
|
7
|
+
exports.handleAuth = handleAuth;
|
|
8
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/handlers/auth.js"],"names":[],"mappings":";;;AAAA,oCAAyC;AAEzC,wCAAwC;AACjC,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CACrE,sBAAc,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAClD,CAAA;AAFY,QAAA,UAAU,cAEtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function handleCallback(serverRuntimeConfig: any): (req: any, res: any) => Promise<any>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleCallback = void 0;
|
|
4
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const handleCallbackError = (error, { API_PATHS, shop, host }) => {
|
|
7
|
+
var _a;
|
|
8
|
+
const errorMessage = 'Error handling callback route';
|
|
9
|
+
let redirectUrl;
|
|
10
|
+
switch (true) {
|
|
11
|
+
// TODO implement a custom SessionNotFound error
|
|
12
|
+
case error instanceof shopify_api_1.CookieNotFound: {
|
|
13
|
+
console.error(`${errorMessage}. Cookie Error`, error);
|
|
14
|
+
// TODO: explore objectToQuerystring
|
|
15
|
+
const queryParams = new URLSearchParams({ host, shop }).toString();
|
|
16
|
+
redirectUrl = `${API_PATHS[utils_1.API_ROUTE_NAMES.AUTH]}?${queryParams}`;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
case error instanceof shopify_api_1.BillingError: {
|
|
20
|
+
console.error(`${errorMessage}. Billing Error ${error.message}`, error.errorData);
|
|
21
|
+
redirectUrl = `/error?code=${utils_1.ERROR_CODES.BILLING}`;
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
case error instanceof shopify_api_1.GraphqlQueryError: {
|
|
25
|
+
const errorMessages = utils_1.ensureArray((_a = error.response) === null || _a === void 0 ? void 0 : _a.errors).map(({ message }) => utils_1.ensureString(message));
|
|
26
|
+
console.error(`${errorMessage}. GraphqlQuery Error ${errorMessages.join('. ')}`);
|
|
27
|
+
redirectUrl = `/error?code=${utils_1.ERROR_CODES.QUERY}`;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case error instanceof shopify_api_1.InvalidOAuthError: {
|
|
31
|
+
console.error(`${errorMessage}. InvalidOAuth Error`, error);
|
|
32
|
+
redirectUrl = `/error?code=${utils_1.ERROR_CODES.OAUTH}`;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
default: {
|
|
36
|
+
console.error(errorMessage, error);
|
|
37
|
+
redirectUrl = `/error?code=${utils_1.ERROR_CODES.CALLBACK}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return redirectUrl;
|
|
41
|
+
};
|
|
42
|
+
// NOTE: typically handling: "/api/auth/callback"
|
|
43
|
+
const handleCallback = (serverRuntimeConfig) => async (req, res) => {
|
|
44
|
+
const { PAGE_PATHS, PAYMENT_CONFIG, API_PATHS } = serverRuntimeConfig;
|
|
45
|
+
const { shop, host } = req.query;
|
|
46
|
+
if (utils_1.stringEmpty(shop) || utils_1.stringEmpty(host)) {
|
|
47
|
+
// HMMM: why is this a 303 (rather than a 302 or or anything)??
|
|
48
|
+
return res.redirect(303, `${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR]}?code=${utils_1.ERROR_CODES.INVALID_CALLBACK}`);
|
|
49
|
+
}
|
|
50
|
+
let redirectUrl = `${PAGE_PATHS[utils_1.PAGE_ROUTE_NAMES.ERROR]}?invalid_callback_response`;
|
|
51
|
+
try {
|
|
52
|
+
const { shopify, storeSession } = await utils_1.getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
53
|
+
const authPayload = { rawRequest: req, rawResponse: res };
|
|
54
|
+
// TODO investigate Error handling callback route. Cookie Error CookieNotFound [Error]: Cannot complete OAuth process. Could not find an OAuth cookie for shop url:
|
|
55
|
+
const { session } = await shopify.auth.callback(authPayload);
|
|
56
|
+
await storeSession(session.toObject());
|
|
57
|
+
await shopify.webhooks.register({ session });
|
|
58
|
+
// TODO: explore objectToQuerystring
|
|
59
|
+
const embeddedURL = await shopify.auth.getEmbeddedAppUrl(authPayload);
|
|
60
|
+
redirectUrl = `${embeddedURL}?${new URLSearchParams(req.query).toString()}`;
|
|
61
|
+
if (PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required) {
|
|
62
|
+
// HMMM: order of params/method sig??
|
|
63
|
+
const confirmationUrl = await utils_1.ensureBilling(shopify, session, PAYMENT_CONFIG);
|
|
64
|
+
if (utils_1.stringNotEmpty(confirmationUrl)) {
|
|
65
|
+
redirectUrl = confirmationUrl;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
redirectUrl = handleCallbackError(error, { API_PATHS, shop, host });
|
|
71
|
+
}
|
|
72
|
+
return res.redirect(302, redirectUrl);
|
|
73
|
+
};
|
|
74
|
+
exports.handleCallback = handleCallback;
|
|
75
|
+
//# sourceMappingURL=callback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../src/handlers/callback.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function handleGraph(serverRuntimeConfig: any): (req: any, res: any, params: any) => Promise<any>;
|
|
@@ -0,0 +1,75 @@
|
|
|
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.handleGraph = void 0;
|
|
15
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
16
|
+
const utils_1 = require("../utils");
|
|
17
|
+
const handleGraph = (serverRuntimeConfig) => async (req, res, params) => {
|
|
18
|
+
var _a, _b, _c;
|
|
19
|
+
const { body = '{}' } = req, _d = req.query, _e = _d === void 0 ? {} : _d, { shop, apiVersion } = _e, _query = __rest(_e, ["shop", "apiVersion"]);
|
|
20
|
+
const _f = params !== null && params !== void 0 ? params : JSON.parse(body), { query: graphQuery, variables: graphVariables } = _f, graphParams = __rest(_f, ["query", "variables"]);
|
|
21
|
+
let query = _query;
|
|
22
|
+
if (utils_1.isType(query, 'string')) {
|
|
23
|
+
query = utils_1.querystringToObject(query);
|
|
24
|
+
}
|
|
25
|
+
if (utils_1.stringEmpty(shop) || utils_1.stringEmpty(graphQuery)) {
|
|
26
|
+
return res.status(400).json({ message: 'Invalid arguments' });
|
|
27
|
+
}
|
|
28
|
+
let statusCode;
|
|
29
|
+
let response;
|
|
30
|
+
let message;
|
|
31
|
+
let headers = {};
|
|
32
|
+
try {
|
|
33
|
+
const { Graphql } = await utils_1.getVerifiedClients(serverRuntimeConfig, { req, res, shop, apiVersion });
|
|
34
|
+
response = await Graphql.query(Object.assign(Object.assign({ data: graphVariables ? {
|
|
35
|
+
query: graphQuery,
|
|
36
|
+
variables: graphVariables,
|
|
37
|
+
} : graphQuery }, utils_1.objectNotEmpty(query) && { query }), graphParams));
|
|
38
|
+
statusCode = 200;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
message = 'Error handling query call';
|
|
42
|
+
statusCode = 500;
|
|
43
|
+
switch (true) {
|
|
44
|
+
case error instanceof utils_1.ShopifyAuthenticationError: {
|
|
45
|
+
console.error(`${message}. Authentication Error`, error);
|
|
46
|
+
const errroResponse = utils_1.getAuthErrorResponse({ error, shop, serverRuntimeConfig });
|
|
47
|
+
statusCode = errroResponse.statusCode;
|
|
48
|
+
message = errroResponse.message;
|
|
49
|
+
headers = errroResponse.headers;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case error instanceof shopify_api_1.BillingError: {
|
|
53
|
+
console.error(`${message}. Billing Error - ${error.message}`, error.errorData);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
case error instanceof shopify_api_1.GraphqlQueryError: {
|
|
57
|
+
const errorMessages = utils_1.ensureArray((_a = error.response) === null || _a === void 0 ? void 0 : _a.errors).map(({ message }) => utils_1.ensureString(message));
|
|
58
|
+
console.error(`${message}. ${errorMessages.join('. ')}`);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
default: {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
Object.entries(headers).forEach(([key, value]) => {
|
|
67
|
+
res.setHeader(key, value);
|
|
68
|
+
});
|
|
69
|
+
if (!(response === null || response === void 0 ? void 0 : response.body)) {
|
|
70
|
+
return res.status(statusCode).json({ message });
|
|
71
|
+
}
|
|
72
|
+
return res.status(statusCode).json((_c = (_b = response.body) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : response.body);
|
|
73
|
+
};
|
|
74
|
+
exports.handleGraph = handleGraph;
|
|
75
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/handlers/graph.js"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sDAAsE;AAEtE,oCAUiB;AAEV,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;;IAC7E,MAAM,EAAE,IAAI,GAAG,IAAI,KAAkD,GAAG,EAAnD,KAAgD,GAAG,MAAR,EAA3C,qBAAyC,EAAE,KAAA,EAA3C,EAAS,IAAI,EAAE,UAAU,OAAkB,EAAb,MAAM,cAA7B,sBAA+B,CAAa,CAAA;IACxE,MAAM,KAAmE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAA7F,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,OAA+C,EAA1C,WAAW,cAA9D,sBAAgE,CAA6B,CAAA;IAEnG,IAAI,KAAK,GAAI,MAAM,CAAA;IACnB,IAAI,cAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;QAC3B,KAAK,GAAG,2BAAmB,CAAC,KAAK,CAAC,CAAA;KACnC;IAED,IAAI,mBAAW,CAAC,IAAI,CAAC,IAAI,mBAAW,CAAC,UAAU,CAAC,EAAE;QAChD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAA;KAC9D;IAED,IAAI,UAAU,CAAA;IACd,IAAI,QAAQ,CAAA;IACZ,IAAI,OAAO,CAAA;IACX,IAAI,OAAO,GAAG,EAAE,CAAA;IAEhB,IAAI;QACF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,0BAAkB,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QAEjG,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,+BAC5B,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;gBACrB,KAAK,EAAE,UAAU;gBACjB,SAAS,EAAE,cAAc;aAC1B,CAAC,CAAC,CAAC,UAAU,IACX,sBAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAClC,WAAW,EACd,CAAA;QAEF,UAAU,GAAG,GAAG,CAAA;KACjB;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,GAAG,2BAA2B,CAAA;QACrC,UAAU,GAAG,GAAG,CAAA;QAEhB,QAAQ,IAAI,EAAE;YACZ,KAAK,KAAK,YAAY,kCAA0B,CAAC,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,wBAAwB,EAAE,KAAK,CAAC,CAAA;gBACxD,MAAM,aAAa,GAAG,4BAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAA;gBAChF,UAAU,GAAG,aAAa,CAAC,UAAU,CAAA;gBACrC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAA;gBAC/B,OAAO,GAAG,aAAa,CAAC,OAAO,CAAA;gBAC/B,MAAK;aACN;YAED,KAAK,KAAK,YAAY,0BAAY,CAAC,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,qBAAqB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;gBAC9E,MAAK;aACN;YAED,KAAK,KAAK,YAAY,+BAAiB,CAAC,CAAC;gBACvC,MAAM,aAAa,GAAG,mBAAW,CAAC,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,oBAAY,CAAC,OAAO,CAAC,CAAC,CAAA;gBACrG,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACxD,MAAK;aACN;YAED,OAAO,CAAC,CAAC;gBACP,MAAK;aACN;SACF;KACF;IAED,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC/C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAA,EAAE;QACnB,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;KAChD;IAED,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,IAAI,mCAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC1E,CAAC,CAAA;AAvEY,QAAA,WAAW,eAuEvB"}
|
package/dist/handlers/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function handleRest(serverRuntimeConfig: any): (req: any, res: any, _params: any) => Promise<any>;
|
|
@@ -0,0 +1,83 @@
|
|
|
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.handleRest = void 0;
|
|
15
|
+
// NOTE: api routes do NOT work in `next export`
|
|
16
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
17
|
+
const utils_1 = require("../utils");
|
|
18
|
+
const handleRest = (serverRuntimeConfig) => async (req, res, _params) => {
|
|
19
|
+
const { query: _query, method: _method, body: _body } = req;
|
|
20
|
+
const { shop } = _query !== null && _query !== void 0 ? _query : {};
|
|
21
|
+
const _a = _params !== null && _params !== void 0 ? _params : {}, { method: methodParam, query: queryParam, body: bodyParam, path } = _a, params = __rest(_a, ["method", "query", "body", "path"]);
|
|
22
|
+
let queryData = queryParam !== null && queryParam !== void 0 ? queryParam : _query;
|
|
23
|
+
const body = bodyParam !== null && bodyParam !== void 0 ? bodyParam : _body;
|
|
24
|
+
const method = utils_1.ensureString(methodParam !== null && methodParam !== void 0 ? methodParam : _method).toLowerCase();
|
|
25
|
+
if (utils_1.isType(queryData, 'string')) {
|
|
26
|
+
queryData = utils_1.querystringToObject(queryData);
|
|
27
|
+
}
|
|
28
|
+
const _b = utils_1.ensureObject(queryData), { apiVersion } = _b, query = __rest(_b, ["apiVersion"]);
|
|
29
|
+
if (utils_1.stringEmpty(shop) || utils_1.stringEmpty(path)) {
|
|
30
|
+
return {
|
|
31
|
+
statusCode: 400,
|
|
32
|
+
message: 'Invalid arguments',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
let statusCode;
|
|
36
|
+
let response;
|
|
37
|
+
let message;
|
|
38
|
+
let headers = {};
|
|
39
|
+
try {
|
|
40
|
+
const { Rest } = await utils_1.getVerifiedClients(serverRuntimeConfig, { req, res, shop, apiVersion });
|
|
41
|
+
response = await Rest[method](Object.assign({ path,
|
|
42
|
+
query,
|
|
43
|
+
body, type: shopify_api_1.DataType.JSON }, params));
|
|
44
|
+
statusCode = 200;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
message = 'Error handling rest call';
|
|
48
|
+
statusCode = 500;
|
|
49
|
+
switch (true) {
|
|
50
|
+
case error instanceof utils_1.ShopifyAuthenticationError: {
|
|
51
|
+
console.error(`${message}. Authentication Error`, error);
|
|
52
|
+
const errroResponse = utils_1.getAuthErrorResponse({ error, shop, serverRuntimeConfig });
|
|
53
|
+
statusCode = errroResponse.statusCode;
|
|
54
|
+
message = errroResponse.message;
|
|
55
|
+
headers = errroResponse.headers;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case error instanceof shopify_api_1.BillingError: {
|
|
59
|
+
console.error(`${message}. Billing Error - ${error.message}`, error.errorData);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
default: {
|
|
63
|
+
console.error(message, error);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
Object.entries(utils_1.ensureObject(headers)).forEach(([key, value]) => {
|
|
69
|
+
res.setHeader(key, value);
|
|
70
|
+
});
|
|
71
|
+
if (!response) {
|
|
72
|
+
return res.status(statusCode).json({ message });
|
|
73
|
+
}
|
|
74
|
+
if ((params === null || params === void 0 ? void 0 : params.type) && ![shopify_api_1.DataType.GraphQL, shopify_api_1.DataType.JSON].includes(params.type)) {
|
|
75
|
+
return res.status(statusCode).send(response);
|
|
76
|
+
}
|
|
77
|
+
if (!(response === null || response === void 0 ? void 0 : response.body)) {
|
|
78
|
+
return res.status(statusCode).json({ message });
|
|
79
|
+
}
|
|
80
|
+
return res.status(statusCode).json(response.body);
|
|
81
|
+
};
|
|
82
|
+
exports.handleRest = handleRest;
|
|
83
|
+
//# sourceMappingURL=rest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../src/handlers/rest.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.rawBodyConfig = exports.handleAppUninstalled = void 0;
|
|
7
|
+
const raw_body_1 = __importDefault(require("raw-body"));
|
|
8
|
+
const runtime_1 = require("@shopify/shopify-api/runtime");
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
const setResponseConversions = ({ shop, findSession, deleteSessions }) => {
|
|
11
|
+
// NOTE setAbstractConvertIncomingResponseFunc is required if using setAbstractConvertResponseFunc
|
|
12
|
+
runtime_1.setAbstractConvertIncomingResponseFunc(async (args) => args);
|
|
13
|
+
runtime_1.setAbstractConvertResponseFunc(async (response, adapterArgs) => {
|
|
14
|
+
const { statusCode, statusText } = utils_1.ensureObject(response);
|
|
15
|
+
const { type, rawResponse } = utils_1.ensureObject(adapterArgs);
|
|
16
|
+
// NOTE additional check (before removing sessions) to ensure this is the uninstall response scenario (although this nay not be needed)
|
|
17
|
+
if (type === utils_1.API_WEBHOOK_TOPICS.APP_UNINSTALLED && statusCode === 200) {
|
|
18
|
+
const sessionsIds = await findSession(shop);
|
|
19
|
+
if (utils_1.arrayNotEmpty(sessionsIds)) {
|
|
20
|
+
await deleteSessions(sessionsIds.map(({ id }) => id));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return rawResponse.status(statusCode).send(statusText);
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
// NOTE: typically handling: "/api/webhooks/app/uninstalled"
|
|
27
|
+
const handleAppUninstalled = (serverRuntimeConfig) => async (req, res) => {
|
|
28
|
+
// NOTE raw request body is required for Shopify webhook validation
|
|
29
|
+
const rawBody = await raw_body_1.default(req).catch((error) => {
|
|
30
|
+
console.error('Error extracting raw body for app uninstall', error);
|
|
31
|
+
// HMMMM: dont think we can return a 500 here (vs a 200 w/ an error object)
|
|
32
|
+
return res.status(500).send('Unable to get request body');
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
const shop = req.headers['x-shopify-shop-domain'];
|
|
36
|
+
if (utils_1.stringEmpty(shop)) {
|
|
37
|
+
return res.status(400).send('Invalid shop');
|
|
38
|
+
}
|
|
39
|
+
const { shopify, findSession, deleteSessions } = await utils_1.getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
40
|
+
// NOTE these methods will intercept the response from shopify.webhooks.process
|
|
41
|
+
setResponseConversions({ shop, findSession, deleteSessions });
|
|
42
|
+
return shopify.webhooks.process({
|
|
43
|
+
rawBody: rawBody.toString(),
|
|
44
|
+
rawRequest: req,
|
|
45
|
+
rawResponse: res,
|
|
46
|
+
type: utils_1.API_WEBHOOK_TOPICS.APP_UNINSTALLED,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error('Error handling uninstall', error);
|
|
51
|
+
// HMMM: not sure this should/can send back a 500 here (vs 200 w error object in body)
|
|
52
|
+
return res.status(500).send('Error handling uninstall');
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
exports.handleAppUninstalled = handleAppUninstalled;
|
|
56
|
+
// NOTE raw request body is required for Shopify webhook validation
|
|
57
|
+
exports.rawBodyConfig = {
|
|
58
|
+
api: {
|
|
59
|
+
bodyParser: false,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/handlers/uninstall.js"],"names":[],"mappings":";;;;;;AAAA,wDAAiC;AACjC,0DAGqC;AAErC,oCAMiB;AAEjB,MAAM,sBAAsB,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE;IACvE,kGAAkG;IAClG,gDAAsC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;IAC5D,wCAA8B,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;QAC7D,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,oBAAY,CAAC,QAAQ,CAAC,CAAA;QACzD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,oBAAY,CAAC,WAAW,CAAC,CAAA;QAEvD,uIAAuI;QACvI,IAAI,IAAI,KAAK,0BAAkB,CAAC,eAAe,IAAI,UAAU,KAAK,GAAG,EAAE;YACrE,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;YAC3C,IAAI,qBAAa,CAAC,WAAW,CAAC,EAAE;gBAC9B,MAAM,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;aACtD;SACF;QAED,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,4DAA4D;AACrD,MAAM,oBAAoB,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC9E,mEAAmE;IACnE,MAAM,OAAO,GAAG,MAAM,kBAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACpD,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAA;QAEnE,2EAA2E;QAC3E,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,IAAI;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;QAEjD,IAAI,mBAAW,CAAC,IAAI,CAAC,EAAE;YACrB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;SAC5C;QAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,yBAAiB,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAEvG,+EAA+E;QAC/E,sBAAsB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAA;QAC7D,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC9B,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;YAC3B,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,GAAG;YAChB,IAAI,EAAE,0BAAkB,CAAC,eAAe;SACzC,CAAC,CAAA;KACH;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;QAChD,sFAAsF;QACtF,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;KACxD;AACH,CAAC,CAAA;AA/BY,QAAA,oBAAoB,wBA+BhC;AAED,mEAAmE;AACtD,QAAA,aAAa,GAAG;IAC3B,GAAG,EAAE;QACH,UAAU,EAAE,KAAK;KAClB;CACF,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agnostack/next-shopify",
|
|
3
|
-
"version": "1.7.0-alpha.
|
|
3
|
+
"version": "1.7.0-alpha.56",
|
|
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",
|