@shopify/shopify-app-remix 3.2.0 → 3.3.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 +1 -1
- package/dist/cjs/server/authenticate/admin/authenticate.js +2 -0
- package/dist/cjs/server/authenticate/admin/authenticate.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/billing/create-usage-record.js +36 -0
- package/dist/cjs/server/authenticate/admin/billing/create-usage-record.js.map +1 -0
- package/dist/cjs/server/authenticate/admin/scope/client/revoke-scopes.js +1 -1
- package/dist/cjs/server/authenticate/admin/scope/client/revoke-scopes.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/scope/revoke.js +2 -5
- package/dist/cjs/server/authenticate/admin/scope/revoke.js.map +1 -1
- package/dist/cjs/server/index.js +4 -0
- package/dist/cjs/server/index.js.map +1 -1
- package/dist/cjs/server/version.js +1 -1
- package/dist/esm/server/authenticate/admin/authenticate.mjs +2 -0
- package/dist/esm/server/authenticate/admin/authenticate.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/billing/create-usage-record.mjs +34 -0
- package/dist/esm/server/authenticate/admin/billing/create-usage-record.mjs.map +1 -0
- package/dist/esm/server/authenticate/admin/scope/client/revoke-scopes.mjs +1 -1
- package/dist/esm/server/authenticate/admin/scope/client/revoke-scopes.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/scope/revoke.mjs +2 -5
- package/dist/esm/server/authenticate/admin/scope/revoke.mjs.map +1 -1
- package/dist/esm/server/index.mjs +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/create-usage-record.d.ts +5 -0
- package/dist/ts/server/authenticate/admin/billing/create-usage-record.d.ts.map +1 -0
- package/dist/ts/server/authenticate/admin/billing/index.d.ts +1 -0
- package/dist/ts/server/authenticate/admin/billing/index.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/billing/types.d.ts +138 -2
- package/dist/ts/server/authenticate/admin/billing/types.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/scope/revoke.d.ts +1 -1
- package/dist/ts/server/authenticate/admin/scope/revoke.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/scope/types.d.ts +1 -1
- package/dist/ts/server/authenticate/admin/scope/types.d.ts.map +1 -1
- package/dist/ts/server/authenticate/webhooks/types.d.ts +32 -0
- package/dist/ts/server/authenticate/webhooks/types.d.ts.map +1 -1
- package/dist/ts/server/config-types.d.ts +42 -28
- package/dist/ts/server/config-types.d.ts.map +1 -1
- package/dist/ts/server/index.d.ts +1 -1
- package/dist/ts/server/index.d.ts.map +1 -1
- package/dist/ts/server/types.d.ts +64 -40
- 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 +9 -9
package/README.md
CHANGED
|
@@ -239,7 +239,7 @@ const shopify = shopifyApp(config);
|
|
|
239
239
|
...
|
|
240
240
|
```
|
|
241
241
|
|
|
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.
|
|
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 integration testing and end-to-end testing to ensure `shopifyApp()` reads the sessions from the development database.
|
|
243
243
|
|
|
244
244
|
```ts
|
|
245
245
|
// my-app/app/shopify.server.ts
|
|
@@ -11,6 +11,7 @@ var cancel = require('./billing/cancel.js');
|
|
|
11
11
|
var require$1 = require('./billing/require.js');
|
|
12
12
|
var request = require('./billing/request.js');
|
|
13
13
|
var check = require('./billing/check.js');
|
|
14
|
+
var createUsageRecord = require('./billing/create-usage-record.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');
|
|
@@ -45,6 +46,7 @@ function authStrategyFactory({ strategy, ...params }) {
|
|
|
45
46
|
check: check.checkBillingFactory(params, request$1, session),
|
|
46
47
|
request: request.requestBillingFactory(params, request$1, session),
|
|
47
48
|
cancel: cancel.cancelBillingFactory(params, request$1, session),
|
|
49
|
+
createUsageRecord: createUsageRecord.createUsageRecordFactory(params, request$1, session),
|
|
48
50
|
},
|
|
49
51
|
session,
|
|
50
52
|
cors: ensureCorsHeaders.ensureCORSHeadersFactory(params, request$1),
|
|
@@ -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","scopesApiFactory","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","createUsageRecordFactory","ensureCORSHeadersFactory","redirectFactory","scopesApiFactory","respondToBotRequest","respondToOptionsRequest","getSessionTokenHeader","validateShopAndHostParams","ensureAppIsEmbeddedIfRequired","ensureSessionTokenSearchParamIfRequired","getSessionTokenFromUrlParam","validateSessionToken"],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var shopifyApi = require('@shopify/shopify-api');
|
|
4
|
+
require('@remix-run/server-runtime');
|
|
5
|
+
var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
6
|
+
var invalidateAccessToken = require('../../helpers/invalidate-access-token.js');
|
|
7
|
+
require('isbot');
|
|
8
|
+
require('../../../types.js');
|
|
9
|
+
|
|
10
|
+
function createUsageRecordFactory(params, request, session) {
|
|
11
|
+
return async function createUsageRecord(options) {
|
|
12
|
+
const { api, logger } = params;
|
|
13
|
+
logger.debug('Create usage record', { shop: session.shop, ...options });
|
|
14
|
+
try {
|
|
15
|
+
return await api.billing.createUsageRecord({
|
|
16
|
+
...options,
|
|
17
|
+
session,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (error instanceof shopifyApi.HttpResponseError && error.response.code === 401) {
|
|
22
|
+
logger.debug('API token was invalid, redirecting to OAuth', {
|
|
23
|
+
shop: session.shop,
|
|
24
|
+
});
|
|
25
|
+
await invalidateAccessToken.invalidateAccessToken(params, session);
|
|
26
|
+
throw await redirectToAuthPage.redirectToAuthPage(params, request, session.shop);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
exports.createUsageRecordFactory = createUsageRecordFactory;
|
|
36
|
+
//# sourceMappingURL=create-usage-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-usage-record.js","sources":["../../../../../../../src/server/authenticate/admin/billing/create-usage-record.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SAQgB,wBAAwB,CACtC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,iBAAiB,CAAC,OAAiC,EAAA;AACvE,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC;AAE7B,QAAA,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC,CAAC;AAEtE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACzC,gBAAA,GAAG,OAAO;gBACV,OAAO;AACR,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;;;;"}
|
|
@@ -1 +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;
|
|
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;AACtD,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAClD;;;;"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var revokeScopes = require('./client/revoke-scopes.js');
|
|
4
|
-
var fetchScopesDetails = require('./client/fetch-scopes-details.js');
|
|
5
|
-
var query = require('./query.js');
|
|
6
4
|
|
|
7
5
|
function revokeScopesFactory(params, session, admin) {
|
|
8
6
|
return async function revoke(scopes) {
|
|
9
7
|
const { logger } = params;
|
|
8
|
+
await validateScopes(scopes);
|
|
10
9
|
logger.debug('Revoke scopes: ', {
|
|
11
10
|
shop: session.shop,
|
|
12
11
|
scopes,
|
|
13
12
|
});
|
|
14
|
-
await validateScopes(scopes);
|
|
15
13
|
const revokeScopesResult = await revokeScopes.revokeScopes(admin, scopes);
|
|
16
14
|
if (revokeScopesResult.userErrors?.length > 0) {
|
|
17
15
|
logger.error('Failed to revoke scopes: ', {
|
|
@@ -25,9 +23,8 @@ function revokeScopesFactory(params, session, admin) {
|
|
|
25
23
|
},
|
|
26
24
|
});
|
|
27
25
|
}
|
|
28
|
-
const scopesDetail = await fetchScopesDetails.fetchScopeDetail(admin);
|
|
29
26
|
return {
|
|
30
|
-
|
|
27
|
+
revoked: revokeScopesResult.revoked.map((scope) => scope.handle),
|
|
31
28
|
};
|
|
32
29
|
};
|
|
33
30
|
}
|
|
@@ -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"],"mappings":";;;;SAOgB,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,CAAC,MAAM,CAAC,CAAC;AAE7B,QAAA,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;AACP,SAAA,CAAC,CAAC;QAEH,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;QAED,OAAO;AACL,YAAA,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;SACjE,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;;;;"}
|
package/dist/cjs/server/index.js
CHANGED
|
@@ -20,6 +20,10 @@ Object.defineProperty(exports, "BillingInterval", {
|
|
|
20
20
|
enumerable: true,
|
|
21
21
|
get: function () { return shopifyApi.BillingInterval; }
|
|
22
22
|
});
|
|
23
|
+
Object.defineProperty(exports, "BillingReplacementBehavior", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () { return shopifyApi.BillingReplacementBehavior; }
|
|
26
|
+
});
|
|
23
27
|
Object.defineProperty(exports, "DeliveryMethod", {
|
|
24
28
|
enumerable: true,
|
|
25
29
|
get: function () { return shopifyApi.DeliveryMethod; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/server/index.ts"],"sourcesContent":[null],"names":["setAbstractRuntimeString"],"mappings":";;;;;;;;;;AAGAA,gCAAwB,CAAC,MAAK;AAC5B,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/server/index.ts"],"sourcesContent":[null],"names":["setAbstractRuntimeString"],"mappings":";;;;;;;;;;AAGAA,gCAAwB,CAAC,MAAK;AAC5B,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -9,6 +9,7 @@ import { cancelBillingFactory } from './billing/cancel.mjs';
|
|
|
9
9
|
import { requireBillingFactory } from './billing/require.mjs';
|
|
10
10
|
import { requestBillingFactory } from './billing/request.mjs';
|
|
11
11
|
import { checkBillingFactory } from './billing/check.mjs';
|
|
12
|
+
import { createUsageRecordFactory } from './billing/create-usage-record.mjs';
|
|
12
13
|
import { createAdminApiContext } from './helpers/create-admin-api-context.mjs';
|
|
13
14
|
import { ensureAppIsEmbeddedIfRequired } from './helpers/ensure-app-is-embedded-if-required.mjs';
|
|
14
15
|
import { ensureSessionTokenSearchParamIfRequired } from './helpers/ensure-session-token-search-param-if-required.mjs';
|
|
@@ -43,6 +44,7 @@ function authStrategyFactory({ strategy, ...params }) {
|
|
|
43
44
|
check: checkBillingFactory(params, request, session),
|
|
44
45
|
request: requestBillingFactory(params, request, session),
|
|
45
46
|
cancel: cancelBillingFactory(params, request, session),
|
|
47
|
+
createUsageRecord: createUsageRecordFactory(params, request, session),
|
|
46
48
|
},
|
|
47
49
|
session,
|
|
48
50
|
cors: ensureCORSHeadersFactory(params, request),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate.mjs","sources":["../../../../../../src/server/authenticate/admin/authenticate.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authenticate.mjs","sources":["../../../../../../src/server/authenticate/admin/authenticate.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { HttpResponseError } from '@shopify/shopify-api';
|
|
2
|
+
import '@remix-run/server-runtime';
|
|
3
|
+
import { redirectToAuthPage } from '../helpers/redirect-to-auth-page.mjs';
|
|
4
|
+
import { invalidateAccessToken } from '../../helpers/invalidate-access-token.mjs';
|
|
5
|
+
import 'isbot';
|
|
6
|
+
import '../../../types.mjs';
|
|
7
|
+
|
|
8
|
+
function createUsageRecordFactory(params, request, session) {
|
|
9
|
+
return async function createUsageRecord(options) {
|
|
10
|
+
const { api, logger } = params;
|
|
11
|
+
logger.debug('Create usage record', { shop: session.shop, ...options });
|
|
12
|
+
try {
|
|
13
|
+
return await api.billing.createUsageRecord({
|
|
14
|
+
...options,
|
|
15
|
+
session,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (error instanceof HttpResponseError && error.response.code === 401) {
|
|
20
|
+
logger.debug('API token was invalid, redirecting to OAuth', {
|
|
21
|
+
shop: session.shop,
|
|
22
|
+
});
|
|
23
|
+
await invalidateAccessToken(params, session);
|
|
24
|
+
throw await redirectToAuthPage(params, request, session.shop);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { createUsageRecordFactory };
|
|
34
|
+
//# sourceMappingURL=create-usage-record.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-usage-record.mjs","sources":["../../../../../../../src/server/authenticate/admin/billing/create-usage-record.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;SAQgB,wBAAwB,CACtC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,iBAAiB,CAAC,OAAiC,EAAA;AACvE,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC;AAE7B,QAAA,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC,CAAC;AAEtE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACzC,gBAAA,GAAG,OAAO;gBACV,OAAO;AACR,aAAA,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAY,iBAAiB,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,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,MAAM,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;aAC/D;iBAAM;AACL,gBAAA,MAAM,KAAK,CAAC;aACb;SACF;AACH,KAAC,CAAC;AACJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revoke-scopes.mjs","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;
|
|
1
|
+
{"version":3,"file":"revoke-scopes.mjs","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;AACtD,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAClD;;;;"}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { revokeScopes } from './client/revoke-scopes.mjs';
|
|
2
|
-
import { fetchScopeDetail } from './client/fetch-scopes-details.mjs';
|
|
3
|
-
import { mapFetchScopeDetail } from './query.mjs';
|
|
4
2
|
|
|
5
3
|
function revokeScopesFactory(params, session, admin) {
|
|
6
4
|
return async function revoke(scopes) {
|
|
7
5
|
const { logger } = params;
|
|
6
|
+
await validateScopes(scopes);
|
|
8
7
|
logger.debug('Revoke scopes: ', {
|
|
9
8
|
shop: session.shop,
|
|
10
9
|
scopes,
|
|
11
10
|
});
|
|
12
|
-
await validateScopes(scopes);
|
|
13
11
|
const revokeScopesResult = await revokeScopes(admin, scopes);
|
|
14
12
|
if (revokeScopesResult.userErrors?.length > 0) {
|
|
15
13
|
logger.error('Failed to revoke scopes: ', {
|
|
@@ -23,9 +21,8 @@ function revokeScopesFactory(params, session, admin) {
|
|
|
23
21
|
},
|
|
24
22
|
});
|
|
25
23
|
}
|
|
26
|
-
const scopesDetail = await fetchScopeDetail(admin);
|
|
27
24
|
return {
|
|
28
|
-
|
|
25
|
+
revoked: revokeScopesResult.revoked.map((scope) => scope.handle),
|
|
29
26
|
};
|
|
30
27
|
};
|
|
31
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revoke.mjs","sources":["../../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"revoke.mjs","sources":["../../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"sourcesContent":[null],"names":[],"mappings":";;SAOgB,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,CAAC,MAAM,CAAC,CAAC;AAE7B,QAAA,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;AACP,SAAA,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,MAAM,YAAY,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;QAED,OAAO;AACL,YAAA,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;SACjE,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;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import '@shopify/shopify-api/adapters/web-api';
|
|
2
2
|
import { setAbstractRuntimeString } from '@shopify/shopify-api/runtime';
|
|
3
|
-
export { ApiVersion, BillingInterval, DeliveryMethod, LATEST_API_VERSION, LogSeverity, Session } from '@shopify/shopify-api';
|
|
3
|
+
export { ApiVersion, BillingInterval, BillingReplacementBehavior, DeliveryMethod, LATEST_API_VERSION, LogSeverity, Session } from '@shopify/shopify-api';
|
|
4
4
|
export { AppDistribution, LoginErrorType } from './types.mjs';
|
|
5
5
|
export { boundary } from './boundary/index.mjs';
|
|
6
6
|
export { shopifyApp } from './shopify-app.mjs';
|
|
@@ -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;AAiBrD,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,SAAS,CAAC;AASjB,OAAO,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAGzD,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,CA6H9D"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Session } from '@shopify/shopify-api';
|
|
2
|
+
import type { BasicParams } from '../../../types';
|
|
3
|
+
import type { CreateUsageRecordOptions } from './types';
|
|
4
|
+
export declare function createUsageRecordFactory(params: BasicParams, request: Request, session: Session): (options: CreateUsageRecordOptions) => Promise<import("@shopify/shopify-api").UsageRecord>;
|
|
5
|
+
//# sourceMappingURL=create-usage-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-usage-record.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/create-usage-record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAEhE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAIhD,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,SAAS,CAAC;AAEtD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,aAEiC,wBAAwB,yDAsB1E"}
|
|
@@ -2,4 +2,5 @@ export { cancelBillingFactory } from './cancel';
|
|
|
2
2
|
export { requireBillingFactory } from './require';
|
|
3
3
|
export { requestBillingFactory } from './request';
|
|
4
4
|
export { checkBillingFactory } from './check';
|
|
5
|
+
export { createUsageRecordFactory } from './create-usage-record';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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;AAChD,OAAO,EAAC,mBAAmB,EAAC,MAAM,SAAS,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;AAC5C,OAAO,EAAC,wBAAwB,EAAC,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { AppSubscription, BillingCheckParams, BillingCheckResponseObject, BillingRequestParams } from '@shopify/shopify-api';
|
|
1
|
+
import { AppSubscription, BillingCheckParams, BillingCheckResponseObject, BillingRequestParams, UsageRecord } from '@shopify/shopify-api';
|
|
2
|
+
import { ApiFutureFlags } from '../../../future/flags';
|
|
2
3
|
import type { AppConfigArg } from '../../../config-types';
|
|
3
4
|
export interface RequireBillingOptions<Config extends AppConfigArg> extends Omit<BillingCheckParams, 'session' | 'plans' | 'returnObject'> {
|
|
4
5
|
/**
|
|
@@ -16,7 +17,7 @@ export interface CheckBillingOptions<Config extends AppConfigArg> extends Omit<B
|
|
|
16
17
|
*/
|
|
17
18
|
plans?: (keyof Config['billing'])[];
|
|
18
19
|
}
|
|
19
|
-
export interface RequestBillingOptions<Config extends AppConfigArg> extends Omit<BillingRequestParams
|
|
20
|
+
export interface RequestBillingOptions<Config extends AppConfigArg> extends Omit<BillingRequestParams<ApiFutureFlags<Config['future']>>, 'session' | 'plan' | 'returnObject'> {
|
|
20
21
|
/**
|
|
21
22
|
* The plan to request. Must be one of the values defined in the `billing` config option.
|
|
22
23
|
*/
|
|
@@ -47,6 +48,31 @@ export interface CancelBillingOptions {
|
|
|
47
48
|
*/
|
|
48
49
|
isTest?: boolean;
|
|
49
50
|
}
|
|
51
|
+
export interface CreateUsageRecordOptions {
|
|
52
|
+
/**
|
|
53
|
+
* The description of the app usage record.
|
|
54
|
+
*/
|
|
55
|
+
description: string;
|
|
56
|
+
/**
|
|
57
|
+
* The price of the app usage record.
|
|
58
|
+
*/
|
|
59
|
+
price: {
|
|
60
|
+
/**
|
|
61
|
+
* The amount to charge for this usage record.
|
|
62
|
+
*/
|
|
63
|
+
amount: number;
|
|
64
|
+
/**
|
|
65
|
+
* The currency code for this usage record.
|
|
66
|
+
*/
|
|
67
|
+
currencyCode: string;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Whether to use the test mode. This prevents the credit card from being charged.
|
|
71
|
+
*/
|
|
72
|
+
isTest: boolean;
|
|
73
|
+
subscriptionLineItemId?: string;
|
|
74
|
+
idempotencyKey?: string;
|
|
75
|
+
}
|
|
50
76
|
export interface BillingContext<Config extends AppConfigArg> {
|
|
51
77
|
/**
|
|
52
78
|
* Checks if the shop has an active payment for any plan defined in the `billing` config option.
|
|
@@ -276,6 +302,64 @@ export interface BillingContext<Config extends AppConfigArg> {
|
|
|
276
302
|
* export default shopify;
|
|
277
303
|
* export const authenticate = shopify.authenticate;
|
|
278
304
|
* ```
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* <caption>Overriding plan settings.</caption>
|
|
308
|
+
* <description>Customize the plan for a merchant when requesting billing. Any fields from the plan can be overridden, as long as the billing interval for line items matches the config.</description>
|
|
309
|
+
* ```ts
|
|
310
|
+
* // /app/routes/**\/*.ts
|
|
311
|
+
* import { LoaderFunctionArgs } from "@remix-run/node";
|
|
312
|
+
* import { authenticate, MONTHLY_PLAN } from "../shopify.server";
|
|
313
|
+
*
|
|
314
|
+
* export const loader = async ({ request }: LoaderFunctionArgs) => {
|
|
315
|
+
* const { billing } = await authenticate.admin(request);
|
|
316
|
+
* await billing.require({
|
|
317
|
+
* plans: [MONTHLY_PLAN],
|
|
318
|
+
* onFailure: async () => billing.request({
|
|
319
|
+
* plan: MONTHLY_PLAN,
|
|
320
|
+
* isTest: true,
|
|
321
|
+
* trialDays: 14,
|
|
322
|
+
* lineItems: [
|
|
323
|
+
* {
|
|
324
|
+
* interval: BillingInterval.Every30Days,
|
|
325
|
+
* discount: { value: { percentage: 0.1 } },
|
|
326
|
+
* },
|
|
327
|
+
* ],
|
|
328
|
+
* }),
|
|
329
|
+
* });
|
|
330
|
+
*
|
|
331
|
+
* // App logic
|
|
332
|
+
* };
|
|
333
|
+
* ```
|
|
334
|
+
* ```ts
|
|
335
|
+
* // shopify.server.ts
|
|
336
|
+
* import { shopifyApp, BillingInterval } from "@shopify/shopify-app-remix/server";
|
|
337
|
+
*
|
|
338
|
+
* export const MONTHLY_PLAN = 'Monthly subscription';
|
|
339
|
+
* export const ANNUAL_PLAN = 'Annual subscription';
|
|
340
|
+
*
|
|
341
|
+
* const shopify = shopifyApp({
|
|
342
|
+
* // ...etc
|
|
343
|
+
* billing: {
|
|
344
|
+
* [MONTHLY_PLAN]: {
|
|
345
|
+
* lineItems: [
|
|
346
|
+
* amount: 5,
|
|
347
|
+
* currencyCode: 'USD',
|
|
348
|
+
* interval: BillingInterval.Every30Days,
|
|
349
|
+
* ],
|
|
350
|
+
* },
|
|
351
|
+
* [ANNUAL_PLAN]: {
|
|
352
|
+
* lineItems: [
|
|
353
|
+
* amount: 50,
|
|
354
|
+
* currencyCode: 'USD',
|
|
355
|
+
* interval: BillingInterval.Annual,
|
|
356
|
+
* ],
|
|
357
|
+
* },
|
|
358
|
+
* }
|
|
359
|
+
* });
|
|
360
|
+
* export default shopify;
|
|
361
|
+
* export const authenticate = shopify.authenticate;
|
|
362
|
+
* ```
|
|
279
363
|
*/
|
|
280
364
|
request: (options: RequestBillingOptions<Config>) => Promise<never>;
|
|
281
365
|
/**
|
|
@@ -339,5 +423,57 @@ export interface BillingContext<Config extends AppConfigArg> {
|
|
|
339
423
|
* ```
|
|
340
424
|
*/
|
|
341
425
|
cancel: (options: CancelBillingOptions) => Promise<AppSubscription>;
|
|
426
|
+
/**
|
|
427
|
+
* Creates a usage record for an app subscription.
|
|
428
|
+
*
|
|
429
|
+
* @returns Returns a usage record when one was created successfully.
|
|
430
|
+
*
|
|
431
|
+
* @example
|
|
432
|
+
* <caption>Creating a usage record</caption>
|
|
433
|
+
* <description>Create a usage record for the active usage billing plan</description>
|
|
434
|
+
* ```ts
|
|
435
|
+
* // /app/routes/create-usage-record.ts
|
|
436
|
+
* import { ActionFunctionArgs } from "@remix-run/node";
|
|
437
|
+
* import { authenticate, MONTHLY_PLAN } from "../shopify.server";
|
|
438
|
+
*
|
|
439
|
+
* export const action = async ({ request }: ActionFunctionArgs) => {
|
|
440
|
+
* const { billing } = await authenticate.admin(request);
|
|
441
|
+
*
|
|
442
|
+
* const chargeBilling = await billing.createUsageRecord({
|
|
443
|
+
* description: "Usage record for product creation",
|
|
444
|
+
* price: {
|
|
445
|
+
* amount: 1,
|
|
446
|
+
* currencyCode: "USD",
|
|
447
|
+
* },
|
|
448
|
+
* isTest: true,
|
|
449
|
+
* });
|
|
450
|
+
* console.log(chargeBilling);
|
|
451
|
+
*
|
|
452
|
+
* // App logic
|
|
453
|
+
* };
|
|
454
|
+
* ```
|
|
455
|
+
* ```ts
|
|
456
|
+
* // shopify.server.ts
|
|
457
|
+
* import { shopifyApp, BillingInterval } from "@shopify/shopify-app-remix/server";
|
|
458
|
+
*
|
|
459
|
+
* export const USAGE_PLAN = 'Usage subscription';
|
|
460
|
+
*
|
|
461
|
+
* const shopify = shopifyApp({
|
|
462
|
+
* // ...etc
|
|
463
|
+
* billing: {
|
|
464
|
+
* [USAGE_PLAN]: {
|
|
465
|
+
* lineItems: [
|
|
466
|
+
* amount: 5,
|
|
467
|
+
* currencyCode: 'USD',
|
|
468
|
+
* interval: BillingInterval.Usage,
|
|
469
|
+
* ],
|
|
470
|
+
* },
|
|
471
|
+
* }
|
|
472
|
+
* });
|
|
473
|
+
* export default shopify;
|
|
474
|
+
* export const authenticate = shopify.authenticate;
|
|
475
|
+
* ```
|
|
476
|
+
*/
|
|
477
|
+
createUsageRecord: (options: CreateUsageRecordOptions) => Promise<UsageRecord>;
|
|
342
478
|
}
|
|
343
479
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/billing/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,6 @@ import { Session } from '@shopify/shopify-api';
|
|
|
2
2
|
import { AdminApiContext } from '../../../clients';
|
|
3
3
|
import type { BasicParams } from '../../../types';
|
|
4
4
|
export declare function revokeScopesFactory(params: BasicParams, session: Session, admin: AdminApiContext): (scopes: string[]) => Promise<{
|
|
5
|
-
|
|
5
|
+
revoked: string[];
|
|
6
6
|
}>;
|
|
7
7
|
//# sourceMappingURL=revoke.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAE7C,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAE7C,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAIhD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,eAAe,YAEe,MAAM,EAAE;;GA6B9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/scope/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/server/authenticate/admin/scope/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
|
|
@@ -133,6 +133,32 @@ export interface WebhookContextWithSession<Resources extends ShopifyRestResource
|
|
|
133
133
|
* A session with an offline token for the shop.
|
|
134
134
|
*
|
|
135
135
|
* Returned only if there is a session for the shop.
|
|
136
|
+
* Webhook requests can trigger after an app is uninstalled
|
|
137
|
+
* If the app is already uninstalled, the session may be undefined.
|
|
138
|
+
* Therefore, you should check for the session before using it.
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* <caption>Protecting against uninstalled apps.</caption>
|
|
142
|
+
* ```ts
|
|
143
|
+
* // /app/routes/webhooks.tsx
|
|
144
|
+
* import type { ActionFunctionArgs } from "@remix-run/node";
|
|
145
|
+
* import { authenticate } from "~/shopify.server";
|
|
146
|
+
|
|
147
|
+
* export const action = async ({ request }: ActionFunctionArgs) => {
|
|
148
|
+
* const { session } = await authenticate.webhook(request);
|
|
149
|
+
*
|
|
150
|
+
* // Webhook requests can trigger after an app is uninstalled
|
|
151
|
+
* // If the app is already uninstalled, the session may be undefined.
|
|
152
|
+
* if (!session) {
|
|
153
|
+
* throw new Response();
|
|
154
|
+
* }
|
|
155
|
+
*
|
|
156
|
+
* // Handle webhook request
|
|
157
|
+
* console.log("Received webhook webhook");
|
|
158
|
+
*
|
|
159
|
+
* return new Response();
|
|
160
|
+
* };
|
|
161
|
+
* ```
|
|
136
162
|
*/
|
|
137
163
|
session: Session;
|
|
138
164
|
/**
|
|
@@ -151,6 +177,12 @@ export interface WebhookContextWithSession<Resources extends ShopifyRestResource
|
|
|
151
177
|
* export async function action({ request }: ActionFunctionArgs) {
|
|
152
178
|
* const { admin } = await authenticate.webhook(request);
|
|
153
179
|
*
|
|
180
|
+
* // Webhook requests can trigger after an app is uninstalled
|
|
181
|
+
* // If the app is already uninstalled, the session may be undefined.
|
|
182
|
+
* if (!session) {
|
|
183
|
+
* throw new Response();
|
|
184
|
+
* }
|
|
185
|
+
*
|
|
154
186
|
* const response = await admin?.graphql(
|
|
155
187
|
* `#graphql
|
|
156
188
|
* mutation populateProduct($input: ProductInput!) {
|