@agnostack/next-shopify 1.6.0-alpha.4 → 1.6.0-alpha.41

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +262 -0
  2. package/dist/handlers/api.js +24 -32
  3. package/dist/handlers/api.js.map +1 -1
  4. package/dist/handlers/ssr.d.ts +10 -1
  5. package/dist/handlers/ssr.js +17 -15
  6. package/dist/handlers/ssr.js.map +1 -1
  7. package/dist/helpers/auth.d.ts +9 -1
  8. package/dist/helpers/auth.js +9 -16
  9. package/dist/helpers/auth.js.map +1 -1
  10. package/dist/helpers/callback.d.ts +4 -1
  11. package/dist/helpers/callback.js +27 -35
  12. package/dist/helpers/callback.js.map +1 -1
  13. package/dist/helpers/graph.js +2 -2
  14. package/dist/helpers/graph.js.map +1 -1
  15. package/dist/helpers/rest.js +3 -3
  16. package/dist/helpers/rest.js.map +1 -1
  17. package/dist/helpers/uninstall.d.ts +2 -1
  18. package/dist/helpers/uninstall.js +23 -7
  19. package/dist/helpers/uninstall.js.map +1 -1
  20. package/dist/utils/billing.d.ts +1 -0
  21. package/dist/utils/billing.js +47 -1
  22. package/dist/utils/billing.js.map +1 -1
  23. package/dist/utils/errors.d.ts +12 -0
  24. package/dist/utils/errors.js +16 -1
  25. package/dist/utils/errors.js.map +1 -1
  26. package/dist/utils/firebase.js +1 -0
  27. package/dist/utils/firebase.js.map +1 -1
  28. package/dist/utils/index.d.ts +2 -0
  29. package/dist/utils/index.js +2 -0
  30. package/dist/utils/index.js.map +1 -1
  31. package/dist/utils/session.d.ts +14 -0
  32. package/dist/utils/session.js +83 -0
  33. package/dist/utils/session.js.map +1 -0
  34. package/dist/utils/shopify-api-node/beginAuth.d.ts +2 -5
  35. package/dist/utils/shopify-api-node/beginAuth.js +17 -10
  36. package/dist/utils/shopify-api-node/beginAuth.js.map +1 -1
  37. package/dist/utils/shopify.d.ts +2 -38
  38. package/dist/utils/shopify.js +15 -171
  39. package/dist/utils/shopify.js.map +1 -1
  40. package/dist/utils/webhooks.d.ts +1 -0
  41. package/dist/utils/webhooks.js +50 -0
  42. package/dist/utils/webhooks.js.map +1 -0
  43. package/package.json +1 -1
@@ -1,168 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAuthErrorResponse = exports.getRedirectUrl = exports.registerWebhooks = exports.getVerifiedSession = exports.generatePaymentConfig = exports.getSessionStorage = exports.getInitializedShopify = void 0;
3
+ exports.getRedirectUrl = exports.getInitializedShopify = void 0;
4
4
  require("@shopify/shopify-api/adapters/node");
5
5
  const shopify_api_1 = require("@shopify/shopify-api");
6
6
  // // TODO validate if we still need a custom/local beginAuth
7
- // import { beginAuth } from './shopify-api-node'
8
- const billing_1 = require("./billing");
9
- const errors_1 = require("./errors");
7
+ const shopify_api_node_1 = require("./shopify-api-node");
8
+ const webhooks_1 = require("./webhooks");
10
9
  const display_1 = require("./display");
11
- const firebase_1 = require("./firebase");
12
10
  const constants_1 = require("./constants");
13
- const getInitializedShopify = (serverRuntimeConfig, _shop, version) => {
14
- const { APP_CONFIG } = serverRuntimeConfig;
15
- // TODO ensure APP_CONFIG values are all matching the new renamed options
16
- const shopify = shopify_api_1.shopifyApi(Object.assign(Object.assign({}, APP_CONFIG), (display_1.stringNotEmpty(version)) && {
11
+ const getInitializedShopify = async (serverRuntimeConfig, _shop, version) => {
12
+ const shopify = shopify_api_1.shopifyApi(Object.assign(Object.assign({}, serverRuntimeConfig === null || serverRuntimeConfig === void 0 ? void 0 : serverRuntimeConfig.APP_CONFIG), (display_1.stringNotEmpty(version)) && {
17
13
  apiVersion: version,
18
14
  }));
15
+ await webhooks_1.addWebhookHandlers(serverRuntimeConfig, shopify);
19
16
  return shopify;
20
17
  };
21
18
  exports.getInitializedShopify = getInitializedShopify;
22
- // TODO OLD/Remove
23
- // TODO!!!!: explore moving into FirebaseSessionHandler.getInstance and/or another singleton here??
24
- // export const getInitializedShopify = (serverRuntimeConfig, _shop, version) => {
25
- // const { FB_CONFIG, FB_ROOT_COLLECTION, APP_ID, APP_CONFIG } = serverRuntimeConfig
26
- // const data = { app: APP_ID, shop: Shopify.Utils.sanitizeShop(_shop)}
27
- // const sessionHandler = FirebaseSessionHandler.getInstance(FB_CONFIG, FB_ROOT_COLLECTION)
28
- // Shopify.Context.initialize({
29
- // ...APP_CONFIG,
30
- // ...(stringNotEmpty(version)) && {
31
- // API_VERSION: version,
32
- // },
33
- // SESSION_STORAGE: new Shopify.Session.CustomSessionStorage(
34
- // (session) => storeCallback(session, data, sessionHandler),
35
- // (id) => loadCallback(id, data, sessionHandler),
36
- // (id) => deleteSessionsCallback(id, data, sessionHandler),
37
- // (ids) => deleteSessionsCallback(ids, data, sessionHandler),
38
- // (__shop) => findSessionsByShop(Shopify.Utils.sanitizeShop(__shop), data, sessionHandler)
39
- // ),
40
- // })
41
- // return Shopify
42
- // }
43
- const getSessionStorage = (serverRuntimeConfig, _shop) => {
44
- const { FB_CONFIG, FB_ROOT_COLLECTION, APP_ID } = serverRuntimeConfig;
45
- const shopify = exports.getInitializedShopify(serverRuntimeConfig);
46
- const data = { app: APP_ID, shop: shopify.utils.sanitizeShop(_shop) };
47
- const sessionHandler = firebase_1.FirebaseSessionHandler.getInstance(FB_CONFIG, FB_ROOT_COLLECTION);
48
- return {
49
- store: (session) => firebase_1.storeCallback(session, data, sessionHandler),
50
- load: (id) => firebase_1.loadCallback(id, data, sessionHandler),
51
- delete: (id) => firebase_1.deleteSessionsCallback(id, data, sessionHandler),
52
- deleteMany: (ids) => firebase_1.deleteSessionsCallback(ids, data, sessionHandler),
53
- find: (__shop) => firebase_1.findSessionsByShop(shopify.utils.sanitizeShop(__shop), data, sessionHandler),
54
- };
55
- };
56
- exports.getSessionStorage = getSessionStorage;
57
- const generatePaymentConfig = (paymentConfig, data) => {
58
- const { name, price, currency = 'USD', type = constants_1.BILLING_INTERVALS.ONE_TIME, } = display_1.ensureObject(paymentConfig);
59
- const { debugMode, environment } = display_1.ensureObject(data);
60
- if (display_1.objectEmpty(paymentConfig) || display_1.stringEmpty(environment)) {
61
- return undefined;
62
- }
63
- const notProduction = (environment !== 'production');
64
- // TODO ensure this logic is correct
65
- let test = environment !== 'production';
66
- if (debugMode) {
67
- test = true;
68
- }
69
- const _paymentConfig = {
70
- type,
71
- required: (environment !== 'development'),
72
- test,
73
- name: `${name}${notProduction ? ` - ${environment}` : ''} - ${display_1.unsnakecase(type)}`,
74
- price: {
75
- amount: price,
76
- currencyCode: currency,
77
- },
78
- };
79
- console.log(`>>> ~ _paymentConfig`, {
80
- _paymentConfig,
81
- debugMode,
82
- debugEnv: process.env.DEBUG,
83
- });
84
- return _paymentConfig;
85
- };
86
- exports.generatePaymentConfig = generatePaymentConfig;
87
- const getVerifiedSession = async ({ req, res, shop, serverRuntimeConfig }) => {
88
- console.log('getVerifiedSession');
89
- try {
90
- const shopify = exports.getInitializedShopify(serverRuntimeConfig, shop);
91
- const sessionStorage = exports.getSessionStorage(serverRuntimeConfig, shop);
92
- if (sessionStorage) {
93
- console.log('have sessionStorage');
94
- }
95
- else {
96
- console.log('have NO sessionStorage');
97
- }
98
- const { PAYMENT_CONFIG } = serverRuntimeConfig !== null && serverRuntimeConfig !== void 0 ? serverRuntimeConfig : {};
99
- // TODO OLD/Remove
100
- // const session = await shopify.Utils.loadCurrentSession(req, res)
101
- const sessionId = await shopify.session.getCurrentId({
102
- rawRequest: req,
103
- rawResponse: res,
104
- });
105
- console.log('sessionId:', sessionId);
106
- const session = await sessionStorage.load(sessionId);
107
- console.log('session:', session);
108
- if (shop && (session === null || session === void 0 ? void 0 : session.shop) !== shop) {
109
- throw new errors_1.ShopifyAuthenticationError('Invalid shop');
110
- }
111
- if (!session.isActive(shopify.config.scopes)) {
112
- throw new errors_1.ShopifyAuthenticationError('Inactive session');
113
- }
114
- if (PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required) {
115
- const billingManager = new billing_1.BillingManager(shopify, session, serverRuntimeConfig);
116
- const confirmationUrl = await billingManager.ensureBilling();
117
- console.log('confirmationUrl:', confirmationUrl);
118
- if (display_1.stringNotEmpty(confirmationUrl)) {
119
- throw new errors_1.ShopifyAuthenticationError('Invalid payment status', { redirectUrl: confirmationUrl });
120
- }
121
- }
122
- else {
123
- // NOTE making a test call to ensure a valid session for free apps
124
- const client = new shopify.clients.Graphql({ session });
125
- await client.query({ data: constants_1.SHOP_QUERY });
126
- }
127
- return session;
128
- }
129
- catch (error) {
130
- if (error instanceof shopify_api_1.HttpResponseError &&
131
- error.response.code === 401) {
132
- throw new errors_1.ShopifyAuthenticationError('Not authenticated');
133
- }
134
- throw error;
135
- }
136
- };
137
- exports.getVerifiedSession = getVerifiedSession;
138
- const registerTopicWebhook = async ({ serverRuntimeConfig, webhook, topic, session }) => {
139
- console.log('registerTopicWebhook');
140
- const shopify = exports.getInitializedShopify(serverRuntimeConfig, session === null || session === void 0 ? void 0 : session.shop);
141
- const webhookResponse = await shopify.webhooks.register({ session });
142
- // TODO validate this is the correct conditional
143
- if (!webhookResponse[topic][0].success) {
144
- throw new Error(`Failed to register ${webhook.path} on topic: ${topic} webhook`, webhookResponse.result);
145
- }
146
- // TODO validate this is the correct conditional
147
- return webhookResponse[topic][0].success;
148
- };
149
- const registerWebhooks = async (serverRuntimeConfig, webhookRegistry, session) => {
150
- console.log('registerWebhooks');
151
- return Promise.all(Object.entries(webhookRegistry).map(async ([topic, webhooks]) => (Promise.all(webhooks.map(async (webhook) => registerTopicWebhook({ serverRuntimeConfig, webhook, topic, session }))))));
152
- };
153
- exports.registerWebhooks = registerWebhooks;
154
- const getRedirectUrl = (props, { req, res, query: _query, }) => {
19
+ const getRedirectUrl = async (props, { req, res, query: _query, }) => {
155
20
  var _a;
156
- console.log('getRedirectUrl');
157
21
  const { API_URLS, PAGE_PATHS } = props;
158
- console.log('props:', props);
159
22
  const query = (_a = _query !== null && _query !== void 0 ? _query : req.query) !== null && _a !== void 0 ? _a : {};
160
- console.log('query:', query);
161
23
  const { embedded, host, shop: _shop } = query !== null && query !== void 0 ? query : {};
162
- const shopify = exports.getInitializedShopify(props, _shop);
163
- console.log('shopify initialized', shopify);
24
+ const shopify = await exports.getInitializedShopify(props, _shop);
25
+ // // if (registerHandlers) {
26
+ // console.log('await addWebhookHandlers')
27
+ // await addWebhookHandlers(props, shopify)
28
+ // // }
164
29
  const shop = shopify.utils.sanitizeShop(_shop);
165
- console.log('shop:', shop);
166
30
  if (display_1.stringEmpty(shop)) {
167
31
  return `${PAGE_PATHS[constants_1.PAGE_ROUTE_NAMES.ERROR]}?code=no_shop_provided&type=getRedirectUrl`;
168
32
  }
@@ -174,31 +38,11 @@ const getRedirectUrl = (props, { req, res, query: _query, }) => {
174
38
  }).toString();
175
39
  // TODO: explore objectToQuerystring
176
40
  const queryParams = new URLSearchParams(Object.assign(Object.assign({}, query), { shop, redirectUri: `${API_URLS[constants_1.API_ROUTE_NAMES.AUTH_CALLBACK]}?${redirectUriParams}` })).toString();
177
- console.log('embedded queryParams:', queryParams);
41
+ // console.log('embedded queryParams:', queryParams)
178
42
  return `${PAGE_PATHS[constants_1.PAGE_ROUTE_NAMES.EXIT]}?${queryParams}`;
179
43
  }
180
- // TODO validate if we still need a custom/local beginAuth
181
- console.log('begin auth');
182
- return shopify.auth.begin({
183
- shop,
184
- isOnline: true,
185
- rawRequest: req,
186
- rawResponse: res,
187
- });
44
+ console.log('beginAuth');
45
+ return shopify_api_node_1.beginAuth(props, { req, res, shop });
188
46
  };
189
47
  exports.getRedirectUrl = getRedirectUrl;
190
- const getAuthErrorResponse = ({ error, shop, serverRuntimeConfig }) => {
191
- const { message, data } = error;
192
- const { API_URLS } = serverRuntimeConfig;
193
- const reauthorizationUrl = (data === null || data === void 0 ? void 0 : data.redirectUrl) || `${API_URLS[constants_1.API_ROUTE_NAMES.AUTH]}?shop=${shop}`;
194
- return {
195
- statusCode: 403,
196
- message,
197
- headers: {
198
- 'X-Shopify-API-Request-Failure-Reauthorize': '1',
199
- 'X-Shopify-API-Request-Failure-Reauthorize-Url': reauthorizationUrl,
200
- },
201
- };
202
- };
203
- exports.getAuthErrorResponse = getAuthErrorResponse;
204
48
  //# sourceMappingURL=shopify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shopify.js","sourceRoot":"","sources":["../../src/utils/shopify.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shopify.js","sourceRoot":"","sources":["../../src/utils/shopify.js"],"names":[],"mappings":";;;AAAA,8CAA2C;AAC3C,sDAAiD;AAEjD,6DAA6D;AAC7D,yDAA8C;AAC9C,yCAA+C;AAC/C,uCAAuD;AACvD,2CAA+D;AAExD,MAAM,qBAAqB,GAAG,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACjF,MAAM,OAAO,GAAG,wBAAU,iCACrB,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,UAAU,GAC/B,CAAC,wBAAc,CAAC,OAAO,CAAC,CAAC,IAAI;QAC9B,UAAU,EAAE,OAAO;KACpB,EACD,CAAA;IAEF,MAAM,6BAAkB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAA;IAEtD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAXY,QAAA,qBAAqB,yBAWjC;AAEM,MAAM,cAAc,GAAG,KAAK,EAAE,KAAK,EAAE,EAC1C,GAAG,EACH,GAAG,EACH,KAAK,EAAE,MAAM,GACd,EAAE,EAAE;;IACH,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IACtC,MAAM,KAAK,GAAG,MAAA,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,GAAG,CAAC,KAAK,mCAAI,EAAE,CAAA;IACvC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAA;IAEnD,MAAM,OAAO,GAAG,MAAM,6BAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAEzD,6BAA6B;IAC7B,0CAA0C;IAC1C,2CAA2C;IAC3C,OAAO;IAEP,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAE9C,IAAI,qBAAW,CAAC,IAAI,CAAC,EAAE;QACrB,OAAO,GAAG,UAAU,CAAC,4BAAgB,CAAC,KAAK,CAAC,4CAA4C,CAAA;KACzF;IAED,IAAI,QAAQ,KAAK,GAAG,EAAE;QACpB,oCAAoC;QACpC,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAC;YAC5C,IAAI;YACJ,IAAI;SACL,CAAC,CAAC,QAAQ,EAAE,CAAA;QAEb,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAI,eAAe,iCAClC,KAAK,KACR,IAAI,EACJ,WAAW,EAAE,GAAG,QAAQ,CAAC,2BAAe,CAAC,aAAa,CAAC,IAAI,iBAAiB,EAAE,IAC9E,CAAC,QAAQ,EAAE,CAAA;QAEb,oDAAoD;QACpD,OAAO,GAAG,UAAU,CAAC,4BAAgB,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAA;KAC7D;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACxB,OAAO,4BAAS,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;AAC7C,CAAC,CAAA;AA1CY,QAAA,cAAc,kBA0C1B"}
@@ -0,0 +1 @@
1
+ export function addWebhookHandlers(serverRuntimeConfig: any, shopify: any): Promise<void>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addWebhookHandlers = void 0;
4
+ const shopify_api_1 = require("@shopify/shopify-api");
5
+ const session_1 = require("./session");
6
+ const shopify_1 = require("./shopify");
7
+ const handleWebhook = async (topic, shop, webhookRequestBody) => {
8
+ console.log('handleWebhook:', { topic, shop, webhookRequestBody });
9
+ try {
10
+ const config = JSON.parse(webhookRequestBody);
11
+ const shopify = await shopify_1.getInitializedShopify(config, shop);
12
+ const sessionStorage = session_1.getSessionStorage(shopify, config, shop);
13
+ console.log('sessionStorage:', sessionStorage);
14
+ switch (topic) {
15
+ case 'app/uninstalled': {
16
+ const sessionsIds = await sessionStorage.find(shop);
17
+ console.log('sessionsIds:', sessionsIds);
18
+ if (sessionsIds.length) {
19
+ await sessionStorage.deleteMany(sessionsIds);
20
+ }
21
+ break;
22
+ }
23
+ default: {
24
+ break;
25
+ }
26
+ }
27
+ }
28
+ catch (e) {
29
+ console.log(`Error Handling Webhook for ${topic}`, e);
30
+ }
31
+ };
32
+ const addWebhookHandlers = async (serverRuntimeConfig, shopify) => {
33
+ const { APP_WEBHOOKS } = serverRuntimeConfig;
34
+ // TODO look for all topics via APP_WEBHOOKS
35
+ const existingHandlers = await shopify.webhooks.getHandlers('APP_UNINSTALLED');
36
+ console.log('existingHandlers:', existingHandlers);
37
+ // if (!existingHandlers.length) {
38
+ console.log('NEEDEM addWebhookHandlers');
39
+ const handlers = Object.entries(APP_WEBHOOKS).reduce((__payload, [topic, webhooks]) => (Object.assign(Object.assign({}, __payload), { [topic]: webhooks.map((webhook) => ({
40
+ deliveryMethod: shopify_api_1.DeliveryMethod.Http,
41
+ callbackUrl: webhook.path,
42
+ callback: handleWebhook,
43
+ })) })), {});
44
+ await shopify.webhooks.addHandlers(handlers);
45
+ // } else {
46
+ // console.log('GOTEM addWebhookHandlers')
47
+ // }
48
+ };
49
+ exports.addWebhookHandlers = addWebhookHandlers;
50
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/utils/webhooks.js"],"names":[],"mappings":";;;AAAA,sDAAqD;AAErD,uCAA6C;AAC7C,uCAAiD;AAEjD,MAAM,aAAa,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE;IAC9D,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAClE,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC7C,MAAM,OAAO,GAAG,MAAM,+BAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACzD,MAAM,cAAc,GAAG,2BAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QAC/D,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAA;QAE9C,QAAQ,KAAK,EAAE;YACb,KAAK,iBAAiB,CAAC,CAAC;gBACtB,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACnD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;gBACxC,IAAI,WAAW,CAAC,MAAM,EAAE;oBACtB,MAAM,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;iBAC7C;gBACD,MAAK;aACN;YAED,OAAO,CAAC,CAAC;gBACP,MAAK;aACN;SACF;KACF;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;KACtD;AACH,CAAC,CAAA;AAEM,MAAM,kBAAkB,GAAG,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE;IACvE,MAAM,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAAA;IAE5C,4CAA4C;IAC5C,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAA;IAC9E,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAA;IAElD,kCAAkC;IAChC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,iCAClF,SAAS,KACZ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClC,cAAc,EAAE,4BAAc,CAAC,IAAI;YACnC,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC,IACH,EAAE,EAAE,CAAC,CAAA;IAEP,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC9C,WAAW;IACT,0CAA0C;IAC5C,IAAI;AACN,CAAC,CAAA;AAtBY,QAAA,kBAAkB,sBAsB9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agnostack/next-shopify",
3
- "version": "1.6.0-alpha.4",
3
+ "version": "1.6.0-alpha.41",
4
4
  "author": "agnoStack Dev <developers@agnostack.com> (https://agnostack.com)",
5
5
  "owner": "agnoStack",
6
6
  "description": "Please contact agnoStack via info@agnostack.com for any questions",