@shopify/shopify-api 7.5.0 → 7.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/lib/auth/get-embedded-app-url.js +1 -1
- package/lib/auth/get-embedded-app-url.js.map +1 -1
- package/lib/session/decode-session-token.d.ts +4 -1
- package/lib/session/decode-session-token.d.ts.map +1 -1
- package/lib/session/decode-session-token.js +2 -2
- package/lib/session/decode-session-token.js.map +1 -1
- package/lib/session/index.d.ts +1 -1
- package/lib/utils/index.js +1 -1
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/shop-validator.d.ts +1 -1
- package/lib/utils/shop-validator.d.ts.map +1 -1
- package/lib/utils/shop-validator.js +10 -3
- package/lib/utils/shop-validator.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
|
@@ -27,7 +27,7 @@ function getEmbeddedAppUrl(config) {
|
|
|
27
27
|
exports.getEmbeddedAppUrl = getEmbeddedAppUrl;
|
|
28
28
|
function buildEmbeddedAppUrl(config) {
|
|
29
29
|
return (host) => {
|
|
30
|
-
(0, shop_validator_1.sanitizeHost)(
|
|
30
|
+
(0, shop_validator_1.sanitizeHost)()(host, true);
|
|
31
31
|
const decodedHost = (0, decode_host_1.decodeHost)(host);
|
|
32
32
|
return `https://${decodedHost}/apps/${config.apiKey}`;
|
|
33
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-embedded-app-url.js","sourceRoot":"","sources":["get-embedded-app-url.ts"],"names":[],"mappings":";;;;AAAA,gEAA0C;AAE1C,6CAA0D;AAC1D,4DAAqD;AAErD,+CAAyC;AAGzC,SAAgB,iBAAiB,CAAC,MAAuB;IACvD,OAAO,CAAO,EAAyC,EAAmB,EAAE;YAA1D,WAAW,sBAAf,EAAgB,CAAD;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAsB,EAAC,WAAW,CAAC,CAAC;QAE1D,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,aAAa,CAAC,uBAAuB,CAC7C,sDAAsD,CACvD,CAAC;SACH;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,MAAM,IAAI,aAAa,CAAC,mBAAmB,CACzC,gCAAgC,CACjC,CAAC;SACH;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,IAAI,aAAa,CAAC,mBAAmB,CACzC,iDAAiD,CAClD,CAAC;SACH;QAED,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAA,CAAC;AACJ,CAAC;AA3BD,8CA2BC;AAED,SAAgB,mBAAmB,CAAC,MAAuB;IACzD,OAAO,CAAC,IAAY,EAAU,EAAE;QAC9B,IAAA,6BAAY,
|
|
1
|
+
{"version":3,"file":"get-embedded-app-url.js","sourceRoot":"","sources":["get-embedded-app-url.ts"],"names":[],"mappings":";;;;AAAA,gEAA0C;AAE1C,6CAA0D;AAC1D,4DAAqD;AAErD,+CAAyC;AAGzC,SAAgB,iBAAiB,CAAC,MAAuB;IACvD,OAAO,CAAO,EAAyC,EAAmB,EAAE;YAA1D,WAAW,sBAAf,EAAgB,CAAD;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAsB,EAAC,WAAW,CAAC,CAAC;QAE1D,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,aAAa,CAAC,uBAAuB,CAC7C,sDAAsD,CACvD,CAAC;SACH;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,MAAM,IAAI,aAAa,CAAC,mBAAmB,CACzC,gCAAgC,CACjC,CAAC;SACH;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,IAAI,aAAa,CAAC,mBAAmB,CACzC,iDAAiD,CAClD,CAAC;SACH;QAED,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAA,CAAC;AACJ,CAAC;AA3BD,8CA2BC;AAED,SAAgB,mBAAmB,CAAC,MAAuB;IACzD,OAAO,CAAC,IAAY,EAAU,EAAE;QAC9B,IAAA,6BAAY,GAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAA,wBAAU,EAAC,IAAI,CAAC,CAAC;QAErC,OAAO,WAAW,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC;AAPD,kDAOC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { ConfigInterface } from '../base-types';
|
|
2
2
|
import { JwtPayload } from './types';
|
|
3
|
-
export
|
|
3
|
+
export interface DecodeSessionTokenOptions {
|
|
4
|
+
checkAudience?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function decodeSessionToken(config: ConfigInterface): (token: string, { checkAudience }?: DecodeSessionTokenOptions) => Promise<JwtPayload>;
|
|
4
7
|
//# sourceMappingURL=decode-session-token.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode-session-token.d.ts","sourceRoot":"","sources":["decode-session-token.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAI9C,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAInC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"decode-session-token.d.ts","sourceRoot":"","sources":["decode-session-token.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAI9C,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAInC,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,WAE/C,MAAM,sBACW,yBAAyB,KAChD,QAAQ,UAAU,CAAC,CAyBvB"}
|
|
@@ -7,7 +7,7 @@ const ShopifyErrors = tslib_1.__importStar(require("../error"));
|
|
|
7
7
|
const get_hmac_key_1 = require("../utils/get-hmac-key");
|
|
8
8
|
const JWT_PERMITTED_CLOCK_TOLERANCE = 10;
|
|
9
9
|
function decodeSessionToken(config) {
|
|
10
|
-
return (token) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
10
|
+
return (token, { checkAudience = true } = {}) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
11
11
|
let payload;
|
|
12
12
|
try {
|
|
13
13
|
payload = (yield jose.jwtVerify(token, (0, get_hmac_key_1.getHMACKey)(config.apiSecretKey), {
|
|
@@ -19,7 +19,7 @@ function decodeSessionToken(config) {
|
|
|
19
19
|
throw new ShopifyErrors.InvalidJwtError(`Failed to parse session token '${token}': ${error.message}`);
|
|
20
20
|
}
|
|
21
21
|
// The exp and nbf fields are validated by the JWT library
|
|
22
|
-
if (payload.aud !== config.apiKey) {
|
|
22
|
+
if (checkAudience && payload.aud !== config.apiKey) {
|
|
23
23
|
throw new ShopifyErrors.InvalidJwtError('Session token had invalid API key');
|
|
24
24
|
}
|
|
25
25
|
return payload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode-session-token.js","sourceRoot":"","sources":["decode-session-token.ts"],"names":[],"mappings":";;;;AAAA,mDAA6B;AAG7B,gEAA0C;AAC1C,wDAAiD;AAIjD,MAAM,6BAA6B,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"decode-session-token.js","sourceRoot":"","sources":["decode-session-token.ts"],"names":[],"mappings":";;;;AAAA,mDAA6B;AAG7B,gEAA0C;AAC1C,wDAAiD;AAIjD,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAMzC,SAAgB,kBAAkB,CAAC,MAAuB;IACxD,OAAO,CACL,KAAa,EACb,EAAC,aAAa,GAAG,IAAI,KAA+B,EAAE,EACjC,EAAE;QACvB,IAAI,OAAmB,CAAC;QACxB,IAAI;YACF,OAAO,GAAG,CACR,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAA,yBAAU,EAAC,MAAM,CAAC,YAAY,CAAC,EAAE;gBAC3D,UAAU,EAAE,CAAC,OAAO,CAAC;gBACrB,cAAc,EAAE,6BAA6B;aAC9C,CAAC,CACH,CAAC,OAAgC,CAAC;SACpC;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,aAAa,CAAC,eAAe,CACrC,kCAAkC,KAAK,MAAM,KAAK,CAAC,OAAO,EAAE,CAC7D,CAAC;SACH;QAED,0DAA0D;QAE1D,IAAI,aAAa,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM,EAAE;YAClD,MAAM,IAAI,aAAa,CAAC,eAAe,CACrC,mCAAmC,CACpC,CAAC;SACH;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAA,CAAC;AACJ,CAAC;AA7BD,gDA6BC"}
|
package/lib/session/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare function shopifySession(config: ConfigInterface): {
|
|
|
4
4
|
getCurrentId: ({ isOnline, ...adapterArgs }: import("./types").GetCurrentSessionIdParams) => Promise<string | undefined>;
|
|
5
5
|
getOfflineId: (shop: string) => string;
|
|
6
6
|
getJwtSessionId: (shop: string, userId: string) => string;
|
|
7
|
-
decodeSessionToken: (token: string) => Promise<import("./types").JwtPayload>;
|
|
7
|
+
decodeSessionToken: (token: string, { checkAudience }?: import("./decode-session-token").DecodeSessionTokenOptions) => Promise<import("./types").JwtPayload>;
|
|
8
8
|
};
|
|
9
9
|
export declare type ShopifySession = ReturnType<typeof shopifySession>;
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/utils/index.js
CHANGED
|
@@ -7,7 +7,7 @@ const version_compatible_1 = require("./version-compatible");
|
|
|
7
7
|
function shopifyUtils(config) {
|
|
8
8
|
return {
|
|
9
9
|
sanitizeShop: (0, shop_validator_1.sanitizeShop)(config),
|
|
10
|
-
sanitizeHost: (0, shop_validator_1.sanitizeHost)(
|
|
10
|
+
sanitizeHost: (0, shop_validator_1.sanitizeHost)(),
|
|
11
11
|
validateHmac: (0, hmac_validator_1.validateHmac)(config),
|
|
12
12
|
versionCompatible: (0, version_compatible_1.versionCompatible)(config),
|
|
13
13
|
versionPriorTo: (0, version_compatible_1.versionPriorTo)(config),
|
package/lib/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAEA,qDAA4D;AAC5D,qDAA8C;AAC9C,6DAAuE;AAEvE,SAAgB,YAAY,CAAC,MAAuB;IAClD,OAAO;QACL,YAAY,EAAE,IAAA,6BAAY,EAAC,MAAM,CAAC;QAClC,YAAY,EAAE,IAAA,6BAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAEA,qDAA4D;AAC5D,qDAA8C;AAC9C,6DAAuE;AAEvE,SAAgB,YAAY,CAAC,MAAuB;IAClD,OAAO;QACL,YAAY,EAAE,IAAA,6BAAY,EAAC,MAAM,CAAC;QAClC,YAAY,EAAE,IAAA,6BAAY,GAAE;QAC5B,YAAY,EAAE,IAAA,6BAAY,EAAC,MAAM,CAAC;QAClC,iBAAiB,EAAE,IAAA,sCAAiB,EAAC,MAAM,CAAC;QAC5C,cAAc,EAAE,IAAA,mCAAc,EAAC,MAAM,CAAC;KACvC,CAAC;AACJ,CAAC;AARD,oCAQC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ConfigInterface } from '../base-types';
|
|
2
2
|
export declare function sanitizeShop(config: ConfigInterface): (shop: string, throwOnInvalid?: boolean) => string | null;
|
|
3
|
-
export declare function sanitizeHost(
|
|
3
|
+
export declare function sanitizeHost(): (host: string, throwOnInvalid?: boolean) => string | null;
|
|
4
4
|
//# sourceMappingURL=shop-validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shop-validator.d.ts","sourceRoot":"","sources":["shop-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAI9C,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,UACpC,MAAM,+BAA2B,MAAM,GAAG,IAAI,CAqB7D;AAED,wBAAgB,YAAY,
|
|
1
|
+
{"version":3,"file":"shop-validator.d.ts","sourceRoot":"","sources":["shop-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAI9C,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,UACpC,MAAM,+BAA2B,MAAM,GAAG,IAAI,CAqB7D;AAED,wBAAgB,YAAY,WACZ,MAAM,+BAA2B,MAAM,GAAG,IAAI,CAyB7D"}
|
|
@@ -18,13 +18,20 @@ function sanitizeShop(config) {
|
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
exports.sanitizeShop = sanitizeShop;
|
|
21
|
-
function sanitizeHost(
|
|
21
|
+
function sanitizeHost() {
|
|
22
22
|
return (host, throwOnInvalid = false) => {
|
|
23
23
|
const base64regex = /^[0-9a-zA-Z+/]+={0,2}$/;
|
|
24
24
|
let sanitizedHost = base64regex.test(host) ? host : null;
|
|
25
25
|
if (sanitizedHost) {
|
|
26
|
-
const
|
|
27
|
-
|
|
26
|
+
const { hostname } = new URL(`https://${(0, decode_host_1.decodeHost)(sanitizedHost)}`);
|
|
27
|
+
const originsRegex = [
|
|
28
|
+
'myshopify\\.com',
|
|
29
|
+
'shopify\\.com',
|
|
30
|
+
'myshopify\\.io',
|
|
31
|
+
'spin\\.dev',
|
|
32
|
+
];
|
|
33
|
+
const hostRegex = new RegExp(`\\.(${originsRegex.join('|')})$`);
|
|
34
|
+
if (!hostRegex.test(hostname)) {
|
|
28
35
|
sanitizedHost = null;
|
|
29
36
|
}
|
|
30
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shop-validator.js","sourceRoot":"","sources":["shop-validator.ts"],"names":[],"mappings":";;;AACA,oCAA4D;AAC5D,qDAA+C;AAE/C,SAAgB,YAAY,CAAC,MAAuB;IAClD,OAAO,CAAC,IAAY,EAAE,cAAc,GAAG,KAAK,EAAiB,EAAE;QAC7D,MAAM,YAAY,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,iBAAiB,EAAE;YAC5B,YAAY,CAAC,IAAI,CACf,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACxC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CACjD,CACF,CAAC;SACH;QAED,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,iCAAiC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAChE,CAAC;QAEF,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,IAAI,CAAC,aAAa,IAAI,cAAc,EAAE;YACpC,MAAM,IAAI,wBAAgB,CAAC,gCAAgC,CAAC,CAAC;SAC9D;QAED,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AAtBD,oCAsBC;AAED,SAAgB,YAAY
|
|
1
|
+
{"version":3,"file":"shop-validator.js","sourceRoot":"","sources":["shop-validator.ts"],"names":[],"mappings":";;;AACA,oCAA4D;AAC5D,qDAA+C;AAE/C,SAAgB,YAAY,CAAC,MAAuB;IAClD,OAAO,CAAC,IAAY,EAAE,cAAc,GAAG,KAAK,EAAiB,EAAE;QAC7D,MAAM,YAAY,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,iBAAiB,EAAE;YAC5B,YAAY,CAAC,IAAI,CACf,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACxC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CACjD,CACF,CAAC;SACH;QAED,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,iCAAiC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAChE,CAAC;QAEF,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,IAAI,CAAC,aAAa,IAAI,cAAc,EAAE;YACpC,MAAM,IAAI,wBAAgB,CAAC,gCAAgC,CAAC,CAAC;SAC9D;QAED,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AAtBD,oCAsBC;AAED,SAAgB,YAAY;IAC1B,OAAO,CAAC,IAAY,EAAE,cAAc,GAAG,KAAK,EAAiB,EAAE;QAC7D,MAAM,WAAW,GAAG,wBAAwB,CAAC;QAE7C,IAAI,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACzD,IAAI,aAAa,EAAE;YACjB,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,GAAG,CAAC,WAAW,IAAA,wBAAU,EAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEnE,MAAM,YAAY,GAAG;gBACnB,iBAAiB;gBACjB,eAAe;gBACf,gBAAgB;gBAChB,YAAY;aACb,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC7B,aAAa,GAAG,IAAI,CAAC;aACtB;SACF;QACD,IAAI,CAAC,aAAa,IAAI,cAAc,EAAE;YACpC,MAAM,IAAI,wBAAgB,CAAC,gCAAgC,CAAC,CAAC;SAC9D;QAED,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AA1BD,oCA0BC"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SHOPIFY_API_LIBRARY_VERSION = "7.5.
|
|
1
|
+
export declare const SHOPIFY_API_LIBRARY_VERSION = "7.5.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shopify/shopify-api",
|
|
3
|
-
"version": "7.5.
|
|
3
|
+
"version": "7.5.1",
|
|
4
4
|
"description": "Shopify API Library for Node - accelerate development with support for authentication, graphql proxy, webhooks",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|