@agnostack/next-shopify 1.15.0-beta.13 → 1.15.0-beta.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/CHANGELOG.md +14 -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 +7 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.15.0-beta.15](https://github.com/agnostack/next-shopify/compare/v1.15.0-beta.14...v1.15.0-beta.15) (2023-12-08)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* wip ([fcef3ef](https://github.com/agnostack/next-shopify/commit/fcef3ef05eb908e316481de551b8bdec4f781c70))
|
|
7
|
+
|
|
8
|
+
# [1.15.0-beta.14](https://github.com/agnostack/next-shopify/compare/v1.15.0-beta.13...v1.15.0-beta.14) (2023-12-08)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* wip ([ed66c80](https://github.com/agnostack/next-shopify/commit/ed66c801b2784cb79d260f3c02c86aa8cfb5b839))
|
|
14
|
+
|
|
1
15
|
# [1.15.0-beta.13](https://github.com/agnostack/next-shopify/compare/v1.15.0-beta.12...v1.15.0-beta.13) (2023-12-08)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -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,30 +19,32 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
19
|
}
|
|
19
20
|
return t;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.handleAuth = void 0;
|
|
24
|
+
const utils_1 = require("../../utils");
|
|
25
|
+
const shared_1 = require("../../../shared");
|
|
23
26
|
// NOTE: typically handling: "/api/auth/online" and "/api/auth/offline"
|
|
24
|
-
|
|
27
|
+
const handleAuth = (serverRuntimeConfig) => (req, res, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
28
|
var _a;
|
|
26
29
|
const { PAGE_PATHS, API_PATHS, API_URLS, APP_CONFIG, } = serverRuntimeConfig;
|
|
27
30
|
const { isOnline } = params !== null && params !== void 0 ? params : {};
|
|
28
31
|
const _b = (_a = req.query) !== null && _a !== void 0 ? _a : {}, { reAuth: _reAuth } = _b, query = __rest(_b, ["reAuth"]);
|
|
29
32
|
const { embedded, state, host, shop: _shop } = query;
|
|
30
|
-
const reAuth = isTrue(_reAuth, 'undefined');
|
|
31
|
-
const shopify = getInitializedShopify(serverRuntimeConfig);
|
|
33
|
+
const reAuth = (0, shared_1.isTrue)(_reAuth, 'undefined');
|
|
34
|
+
const shopify = (0, utils_1.getInitializedShopify)(serverRuntimeConfig);
|
|
32
35
|
const shop = shopify.utils.sanitizeShop(_shop);
|
|
33
|
-
if (stringEmpty(shop)) {
|
|
34
|
-
return res.redirect(`${PAGE_PATHS[PAGE_ROUTE_NAMES.ERROR]}?code=no_shop_provided&type=handleAuth`);
|
|
36
|
+
if ((0, shared_1.stringEmpty)(shop)) {
|
|
37
|
+
return res.redirect(`${PAGE_PATHS[shared_1.PAGE_ROUTE_NAMES.ERROR]}?code=no_shop_provided&type=handleAuth`);
|
|
35
38
|
}
|
|
36
39
|
if (embedded === '1') {
|
|
37
|
-
const callbackUrl = getCallback(API_URLS, { reAuth, isOnline });
|
|
40
|
+
const callbackUrl = (0, utils_1.getCallback)(API_URLS, { reAuth, isOnline });
|
|
38
41
|
// TODO: explore objectToQuerystring
|
|
39
42
|
const redirectUriParams = new URLSearchParams({ shop, host, state }).toString();
|
|
40
43
|
const queryParams = new URLSearchParams(Object.assign(Object.assign({}, query), { shop, redirectUri: `${callbackUrl}?${redirectUriParams}` })).toString();
|
|
41
|
-
return res.redirect(`${PAGE_PATHS[PAGE_ROUTE_NAMES.EXIT]}?${queryParams}`);
|
|
44
|
+
return res.redirect(`${PAGE_PATHS[shared_1.PAGE_ROUTE_NAMES.EXIT]}?${queryParams}`);
|
|
42
45
|
}
|
|
43
|
-
const callbackPath = getCallback(API_PATHS, { reAuth, isOnline });
|
|
44
|
-
return beginAuth({
|
|
46
|
+
const callbackPath = (0, utils_1.getCallback)(API_PATHS, { reAuth, isOnline });
|
|
47
|
+
return (0, utils_1.beginAuth)({
|
|
45
48
|
shop,
|
|
46
49
|
state,
|
|
47
50
|
isOnline,
|
|
@@ -51,4 +54,5 @@ export const handleAuth = (serverRuntimeConfig) => (req, res, params) => __await
|
|
|
51
54
|
config: APP_CONFIG,
|
|
52
55
|
});
|
|
53
56
|
});
|
|
57
|
+
exports.handleAuth = handleAuth;
|
|
54
58
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/auth.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/auth.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAIoB;AACpB,4CAIwB;AAExB,wEAAwE;AACjE,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAO,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,IAAA,eAAM,EAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAE3C,MAAM,OAAO,GAAG,IAAA,6BAAqB,EAAC,mBAAmB,CAAC,CAAA;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAE9C,IAAI,IAAA,oBAAW,EAAC,IAAI,CAAC,EAAE;QACrB,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,yBAAgB,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;KACnG;IAED,IAAI,QAAQ,KAAK,GAAG,EAAE;QACpB,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,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,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,yBAAgB,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,CAAA;KAC3E;IAED,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;IAEjE,OAAO,IAAA,iBAAS,EAAC;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,CAAA;AA3CY,QAAA,UAAU,cA2CtB"}
|
|
@@ -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,25 +19,27 @@ 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.handleAppBilling = void 0;
|
|
24
|
+
const utils_1 = require("../../utils");
|
|
25
|
+
const verification_1 = require("../../../verification");
|
|
26
|
+
const shared_1 = require("../../../shared");
|
|
24
27
|
const TERMINAL_STATUSES = [
|
|
25
28
|
'EXPIRED',
|
|
26
29
|
'DECLINED',
|
|
27
30
|
'CANCELLED'
|
|
28
31
|
];
|
|
29
32
|
// NOTE: typically handling: "/api/webhooks/app/billing"
|
|
30
|
-
|
|
33
|
+
const handleAppBilling = (serverRuntimeConfig) => (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
34
|
var _a;
|
|
32
35
|
try {
|
|
33
36
|
const { 'x-shop-domain': shopDomain, 'x-shopify-shop-domain': shopifyShopDomain, 'x-shopify-shop': shop = shopifyShopDomain !== null && shopifyShopDomain !== void 0 ? shopifyShopDomain : shopDomain, } = (_a = req.headers) !== null && _a !== void 0 ? _a : {};
|
|
34
|
-
if (stringEmpty(shop)) {
|
|
37
|
+
if ((0, shared_1.stringEmpty)(shop)) {
|
|
35
38
|
return res.status(200).json({ handler: 'billing', error: 'Missing shop' });
|
|
36
39
|
}
|
|
37
|
-
const { shopify, loadSession, updateSession, getVerifiedClients } = yield getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
40
|
+
const { shopify, loadSession, updateSession, getVerifiedClients } = yield (0, utils_1.getShopifyHelpers)(serverRuntimeConfig, { shop });
|
|
38
41
|
// TODO: explore getVerificationHelpers?
|
|
39
|
-
const rawBody = yield ensureRawBody(req);
|
|
42
|
+
const rawBody = yield (0, verification_1.ensureRawBody)(req);
|
|
40
43
|
const _b = yield shopify.webhooks.validate({
|
|
41
44
|
rawBody,
|
|
42
45
|
rawRequest: req,
|
|
@@ -45,8 +48,8 @@ export const handleAppBilling = (serverRuntimeConfig) => (req, res) => __awaiter
|
|
|
45
48
|
if (valid) {
|
|
46
49
|
try {
|
|
47
50
|
let message = 'ignored';
|
|
48
|
-
const [eventType, { status } = {}] = Object.entries(safeParse(rawBody || '{}'))[0];
|
|
49
|
-
if ((eventType === BILLING_EVENT_TYPES.SUBSCRIPTION) && TERMINAL_STATUSES.includes(status)) {
|
|
51
|
+
const [eventType, { status } = {}] = Object.entries((0, shared_1.safeParse)(rawBody || '{}'))[0];
|
|
52
|
+
if ((eventType === shared_1.BILLING_EVENT_TYPES.SUBSCRIPTION) && TERMINAL_STATUSES.includes(status)) {
|
|
50
53
|
const { Rest } = yield getVerifiedClients();
|
|
51
54
|
// NOTE: this deletes the app in the case of subscription apps in a "terminal" state to cover the info in ShopifyApi docs for billing:
|
|
52
55
|
// "Note: the merchant may refuse payment when prompted or cancel subscriptions later on, but the app will already be installed at that point. We recommend using billing webhooks to revoke access for merchants when they cancel / decline payment."
|
|
@@ -74,4 +77,5 @@ export const handleAppBilling = (serverRuntimeConfig) => (req, res) => __awaiter
|
|
|
74
77
|
return res.status(200).json({ handler: 'billing', error: 'Error handling billing' });
|
|
75
78
|
}
|
|
76
79
|
});
|
|
80
|
+
exports.handleAppBilling = handleAppBilling;
|
|
77
81
|
//# sourceMappingURL=billing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/billing.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/billing.js"],"names":[],"mappings":"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"}
|
|
@@ -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,39 +19,41 @@ 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.handleCallback = void 0;
|
|
24
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
25
|
+
const utils_1 = require("../../utils");
|
|
26
|
+
const shared_1 = require("../../../shared");
|
|
24
27
|
/* NOTE: typically handling:
|
|
25
28
|
* "/api/auth/online/callback"
|
|
26
29
|
* "/api/auth/offline/callback"
|
|
27
30
|
* "/api/auth/online/callback/reauth"
|
|
28
31
|
* "/api/auth/offline/callback/reauth"
|
|
29
32
|
*/
|
|
30
|
-
|
|
33
|
+
const handleCallback = (serverRuntimeConfig) => (req, res, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
34
|
var _a, _b;
|
|
32
35
|
const _c = serverRuntimeConfig, { API_PATHS, PAGE_PATHS, PAYMENT_CONFIG } = _c, _d = _c.APP_WEBHOOKS, _e = _d === void 0 ? {} : _d,
|
|
33
36
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
34
|
-
_f = API_WEBHOOK_TOPICS.APP_UNINSTALLED,
|
|
37
|
+
_f = shared_1.API_WEBHOOK_TOPICS.APP_UNINSTALLED,
|
|
35
38
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
36
39
|
_uninstalledWebhook = _e[_f], webhooks = __rest(_e, [typeof _f === "symbol" ? _f : _f + ""]);
|
|
37
|
-
const errorPath = PAGE_PATHS[PAGE_ROUTE_NAMES.ERROR];
|
|
40
|
+
const errorPath = PAGE_PATHS[shared_1.PAGE_ROUTE_NAMES.ERROR];
|
|
38
41
|
const { isOnline, reAuth } = params !== null && params !== void 0 ? params : {};
|
|
39
42
|
const { shop, host, state } = (_a = req.query) !== null && _a !== void 0 ? _a : {};
|
|
40
43
|
const authPayload = { rawRequest: req, rawResponse: res };
|
|
41
|
-
if (stringEmpty(shop) || stringEmpty(host)) {
|
|
44
|
+
if ((0, shared_1.stringEmpty)(shop) || (0, shared_1.stringEmpty)(host)) {
|
|
42
45
|
// HMMM: why is this a 303 (rather than a 302 or or anything)??
|
|
43
|
-
return res.redirect(303, `${errorPath}?code=${ERROR_CODES.INVALID_CALLBACK}`);
|
|
46
|
+
return res.redirect(303, `${errorPath}?code=${shared_1.ERROR_CODES.INVALID_CALLBACK}`);
|
|
44
47
|
}
|
|
45
48
|
let redirectUrl = `${errorPath}?code=invalid_callback_response`;
|
|
46
49
|
let shopify;
|
|
47
50
|
try {
|
|
48
|
-
const { shopify: _shopify, loadAppData, storeSession: encryptStoreSession, ensureBilling: handleEnsureBilling, } = yield getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
51
|
+
const { shopify: _shopify, loadAppData, storeSession: encryptStoreSession, ensureBilling: handleEnsureBilling, } = yield (0, utils_1.getShopifyHelpers)(serverRuntimeConfig, { shop });
|
|
49
52
|
shopify = _shopify;
|
|
50
53
|
const { session: _session } = yield shopify.auth.callback(authPayload);
|
|
51
54
|
const session = _session.toObject();
|
|
52
|
-
const shouldProcessOfflineAuth = (isOnline && objectNotEmpty(webhooks) && API_PATHS[API_ROUTE_NAMES.AUTH_OFFLINE]);
|
|
53
|
-
const shouldRegisterWebhooks = (!isTrue(session === null || session === void 0 ? void 0 : session.isOnline) || !API_PATHS[API_ROUTE_NAMES.AUTH_OFFLINE]);
|
|
55
|
+
const shouldProcessOfflineAuth = (isOnline && (0, shared_1.objectNotEmpty)(webhooks) && API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE]);
|
|
56
|
+
const shouldRegisterWebhooks = (!(0, shared_1.isTrue)(session === null || session === void 0 ? void 0 : session.isOnline) || !API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE]);
|
|
54
57
|
const shouldCheckBilling = PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required;
|
|
55
58
|
// NOTE: handleEnsureBilling below handles calling encryptStoreSession for offline session when shouldCheckBilling
|
|
56
59
|
if (isOnline || !shouldCheckBilling) {
|
|
@@ -60,36 +63,36 @@ export const handleCallback = (serverRuntimeConfig) => (req, res, params) => __a
|
|
|
60
63
|
if (shouldProcessOfflineAuth) {
|
|
61
64
|
// TODO: explore objectToQuerystring
|
|
62
65
|
const queryParams = new URLSearchParams({ host, shop, state, reAuth, isOnline: false }).toString();
|
|
63
|
-
return res.redirect(302, `${API_PATHS[API_ROUTE_NAMES.AUTH_OFFLINE]}?${queryParams}`);
|
|
66
|
+
return res.redirect(302, `${API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE]}?${queryParams}`);
|
|
64
67
|
}
|
|
65
68
|
if (shouldRegisterWebhooks) {
|
|
66
69
|
let appId;
|
|
67
70
|
try {
|
|
68
71
|
const { appInfo } = yield loadAppData();
|
|
69
|
-
appId = normalizeShopifyId(appInfo === null || appInfo === void 0 ? void 0 : appInfo.id).id;
|
|
72
|
+
appId = (0, shared_1.normalizeShopifyId)(appInfo === null || appInfo === void 0 ? void 0 : appInfo.id).id;
|
|
70
73
|
// eslint-disable-next-line no-empty
|
|
71
74
|
}
|
|
72
75
|
catch (_ignore) {
|
|
73
76
|
console.info('Ignoring error loading appData', _ignore);
|
|
74
77
|
}
|
|
75
|
-
const webhookHandlers = prepareWebhookHandlers(serverRuntimeConfig, { appId });
|
|
78
|
+
const webhookHandlers = (0, utils_1.prepareWebhookHandlers)(serverRuntimeConfig, { appId });
|
|
76
79
|
shopify.webhooks.addHandlers(webhookHandlers);
|
|
77
80
|
// 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
81
|
yield shopify.webhooks.register({ session });
|
|
79
82
|
}
|
|
80
83
|
const embeddedAppUrl = yield shopify.auth.getEmbeddedAppUrl(authPayload);
|
|
81
84
|
// NOTE this is the final/successful return URL
|
|
82
|
-
redirectUrl = `${embeddedAppUrl}${ensureLeadingSlash(PAGE_PATHS[PAGE_ROUTE_NAMES.SUCCESS])}`;
|
|
85
|
+
redirectUrl = `${embeddedAppUrl}${(0, shared_1.ensureLeadingSlash)(PAGE_PATHS[shared_1.PAGE_ROUTE_NAMES.SUCCESS])}`;
|
|
83
86
|
if (shouldCheckBilling) {
|
|
84
87
|
// NOTE: handleEnsureBilling handles calling encryptStoreSession for offline session when shouldCheckBilling
|
|
85
88
|
const confirmationUrl = yield handleEnsureBilling(session, reAuth);
|
|
86
|
-
if (stringNotEmpty(confirmationUrl)) {
|
|
89
|
+
if ((0, shared_1.stringNotEmpty)(confirmationUrl)) {
|
|
87
90
|
redirectUrl = confirmationUrl;
|
|
88
91
|
}
|
|
89
92
|
}
|
|
90
93
|
// NOTE confirm that state can be appended to the confirmationUrl,
|
|
91
94
|
// otherwise we can append to the redirectUrl above the billing check
|
|
92
|
-
redirectUrl = appendQuery(redirectUrl, new URLSearchParams({ state }).toString());
|
|
95
|
+
redirectUrl = (0, shared_1.appendQuery)(redirectUrl, new URLSearchParams({ state }).toString());
|
|
93
96
|
}
|
|
94
97
|
catch (error) {
|
|
95
98
|
console.error('Error handling callback route', error);
|
|
@@ -98,8 +101,8 @@ export const handleCallback = (serverRuntimeConfig) => (req, res, params) => __a
|
|
|
98
101
|
if (shopify) {
|
|
99
102
|
try {
|
|
100
103
|
const embeddedAppUrl = yield shopify.auth.getEmbeddedAppUrl(authPayload);
|
|
101
|
-
if (stringNotEmpty(embeddedAppUrl)) {
|
|
102
|
-
baseErrorUrl = `${embeddedAppUrl}${ensureLeadingSlash(errorPath)}`;
|
|
104
|
+
if ((0, shared_1.stringNotEmpty)(embeddedAppUrl)) {
|
|
105
|
+
baseErrorUrl = `${embeddedAppUrl}${(0, shared_1.ensureLeadingSlash)(errorPath)}`;
|
|
103
106
|
}
|
|
104
107
|
// eslint-disable-next-line no-empty
|
|
105
108
|
}
|
|
@@ -107,52 +110,53 @@ export const handleCallback = (serverRuntimeConfig) => (req, res, params) => __a
|
|
|
107
110
|
}
|
|
108
111
|
switch (true) {
|
|
109
112
|
// TODO implement a custom SessionNotFound error
|
|
110
|
-
case error instanceof InvalidHmacError: {
|
|
113
|
+
case error instanceof shopify_api_1.InvalidHmacError: {
|
|
111
114
|
console.warn(`${errorMessage}. InvalidHmac Error ${error.message}`);
|
|
112
115
|
// HMMMM: not sure
|
|
113
|
-
const authOnlinePath = API_PATHS[API_ROUTE_NAMES.AUTH_ONLINE];
|
|
116
|
+
const authOnlinePath = API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_ONLINE];
|
|
114
117
|
const authPath = isOnline
|
|
115
118
|
? authOnlinePath
|
|
116
|
-
: API_PATHS[API_ROUTE_NAMES.AUTH_OFFLINE] || authOnlinePath;
|
|
119
|
+
: API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE] || authOnlinePath;
|
|
117
120
|
// TODO: explore objectToQuerystring
|
|
118
121
|
const queryParams = new URLSearchParams({ host, shop, state }).toString();
|
|
119
122
|
redirectUrl = `${authPath}?${queryParams}`;
|
|
120
123
|
break;
|
|
121
124
|
}
|
|
122
|
-
case error instanceof CookieNotFound: {
|
|
125
|
+
case error instanceof shopify_api_1.CookieNotFound: {
|
|
123
126
|
console.warn(`${errorMessage}. This may occur if Cookie is already deleted. CookieNotFound Error ${error.message}`);
|
|
124
127
|
// HMMMM: not sure
|
|
125
|
-
const authOnlinePath = API_PATHS[API_ROUTE_NAMES.AUTH_ONLINE];
|
|
128
|
+
const authOnlinePath = API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_ONLINE];
|
|
126
129
|
const authPath = isOnline
|
|
127
130
|
? authOnlinePath
|
|
128
|
-
: API_PATHS[API_ROUTE_NAMES.AUTH_OFFLINE] || authOnlinePath;
|
|
131
|
+
: API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE] || authOnlinePath;
|
|
129
132
|
// TODO: explore objectToQuerystring
|
|
130
133
|
const queryParams = new URLSearchParams({ host, shop, state }).toString();
|
|
131
134
|
redirectUrl = `${authPath}?${queryParams}`;
|
|
132
135
|
break;
|
|
133
136
|
}
|
|
134
|
-
case error instanceof BillingError: {
|
|
137
|
+
case error instanceof shopify_api_1.BillingError: {
|
|
135
138
|
console.error(`${errorMessage}. Billing Error ${error.message}`, error.errorData);
|
|
136
|
-
redirectUrl = `${baseErrorUrl}?code=${ERROR_CODES.BILLING}`;
|
|
139
|
+
redirectUrl = `${baseErrorUrl}?code=${shared_1.ERROR_CODES.BILLING}`;
|
|
137
140
|
break;
|
|
138
141
|
}
|
|
139
|
-
case error instanceof GraphqlQueryError: {
|
|
140
|
-
const errorMessages = ensureArray((_b = error.response) === null || _b === void 0 ? void 0 : _b.errors).map(({ message }) => ensureString(message));
|
|
142
|
+
case error instanceof shopify_api_1.GraphqlQueryError: {
|
|
143
|
+
const errorMessages = (0, shared_1.ensureArray)((_b = error.response) === null || _b === void 0 ? void 0 : _b.errors).map(({ message }) => (0, shared_1.ensureString)(message));
|
|
141
144
|
console.error(`${errorMessage}. GraphqlQuery Error ${errorMessages.join('. ')}`);
|
|
142
|
-
redirectUrl = `${baseErrorUrl}?code=${ERROR_CODES.QUERY}`;
|
|
145
|
+
redirectUrl = `${baseErrorUrl}?code=${shared_1.ERROR_CODES.QUERY}`;
|
|
143
146
|
break;
|
|
144
147
|
}
|
|
145
|
-
case error instanceof InvalidOAuthError: {
|
|
148
|
+
case error instanceof shopify_api_1.InvalidOAuthError: {
|
|
146
149
|
console.error(`${errorMessage}. InvalidOAuth Error`, error);
|
|
147
|
-
redirectUrl = `${baseErrorUrl}?code=${ERROR_CODES.OAUTH}`;
|
|
150
|
+
redirectUrl = `${baseErrorUrl}?code=${shared_1.ERROR_CODES.OAUTH}`;
|
|
148
151
|
break;
|
|
149
152
|
}
|
|
150
153
|
default: {
|
|
151
154
|
console.error(errorMessage, error);
|
|
152
|
-
redirectUrl = `${baseErrorUrl}?code=${ERROR_CODES.CALLBACK}`;
|
|
155
|
+
redirectUrl = `${baseErrorUrl}?code=${shared_1.ERROR_CODES.CALLBACK}`;
|
|
153
156
|
}
|
|
154
157
|
}
|
|
155
158
|
}
|
|
156
159
|
return res.redirect(302, redirectUrl);
|
|
157
160
|
});
|
|
161
|
+
exports.handleCallback = handleCallback;
|
|
158
162
|
//# sourceMappingURL=callback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/callback.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/callback.js"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
+
exports.getAPIConfig = void 0;
|
|
18
|
+
__exportStar(require("./auth"), exports);
|
|
19
|
+
__exportStar(require("./billing"), exports);
|
|
20
|
+
__exportStar(require("./callback"), exports);
|
|
21
|
+
__exportStar(require("./uninstall"), exports);
|
|
22
|
+
__exportStar(require("./verifiable"), exports);
|
|
23
|
+
__exportStar(require("./webhook"), exports);
|
|
24
|
+
const getAPIConfig = (config) => ({
|
|
8
25
|
api: Object.assign({ bodyParser: false }, config),
|
|
9
26
|
});
|
|
27
|
+
exports.getAPIConfig = getAPIConfig;
|
|
10
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/index.js"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAAsB;AACtB,4CAAyB;AACzB,6CAA0B;AAC1B,8CAA2B;AAC3B,+CAA4B;AAC5B,4CAAyB;AAElB,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,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,20 +19,22 @@ 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.handleAppUninstalled = void 0;
|
|
24
|
+
const utils_1 = require("../../utils");
|
|
25
|
+
const verification_1 = require("../../../verification");
|
|
26
|
+
const shared_1 = require("../../../shared");
|
|
24
27
|
// NOTE: typically handling: "/api/webhooks/app/uninstalled"
|
|
25
|
-
|
|
28
|
+
const handleAppUninstalled = (serverRuntimeConfig) => (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
29
|
var _a;
|
|
27
30
|
try {
|
|
28
31
|
const { 'x-shop-domain': shopDomain, 'x-shopify-shop-domain': shopifyShopDomain, 'x-shopify-shop': shop = shopifyShopDomain !== null && shopifyShopDomain !== void 0 ? shopifyShopDomain : shopDomain, } = (_a = req.headers) !== null && _a !== void 0 ? _a : {};
|
|
29
|
-
if (stringEmpty(shop)) {
|
|
32
|
+
if ((0, shared_1.stringEmpty)(shop)) {
|
|
30
33
|
return res.status(200).json({ handler: 'uninstall', error: 'Missing shop' });
|
|
31
34
|
}
|
|
32
|
-
const { shopify, findSessionIds, deleteSessions } = yield getShopifyHelpers(serverRuntimeConfig, { shop });
|
|
35
|
+
const { shopify, findSessionIds, deleteSessions } = yield (0, utils_1.getShopifyHelpers)(serverRuntimeConfig, { shop });
|
|
33
36
|
// TODO: explore getVerificationHelpers?
|
|
34
|
-
const rawBody = yield ensureRawBody(req);
|
|
37
|
+
const rawBody = yield (0, verification_1.ensureRawBody)(req);
|
|
35
38
|
const _b = yield shopify.webhooks.validate({
|
|
36
39
|
rawBody,
|
|
37
40
|
rawRequest: req,
|
|
@@ -40,7 +43,7 @@ export const handleAppUninstalled = (serverRuntimeConfig) => (req, res) => __awa
|
|
|
40
43
|
if (valid) {
|
|
41
44
|
try {
|
|
42
45
|
const sessionsIds = yield findSessionIds(shop);
|
|
43
|
-
if (arrayNotEmpty(sessionsIds)) {
|
|
46
|
+
if ((0, shared_1.arrayNotEmpty)(sessionsIds)) {
|
|
44
47
|
yield deleteSessions(sessionsIds);
|
|
45
48
|
}
|
|
46
49
|
return res.status(200).json({ handler: 'uninstall', message: 'success' });
|
|
@@ -57,4 +60,5 @@ export const handleAppUninstalled = (serverRuntimeConfig) => (req, res) => __awa
|
|
|
57
60
|
return res.status(200).json({ handler: 'uninstall', error: 'Error handling uninstall' });
|
|
58
61
|
}
|
|
59
62
|
});
|
|
63
|
+
exports.handleAppUninstalled = handleAppUninstalled;
|
|
60
64
|
//# sourceMappingURL=uninstall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/uninstall.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/uninstall.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA+C;AAC/C,wDAAqD;AACrD,4CAGwB;AAExB,4DAA4D;AACrD,MAAM,oBAAoB,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAO,GAAG,EAAE,GAAG,EAAE,EAAE;;IAC9E,IAAI;QACF,MAAM,EACJ,eAAe,EAAE,UAAU,EAC3B,uBAAuB,EAAE,iBAAiB,EAC1C,gBAAgB,EAAE,IAAI,GAAG,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,UAAU,GACzD,GAAG,MAAA,GAAG,CAAC,OAAO,mCAAI,EAAE,CAAA;QAErB,IAAI,IAAA,oBAAW,EAAC,IAAI,CAAC,EAAE;YACrB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAA;SAC7E;QAED,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,MAAM,IAAA,yBAAiB,EAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAE1G,wCAAwC;QACxC,MAAM,OAAO,GAAG,MAAM,IAAA,4BAAa,EAAC,GAAG,CAAC,CAAA;QACxC,MAAM,KAA6B,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjE,OAAO;YACP,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,GAAG;SACjB,CAAC,EAJI,EAAE,KAAK,OAIX,EAJgB,YAAY,cAAxB,SAA0B,CAI9B,CAAA;QAEF,IAAI,KAAK,EAAE;YACT,IAAI;gBACF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAA;gBAC9C,IAAI,IAAA,sBAAa,EAAC,WAAW,CAAC,EAAE;oBAC9B,MAAM,cAAc,CAAC,WAAW,CAAC,CAAA;iBAClC;gBACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;aAC1E;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,CAAC,CAAA;aAC7E;SACF;QAED,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAA;QAClE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAA;KACrG;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;QAChD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAA;KACzF;AACH,CAAC,CAAA,CAAA;AAxCY,QAAA,oBAAoB,wBAwChC"}
|
|
@@ -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) {
|
|
@@ -7,19 +8,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
9
|
});
|
|
9
10
|
};
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.handleLoadAppInstallation = void 0;
|
|
13
|
+
const shared_1 = require("../../../../shared");
|
|
14
|
+
const graph_1 = require("./graph");
|
|
12
15
|
// NOTE: typically handling: "/api/admin/installation/[appId]" (called by getUseAppInstallation)
|
|
13
|
-
|
|
16
|
+
const handleLoadAppInstallation = (serverRuntimeConfig) => (req, res, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
17
|
const { appId } = params !== null && params !== void 0 ? params : {};
|
|
15
|
-
if (stringEmpty(appId)) {
|
|
18
|
+
if ((0, shared_1.stringEmpty)(appId)) {
|
|
16
19
|
return res.status(412).json({ message: 'Missing required param' });
|
|
17
20
|
}
|
|
18
|
-
const _handleGraph = handleGraph(serverRuntimeConfig);
|
|
21
|
+
const _handleGraph = (0, graph_1.handleGraph)(serverRuntimeConfig);
|
|
19
22
|
return _handleGraph(req, res, {
|
|
20
|
-
query: APP_QUERY.INSTALLATION,
|
|
23
|
+
query: shared_1.APP_QUERY.INSTALLATION,
|
|
21
24
|
variables: { namespace: `${appId}-metafields` },
|
|
22
|
-
transform: TRANSFORM.APP_QUERY,
|
|
25
|
+
transform: shared_1.TRANSFORM.APP_QUERY,
|
|
23
26
|
});
|
|
24
27
|
});
|
|
28
|
+
exports.handleLoadAppInstallation = handleLoadAppInstallation;
|
|
25
29
|
//# sourceMappingURL=appInstallation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appInstallation.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/appInstallation.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"appInstallation.js","sourceRoot":"","sources":["../../../../../src/lib/handlers/api/verifiable/appInstallation.js"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAsE;AACtE,mCAAqC;AAErC,gGAAgG;AACzF,MAAM,yBAAyB,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAO,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;IAC3F,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAA;IAE9B,IAAI,IAAA,oBAAW,EAAC,KAAK,CAAC,EAAE;QACtB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAA;KACnE;IAED,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,mBAAmB,CAAC,CAAA;IAErD,OAAO,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE;QAC5B,KAAK,EAAE,kBAAS,CAAC,YAAY;QAC7B,SAAS,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,aAAa,EAAE;QAC/C,SAAS,EAAE,kBAAS,CAAC,SAAS;KAC/B,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA;AAdY,QAAA,yBAAyB,6BAcrC"}
|