@agnostack/next-shopify 3.2.0-beta.4 → 3.2.0-beta.6
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/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [3.2.0-beta.6](https://github.com/agnostack/next-shopify/compare/v3.2.0-beta.5...v3.2.0-beta.6) (2025-02-07)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* updated logs ([72a3930](https://github.com/agnostack/next-shopify/commit/72a393025d715b147168031ead38df4a48bd2c09))
|
|
7
|
+
|
|
8
|
+
# [3.2.0-beta.5](https://github.com/agnostack/next-shopify/compare/v3.2.0-beta.4...v3.2.0-beta.5) (2025-02-07)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* updated logs ([cf470c6](https://github.com/agnostack/next-shopify/commit/cf470c67f0fbebf6c0ac5374499c51f34d3b258d))
|
|
14
|
+
|
|
1
15
|
# [3.2.0-beta.4](https://github.com/agnostack/next-shopify/compare/v3.2.0-beta.3...v3.2.0-beta.4) (2025-02-07)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../../../src/lib/handlers/api/callback.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../../../src/lib/handlers/api/callback.js"],"names":[],"mappings":"AAiCO,uHA0LN"}
|
|
@@ -24,7 +24,7 @@ const handleCallback = (serverRuntimeConfig, data) => {
|
|
|
24
24
|
const { returnResponse = true } = data !== null && data !== void 0 ? data : {};
|
|
25
25
|
const prepareWebhookHandlers = (0, utils_1.getPrepareWebhookHandlers)(serverRuntimeConfig);
|
|
26
26
|
return (req, res, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
27
|
-
var _a, _b;
|
|
27
|
+
var _a, _b, _c;
|
|
28
28
|
const errorPath = PAGE_PATHS[shared_1.PAGE_ROUTE_NAMES.ERROR];
|
|
29
29
|
const { isOnline, reAuth } = params !== null && params !== void 0 ? params : {};
|
|
30
30
|
console.error(`>>> > handleCallback > isOnline:`, { isOnline });
|
|
@@ -44,12 +44,12 @@ const handleCallback = (serverRuntimeConfig, data) => {
|
|
|
44
44
|
let redirectUrl = `${errorPath}?code=invalid_callback_response`;
|
|
45
45
|
let shopify;
|
|
46
46
|
try {
|
|
47
|
-
const { shopify: _shopify, loadAppData, storeSession: encryptStoreSession, ensureBilling: handleEnsureBilling, } = yield (0, utils_1.getShopifyHelpers)(serverRuntimeConfig, { shop });
|
|
47
|
+
const { shopify: _shopify, loadAppData, getVerifiedClients, storeSession: encryptStoreSession, ensureBilling: handleEnsureBilling, } = yield (0, utils_1.getShopifyHelpers)(serverRuntimeConfig, { shop });
|
|
48
48
|
shopify = _shopify;
|
|
49
49
|
const { session: _session } = yield shopify.auth.callback(authPayload);
|
|
50
50
|
const session = _session === null || _session === void 0 ? void 0 : _session.toObject();
|
|
51
51
|
const offlineAuthRoute = API_PATHS[shared_1.API_ROUTE_NAMES.AUTH_OFFLINE];
|
|
52
|
-
console.error(`>>> > handleResponse >
|
|
52
|
+
console.error(`>>> > handleResponse > offlineAuthRoute: '${isOnline}'`, { session, offlineAuthRoute });
|
|
53
53
|
const shouldProcessOfflineAuth = (isOnline && offlineAuthRoute);
|
|
54
54
|
const shouldRegisterWebhooks = (!(0, shared_1.isTrue)(session === null || session === void 0 ? void 0 : session.isOnline) || !offlineAuthRoute);
|
|
55
55
|
const shouldCheckBilling = PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required;
|
|
@@ -69,6 +69,7 @@ const handleCallback = (serverRuntimeConfig, data) => {
|
|
|
69
69
|
let appId;
|
|
70
70
|
try {
|
|
71
71
|
const { appInfo } = yield loadAppData();
|
|
72
|
+
console.error(`>>> > handleResponse > appInfo: '${isOnline}'`, { appInfo });
|
|
72
73
|
appId = (0, utils_1.normalizeShopifyId)(appInfo === null || appInfo === void 0 ? void 0 : appInfo.id).id;
|
|
73
74
|
// eslint-disable-next-line no-empty
|
|
74
75
|
}
|
|
@@ -76,9 +77,16 @@ const handleCallback = (serverRuntimeConfig, data) => {
|
|
|
76
77
|
console.info('Ignoring error loading appData', _ignore);
|
|
77
78
|
}
|
|
78
79
|
const webhookHandlers = prepareWebhookHandlers({ appId });
|
|
80
|
+
console.error(`>>> > handleResponse > webhookHandlers: '${isOnline}'`, { webhookHandlers });
|
|
79
81
|
shopify.webhooks.addHandlers(webhookHandlers);
|
|
82
|
+
console.error(`>>> > return > shopify.clients:`, shopify.clients);
|
|
83
|
+
console.error(`>>> > handleResponse > session: '${isOnline}'`, { session });
|
|
84
|
+
const { Graphql } = (_b = yield getVerifiedClients()) !== null && _b !== void 0 ? _b : {};
|
|
85
|
+
const bar = yield Graphql.request(shared_1.APP_QUERY.INSTALLATION_BASIC);
|
|
86
|
+
console.error(`>>> > handleResponse > bar: '${isOnline}'`, { bar });
|
|
80
87
|
// NOTE: webhooks cannot use an online session to make API calls to Shopify (but not all webooks may be doing that for all apps)
|
|
81
|
-
yield shopify.webhooks.register({ session });
|
|
88
|
+
const zed = yield shopify.webhooks.register({ session });
|
|
89
|
+
console.error(`>>> > handleResponse > zed: '${isOnline}'`, { zed });
|
|
82
90
|
}
|
|
83
91
|
const embeddedAppUrl = yield shopify.auth.getEmbeddedAppUrl(authPayload);
|
|
84
92
|
// NOTE this is the final/successful return URL
|
|
@@ -140,7 +148,7 @@ const handleCallback = (serverRuntimeConfig, data) => {
|
|
|
140
148
|
break;
|
|
141
149
|
}
|
|
142
150
|
case error instanceof shopify_api_1.GraphqlQueryError: {
|
|
143
|
-
const errorMessages = (0, shared_1.ensureArray)((
|
|
151
|
+
const errorMessages = (0, shared_1.ensureArray)((_c = error.response) === null || _c === void 0 ? void 0 : _c.errors).map(({ message }) => (0, shared_1.ensureString)(message));
|
|
144
152
|
console.error(`${errorMessage}. GraphqlQuery Error ${errorMessages.join('. ')}`);
|
|
145
153
|
redirectUrl = `${baseErrorUrl}?code=${shared_1.ERROR_CODES.QUERY}`;
|
|
146
154
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/callback.js"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAM6B;AAE7B,uCAIoB;AACpB,
|
|
1
|
+
{"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../../src/lib/handlers/api/callback.js"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agnostack/next-shopify",
|
|
3
|
-
"version": "3.2.0-beta.
|
|
3
|
+
"version": "3.2.0-beta.6",
|
|
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",
|