@shopify/shopify-app-remix 1.0.0-rc.0
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/LICENSE.md +9 -0
- package/README.md +373 -0
- package/build/cjs/adapters/node/index.js +13 -0
- package/build/cjs/auth/admin/authenticate.js +599 -0
- package/build/cjs/auth/admin/graphql-client.js +57 -0
- package/build/cjs/auth/admin/rest-client.js +124 -0
- package/build/cjs/auth/const.js +17 -0
- package/build/cjs/auth/helpers/add-response-headers.js +69 -0
- package/build/cjs/auth/helpers/begin-auth.js +18 -0
- package/build/cjs/auth/helpers/get-session-token-header.js +10 -0
- package/build/cjs/auth/helpers/handle-client-error.js +37 -0
- package/build/cjs/auth/helpers/redirect-to-auth-page.js +22 -0
- package/build/cjs/auth/helpers/redirect-with-app-bridge-headers.js +31 -0
- package/build/cjs/auth/helpers/redirect-with-exitiframe.js +23 -0
- package/build/cjs/auth/helpers/reject-bot-request.js +23 -0
- package/build/cjs/auth/helpers/validate-session-token.js +25 -0
- package/build/cjs/auth/login/login.js +54 -0
- package/build/cjs/auth/public/authenticate.js +32 -0
- package/build/cjs/auth/webhooks/authenticate.js +68 -0
- package/build/cjs/auth/webhooks/register.js +40 -0
- package/build/cjs/billing/cancel.js +40 -0
- package/build/cjs/billing/request.js +83 -0
- package/build/cjs/billing/require.js +47 -0
- package/build/cjs/index.js +140 -0
- package/build/cjs/override-logger.js +55 -0
- package/build/cjs/types.js +25 -0
- package/build/cjs/version.js +7 -0
- package/build/ts/adapters/node/index.d.ts +2 -0
- package/build/ts/adapters/node/index.d.ts.map +1 -0
- package/build/ts/adapters/node/index.js +10 -0
- package/build/ts/adapters/node/index.js.map +1 -0
- package/build/ts/auth/admin/authenticate.d.ts +32 -0
- package/build/ts/auth/admin/authenticate.d.ts.map +1 -0
- package/build/ts/auth/admin/authenticate.js +571 -0
- package/build/ts/auth/admin/authenticate.js.map +1 -0
- package/build/ts/auth/admin/graphql-client.d.ts +22 -0
- package/build/ts/auth/admin/graphql-client.d.ts.map +1 -0
- package/build/ts/auth/admin/graphql-client.js +53 -0
- package/build/ts/auth/admin/graphql-client.js.map +1 -0
- package/build/ts/auth/admin/rest-client.d.ts +34 -0
- package/build/ts/auth/admin/rest-client.d.ts.map +1 -0
- package/build/ts/auth/admin/rest-client.js +134 -0
- package/build/ts/auth/admin/rest-client.js.map +1 -0
- package/build/ts/auth/admin/types.d.ts +100 -0
- package/build/ts/auth/admin/types.d.ts.map +1 -0
- package/build/ts/auth/admin/types.js +3 -0
- package/build/ts/auth/admin/types.js.map +1 -0
- package/build/ts/auth/const.d.ts +9 -0
- package/build/ts/auth/const.d.ts.map +1 -0
- package/build/ts/auth/const.js +12 -0
- package/build/ts/auth/const.js.map +1 -0
- package/build/ts/auth/helpers/add-response-headers.d.ts +5 -0
- package/build/ts/auth/helpers/add-response-headers.d.ts.map +1 -0
- package/build/ts/auth/helpers/add-response-headers.js +60 -0
- package/build/ts/auth/helpers/add-response-headers.js.map +1 -0
- package/build/ts/auth/helpers/begin-auth.d.ts +3 -0
- package/build/ts/auth/helpers/begin-auth.d.ts.map +1 -0
- package/build/ts/auth/helpers/begin-auth.js +24 -0
- package/build/ts/auth/helpers/begin-auth.js.map +1 -0
- package/build/ts/auth/helpers/get-session-token-header.d.ts +2 -0
- package/build/ts/auth/helpers/get-session-token-header.d.ts.map +1 -0
- package/build/ts/auth/helpers/get-session-token-header.js +9 -0
- package/build/ts/auth/helpers/get-session-token-header.js.map +1 -0
- package/build/ts/auth/helpers/handle-client-error.d.ts +11 -0
- package/build/ts/auth/helpers/handle-client-error.d.ts.map +1 -0
- package/build/ts/auth/helpers/handle-client-error.js +40 -0
- package/build/ts/auth/helpers/handle-client-error.js.map +1 -0
- package/build/ts/auth/helpers/index.d.ts +8 -0
- package/build/ts/auth/helpers/index.d.ts.map +1 -0
- package/build/ts/auth/helpers/index.js +18 -0
- package/build/ts/auth/helpers/index.js.map +1 -0
- package/build/ts/auth/helpers/redirect-to-auth-page.d.ts +3 -0
- package/build/ts/auth/helpers/redirect-to-auth-page.d.ts.map +1 -0
- package/build/ts/auth/helpers/redirect-to-auth-page.js +33 -0
- package/build/ts/auth/helpers/redirect-to-auth-page.js.map +1 -0
- package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts +4 -0
- package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts.map +1 -0
- package/build/ts/auth/helpers/redirect-with-app-bridge-headers.js +24 -0
- package/build/ts/auth/helpers/redirect-with-app-bridge-headers.js.map +1 -0
- package/build/ts/auth/helpers/redirect-with-exitiframe.d.ts +3 -0
- package/build/ts/auth/helpers/redirect-with-exitiframe.d.ts.map +1 -0
- package/build/ts/auth/helpers/redirect-with-exitiframe.js +18 -0
- package/build/ts/auth/helpers/redirect-with-exitiframe.js.map +1 -0
- package/build/ts/auth/helpers/reject-bot-request.d.ts +3 -0
- package/build/ts/auth/helpers/reject-bot-request.d.ts.map +1 -0
- package/build/ts/auth/helpers/reject-bot-request.js +14 -0
- package/build/ts/auth/helpers/reject-bot-request.js.map +1 -0
- package/build/ts/auth/helpers/validate-session-token.d.ts +4 -0
- package/build/ts/auth/helpers/validate-session-token.d.ts.map +1 -0
- package/build/ts/auth/helpers/validate-session-token.js +36 -0
- package/build/ts/auth/helpers/validate-session-token.js.map +1 -0
- package/build/ts/auth/login/login.d.ts +3 -0
- package/build/ts/auth/login/login.d.ts.map +1 -0
- package/build/ts/auth/login/login.js +56 -0
- package/build/ts/auth/login/login.js.map +1 -0
- package/build/ts/auth/public/authenticate.d.ts +4 -0
- package/build/ts/auth/public/authenticate.d.ts.map +1 -0
- package/build/ts/auth/public/authenticate.js +35 -0
- package/build/ts/auth/public/authenticate.js.map +1 -0
- package/build/ts/auth/public/types.d.ts +27 -0
- package/build/ts/auth/public/types.d.ts.map +1 -0
- package/build/ts/auth/public/types.js +3 -0
- package/build/ts/auth/public/types.js.map +1 -0
- package/build/ts/auth/webhooks/authenticate.d.ts +5 -0
- package/build/ts/auth/webhooks/authenticate.d.ts.map +1 -0
- package/build/ts/auth/webhooks/authenticate.js +71 -0
- package/build/ts/auth/webhooks/authenticate.js.map +1 -0
- package/build/ts/auth/webhooks/index.d.ts +2 -0
- package/build/ts/auth/webhooks/index.d.ts.map +1 -0
- package/build/ts/auth/webhooks/index.js +6 -0
- package/build/ts/auth/webhooks/index.js.map +1 -0
- package/build/ts/auth/webhooks/register.d.ts +4 -0
- package/build/ts/auth/webhooks/register.d.ts.map +1 -0
- package/build/ts/auth/webhooks/register.js +39 -0
- package/build/ts/auth/webhooks/register.js.map +1 -0
- package/build/ts/auth/webhooks/types.d.ts +18 -0
- package/build/ts/auth/webhooks/types.d.ts.map +1 -0
- package/build/ts/auth/webhooks/types.js +3 -0
- package/build/ts/auth/webhooks/types.js.map +1 -0
- package/build/ts/billing/cancel.d.ts +5 -0
- package/build/ts/billing/cancel.d.ts.map +1 -0
- package/build/ts/billing/cancel.js +43 -0
- package/build/ts/billing/cancel.js.map +1 -0
- package/build/ts/billing/index.d.ts +4 -0
- package/build/ts/billing/index.d.ts.map +1 -0
- package/build/ts/billing/index.js +10 -0
- package/build/ts/billing/index.js.map +1 -0
- package/build/ts/billing/request.d.ts +6 -0
- package/build/ts/billing/request.d.ts.map +1 -0
- package/build/ts/billing/request.js +84 -0
- package/build/ts/billing/request.js.map +1 -0
- package/build/ts/billing/require.d.ts +6 -0
- package/build/ts/billing/require.d.ts.map +1 -0
- package/build/ts/billing/require.js +55 -0
- package/build/ts/billing/require.js.map +1 -0
- package/build/ts/billing/types.d.ts +228 -0
- package/build/ts/billing/types.d.ts.map +1 -0
- package/build/ts/billing/types.js +3 -0
- package/build/ts/billing/types.js.map +1 -0
- package/build/ts/config-types.d.ts +325 -0
- package/build/ts/config-types.d.ts.map +1 -0
- package/build/ts/config-types.js +3 -0
- package/build/ts/config-types.js.map +1 -0
- package/build/ts/index.d.ts +29 -0
- package/build/ts/index.d.ts.map +1 -0
- package/build/ts/index.js +108 -0
- package/build/ts/index.js.map +1 -0
- package/build/ts/override-logger.d.ts +3 -0
- package/build/ts/override-logger.d.ts.map +1 -0
- package/build/ts/override-logger.js +40 -0
- package/build/ts/override-logger.js.map +1 -0
- package/build/ts/types.d.ts +353 -0
- package/build/ts/types.d.ts.map +1 -0
- package/build/ts/types.js +17 -0
- package/build/ts/types.js.map +1 -0
- package/build/ts/version.d.ts +2 -0
- package/build/ts/version.d.ts.map +1 -0
- package/build/ts/version.js +5 -0
- package/build/ts/version.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect-to-auth-page.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-to-auth-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAM7C,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,UAAQ,GACf,OAAO,CAAC,KAAK,CAAC,CAYhB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.redirectToAuthPage = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var begin_auth_1 = require("./begin-auth");
|
|
6
|
+
var redirect_with_exitiframe_1 = require("./redirect-with-exitiframe");
|
|
7
|
+
var redirect_with_app_bridge_headers_1 = require("./redirect-with-app-bridge-headers");
|
|
8
|
+
function redirectToAuthPage(params, request, shop, isOnline) {
|
|
9
|
+
if (isOnline === void 0) { isOnline = false; }
|
|
10
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
11
|
+
var url, isEmbeddedRequest, isXhrRequest;
|
|
12
|
+
return tslib_1.__generator(this, function (_a) {
|
|
13
|
+
switch (_a.label) {
|
|
14
|
+
case 0:
|
|
15
|
+
url = new URL(request.url);
|
|
16
|
+
isEmbeddedRequest = url.searchParams.get('embedded') === '1';
|
|
17
|
+
isXhrRequest = request.headers.get('authorization');
|
|
18
|
+
if (!isXhrRequest) return [3 /*break*/, 1];
|
|
19
|
+
(0, redirect_with_app_bridge_headers_1.redirectWithAppBridgeHeaders)(params, shop);
|
|
20
|
+
return [3 /*break*/, 4];
|
|
21
|
+
case 1:
|
|
22
|
+
if (!isEmbeddedRequest) return [3 /*break*/, 2];
|
|
23
|
+
(0, redirect_with_exitiframe_1.redirectWithExitIframe)(params, request, shop);
|
|
24
|
+
return [3 /*break*/, 4];
|
|
25
|
+
case 2: return [4 /*yield*/, (0, begin_auth_1.beginAuth)(params, request, isOnline, shop)];
|
|
26
|
+
case 3: throw _a.sent();
|
|
27
|
+
case 4: return [2 /*return*/];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
exports.redirectToAuthPage = redirectToAuthPage;
|
|
33
|
+
//# sourceMappingURL=redirect-to-auth-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect-to-auth-page.js","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-to-auth-page.ts"],"names":[],"mappings":";;;;AAEA,2CAAuC;AACvC,uEAAkE;AAClE,uFAAgF;AAEhF,SAAsB,kBAAkB,CACtC,MAAmB,EACnB,OAAgB,EAChB,IAAY,EACZ,QAAgB;IAAhB,yBAAA,EAAA,gBAAgB;;;;;;oBAEV,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC3B,iBAAiB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;oBAC7D,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;yBAEtD,YAAY,EAAZ,wBAAY;oBACd,IAAA,+DAA4B,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;;yBAClC,iBAAiB,EAAjB,wBAAiB;oBAC1B,IAAA,iDAAsB,EAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;;wBAExC,qBAAM,IAAA,sBAAS,EAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAA;wBAAtD,MAAM,SAAgD,CAAC;;;;;CAE1D;AAjBD,gDAiBC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { BasicParams } from '../../types';
|
|
2
|
+
export declare function redirectWithAppBridgeHeaders(params: BasicParams, shop: string): never;
|
|
3
|
+
export declare function getAppBridgeHeaders(params: BasicParams, url: string, shop: string): Headers;
|
|
4
|
+
//# sourceMappingURL=redirect-with-app-bridge-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect-with-app-bridge-headers.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-with-app-bridge-headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAK7C,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,GACX,KAAK,CASP;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,WAQb"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAppBridgeHeaders = exports.redirectWithAppBridgeHeaders = void 0;
|
|
4
|
+
var const_1 = require("../const");
|
|
5
|
+
var add_response_headers_1 = require("./add-response-headers");
|
|
6
|
+
function redirectWithAppBridgeHeaders(params, shop) {
|
|
7
|
+
var config = params.config;
|
|
8
|
+
var redirectUri = "".concat(config.appUrl).concat(config.auth.path, "?shop=").concat(shop);
|
|
9
|
+
throw new Response(undefined, {
|
|
10
|
+
status: 401,
|
|
11
|
+
statusText: 'Unauthorized',
|
|
12
|
+
headers: getAppBridgeHeaders(params, redirectUri, shop),
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
exports.redirectWithAppBridgeHeaders = redirectWithAppBridgeHeaders;
|
|
16
|
+
function getAppBridgeHeaders(params, url, shop) {
|
|
17
|
+
var _a;
|
|
18
|
+
var config = params.config;
|
|
19
|
+
var headers = new Headers((_a = {}, _a[const_1.REAUTH_URL_HEADER] = url, _a));
|
|
20
|
+
(0, add_response_headers_1.addResponseHeaders)(headers, config.isEmbeddedApp, shop);
|
|
21
|
+
return headers;
|
|
22
|
+
}
|
|
23
|
+
exports.getAppBridgeHeaders = getAppBridgeHeaders;
|
|
24
|
+
//# sourceMappingURL=redirect-with-app-bridge-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect-with-app-bridge-headers.js","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-with-app-bridge-headers.ts"],"names":[],"mappings":";;;AACA,kCAA2C;AAE3C,+DAA0D;AAE1D,SAAgB,4BAA4B,CAC1C,MAAmB,EACnB,IAAY;IAEL,IAAA,MAAM,GAAI,MAAM,OAAV,CAAW;IACxB,IAAM,WAAW,GAAG,UAAG,MAAM,CAAC,MAAM,SAAG,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAS,IAAI,CAAE,CAAC;IAEvE,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;QAC5B,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,cAAc;QAC1B,OAAO,EAAE,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC;KACxD,CAAC,CAAC;AACL,CAAC;AAZD,oEAYC;AAED,SAAgB,mBAAmB,CACjC,MAAmB,EACnB,GAAW,EACX,IAAY;;IAEL,IAAA,MAAM,GAAI,MAAM,OAAV,CAAW;IACxB,IAAM,OAAO,GAAG,IAAI,OAAO,WAAE,GAAC,yBAAiB,IAAG,GAAG,MAAE,CAAC;IAExD,IAAA,yCAAkB,EAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAExD,OAAO,OAAO,CAAC;AACjB,CAAC;AAXD,kDAWC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect-with-exitiframe.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-with-exitiframe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,GACX,KAAK,CAeP"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.redirectWithExitIframe = void 0;
|
|
4
|
+
var server_runtime_1 = require("@remix-run/server-runtime");
|
|
5
|
+
function redirectWithExitIframe(params, request, shop) {
|
|
6
|
+
var api = params.api, config = params.config;
|
|
7
|
+
var url = new URL(request.url);
|
|
8
|
+
var queryParams = url.searchParams;
|
|
9
|
+
var host = api.utils.sanitizeHost(queryParams.get('host'));
|
|
10
|
+
queryParams.set('shop', shop);
|
|
11
|
+
queryParams.set('exitIframe', "".concat(config.auth.path, "?shop=").concat(shop));
|
|
12
|
+
if (host) {
|
|
13
|
+
queryParams.set('host', host);
|
|
14
|
+
}
|
|
15
|
+
throw (0, server_runtime_1.redirect)("".concat(config.auth.exitIframePath, "?").concat(queryParams.toString()));
|
|
16
|
+
}
|
|
17
|
+
exports.redirectWithExitIframe = redirectWithExitIframe;
|
|
18
|
+
//# sourceMappingURL=redirect-with-exitiframe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect-with-exitiframe.js","sourceRoot":"","sources":["../../../../src/auth/helpers/redirect-with-exitiframe.ts"],"names":[],"mappings":";;;AAAA,4DAAmD;AAInD,SAAgB,sBAAsB,CACpC,MAAmB,EACnB,OAAgB,EAChB,IAAY;IAEL,IAAA,GAAG,GAAY,MAAM,IAAlB,EAAE,MAAM,GAAI,MAAM,OAAV,CAAW;IAC7B,IAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC;IACrC,IAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC;IAE9D,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,UAAG,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAS,IAAI,CAAE,CAAC,CAAC;IAElE,IAAI,IAAI,EAAE;QACR,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC/B;IAED,MAAM,IAAA,yBAAQ,EAAC,UAAG,MAAM,CAAC,IAAI,CAAC,cAAc,cAAI,WAAW,CAAC,QAAQ,EAAE,CAAE,CAAC,CAAC;AAC5E,CAAC;AAnBD,wDAmBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reject-bot-request.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/reject-bot-request.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,wBAAgB,gBAAgB,CAC9B,EAAC,MAAM,EAAC,EAAE,WAAW,EACrB,OAAO,EAAE,OAAO,GACf,IAAI,GAAG,KAAK,CAKd"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rejectBotRequest = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var isbot_1 = tslib_1.__importDefault(require("isbot"));
|
|
6
|
+
function rejectBotRequest(_a, request) {
|
|
7
|
+
var logger = _a.logger;
|
|
8
|
+
if ((0, isbot_1.default)(request.headers.get('User-Agent'))) {
|
|
9
|
+
logger.debug('Request is from a bot, skipping auth');
|
|
10
|
+
throw new Response(undefined, { status: 410, statusText: 'Gone' });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.rejectBotRequest = rejectBotRequest;
|
|
14
|
+
//# sourceMappingURL=reject-bot-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reject-bot-request.js","sourceRoot":"","sources":["../../../../src/auth/helpers/reject-bot-request.ts"],"names":[],"mappings":";;;;AAAA,wDAA0B;AAI1B,SAAgB,gBAAgB,CAC9B,EAAqB,EACrB,OAAgB;QADf,MAAM,YAAA;IAGP,IAAI,IAAA,eAAK,EAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACrD,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAC,CAAC,CAAC;KAClE;AACH,CAAC;AARD,4CAQC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-session-token.d.ts","sourceRoot":"","sources":["../../../../src/auth/helpers/validate-session-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,wBAAsB,oBAAoB,CACxC,EAAC,GAAG,EAAE,MAAM,EAAC,EAAE,WAAW,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC,CAiBrB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSessionToken = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
function validateSessionToken(_a, token) {
|
|
6
|
+
var api = _a.api, logger = _a.logger;
|
|
7
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
8
|
+
var payload, error_1;
|
|
9
|
+
return tslib_1.__generator(this, function (_b) {
|
|
10
|
+
switch (_b.label) {
|
|
11
|
+
case 0:
|
|
12
|
+
logger.debug('Validating session token');
|
|
13
|
+
_b.label = 1;
|
|
14
|
+
case 1:
|
|
15
|
+
_b.trys.push([1, 3, , 4]);
|
|
16
|
+
return [4 /*yield*/, api.session.decodeSessionToken(token)];
|
|
17
|
+
case 2:
|
|
18
|
+
payload = _b.sent();
|
|
19
|
+
logger.debug('Session token is valid', {
|
|
20
|
+
payload: JSON.stringify(payload),
|
|
21
|
+
});
|
|
22
|
+
return [2 /*return*/, payload];
|
|
23
|
+
case 3:
|
|
24
|
+
error_1 = _b.sent();
|
|
25
|
+
logger.debug("Failed to validate session token: ".concat(error_1.message));
|
|
26
|
+
throw new Response(undefined, {
|
|
27
|
+
status: 401,
|
|
28
|
+
statusText: 'Unauthorized',
|
|
29
|
+
});
|
|
30
|
+
case 4: return [2 /*return*/];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
exports.validateSessionToken = validateSessionToken;
|
|
36
|
+
//# sourceMappingURL=validate-session-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-session-token.js","sourceRoot":"","sources":["../../../../src/auth/helpers/validate-session-token.ts"],"names":[],"mappings":";;;;AAIA,SAAsB,oBAAoB,CACxC,EAA0B,EAC1B,KAAa;QADZ,GAAG,SAAA,EAAE,MAAM,YAAA;;;;;;oBAGZ,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;;;;oBAGvB,qBAAM,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAA;;oBAArD,OAAO,GAAG,SAA2C;oBAC3D,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;wBACrC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;qBACjC,CAAC,CAAC;oBAEH,sBAAO,OAAO,EAAC;;;oBAEf,MAAM,CAAC,KAAK,CAAC,4CAAqC,OAAK,CAAC,OAAO,CAAE,CAAC,CAAC;oBACnE,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;wBAC5B,MAAM,EAAE,GAAG;wBACX,UAAU,EAAE,cAAc;qBAC3B,CAAC,CAAC;;;;;CAEN;AApBD,oDAoBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../../src/auth/login/login.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAEpE,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,aAGT,OAAO,KAAG,QAAQ,UAAU,GAAG,KAAK,CAAC,CA2C3E"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loginFactory = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var server_runtime_1 = require("@remix-run/server-runtime");
|
|
6
|
+
var types_1 = require("../../types");
|
|
7
|
+
function loginFactory(params) {
|
|
8
|
+
var api = params.api, config = params.config, logger = params.logger;
|
|
9
|
+
return function login(request) {
|
|
10
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
11
|
+
var url, shopParam, shop, _a, shopWithoutProtocol, shopWithDomain, sanitizedShop, redirectUrl;
|
|
12
|
+
return tslib_1.__generator(this, function (_b) {
|
|
13
|
+
switch (_b.label) {
|
|
14
|
+
case 0:
|
|
15
|
+
if (!config.canUseLoginForm) {
|
|
16
|
+
logger.debug('Login endpoint not available for Shopify Admin custom apps');
|
|
17
|
+
throw new Response(undefined, { status: 404 });
|
|
18
|
+
}
|
|
19
|
+
url = new URL(request.url);
|
|
20
|
+
shopParam = url.searchParams.get('shop');
|
|
21
|
+
if (request.method === 'GET' && !shopParam) {
|
|
22
|
+
return [2 /*return*/, {}];
|
|
23
|
+
}
|
|
24
|
+
_a = shopParam;
|
|
25
|
+
if (_a) return [3 /*break*/, 2];
|
|
26
|
+
return [4 /*yield*/, request.formData()];
|
|
27
|
+
case 1:
|
|
28
|
+
_a = (_b.sent()).get('shop');
|
|
29
|
+
_b.label = 2;
|
|
30
|
+
case 2:
|
|
31
|
+
shop = _a;
|
|
32
|
+
if (!shop) {
|
|
33
|
+
logger.debug('Missing shop parameter', { shop: shop });
|
|
34
|
+
return [2 /*return*/, { shop: types_1.LoginErrorType.MissingShop }];
|
|
35
|
+
}
|
|
36
|
+
shopWithoutProtocol = shop.replace(/^https?:\/\//, '');
|
|
37
|
+
shopWithDomain = (shop === null || shop === void 0 ? void 0 : shop.indexOf('.')) === -1
|
|
38
|
+
? "".concat(shopWithoutProtocol, ".myshopify.com")
|
|
39
|
+
: shopWithoutProtocol;
|
|
40
|
+
sanitizedShop = api.utils.sanitizeShop(shopWithDomain);
|
|
41
|
+
if (!sanitizedShop) {
|
|
42
|
+
logger.debug('Invalid shop parameter', { shop: shop });
|
|
43
|
+
return [2 /*return*/, { shop: types_1.LoginErrorType.InvalidShop }];
|
|
44
|
+
}
|
|
45
|
+
redirectUrl = "".concat(config.appUrl).concat(config.auth.path, "?shop=").concat(sanitizedShop);
|
|
46
|
+
logger.info("Redirecting login request to ".concat(redirectUrl), {
|
|
47
|
+
shop: sanitizedShop,
|
|
48
|
+
});
|
|
49
|
+
throw (0, server_runtime_1.redirect)(redirectUrl);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
exports.loginFactory = loginFactory;
|
|
56
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../../src/auth/login/login.ts"],"names":[],"mappings":";;;;AAAA,4DAAmD;AAEnD,qCAAoE;AAEpE,SAAgB,YAAY,CAAC,MAAmB;IACvC,IAAA,GAAG,GAAoB,MAAM,IAA1B,EAAE,MAAM,GAAY,MAAM,OAAlB,EAAE,MAAM,GAAI,MAAM,OAAV,CAAW;IAErC,OAAO,SAAe,KAAK,CAAC,OAAgB;;;;;;wBAC1C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;4BAC3B,MAAM,CAAC,KAAK,CACV,4DAA4D,CAC7D,CAAC;4BACF,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC;yBAC9C;wBAEK,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC3B,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAE/C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;4BAC1C,sBAAO,EAAE,EAAC;yBACX;wBAGC,KAAA,SAAS,CAAA;gCAAT,wBAAS;wBAAM,qBAAM,OAAO,CAAC,QAAQ,EAAE,EAAA;;wBAA1B,KAAC,CAAC,SAAwB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAY,CAAA;;;wBAD3D,IAAI,KACuD;wBAEjE,IAAI,CAAC,IAAI,EAAE;4BACT,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,MAAA,EAAC,CAAC,CAAC;4BAC/C,sBAAO,EAAC,IAAI,EAAE,sBAAc,CAAC,WAAW,EAAC,EAAC;yBAC3C;wBAEK,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;wBACvD,cAAc,GAClB,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,GAAG,CAAC,MAAK,CAAC,CAAC;4BACvB,CAAC,CAAC,UAAG,mBAAmB,mBAAgB;4BACxC,CAAC,CAAC,mBAAmB,CAAC;wBACpB,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;wBAE7D,IAAI,CAAC,aAAa,EAAE;4BAClB,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,MAAA,EAAC,CAAC,CAAC;4BAC/C,sBAAO,EAAC,IAAI,EAAE,sBAAc,CAAC,WAAW,EAAC,EAAC;yBAC3C;wBAEK,WAAW,GAAG,UAAG,MAAM,CAAC,MAAM,SAAG,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAS,aAAa,CAAE,CAAC;wBAEhF,MAAM,CAAC,IAAI,CAAC,uCAAgC,WAAW,CAAE,EAAE;4BACzD,IAAI,EAAE,aAAa;yBACpB,CAAC,CAAC;wBAEH,MAAM,IAAA,yBAAQ,EAAC,WAAW,CAAC,CAAC;;;;KAC7B,CAAC;AACJ,CAAC;AA9CD,oCA8CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticate.d.ts","sourceRoot":"","sources":["../../../../src/auth/public/authenticate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAO7C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAE3C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,aAEhD,OAAO,KACf,QAAQ,aAAa,CAAC,CAqB1B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authenticatePublicFactory = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var helpers_1 = require("../helpers");
|
|
6
|
+
function authenticatePublicFactory(params) {
|
|
7
|
+
return function authenticatePublic(request) {
|
|
8
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
9
|
+
var logger, sessionTokenHeader;
|
|
10
|
+
var _a;
|
|
11
|
+
return tslib_1.__generator(this, function (_b) {
|
|
12
|
+
switch (_b.label) {
|
|
13
|
+
case 0:
|
|
14
|
+
logger = params.logger;
|
|
15
|
+
(0, helpers_1.rejectBotRequest)(params, request);
|
|
16
|
+
sessionTokenHeader = (0, helpers_1.getSessionTokenHeader)(request);
|
|
17
|
+
logger.info('Authenticating public request');
|
|
18
|
+
if (!sessionTokenHeader) {
|
|
19
|
+
logger.debug('Request did not contain a session token');
|
|
20
|
+
throw new Response(undefined, {
|
|
21
|
+
status: 401,
|
|
22
|
+
statusText: 'Unauthorized',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
_a = {};
|
|
26
|
+
return [4 /*yield*/, (0, helpers_1.validateSessionToken)(params, sessionTokenHeader)];
|
|
27
|
+
case 1: return [2 /*return*/, (_a.sessionToken = _b.sent(),
|
|
28
|
+
_a)];
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
exports.authenticatePublicFactory = authenticatePublicFactory;
|
|
35
|
+
//# sourceMappingURL=authenticate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../../../../src/auth/public/authenticate.ts"],"names":[],"mappings":";;;;AACA,sCAIoB;AAIpB,SAAgB,yBAAyB,CAAC,MAAmB;IAC3D,OAAO,SAAe,kBAAkB,CACtC,OAAgB;;;;;;;wBAET,MAAM,GAAI,MAAM,OAAV,CAAW;wBAExB,IAAA,0BAAgB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBAE5B,kBAAkB,GAAG,IAAA,+BAAqB,EAAC,OAAO,CAAC,CAAC;wBAE1D,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;wBAE7C,IAAI,CAAC,kBAAkB,EAAE;4BACvB,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;4BACxD,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;gCAC5B,MAAM,EAAE,GAAG;gCACX,UAAU,EAAE,cAAc;6BAC3B,CAAC,CAAC;yBACJ;;wBAGe,qBAAM,IAAA,8BAAoB,EAAC,MAAM,EAAE,kBAAkB,CAAC,EAAA;4BADtE,uBACE,eAAY,GAAE,SAAsD;iCACpE;;;;KACH,CAAC;AACJ,CAAC;AAxBD,8DAwBC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { JwtPayload } from '@shopify/shopify-api';
|
|
2
|
+
/**
|
|
3
|
+
* Authenticated Context for a public request
|
|
4
|
+
*/
|
|
5
|
+
export interface PublicContext {
|
|
6
|
+
/**
|
|
7
|
+
* The decoded and validated session token for the request
|
|
8
|
+
*
|
|
9
|
+
* The payload of the Session Token is described here: {@link https://shopify.dev/docs/apps/auth/oauth/session-tokens#payload}
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* Getting your app's store specific widget data using the session token
|
|
13
|
+
* // app/routes/public/widgets.ts
|
|
14
|
+
* import { LoaderArgs, json } from "@remix-run/node";
|
|
15
|
+
* import { shopify } from "../shopify.server";
|
|
16
|
+
* import { getWidgets } from "~/db/widgets.server";
|
|
17
|
+
*
|
|
18
|
+
* export const loader = async ({ request }: LoaderArgs) => {
|
|
19
|
+
* const { sessionToken } = await shopify.authenticate.public(
|
|
20
|
+
* request
|
|
21
|
+
* );
|
|
22
|
+
* return json(await getWidgets({shop: sessionToken.dest}));
|
|
23
|
+
* };
|
|
24
|
+
*/
|
|
25
|
+
sessionToken: JwtPayload;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/auth/public/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,EAAE,UAAU,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/auth/public/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ShopifyRestResources } from '@shopify/shopify-api';
|
|
2
|
+
import type { BasicParams, MandatoryTopics } from '../../types';
|
|
3
|
+
import type { WebhookContext } from './types';
|
|
4
|
+
export declare function authenticateWebhookFactory<Resources extends ShopifyRestResources, Topics extends string | number | symbol | MandatoryTopics>({ api, config, logger }: BasicParams): (request: Request) => Promise<WebhookContext<Topics, Resources>>;
|
|
5
|
+
//# sourceMappingURL=authenticate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticate.d.ts","sourceRoot":"","sources":["../../../../src/auth/webhooks/authenticate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAEtE,OAAO,KAAK,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAE5C,wBAAgB,0BAA0B,CACxC,SAAS,SAAS,oBAAoB,EACtC,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,eAAe,EACzD,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,EAAE,WAAW,aAEvB,OAAO,KACf,QAAQ,eAAe,MAAM,EAAE,SAAS,CAAC,CAAC,CAyD9C"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authenticateWebhookFactory = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
function authenticateWebhookFactory(_a) {
|
|
6
|
+
var api = _a.api, config = _a.config, logger = _a.logger;
|
|
7
|
+
return function authenticate(request) {
|
|
8
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
9
|
+
var rawBody, check, sessionId, session, restClient, graphqlClient;
|
|
10
|
+
return tslib_1.__generator(this, function (_a) {
|
|
11
|
+
switch (_a.label) {
|
|
12
|
+
case 0:
|
|
13
|
+
if (request.method !== 'POST') {
|
|
14
|
+
logger.debug('Received a non-POST request for a webhook. Only POST requests are allowed.', { url: request.url, method: request.method });
|
|
15
|
+
throw new Response(undefined, {
|
|
16
|
+
status: 405,
|
|
17
|
+
statusText: 'Method not allowed',
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return [4 /*yield*/, request.text()];
|
|
21
|
+
case 1:
|
|
22
|
+
rawBody = _a.sent();
|
|
23
|
+
return [4 /*yield*/, api.webhooks.validate({
|
|
24
|
+
rawBody: rawBody,
|
|
25
|
+
rawRequest: request,
|
|
26
|
+
})];
|
|
27
|
+
case 2:
|
|
28
|
+
check = _a.sent();
|
|
29
|
+
if (!check.valid) {
|
|
30
|
+
logger.debug('Webhook validation failed', check);
|
|
31
|
+
throw new Response(undefined, { status: 400, statusText: 'Bad Request' });
|
|
32
|
+
}
|
|
33
|
+
sessionId = api.session.getOfflineId(check.domain);
|
|
34
|
+
return [4 /*yield*/, config.sessionStorage.loadSession(sessionId)];
|
|
35
|
+
case 3:
|
|
36
|
+
session = _a.sent();
|
|
37
|
+
if (!session) {
|
|
38
|
+
logger.debug('No session found for shop', check);
|
|
39
|
+
throw new Response(undefined, { status: 404, statusText: 'Not found' });
|
|
40
|
+
}
|
|
41
|
+
restClient = new api.clients.Rest({
|
|
42
|
+
session: session,
|
|
43
|
+
apiVersion: check.apiVersion,
|
|
44
|
+
});
|
|
45
|
+
graphqlClient = new api.clients.Graphql({
|
|
46
|
+
session: session,
|
|
47
|
+
apiVersion: check.apiVersion,
|
|
48
|
+
});
|
|
49
|
+
Object.entries(api.rest).forEach(function (_a) {
|
|
50
|
+
var _b = tslib_1.__read(_a, 2), name = _b[0], resource = _b[1];
|
|
51
|
+
Reflect.set(restClient, name, resource);
|
|
52
|
+
});
|
|
53
|
+
return [2 /*return*/, {
|
|
54
|
+
apiVersion: check.apiVersion,
|
|
55
|
+
shop: check.domain,
|
|
56
|
+
topic: check.topic,
|
|
57
|
+
webhookId: check.webhookId,
|
|
58
|
+
payload: JSON.parse(rawBody),
|
|
59
|
+
session: session,
|
|
60
|
+
admin: {
|
|
61
|
+
rest: restClient,
|
|
62
|
+
graphql: graphqlClient,
|
|
63
|
+
},
|
|
64
|
+
}];
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
exports.authenticateWebhookFactory = authenticateWebhookFactory;
|
|
71
|
+
//# sourceMappingURL=authenticate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../../../../src/auth/webhooks/authenticate.ts"],"names":[],"mappings":";;;;AAMA,SAAgB,0BAA0B,CAGxC,EAAkC;QAAjC,GAAG,SAAA,EAAE,MAAM,YAAA,EAAE,MAAM,YAAA;IACpB,OAAO,SAAe,YAAY,CAChC,OAAgB;;;;;;wBAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;4BAC7B,MAAM,CAAC,KAAK,CACV,4EAA4E,EAC5E,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAC3C,CAAC;4BACF,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;gCAC5B,MAAM,EAAE,GAAG;gCACX,UAAU,EAAE,oBAAoB;6BACjC,CAAC,CAAC;yBACJ;wBAEe,qBAAM,OAAO,CAAC,IAAI,EAAE,EAAA;;wBAA9B,OAAO,GAAG,SAAoB;wBAEtB,qBAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;gCACxC,OAAO,SAAA;gCACP,UAAU,EAAE,OAAO;6BACpB,CAAC,EAAA;;wBAHI,KAAK,GAAG,SAGZ;wBAEF,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;4BAChB,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;4BACjD,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAC,CAAC,CAAC;yBACzE;wBAEK,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACzC,qBAAM,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,EAAA;;wBAA5D,OAAO,GAAG,SAAkD;wBAClE,IAAI,CAAC,OAAO,EAAE;4BACZ,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;4BACjD,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAC,CAAC,CAAC;yBACvE;wBAEK,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;4BACtC,OAAO,SAAA;4BACP,UAAU,EAAE,KAAK,CAAC,UAAwB;yBAC3C,CAAC,CAAC;wBACG,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;4BAC5C,OAAO,SAAA;4BACP,UAAU,EAAE,KAAK,CAAC,UAAwB;yBAC3C,CAAC,CAAC;wBAEH,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAC,EAAgB;gCAAhB,KAAA,qBAAgB,EAAf,IAAI,QAAA,EAAE,QAAQ,QAAA;4BAC/C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;wBAC1C,CAAC,CAAC,CAAC;wBAEH,sBAAO;gCACL,UAAU,EAAE,KAAK,CAAC,UAAU;gCAC5B,IAAI,EAAE,KAAK,CAAC,MAAM;gCAClB,KAAK,EAAE,KAAK,CAAC,KAAe;gCAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;gCAC1B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gCAC5B,OAAO,SAAA;gCACP,KAAK,EAAE;oCACL,IAAI,EAAE,UAA2C;oCACjD,OAAO,EAAE,aAAa;iCACvB;6BACF,EAAC;;;;KACH,CAAC;AACJ,CAAC;AA/DD,gEA+DC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/auth/webhooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerWebhooksFactory = void 0;
|
|
4
|
+
var register_1 = require("./register");
|
|
5
|
+
Object.defineProperty(exports, "registerWebhooksFactory", { enumerable: true, get: function () { return register_1.registerWebhooksFactory; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/auth/webhooks/index.ts"],"names":[],"mappings":";;;AAAA,uCAAmD;AAA3C,mHAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { BasicParams } from '../../types';
|
|
2
|
+
import type { RegisterWebhooksOptions } from './types';
|
|
3
|
+
export declare function registerWebhooksFactory({ api, logger }: BasicParams): ({ session }: RegisterWebhooksOptions) => Promise<import("@shopify/shopify-api").RegisterReturn>;
|
|
4
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/auth/webhooks/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,SAAS,CAAC;AAErD,wBAAgB,uBAAuB,CAAC,EAAC,GAAG,EAAE,MAAM,EAAC,EAAE,WAAW,iBACd,uBAAuB,4DAuB1E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerWebhooksFactory = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
function registerWebhooksFactory(_a) {
|
|
6
|
+
var api = _a.api, logger = _a.logger;
|
|
7
|
+
return function registerWebhooks(_a) {
|
|
8
|
+
var session = _a.session;
|
|
9
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
10
|
+
return tslib_1.__generator(this, function (_b) {
|
|
11
|
+
return [2 /*return*/, api.webhooks.register({ session: session }).then(function (response) {
|
|
12
|
+
Object.entries(response).forEach(function (_a) {
|
|
13
|
+
var _b = tslib_1.__read(_a, 2), topic = _b[0], topicResults = _b[1];
|
|
14
|
+
topicResults.forEach(function (_a) {
|
|
15
|
+
var success = _a.success, rest = tslib_1.__rest(_a, ["success"]);
|
|
16
|
+
if (success) {
|
|
17
|
+
logger.debug('Registered webhook', {
|
|
18
|
+
topic: topic,
|
|
19
|
+
shop: session.shop,
|
|
20
|
+
operation: rest.operation,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
logger.error('Failed to register webhook', {
|
|
25
|
+
topic: topic,
|
|
26
|
+
shop: session.shop,
|
|
27
|
+
result: JSON.stringify(rest.result),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
return response;
|
|
33
|
+
})];
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
exports.registerWebhooksFactory = registerWebhooksFactory;
|
|
39
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../src/auth/webhooks/register.ts"],"names":[],"mappings":";;;;AAIA,SAAgB,uBAAuB,CAAC,EAA0B;QAAzB,GAAG,SAAA,EAAE,MAAM,YAAA;IAClD,OAAO,SAAe,gBAAgB,CAAC,EAAkC;YAAjC,OAAO,aAAA;;;gBAC7C,sBAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAC,OAAO,SAAA,EAAC,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;wBACpD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAC,EAAqB;gCAArB,KAAA,qBAAqB,EAApB,KAAK,QAAA,EAAE,YAAY,QAAA;4BACpD,YAAY,CAAC,OAAO,CAAC,UAAC,EAAkB;gCAAjB,IAAA,OAAO,aAAA,EAAK,IAAI,sBAAjB,WAAkB,CAAD;gCACrC,IAAI,OAAO,EAAE;oCACX,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;wCACjC,KAAK,OAAA;wCACL,IAAI,EAAE,OAAO,CAAC,IAAI;wCAClB,SAAS,EAAE,IAAI,CAAC,SAAS;qCAC1B,CAAC,CAAC;iCACJ;qCAAM;oCACL,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE;wCACzC,KAAK,OAAA;wCACL,IAAI,EAAE,OAAO,CAAC,IAAI;wCAClB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;qCACpC,CAAC,CAAC;iCACJ;4BACH,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;wBAEH,OAAO,QAAQ,CAAC;oBAClB,CAAC,CAAC,EAAC;;;KACJ,CAAC;AACJ,CAAC;AAxBD,0DAwBC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Session, Shopify, ShopifyRestResources } from '@shopify/shopify-api';
|
|
2
|
+
import type { JSONValue } from '../../types';
|
|
3
|
+
export interface RegisterWebhooksOptions {
|
|
4
|
+
session: Session;
|
|
5
|
+
}
|
|
6
|
+
export interface WebhookContext<Topics = string | number | symbol, Resources extends ShopifyRestResources = any> {
|
|
7
|
+
apiVersion: string;
|
|
8
|
+
shop: string;
|
|
9
|
+
topic: Topics;
|
|
10
|
+
webhookId: string;
|
|
11
|
+
payload: JSONValue;
|
|
12
|
+
session: Session;
|
|
13
|
+
admin: {
|
|
14
|
+
rest: InstanceType<Shopify['clients']['Rest']> & Resources;
|
|
15
|
+
graphql: InstanceType<Shopify['clients']['Graphql']>;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/auth/webhooks/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAE5E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc,CAC7B,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EACjC,SAAS,SAAS,oBAAoB,GAAG,GAAG;IAE5C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE;QACL,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;QAC3D,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;KACtD,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/auth/webhooks/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Session } from '@shopify/shopify-api';
|
|
2
|
+
import type { BasicParams } from '../types';
|
|
3
|
+
import type { CancelBillingOptions } from './types';
|
|
4
|
+
export declare function cancelBillingFactory(params: BasicParams, request: Request, session: Session): (options: CancelBillingOptions) => Promise<import("@shopify/shopify-api").AppSubscription>;
|
|
5
|
+
//# sourceMappingURL=cancel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../../src/billing/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAEhE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAG1C,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,SAAS,CAAC;AAElD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,aAE6B,oBAAoB,6DAuBlE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cancelBillingFactory = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var shopify_api_1 = require("@shopify/shopify-api");
|
|
6
|
+
var helpers_1 = require("../auth/helpers");
|
|
7
|
+
function cancelBillingFactory(params, request, session) {
|
|
8
|
+
return function cancelBilling(options) {
|
|
9
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
10
|
+
var api, logger, error_1;
|
|
11
|
+
return tslib_1.__generator(this, function (_a) {
|
|
12
|
+
switch (_a.label) {
|
|
13
|
+
case 0:
|
|
14
|
+
api = params.api, logger = params.logger;
|
|
15
|
+
logger.debug('Cancelling billing', tslib_1.__assign({ shop: session.shop }, options));
|
|
16
|
+
_a.label = 1;
|
|
17
|
+
case 1:
|
|
18
|
+
_a.trys.push([1, 3, , 7]);
|
|
19
|
+
return [4 /*yield*/, api.billing.cancel({
|
|
20
|
+
session: session,
|
|
21
|
+
subscriptionId: options.subscriptionId,
|
|
22
|
+
isTest: options.isTest,
|
|
23
|
+
prorate: options.prorate,
|
|
24
|
+
})];
|
|
25
|
+
case 2: return [2 /*return*/, _a.sent()];
|
|
26
|
+
case 3:
|
|
27
|
+
error_1 = _a.sent();
|
|
28
|
+
if (!(error_1 instanceof shopify_api_1.HttpResponseError && error_1.response.code === 401)) return [3 /*break*/, 5];
|
|
29
|
+
logger.debug('API token was invalid, redirecting to OAuth', {
|
|
30
|
+
shop: session.shop,
|
|
31
|
+
});
|
|
32
|
+
return [4 /*yield*/, (0, helpers_1.redirectToAuthPage)(params, request, session.shop)];
|
|
33
|
+
case 4: throw _a.sent();
|
|
34
|
+
case 5: throw error_1;
|
|
35
|
+
case 6: return [3 /*break*/, 7];
|
|
36
|
+
case 7: return [2 /*return*/];
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
exports.cancelBillingFactory = cancelBillingFactory;
|
|
43
|
+
//# sourceMappingURL=cancel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../../src/billing/cancel.ts"],"names":[],"mappings":";;;;AAAA,oDAAgE;AAGhE,2CAAmD;AAInD,SAAgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,OAAgB;IAEhB,OAAO,SAAe,aAAa,CAAC,OAA6B;;;;;;wBACxD,GAAG,GAAY,MAAM,IAAlB,EAAE,MAAM,GAAI,MAAM,OAAV,CAAW;wBAE7B,MAAM,CAAC,KAAK,CAAC,oBAAoB,qBAAG,IAAI,EAAE,OAAO,CAAC,IAAI,IAAK,OAAO,EAAE,CAAC;;;;wBAG5D,qBAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gCAC9B,OAAO,SAAA;gCACP,cAAc,EAAE,OAAO,CAAC,cAAc;gCACtC,MAAM,EAAE,OAAO,CAAC,MAAM;gCACtB,OAAO,EAAE,OAAO,CAAC,OAAO;6BACzB,CAAC,EAAA;4BALF,sBAAO,SAKL,EAAC;;;6BAEC,CAAA,OAAK,YAAY,+BAAiB,IAAI,OAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,CAAA,EAAjE,wBAAiE;wBACnE,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;4BAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;yBACnB,CAAC,CAAC;wBACG,qBAAM,IAAA,4BAAkB,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAA;4BAA7D,MAAM,SAAuD,CAAC;4BAE9D,MAAM,OAAK,CAAC;;;;;;KAGjB,CAAC;AACJ,CAAC;AA5BD,oDA4BC"}
|