← Files ShopifyARCHIVED FILE
skills/shopify-app-pricing/scripts/search_docs.mjs
7.42 KB · Oct 5, 2026 · 12:03 UTC
#!/usr/bin/env node
import{parseArgs as z}from"util";import{readFileSync as re,statSync as ie}from"node:fs";import{homedir as oe}from"node:os";import{join as m}from"node:path";var W=Object.defineProperty,a=(e,t)=>W(e,"name",{value:t,configurable:!0}),Q="https://shopify.dev/",Z="https://shopify-dev.shop.dev/";function S(e){return`https://shopify-dev-staging${e}.shopifycloud.com/`}a(S,"stagingHost");var $="SHOPIFY_DEV_SUPPORT_CORE_MCP_DOMAIN",ee="Shopify-Dev-Support-Core-Mcp-Domain",b=["shopify.com","shopify.io","shop.dev"];function A(e,t=$){let o=e.trim().toLowerCase();if(!o)throw new Error(`${t} must not be empty.`);let n=o.split(".");if(!(o.length<=253&&n.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(!b.some(r=>o===r||o.endsWith(`.${r}`)))throw new Error(`${t} must end with ${b.join(", ")}; got: "${e}"`);return o}a(A,"normalizeSupportCoreDomain");function C(e=process.env){let t=e[$]?.trim();return t?{[ee]:A(t)}:{}}a(C,"supportCoreDomainHeaders");function E(e){let t=e?.env??process.env,o=t.SHOPIFY_DEV_STAGING_SERVER_NUMBER?.trim();if(o){if(!/^\d+$/.test(o))throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${o}"`);let r=Number(o);if(!Number.isSafeInteger(r)||r<=0)throw new Error(`SHOPIFY_DEV_STAGING_SERVER_NUMBER must be a positive integer; got: "${o}"`);let i=t.MINERVA_TOKEN;if(!i){let s=S(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 ${s})`)}return{url:S(r),headers:{Cookie:`MINERVA_TOKEN=${i}`}}}let n=t.SHOPIFY_DEV_INSTRUMENTATION_URL?.trim();return n&&e?.uri?.startsWith("/mcp/usage")?{url:n,headers:{}}:t.DEV&&t.DEV!=="false"?{url:Z,headers:{}}:{url:Q,headers:{}}}a(E,"resolveShopifyDevBaseUrl");async function O(e,t){let o,n={};if(e.startsWith("http://")||e.startsWith("https://"))o=new URL(e);else{let i=E({uri:e});o=new URL(e,i.url),n=i.headers}t?.parameters&&Object.entries(t.parameters).forEach(([i,s])=>{o.searchParams.append(i,s)});let r=await fetch(o.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||"",...n,...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()}a(O,"shopifyDevFetch");function M(e){return Object.fromEntries(Object.entries(e).map(([t,o])=>{let{description:n,valueName:r,choices:i,...s}=o;return[t,s]}))}a(M,"toParseArgsOptions");var N={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"}},P={"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"}},ue={"artifact-id":{type:"string",valueName:"id",description:"Stable artifact identifier"},revision:{type:"string",valueName:"number",description:"Positive artifact revision"},...N,...P,json:{type:"boolean",description:"Emit machine-readable JSON"}},te={help:{type:"boolean",short:"h",description:"Show this help"}};function U(e,t){let o=new Set([...Object.keys(N),...Object.keys(P),"artifact-id","revision"]),n=Object.entries(t).filter(([i])=>!o.has(i)).map(([i,s])=>{let l=s.type==="string"?s.valueName||s.choices?.join("|")||"value":void 0,c=`--${i}${l?` <${l}>`:""}`;return[s.short?`-${s.short}, ${c}`:c,s.description]}),r=Math.max(...n.map(([i])=>i.length));return["Usage:",...e.map(i=>` ${i}`),"","Options:",...n.map(([i,s])=>` ${i.padEnd(r)} ${s}`)].join(`
`)}a(U,"formatCliHelp");function V(){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}a(V,"readHostSessionId");var d="shopify-ai-toolkit",h="opt-out",ne="SHOPIFY_AI_TOOLKIT_OPT_OUT_FILE",se=new Set(["false","0","no","off"]);function T(e){return{env:e?.env??process.env,platform:e?.platform??process.platform,homeDir:e&&"homeDir"in e?e.homeDir:L(e?.env??process.env)}}a(T,"resolveContext");function L(e){let t=e.HOME?.trim()||e.USERPROFILE?.trim();if(t)return t;try{return oe()||void 0}catch{return}}a(L,"resolveHomeDir");function j(e){let{env:t,platform:o,homeDir:n}=T(e),r=[],i=t[ne]?.trim();i&&r.push(i);let s=t.XDG_CONFIG_HOME?.trim();if(s&&r.push(m(s,d,h)),n&&(r.push(m(n,".config",d,h)),o==="darwin"&&r.push(m(n,"Library","Application Support",d,h))),o==="win32"){let l=t.APPDATA?.trim()||(n?m(n,"AppData","Roaming"):void 0);l&&r.push(m(l,d,h))}return[...new Set(r.filter(l=>!!l))]}a(j,"telemetryOptOutFileCandidates");function H(e){if(e.OPT_OUT_INSTRUMENTATION?.trim().toLowerCase()==="true")return!0;let t=e.DO_NOT_TRACK?.trim().toLowerCase();return t==="1"||t==="true"}a(H,"envSaysOptOut");function k(e){try{if(!ie(e).isFile())return!1}catch{return!1}try{let t=re(e,"utf8").trim().toLowerCase();return!se.has(t)}catch{return!0}}a(k,"fileSaysOptOut");function Y(e){try{let t=T(e);return H(t.env)?!0:j(t).some(k)}catch{return!1}}a(Y,"isTelemetryOptedOut");function F(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}}}a(F,"nonEmptyUsageMetadata");function ae(){return Y()}a(ae,"isInstrumentationDisabled");async function y(e,t,o,n){}a(y,"reportValidation");var G={version:{type:"string",valueName:"YYYY-MM|unstable",description:"Shopify API version"},...N,"session-id":{type:"string",valueName:"id",description:"Agent session identifier"},"tool-use-id":{type:"string",valueName:"id",description:"Agent tool-use identifier"},...te},pe=U(['scripts/search_docs.mjs "<query>" [options]'],G),{values:p,positionals:le}=z({options:M(G),allowPositionals:!0});p.help&&(console.log(pe),process.exit(0));var f=le[0];f||(console.error('Usage: scripts/search_docs.mjs "<query>" [options] (run with --help for details)'),process.exit(1));var g=p.version,R;function _(){return{..."",...g&&{api_version:g},...R&&{resolve_api_version:R}}}a(_,"searchUsageMetadata");async function x(e,t,o){let n={query:e};t&&(n.api_name=t),o&&(n.api_version=o);let r=await O("/assistant/search",{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Surface":"skills",...C()},body:JSON.stringify(n),instrumentation:{packageVersion:"1.15.0",timestamp:new Date().toISOString()}});try{let i=JSON.parse(r);return JSON.stringify(i,null,2)}catch{return r}}a(x,"performSearch");try{let e=await x(f,void 0,g||void 0);process.stdout.write(e),process.stdout.write(`
`),await y("search_docs",e,{model:p.model,clientName:p["client-name"],clientVersion:p["client-version"],sessionId:p["session-id"],toolUseId:p["tool-use-id"],query:f},_())}catch(e){let t=e instanceof Error?e.message:String(e);console.error(`Search failed: ${t}`),await y("search_docs",t,{model:p.model,clientName:p["client-name"],clientVersion:p["client-version"],sessionId:p["session-id"],toolUseId:p["tool-use-id"],query:f},_()),process.exit(1)}
SHA-256: e8fcc961d3d5008498de19e4e3c5c85ef8588b6aa4868ae5a01dcbd0690b925d