@shopify/shopify-app-remix 3.0.2 → 3.1.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/dist/cjs/server/adapters/node/index.js +1 -0
- package/dist/cjs/server/adapters/node/index.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/authenticate.js +19 -8
- package/dist/cjs/server/authenticate/admin/authenticate.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/billing/cancel.js +1 -0
- package/dist/cjs/server/authenticate/admin/billing/cancel.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/billing/check.js +2 -1
- package/dist/cjs/server/authenticate/admin/billing/check.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/billing/request.js +1 -0
- package/dist/cjs/server/authenticate/admin/billing/request.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/billing/require.js +1 -0
- package/dist/cjs/server/authenticate/admin/billing/require.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/helpers/redirect-to-install-page.js +37 -0
- package/dist/cjs/server/authenticate/admin/helpers/redirect-to-install-page.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/helpers/redirect.js +40 -3
- package/dist/cjs/server/authenticate/admin/helpers/redirect.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/helpers/validate-shop-and-host-params.js +13 -2
- package/dist/cjs/server/authenticate/admin/helpers/validate-shop-and-host-params.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/scope/client/fetch-scopes-information.js +23 -0
- package/dist/cjs/server/authenticate/admin/scope/client/fetch-scopes-information.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/scope/client/revoke-scopes.js +26 -0
- package/dist/cjs/server/authenticate/admin/scope/client/revoke-scopes.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/scope/factory.js +16 -0
- package/dist/cjs/server/authenticate/admin/scope/factory.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/scope/query.js +38 -0
- package/dist/cjs/server/authenticate/admin/scope/query.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/scope/request.js +28 -0
- package/dist/cjs/server/authenticate/admin/scope/request.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/scope/revoke.js +39 -0
- package/dist/cjs/server/authenticate/admin/scope/revoke.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/strategies/auth-code-flow.js +5 -0
- package/dist/cjs/server/authenticate/admin/strategies/auth-code-flow.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/strategies/merchant-custom-app.js +39 -0
- package/dist/cjs/server/authenticate/admin/strategies/merchant-custom-app.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/strategies/token-exchange.js +9 -1
- package/dist/cjs/server/authenticate/admin/strategies/token-exchange.js.map +1 -1
- package/dist/cjs/server/authenticate/flow/authenticate.js.map +1 -1
- package/dist/cjs/server/authenticate/fulfillment-service/authenticate.js +5 -3
- package/dist/cjs/server/authenticate/fulfillment-service/authenticate.js.map +1 -1
- package/dist/cjs/server/authenticate/helpers/create-or-load-offline-session.js +19 -0
- package/dist/cjs/server/authenticate/helpers/create-or-load-offline-session.js.map +1 -0
- package/dist/cjs/server/authenticate/helpers/invalidate-access-token.js.map +1 -1
- package/dist/cjs/server/authenticate/public/appProxy/authenticate.js.map +1 -1
- package/dist/cjs/server/authenticate/public/extension/authenticate.js +1 -0
- package/dist/cjs/server/authenticate/public/extension/authenticate.js.map +1 -1
- package/dist/cjs/server/authenticate/webhooks/authenticate.js +4 -3
- package/dist/cjs/server/authenticate/webhooks/authenticate.js.map +1 -1
- package/dist/cjs/server/boundary/headers.js.map +1 -1
- package/dist/cjs/server/future/flags.js +3 -0
- package/dist/cjs/server/future/flags.js.map +1 -1
- package/dist/cjs/server/shopify-app.js +17 -4
- package/dist/cjs/server/shopify-app.js.map +1 -1
- package/dist/cjs/server/unauthenticated/helpers/get-offline-session.js +4 -3
- package/dist/cjs/server/unauthenticated/helpers/get-offline-session.js.map +1 -1
- package/dist/cjs/server/version.js +1 -1
- package/dist/esm/server/adapters/node/index.mjs +1 -0
- package/dist/esm/server/adapters/node/index.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/authenticate.mjs +19 -8
- package/dist/esm/server/authenticate/admin/authenticate.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/billing/cancel.mjs +1 -0
- package/dist/esm/server/authenticate/admin/billing/cancel.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/billing/check.mjs +2 -1
- package/dist/esm/server/authenticate/admin/billing/check.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/billing/request.mjs +1 -0
- package/dist/esm/server/authenticate/admin/billing/request.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/billing/require.mjs +1 -0
- package/dist/esm/server/authenticate/admin/billing/require.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/helpers/redirect-to-install-page.mjs +35 -0
- package/dist/esm/server/authenticate/admin/helpers/redirect-to-install-page.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/helpers/redirect.mjs +40 -3
- package/dist/esm/server/authenticate/admin/helpers/redirect.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/helpers/validate-shop-and-host-params.mjs +13 -2
- package/dist/esm/server/authenticate/admin/helpers/validate-shop-and-host-params.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/scope/client/fetch-scopes-information.mjs +21 -0
- package/dist/esm/server/authenticate/admin/scope/client/fetch-scopes-information.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/scope/client/revoke-scopes.mjs +24 -0
- package/dist/esm/server/authenticate/admin/scope/client/revoke-scopes.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/scope/factory.mjs +14 -0
- package/dist/esm/server/authenticate/admin/scope/factory.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/scope/query.mjs +35 -0
- package/dist/esm/server/authenticate/admin/scope/query.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/scope/request.mjs +26 -0
- package/dist/esm/server/authenticate/admin/scope/request.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/scope/revoke.mjs +37 -0
- package/dist/esm/server/authenticate/admin/scope/revoke.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/strategies/auth-code-flow.mjs +5 -0
- package/dist/esm/server/authenticate/admin/strategies/auth-code-flow.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/strategies/merchant-custom-app.mjs +37 -0
- package/dist/esm/server/authenticate/admin/strategies/merchant-custom-app.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/strategies/token-exchange.mjs +9 -1
- package/dist/esm/server/authenticate/admin/strategies/token-exchange.mjs.map +1 -1
- package/dist/esm/server/authenticate/flow/authenticate.mjs.map +1 -1
- package/dist/esm/server/authenticate/fulfillment-service/authenticate.mjs +5 -3
- package/dist/esm/server/authenticate/fulfillment-service/authenticate.mjs.map +1 -1
- package/dist/esm/server/authenticate/helpers/create-or-load-offline-session.mjs +17 -0
- package/dist/esm/server/authenticate/helpers/create-or-load-offline-session.mjs.map +1 -0
- package/dist/esm/server/authenticate/helpers/invalidate-access-token.mjs.map +1 -1
- package/dist/esm/server/authenticate/public/appProxy/authenticate.mjs.map +1 -1
- package/dist/esm/server/authenticate/public/extension/authenticate.mjs +1 -0
- package/dist/esm/server/authenticate/public/extension/authenticate.mjs.map +1 -1
- package/dist/esm/server/authenticate/webhooks/authenticate.mjs +4 -3
- package/dist/esm/server/authenticate/webhooks/authenticate.mjs.map +1 -1
- package/dist/esm/server/boundary/headers.mjs.map +1 -1
- package/dist/esm/server/future/flags.mjs +3 -0
- package/dist/esm/server/future/flags.mjs.map +1 -1
- package/dist/esm/server/shopify-app.mjs +17 -4
- package/dist/esm/server/shopify-app.mjs.map +1 -1
- package/dist/esm/server/unauthenticated/helpers/get-offline-session.mjs +4 -3
- package/dist/esm/server/unauthenticated/helpers/get-offline-session.mjs.map +1 -1
- package/dist/esm/server/version.mjs +1 -1
- package/dist/ts/server/authenticate/admin/authenticate.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/billing/check.d.ts +1 -1
- package/dist/ts/server/authenticate/admin/billing/check.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/billing/types.d.ts +21 -4
- package/dist/ts/server/authenticate/admin/billing/types.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/helpers/redirect-to-install-page.d.ts +3 -0
- package/dist/ts/server/authenticate/admin/helpers/redirect-to-install-page.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/helpers/redirect.d.ts +2 -2
- package/dist/ts/server/authenticate/admin/helpers/redirect.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/helpers/validate-shop-and-host-params.d.ts +1 -1
- package/dist/ts/server/authenticate/admin/helpers/validate-shop-and-host-params.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/scope/client/fetch-scopes-information.d.ts +18 -0
- package/dist/ts/server/authenticate/admin/scope/client/fetch-scopes-information.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/scope/client/revoke-scopes.d.ts +12 -0
- package/dist/ts/server/authenticate/admin/scope/client/revoke-scopes.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/scope/factory.d.ts +6 -0
- package/dist/ts/server/authenticate/admin/scope/factory.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/scope/query.d.ts +8 -0
- package/dist/ts/server/authenticate/admin/scope/query.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/scope/request.d.ts +5 -0
- package/dist/ts/server/authenticate/admin/scope/request.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/scope/revoke.d.ts +5 -0
- package/dist/ts/server/authenticate/admin/scope/revoke.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/scope/types.d.ts +17 -0
- package/dist/ts/server/authenticate/admin/scope/types.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/strategies/auth-code-flow.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/strategies/merchant-custom-app.d.ts +16 -0
- package/dist/ts/server/authenticate/admin/strategies/merchant-custom-app.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/strategies/token-exchange.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/types.d.ts +12 -3
- package/dist/ts/server/authenticate/admin/types.d.ts.map +1 -1
- package/dist/ts/server/authenticate/fulfillment-service/authenticate.d.ts.map +1 -1
- package/dist/ts/server/authenticate/helpers/create-or-load-offline-session.d.ts +3 -0
- package/dist/ts/server/authenticate/helpers/create-or-load-offline-session.d.ts.map +1 -0
- package/dist/ts/server/authenticate/helpers/index.d.ts +1 -0
- package/dist/ts/server/authenticate/helpers/index.d.ts.map +1 -1
- package/dist/ts/server/authenticate/webhooks/authenticate.d.ts.map +1 -1
- package/dist/ts/server/config-types.d.ts +5 -2
- package/dist/ts/server/config-types.d.ts.map +1 -1
- package/dist/ts/server/future/flags.d.ts +7 -0
- package/dist/ts/server/future/flags.d.ts.map +1 -1
- package/dist/ts/server/shopify-app.d.ts.map +1 -1
- package/dist/ts/server/types.d.ts +5 -2
- package/dist/ts/server/types.d.ts.map +1 -1
- package/dist/ts/server/unauthenticated/helpers/get-offline-session.d.ts +1 -1
- package/dist/ts/server/unauthenticated/helpers/get-offline-session.d.ts.map +1 -1
- package/dist/ts/server/version.d.ts +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +12 -12
|
@@ -5,6 +5,7 @@ var runtime = require('@shopify/shopify-api/runtime');
|
|
|
5
5
|
var appBridgeUrl = require('../../authenticate/helpers/app-bridge-url.js');
|
|
6
6
|
require('@remix-run/server-runtime');
|
|
7
7
|
require('isbot');
|
|
8
|
+
require('../../types.js');
|
|
8
9
|
|
|
9
10
|
runtime.setCrypto(crypto);
|
|
10
11
|
runtime.setAbstractRuntimeString(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../src/server/adapters/node/index.ts"],"sourcesContent":[null],"names":["setCrypto","setAbstractRuntimeString","setAppBridgeUrlOverride"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/server/adapters/node/index.ts"],"sourcesContent":[null],"names":["setCrypto","setAbstractRuntimeString","setAppBridgeUrlOverride"],"mappings":";;;;;;;;;AASAA,iBAAS,CAAC,MAAa,CAAC,CAAC;AAEzBC,gCAAwB,CAAC,MAAK;AAC5B,IAAA,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;AAC9B,IAAAC,oCAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACtD,CAAC;AACD;;"}
|
|
@@ -6,6 +6,7 @@ var getSessionTokenHeader = require('../helpers/get-session-token-header.js');
|
|
|
6
6
|
var rejectBotRequest = require('../helpers/reject-bot-request.js');
|
|
7
7
|
var respondToOptionsRequest = require('../helpers/respond-to-options-request.js');
|
|
8
8
|
require('@remix-run/server-runtime');
|
|
9
|
+
require('../../types.js');
|
|
9
10
|
var cancel = require('./billing/cancel.js');
|
|
10
11
|
var require$1 = require('./billing/require.js');
|
|
11
12
|
var request = require('./billing/request.js');
|
|
@@ -17,6 +18,7 @@ require('@shopify/shopify-api');
|
|
|
17
18
|
var redirect = require('./helpers/redirect.js');
|
|
18
19
|
var renderAppBridge = require('./helpers/render-app-bridge.js');
|
|
19
20
|
var validateShopAndHostParams = require('./helpers/validate-shop-and-host-params.js');
|
|
21
|
+
var factory = require('./scope/factory.js');
|
|
20
22
|
|
|
21
23
|
function authStrategyFactory({ strategy, ...params }) {
|
|
22
24
|
const { api, logger, config } = params;
|
|
@@ -36,7 +38,7 @@ function authStrategyFactory({ strategy, ...params }) {
|
|
|
36
38
|
}
|
|
37
39
|
}
|
|
38
40
|
function createContext(request$1, session, authStrategy, sessionToken) {
|
|
39
|
-
|
|
41
|
+
let context = {
|
|
40
42
|
admin: createAdminApiContext.createAdminApiContext(session, params, authStrategy.handleClientError(request$1)),
|
|
41
43
|
billing: {
|
|
42
44
|
require: require$1.requireBillingFactory(params, request$1, session),
|
|
@@ -47,16 +49,28 @@ function authStrategyFactory({ strategy, ...params }) {
|
|
|
47
49
|
session,
|
|
48
50
|
cors: ensureCorsHeaders.ensureCORSHeadersFactory(params, request$1),
|
|
49
51
|
};
|
|
52
|
+
context = addEmbeddedFeatures(context, request$1, session, sessionToken);
|
|
53
|
+
context = addScopesFeatures(context);
|
|
54
|
+
return context;
|
|
55
|
+
}
|
|
56
|
+
function addEmbeddedFeatures(context, request, session, sessionToken) {
|
|
50
57
|
if (config.isEmbeddedApp) {
|
|
51
58
|
return {
|
|
52
59
|
...context,
|
|
53
60
|
sessionToken,
|
|
54
|
-
redirect: redirect.redirectFactory(params, request
|
|
61
|
+
redirect: redirect.redirectFactory(params, request, session.shop),
|
|
55
62
|
};
|
|
56
63
|
}
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
return context;
|
|
65
|
+
}
|
|
66
|
+
function addScopesFeatures(context) {
|
|
67
|
+
if (config.future.wip_optionalScopesApi) {
|
|
68
|
+
return {
|
|
69
|
+
...context,
|
|
70
|
+
scopes: factory.scopesApiFactory(params, context.session, context.admin),
|
|
71
|
+
};
|
|
59
72
|
}
|
|
73
|
+
return context;
|
|
60
74
|
}
|
|
61
75
|
return async function authenticateAdmin(request) {
|
|
62
76
|
try {
|
|
@@ -83,14 +97,11 @@ function authStrategyFactory({ strategy, ...params }) {
|
|
|
83
97
|
sessionToken,
|
|
84
98
|
shop,
|
|
85
99
|
});
|
|
86
|
-
logger.debug('Request is valid, loaded session from session token', {
|
|
87
|
-
shop: session.shop,
|
|
88
|
-
isOnline: session.isOnline,
|
|
89
|
-
});
|
|
90
100
|
return createContext(request, session, strategy, payload);
|
|
91
101
|
}
|
|
92
102
|
catch (errorOrResponse) {
|
|
93
103
|
if (errorOrResponse instanceof Response) {
|
|
104
|
+
logger.debug('Authenticate returned a response');
|
|
94
105
|
ensureCorsHeaders.ensureCORSHeadersFactory(params, request)(errorOrResponse);
|
|
95
106
|
}
|
|
96
107
|
throw errorOrResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/admin/authenticate.ts"],"sourcesContent":[null],"names":["renderAppBridge","request","createAdminApiContext","requireBillingFactory","checkBillingFactory","requestBillingFactory","cancelBillingFactory","ensureCORSHeadersFactory","redirectFactory","respondToBotRequest","respondToOptionsRequest","getSessionTokenHeader","validateShopAndHostParams","ensureAppIsEmbeddedIfRequired","ensureSessionTokenSearchParamIfRequired","getSessionTokenFromUrlParam","validateSessionToken"],"mappings":"
|
|
1
|
+
{"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/admin/authenticate.ts"],"sourcesContent":[null],"names":["renderAppBridge","request","createAdminApiContext","requireBillingFactory","checkBillingFactory","requestBillingFactory","cancelBillingFactory","ensureCORSHeadersFactory","redirectFactory","scopesApiFactory","respondToBotRequest","respondToOptionsRequest","getSessionTokenHeader","validateShopAndHostParams","ensureAppIsEmbeddedIfRequired","ensureSessionTokenSearchParamIfRequired","getSessionTokenFromUrlParam","validateSessionToken"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ require('@remix-run/server-runtime');
|
|
|
5
5
|
var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
6
6
|
var invalidateAccessToken = require('../../helpers/invalidate-access-token.js');
|
|
7
7
|
require('isbot');
|
|
8
|
+
require('../../../types.js');
|
|
8
9
|
|
|
9
10
|
function cancelBillingFactory(params, request, session) {
|
|
10
11
|
return async function cancelBilling(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancel.js","sources":["../../../../../../../src/server/authenticate/admin/billing/cancel.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"cancel.js","sources":["../../../../../../../src/server/authenticate/admin/billing/cancel.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SAQgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,aAAa,CAAC,OAA6B,EAAA;AAC/D,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC;AAE7B,QAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC,CAAC;AAErE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC9B,OAAO;gBACP,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;AACzB,aAAA,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC,CAAC;AACH,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;aAC/D;iBAAM;AACL,gBAAA,MAAM,KAAK,CAAC;aACb;SACF;AACH,KAAC,CAAC;AACJ;;;;"}
|
|
@@ -5,9 +5,10 @@ require('@remix-run/server-runtime');
|
|
|
5
5
|
var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
6
6
|
var invalidateAccessToken = require('../../helpers/invalidate-access-token.js');
|
|
7
7
|
require('isbot');
|
|
8
|
+
require('../../../types.js');
|
|
8
9
|
|
|
9
10
|
function checkBillingFactory(params, request, session) {
|
|
10
|
-
return async function checkBilling(options) {
|
|
11
|
+
return async function checkBilling(options = {}) {
|
|
11
12
|
const { api, logger } = params;
|
|
12
13
|
logger.debug('Checking billing plans', { shop: session.shop, ...options });
|
|
13
14
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sources":["../../../../../../../src/server/authenticate/admin/billing/check.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"check.js","sources":["../../../../../../../src/server/authenticate/admin/billing/check.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SASgB,mBAAmB,CACjC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,YAAY,CAChC,UAAuC,EAAE,EAAA;AAEzC,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC;AAE7B,QAAA,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC,CAAC;AAEzE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC7B,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,KAAiB;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC,CAAC;AACH,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;aAC/D;iBAAM;AACL,gBAAA,MAAM,KAAK,CAAC;aACb;SACF;AACH,KAAC,CAAC;AACJ;;;;"}
|
|
@@ -6,6 +6,7 @@ var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
|
6
6
|
var redirectWithAppBridgeHeaders = require('../helpers/redirect-with-app-bridge-headers.js');
|
|
7
7
|
var invalidateAccessToken = require('../../helpers/invalidate-access-token.js');
|
|
8
8
|
require('isbot');
|
|
9
|
+
require('../../../types.js');
|
|
9
10
|
|
|
10
11
|
function requestBillingFactory(params, request, session) {
|
|
11
12
|
return async function requestBilling({ plan, isTest, returnUrl, ...overrides }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sources":["../../../../../../../src/server/authenticate/admin/billing/request.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage","getAppBridgeHeaders","redirect"],"mappings":"
|
|
1
|
+
{"version":3,"file":"request.js","sources":["../../../../../../../src/server/authenticate/admin/billing/request.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage","getAppBridgeHeaders","redirect"],"mappings":";;;;;;;;;;SAcgB,qBAAqB,CACnC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,cAAc,CAAC,EACnC,IAAI,EACJ,MAAM,EACN,SAAS,EACT,GAAG,SAAS,EACkB,EAAA;AAC9B,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC;AAE7B,QAAA,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI;YACJ,MAAM;YACN,SAAS;AACV,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,MAAoC,CAAC;AACzC,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AACjC,gBAAA,IAAI,EAAE,IAAc;gBACpB,OAAO;gBACP,MAAM;gBACN,SAAS;AACT,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,GAAG,SAAS;AACb,aAAA,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC,CAAC;AACH,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;aAC/D;iBAAM;AACL,gBAAA,MAAM,KAAK,CAAC;aACb;SACF;AAED,QAAA,MAAM,gBAAgB,CACpB,MAAM,EACN,OAAO,EACP,MAAM,CAAC,eAAe,EACtB,OAAO,CAAC,IAAI,CACb,CAAC;AACJ,KAAC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAmB,EACnB,OAAgB,EAChB,GAAW,EACX,IAAY,EAAA;AAEZ,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC;IAEhC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxC,IAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;IAC1E,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAE1D,IAAI,YAAY,EAAE;;;;;AAKhB,QAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,OAAO,EAAEC,gDAAmB,CAAC,GAAG,CAAC;AAClC,SAAA,CAAC,CAAC;KACJ;SAAM,IAAI,iBAAiB,EAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,IAAI;YACJ,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;AAC1C,YAAA,UAAU,EAAE,GAAG;AAChB,SAAA,CAAC,CAAC;AAEH,QAAA,MAAMC,sBAAQ,CAAC,CAAG,EAAA,MAAM,CAAC,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC,CAAC;KACtE;SAAM;;AAEL,QAAA,MAAMA,sBAAQ,CAAC,GAAG,CAAC,CAAC;KACrB;AACH;;;;"}
|
|
@@ -5,6 +5,7 @@ require('@remix-run/server-runtime');
|
|
|
5
5
|
var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
6
6
|
var invalidateAccessToken = require('../../helpers/invalidate-access-token.js');
|
|
7
7
|
require('isbot');
|
|
8
|
+
require('../../../types.js');
|
|
8
9
|
|
|
9
10
|
function requireBillingFactory(params, request, session) {
|
|
10
11
|
const { api, logger } = params;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require.js","sources":["../../../../../../../src/server/authenticate/admin/billing/require.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"require.js","sources":["../../../../../../../src/server/authenticate/admin/billing/require.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SAagB,qBAAqB,CACnC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC;AAE7B,IAAA,OAAO,eAAe,cAAc,CAAC,OAAsC,EAAA;AACzE,QAAA,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;AAEF,QAAA,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,UAAU,CAAC,CAAC;AAE1D,QAAA,IAAI,IAAgC,CAAC;AACrC,QAAA,IAAI;AACF,YAAA,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC7B,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,KAAiB;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,UAAU,CAAC,CAAC;AAExE,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;aAC/D;iBAAM;AACL,gBAAA,MAAM,KAAK,CAAC;aACb;SACF;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;YACjD,MAAM,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;SAClE;AAED,QAAA,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC;AAEpD,QAAA,OAAO,IAAI,CAAC;AACd,KAAC,CAAC;AACJ;;;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var serverRuntime = require('@remix-run/server-runtime');
|
|
4
|
+
var redirectWithAppBridgeHeaders = require('./redirect-with-app-bridge-headers.js');
|
|
5
|
+
|
|
6
|
+
async function redirectToInstallPage(params, shop, optionalScopes = []) {
|
|
7
|
+
const installUrl = buildInstallUrl(params, shop, optionalScopes);
|
|
8
|
+
if (params.config.isEmbeddedApp) {
|
|
9
|
+
throw redirectWithAppBridgeHeaders.redirectWithAppBridgeHeaders(installUrl);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
throw serverRuntime.redirect(installUrl);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function buildInstallUrl(params, shop, optionalScopes = []) {
|
|
16
|
+
const baseInstallUrl = buildBaseInstallUrl(params, shop);
|
|
17
|
+
baseInstallUrl.search = buildParamsInstallUrl(params, optionalScopes).toString();
|
|
18
|
+
return baseInstallUrl.href;
|
|
19
|
+
}
|
|
20
|
+
function buildBaseInstallUrl({ api }, shop) {
|
|
21
|
+
const cleanShop = api.utils.sanitizeShop(shop, true);
|
|
22
|
+
return new URL(`https://${cleanShop}/admin/oauth/install`);
|
|
23
|
+
}
|
|
24
|
+
function buildParamsInstallUrl({ config }, optionalScopes = []) {
|
|
25
|
+
const optionalScopesParam = optionalScopes && optionalScopes.length > 0
|
|
26
|
+
? { optional_scopes: optionalScopes.join(',') }
|
|
27
|
+
: undefined;
|
|
28
|
+
const query = {
|
|
29
|
+
client_id: config.apiKey,
|
|
30
|
+
scope: config.scopes?.toString() || '',
|
|
31
|
+
...optionalScopesParam,
|
|
32
|
+
};
|
|
33
|
+
return new URLSearchParams(query);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.redirectToInstallPage = redirectToInstallPage;
|
|
37
|
+
//# sourceMappingURL=redirect-to-install-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect-to-install-page.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-to-install-page.ts"],"sourcesContent":[null],"names":["redirectWithAppBridgeHeaders","remixRedirect"],"mappings":";;;;;AAMO,eAAe,qBAAqB,CACzC,MAAmB,EACnB,IAAY,EACZ,cAAA,GAA2B,EAAE,EAAA;IAE7B,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACjE,IAAA,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;AAC/B,QAAA,MAAMA,yDAA4B,CAAC,UAAU,CAAC,CAAC;KAChD;SAAM;AACL,QAAA,MAAMC,sBAAa,CAAC,UAAU,CAAC,CAAC;KACjC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,MAAmB,EACnB,IAAY,EACZ,iBAA2B,EAAE,EAAA;IAE7B,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACzD,IAAA,cAAc,CAAC,MAAM,GAAG,qBAAqB,CAC3C,MAAM,EACN,cAAc,CACf,CAAC,QAAQ,EAAE,CAAC;IACb,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAC,GAAG,EAAc,EAAE,IAAY,EAAA;AAC3D,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrD,IAAA,OAAO,IAAI,GAAG,CAAC,WAAW,SAAS,CAAA,oBAAA,CAAsB,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,qBAAqB,CAC5B,EAAC,MAAM,EAAc,EACrB,iBAA2B,EAAE,EAAA;IAE7B,MAAM,mBAAmB,GACvB,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;UACvC,EAAC,eAAe,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC;UAC3C,SAAS,CAAC;AAEhB,IAAA,MAAM,KAAK,GAAG;QACZ,SAAS,EAAE,MAAM,CAAC,MAAM;QACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;AACtC,QAAA,GAAG,mBAAmB;KACvB,CAAC;AACF,IAAA,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AACpC;;;;"}
|
|
@@ -5,11 +5,12 @@ var getSessionTokenHeader = require('../../helpers/get-session-token-header.js')
|
|
|
5
5
|
var renderAppBridge = require('./render-app-bridge.js');
|
|
6
6
|
var redirectWithAppBridgeHeaders = require('./redirect-with-app-bridge-headers.js');
|
|
7
7
|
|
|
8
|
-
function redirectFactory(params, request) {
|
|
9
|
-
const { config } = params;
|
|
8
|
+
function redirectFactory(params, request, shop) {
|
|
9
|
+
const { config, logger } = params;
|
|
10
10
|
return function redirect(url, init) {
|
|
11
11
|
const { searchParams } = new URL(request.url);
|
|
12
|
-
const parsedUrl =
|
|
12
|
+
const parsedUrl = parseURL(url, request.url, shop);
|
|
13
|
+
logger.debug('Redirecting', { url: parsedUrl.toString() });
|
|
13
14
|
const isSameOrigin = parsedUrl.origin === config.appUrl;
|
|
14
15
|
if (isSameOrigin || url.startsWith('/')) {
|
|
15
16
|
searchParams.forEach((value, key) => {
|
|
@@ -57,6 +58,42 @@ function isEmbeddedRequest(request) {
|
|
|
57
58
|
const { searchParams } = new URL(request.url);
|
|
58
59
|
return searchParams.get('embedded') === '1';
|
|
59
60
|
}
|
|
61
|
+
function parseURL(url, base, shop) {
|
|
62
|
+
if (isAdminRemotePath(url)) {
|
|
63
|
+
const adminPath = getAdminRemotePath(url);
|
|
64
|
+
const cleanShopName = shop.replace('.myshopify.com', '');
|
|
65
|
+
return new URL(`https://admin.shopify.com/store/${cleanShopName}${adminPath}`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
return new URL(url, base);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const ADMIN_REGEX = /^shopify:\/*admin\//i;
|
|
72
|
+
function isAdminRemotePath(url) {
|
|
73
|
+
return ADMIN_REGEX.test(url);
|
|
74
|
+
}
|
|
75
|
+
function getAdminRemotePath(url) {
|
|
76
|
+
const parsedUrl = removeRestrictedParams(new URL(url)).href;
|
|
77
|
+
return parsedUrl.replace(ADMIN_REGEX, '/');
|
|
78
|
+
}
|
|
79
|
+
const embeddedFrameParamsToRemove = [
|
|
80
|
+
'hmac',
|
|
81
|
+
'locale',
|
|
82
|
+
'protocol',
|
|
83
|
+
'session',
|
|
84
|
+
'id_token',
|
|
85
|
+
'shop',
|
|
86
|
+
'timestamp',
|
|
87
|
+
'host',
|
|
88
|
+
'embedded',
|
|
89
|
+
// sent when clicking rel="home" nav item
|
|
90
|
+
'appLoadId',
|
|
91
|
+
];
|
|
92
|
+
function removeRestrictedParams(url) {
|
|
93
|
+
const newUrl = new URL(url);
|
|
94
|
+
embeddedFrameParamsToRemove.forEach((param) => newUrl.searchParams.delete(param));
|
|
95
|
+
return newUrl;
|
|
96
|
+
}
|
|
60
97
|
|
|
61
98
|
exports.redirectFactory = redirectFactory;
|
|
62
99
|
//# sourceMappingURL=redirect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redirect.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect.ts"],"sourcesContent":[null],"names":["renderAppBridge","remixRedirect","redirectWithAppBridgeHeaders","getSessionTokenHeader"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"redirect.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect.ts"],"sourcesContent":[null],"names":["renderAppBridge","remixRedirect","redirectWithAppBridgeHeaders","getSessionTokenHeader"],"mappings":"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"}
|
|
@@ -11,17 +11,28 @@ function validateShopAndHostParams(params, request) {
|
|
|
11
11
|
logger.debug('Missing or invalid shop, redirecting to login path', {
|
|
12
12
|
shop,
|
|
13
13
|
});
|
|
14
|
-
throw
|
|
14
|
+
throw redirectToLoginPath(request, params);
|
|
15
15
|
}
|
|
16
16
|
const host = api.utils.sanitizeHost(url.searchParams.get('host'));
|
|
17
17
|
if (!host) {
|
|
18
18
|
logger.debug('Invalid host, redirecting to login path', {
|
|
19
19
|
host: url.searchParams.get('host'),
|
|
20
20
|
});
|
|
21
|
-
throw
|
|
21
|
+
throw redirectToLoginPath(request, params);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
+
function redirectToLoginPath(request, params) {
|
|
26
|
+
const { config, logger } = params;
|
|
27
|
+
const { pathname } = new URL(request.url);
|
|
28
|
+
if (pathname === config.auth.loginPath) {
|
|
29
|
+
const message = `Detected call to shopify.authenticate.admin() from configured login path ` +
|
|
30
|
+
`('${config.auth.loginPath}'), please make sure to call shopify.login() from that route instead.`;
|
|
31
|
+
logger.debug(message);
|
|
32
|
+
throw new Response(message, { status: 500 });
|
|
33
|
+
}
|
|
34
|
+
throw serverRuntime.redirect(config.auth.loginPath);
|
|
35
|
+
}
|
|
25
36
|
|
|
26
37
|
exports.validateShopAndHostParams = validateShopAndHostParams;
|
|
27
38
|
//# sourceMappingURL=validate-shop-and-host-params.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-shop-and-host-params.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/validate-shop-and-host-params.ts"],"sourcesContent":[null],"names":["redirect"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"validate-shop-and-host-params.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/validate-shop-and-host-params.ts"],"sourcesContent":[null],"names":["redirect"],"mappings":";;;;AAIgB,SAAA,yBAAyB,CACvC,MAAmB,EACnB,OAAgB,EAAA;IAEhB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC;AAErC,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE;gBACjE,IAAI;AACL,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SAC5C;AAED,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE;gBACtD,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SAC5C;KACF;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAgB,EAAE,MAAmB,EAAA;AAChE,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC;IAEhC,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;QACtC,MAAM,OAAO,GACX,CAA2E,yEAAA,CAAA;AAC3E,YAAA,CAAA,EAAA,EAAK,MAAM,CAAC,IAAI,CAAC,SAAS,uEAAuE,CAAC;AAEpG,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC;KAC5C;IAED,MAAMA,sBAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACxC;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const FETCH_SCOPE_INFORMATION_QUERY = `#graphql
|
|
4
|
+
query FetchAccessScopes{
|
|
5
|
+
app {
|
|
6
|
+
requestedAccessScopes {
|
|
7
|
+
handle
|
|
8
|
+
}
|
|
9
|
+
installation {
|
|
10
|
+
accessScopes {
|
|
11
|
+
handle
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}`;
|
|
16
|
+
async function fetchScopeInformation(admin) {
|
|
17
|
+
const fetchScopeInformationResult = await admin.graphql(FETCH_SCOPE_INFORMATION_QUERY);
|
|
18
|
+
const resultContent = await fetchScopeInformationResult.json();
|
|
19
|
+
return resultContent.data;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
exports.fetchScopeInformation = fetchScopeInformation;
|
|
23
|
+
//# sourceMappingURL=fetch-scopes-information.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-scopes-information.js","sources":["../../../../../../../../src/server/authenticate/admin/scope/client/fetch-scopes-information.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAkBA,MAAM,6BAA6B,GAAG,CAAA;;;;;;;;;;;;EAYpC,CAAC;AAEI,eAAe,qBAAqB,CACzC,KAAsB,EAAA;IAEtB,MAAM,2BAA2B,GAAG,MAAM,KAAK,CAAC,OAAO,CACrD,6BAA6B,CAC9B,CAAC;AAEF,IAAA,MAAM,aAAa,GAAG,MAAM,2BAA2B,CAAC,IAAI,EAAE,CAAC;IAC/D,OAAO,aAAa,CAAC,IAAI,CAAC;AAC5B;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const REVOKE_SCOPE_MUTATION = `#graphql
|
|
4
|
+
mutation AppRevokeAccessScopes($scopes: [String!]!) {
|
|
5
|
+
appRevokeAccessScopes(scopes: $scopes){
|
|
6
|
+
revoked {
|
|
7
|
+
handle
|
|
8
|
+
}
|
|
9
|
+
userErrors {
|
|
10
|
+
field
|
|
11
|
+
message
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}`;
|
|
15
|
+
async function revokeScopes(admin, scopes) {
|
|
16
|
+
const revokeScopesResult = await admin.graphql(REVOKE_SCOPE_MUTATION, {
|
|
17
|
+
variables: {
|
|
18
|
+
scopes,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
const resultContent = await revokeScopesResult.json();
|
|
22
|
+
return resultContent.data;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
exports.revokeScopes = revokeScopes;
|
|
26
|
+
//# sourceMappingURL=revoke-scopes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke-scopes.js","sources":["../../../../../../../../src/server/authenticate/admin/scope/client/revoke-scopes.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAYA,MAAM,qBAAqB,GAAG,CAAA;;;;;;;;;;;EAW5B,CAAC;AAEI,eAAe,YAAY,CAChC,KAAsB,EACtB,MAAgB,EAAA;IAEhB,MAAM,kBAAkB,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACpE,QAAA,SAAS,EAAE;YACT,MAAM;AACP,SAAA;AACF,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACtD,OAAO,aAAa,CAAC,IAAI,CAAC;AAC5B;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var request = require('./request.js');
|
|
4
|
+
var query = require('./query.js');
|
|
5
|
+
var revoke = require('./revoke.js');
|
|
6
|
+
|
|
7
|
+
function scopesApiFactory(params, session, admin) {
|
|
8
|
+
return {
|
|
9
|
+
query: query.queryScopesFactory(params, session, admin),
|
|
10
|
+
request: request.requestScopesFactory(params, session, admin),
|
|
11
|
+
revoke: revoke.revokeScopesFactory(params, session, admin),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
exports.scopesApiFactory = scopesApiFactory;
|
|
16
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sources":["../../../../../../../src/server/authenticate/admin/scope/factory.ts"],"sourcesContent":[null],"names":["queryScopesFactory","requestScopesFactory","revokeScopesFactory"],"mappings":";;;;;;SAUgB,gBAAgB,CAC9B,MAAmB,EACnB,OAAgB,EAChB,KAAsB,EAAA;IAEtB,OAAO;QACL,KAAK,EAAEA,wBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACjD,OAAO,EAAEC,4BAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACrD,MAAM,EAAEC,0BAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;KACpD,CAAC;AACJ;;;;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var shopifyApi = require('@shopify/shopify-api');
|
|
4
|
+
var fetchScopesInformation = require('./client/fetch-scopes-information.js');
|
|
5
|
+
|
|
6
|
+
function queryScopesFactory(params, session, admin) {
|
|
7
|
+
return async function queryScopes() {
|
|
8
|
+
const { logger } = params;
|
|
9
|
+
logger.debug('Query scopes information: ', {
|
|
10
|
+
shop: session.shop,
|
|
11
|
+
});
|
|
12
|
+
const scopesInformation = await fetchScopesInformation.fetchScopeInformation(admin);
|
|
13
|
+
return mapFetchScopeInformation(scopesInformation);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function mapFetchScopeInformation(fetchScopeInformation) {
|
|
17
|
+
const appInformation = fetchScopeInformation.app;
|
|
18
|
+
const declaredRequired = new shopifyApi.AuthScopes(appInformation.requestedAccessScopes.map((scope) => scope.handle));
|
|
19
|
+
const grantedRequired = appInformation.installation.accessScopes
|
|
20
|
+
.map((scope) => scope.handle)
|
|
21
|
+
.filter((scope) => declaredRequired.has(scope));
|
|
22
|
+
const grantedOptional = appInformation.installation.accessScopes
|
|
23
|
+
.map((scope) => scope.handle)
|
|
24
|
+
.filter((scope) => !declaredRequired.has(scope));
|
|
25
|
+
return {
|
|
26
|
+
granted: {
|
|
27
|
+
required: grantedRequired,
|
|
28
|
+
optional: grantedOptional,
|
|
29
|
+
},
|
|
30
|
+
declared: {
|
|
31
|
+
required: declaredRequired.toArray(),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.mapFetchScopeInformation = mapFetchScopeInformation;
|
|
37
|
+
exports.queryScopesFactory = queryScopesFactory;
|
|
38
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sources":["../../../../../../../src/server/authenticate/admin/scope/query.ts"],"sourcesContent":[null],"names":["fetchScopeInformation","AuthScopes"],"mappings":";;;;;SAWgB,kBAAkB,CAChC,MAAmB,EACnB,OAAgB,EAChB,KAAsB,EAAA;IAEtB,OAAO,eAAe,WAAW,GAAA;AAC/B,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,CAAC;AAExB,QAAA,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE;YACzC,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,iBAAiB,GAAG,MAAMA,4CAAqB,CAAC,KAAK,CAAC,CAAC;AAC7D,QAAA,OAAO,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;AACrD,KAAC,CAAC;AACJ,CAAC;AAEK,SAAU,wBAAwB,CACtC,qBAAoD,EAAA;AAEpD,IAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC;IACjD,MAAM,gBAAgB,GAAG,IAAIC,qBAAU,CACrC,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAClE,CAAC;AAEF,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,YAAY,CAAC,YAAY;SAC7D,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AAC5B,SAAA,MAAM,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAElD,IAAA,MAAM,eAAe,GAAG,cAAc,CAAC,YAAY,CAAC,YAAY;SAC7D,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;AAC5B,SAAA,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnD,OAAO;AACL,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,QAAQ,EAAE,eAAe;AAC1B,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE;AACrC,SAAA;KACF,CAAC;AACJ;;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var shopifyApi = require('@shopify/shopify-api');
|
|
4
|
+
var redirectToInstallPage = require('../helpers/redirect-to-install-page.js');
|
|
5
|
+
var fetchScopesInformation = require('./client/fetch-scopes-information.js');
|
|
6
|
+
|
|
7
|
+
function requestScopesFactory(params, session, admin) {
|
|
8
|
+
return async function requestScopes(scopes) {
|
|
9
|
+
const { logger } = params;
|
|
10
|
+
logger.debug('Request optional scopes: ', {
|
|
11
|
+
shop: session.shop,
|
|
12
|
+
...{ scopes },
|
|
13
|
+
});
|
|
14
|
+
if (scopes.length === 0)
|
|
15
|
+
return;
|
|
16
|
+
if (await alreadyGranted(scopes, admin))
|
|
17
|
+
return;
|
|
18
|
+
throw await redirectToInstallPage.redirectToInstallPage(params, session.shop, scopes);
|
|
19
|
+
};
|
|
20
|
+
async function alreadyGranted(scopes, admin) {
|
|
21
|
+
const scopesInformation = await fetchScopesInformation.fetchScopeInformation(admin);
|
|
22
|
+
const grantedScopes = scopesInformation.app.installation.accessScopes.map((scope) => scope.handle);
|
|
23
|
+
return new shopifyApi.AuthScopes(grantedScopes).has(scopes);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
exports.requestScopesFactory = requestScopesFactory;
|
|
28
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sources":["../../../../../../../src/server/authenticate/admin/scope/request.ts"],"sourcesContent":[null],"names":["redirectToInstallPage","fetchScopeInformation","AuthScopes"],"mappings":";;;;;;SAQgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,KAAsB,EAAA;AAEtB,IAAA,OAAO,eAAe,aAAa,CAAC,MAAgB,EAAA;AAClD,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,CAAC;AAExB,QAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;YACxC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,EAAC,MAAM,EAAC;AACZ,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;AAChC,QAAA,IAAI,MAAM,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE,OAAO;QAEhD,MAAM,MAAMA,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClE,KAAC,CAAC;AAEF,IAAA,eAAe,cAAc,CAAC,MAAgB,EAAE,KAAsB,EAAA;AACpE,QAAA,MAAM,iBAAiB,GAAG,MAAMC,4CAAqB,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CACvE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CACxB,CAAC;QACF,OAAO,IAAIC,qBAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAClD;AACH;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var revokeScopes = require('./client/revoke-scopes.js');
|
|
4
|
+
var fetchScopesInformation = require('./client/fetch-scopes-information.js');
|
|
5
|
+
var query = require('./query.js');
|
|
6
|
+
|
|
7
|
+
function revokeScopesFactory(params, session, admin) {
|
|
8
|
+
return async function revoke(scopes) {
|
|
9
|
+
const { logger } = params;
|
|
10
|
+
logger.debug('Revoke scopes: ', {
|
|
11
|
+
shop: session.shop,
|
|
12
|
+
scopes,
|
|
13
|
+
});
|
|
14
|
+
await validateScopes(scopes);
|
|
15
|
+
const revokeScopesResult = await revokeScopes.revokeScopes(admin, scopes);
|
|
16
|
+
if (revokeScopesResult.userErrors?.length > 0) {
|
|
17
|
+
logger.error('Failed to revoke scopes: ', {
|
|
18
|
+
shop: session.shop,
|
|
19
|
+
errors: revokeScopesResult.userErrors,
|
|
20
|
+
});
|
|
21
|
+
throw new Response(JSON.stringify(revokeScopesResult.userErrors), {
|
|
22
|
+
status: 422,
|
|
23
|
+
headers: {
|
|
24
|
+
'Content-Type': 'application/json',
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const scopesInfo = await fetchScopesInformation.fetchScopeInformation(admin);
|
|
29
|
+
return query.mapFetchScopeInformation(scopesInfo);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
async function validateScopes(scopes) {
|
|
33
|
+
if (!scopes || scopes.length === 0) {
|
|
34
|
+
throw new Response('No scopes provided', { status: 400 });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
exports.revokeScopesFactory = revokeScopesFactory;
|
|
39
|
+
//# sourceMappingURL=revoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke.js","sources":["../../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"sourcesContent":[null],"names":["revokeScopes","fetchScopeInformation","mapFetchScopeInformation"],"mappings":";;;;;;SASgB,mBAAmB,CACjC,MAAmB,EACnB,OAAgB,EAChB,KAAsB,EAAA;AAEtB,IAAA,OAAO,eAAe,MAAM,CAAC,MAAgB,EAAA;AAC3C,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,CAAC;AAExB,QAAA,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;AACP,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAE7B,MAAM,kBAAkB,GAAG,MAAMA,yBAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;gBACxC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,kBAAkB,CAAC,UAAU;AACtC,aAAA,CAAC,CAAC;YAEH,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;AAChE,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,kBAAkB;AACnC,iBAAA;AACF,aAAA,CAAC,CAAC;SACJ;AAED,QAAA,MAAM,UAAU,GAAG,MAAMC,4CAAqB,CAAC,KAAK,CAAC,CAAC;AACtD,QAAA,OAAOC,8BAAwB,CAAC,UAAU,CAAC,CAAC;AAC9C,KAAC,CAAC;AACJ,CAAC;AAED,eAAe,cAAc,CAAC,MAAgB,EAAA;IAC5C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC;KACzD;AACH;;;;"}
|
|
@@ -11,6 +11,7 @@ var getSessionTokenHeader = require('../../helpers/get-session-token-header.js')
|
|
|
11
11
|
var triggerAfterAuthHook = require('../helpers/trigger-after-auth-hook.js');
|
|
12
12
|
var validateShopAndHostParams = require('../helpers/validate-shop-and-host-params.js');
|
|
13
13
|
require('isbot');
|
|
14
|
+
require('../../../types.js');
|
|
14
15
|
|
|
15
16
|
class AuthCodeFlowStrategy {
|
|
16
17
|
api;
|
|
@@ -135,6 +136,10 @@ class AuthCodeFlowStrategy {
|
|
|
135
136
|
logger.info('Requesting online access token for offline session');
|
|
136
137
|
await beginAuth.beginAuth({ api, config, logger }, request, true, shop);
|
|
137
138
|
}
|
|
139
|
+
logger.debug('Request is valid, loaded session from OAuth callback', {
|
|
140
|
+
shop: session.shop,
|
|
141
|
+
isOnline: session.isOnline,
|
|
142
|
+
});
|
|
138
143
|
await triggerAfterAuthHook.triggerAfterAuthHook({ api, config, logger }, session, request, this);
|
|
139
144
|
throw await redirectToShopifyOrAppRoot.redirectToShopifyOrAppRoot(request, { api, config, logger }, responseHeaders);
|
|
140
145
|
}
|