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) {