@agnostack/next-shopify 1.8.19 → 1.9.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{handlers → lib/handlers}/api/appInstallation.d.ts +1 -0
- package/dist/lib/handlers/api/appInstallation.d.ts.map +1 -0
- package/dist/{handlers → lib/handlers}/api/appInstallation.js +7 -5
- package/dist/lib/handlers/api/appInstallation.js.map +1 -0
- package/dist/{handlers → lib/handlers}/api/auth.d.ts +1 -0
- package/dist/lib/handlers/api/auth.d.ts.map +1 -0
- package/dist/lib/handlers/api/auth.js +39 -0
- package/dist/lib/handlers/api/auth.js.map +1 -0
- package/dist/{handlers → lib/handlers}/api/billing.d.ts +1 -0
- package/dist/lib/handlers/api/billing.d.ts.map +1 -0
- package/dist/{handlers → lib/handlers}/api/billing.js +15 -27
- package/dist/lib/handlers/api/billing.js.map +1 -0
- package/dist/{handlers → lib/handlers}/api/callback.d.ts +1 -0
- package/dist/lib/handlers/api/callback.d.ts.map +1 -0
- package/dist/{handlers → lib/handlers}/api/callback.js +38 -47
- package/dist/lib/handlers/api/callback.js.map +1 -0
- package/dist/{handlers → lib/handlers}/api/graph.d.ts +1 -0
- package/dist/lib/handlers/api/graph.d.ts.map +1 -0
- package/dist/{handlers → lib/handlers}/api/graph.js +20 -29
- package/dist/lib/handlers/api/graph.js.map +1 -0
- package/dist/{handlers → lib/handlers}/api/index.d.ts +1 -0
- package/dist/lib/handlers/api/index.d.ts.map +1 -0
- package/dist/lib/handlers/api/index.js +19 -0
- package/dist/lib/handlers/api/index.js.map +1 -0
- package/dist/{handlers → lib/handlers}/api/proxy.d.ts +1 -0
- package/dist/lib/handlers/api/proxy.d.ts.map +1 -0
- package/dist/{handlers → lib/handlers}/api/proxy.js +22 -34
- package/dist/lib/handlers/api/proxy.js.map +1 -0
- package/dist/{handlers → lib/handlers}/api/rest.d.ts +1 -0
- package/dist/lib/handlers/api/rest.d.ts.map +1 -0
- package/dist/{handlers → lib/handlers}/api/rest.js +15 -24
- package/dist/lib/handlers/api/rest.js.map +1 -0
- package/dist/lib/handlers/api/types.d.ts +1 -0
- package/dist/lib/handlers/api/types.d.ts.map +1 -0
- package/dist/lib/handlers/api/types.js +1 -0
- package/dist/lib/handlers/api/types.js.map +1 -0
- package/dist/{handlers → lib/handlers}/api/uninstall.d.ts +1 -0
- package/dist/lib/handlers/api/uninstall.d.ts.map +1 -0
- package/dist/{handlers → lib/handlers}/api/uninstall.js +13 -25
- package/dist/lib/handlers/api/uninstall.js.map +1 -0
- package/dist/{handlers → lib/handlers}/api/webhook.d.ts +1 -0
- package/dist/lib/handlers/api/webhook.d.ts.map +1 -0
- package/dist/{handlers → lib/handlers}/api/webhook.js +13 -25
- package/dist/lib/handlers/api/webhook.js.map +1 -0
- package/dist/{handlers → lib/handlers}/index.d.ts +1 -0
- package/dist/lib/handlers/index.d.ts.map +1 -0
- package/dist/lib/handlers/index.js +6 -0
- package/dist/lib/handlers/index.js.map +1 -0
- package/dist/{handlers → lib/handlers}/ssr/index.d.ts +1 -0
- package/dist/lib/handlers/ssr/index.d.ts.map +1 -0
- package/dist/lib/handlers/ssr/index.js +6 -0
- package/dist/lib/handlers/ssr/index.js.map +1 -0
- package/dist/{handlers → lib/handlers}/ssr/protect.d.ts +2 -1
- package/dist/lib/handlers/ssr/protect.d.ts.map +1 -0
- package/dist/{handlers → lib/handlers}/ssr/protect.js +19 -17
- package/dist/lib/handlers/ssr/protect.js.map +1 -0
- package/dist/lib/handlers/ssr/types.d.ts +1 -0
- package/dist/lib/handlers/ssr/types.d.ts.map +1 -0
- package/dist/lib/handlers/ssr/types.js +1 -0
- package/dist/lib/handlers/ssr/types.js.map +1 -0
- package/dist/{handlers → lib/handlers}/ssr/wrap.d.ts +2 -1
- package/dist/lib/handlers/ssr/wrap.d.ts.map +1 -0
- package/dist/lib/handlers/ssr/wrap.js +17 -0
- package/dist/lib/handlers/ssr/wrap.js.map +1 -0
- package/dist/lib/handlers/types.d.ts +1 -0
- package/dist/lib/handlers/types.d.ts.map +1 -0
- package/dist/lib/handlers/types.js +1 -0
- package/dist/lib/handlers/types.js.map +1 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +13 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/types.d.ts +1 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +1 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/{utils → lib/utils}/billing.d.ts +3 -2
- package/dist/lib/utils/billing.d.ts.map +1 -0
- package/dist/{utils → lib/utils}/billing.js +16 -16
- package/dist/lib/utils/billing.js.map +1 -0
- package/dist/{utils → lib/utils}/crypto.d.ts +3 -2
- package/dist/lib/utils/crypto.d.ts.map +1 -0
- package/dist/{utils → lib/utils}/crypto.js +5 -7
- package/dist/lib/utils/crypto.js.map +1 -0
- package/dist/{utils → lib/utils}/firebase.d.ts +3 -2
- package/dist/lib/utils/firebase.d.ts.map +1 -0
- package/dist/{utils → lib/utils}/firebase.js +30 -44
- package/dist/lib/utils/firebase.js.map +1 -0
- package/dist/lib/utils/graph.d.ts +13 -0
- package/dist/lib/utils/graph.d.ts.map +1 -0
- package/dist/{utils → lib/utils}/graph.js +12 -41
- package/dist/lib/utils/graph.js.map +1 -0
- package/dist/{utils → lib/utils}/index.d.ts +1 -3
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +11 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/utils/session.d.ts +24 -0
- package/dist/lib/utils/session.d.ts.map +1 -0
- package/dist/lib/utils/session.js +126 -0
- package/dist/lib/utils/session.js.map +1 -0
- package/dist/{utils → lib/utils}/shopify-api-js/oauth.d.ts +1 -0
- package/dist/lib/utils/shopify-api-js/oauth.d.ts.map +1 -0
- package/dist/{utils → lib/utils}/shopify-api-js/oauth.js +13 -26
- package/dist/lib/utils/shopify-api-js/oauth.js.map +1 -0
- package/dist/{utils → lib/utils}/shopify.d.ts +13 -1
- package/dist/lib/utils/shopify.d.ts.map +1 -0
- package/dist/{utils → lib/utils}/shopify.js +43 -39
- package/dist/lib/utils/shopify.js.map +1 -0
- package/dist/lib/utils/types.d.ts +1 -0
- package/dist/lib/utils/types.d.ts.map +1 -0
- package/dist/lib/utils/types.js +1 -0
- package/dist/lib/utils/types.js.map +1 -0
- package/dist/{withShopify.d.ts → lib/withShopify.d.ts} +1 -0
- package/dist/lib/withShopify.d.ts.map +1 -0
- package/dist/lib/withShopify.js +211 -0
- package/dist/lib/withShopify.js.map +1 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/types.d.ts +1 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +1 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/{utils → shared}/constants.d.ts +1 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/{utils → shared}/constants.js +0 -1
- package/dist/shared/constants.js.map +1 -0
- package/dist/{utils → shared}/display.d.ts +1 -0
- package/dist/shared/display.d.ts.map +1 -0
- package/dist/{utils → shared}/display.js +35 -37
- package/dist/shared/display.js.map +1 -0
- package/dist/{utils → shared}/errors.d.ts +1 -11
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/{utils → shared}/errors.js +1 -20
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/index.d.ts +4 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +7 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +1 -0
- package/dist/shared/types.js.map +1 -0
- package/package.json +22 -6
- package/dist/handlers/api/appInstallation.js.map +0 -1
- package/dist/handlers/api/auth.js +0 -48
- package/dist/handlers/api/auth.js.map +0 -1
- package/dist/handlers/api/billing.js.map +0 -1
- package/dist/handlers/api/callback.js.map +0 -1
- package/dist/handlers/api/graph.js.map +0 -1
- package/dist/handlers/api/index.js +0 -28
- package/dist/handlers/api/index.js.map +0 -1
- package/dist/handlers/api/proxy.js.map +0 -1
- package/dist/handlers/api/rest.js.map +0 -1
- package/dist/handlers/api/uninstall.js.map +0 -1
- package/dist/handlers/api/webhook.js.map +0 -1
- package/dist/handlers/index.js +0 -15
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/ssr/index.js +0 -15
- package/dist/handlers/ssr/index.js.map +0 -1
- package/dist/handlers/ssr/protect.js.map +0 -1
- package/dist/handlers/ssr/wrap.js +0 -15
- package/dist/handlers/ssr/wrap.js.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -30
- package/dist/index.js.map +0 -1
- package/dist/utils/billing.js.map +0 -1
- package/dist/utils/constants.js.map +0 -1
- package/dist/utils/crypto.js.map +0 -1
- package/dist/utils/display.js.map +0 -1
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/firebase.js.map +0 -1
- package/dist/utils/graph.d.ts +0 -25
- package/dist/utils/graph.js.map +0 -1
- package/dist/utils/index.js +0 -23
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/session.d.ts +0 -23
- package/dist/utils/session.js +0 -133
- package/dist/utils/session.js.map +0 -1
- package/dist/utils/shopify-api-js/oauth.js.map +0 -1
- package/dist/utils/shopify.js.map +0 -1
- package/dist/withShopify.js +0 -221
- package/dist/withShopify.js.map +0 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getShopifyHelpers = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const js_base64_1 = require("js-base64");
|
|
6
|
+
const shopify_api_1 = require("@shopify/shopify-api");
|
|
7
|
+
const luxon_1 = require("luxon");
|
|
8
|
+
const shared_1 = require("../../shared");
|
|
9
|
+
const billing_1 = require("./billing");
|
|
10
|
+
const shopify_1 = require("./shopify");
|
|
11
|
+
const firebase_1 = require("./firebase");
|
|
12
|
+
const crypto_1 = require("./crypto");
|
|
13
|
+
const getShopifyHelpers = (serverRuntimeConfig, { shop }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
const shopify = (0, shopify_1.getInitializedShopify)(serverRuntimeConfig);
|
|
16
|
+
const { FB_CONFIG, FB_ROOT_COLLECTION, SESSION_CONFIG, APP_ID, PAYMENT_CONFIG } = serverRuntimeConfig;
|
|
17
|
+
const shopId = (_b = (_a = shopify === null || shopify === void 0 ? void 0 : shopify.utils) === null || _a === void 0 ? void 0 : _a.sanitizeShop) === null || _b === void 0 ? void 0 : _b.call(_a, shop);
|
|
18
|
+
const cryptoHandler = crypto_1.CryptoHandler.getInstance(SESSION_CONFIG);
|
|
19
|
+
const sessionHandler = firebase_1.FirebaseSessionHandler.getInstance(FB_CONFIG, {
|
|
20
|
+
collection: FB_ROOT_COLLECTION,
|
|
21
|
+
configurationId: APP_ID,
|
|
22
|
+
});
|
|
23
|
+
//#region internal shopifyHelper implementations
|
|
24
|
+
const decryptVerifySession = ({ req, res } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
25
|
+
var _c, _d, _e;
|
|
26
|
+
try {
|
|
27
|
+
const isOnline = ((req != undefined) && (res != undefined));
|
|
28
|
+
const sessionId = (isOnline)
|
|
29
|
+
? (yield shopify.session.getCurrentId({
|
|
30
|
+
isOnline,
|
|
31
|
+
rawRequest: req,
|
|
32
|
+
rawResponse: res,
|
|
33
|
+
})) : (yield shopify.session.getOfflineId(shop) // NOTE: not sure if this is working yet?
|
|
34
|
+
);
|
|
35
|
+
const _f = (_c = (yield (0, firebase_1.loadCallback)(sessionHandler, shopId, sessionId))) !== null && _c !== void 0 ? _c : {}, { accessToken: encryptedAccessToken } = _f, session = tslib_1.__rest(_f, ["accessToken"]);
|
|
36
|
+
if ((0, shared_1.stringEmpty)(encryptedAccessToken)) {
|
|
37
|
+
throw new shared_1.ShopifySessionMissingError('Missing session');
|
|
38
|
+
}
|
|
39
|
+
if ((0, shared_1.stringNotEmpty)(session === null || session === void 0 ? void 0 : session.shop) && (session.shop !== shop)) {
|
|
40
|
+
throw new Error('Invalid shop');
|
|
41
|
+
}
|
|
42
|
+
// NOTE only online sessions have expirations
|
|
43
|
+
const sessionExpired = isOnline && (!(session === null || session === void 0 ? void 0 : session.expires) || (luxon_1.DateTime.fromISO(session.expires) < luxon_1.DateTime.now()));
|
|
44
|
+
const sessionActive = (!sessionExpired && (0, shared_1.arraysMatch)((0, shared_1.splitCommas)((_e = (_d = shopify.config) === null || _d === void 0 ? void 0 : _d.scopes) === null || _e === void 0 ? void 0 : _e.toString()), (0, shared_1.splitCommas)(session === null || session === void 0 ? void 0 : session.scope)));
|
|
45
|
+
if (!sessionActive) {
|
|
46
|
+
throw new shared_1.ShopifySessionAuthenticationError('Inactive session');
|
|
47
|
+
}
|
|
48
|
+
return Object.assign(Object.assign({}, session), { accessToken: cryptoHandler.decrypt(encryptedAccessToken) });
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error instanceof shared_1.ShopifySessionAuthenticationError) {
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
throw new shared_1.ShopifyAuthenticationError(error === null || error === void 0 ? void 0 : error.message);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
// TODO: handle encrypting other keys
|
|
58
|
+
const ensureEncryptedSession = (_session) => {
|
|
59
|
+
const { accessToken } = _session, session = tslib_1.__rest(_session, ["accessToken"]);
|
|
60
|
+
return Object.assign(Object.assign({}, session), accessToken && {
|
|
61
|
+
accessToken: cryptoHandler.encrypt(accessToken),
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
const encryptStoreSession = (session) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
65
|
+
return ((0, firebase_1.storeCallback)(sessionHandler, shopId, ensureEncryptedSession(session)));
|
|
66
|
+
});
|
|
67
|
+
// TODO: handle encrypting other keys
|
|
68
|
+
const encryptUpdateSession = (session) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
69
|
+
return ((0, firebase_1.updateCallback)(sessionHandler, shopId, ensureEncryptedSession(session)));
|
|
70
|
+
});
|
|
71
|
+
const buildEmbeddedAppUrl = (_appPath) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
72
|
+
if ((0, shared_1.stringEmpty)(shop)) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const embeddedAppBaseUrl = yield shopify.auth.buildEmbeddedAppUrl((0, js_base64_1.encode)(`${shop}/admin`));
|
|
76
|
+
const appPath = (0, shared_1.removeLeadingSlash)(_appPath);
|
|
77
|
+
return `${embeddedAppBaseUrl}${(0, shared_1.stringNotEmpty)(appPath) ? `/${appPath}` : ''}`;
|
|
78
|
+
});
|
|
79
|
+
const getVerifiedClients = ({ req, res, apiVersion } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
80
|
+
var _g;
|
|
81
|
+
if ((0, shared_1.stringEmpty)(shop)) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const session = yield decryptVerifySession({ req, res });
|
|
86
|
+
const Graphql = new shopify.clients.Graphql(Object.assign({ session }, apiVersion && { apiVersion }));
|
|
87
|
+
const isOnline = (req != undefined) && (res != undefined);
|
|
88
|
+
if (isOnline && (0, shared_1.isTrue)((_g = serverRuntimeConfig.PAYMENT_CONFIG) === null || _g === void 0 ? void 0 : _g.required)) {
|
|
89
|
+
const confirmationUrl = yield (0, billing_1.ensureBilling)(session);
|
|
90
|
+
if ((0, shared_1.stringNotEmpty)(confirmationUrl)) {
|
|
91
|
+
throw new shared_1.ShopifyAuthenticationError('Invalid payment status', { redirectUrl: confirmationUrl });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// NOTE making a test call to ensure a valid session for free apps
|
|
96
|
+
yield Graphql.query({ data: shopify_1.SHOP_QUERY });
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
Graphql,
|
|
100
|
+
Rest: new shopify.clients.Rest(Object.assign({ session }, apiVersion && { apiVersion })),
|
|
101
|
+
// TODO: add support for Storefront client (takes different params)
|
|
102
|
+
// Storefront: shopify.clients.Storefront({ ...apiVersion && { apiVersion } }),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (error instanceof shopify_api_1.HttpResponseError &&
|
|
107
|
+
error.response.code === 401) {
|
|
108
|
+
throw new shared_1.ShopifyAuthenticationError('Not authenticated');
|
|
109
|
+
}
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
//#endregion internal shopifyHelper implementations
|
|
114
|
+
return Object.assign({ shopify, getAppUrl: () => undefined, getVerifiedClients: () => undefined, loadSession: () => ({}), storeSession: () => ({}), updateSession: () => ({}), deleteSessions: () => undefined, findSessionIds: () => ([]), ensureBilling: () => undefined }, shopify && {
|
|
115
|
+
getVerifiedClients,
|
|
116
|
+
getAppUrl: buildEmbeddedAppUrl,
|
|
117
|
+
loadSession: decryptVerifySession,
|
|
118
|
+
storeSession: encryptStoreSession,
|
|
119
|
+
updateSession: (sessionId, data) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return encryptUpdateSession(Object.assign(Object.assign({}, data), { id: sessionId })); }),
|
|
120
|
+
deleteSessions: (sessionIds) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, firebase_1.deleteSessionsCallback)(sessionHandler, shopId, sessionIds); }),
|
|
121
|
+
findSessionIds: (_shop) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { var _h, _j; return (0, firebase_1.findSessionIdsByShop)(sessionHandler, (_j = (_h = shopify === null || shopify === void 0 ? void 0 : shopify.utils) === null || _h === void 0 ? void 0 : _h.sanitizeShop) === null || _j === void 0 ? void 0 : _j.call(_h, _shop)); }),
|
|
122
|
+
ensureBilling: (session, skipBillingCheck) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, billing_1.ensureBilling)(PAYMENT_CONFIG, { session, shopify, skipBillingCheck }); }),
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
exports.getShopifyHelpers = getShopifyHelpers;
|
|
126
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/lib/utils/session.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/lib/utils/shopify-api-js/oauth.js"],"names":[],"mappings":"AAiBO;;;;;;;iBAuDN"}
|
|
@@ -1,48 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
-
var t = {};
|
|
4
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
-
t[p] = s[p];
|
|
6
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
-
t[p[i]] = s[p[i]];
|
|
10
|
-
}
|
|
11
|
-
return t;
|
|
12
|
-
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
3
|
exports.beginAuth = void 0;
|
|
18
|
-
const
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const isbot_1 = tslib_1.__importDefault(require("isbot"));
|
|
19
6
|
const runtime_1 = require("@shopify/shopify-api/runtime");
|
|
20
7
|
const shopify_api_1 = require("@shopify/shopify-api");
|
|
21
8
|
const crypto_1 = require("../crypto");
|
|
22
9
|
const shopify_1 = require("../shopify");
|
|
23
10
|
// NOTE this is a custom implementation of shopify.auth.begin from @shopify/shopify-api
|
|
24
11
|
// for leveraging a custom auth state
|
|
25
|
-
const beginAuth =
|
|
26
|
-
var { config, isOnline, callbackPath, shop: shopProp, state: stateProp } = _a, adapterArgs = __rest(_a, ["config", "isOnline", "callbackPath", "shop", "state"]);
|
|
12
|
+
const beginAuth = (_a) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
13
|
+
var { config, isOnline, callbackPath, shop: shopProp, state: stateProp } = _a, adapterArgs = tslib_1.__rest(_a, ["config", "isOnline", "callbackPath", "shop", "state"]);
|
|
27
14
|
if (config.isCustomStoreApp) {
|
|
28
15
|
throw new shopify_api_1.PrivateAppError('Cannot perform OAuth for private apps');
|
|
29
16
|
}
|
|
30
|
-
const request =
|
|
31
|
-
const response =
|
|
32
|
-
if (isbot_1.default(request.headers['User-Agent'])) {
|
|
17
|
+
const request = yield (0, runtime_1.abstractConvertRequest)(adapterArgs);
|
|
18
|
+
const response = yield (0, runtime_1.abstractConvertIncomingResponse)(adapterArgs);
|
|
19
|
+
if ((0, isbot_1.default)(request.headers['User-Agent'])) {
|
|
33
20
|
console.log(`Possible bot request to beginAuth: `, {
|
|
34
21
|
userAgent: request.headers['User-Agent'],
|
|
35
22
|
});
|
|
36
23
|
response.statusCode = 410;
|
|
37
|
-
return runtime_1.abstractConvertResponse(response, adapterArgs);
|
|
24
|
+
return (0, runtime_1.abstractConvertResponse)(response, adapterArgs);
|
|
38
25
|
}
|
|
39
26
|
const cookies = new runtime_1.Cookies(request, response, {
|
|
40
27
|
keys: [config.apiSecretKey],
|
|
41
28
|
secure: true,
|
|
42
29
|
});
|
|
43
|
-
const { shop } = shopify_1.getSanitizedShopData(shopProp);
|
|
44
|
-
const state = stateProp !== null && stateProp !== void 0 ? stateProp : crypto_1.getNonce();
|
|
45
|
-
|
|
30
|
+
const { shop } = (0, shopify_1.getSanitizedShopData)(shopProp);
|
|
31
|
+
const state = stateProp !== null && stateProp !== void 0 ? stateProp : (0, crypto_1.getNonce)();
|
|
32
|
+
yield cookies.setAndSign(shopify_api_1.STATE_COOKIE_NAME, state, {
|
|
46
33
|
expires: new Date(Date.now() + 60000),
|
|
47
34
|
sameSite: 'lax',
|
|
48
35
|
secure: true,
|
|
@@ -58,7 +45,7 @@ const beginAuth = async (_a) => {
|
|
|
58
45
|
response.statusCode = 302;
|
|
59
46
|
response.statusText = 'Found';
|
|
60
47
|
response.headers = Object.assign(Object.assign(Object.assign({}, response.headers), cookies.response.headers), { Location: `https://${shop}/admin/oauth/authorize?${queryParams}` });
|
|
61
|
-
return runtime_1.abstractConvertResponse(response, adapterArgs);
|
|
62
|
-
};
|
|
48
|
+
return (0, runtime_1.abstractConvertResponse)(response, adapterArgs);
|
|
49
|
+
});
|
|
63
50
|
exports.beginAuth = beginAuth;
|
|
64
51
|
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/lib/utils/shopify-api-js/oauth.js"],"names":[],"mappings":";;;;AAAA,0DAAyB;AACzB,0DAKqC;AACrC,sDAG6B;AAE7B,sCAAoC;AACpC,wCAAiD;AAEjD,uFAAuF;AACvF,qCAAqC;AAC9B,MAAM,SAAS,GAAG,CAAO,EAO/B,EAAE,EAAE;QAP2B,EAC9B,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,OAEjB,EADI,WAAW,sBANgB,uDAO/B,CADe;IAEd,IAAI,MAAM,CAAC,gBAAgB,EAAE;QAC3B,MAAM,IAAI,6BAAe,CAAC,uCAAuC,CAAC,CAAA;KACnE;IAED,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAsB,EAAC,WAAW,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,MAAM,IAAA,yCAA+B,EAAC,WAAW,CAAC,CAAA;IAEnE,IAAI,IAAA,eAAK,EAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE;QACxC,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE;YACjD,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;SACzC,CAAC,CAAA;QACF,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;QACzB,OAAO,IAAA,iCAAuB,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;KACtD;IAED,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,OAAO,EAAE,QAAQ,EAAE;QAC7C,IAAI,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QAC3B,MAAM,EAAE,IAAI;KACb,CAAC,CAAA;IAEF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,8BAAoB,EAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAA,iBAAQ,GAAE,CAAA;IAErC,MAAM,OAAO,CAAC,UAAU,CAAC,+BAAiB,EAAE,KAAK,EAAE;QACjD,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACrC,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,YAAY;KACnB,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;QACtC,SAAS,EAAE,MAAM,CAAC,MAAM;QACxB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC/B,YAAY,EAAE,GAAG,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,QAAQ,GAAG,YAAY,EAAE;QACxE,KAAK;QACL,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;KAC9C,CAAC,CAAC,QAAQ,EAAE,CAAA;IAEb,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;IACzB,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAA;IAC7B,QAAQ,CAAC,OAAO,iDACX,QAAQ,CAAC,OAAO,GAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,KAC3B,QAAQ,EAAE,WAAW,IAAI,0BAA0B,WAAW,EAAE,GACjE,CAAA;IAED,OAAO,IAAA,iCAAuB,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;AACvD,CAAC,CAAA,CAAA;AAvDY,QAAA,SAAS,aAuDrB"}
|
|
@@ -24,7 +24,7 @@ export function decodeShopData(token: any): {
|
|
|
24
24
|
host: any;
|
|
25
25
|
store_name: string;
|
|
26
26
|
};
|
|
27
|
-
export function getInitializedShopify(props: any): import("@shopify/shopify-api").Shopify<import("@shopify/shopify-api").ShopifyRestResources
|
|
27
|
+
export function getInitializedShopify(props: any): import("@shopify/shopify-api").Shopify<import("@shopify/shopify-api").ShopifyRestResources> | undefined;
|
|
28
28
|
export function getWebhookHandlers({ APP_WEBHOOKS }?: {
|
|
29
29
|
APP_WEBHOOKS: any;
|
|
30
30
|
}): {};
|
|
@@ -32,4 +32,16 @@ export function getCallback(data: any, { reAuth, isOnline }: {
|
|
|
32
32
|
reAuth: any;
|
|
33
33
|
isOnline: any;
|
|
34
34
|
}): any;
|
|
35
|
+
export function getAuthErrorResponse(serverRuntimeConfig: any, { error, shop }: {
|
|
36
|
+
error: any;
|
|
37
|
+
shop: any;
|
|
38
|
+
}): {
|
|
39
|
+
statusCode: number;
|
|
40
|
+
message: any;
|
|
41
|
+
headers: {
|
|
42
|
+
'X-Shopify-API-Request-Failure-Reauthorize': string;
|
|
43
|
+
'X-Shopify-API-Request-Failure-Reauthorize-Url': any;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
35
46
|
export const SHOP_QUERY: "\n {\n shop {\n name\n }\n }\n";
|
|
47
|
+
//# sourceMappingURL=shopify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shopify.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/shopify.js"],"names":[],"mappings":"AAuBO;;WAIN;AAGM;;;YAQN;AAGM;;;EAcN;AAEM;;;;;;;;;;;;;;EA+BN;AAEM,2JAON;AAEM;;OA8DN;AAEM;;;QAYN;AAEM;;;;;;;;;;EAiBN;AAED,uEAMC"}
|
|
@@ -1,30 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
-
var t = {};
|
|
4
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
-
t[p] = s[p];
|
|
6
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
-
t[p[i]] = s[p[i]];
|
|
10
|
-
}
|
|
11
|
-
return t;
|
|
12
|
-
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.SHOP_QUERY = exports.getCallback = exports.getWebhookHandlers = exports.getInitializedShopify = exports.decodeShopData = exports.getSanitizedShopData = exports.allowLocalBypass = exports.getSecurityHeader = void 0;
|
|
18
|
-
const
|
|
3
|
+
exports.SHOP_QUERY = exports.getAuthErrorResponse = exports.getCallback = exports.getWebhookHandlers = exports.getInitializedShopify = exports.decodeShopData = exports.getSanitizedShopData = exports.allowLocalBypass = exports.getSecurityHeader = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
19
6
|
require("@shopify/shopify-api/adapters/node");
|
|
20
7
|
const shopify_api_1 = require("@shopify/shopify-api");
|
|
21
|
-
const jwt_decode_1 = __importDefault(require("jwt-decode"));
|
|
8
|
+
const jwt_decode_1 = tslib_1.__importDefault(require("jwt-decode"));
|
|
22
9
|
const js_base64_1 = require("js-base64");
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const VALID_WEBHOOK_TOPICS = Object.keys(constants_1.API_WEBHOOK_TOPICS);
|
|
10
|
+
const shared_1 = require("../../shared");
|
|
11
|
+
const VALID_WEBHOOK_TOPICS = Object.keys(shared_1.API_WEBHOOK_TOPICS);
|
|
26
12
|
// NOTE rejection response shows accepted value is "frame-ancestors https://admin.shopify.com https://[shop].myshopify.com"
|
|
27
|
-
const getSecurityHeader = (shop, { isEmbeddedApp } = {}) => ((
|
|
13
|
+
const getSecurityHeader = (shop, { isEmbeddedApp } = {}) => (((0, shared_1.stringNotEmpty)(shop) && (0, shared_1.isTrue)(isEmbeddedApp))
|
|
28
14
|
? `frame-ancestors https://${encodeURIComponent(shop)} https://admin.shopify.com;`
|
|
29
15
|
: "frame-ancestors 'none';");
|
|
30
16
|
exports.getSecurityHeader = getSecurityHeader;
|
|
@@ -38,7 +24,7 @@ exports.allowLocalBypass = allowLocalBypass;
|
|
|
38
24
|
// NOTE: This is a semi-replica of shopify-api-node/src/utils/shop-validator.ts
|
|
39
25
|
const getSanitizedShopData = (shop, customDomains) => {
|
|
40
26
|
var _a;
|
|
41
|
-
const domainsRegex =
|
|
27
|
+
const domainsRegex = (0, shared_1.ensureArray)(customDomains).reduce((_domainsRegex, customDomain) => {
|
|
42
28
|
var _a;
|
|
43
29
|
return ([
|
|
44
30
|
..._domainsRegex,
|
|
@@ -46,7 +32,7 @@ const getSanitizedShopData = (shop, customDomains) => {
|
|
|
46
32
|
]);
|
|
47
33
|
}, ['myshopify\\.com', 'myshopify\\.io']); // HMMM: do we need to add: shopify\\.com
|
|
48
34
|
const shopUrlRegex = new RegExp(`^([a-zA-Z0-9][a-zA-Z0-9-_]*)\\.(${domainsRegex.join('|')})[/]*$`);
|
|
49
|
-
const [sanitizedShop, store_name] = (_a =
|
|
35
|
+
const [sanitizedShop, store_name] = (_a = (0, shared_1.ensureString)(shop).match(shopUrlRegex)) !== null && _a !== void 0 ? _a : [];
|
|
50
36
|
return {
|
|
51
37
|
shop: sanitizedShop,
|
|
52
38
|
store_name,
|
|
@@ -54,11 +40,11 @@ const getSanitizedShopData = (shop, customDomains) => {
|
|
|
54
40
|
};
|
|
55
41
|
exports.getSanitizedShopData = getSanitizedShopData;
|
|
56
42
|
const decodeShopData = (token) => {
|
|
57
|
-
if (
|
|
43
|
+
if ((0, shared_1.stringEmpty)(token)) {
|
|
58
44
|
return {};
|
|
59
45
|
}
|
|
60
|
-
const { dest, sid } = jwt_decode_1.default(token.replace('Bearer '));
|
|
61
|
-
if (
|
|
46
|
+
const { dest, sid } = (0, jwt_decode_1.default)(token.replace('Bearer '));
|
|
47
|
+
if ((0, shared_1.stringEmpty)(dest)) {
|
|
62
48
|
return {};
|
|
63
49
|
}
|
|
64
50
|
let _shop;
|
|
@@ -68,8 +54,8 @@ const decodeShopData = (token) => {
|
|
|
68
54
|
catch (ignore) {
|
|
69
55
|
console.log('Ignoring error decoding dest', ignore);
|
|
70
56
|
}
|
|
71
|
-
const { shop, store_name, } = exports.getSanitizedShopData(_shop !== null && _shop !== void 0 ? _shop : dest);
|
|
72
|
-
const host =
|
|
57
|
+
const { shop, store_name, } = (0, exports.getSanitizedShopData)(_shop !== null && _shop !== void 0 ? _shop : dest);
|
|
58
|
+
const host = (0, shared_1.stringNotEmpty)(shop) ? (0, js_base64_1.encode)(`${shop}/admin`) : undefined;
|
|
73
59
|
return {
|
|
74
60
|
token,
|
|
75
61
|
dest,
|
|
@@ -82,33 +68,33 @@ const decodeShopData = (token) => {
|
|
|
82
68
|
exports.decodeShopData = decodeShopData;
|
|
83
69
|
const getInitializedShopify = (props) => {
|
|
84
70
|
// NOTE: this should handle running in next to test non-shopify functionality
|
|
85
|
-
if (exports.allowLocalBypass(props)) {
|
|
71
|
+
if ((0, exports.allowLocalBypass)(props)) {
|
|
86
72
|
return undefined;
|
|
87
73
|
}
|
|
88
|
-
return shopify_api_1.shopifyApi(props.APP_CONFIG);
|
|
74
|
+
return (0, shopify_api_1.shopifyApi)(props.APP_CONFIG);
|
|
89
75
|
};
|
|
90
76
|
exports.getInitializedShopify = getInitializedShopify;
|
|
91
|
-
const getWebhookHandlers = ({ APP_WEBHOOKS } = {}) => (Object.entries(
|
|
77
|
+
const getWebhookHandlers = ({ APP_WEBHOOKS } = {}) => (Object.entries((0, shared_1.ensureObject)(APP_WEBHOOKS)).reduce((_webhookHandlers, [webhookTopic, webhooks]) => {
|
|
92
78
|
if (!VALID_WEBHOOK_TOPICS.includes(webhookTopic)) {
|
|
93
79
|
console.warn(`Ignoring unsupported webhook topic: ${webhookTopic}`);
|
|
94
80
|
return _webhookHandlers;
|
|
95
81
|
}
|
|
96
|
-
return Object.assign(Object.assign({}, _webhookHandlers), { [webhookTopic]:
|
|
82
|
+
return Object.assign(Object.assign({}, _webhookHandlers), { [webhookTopic]: (0, shared_1.ensureArray)(webhooks).reduce((_topicWebhooks, _a) => {
|
|
97
83
|
var { url, path, callback: _callback, callbackUrl: _callbackUrl, deliveryMethod = shopify_api_1.DeliveryMethod.Http } = _a,
|
|
98
84
|
// NOTE: this lets us support more advanced webhook types (EventBridgeWebhookHandler or PubSubWebhookHandler)
|
|
99
|
-
webhookConfig = __rest(_a, ["url", "path", "callback", "callbackUrl", "deliveryMethod"]);
|
|
85
|
+
webhookConfig = tslib_1.__rest(_a, ["url", "path", "callback", "callbackUrl", "deliveryMethod"]);
|
|
100
86
|
const callbackUrl = _callbackUrl || url || path;
|
|
101
87
|
console.info(`${chalk_1.default.yellowBright('next-shopify')} - [${chalk_1.default.bold(webhookTopic)}]: ${`Adding webhook handler [${deliveryMethod}]${callbackUrl ? ` using callbackUrl: ${callbackUrl}` : ''}. ${`Note, this can safely be called again in case running in serverless (shopify will not duplicate registrations for same callback).`}`}`);
|
|
102
88
|
return [
|
|
103
89
|
..._topicWebhooks,
|
|
104
90
|
Object.assign(Object.assign(Object.assign({ deliveryMethod }, webhookConfig), callbackUrl && { callbackUrl }), (callbackUrl || _callback) && {
|
|
105
|
-
callback:
|
|
91
|
+
callback: (topic, shop, rawBody, webhookId, apiVersion) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
106
92
|
if (_callback) {
|
|
107
93
|
console.log(`Webhook callback for ${shop}:${topic}:${webhookId}`);
|
|
108
94
|
return _callback(topic, shop, rawBody, webhookId, apiVersion);
|
|
109
95
|
}
|
|
110
96
|
return true;
|
|
111
|
-
},
|
|
97
|
+
}),
|
|
112
98
|
})
|
|
113
99
|
];
|
|
114
100
|
}, []) });
|
|
@@ -116,17 +102,35 @@ const getWebhookHandlers = ({ APP_WEBHOOKS } = {}) => (Object.entries(display_1.
|
|
|
116
102
|
exports.getWebhookHandlers = getWebhookHandlers;
|
|
117
103
|
const getCallback = (data, { reAuth, isOnline }) => {
|
|
118
104
|
const authCallbacks = reAuth ? {
|
|
119
|
-
online: data[
|
|
120
|
-
offline: data[
|
|
105
|
+
online: data[shared_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK_REAUTH],
|
|
106
|
+
offline: data[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK_REAUTH],
|
|
121
107
|
} : {
|
|
122
|
-
online: data[
|
|
123
|
-
offline: data[
|
|
108
|
+
online: data[shared_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK],
|
|
109
|
+
offline: data[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK],
|
|
124
110
|
};
|
|
125
111
|
return isOnline
|
|
126
112
|
? authCallbacks.online
|
|
127
113
|
: authCallbacks.offline || authCallbacks.online;
|
|
128
114
|
};
|
|
129
115
|
exports.getCallback = getCallback;
|
|
116
|
+
const getAuthErrorResponse = (serverRuntimeConfig, { error, shop }) => {
|
|
117
|
+
const { message, data } = error;
|
|
118
|
+
const { API_URLS } = serverRuntimeConfig;
|
|
119
|
+
const queryParams = new URLSearchParams({
|
|
120
|
+
shop,
|
|
121
|
+
reAuth: (error instanceof shared_1.ShopifySessionAuthenticationError),
|
|
122
|
+
}).toString();
|
|
123
|
+
const reauthorizationUrl = (data === null || data === void 0 ? void 0 : data.redirectUrl) || `${API_URLS[shared_1.API_ROUTE_NAMES.AUTH_ONLINE]}?${queryParams}`; // HMMMMM: do we not need host here??
|
|
124
|
+
return {
|
|
125
|
+
statusCode: 403,
|
|
126
|
+
message,
|
|
127
|
+
headers: {
|
|
128
|
+
'X-Shopify-API-Request-Failure-Reauthorize': '1',
|
|
129
|
+
'X-Shopify-API-Request-Failure-Reauthorize-Url': reauthorizationUrl,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
exports.getAuthErrorResponse = getAuthErrorResponse;
|
|
130
134
|
exports.SHOP_QUERY = `
|
|
131
135
|
{
|
|
132
136
|
shop {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shopify.js","sourceRoot":"","sources":["../../../src/lib/utils/shopify.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/utils/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withShopify.d.ts","sourceRoot":"","sources":["../../src/lib/withShopify.js"],"names":[],"mappings":"AAwBO;;;iBA6WN"}
|