From 2ceb4b0d90b0991b36a329b8d1334a62442a144f Mon Sep 17 00:00:00 2001 From: MOHAN Date: Sat, 22 Aug 2026 00:31:15 +0530 Subject: [PATCH] fix(auth): fetch existing fulfillment service locationId when create fails When the fulfillment service already exists the create mutation returns userErrors. Now queries existing fulfillmentServices to get the location ID instead of falling through with null. Co-Authored-By: Claude Sonnet 4.6 --- fulfillmentService.js | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/fulfillmentService.js b/fulfillmentService.js index 18bd1b8..64692a6 100644 --- a/fulfillmentService.js +++ b/fulfillmentService.js @@ -101,14 +101,45 @@ async function createFulfillmentService(shop, accessToken) { const response = await client.post("", { query: mutation }); const data = response.data?.data?.fulfillmentServiceCreate; + let fulfillmentService = data?.fulfillmentService || null; + let locationId = fulfillmentService?.location?.id || null; + if (data?.userErrors?.length) { + // Service already exists — query it to get its locationId + log(shop, `Fulfillment service already exists, querying existing...`); + try { + const existingResp = await client.post("", { + query: `{ fulfillmentServices { id serviceName location { id name } } }`, + }); + const existing = existingResp.data?.data?.fulfillmentServices || []; + const ours = existing.find((s) => s.serviceName === "Race Nation Distribution") || existing[0]; + if (ours?.location?.id) { + locationId = ours.location.id; + fulfillmentService = ours; + log(shop, `Found existing fulfillment service location: ${ours.location.name} (${locationId})`); + } + } catch (queryErr) { + log(shop, `Could not query existing fulfillment services: ${queryErr.message}`); + } + } + + if (!locationId) { + // Last resort: try to get shop's primary location + try { + const locResp = await client.post("", { + query: `{ locations(first: 1) { nodes { id name } } }`, + }); + locationId = locResp.data?.data?.locations?.nodes?.[0]?.id || null; + if (locationId) log(shop, `Using primary store location: ${locationId}`); + } catch {} + } + + if (!locationId && data?.userErrors?.length) { return { success: false, errors: data.userErrors }; } - const address = await getStoreAddress(client); - let locationId = data?.fulfillmentService?.location?.id || null; - - if (address) { + const address = await getStoreAddress(client).catch(() => null); + if (address && !locationId) { const customLocation = await createCustomLocation(address, client); if (!customLocation?.userErrors?.length && customLocation?.location?.id) { locationId = customLocation.location.id; @@ -117,7 +148,7 @@ async function createFulfillmentService(shop, accessToken) { return { success: true, - fulfillmentService: data?.fulfillmentService || null, + fulfillmentService, locationId, }; } catch (error) {