@shopify/shopify-app-remix 3.1.0 → 3.2.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/README.md +56 -12
- package/dist/cjs/server/authenticate/admin/helpers/redirect.js +21 -5
- package/dist/cjs/server/authenticate/admin/helpers/redirect.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/scope/client/fetch-scopes-details.js +26 -0
- package/dist/cjs/server/authenticate/admin/scope/client/fetch-scopes-details.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/scope/query.js +13 -21
- package/dist/cjs/server/authenticate/admin/scope/query.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/scope/request.js +4 -7
- package/dist/cjs/server/authenticate/admin/scope/request.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/scope/revoke.js +5 -3
- package/dist/cjs/server/authenticate/admin/scope/revoke.js.map +1 -1
- package/dist/cjs/server/shopify-app.js +5 -1
- package/dist/cjs/server/shopify-app.js.map +1 -1
- package/dist/cjs/server/test-helpers/index.js +8 -0
- package/dist/cjs/server/test-helpers/index.js.map +1 -0
- package/dist/cjs/server/test-helpers/test-config.js +33 -0
- package/dist/cjs/server/test-helpers/test-config.js.map +1 -0
- package/dist/cjs/server/version.js +1 -1
- package/dist/cjs/session-storage/shopify-app-session-storage-memory/dist/esm/memory.js +29 -0
- package/dist/cjs/session-storage/shopify-app-session-storage-memory/dist/esm/memory.js.map +1 -0
- package/dist/esm/server/authenticate/admin/helpers/redirect.mjs +21 -5
- package/dist/esm/server/authenticate/admin/helpers/redirect.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/scope/client/fetch-scopes-details.mjs +24 -0
- package/dist/esm/server/authenticate/admin/scope/client/fetch-scopes-details.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/scope/query.mjs +13 -21
- package/dist/esm/server/authenticate/admin/scope/query.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/scope/request.mjs +4 -7
- package/dist/esm/server/authenticate/admin/scope/request.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/scope/revoke.mjs +6 -4
- package/dist/esm/server/authenticate/admin/scope/revoke.mjs.map +1 -1
- package/dist/esm/server/shopify-app.mjs +5 -1
- package/dist/esm/server/shopify-app.mjs.map +1 -1
- package/dist/esm/server/test-helpers/index.mjs +2 -0
- package/dist/esm/server/test-helpers/index.mjs.map +1 -0
- package/dist/esm/server/test-helpers/test-config.mjs +31 -0
- package/dist/esm/server/test-helpers/test-config.mjs.map +1 -0
- package/dist/esm/server/version.mjs +1 -1
- package/dist/esm/session-storage/shopify-app-session-storage-memory/dist/esm/memory.mjs +27 -0
- package/dist/esm/session-storage/shopify-app-session-storage-memory/dist/esm/memory.mjs.map +1 -0
- package/dist/ts/server/authenticate/admin/helpers/redirect.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/scope/client/{fetch-scopes-information.d.ts → fetch-scopes-details.d.ts} +3 -3
- package/dist/ts/server/authenticate/admin/scope/client/fetch-scopes-details.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/scope/query.d.ts +4 -4
- package/dist/ts/server/authenticate/admin/scope/query.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/scope/request.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/scope/revoke.d.ts +3 -1
- package/dist/ts/server/authenticate/admin/scope/revoke.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/scope/types.d.ts +6 -9
- package/dist/ts/server/authenticate/admin/scope/types.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/types.d.ts +1 -1
- package/dist/ts/server/authenticate/admin/types.d.ts.map +1 -1
- package/dist/ts/server/index.d.ts +2 -1
- package/dist/ts/server/index.d.ts.map +1 -1
- package/dist/ts/server/shopify-app.d.ts.map +1 -1
- package/dist/ts/server/test-helpers/index.d.ts +2 -0
- package/dist/ts/server/test-helpers/index.d.ts.map +1 -0
- package/dist/ts/server/test-helpers/test-config.d.ts +36 -0
- package/dist/ts/server/test-helpers/test-config.d.ts.map +1 -0
- package/dist/ts/server/types-contexts.d.ts +4 -1
- package/dist/ts/server/types-contexts.d.ts.map +1 -1
- package/dist/ts/server/types.d.ts +1 -1
- package/dist/ts/server/types.d.ts.map +1 -1
- package/dist/ts/server/version.d.ts +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +32 -27
- package/dist/cjs/server/authenticate/admin/scope/client/fetch-scopes-information.js +0 -23
- package/dist/cjs/server/authenticate/admin/scope/client/fetch-scopes-information.js.map +0 -1
- package/dist/esm/server/authenticate/admin/scope/client/fetch-scopes-information.mjs +0 -21
- package/dist/esm/server/authenticate/admin/scope/client/fetch-scopes-information.mjs.map +0 -1
- package/dist/ts/server/authenticate/admin/scope/client/fetch-scopes-information.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -189,7 +189,7 @@ to handle automatic app installations and scope updates, while utilizing
|
|
|
189
189
|
[token exchange](https://shopify.dev/docs/apps/auth/get-access-tokens/token-exchange) to retrieve an access token for
|
|
190
190
|
authenticated API access.
|
|
191
191
|
|
|
192
|
-
|
|
192
|
+
#### Enabling this new strategy in your app
|
|
193
193
|
|
|
194
194
|
> [!NOTE]
|
|
195
195
|
> Newly created Remix apps from the template after February 1st 2024 has this feature enabled by default.
|
|
@@ -198,25 +198,69 @@ authenticated API access.
|
|
|
198
198
|
by configuring your scopes [through the Shopify CLI](https://shopify.dev/docs/apps/tools/cli/configuration).
|
|
199
199
|
2. Enable the future flag `unstable_newEmbeddedAuthStrategy` in your app's server configuration file.
|
|
200
200
|
|
|
201
|
+
```ts
|
|
202
|
+
// my-app/app/shopify.server.ts
|
|
203
|
+
const shopify = shopifyApp({
|
|
204
|
+
...
|
|
205
|
+
isEmbeddedApp: true,
|
|
206
|
+
future: {
|
|
207
|
+
unstable_newEmbeddedAuthStrategy: true,
|
|
208
|
+
}
|
|
209
|
+
})
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
3. Enjoy a smoother and faster app installation process.
|
|
213
|
+
|
|
214
|
+
##### Learn more about
|
|
215
|
+
|
|
216
|
+
- [How token exchange works](https://shopify.dev/docs/apps/auth/get-access-tokens/token-exchange)
|
|
217
|
+
- [Using Shopify managed installation](https://shopify.dev/docs/apps/auth/installation#shopify-managed-installation)
|
|
218
|
+
- [Configuring access scopes through the Shopify CLI](https://shopify.dev/docs/apps/tools/cli/configuration)
|
|
219
|
+
|
|
220
|
+
### Testing your app
|
|
221
|
+
|
|
222
|
+
This package exports a helper method through `@shopify/shopify-app-remix/test-helpers` to simplify testing: `testConfig()`. This method can be used to pass dummy configuration properties to `shopifyApp()`.
|
|
223
|
+
|
|
224
|
+
If your testing framework supports setting environment variables, we recommend using an environment variable, for example "SHOPIFY_TESTING" to replace your default config with the config returned from `testConfig()`.
|
|
225
|
+
|
|
201
226
|
```ts
|
|
202
227
|
// my-app/app/shopify.server.ts
|
|
203
|
-
|
|
228
|
+
import { testConfig } from "@shopify/shopify-app-remix/test-helpers";
|
|
229
|
+
...
|
|
230
|
+
const config = {
|
|
204
231
|
...
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
if (process.env.SHOPIFY_TESTING) {
|
|
235
|
+
Object.assign(config, testConfig());
|
|
236
|
+
}
|
|
210
237
|
|
|
238
|
+
const shopify = shopifyApp(config);
|
|
239
|
+
...
|
|
211
240
|
```
|
|
212
241
|
|
|
213
|
-
|
|
242
|
+
`testConfig()` accepts a config object as an optional parameter. The config values provided override the default config values returned by `testConfig()`. This is especially useful for end-to-end testing to ensure `shopifyApp()` reads the sessions from the development database.
|
|
214
243
|
|
|
215
|
-
|
|
244
|
+
```ts
|
|
245
|
+
// my-app/app/shopify.server.ts
|
|
246
|
+
import { testConfig } from "@shopify/shopify-app-remix/test-helpers";
|
|
247
|
+
...
|
|
248
|
+
const sessionStorage = new PrismaSessionStorage(prisma);
|
|
249
|
+
const config = {
|
|
250
|
+
...
|
|
251
|
+
sessionStorage,
|
|
252
|
+
...
|
|
253
|
+
};
|
|
216
254
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
255
|
+
if (process.env.SHOPIFY_TESTING) {
|
|
256
|
+
Object.assign(config, testConfig());
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (process.env.SHOPIFY_TESTING === "e2e") {
|
|
260
|
+
Object.assign(config, testConfig({ sessionStorage }));
|
|
261
|
+
}
|
|
262
|
+
...
|
|
263
|
+
```
|
|
220
264
|
|
|
221
265
|
## Gotchas / Troubleshooting
|
|
222
266
|
|
|
@@ -9,7 +9,13 @@ function redirectFactory(params, request, shop) {
|
|
|
9
9
|
const { config, logger } = params;
|
|
10
10
|
return function redirect(url, init) {
|
|
11
11
|
const { searchParams } = new URL(request.url);
|
|
12
|
-
const parsedUrl = parseURL(
|
|
12
|
+
const { url: parsedUrl, target } = parseURL({
|
|
13
|
+
params,
|
|
14
|
+
url,
|
|
15
|
+
base: config.appUrl,
|
|
16
|
+
shop,
|
|
17
|
+
init,
|
|
18
|
+
});
|
|
13
19
|
logger.debug('Redirecting', { url: parsedUrl.toString() });
|
|
14
20
|
const isSameOrigin = parsedUrl.origin === config.appUrl;
|
|
15
21
|
if (isSameOrigin || url.startsWith('/')) {
|
|
@@ -19,7 +25,6 @@ function redirectFactory(params, request, shop) {
|
|
|
19
25
|
}
|
|
20
26
|
});
|
|
21
27
|
}
|
|
22
|
-
const target = (typeof init !== 'number' && init?.target) || '_self';
|
|
23
28
|
if (target === '_self') {
|
|
24
29
|
if (isBounceRequest(request)) {
|
|
25
30
|
throw renderAppBridge.renderAppBridge(params, request, {
|
|
@@ -58,14 +63,25 @@ function isEmbeddedRequest(request) {
|
|
|
58
63
|
const { searchParams } = new URL(request.url);
|
|
59
64
|
return searchParams.get('embedded') === '1';
|
|
60
65
|
}
|
|
61
|
-
function parseURL(
|
|
66
|
+
function parseURL({ params, base, init, shop, url }) {
|
|
67
|
+
let target = typeof init !== 'number' && init?.target ? init.target : undefined;
|
|
62
68
|
if (isAdminRemotePath(url)) {
|
|
69
|
+
const { config } = params;
|
|
63
70
|
const adminPath = getAdminRemotePath(url);
|
|
64
71
|
const cleanShopName = shop.replace('.myshopify.com', '');
|
|
65
|
-
|
|
72
|
+
if (!target) {
|
|
73
|
+
target = config.isEmbeddedApp ? '_parent' : '_self';
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
url: new URL(`https://admin.shopify.com/store/${cleanShopName}${adminPath}`),
|
|
77
|
+
target,
|
|
78
|
+
};
|
|
66
79
|
}
|
|
67
80
|
else {
|
|
68
|
-
return
|
|
81
|
+
return {
|
|
82
|
+
url: new URL(url, base),
|
|
83
|
+
target: target ?? '_self',
|
|
84
|
+
};
|
|
69
85
|
}
|
|
70
86
|
}
|
|
71
87
|
const ADMIN_REGEX = /^shopify:\/*admin\//i;
|
|
@@ -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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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const FETCH_SCOPES_DETAIL_QUERY = `#graphql
|
|
4
|
+
query FetchAccessScopes{
|
|
5
|
+
app {
|
|
6
|
+
requestedAccessScopes {
|
|
7
|
+
handle
|
|
8
|
+
}
|
|
9
|
+
optionalAccessScopes {
|
|
10
|
+
handle
|
|
11
|
+
}
|
|
12
|
+
installation {
|
|
13
|
+
accessScopes {
|
|
14
|
+
handle
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}`;
|
|
19
|
+
async function fetchScopeDetail(admin) {
|
|
20
|
+
const fetchScopeDetailResult = await admin.graphql(FETCH_SCOPES_DETAIL_QUERY);
|
|
21
|
+
const resultContent = await fetchScopeDetailResult.json();
|
|
22
|
+
return resultContent.data;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
exports.fetchScopeDetail = fetchScopeDetail;
|
|
26
|
+
//# sourceMappingURL=fetch-scopes-details.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-scopes-details.js","sources":["../../../../../../../../src/server/authenticate/admin/scope/client/fetch-scopes-details.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAkBA,MAAM,yBAAyB,GAAG,CAAA;;;;;;;;;;;;;;;EAehC,CAAC;AAEI,eAAe,gBAAgB,CACpC,KAAsB,EAAA;IAEtB,MAAM,sBAAsB,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAE9E,IAAA,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,CAAC;IAC1D,OAAO,aAAa,CAAC,IAAI,CAAC;AAC5B;;;;"}
|
|
@@ -1,38 +1,30 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var shopifyApi = require('@shopify/shopify-api');
|
|
4
|
-
var
|
|
4
|
+
var fetchScopesDetails = require('./client/fetch-scopes-details.js');
|
|
5
5
|
|
|
6
6
|
function queryScopesFactory(params, session, admin) {
|
|
7
7
|
return async function queryScopes() {
|
|
8
8
|
const { logger } = params;
|
|
9
|
-
logger.debug('
|
|
9
|
+
logger.debug('Querying scopes details: ', {
|
|
10
10
|
shop: session.shop,
|
|
11
11
|
});
|
|
12
|
-
const
|
|
13
|
-
return
|
|
12
|
+
const scopesDetail = await fetchScopesDetails.fetchScopeDetail(admin);
|
|
13
|
+
return mapFetchScopeDetail(scopesDetail);
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
function
|
|
17
|
-
const appInformation =
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
.filter((scope) => declaredRequired.has(scope));
|
|
22
|
-
const grantedOptional = appInformation.installation.accessScopes
|
|
23
|
-
.map((scope) => scope.handle)
|
|
24
|
-
.filter((scope) => !declaredRequired.has(scope));
|
|
16
|
+
function mapFetchScopeDetail(scopesDetailResponse) {
|
|
17
|
+
const appInformation = scopesDetailResponse.app;
|
|
18
|
+
const granted = new shopifyApi.AuthScopes(appInformation.installation.accessScopes.map((scope) => scope.handle));
|
|
19
|
+
const required = new shopifyApi.AuthScopes(appInformation.requestedAccessScopes.map((scope) => scope.handle));
|
|
20
|
+
const optional = new shopifyApi.AuthScopes(appInformation.optionalAccessScopes.map((scope) => scope.handle));
|
|
25
21
|
return {
|
|
26
|
-
granted:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
},
|
|
30
|
-
declared: {
|
|
31
|
-
required: declaredRequired.toArray(),
|
|
32
|
-
},
|
|
22
|
+
granted: granted.toArray(),
|
|
23
|
+
required: required.toArray(),
|
|
24
|
+
optional: optional.toArray(),
|
|
33
25
|
};
|
|
34
26
|
}
|
|
35
27
|
|
|
36
|
-
exports.
|
|
28
|
+
exports.mapFetchScopeDetail = mapFetchScopeDetail;
|
|
37
29
|
exports.queryScopesFactory = queryScopesFactory;
|
|
38
30
|
//# sourceMappingURL=query.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sources":["../../../../../../../src/server/authenticate/admin/scope/query.ts"],"sourcesContent":[null],"names":["
|
|
1
|
+
{"version":3,"file":"query.js","sources":["../../../../../../../src/server/authenticate/admin/scope/query.ts"],"sourcesContent":[null],"names":["fetchScopeDetail","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,2BAA2B,EAAE;YACxC,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,YAAY,GAAG,MAAMA,mCAAgB,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,OAAO,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAC3C,KAAC,CAAC;AACJ,CAAC;AAEK,SAAU,mBAAmB,CACjC,oBAA+C,EAAA;AAE/C,IAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC;IAEhD,MAAM,OAAO,GAAG,IAAIC,qBAAU,CAC5B,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CACtE,CAAC;IACF,MAAM,QAAQ,GAAG,IAAIA,qBAAU,CAC7B,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAClE,CAAC;IACF,MAAM,QAAQ,GAAG,IAAIA,qBAAU,CAC7B,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CACjE,CAAC;IAEF,OAAO;AACL,QAAA,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;AAC1B,QAAA,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE;AAC5B,QAAA,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE;KAC7B,CAAC;AACJ;;;;;"}
|
|
@@ -2,15 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
var shopifyApi = require('@shopify/shopify-api');
|
|
4
4
|
var redirectToInstallPage = require('../helpers/redirect-to-install-page.js');
|
|
5
|
-
var
|
|
5
|
+
var fetchScopesDetails = require('./client/fetch-scopes-details.js');
|
|
6
6
|
|
|
7
7
|
function requestScopesFactory(params, session, admin) {
|
|
8
8
|
return async function requestScopes(scopes) {
|
|
9
9
|
const { logger } = params;
|
|
10
|
-
logger.debug('
|
|
11
|
-
shop: session.shop,
|
|
12
|
-
...{ scopes },
|
|
13
|
-
});
|
|
10
|
+
logger.debug('Requesting optional scopes: ', { shop: session.shop, scopes });
|
|
14
11
|
if (scopes.length === 0)
|
|
15
12
|
return;
|
|
16
13
|
if (await alreadyGranted(scopes, admin))
|
|
@@ -18,8 +15,8 @@ function requestScopesFactory(params, session, admin) {
|
|
|
18
15
|
throw await redirectToInstallPage.redirectToInstallPage(params, session.shop, scopes);
|
|
19
16
|
};
|
|
20
17
|
async function alreadyGranted(scopes, admin) {
|
|
21
|
-
const
|
|
22
|
-
const grantedScopes =
|
|
18
|
+
const scopesDetail = await fetchScopesDetails.fetchScopeDetail(admin);
|
|
19
|
+
const grantedScopes = scopesDetail.app.installation.accessScopes.map((scope) => scope.handle);
|
|
23
20
|
return new shopifyApi.AuthScopes(grantedScopes).has(scopes);
|
|
24
21
|
}
|
|
25
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sources":["../../../../../../../src/server/authenticate/admin/scope/request.ts"],"sourcesContent":[null],"names":["redirectToInstallPage","
|
|
1
|
+
{"version":3,"file":"request.js","sources":["../../../../../../../src/server/authenticate/admin/scope/request.ts"],"sourcesContent":[null],"names":["redirectToInstallPage","fetchScopeDetail","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,8BAA8B,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC;AAE3E,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,YAAY,GAAG,MAAMC,mCAAgB,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAClE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CACxB,CAAC;QACF,OAAO,IAAIC,qBAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAClD;AACH;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var revokeScopes = require('./client/revoke-scopes.js');
|
|
4
|
-
var
|
|
4
|
+
var fetchScopesDetails = require('./client/fetch-scopes-details.js');
|
|
5
5
|
var query = require('./query.js');
|
|
6
6
|
|
|
7
7
|
function revokeScopesFactory(params, session, admin) {
|
|
@@ -25,8 +25,10 @@ function revokeScopesFactory(params, session, admin) {
|
|
|
25
25
|
},
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
|
-
const
|
|
29
|
-
return
|
|
28
|
+
const scopesDetail = await fetchScopesDetails.fetchScopeDetail(admin);
|
|
29
|
+
return {
|
|
30
|
+
detail: query.mapFetchScopeDetail(scopesDetail),
|
|
31
|
+
};
|
|
30
32
|
};
|
|
31
33
|
}
|
|
32
34
|
async function validateScopes(scopes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revoke.js","sources":["../../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"sourcesContent":[null],"names":["revokeScopes","
|
|
1
|
+
{"version":3,"file":"revoke.js","sources":["../../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"sourcesContent":[null],"names":["revokeScopes","fetchScopeDetail","mapFetchScopeDetail"],"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,YAAY,GAAG,MAAMC,mCAAgB,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO;AACL,YAAA,MAAM,EAAEC,yBAAmB,CAAC,YAAY,CAAC;SAC1C,CAAC;AACJ,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;;;;"}
|
|
@@ -104,7 +104,11 @@ function deriveApi(appConfig) {
|
|
|
104
104
|
appUrl = new URL(appConfig.appUrl);
|
|
105
105
|
}
|
|
106
106
|
catch (error) {
|
|
107
|
-
|
|
107
|
+
const message = appConfig.appUrl === ''
|
|
108
|
+
? `Detected an empty appUrl configuration, please make sure to set the necessary environment variables.\n` +
|
|
109
|
+
`If you're deploying your app, you can find more information at https://shopify.dev/docs/apps/launch/deployment/deploy-web-app/deploy-to-hosting-service#step-4-set-up-environment-variables`
|
|
110
|
+
: `Invalid appUrl configuration '${appConfig.appUrl}', please provide a valid URL.`;
|
|
111
|
+
throw new shopifyApi.ShopifyError(message);
|
|
108
112
|
}
|
|
109
113
|
/* eslint-disable no-process-env */
|
|
110
114
|
if (appUrl.hostname === 'localhost' && !appUrl.port && process.env.PORT) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify-app.js","sources":["../../../../src/server/shopify-app.ts"],"sourcesContent":[null],"names":["overrideLogger","AppDistribution","MerchantCustomAuth","TokenExchangeStrategy","AuthCodeFlowStrategy","authStrategyFactory","addDocumentResponseHeadersFactory","registerWebhooksFactory","authenticateFlowFactory","authenticatePublicFactory","authenticateFulfillmentServiceFactory","authenticateWebhookFactory","unauthenticatedAdminContextFactory","unauthenticatedStorefrontContextFactory","loginFactory","logDisabledFutureFlags","ShopifyError","SHOPIFY_REMIX_LIBRARY_VERSION","shopifyApi","LATEST_API_VERSION","IdempotentPromiseHandler"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shopify-app.js","sources":["../../../../src/server/shopify-app.ts"],"sourcesContent":[null],"names":["overrideLogger","AppDistribution","MerchantCustomAuth","TokenExchangeStrategy","AuthCodeFlowStrategy","authStrategyFactory","addDocumentResponseHeadersFactory","registerWebhooksFactory","authenticateFlowFactory","authenticatePublicFactory","authenticateFulfillmentServiceFactory","authenticateWebhookFactory","unauthenticatedAdminContextFactory","unauthenticatedStorefrontContextFactory","loginFactory","logDisabledFutureFlags","ShopifyError","SHOPIFY_REMIX_LIBRARY_VERSION","shopifyApi","LATEST_API_VERSION","IdempotentPromiseHandler"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var shopifyApi = require('@shopify/shopify-api');
|
|
4
|
+
var memory = require('../../session-storage/shopify-app-session-storage-memory/dist/esm/memory.js');
|
|
5
|
+
var testHelpers = require('@shopify/shopify-api/test-helpers');
|
|
6
|
+
|
|
7
|
+
const TEST_CONFIG = {
|
|
8
|
+
apiKey: testHelpers.API_KEY,
|
|
9
|
+
apiSecretKey: testHelpers.API_SECRET_KEY,
|
|
10
|
+
scopes: ['testScope'],
|
|
11
|
+
appUrl: testHelpers.APP_URL,
|
|
12
|
+
adminApiAccessToken: testHelpers.API_KEY,
|
|
13
|
+
privateAppStorefrontAccessToken: testHelpers.API_KEY,
|
|
14
|
+
logger: {
|
|
15
|
+
level: shopifyApi.LogSeverity.Debug,
|
|
16
|
+
},
|
|
17
|
+
sessionStorage: new memory.MemorySessionStorage(),
|
|
18
|
+
isTesting: true,
|
|
19
|
+
};
|
|
20
|
+
function testConfig({ future, ...overrides } = {}) {
|
|
21
|
+
return {
|
|
22
|
+
...TEST_CONFIG,
|
|
23
|
+
...overrides,
|
|
24
|
+
logger: {
|
|
25
|
+
...TEST_CONFIG.logger,
|
|
26
|
+
...overrides.logger,
|
|
27
|
+
},
|
|
28
|
+
future,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
exports.testConfig = testConfig;
|
|
33
|
+
//# sourceMappingURL=test-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-config.js","sources":["../../../../../src/server/test-helpers/test-config.ts"],"sourcesContent":[null],"names":["API_KEY","API_SECRET_KEY","APP_URL","LogSeverity","MemorySessionStorage"],"mappings":";;;;;;AAYA,MAAM,WAAW,GAAG;AAClB,IAAA,MAAM,EAAEA,mBAAO;AACf,IAAA,YAAY,EAAEC,0BAAc;IAC5B,MAAM,EAAE,CAAC,WAAW,CAAQ;AAC5B,IAAA,MAAM,EAAEC,mBAAO;AACf,IAAA,mBAAmB,EAAEF,mBAAO;AAC5B,IAAA,+BAA+B,EAAEA,mBAAO;AACxC,IAAA,MAAM,EAAE;QACN,KAAK,EAAEG,sBAAW,CAAC,KAAK;AACzB,KAAA;IACD,cAAc,EAAE,IAAIC,2BAAoB,EAAE;AAC1C,IAAA,SAAS,EAAE,IAAI;CACP,CAAC;AAEL,SAAU,UAAU,CAIxB,EAAC,MAAM,EAAE,GAAG,SAAS,EAAA,GAAmC,EAEvD,EAAA;IAED,OAAO;AACL,QAAA,GAAG,WAAW;AACd,QAAA,GAAG,SAAS;AACZ,QAAA,MAAM,EAAE;YACN,GAAG,WAAW,CAAC,MAAM;YACrB,GAAI,SAAoC,CAAC,MAAM;AAChD,SAAA;QACD,MAAM;KACA,CAAC;AACX;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
class MemorySessionStorage {
|
|
4
|
+
sessions = {};
|
|
5
|
+
async storeSession(session) {
|
|
6
|
+
this.sessions[session.id] = session;
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
async loadSession(id) {
|
|
10
|
+
return this.sessions[id] || undefined;
|
|
11
|
+
}
|
|
12
|
+
async deleteSession(id) {
|
|
13
|
+
if (this.sessions[id]) {
|
|
14
|
+
delete this.sessions[id];
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
async deleteSessions(ids) {
|
|
19
|
+
ids.forEach((id) => delete this.sessions[id]);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
async findSessionsByShop(shop) {
|
|
23
|
+
const results = Object.values(this.sessions).filter((session) => session.shop === shop);
|
|
24
|
+
return results;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
exports.MemorySessionStorage = MemorySessionStorage;
|
|
29
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sources":["../../../../../../../session-storage/shopify-app-session-storage-memory/dist/esm/memory.mjs"],"sourcesContent":["class MemorySessionStorage {\n sessions = {};\n async storeSession(session) {\n this.sessions[session.id] = session;\n return true;\n }\n async loadSession(id) {\n return this.sessions[id] || undefined;\n }\n async deleteSession(id) {\n if (this.sessions[id]) {\n delete this.sessions[id];\n }\n return true;\n }\n async deleteSessions(ids) {\n ids.forEach((id) => delete this.sessions[id]);\n return true;\n }\n async findSessionsByShop(shop) {\n const results = Object.values(this.sessions).filter((session) => session.shop === shop);\n return results;\n }\n}\n\nexport { MemorySessionStorage };\n//# sourceMappingURL=memory.mjs.map\n"],"names":[],"mappings":";;AAAA,MAAM,oBAAoB,CAAC;AAC3B,IAAI,QAAQ,GAAG,EAAE,CAAC;AAClB,IAAI,MAAM,YAAY,CAAC,OAAO,EAAE;AAChC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;AAC5C,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,WAAW,CAAC,EAAE,EAAE;AAC1B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC;AAC9C,KAAK;AACL,IAAI,MAAM,aAAa,CAAC,EAAE,EAAE;AAC5B,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC/B,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,cAAc,CAAC,GAAG,EAAE;AAC9B,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,kBAAkB,CAAC,IAAI,EAAE;AACnC,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChG,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL;;;;"}
|
|
@@ -7,7 +7,13 @@ function redirectFactory(params, request, shop) {
|
|
|
7
7
|
const { config, logger } = params;
|
|
8
8
|
return function redirect$1(url, init) {
|
|
9
9
|
const { searchParams } = new URL(request.url);
|
|
10
|
-
const parsedUrl = parseURL(
|
|
10
|
+
const { url: parsedUrl, target } = parseURL({
|
|
11
|
+
params,
|
|
12
|
+
url,
|
|
13
|
+
base: config.appUrl,
|
|
14
|
+
shop,
|
|
15
|
+
init,
|
|
16
|
+
});
|
|
11
17
|
logger.debug('Redirecting', { url: parsedUrl.toString() });
|
|
12
18
|
const isSameOrigin = parsedUrl.origin === config.appUrl;
|
|
13
19
|
if (isSameOrigin || url.startsWith('/')) {
|
|
@@ -17,7 +23,6 @@ function redirectFactory(params, request, shop) {
|
|
|
17
23
|
}
|
|
18
24
|
});
|
|
19
25
|
}
|
|
20
|
-
const target = (typeof init !== 'number' && init?.target) || '_self';
|
|
21
26
|
if (target === '_self') {
|
|
22
27
|
if (isBounceRequest(request)) {
|
|
23
28
|
throw renderAppBridge(params, request, {
|
|
@@ -56,14 +61,25 @@ function isEmbeddedRequest(request) {
|
|
|
56
61
|
const { searchParams } = new URL(request.url);
|
|
57
62
|
return searchParams.get('embedded') === '1';
|
|
58
63
|
}
|
|
59
|
-
function parseURL(
|
|
64
|
+
function parseURL({ params, base, init, shop, url }) {
|
|
65
|
+
let target = typeof init !== 'number' && init?.target ? init.target : undefined;
|
|
60
66
|
if (isAdminRemotePath(url)) {
|
|
67
|
+
const { config } = params;
|
|
61
68
|
const adminPath = getAdminRemotePath(url);
|
|
62
69
|
const cleanShopName = shop.replace('.myshopify.com', '');
|
|
63
|
-
|
|
70
|
+
if (!target) {
|
|
71
|
+
target = config.isEmbeddedApp ? '_parent' : '_self';
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
url: new URL(`https://admin.shopify.com/store/${cleanShopName}${adminPath}`),
|
|
75
|
+
target,
|
|
76
|
+
};
|
|
64
77
|
}
|
|
65
78
|
else {
|
|
66
|
-
return
|
|
79
|
+
return {
|
|
80
|
+
url: new URL(url, base),
|
|
81
|
+
target: target ?? '_self',
|
|
82
|
+
};
|
|
67
83
|
}
|
|
68
84
|
}
|
|
69
85
|
const ADMIN_REGEX = /^shopify:\/*admin\//i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redirect.mjs","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect.ts"],"sourcesContent":[null],"names":["redirect","remixRedirect"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"redirect.mjs","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect.ts"],"sourcesContent":[null],"names":["redirect","remixRedirect"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const FETCH_SCOPES_DETAIL_QUERY = `#graphql
|
|
2
|
+
query FetchAccessScopes{
|
|
3
|
+
app {
|
|
4
|
+
requestedAccessScopes {
|
|
5
|
+
handle
|
|
6
|
+
}
|
|
7
|
+
optionalAccessScopes {
|
|
8
|
+
handle
|
|
9
|
+
}
|
|
10
|
+
installation {
|
|
11
|
+
accessScopes {
|
|
12
|
+
handle
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}`;
|
|
17
|
+
async function fetchScopeDetail(admin) {
|
|
18
|
+
const fetchScopeDetailResult = await admin.graphql(FETCH_SCOPES_DETAIL_QUERY);
|
|
19
|
+
const resultContent = await fetchScopeDetailResult.json();
|
|
20
|
+
return resultContent.data;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { fetchScopeDetail };
|
|
24
|
+
//# sourceMappingURL=fetch-scopes-details.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-scopes-details.mjs","sources":["../../../../../../../../src/server/authenticate/admin/scope/client/fetch-scopes-details.ts"],"sourcesContent":[null],"names":[],"mappings":"AAkBA,MAAM,yBAAyB,GAAG,CAAA;;;;;;;;;;;;;;;EAehC,CAAC;AAEI,eAAe,gBAAgB,CACpC,KAAsB,EAAA;IAEtB,MAAM,sBAAsB,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAE9E,IAAA,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,CAAC;IAC1D,OAAO,aAAa,CAAC,IAAI,CAAC;AAC5B;;;;"}
|
|
@@ -1,35 +1,27 @@
|
|
|
1
1
|
import { AuthScopes } from '@shopify/shopify-api';
|
|
2
|
-
import {
|
|
2
|
+
import { fetchScopeDetail } from './client/fetch-scopes-details.mjs';
|
|
3
3
|
|
|
4
4
|
function queryScopesFactory(params, session, admin) {
|
|
5
5
|
return async function queryScopes() {
|
|
6
6
|
const { logger } = params;
|
|
7
|
-
logger.debug('
|
|
7
|
+
logger.debug('Querying scopes details: ', {
|
|
8
8
|
shop: session.shop,
|
|
9
9
|
});
|
|
10
|
-
const
|
|
11
|
-
return
|
|
10
|
+
const scopesDetail = await fetchScopeDetail(admin);
|
|
11
|
+
return mapFetchScopeDetail(scopesDetail);
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
-
function
|
|
15
|
-
const appInformation =
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
.filter((scope) => declaredRequired.has(scope));
|
|
20
|
-
const grantedOptional = appInformation.installation.accessScopes
|
|
21
|
-
.map((scope) => scope.handle)
|
|
22
|
-
.filter((scope) => !declaredRequired.has(scope));
|
|
14
|
+
function mapFetchScopeDetail(scopesDetailResponse) {
|
|
15
|
+
const appInformation = scopesDetailResponse.app;
|
|
16
|
+
const granted = new AuthScopes(appInformation.installation.accessScopes.map((scope) => scope.handle));
|
|
17
|
+
const required = new AuthScopes(appInformation.requestedAccessScopes.map((scope) => scope.handle));
|
|
18
|
+
const optional = new AuthScopes(appInformation.optionalAccessScopes.map((scope) => scope.handle));
|
|
23
19
|
return {
|
|
24
|
-
granted:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
},
|
|
28
|
-
declared: {
|
|
29
|
-
required: declaredRequired.toArray(),
|
|
30
|
-
},
|
|
20
|
+
granted: granted.toArray(),
|
|
21
|
+
required: required.toArray(),
|
|
22
|
+
optional: optional.toArray(),
|
|
31
23
|
};
|
|
32
24
|
}
|
|
33
25
|
|
|
34
|
-
export {
|
|
26
|
+
export { mapFetchScopeDetail, queryScopesFactory };
|
|
35
27
|
//# sourceMappingURL=query.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.mjs","sources":["../../../../../../../src/server/authenticate/admin/scope/query.ts"],"sourcesContent":[null],"names":[],"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,
|
|
1
|
+
{"version":3,"file":"query.mjs","sources":["../../../../../../../src/server/authenticate/admin/scope/query.ts"],"sourcesContent":[null],"names":[],"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,2BAA2B,EAAE;YACxC,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,OAAO,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAC3C,KAAC,CAAC;AACJ,CAAC;AAEK,SAAU,mBAAmB,CACjC,oBAA+C,EAAA;AAE/C,IAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC;IAEhD,MAAM,OAAO,GAAG,IAAI,UAAU,CAC5B,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CACtE,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,UAAU,CAC7B,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAClE,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,UAAU,CAC7B,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CACjE,CAAC;IAEF,OAAO;AACL,QAAA,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;AAC1B,QAAA,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE;AAC5B,QAAA,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE;KAC7B,CAAC;AACJ;;;;"}
|