@shopify/shopify-app-remix 2.4.0 → 2.5.1
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 +44 -0
- package/build/cjs/server/authenticate/admin/authenticate.js +2 -0
- package/build/cjs/server/authenticate/admin/billing/check.js +39 -0
- package/build/cjs/server/authenticate/admin/helpers/render-app-bridge.js +2 -1
- package/build/cjs/server/authenticate/admin/helpers/validate-redirect-url.js +45 -0
- package/build/cjs/server/authenticate/flow/authenticate.js +68 -0
- package/build/cjs/server/errors.js +9 -0
- package/build/cjs/server/index.js +2 -0
- package/build/cjs/server/shopify-app.js +8 -8
- package/build/cjs/server/types.js +4 -0
- package/build/cjs/server/unauthenticated/admin/factory.js +2 -2
- package/build/cjs/server/unauthenticated/storefront/factory.js +2 -2
- package/build/cjs/server/version.js +1 -1
- package/build/ts/server/__test-helpers/request-mock.js.map +1 -1
- package/build/ts/server/authenticate/admin/authenticate.d.ts.map +1 -1
- package/build/ts/server/authenticate/admin/authenticate.js +1 -0
- package/build/ts/server/authenticate/admin/authenticate.js.map +1 -1
- package/build/ts/server/authenticate/admin/billing/check.d.ts +6 -0
- package/build/ts/server/authenticate/admin/billing/check.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/billing/check.js +43 -0
- package/build/ts/server/authenticate/admin/billing/check.js.map +1 -0
- package/build/ts/server/authenticate/admin/billing/index.d.ts +1 -0
- package/build/ts/server/authenticate/admin/billing/index.d.ts.map +1 -1
- package/build/ts/server/authenticate/admin/billing/index.js +3 -1
- package/build/ts/server/authenticate/admin/billing/index.js.map +1 -1
- package/build/ts/server/authenticate/admin/billing/types.d.ts +59 -1
- package/build/ts/server/authenticate/admin/billing/types.d.ts.map +1 -1
- package/build/ts/server/authenticate/admin/helpers/render-app-bridge.d.ts.map +1 -1
- package/build/ts/server/authenticate/admin/helpers/render-app-bridge.js +2 -1
- package/build/ts/server/authenticate/admin/helpers/render-app-bridge.js.map +1 -1
- package/build/ts/server/authenticate/admin/helpers/validate-redirect-url.d.ts +8 -0
- package/build/ts/server/authenticate/admin/helpers/validate-redirect-url.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/validate-redirect-url.js +49 -0
- package/build/ts/server/authenticate/admin/helpers/validate-redirect-url.js.map +1 -0
- package/build/ts/server/authenticate/admin/strategies/auth-code-flow.js.map +1 -1
- package/build/ts/server/authenticate/flow/authenticate.d.ts +5 -0
- package/build/ts/server/authenticate/flow/authenticate.d.ts.map +1 -0
- package/build/ts/server/authenticate/flow/authenticate.flow.doc.d.ts +4 -0
- package/build/ts/server/authenticate/flow/authenticate.flow.doc.d.ts.map +1 -0
- package/build/ts/server/authenticate/flow/authenticate.flow.doc.js +33 -0
- package/build/ts/server/authenticate/flow/authenticate.flow.doc.js.map +1 -0
- package/build/ts/server/authenticate/flow/authenticate.js +67 -0
- package/build/ts/server/authenticate/flow/authenticate.js.map +1 -0
- package/build/ts/server/authenticate/flow/types.d.ts +82 -0
- package/build/ts/server/authenticate/flow/types.d.ts.map +1 -0
- package/build/ts/server/authenticate/flow/types.js +3 -0
- package/build/ts/server/authenticate/flow/types.js.map +1 -0
- package/build/ts/server/authenticate/webhooks/types.d.ts.map +1 -1
- package/build/ts/server/clients/admin/types.d.ts +12 -0
- package/build/ts/server/clients/admin/types.d.ts.map +1 -1
- package/build/ts/server/clients/types.d.ts +1 -3
- package/build/ts/server/clients/types.d.ts.map +1 -1
- package/build/ts/server/config-types.d.ts +1 -3
- package/build/ts/server/config-types.d.ts.map +1 -1
- package/build/ts/server/errors.d.ts +4 -0
- package/build/ts/server/errors.d.ts.map +1 -0
- package/build/ts/server/errors.js +14 -0
- package/build/ts/server/errors.js.map +1 -0
- package/build/ts/server/future/flags.d.ts +4 -1
- package/build/ts/server/future/flags.d.ts.map +1 -1
- package/build/ts/server/index.d.ts +1 -0
- package/build/ts/server/index.d.ts.map +1 -1
- package/build/ts/server/index.js +2 -0
- package/build/ts/server/index.js.map +1 -1
- package/build/ts/server/shopify-app.d.ts.map +1 -1
- package/build/ts/server/shopify-app.doc.d.ts.map +1 -1
- package/build/ts/server/shopify-app.doc.js +1 -0
- package/build/ts/server/shopify-app.doc.js.map +1 -1
- package/build/ts/server/shopify-app.js +4 -4
- package/build/ts/server/shopify-app.js.map +1 -1
- package/build/ts/server/types.d.ts +48 -11
- package/build/ts/server/types.d.ts.map +1 -1
- package/build/ts/server/types.js.map +1 -1
- package/build/ts/server/unauthenticated/admin/factory.d.ts.map +1 -1
- package/build/ts/server/unauthenticated/admin/factory.js +2 -2
- package/build/ts/server/unauthenticated/admin/factory.js.map +1 -1
- package/build/ts/server/unauthenticated/admin/types.d.ts +76 -0
- package/build/ts/server/unauthenticated/admin/types.d.ts.map +1 -1
- package/build/ts/server/unauthenticated/admin/unauthenticated.admin.doc.d.ts.map +1 -1
- package/build/ts/server/unauthenticated/admin/unauthenticated.admin.doc.js +2 -5
- package/build/ts/server/unauthenticated/admin/unauthenticated.admin.doc.js.map +1 -1
- package/build/ts/server/unauthenticated/storefront/factory.d.ts.map +1 -1
- package/build/ts/server/unauthenticated/storefront/factory.js +2 -2
- package/build/ts/server/unauthenticated/storefront/factory.js.map +1 -1
- package/build/ts/server/unauthenticated/storefront/unauthenticated.storefront.doc.d.ts.map +1 -1
- package/build/ts/server/unauthenticated/storefront/unauthenticated.storefront.doc.js +1 -4
- package/build/ts/server/unauthenticated/storefront/unauthenticated.storefront.doc.js.map +1 -1
- package/build/ts/server/version.d.ts +1 -1
- package/build/ts/server/version.js +1 -1
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -174,6 +174,50 @@ Here are some guides to help you set up your app:
|
|
|
174
174
|
You can also authenticate requests from surfaces other than the admin.
|
|
175
175
|
To see all supported methods, see [the `shopify.authenticate` object documentation](https://shopify.dev/docs/api/shopify-app-remix/latest/authenticate).
|
|
176
176
|
|
|
177
|
+
### New embedded app authorization strategy
|
|
178
|
+
|
|
179
|
+
> [!TIP]
|
|
180
|
+
> If you are building an embedded app, we **strongly** recommend using [Shopify managed installation](https://shopify.dev/docs/apps/auth/installation#shopify-managed-installation)
|
|
181
|
+
> with [token exchange](https://shopify.dev/docs/apps/auth/get-access-tokens/token-exchange) instead of the legacy authorization code grant flow.
|
|
182
|
+
|
|
183
|
+
We've introduced a new installation and authorization strategy for **embedded apps** that
|
|
184
|
+
eliminates the redirects that were previously necessary.
|
|
185
|
+
It replaces the existing [installation and authorization code grant flow](https://shopify.dev/docs/apps/auth/get-access-tokens/authorization-code-grant).
|
|
186
|
+
|
|
187
|
+
This is achieved by using [Shopify managed installation](https://shopify.dev/docs/apps/auth/installation#shopify-managed-installation)
|
|
188
|
+
to handle automatic app installations and scope updates, while utilizing
|
|
189
|
+
[token exchange](https://shopify.dev/docs/apps/auth/get-access-tokens/token-exchange) to retrieve an access token for
|
|
190
|
+
authenticated API access.
|
|
191
|
+
|
|
192
|
+
##### Enabling this new strategy in your app
|
|
193
|
+
|
|
194
|
+
> [!NOTE]
|
|
195
|
+
> Newly created Remix apps from the template after February 1st 2024 has this feature enabled by default.
|
|
196
|
+
|
|
197
|
+
1. Enable [Shopify managed installation](https://shopify.dev/docs/apps/auth/installation#shopify-managed-installation)
|
|
198
|
+
by configuring your scopes [through the Shopify CLI](https://shopify.dev/docs/apps/tools/cli/configuration).
|
|
199
|
+
2. Enable the future flag `unstable_newEmbeddedAuthStrategy` in your app's server configuration file.
|
|
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
|
+
|
|
213
|
+
3. Enjoy a smoother and faster app installation process.
|
|
214
|
+
|
|
215
|
+
###### Learn more about:
|
|
216
|
+
|
|
217
|
+
- [How token exchange works](https://shopify.dev/docs/apps/auth/get-access-tokens/token-exchange)
|
|
218
|
+
- [Using Shopify managed installation](https://shopify.dev/docs/apps/auth/installation#shopify-managed-installation)
|
|
219
|
+
- [Configuring access scopes through the Shopify CLI](https://shopify.dev/docs/apps/tools/cli/configuration)
|
|
220
|
+
|
|
177
221
|
## Gotchas / Troubleshooting
|
|
178
222
|
|
|
179
223
|
If you're experiencing unexpected behaviors when using this package, check our [app template's documentation](https://github.com/Shopify/shopify-app-template-remix#gotchas--troubleshooting) for the solution to common issues.
|
|
@@ -11,6 +11,7 @@ require('@remix-run/server-runtime');
|
|
|
11
11
|
var cancel = require('./billing/cancel.js');
|
|
12
12
|
var require$1 = require('./billing/require.js');
|
|
13
13
|
var request = require('./billing/request.js');
|
|
14
|
+
var check = require('./billing/check.js');
|
|
14
15
|
var createAdminApiContext = require('./helpers/create-admin-api-context.js');
|
|
15
16
|
var ensureAppIsEmbeddedIfRequired = require('./helpers/ensure-app-is-embedded-if-required.js');
|
|
16
17
|
var ensureSessionTokenSearchParamIfRequired = require('./helpers/ensure-session-token-search-param-if-required.js');
|
|
@@ -60,6 +61,7 @@ function authStrategyFactory({
|
|
|
60
61
|
admin: createAdminApiContext.createAdminApiContext(session, params, authStrategy.handleClientError(request$1)),
|
|
61
62
|
billing: {
|
|
62
63
|
require: require$1.requireBillingFactory(params, request$1, session),
|
|
64
|
+
check: check.checkBillingFactory(params, request$1, session),
|
|
63
65
|
request: request.requestBillingFactory(params, request$1, session),
|
|
64
66
|
cancel: cancel.cancelBillingFactory(params, request$1, session)
|
|
65
67
|
},
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var shopifyApi = require('@shopify/shopify-api');
|
|
6
|
+
require('@remix-run/server-runtime');
|
|
7
|
+
var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
8
|
+
|
|
9
|
+
function checkBillingFactory(params, request, session) {
|
|
10
|
+
return async function checkBilling(options) {
|
|
11
|
+
const {
|
|
12
|
+
api,
|
|
13
|
+
logger
|
|
14
|
+
} = params;
|
|
15
|
+
logger.debug('Checking billing plans', {
|
|
16
|
+
shop: session.shop,
|
|
17
|
+
...options
|
|
18
|
+
});
|
|
19
|
+
try {
|
|
20
|
+
return await api.billing.check({
|
|
21
|
+
session,
|
|
22
|
+
plans: options.plans,
|
|
23
|
+
isTest: options.isTest,
|
|
24
|
+
returnObject: true
|
|
25
|
+
});
|
|
26
|
+
} catch (error) {
|
|
27
|
+
if (error instanceof shopifyApi.HttpResponseError && error.response.code === 401) {
|
|
28
|
+
logger.debug('API token was invalid, redirecting to OAuth', {
|
|
29
|
+
shop: session.shop
|
|
30
|
+
});
|
|
31
|
+
throw await redirectToAuthPage.redirectToAuthPage(params, request, session.shop);
|
|
32
|
+
} else {
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
exports.checkBillingFactory = checkBillingFactory;
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var appBridgeUrl = require('../../helpers/app-bridge-url.js');
|
|
6
6
|
var addResponseHeaders = require('../../helpers/add-response-headers.js');
|
|
7
|
+
var validateRedirectUrl = require('./validate-redirect-url.js');
|
|
7
8
|
|
|
8
9
|
function renderAppBridge({
|
|
9
10
|
config
|
|
@@ -11,7 +12,7 @@ function renderAppBridge({
|
|
|
11
12
|
let redirectToScript = '';
|
|
12
13
|
if (redirectTo) {
|
|
13
14
|
var _redirectTo$target;
|
|
14
|
-
const destination =
|
|
15
|
+
const destination = validateRedirectUrl.sanitizeRedirectUrl(config.appUrl, redirectTo.url);
|
|
15
16
|
const target = (_redirectTo$target = redirectTo.target) !== null && _redirectTo$target !== void 0 ? _redirectTo$target : '_top';
|
|
16
17
|
redirectToScript = `<script>window.open(${JSON.stringify(destination.toString())}, ${JSON.stringify(target)})</script>`;
|
|
17
18
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var shopifyApi = require('@shopify/shopify-api');
|
|
6
|
+
|
|
7
|
+
const FILE_URI_MATCH = /\/\/\//;
|
|
8
|
+
const INVALID_RELATIVE_URL = /[/\\][/\\]/;
|
|
9
|
+
const WHITESPACE_CHARACTER = /\s/;
|
|
10
|
+
const VALID_PROTOCOLS = ['https:', 'http:'];
|
|
11
|
+
function isSafe(domain, redirectUrl, requireSSL = true) {
|
|
12
|
+
if (typeof redirectUrl !== 'string') {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (FILE_URI_MATCH.test(redirectUrl) || WHITESPACE_CHARACTER.test(redirectUrl)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
let url;
|
|
19
|
+
try {
|
|
20
|
+
url = new URL(redirectUrl, domain);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
if (INVALID_RELATIVE_URL.test(url.pathname)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
if (!VALID_PROTOCOLS.includes(url.protocol)) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (requireSSL && url.protocol !== 'https:') {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
function sanitizeRedirectUrl(domain, redirectUrl, options = {}) {
|
|
36
|
+
if (isSafe(domain, redirectUrl, options.requireSSL)) {
|
|
37
|
+
return new URL(redirectUrl, domain);
|
|
38
|
+
} else if (options.throwOnInvalid === false) {
|
|
39
|
+
return undefined;
|
|
40
|
+
} else {
|
|
41
|
+
throw new shopifyApi.ShopifyError('Invalid URL. Refusing to redirect');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
exports.sanitizeRedirectUrl = sanitizeRedirectUrl;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var factory = require('../../clients/admin/factory.js');
|
|
6
|
+
|
|
7
|
+
function authenticateFlowFactory(params) {
|
|
8
|
+
const {
|
|
9
|
+
api,
|
|
10
|
+
config,
|
|
11
|
+
logger
|
|
12
|
+
} = params;
|
|
13
|
+
return async function authenticate(request) {
|
|
14
|
+
logger.info('Authenticating flow request');
|
|
15
|
+
if (request.method !== 'POST') {
|
|
16
|
+
logger.debug('Received a non-POST request for flow. Only POST requests are allowed.', {
|
|
17
|
+
url: request.url,
|
|
18
|
+
method: request.method
|
|
19
|
+
});
|
|
20
|
+
throw new Response(undefined, {
|
|
21
|
+
status: 405,
|
|
22
|
+
statusText: 'Method not allowed'
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
const rawBody = await request.text();
|
|
26
|
+
const result = await api.flow.validate({
|
|
27
|
+
rawBody,
|
|
28
|
+
rawRequest: request
|
|
29
|
+
});
|
|
30
|
+
if (!result.valid) {
|
|
31
|
+
logger.error('Received an invalid flow request', {
|
|
32
|
+
reason: result.reason
|
|
33
|
+
});
|
|
34
|
+
throw new Response(undefined, {
|
|
35
|
+
status: 400,
|
|
36
|
+
statusText: 'Bad Request'
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const payload = JSON.parse(rawBody);
|
|
40
|
+
logger.debug('Flow request is valid, looking for an offline session', {
|
|
41
|
+
shop: payload.shopify_domain
|
|
42
|
+
});
|
|
43
|
+
const sessionId = api.session.getOfflineId(payload.shopify_domain);
|
|
44
|
+
const session = await config.sessionStorage.loadSession(sessionId);
|
|
45
|
+
if (!session) {
|
|
46
|
+
logger.info('Flow request could not find session', {
|
|
47
|
+
shop: payload.shopify_domain
|
|
48
|
+
});
|
|
49
|
+
throw new Response(undefined, {
|
|
50
|
+
status: 400,
|
|
51
|
+
statusText: 'Bad Request'
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
logger.debug('Found a session for the flow request', {
|
|
55
|
+
shop: session.shop
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
session,
|
|
59
|
+
payload,
|
|
60
|
+
admin: factory.adminClientFactory({
|
|
61
|
+
params,
|
|
62
|
+
session
|
|
63
|
+
})
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
exports.authenticateFlowFactory = authenticateFlowFactory;
|
|
@@ -8,6 +8,7 @@ var shopifyApi = require('@shopify/shopify-api');
|
|
|
8
8
|
var types = require('./types.js');
|
|
9
9
|
var index = require('./boundary/index.js');
|
|
10
10
|
var shopifyApp = require('./shopify-app.js');
|
|
11
|
+
var errors = require('./errors.js');
|
|
11
12
|
|
|
12
13
|
runtime.setAbstractRuntimeString(() => {
|
|
13
14
|
return `Remix`;
|
|
@@ -37,3 +38,4 @@ exports.AppDistribution = types.AppDistribution;
|
|
|
37
38
|
exports.LoginErrorType = types.LoginErrorType;
|
|
38
39
|
exports.boundary = index.boundary;
|
|
39
40
|
exports.shopifyApp = shopifyApp.shopifyApp;
|
|
41
|
+
exports.SessionNotFoundError = errors.SessionNotFoundError;
|
|
@@ -8,7 +8,7 @@ var types = require('./types.js');
|
|
|
8
8
|
var version = require('./version.js');
|
|
9
9
|
var register = require('./authenticate/webhooks/register.js');
|
|
10
10
|
var authenticate = require('./authenticate/admin/authenticate.js');
|
|
11
|
-
var authenticate$
|
|
11
|
+
var authenticate$2 = require('./authenticate/webhooks/authenticate.js');
|
|
12
12
|
var overrideLogger = require('./override-logger.js');
|
|
13
13
|
var addResponseHeaders = require('./authenticate/helpers/add-response-headers.js');
|
|
14
14
|
require('isbot');
|
|
@@ -20,6 +20,7 @@ var factory$2 = require('./unauthenticated/storefront/factory.js');
|
|
|
20
20
|
var authCodeFlow = require('./authenticate/admin/strategies/auth-code-flow.js');
|
|
21
21
|
var tokenExchange = require('./authenticate/admin/strategies/token-exchange.js');
|
|
22
22
|
var idempotentPromiseHandler = require('./authenticate/helpers/idempotent-promise-handler.js');
|
|
23
|
+
var authenticate$1 = require('./authenticate/flow/authenticate.js');
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* Creates an object your app will use to interact with Shopify.
|
|
@@ -64,8 +65,9 @@ function shopifyApp(appConfig) {
|
|
|
64
65
|
registerWebhooks: register.registerWebhooksFactory(params),
|
|
65
66
|
authenticate: {
|
|
66
67
|
admin: authStrategy,
|
|
68
|
+
flow: authenticate$1.authenticateFlowFactory(params),
|
|
67
69
|
public: factory.authenticatePublicFactory(params),
|
|
68
|
-
webhook: authenticate$
|
|
70
|
+
webhook: authenticate$2.authenticateWebhookFactory(params)
|
|
69
71
|
},
|
|
70
72
|
unauthenticated: {
|
|
71
73
|
admin: factory$1.unauthenticatedAdminContextFactory(params),
|
|
@@ -84,7 +86,7 @@ function isSingleMerchantApp(_shopify, config) {
|
|
|
84
86
|
return config.distribution === types.AppDistribution.SingleMerchant;
|
|
85
87
|
}
|
|
86
88
|
function deriveApi(appConfig) {
|
|
87
|
-
var _appConfig$isEmbedded, _appConfig$apiVersion
|
|
89
|
+
var _appConfig$isEmbedded, _appConfig$apiVersion;
|
|
88
90
|
let appUrl;
|
|
89
91
|
try {
|
|
90
92
|
appUrl = new URL(appConfig.appUrl);
|
|
@@ -110,13 +112,11 @@ function deriveApi(appConfig) {
|
|
|
110
112
|
isEmbeddedApp: (_appConfig$isEmbedded = appConfig.isEmbeddedApp) !== null && _appConfig$isEmbedded !== void 0 ? _appConfig$isEmbedded : true,
|
|
111
113
|
apiVersion: (_appConfig$apiVersion = appConfig.apiVersion) !== null && _appConfig$apiVersion !== void 0 ? _appConfig$apiVersion : shopifyApi.LATEST_API_VERSION,
|
|
112
114
|
isCustomStoreApp: appConfig.distribution === types.AppDistribution.ShopifyAdmin,
|
|
113
|
-
future: {
|
|
114
|
-
unstable_tokenExchange: (_appConfig$future = appConfig.future) === null || _appConfig$future === void 0 ? void 0 : _appConfig$future.unstable_newEmbeddedAuthStrategy
|
|
115
|
-
}
|
|
115
|
+
future: {}
|
|
116
116
|
});
|
|
117
117
|
}
|
|
118
118
|
function deriveConfig(appConfig, apiConfig) {
|
|
119
|
-
var _appConfig$distributi, _appConfig$useOnlineT, _appConfig$hooks, _appConfig$
|
|
119
|
+
var _appConfig$distributi, _appConfig$useOnlineT, _appConfig$hooks, _appConfig$future;
|
|
120
120
|
if (!appConfig.sessionStorage) {
|
|
121
121
|
throw new shopifyApi.ShopifyError('Please provide a valid session storage. Refer to https://github.com/Shopify/shopify-app-js/blob/main/README.md#session-storage-options for options.');
|
|
122
122
|
}
|
|
@@ -130,7 +130,7 @@ function deriveConfig(appConfig, apiConfig) {
|
|
|
130
130
|
useOnlineTokens: (_appConfig$useOnlineT = appConfig.useOnlineTokens) !== null && _appConfig$useOnlineT !== void 0 ? _appConfig$useOnlineT : false,
|
|
131
131
|
hooks: (_appConfig$hooks = appConfig.hooks) !== null && _appConfig$hooks !== void 0 ? _appConfig$hooks : {},
|
|
132
132
|
sessionStorage: appConfig.sessionStorage,
|
|
133
|
-
future: (_appConfig$
|
|
133
|
+
future: (_appConfig$future = appConfig.future) !== null && _appConfig$future !== void 0 ? _appConfig$future : {},
|
|
134
134
|
auth: {
|
|
135
135
|
path: authPathPrefix,
|
|
136
136
|
callbackPath: `${authPathPrefix}/callback`,
|
|
@@ -10,6 +10,10 @@ let AppDistribution = /*#__PURE__*/function (AppDistribution) {
|
|
|
10
10
|
AppDistribution["ShopifyAdmin"] = "shopify_admin";
|
|
11
11
|
return AppDistribution;
|
|
12
12
|
}({});
|
|
13
|
+
|
|
14
|
+
// This can't be a type because it would reference itself
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style
|
|
16
|
+
|
|
13
17
|
let LoginErrorType = /*#__PURE__*/function (LoginErrorType) {
|
|
14
18
|
LoginErrorType["MissingShop"] = "MISSING_SHOP";
|
|
15
19
|
LoginErrorType["InvalidShop"] = "INVALID_SHOP";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var errors = require('../../errors.js');
|
|
6
6
|
var factory = require('../../clients/admin/factory.js');
|
|
7
7
|
var getOfflineSession = require('../helpers/get-offline-session.js');
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ function unauthenticatedAdminContextFactory(params) {
|
|
|
10
10
|
return async shop => {
|
|
11
11
|
const session = await getOfflineSession.getOfflineSession(shop, params);
|
|
12
12
|
if (!session) {
|
|
13
|
-
throw new
|
|
13
|
+
throw new errors.SessionNotFoundError(`Could not find a session for shop ${shop} when creating unauthenticated admin context`);
|
|
14
14
|
}
|
|
15
15
|
return {
|
|
16
16
|
session,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var errors = require('../../errors.js');
|
|
6
6
|
var factory = require('../../clients/storefront/factory.js');
|
|
7
7
|
var getOfflineSession = require('../helpers/get-offline-session.js');
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ function unauthenticatedStorefrontContextFactory(params) {
|
|
|
10
10
|
return async shop => {
|
|
11
11
|
const session = await getOfflineSession.getOfflineSession(shop, params);
|
|
12
12
|
if (!session) {
|
|
13
|
-
throw new
|
|
13
|
+
throw new errors.SessionNotFoundError(`Could not find a session for shop ${shop} when creating unauthenticated storefront context`);
|
|
14
14
|
}
|
|
15
15
|
return {
|
|
16
16
|
session,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-mock.js","sourceRoot":"","sources":["../../../../src/server/__test-helpers/request-mock.ts"],"names":[],"mappings":";;;;AAAA,4EAAsD;AAYtD,IAAI,YAAY,GAA6B,EAAE,CAAC;AAEhD,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B,SAAsB,mBAAmB,CAAC,EAGjB;QAFvB,OAAO,aAAA,EACP,QAAQ,cAAA;;;;;;oBAER,YAAY,CAAC,IAAI,CAAC,EAAC,OAAO,SAAA,EAAE,QAAQ,UAAA,EAAC,CAAC,CAAC;oBAElB,qBAAM,UAAU,CAAC,QAAQ,CAAC,EAAA;;oBAAzC,KAAe,SAA0B,EAAxC,IAAI,UAAA,EAAE,IAAI,UAAA;oBACjB,yBAAS,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;;;;CACpC;AARD,kDAQC;AAED,SAAsB,oBAAoB;IAAC,eAAkC;SAAlC,UAAkC,EAAlC,qBAAkC,EAAlC,IAAkC;QAAlC,0BAAkC;;;;;;;;oBACrE,eAAe,GAA2B,EAAE,CAAC;;;;oBAChC,UAAA,iBAAA,KAAK,CAAA;;;;oBAAb,IAAI;oBACN,OAAO,GAAc,IAAI,QAAlB,EAAE,QAAQ,GAAI,IAAI,SAAR,CAAS;oBAEjC,YAAY,CAAC,IAAI,CAAC,EAAC,OAAO,SAAA,EAAE,QAAQ,UAAA,EAAC,CAAC,CAAC;oBAElB,qBAAM,UAAU,CAAC,QAAQ,CAAC,EAAA;;oBAAzC,KAAe,SAA0B,EAAxC,IAAI,UAAA,EAAE,IAAI,UAAA;oBACjB,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;oBAGrC,yBAAS,CAAC,aAAa,OAAvB,yBAAS,2CAAkB,eAAe,WAAE;;;;;CAC7C;AAZD,oDAYC;AAED,SAAe,UAAU,CAAC,QAAkB;;;;;;;oBAElC,qBAAM,QAAQ,CAAC,IAAI,EAAE,EAAA;wBAD7B,uBACE,OAAI,GAAE,SAAqB;wBAC3B,OAAI,GAAE;4BACJ,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;4BAC/B,GAAG,EAAE,QAAQ,CAAC,GAAG;4BACjB,OAAO,wCACF,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KACjD,cAAc,EAAE,kBAAkB,GACnC;yBACF;6BACD;;;;CACH;AAED,SAAsB,aAAa;;;;;;YACjC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,yBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnE,sBAAO;YACT,CAAC;YAEG,eAAe,GAAG,CAAC,CAAC;gCAEZ,KAAK,EAAE,WAAW;gBACrB,IAAA,OAAO,GAAI,WAAW,QAAf,CAAgB;gBAE9B,IAAI,yBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;;gBAExC,CAAC;gBAED,eAAe,EAAE,CAAC;gBACZ,IAAA,KAAA,eAAc,yBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAA,EAAxC,GAAG,QAAA,EAAE,IAAI,QAA+B,CAAC;gBAEhD,IAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"request-mock.js","sourceRoot":"","sources":["../../../../src/server/__test-helpers/request-mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate.d.ts","sourceRoot":"","sources":["../../../../../src/server/authenticate/admin/authenticate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAW,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAE/E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"authenticate.d.ts","sourceRoot":"","sources":["../../../../../src/server/authenticate/admin/authenticate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAW,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAE/E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAgBrD,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,SAAS,CAAC;AASjB,OAAO,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED,UAAU,kBAAmB,SAAQ,WAAW;IAC9C,QAAQ,EAAE,qBAAqB,CAAC;CACjC;AAED,wBAAgB,mBAAmB,CACjC,SAAS,SAAS,YAAY,EAC9B,SAAS,SAAS,oBAAoB,GAAG,oBAAoB,EAC7D,EACA,QAAQ,EACR,GAAG,MAAM,EACV,EAAE,kBAAkB,GAAG,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAwG9D"}
|
|
@@ -40,6 +40,7 @@ function authStrategyFactory(_a) {
|
|
|
40
40
|
admin: (0, helpers_2.createAdminApiContext)(session, params, authStrategy.handleClientError(request)),
|
|
41
41
|
billing: {
|
|
42
42
|
require: (0, billing_1.requireBillingFactory)(params, request, session),
|
|
43
|
+
check: (0, billing_1.checkBillingFactory)(params, request, session),
|
|
43
44
|
request: (0, billing_1.requestBillingFactory)(params, request, session),
|
|
44
45
|
cancel: (0, billing_1.cancelBillingFactory)(params, request, session),
|
|
45
46
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../../../../../src/server/authenticate/admin/authenticate.ts"],"names":[],"mappings":";;;;AAIA,sCAOoB;AAEpB,
|
|
1
|
+
{"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../../../../../src/server/authenticate/admin/authenticate.ts"],"names":[],"mappings":";;;;AAIA,sCAOoB;AAEpB,qCAKmB;AAOnB,qCAOmB;AAcnB,SAAgB,mBAAmB,CAGjC,EAGmB;IAFnB,IAAA,QAAQ,cAAA,EACL,MAAM,sBAFT,YAGD,CADU;IAEF,IAAA,GAAG,GAAoB,MAAM,IAA1B,EAAE,MAAM,GAAY,MAAM,OAAlB,EAAE,MAAM,GAAI,MAAM,OAAV,CAAW;IAErC,SAAe,0BAA0B,CAAC,OAAgB;;;;gBAClD,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAEjC,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBACvD,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBACtC,MAAM,IAAA,yBAAe,EAAC,EAAC,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,GAAG,KAAA,EAAC,EAAE,OAAO,CAAC,CAAC;gBACxD,CAAC;;;;KACF;IAED,SAAe,0BAA0B,CAAC,OAAgB;;;;gBAClD,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAEjC,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;oBAC1C,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;oBAExD,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAC,WAAW,aAAA,EAAC,CAAC,CAAC;oBAC1D,MAAM,IAAA,yBAAe,EAAC,EAAC,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,GAAG,KAAA,EAAC,EAAE,OAAO,EAAE,EAAC,GAAG,EAAE,WAAW,EAAC,CAAC,CAAC;gBAC5E,CAAC;;;;KACF;IAED,SAAS,aAAa,CACpB,OAAgB,EAChB,OAAgB,EAChB,YAAmC,EACnC,YAAyB;QAEzB,IAAM,OAAO,GAEuC;YAClD,KAAK,EAAE,IAAA,+BAAqB,EAC1B,OAAO,EACP,MAAM,EACN,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CACxC;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,IAAA,+BAAqB,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;gBACxD,KAAK,EAAE,IAAA,6BAAmB,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;gBACpD,OAAO,EAAE,IAAA,+BAAqB,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;gBACxD,MAAM,EAAE,IAAA,8BAAoB,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;aACvD;YACD,OAAO,SAAA;YACP,IAAI,EAAE,IAAA,kCAAwB,EAAC,MAAM,EAAE,OAAO,CAAC;SAChD,CAAC;QAEF,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO,sCACF,OAAO,KACV,YAAY,cAAA,EACZ,QAAQ,EAAE,IAAA,yBAAe,EAAC,MAAM,EAAE,OAAO,CAAC,GACL,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,OAA6C,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,SAAe,iBAAiB,CAAC,OAAgB;;;;;;;wBAEpD,IAAA,6BAAmB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBACrC,IAAA,iCAAuB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBACzC,qBAAM,0BAA0B,CAAC,OAAO,CAAC,EAAA;;wBAAzC,SAAyC,CAAC;wBAC1C,qBAAM,0BAA0B,CAAC,OAAO,CAAC,EAAA;;wBAAzC,SAAyC,CAAC;wBAC1C,qBAAM,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAA;;wBAA9C,SAA8C,CAAC;6BAI3C,CAAC,IAAA,+BAAqB,EAAC,OAAO,CAAC,EAA/B,wBAA+B;wBACjC,IAAA,mCAAyB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBAC3C,qBAAM,IAAA,uCAA6B,EAAC,MAAM,EAAE,OAAO,CAAC,EAAA;;wBAApD,SAAoD,CAAC;wBACrD,qBAAM,IAAA,iDAAuC,EAAC,MAAM,EAAE,OAAO,CAAC,EAAA;;wBAA9D,SAA8D,CAAC;;;wBAGjE,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;wBAG1C,qBAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAA;;wBADzC,KACJ,SAA6C,EADxC,OAAO,aAAA,EAAE,IAAI,UAAA,EAAE,SAAS,eAAA,EAAE,YAAY,kBAAA;wBAG7C,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAC,SAAS,WAAA,EAAC,CAAC,CAAC;6BAClC,SAAS,EAAT,wBAAS;wBAC7B,qBAAM,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,EAAA;;wBAAlD,KAAA,SAAkD,CAAA;;;wBAClD,KAAA,SAAS,CAAA;;;wBAFP,eAAe,KAER;wBAEG,qBAAM,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE;gCACnD,OAAO,EAAE,eAAe;gCACxB,YAAY,cAAA;gCACZ,IAAI,MAAA;6BACL,CAAC,EAAA;;wBAJI,OAAO,GAAG,SAId;wBAEF,MAAM,CAAC,KAAK,CAAC,qDAAqD,EAAE;4BAClE,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;yBAC3B,CAAC,CAAC;wBAEH,sBAAO,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAC;;;wBAE1D,IAAI,iBAAe,YAAY,QAAQ,EAAE,CAAC;4BACxC,IAAA,kCAAwB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,iBAAe,CAAC,CAAC;wBAC7D,CAAC;wBAED,MAAM,iBAAe,CAAC;;;;;KAEzB,CAAC;AACJ,CAAC;AA9GD,kDA8GC;AAED,SAAe,sBAAsB,CACnC,MAAmB,EACnB,OAAgB;;;;;;oBAET,GAAG,GAAoB,MAAM,IAA1B,EAAE,MAAM,GAAY,MAAM,OAAlB,EAAE,MAAM,GAAI,MAAM,OAAV,CAAW;oBAE/B,kBAAkB,GAAG,IAAA,+BAAqB,EAAC,OAAO,CAAC,CAAC;oBACpD,uBAAuB,GAAG,IAAA,qCAA2B,EAAC,OAAO,CAAC,CAAC;oBAC/D,YAAY,GAAG,CAAC,kBAAkB,IAAI,uBAAuB,CAAE,CAAC;oBAEtE,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE;wBACvD,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;4BAC3B,MAAM,EAAE,kBAAkB;4BAC1B,MAAM,EAAE,uBAAuB;yBAChC,CAAC;qBACH,CAAC,CAAC;yBAEC,MAAM,CAAC,aAAa,EAApB,wBAAoB;oBACN,qBAAM,IAAA,8BAAoB,EACxC,EAAC,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,GAAG,KAAA,EAAC,EACrB,YAAY,CACb,EAAA;;oBAHK,OAAO,GAAG,SAGf;oBACK,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC7B,SAAO,IAAI,CAAC,QAAQ,CAAC;oBAE3B,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,QAAA,EAAE,OAAO,SAAA,EAAC,CAAC,CAAC;oBAClD,cAAY,MAAM,CAAC,eAAe;wBACtC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,MAAI,EAAE,OAAO,CAAC,GAAG,CAAC;wBAChD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,MAAI,CAAC,CAAC;oBAEnC,sBAAO,EAAC,IAAI,QAAA,EAAE,OAAO,SAAA,EAAE,SAAS,aAAA,EAAE,YAAY,cAAA,EAAC,EAAC;;oBAG5C,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC3B,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;oBAEzB,qBAAM,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;4BAC/C,QAAQ,EAAE,MAAM,CAAC,eAAe;4BAChC,UAAU,EAAE,OAAO;yBACpB,CAAC,EAAA;;oBAHI,SAAS,GAAG,SAGhB;oBAEF,sBAAO,EAAC,IAAI,MAAA,EAAE,SAAS,WAAA,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,cAAA,EAAC,EAAC;;;;CAC5D"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Session } from '@shopify/shopify-api';
|
|
2
|
+
import type { BasicParams } from '../../../types';
|
|
3
|
+
import type { AppConfigArg } from '../../../config-types';
|
|
4
|
+
import type { CheckBillingOptions } from './types';
|
|
5
|
+
export declare function checkBillingFactory<Config extends AppConfigArg>(params: BasicParams, request: Request, session: Session): (options: CheckBillingOptions<Config>) => Promise<import("@shopify/shopify-api").BillingCheckResponseObject>;
|
|
6
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAEhE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,SAAS,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,YAAY,EAC7D,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,aAE4B,oBAAoB,MAAM,CAAC,wEAuBxE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkBillingFactory = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var shopify_api_1 = require("@shopify/shopify-api");
|
|
6
|
+
var helpers_1 = require("../helpers");
|
|
7
|
+
function checkBillingFactory(params, request, session) {
|
|
8
|
+
return function checkBilling(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('Checking billing plans', 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.check({
|
|
20
|
+
session: session,
|
|
21
|
+
plans: options.plans,
|
|
22
|
+
isTest: options.isTest,
|
|
23
|
+
returnObject: true,
|
|
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.checkBillingFactory = checkBillingFactory;
|
|
43
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/check.ts"],"names":[],"mappings":";;;;AAAA,oDAAgE;AAGhE,sCAA8C;AAK9C,SAAgB,mBAAmB,CACjC,MAAmB,EACnB,OAAgB,EAChB,OAAgB;IAEhB,OAAO,SAAe,YAAY,CAAC,OAAoC;;;;;;wBAC9D,GAAG,GAAY,MAAM,IAAlB,EAAE,MAAM,GAAI,MAAM,OAAV,CAAW;wBAE7B,MAAM,CAAC,KAAK,CAAC,wBAAwB,qBAAG,IAAI,EAAE,OAAO,CAAC,IAAI,IAAK,OAAO,EAAE,CAAC;;;;wBAGhE,qBAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gCAC7B,OAAO,SAAA;gCACP,KAAK,EAAE,OAAO,CAAC,KAAiB;gCAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gCACtB,YAAY,EAAE,IAAI;6BACnB,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,kDA4BC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAC,qBAAqB,EAAC,MAAM,WAAW,CAAC;AAChD,OAAO,EAAC,qBAAqB,EAAC,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAC,qBAAqB,EAAC,MAAM,WAAW,CAAC;AAChD,OAAO,EAAC,qBAAqB,EAAC,MAAM,WAAW,CAAC;AAChD,OAAO,EAAC,mBAAmB,EAAC,MAAM,SAAS,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.requestBillingFactory = exports.requireBillingFactory = exports.cancelBillingFactory = void 0;
|
|
3
|
+
exports.checkBillingFactory = exports.requestBillingFactory = exports.requireBillingFactory = exports.cancelBillingFactory = void 0;
|
|
4
4
|
var cancel_1 = require("./cancel");
|
|
5
5
|
Object.defineProperty(exports, "cancelBillingFactory", { enumerable: true, get: function () { return cancel_1.cancelBillingFactory; } });
|
|
6
6
|
var require_1 = require("./require");
|
|
7
7
|
Object.defineProperty(exports, "requireBillingFactory", { enumerable: true, get: function () { return require_1.requireBillingFactory; } });
|
|
8
8
|
var request_1 = require("./request");
|
|
9
9
|
Object.defineProperty(exports, "requestBillingFactory", { enumerable: true, get: function () { return request_1.requestBillingFactory; } });
|
|
10
|
+
var check_1 = require("./check");
|
|
11
|
+
Object.defineProperty(exports, "checkBillingFactory", { enumerable: true, get: function () { return check_1.checkBillingFactory; } });
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8C;AAAtC,8GAAA,oBAAoB,OAAA;AAC5B,qCAAgD;AAAxC,gHAAA,qBAAqB,OAAA;AAC7B,qCAAgD;AAAxC,gHAAA,qBAAqB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8C;AAAtC,8GAAA,oBAAoB,OAAA;AAC5B,qCAAgD;AAAxC,gHAAA,qBAAqB,OAAA;AAC7B,qCAAgD;AAAxC,gHAAA,qBAAqB,OAAA;AAC7B,iCAA4C;AAApC,4GAAA,mBAAmB,OAAA"}
|
|
@@ -10,6 +10,12 @@ export interface RequireBillingOptions<Config extends AppConfigArg> extends Omit
|
|
|
10
10
|
*/
|
|
11
11
|
onFailure: (error: any) => Promise<Response>;
|
|
12
12
|
}
|
|
13
|
+
export interface CheckBillingOptions<Config extends AppConfigArg> extends Omit<BillingCheckParams, 'session' | 'plans' | 'returnObject'> {
|
|
14
|
+
/**
|
|
15
|
+
* The plans to check for. Must be one of the values defined in the `billing` config option.
|
|
16
|
+
*/
|
|
17
|
+
plans: (keyof Config['billing'])[];
|
|
18
|
+
}
|
|
13
19
|
export interface RequestBillingOptions<Config extends AppConfigArg> extends Omit<BillingRequestParams, 'session' | 'plan' | 'returnObject'> {
|
|
14
20
|
/**
|
|
15
21
|
* The plan to request. Must be one of the values defined in the `billing` config option.
|
|
@@ -89,7 +95,7 @@ export interface BillingContext<Config extends AppConfigArg> {
|
|
|
89
95
|
* ```
|
|
90
96
|
*
|
|
91
97
|
* @example
|
|
92
|
-
* <caption>
|
|
98
|
+
* <caption>Redirect to a plan selection page.</caption>
|
|
93
99
|
* <description> When the app has multiple plans, create a page in your App that allows the merchant to select a plan. If a merchant does not have the required plan you can redirect them to page in your app to select one.</description>
|
|
94
100
|
* ```ts
|
|
95
101
|
* // /app/routes/**\/*.ts
|
|
@@ -137,6 +143,58 @@ export interface BillingContext<Config extends AppConfigArg> {
|
|
|
137
143
|
* ```
|
|
138
144
|
*/
|
|
139
145
|
require: (options: RequireBillingOptions<Config>) => Promise<BillingCheckResponseObject>;
|
|
146
|
+
/**
|
|
147
|
+
* Checks if the shop has an active payment for any plan defined in the `billing` config option.
|
|
148
|
+
*
|
|
149
|
+
* @returns A promise that resolves to an object containing the active purchases for the shop.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* <caption>Check what billing plans a merchant is subscribed to.</caption>
|
|
153
|
+
* <description>Use billing.check if you want to determine which plans are in use. Unlike `require`, `check` does not
|
|
154
|
+
* throw an error if no active billing plans are present. </description>
|
|
155
|
+
* ```ts
|
|
156
|
+
* // /app/routes/**\/*.ts
|
|
157
|
+
* import { LoaderFunctionArgs } from "@remix-run/node";
|
|
158
|
+
* import { authenticate, MONTHLY_PLAN } from "../shopify.server";
|
|
159
|
+
*
|
|
160
|
+
* export const loader = async ({ request }: LoaderFunctionArgs) => {
|
|
161
|
+
* const { billing } = await authenticate.admin(request);
|
|
162
|
+
* const { hasActivePayment, appSubscriptions } = await billing.check({
|
|
163
|
+
* plans: [MONTHLY_PLAN],
|
|
164
|
+
* isTest: false,
|
|
165
|
+
* });
|
|
166
|
+
* console.log(hasActivePayment)
|
|
167
|
+
* console.log(appSubscriptions)
|
|
168
|
+
* };
|
|
169
|
+
* ```
|
|
170
|
+
* ```ts
|
|
171
|
+
* // shopify.server.ts
|
|
172
|
+
* import { shopifyApp, BillingInterval } from "@shopify/shopify-app-remix/server";
|
|
173
|
+
*
|
|
174
|
+
* export const MONTHLY_PLAN = 'Monthly subscription';
|
|
175
|
+
* export const ANNUAL_PLAN = 'Annual subscription';
|
|
176
|
+
*
|
|
177
|
+
* const shopify = shopifyApp({
|
|
178
|
+
* // ...etc
|
|
179
|
+
* billing: {
|
|
180
|
+
* [MONTHLY_PLAN]: {
|
|
181
|
+
* amount: 5,
|
|
182
|
+
* currencyCode: 'USD',
|
|
183
|
+
* interval: BillingInterval.Every30Days,
|
|
184
|
+
* },
|
|
185
|
+
* [ANNUAL_PLAN]: {
|
|
186
|
+
* amount: 50,
|
|
187
|
+
* currencyCode: 'USD',
|
|
188
|
+
* interval: BillingInterval.Annual,
|
|
189
|
+
* },
|
|
190
|
+
* }
|
|
191
|
+
* });
|
|
192
|
+
* export default shopify;
|
|
193
|
+
* export const authenticate = shopify.authenticate;
|
|
194
|
+
* ```
|
|
195
|
+
*
|
|
196
|
+
*/
|
|
197
|
+
check: (options: CheckBillingOptions<Config>) => Promise<BillingCheckResponseObject>;
|
|
140
198
|
/**
|
|
141
199
|
* Requests payment for the plan.
|
|
142
200
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,YAAY,CAChE,SAAQ,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,OAAO,GAAG,cAAc,CAAC;IACtE;;OAEG;IACH,KAAK,EAAE,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;IACnC;;OAEG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,YAAY,CAChE,SAAQ,IAAI,CAAC,oBAAoB,EAAE,SAAS,GAAG,MAAM,GAAG,cAAc,CAAC;IACvE;;OAEG;IACH,IAAI,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAIlB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc,CAAC,MAAM,SAAS,YAAY;IACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiGG;IACH,OAAO,EAAE,CACP,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,KACnC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoDG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuDG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACrE"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,YAAY,CAChE,SAAQ,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,OAAO,GAAG,cAAc,CAAC;IACtE;;OAEG;IACH,KAAK,EAAE,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;IACnC;;OAEG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,mBAAmB,CAAC,MAAM,SAAS,YAAY,CAC9D,SAAQ,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,OAAO,GAAG,cAAc,CAAC;IACtE;;OAEG;IACH,KAAK,EAAE,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,YAAY,CAChE,SAAQ,IAAI,CAAC,oBAAoB,EAAE,SAAS,GAAG,MAAM,GAAG,cAAc,CAAC;IACvE;;OAEG;IACH,IAAI,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAIlB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc,CAAC,MAAM,SAAS,YAAY;IACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiGG;IACH,OAAO,EAAE,CACP,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,KACnC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkDG;IACH,KAAK,EAAE,CACL,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,KACjC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoDG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuDG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACrE"}
|