{"_id":"@by-association-only/shopify-graphql-client","_rev":"10-c42fc4cdef26f699b1840e59051aac26","name":"@by-association-only/shopify-graphql-client","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.0":{"name":"@by-association-only/shopify-graphql-client","version":"1.0.0","_id":"@by-association-only/shopify-graphql-client@1.0.0","maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"dist":{"shasum":"7708d6421b165554bc41bef7a5879f4298d14ca9","tarball":"https://registry.npmjs.org/@by-association-only/shopify-graphql-client/-/shopify-graphql-client-1.0.0.tgz","fileCount":6,"integrity":"sha512-X/usXrc/6C1W16I7Ul4aiYlWXNLhj0MfQHMeblZ7XLHcleXB4yxdII6Fue7+XOMrDgA1LAi06m9xIyKeE9mdOg==","signatures":[{"sig":"MEQCIC3pSGhzNa/5NXpg7400l31i8Fsl61xiD3T/16fquJgeAiB2oBfxDxioDEca5yFoYpNfu9UbmJnJovPQusfX01oOUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13883},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"87d325695b86c3cdce62b0aaa87e042a03686b04","_npmUser":{"name":"dangamble","email":"dan@bao.agency"},"_npmVersion":"10.9.2","directories":{},"_nodeVersion":"22.16.0","dependencies":{"@shopify/graphql-client":"^1.4.1"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"wrangler":"^4.45.0","@by-association-only/shopify-app-utils":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/shopify-graphql-client_1.0.0_1761587614060_0.4586535873873472","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@by-association-only/shopify-graphql-client","version":"1.1.0","_id":"@by-association-only/shopify-graphql-client@1.1.0","maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"dist":{"shasum":"d94c9310c53178769fffa09f6366828685506915","tarball":"https://registry.npmjs.org/@by-association-only/shopify-graphql-client/-/shopify-graphql-client-1.1.0.tgz","fileCount":6,"integrity":"sha512-gMoEOrPSA9HF8KDIPG3anKV4Fxmlj6fBCMbLH91mXnk6TLZRobCZvKjceTdV2ylncqf21Twh7oPekK+TBhRedQ==","signatures":[{"sig":"MEUCIEomkTvdyTbu8XRO/1dC1ODgyChAwZTcdl5NYzTg0lDjAiEA78TmovoiiUGgALCNxrrGeB99Me+w7g2Q30xcI7SxRQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13605},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"d94c9310c53178769fffa09f6366828685506915","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"_npmUser":{"name":"dangamble","email":"dan@bao.agency"},"_integrity":"sha512-gMoEOrPSA9HF8KDIPG3anKV4Fxmlj6fBCMbLH91mXnk6TLZRobCZvKjceTdV2ylncqf21Twh7oPekK+TBhRedQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@shopify/graphql-client":"^1.4.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"wrangler":"^4.45.0","@by-association-only/shopify-app-utils":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-graphql-client_1.1.0_1761655994220_0.26345720155732644","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@by-association-only/shopify-graphql-client","version":"1.2.0","_id":"@by-association-only/shopify-graphql-client@1.2.0","maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"dist":{"shasum":"752e6e668a8c5a13446e286a44a1110249bd0436","tarball":"https://registry.npmjs.org/@by-association-only/shopify-graphql-client/-/shopify-graphql-client-1.2.0.tgz","fileCount":6,"integrity":"sha512-Ei+rqxbFu9eSBtXTsNq4ngnQv33aZ/ISGBdlAa47O+CG79iQ0i81FjL69rSgc3E/Z0v94KeqrzkoHQf884FhLg==","signatures":[{"sig":"MEUCIQCnQ4NxBrdzINKzaRkcRjKzrDw/eidg35kwRZSKkp1tsgIgJ09PHeJ8TeWL1MJCAh/AQpN7m27fm7wAKm0Ji0OoBNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13644},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"752e6e668a8c5a13446e286a44a1110249bd0436","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"_npmUser":{"name":"dangamble","email":"dan@bao.agency"},"_integrity":"sha512-Ei+rqxbFu9eSBtXTsNq4ngnQv33aZ/ISGBdlAa47O+CG79iQ0i81FjL69rSgc3E/Z0v94KeqrzkoHQf884FhLg==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@shopify/graphql-client":"^1.4.1","@by-association-only/shopify-app-utils":"1.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"peerDependencies":{"wrangler":"^4.45.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-graphql-client_1.2.0_1761735931551_0.5213470839693397","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@by-association-only/shopify-graphql-client","version":"1.2.1","_id":"@by-association-only/shopify-graphql-client@1.2.1","maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"dist":{"shasum":"d85c364dcca3f87921635568681f26d9f485e736","tarball":"https://registry.npmjs.org/@by-association-only/shopify-graphql-client/-/shopify-graphql-client-1.2.1.tgz","fileCount":6,"integrity":"sha512-Yf9tKfJnhxD93i8s3NfCX2hSFDlscToNpoJeCgFztj2Pak4yJkfXpx3lf6qD85A+zjZLCLDYsTR385QoCMZEnw==","signatures":[{"sig":"MEUCIEk6O1PkCDzPt+FzdDwptW6IeWogPGwtAZNRSrXguU60AiEA1WSfkrOGE01Ftnw0XU03Up9NiGhY2rnHJ+SA5gdrah8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13644},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"d85c364dcca3f87921635568681f26d9f485e736","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"_npmUser":{"name":"dangamble","email":"dan@bao.agency"},"_integrity":"sha512-Yf9tKfJnhxD93i8s3NfCX2hSFDlscToNpoJeCgFztj2Pak4yJkfXpx3lf6qD85A+zjZLCLDYsTR385QoCMZEnw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@shopify/graphql-client":"^1.4.1","@by-association-only/shopify-app-utils":"1.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"peerDependencies":{"wrangler":"^4.45.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-graphql-client_1.2.1_1761736549967_0.4711797883534299","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@by-association-only/shopify-graphql-client","version":"1.3.0","_id":"@by-association-only/shopify-graphql-client@1.3.0","maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"dist":{"shasum":"9a68b6fbfd96fa134da01855fc763cc046001143","tarball":"https://registry.npmjs.org/@by-association-only/shopify-graphql-client/-/shopify-graphql-client-1.3.0.tgz","fileCount":6,"integrity":"sha512-HlR7nIsnVQ95BzCM6gUbkw/KXxmHWnCpy1l1ErcrDPfPicfEgTTiwvUsCN9eiKoCGS/LKq4I3uHXcMI8ULi17w==","signatures":[{"sig":"MEUCIAFOYK91Np44YqgJYTDwi0NRowW6oOemabOlfnbO1fJVAiEAzuBL8t/WSWl325wonvjaNCUzEwbFjJvCnJ74a71Wecs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24646},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"9a68b6fbfd96fa134da01855fc763cc046001143","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"type-check":"tsc --noEmit"},"_npmUser":{"name":"dangamble","email":"dan@bao.agency"},"_integrity":"sha512-HlR7nIsnVQ95BzCM6gUbkw/KXxmHWnCpy1l1ErcrDPfPicfEgTTiwvUsCN9eiKoCGS/LKq4I3uHXcMI8ULi17w==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@shopify/graphql-client":"^1.4.1","@shopify/admin-graphql-api-utilities":"^2.2.0","@by-association-only/shopify-app-utils":"1.4.0","@by-association-only/shopify-admin-types":"0.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.1-rc"},"peerDependencies":{"wrangler":"^4.45.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-graphql-client_1.3.0_1783355100567_0.6045416797967116","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@by-association-only/shopify-graphql-client","version":"1.3.1","_id":"@by-association-only/shopify-graphql-client@1.3.1","maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"dist":{"shasum":"a727edafddd98011f6924e039c86c9c2d9ab9f7f","tarball":"https://registry.npmjs.org/@by-association-only/shopify-graphql-client/-/shopify-graphql-client-1.3.1.tgz","fileCount":6,"integrity":"sha512-lXatS+S4RfDitekqStcY8EVQ9wSfS3F3yAV9fZuKM1ltntPHLILAXxR5NEdIpBGogChSX5gwXPOWUPRfIDvwvw==","signatures":[{"sig":"MEUCIGZBzPxK8n4deVHPbZt/3vOQPrrp9d4Z2NRq1/d/7nRDAiEA8Juvo0RxROnAxFO/I1BS9NbW9Z0/1qPmqU5ypMhQkUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24646},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"a727edafddd98011f6924e039c86c9c2d9ab9f7f","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"type-check":"tsc --noEmit"},"_npmUser":{"name":"dangamble","email":"dan@bao.agency"},"_integrity":"sha512-lXatS+S4RfDitekqStcY8EVQ9wSfS3F3yAV9fZuKM1ltntPHLILAXxR5NEdIpBGogChSX5gwXPOWUPRfIDvwvw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@shopify/graphql-client":"^1.4.1","@shopify/admin-graphql-api-utilities":"^2.2.0","@by-association-only/shopify-app-utils":"1.5.0","@by-association-only/shopify-admin-types":"0.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.1-rc"},"peerDependencies":{"wrangler":"^4.45.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-graphql-client_1.3.1_1783359870114_0.6095221995627296","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@by-association-only/shopify-graphql-client","version":"1.3.2","_id":"@by-association-only/shopify-graphql-client@1.3.2","maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"dist":{"shasum":"64e513606712f1d0a3d9cf12b5ea2f6bea54e3cc","tarball":"https://registry.npmjs.org/@by-association-only/shopify-graphql-client/-/shopify-graphql-client-1.3.2.tgz","fileCount":6,"integrity":"sha512-S6jw4+ESsQUCXSMpZ5woqXEBCXkFiEUHBunfdqFYCtS4hE71DmD9SqZOkyDmmk21cXnSyGEdX/vUTbfVqEVzQQ==","signatures":[{"sig":"MEYCIQCEKLvfzYJXDH0In2PfAMU9D7LOM66UNqZi1ns8eY5XEQIhAJ03ASFiCpBuXBpLQFjSafXATzR84MD+JC6H8c+BC6HH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24646},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"64e513606712f1d0a3d9cf12b5ea2f6bea54e3cc","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"type-check":"tsc --noEmit"},"_npmUser":{"name":"dangamble","email":"dan@bao.agency"},"_integrity":"sha512-S6jw4+ESsQUCXSMpZ5woqXEBCXkFiEUHBunfdqFYCtS4hE71DmD9SqZOkyDmmk21cXnSyGEdX/vUTbfVqEVzQQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@shopify/graphql-client":"^1.4.1","@shopify/admin-graphql-api-utilities":"^2.2.0","@by-association-only/shopify-app-utils":"1.5.1","@by-association-only/shopify-admin-types":"0.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.1-rc"},"peerDependencies":{"wrangler":"^4.45.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-graphql-client_1.3.2_1783445468556_0.7853644753254179","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@by-association-only/shopify-graphql-client","version":"1.3.3","_id":"@by-association-only/shopify-graphql-client@1.3.3","maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"dist":{"shasum":"69aada284d97fd3ca2ad99c0186b9fa1d26eca1d","tarball":"https://registry.npmjs.org/@by-association-only/shopify-graphql-client/-/shopify-graphql-client-1.3.3.tgz","fileCount":6,"integrity":"sha512-wHyMLHjvxSecKb2j/XIYsmeidwJCMTSEHrHubBN3k2sgznQfzjSN5s9QAlrEC6ZY0MZzz0KUh22uEjNnM1W+jA==","signatures":[{"sig":"MEUCIDxB2NjwD/dm7UUn/RXOAow0GuOTEJouRaBrUpxTT0aSAiEAtOwPzTfDdQ5mLn6oEGBBfR37q6He0z09bIPQfRxiVUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24646},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"69aada284d97fd3ca2ad99c0186b9fa1d26eca1d","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"type-check":"tsc --noEmit"},"_npmUser":{"name":"dangamble","email":"dan@bao.agency"},"_integrity":"sha512-wHyMLHjvxSecKb2j/XIYsmeidwJCMTSEHrHubBN3k2sgznQfzjSN5s9QAlrEC6ZY0MZzz0KUh22uEjNnM1W+jA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@shopify/graphql-client":"^1.4.1","@shopify/admin-graphql-api-utilities":"^2.2.0","@by-association-only/shopify-app-utils":"2.0.0","@by-association-only/shopify-admin-types":"0.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.1-rc"},"peerDependencies":{"wrangler":"^4.45.0"},"_npmOperationalInternal":{"tmp":"tmp/shopify-graphql-client_1.3.3_1783463067958_0.7233039126112344","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@by-association-only/shopify-graphql-client","version":"1.4.0","type":"module","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"module":"./dist/index.js","main":"./dist/index.cjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"devDependencies":{"typescript":"^7.0.2"},"peerDependencies":{"wrangler":"^4.45.0"},"dependencies":{"@by-association-only/shopify-admin-types":"0.3.0","@by-association-only/shopify-app-utils":"2.0.0","@shopify/admin-graphql-api-utilities":"^2.2.0","@shopify/graphql-client":"^1.4.1"},"scripts":{"type-check":"tsc --noEmit"},"_id":"@by-association-only/shopify-graphql-client@1.4.0","_integrity":"sha512-LrsArIeUgSGSi8a4R3DebHn9JVcwCx2cuMlIkOsdY3K5LYOFq1mHr0W5YjrfcVmvAy2WVXFbZqBaoiylyWfAJg==","_nodeVersion":"24.3.0","_npmVersion":"10.8.3","shasum":"0f82120163976fdf3115f48ba3e66d27af6c9fd7","dist":{"integrity":"sha512-LrsArIeUgSGSi8a4R3DebHn9JVcwCx2cuMlIkOsdY3K5LYOFq1mHr0W5YjrfcVmvAy2WVXFbZqBaoiylyWfAJg==","shasum":"0f82120163976fdf3115f48ba3e66d27af6c9fd7","tarball":"https://registry.npmjs.org/@by-association-only/shopify-graphql-client/-/shopify-graphql-client-1.4.0.tgz","fileCount":7,"unpackedSize":41368,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHn7EnsaAazh04CkEcWCAt7lEj6WuSQjrCe2co/a2Td5AiBXGtzadiY/kJAaDqIlyd7fZfwywZ7T+oTarVsIUsPYWg=="}]},"_npmUser":{"name":"dangamble","email":"dan@bao.agency"},"directories":{},"maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shopify-graphql-client_1.4.0_1784117928178_0.1752117957464161"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-27T17:53:33.611Z","modified":"2026-07-15T12:18:48.505Z","1.0.0":"2025-10-27T17:53:34.241Z","1.1.0":"2025-10-28T12:53:14.419Z","1.2.0":"2025-10-29T11:05:31.756Z","1.2.1":"2025-10-29T11:15:50.149Z","1.3.0":"2026-07-06T16:25:00.693Z","1.3.1":"2026-07-06T17:44:30.269Z","1.3.2":"2026-07-07T17:31:08.692Z","1.3.3":"2026-07-07T22:24:28.149Z","1.4.0":"2026-07-15T12:18:48.332Z"},"maintainers":[{"name":"dangamble","email":"dan@bao.agency"},{"name":"eng9911","email":"m.p.england@gmail.com"}],"readme":"# @by-association-only/shopify-graphql-client\n\nTyped GraphQL clients for the Shopify Admin and Storefront APIs, built on `@shopify/graphql-client`. Consuming apps need no `@shopify/*-api-client` packages.\n\n## Install\n\n```bash\nbun add @by-association-only/shopify-graphql-client\n```\n\n## Admin API\n\n```typescript\nimport { createShopifyClient } from '@by-association-only/shopify-graphql-client'\n\nconst client = createShopifyClient({\n\tapiVersion: '2026-07',\n\taccessToken: session.accessToken,\n\tshop: 'example.myshopify.com',\n})\n\nconst result = await client.request(ShopQuery)\n```\n\nEndpoint: `https://{shop}/admin/api/{version}/graphql.json` with `X-Shopify-Access-Token` auth.\n\n## Storefront API\n\nEndpoint: `https://{shop}/api/{version}/graphql.json`. Two token classes, per [Shopify's auth docs](https://shopify.dev/docs/api/usage/authentication):\n\n```typescript\nimport { createStorefrontClient } from '@by-association-only/shopify-graphql-client'\n\n// Public token (client-side safe) — sent as X-Shopify-Storefront-Access-Token\nconst client = createStorefrontClient({\n\tapiVersion: '2026-01',\n\tpublicAccessToken: token,\n\tshop: 'example.myshopify.com',\n})\n\n// Private token (server-side only) — sent as Shopify-Storefront-Private-Token.\n// buyerIp forwards the buyer's IP (Shopify-Storefront-Buyer-IP) on requests\n// made on behalf of buyer traffic; it is only accepted with a private token.\nconst serverClient = createStorefrontClient({\n\tapiVersion: '2026-01',\n\tbuyerIp: request.headers.get('cf-connecting-ip') ?? undefined,\n\tprivateAccessToken: env.STOREFRONT_PRIVATE_TOKEN,\n\tshop: 'example.myshopify.com',\n})\n```\n\nThe auth options are a union: `publicAccessToken` or `privateAccessToken` (with optional `buyerIp`), never both.\n\n## Typed operations\n\nGenerate operation types with [`@by-association-only/graphql-app-config`](../graphql-app-config). The generated `storefront.generated.ts` augments this package's `StorefrontQueries`/`StorefrontMutations`, so `client.request` is typed per operation — including `@inContext`:\n\n```typescript\nexport const ProductsQuery = `#graphql\n  query Products($country: CountryCode!, $language: LanguageCode!, $first: Int)\n  @inContext(country: $country, language: $language) {\n    products(first: $first) {\n      edges { node { id title } }\n    }\n  }\n`\n\nimport { CountryCode, LanguageCode } from './types/storefront.types'\nimport './types/storefront.generated'\n\nconst response = await client.request(ProductsQuery, {\n\tvariables: { country: CountryCode.Gb, first: 3, language: LanguageCode.En },\n})\n// response.data?.products.edges[0]?.node.title is string | undefined\n```\n\nAdmin works the same way through `AdminQueries`/`AdminMutations` (see the graphql-app-config README for the wiring).\n\n## Helpers\n\n```typescript\ngidToNumber('gid://shopify/Product/123') // -> 123\n\n// Unwrap Shopify's { <operation>: { <result>, userErrors } } mutation envelope\nconst createThing = createShopifyMutation(rawCreateThing, 'thingCreate', 'thing')\nconst result = await createThing(client, input) // ApiResult<Thing>\nif (!result.success) formApi.setErrorMap(getFieldErrors(result.userErrors))\n```\n\n`createShopifyMutation` accepts mutations written against either client.\n","readmeFilename":"README.md"}