← Files ShopifyARCHIVED FILE
skills/shopify-functions/scripts/search_docs.mjs
12.5 KB · Sep 30, 2026 · 23:18 UTC
#!/usr/bin/env node
import{parseArgs as ae}from"util";import{readFileSync as ue,statSync as ce}from"node:fs";import{homedir as de}from"node:os";import{join as d}from"node:path";var re=Object.defineProperty,s=(e,t)=>re(e,"name",{value:t,configurable:!0}),ie=[],se="https://shopify.dev/",oe="https://shopify-dev.shop.dev/";function y(e){return`https://shopify-dev-staging${e}.shopifycloud.com/`}s(y,"stagingHost");var P="SHOPIFY_DEV_SUPPORT_CORE_MCP_DOMAIN",le="Shopify-Dev-Support-Core-Mcp-Domain",A=["shopify.com","shopify.io","shop.dev"];function M(e,t=P){let n=e.trim().toLowerCase();if(!n)throw new Error(`${t} must not be empty.`);let a=n.split(".");if(!(n.length<=253&&a.every(r=>r.length<=63&&/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(r))))throw new Error(`${t} must be a bare hostname (no scheme, port, path, or query); got: "${e}"`);if(!A.some(r=>n===r||n.endsWith(`.${r}`)))throw new Error(`${t} must end with ${A.join(", ")}; got: "${e}"`);return n}s(M,"normalizeSupportCoreDomain");function U(e=process.env){let t=e[P]?.trim();return t?{[le]:M(t)}:{}}s(U,"supportCoreDomainHeaders");function b(e){let t=e?.env??process.env,n=t.SHOPIFY_DEV_STAGING_SERVER_NUMBER?.trim();if(n){if(!/^\d+$/.test(n))throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${n}"`);let r=Number(n);if(!Number.isSafeInteger(r)||r<=0)throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${n}"`);let i=t.MINERVA_TOKEN;if(!i){let o=y(r).replace(/\/$/,"");throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER=${r} is set but no Minerva token is available. Staging servers are behind Minerva. Get a token via:
export MINERVA_TOKEN=$(devx minerva-auth --client-id 0oa1bphetnkOusboI0x8 --audience ${o})`)}return{url:y(r),headers:{Cookie:`MINERVA_TOKEN=${i}`}}}let a=t.SHOPIFY_DEV_INSTRUMENTATION_URL?.trim();return a&&e?.uri?.startsWith("/mcp/usage")?{url:a,headers:{}}:t.DEV&&t.DEV!=="false"?{url:oe,headers:{}}:{url:se,headers:{}}}s(b,"resolveShopifyDevBaseUrl");async function I(e,t){let n,a={};if(e.startsWith("http://")||e.startsWith("https://"))n=new URL(e);else{let i=b({uri:e});n=new URL(e,i.url),a=i.headers}t?.parameters&&Object.entries(t.parameters).forEach(([i,o])=>{n.searchParams.append(i,o)});let r=await fetch(n.toString(),{method:t?.method||"GET",headers:{Accept:"application/json","Cache-Control":"no-cache","X-Shopify-Surface":"mcp","X-Shopify-MCP-Version":t?.instrumentation?.packageVersion||"","X-Shopify-Timestamp":t?.instrumentation?.timestamp||"",...a,...t?.headers},...t?.body&&{body:t.body}});if(!r.ok){let i;try{i=await r.text()}catch{}throw new Error(i?`HTTP ${r.status}: ${i}`:`HTTP error! status: ${r.status}`)}return await r.text()}s(I,"shopifyDevFetch");var me={shopifyql:[{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],admin:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],"storefront-graphql":[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],partner:[{name:"unstable"},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],customer:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],"payments-apps":[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],"polaris-app-home":[{name:"v1.1",releaseCandidate:!0},{name:"v1.0",latestVersion:!0}],"polaris-admin-extensions":[{name:"2026-04",latestVersion:!0},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],"polaris-checkout-extensions":[{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],"polaris-customer-account-extensions":[{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],"pos-ui":[{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],hydrogen:[{name:"2026-04",latestVersion:!0},{name:"2026-01"},{name:"2025-10"},{name:"2025-07"}],"storefront-web-components":[],functions_cart_checkout_validation:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],functions_cart_transform:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],functions_delivery_customization:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],functions_discount:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],functions_discounts_allocator:[{name:"unstable",latestVersion:!0}],functions_fulfillment_constraints:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],functions_local_pickup_delivery_option_generator:[{name:"unstable",latestVersion:!0}],functions_order_discounts:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],functions_order_routing_location_rule:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],functions_payment_customization:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],functions_pickup_point_delivery_option_generator:[{name:"unstable",latestVersion:!0}],functions_product_discounts:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}],functions_shipping_discounts:[{name:"unstable"},{name:"2026-10",releaseCandidate:!0},{name:"2026-07",latestVersion:!0},{name:"2026-04"},{name:"2026-01"},{name:"2025-10"}]},N=me,k=Object.fromEntries(Object.entries(N).filter(([e,t])=>t.length>0).map(([e,t])=>[e,t.map(n=>n.name)]));function T(e){return Object.prototype.hasOwnProperty.call(k,e)}s(T,"hasSupportedVersions");function w(e){return T(e)?k[e]:[]}s(w,"getSupportedVersions");function j(e){let t=N[e];if(t)return t.find(n=>n.latestVersion)?.name??t[0]?.name}s(j,"getLatestVersion");function L(e,t){if(!T(e))throw new Error(`API "${e}" is not in the supported versions catalog. Only call resolveVersion for APIs with entries in SUPPORTED_API_VERSIONS.`);let n=w(e);if(n.length===0)return{ok:!1,reason:"no_versions",supportedVersions:n};let a=H(e,t);if(a)return n.includes(a)?{ok:!0,version:a,source:"explicit",supportedVersions:n}:{ok:!1,reason:"unsupported_version",supportedVersions:n};let r=j(e);return r?{ok:!0,version:r,source:"default",supportedVersions:n}:{ok:!1,reason:"no_versions",supportedVersions:n}}s(L,"resolveVersion");function H(e,t){if(!t||e!=="polaris-app-home")return t;let n=t.replace(/^v/,""),a=/^(\d+)$/.exec(n)?.[1];if(a){let l=N[e]?.filter(p=>!p.releaseCandidate&&new RegExp("^v?"+a+"\\.\\d+$").test(p.name)).sort((p,u)=>{let g=Number(p.name.replace(/^v/,"").split(".")[1]),h=Number(u.name.replace(/^v/,"").split(".")[1]);return g-h}).at(-1)?.name;if(l)return l}let r=n.replace(/-rc$/,""),i=[t,n,"v"+r,r],o=w(e);return i.find(l=>o.includes(l))??t}s(H,"normalizeRequestedVersion");function x(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>{let{description:a,valueName:r,choices:i,...o}=n;return[t,o]}))}s(x,"toParseArgsOptions");var C={model:{type:"string",valueName:"name",description:"Agent model name"},"client-name":{type:"string",valueName:"name",description:"Agent client name"},"client-version":{type:"string",valueName:"version",description:"Agent client version"}},Y={"user-prompt-base64":{type:"string",valueName:"base64",description:"Base64-encoded triggering prompt"},"session-id":{type:"string",valueName:"id",description:"Agent session identifier"},"tool-use-id":{type:"string",valueName:"id",description:"Agent tool-use identifier"}},ye={"artifact-id":{type:"string",valueName:"id",description:"Stable artifact identifier"},revision:{type:"string",valueName:"number",description:"Positive artifact revision"},...C,...Y,json:{type:"boolean",description:"Emit machine-readable JSON"}},pe={help:{type:"boolean",short:"h",description:"Show this help"}};function F(e,t){let n=new Set([...Object.keys(C),...Object.keys(Y),"artifact-id","revision"]),a=Object.entries(t).filter(([i])=>!n.has(i)).map(([i,o])=>{let l=o.type==="string"?o.valueName||o.choices?.join("|")||"value":void 0,p=`--${i}${l?` <${l}>`:""}`;return[o.short?`-${o.short}, ${p}`:p,o.description]}),r=Math.max(...a.map(([i])=>i.length));return["Usage:",...e.map(i=>` ${i}`),"","Options:",...a.map(([i,o])=>` ${i.padEnd(r)} ${o}`)].join(`
`)}s(F,"formatCliHelp");function G(){let e=[process.env.CLAUDE_SESSION_ID,process.env.CLAUDE_CODE_SESSION_ID,process.env.CURSOR_SESSION_ID,process.env.COPILOT_SESSION_ID];for(let t of e)if(typeof t=="string"&&t.length>0)return t}s(G,"readHostSessionId");var v="shopify-ai-toolkit",_="opt-out",fe="SHOPIFY_AI_TOOLKIT_OPT_OUT_FILE",he=new Set(["false","0","no","off"]);function D(e){return{env:e?.env??process.env,platform:e?.platform??process.platform,homeDir:e&&"homeDir"in e?e.homeDir:X(e?.env??process.env)}}s(D,"resolveContext");function X(e){let t=e.HOME?.trim()||e.USERPROFILE?.trim();if(t)return t;try{return de()||void 0}catch{return}}s(X,"resolveHomeDir");function q(e){let{env:t,platform:n,homeDir:a}=D(e),r=[],i=t[fe]?.trim();i&&r.push(i);let o=t.XDG_CONFIG_HOME?.trim();if(o&&r.push(d(o,v,_)),a&&(r.push(d(a,".config",v,_)),n==="darwin"&&r.push(d(a,"Library","Application Support",v,_))),n==="win32"){let l=t.APPDATA?.trim()||(a?d(a,"AppData","Roaming"):void 0);l&&r.push(d(l,v,_))}return[...new Set(r.filter(l=>!!l))]}s(q,"telemetryOptOutFileCandidates");function z(e){if(e.OPT_OUT_INSTRUMENTATION?.trim().toLowerCase()==="true")return!0;let t=e.DO_NOT_TRACK?.trim().toLowerCase();return t==="1"||t==="true"}s(z,"envSaysOptOut");function B(e){try{if(!ce(e).isFile())return!1}catch{return!1}try{let t=ue(e,"utf8").trim().toLowerCase();return!he.has(t)}catch{return!0}}s(B,"fileSaysOptOut");function K(e){try{let t=D(e);return z(t.env)?!0:q(t).some(B)}catch{return!1}}s(K,"isTelemetryOptedOut");function J(e){return{...e?.api&&{api:e.api},...e?.api_version&&{api_version:e.api_version},...e?.resolve_api_version&&{resolve_api_version:e.resolve_api_version}}}s(J,"nonEmptyUsageMetadata");function ve(){return K()}s(ve,"isInstrumentationDisabled");async function E(e,t,n,a){}s(E,"reportValidation");var W={version:{type:"string",valueName:"YYYY-MM|unstable",description:"Shopify API version"},...C,"session-id":{type:"string",valueName:"id",description:"Agent session identifier"},"tool-use-id":{type:"string",valueName:"id",description:"Agent tool-use identifier"},...pe},_e=F(['scripts/search_docs.mjs "<query>" [options]'],W),{values:m,positionals:Se}=ae({options:x(W),allowPositionals:!0});m.help&&(console.log(_e),process.exit(0));var S=Se[0];S||(console.error('Usage: scripts/search_docs.mjs "<query>" [options] (run with --help for details)'),process.exit(1));var f=m.version,O;function V(){return{api:"functions",...f&&{api_version:f},...O&&{resolve_api_version:O}}}s(V,"searchUsageMetadata");async function Q(e,t,n){let a={query:e};t&&(a.api_name=t),n&&(a.api_version=n);let r=await I("/assistant/search",{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Surface":"skills",...U()},body:JSON.stringify(a),instrumentation:{packageVersion:"1.15.0",timestamp:new Date().toISOString()}});try{let i=JSON.parse(r);return JSON.stringify(i,null,2)}catch{return r}}s(Q,"performSearch");try{let e=f;if(ie.length>0){let n=L("functions",f);if(!n.ok)throw new Error(`Invalid --version: "${f}". Supported versions: ${n.supportedVersions.join(", ")}.`);O=n.version,e=n.version}let t=await Q(S,"functions",e||void 0);process.stdout.write(t),process.stdout.write(`
`),await E("search_docs",t,{model:m.model,clientName:m["client-name"],clientVersion:m["client-version"],sessionId:m["session-id"],toolUseId:m["tool-use-id"],query:S},V())}catch(e){let t=e instanceof Error?e.message:String(e);console.error(`Search failed: ${t}`),await E("search_docs",t,{model:m.model,clientName:m["client-name"],clientVersion:m["client-version"],sessionId:m["session-id"],toolUseId:m["tool-use-id"],query:S},V()),process.exit(1)}
SHA-256: 9f371eabea30ddb02b904e852e1fd1a2bdc79ca491361ff3e4ff3e97e3190fa8