← Files ShopifyARCHIVED FILE

skills/shopify-admin/scripts/search_docs.mjs

12.9 KB · Sep 30, 2026 · 23:18 UTC

↓ Download file

#!/usr/bin/env node
var z=Object.defineProperty;var s=(e,t)=>z(e,"name",{value:t,configurable:!0});var p=["unstable","2026-10","2026-07","2026-04","2026-01","2025-10"];import{parseArgs as ge}from"util";var Q="https://shopify.dev/",Z="https://shopify-dev.shop.dev/";function R(e){return`https://shopify-dev-staging${e}.shopifycloud.com/`}s(R,"stagingHost");var P="SHOPIFY_DEV_SUPPORT_CORE_MCP_DOMAIN",ee="Shopify-Dev-Support-Core-Mcp-Domain",b=["shopify.com","shopify.io","shop.dev"];function te(e,t=P){let n=e.trim().toLowerCase();if(!n)throw new Error(`${t} must not be empty.`);let i=n.split(".");if(!(n.length<=253&&i.every(a=>a.length<=63&&/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(a))))throw new Error(`${t} must be a bare hostname (no scheme, port, path, or query); got: "${e}"`);if(!b.some(a=>n===a||n.endsWith(`.${a}`)))throw new Error(`${t} must end with ${b.join(", ")}; got: "${e}"`);return n}s(te,"normalizeSupportCoreDomain");function A(e=process.env){let t=e[P]?.trim();return t?{[ee]:te(t)}:{}}s(A,"supportCoreDomainHeaders");function O(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 o=t.MINERVA_TOKEN;if(!o){let a=R(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 ${a})`)}return{url:R(r),headers:{Cookie:`MINERVA_TOKEN=${o}`}}}let i=t.SHOPIFY_DEV_INSTRUMENTATION_URL?.trim();return i&&e?.uri?.startsWith("/mcp/usage")?{url:i,headers:{}}:t.DEV&&t.DEV!=="false"?{url:Z,headers:{}}:{url:Q,headers:{}}}s(O,"resolveShopifyDevBaseUrl");async function _(e,t){let n,i={};if(e.startsWith("http://")||e.startsWith("https://"))n=new URL(e);else{let o=O({uri:e});n=new URL(e,o.url),i=o.headers}t?.parameters&&Object.entries(t.parameters).forEach(([o,a])=>{n.searchParams.append(o,a)});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||"",...i,...t?.headers},...t?.body&&{body:t.body}});if(!r.ok){let o;try{o=await r.text()}catch{}throw new Error(o?`HTTP ${r.status}: ${o}`:`HTTP error! status: ${r.status}`)}return await r.text()}s(_,"shopifyDevFetch");var C={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":[],"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"}]};var D=C,x=Object.fromEntries(Object.entries(D).filter(([e,t])=>t.length>0).map(([e,t])=>[e,t.map(n=>n.name)]));function L(e){return Object.prototype.hasOwnProperty.call(x,e)}s(L,"hasSupportedVersions");function re(e){return L(e)?x[e]:[]}s(re,"getSupportedVersions");function se(e){let t=D[e];if(t)return t.find(n=>n.latestVersion)?.name??t[0]?.name}s(se,"getLatestVersion");function k(e,t){if(!L(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=re(e);if(n.length===0)return{ok:!1,reason:"no_versions",supportedVersions:n};if(t)return n.includes(t)?{ok:!0,version:t,source:"explicit",supportedVersions:n}:{ok:!1,reason:"unsupported_version",supportedVersions:n};let i=se(e);return i?{ok:!0,version:i,source:"default",supportedVersions:n}:{ok:!1,reason:"no_versions",supportedVersions:n}}s(k,"resolveVersion");function U(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>{let{description:i,valueName:r,choices:o,...a}=n;return[t,a]}))}s(U,"toParseArgsOptions");var h={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"}},oe={"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"}},Ae={"artifact-id":{type:"string",valueName:"id",description:"Stable artifact identifier"},revision:{type:"string",valueName:"number",description:"Positive artifact revision"},...h,...oe,json:{type:"boolean",description:"Emit machine-readable JSON"}},w={help:{type:"boolean",short:"h",description:"Show this help"}};function M(e,t){let n=Object.entries(t).map(([r,o])=>{let a=o.type==="string"?o.valueName||o.choices?.join("|")||"value":void 0,d=`--${r}${a?` <${a}>`:""}`;return[o.short?`-${o.short}, ${d}`:d,o.description]}),i=Math.max(...n.map(([r])=>r.length));return["Usage:",...e.map(r=>`  ${r}`),"","Options:",...n.map(([r,o])=>`  ${r.padEnd(i)}  ${o}`)].join(`
`)}s(M,"formatCliHelp");function F(){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(F,"readHostSessionId");import{readFileSync as ie,statSync as ae}from"node:fs";import{homedir as ce}from"node:os";import{join as l}from"node:path";var g="shopify-ai-toolkit",E="opt-out",de="SHOPIFY_AI_TOOLKIT_OPT_OUT_FILE",pe=new Set(["false","0","no","off"]);function $(e){return{env:e?.env??process.env,platform:e?.platform??process.platform,homeDir:e&&"homeDir"in e?e.homeDir:ue(e?.env??process.env)}}s($,"resolveContext");function ue(e){let t=e.HOME?.trim()||e.USERPROFILE?.trim();if(t)return t;try{return ce()||void 0}catch{return}}s(ue,"resolveHomeDir");function le(e){let{env:t,platform:n,homeDir:i}=$(e),r=[],o=t[de]?.trim();o&&r.push(o);let a=t.XDG_CONFIG_HOME?.trim();if(a&&r.push(l(a,g,E)),i&&(r.push(l(i,".config",g,E)),n==="darwin"&&r.push(l(i,"Library","Application Support",g,E))),n==="win32"){let d=t.APPDATA?.trim()||(i?l(i,"AppData","Roaming"):void 0);d&&r.push(l(d,g,E))}return[...new Set(r.filter(d=>!!d))]}s(le,"telemetryOptOutFileCandidates");function me(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(me,"envSaysOptOut");function fe(e){try{if(!ae(e).isFile())return!1}catch{return!1}try{let t=ie(e,"utf8").trim().toLowerCase();return!pe.has(t)}catch{return!0}}s(fe,"fileSaysOptOut");function H(e){try{let t=$(e);return me(t.env)?!0:le(t).some(fe)}catch{return!1}}s(H,"isTelemetryOptedOut");function B(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(B,"nonEmptyUsageMetadata");function _e(){return H()}s(_e,"isInstrumentationDisabled");async function v(e,t,n,i){if(_e())return;let{model:r,clientName:o,clientVersion:a,user_prompt:d,sessionId:f,toolUseId:I,...Y}=n??{},T=typeof f=="string"&&f.length>0?f:F(),N=typeof d=="string"&&d.length>0?d.slice(0,2e3):void 0;try{let u={"Content-Type":"application/json","X-Shopify-Surface":"skills"};o&&(u["X-Shopify-Client-Name"]=String(o)),a&&(u["X-Shopify-Client-Version"]=String(a)),r&&(u["X-Shopify-Client-Model"]=String(r));let V=JSON.stringify({tool:e,parameters:{skill:"shopify-admin",skillVersion:"1.14.1",...N!==void 0&&{user_prompt:N},...T!==void 0&&{sessionId:T},...typeof I=="string"&&I.length>0&&{toolUseId:I},...Y},result:t,...B(i)});if(process.env.SKILL_TELEMETRY_TEST_MODE==="1"){let{url:G}=O({uri:"/mcp/usage"}),J=new URL("/mcp/usage",G).toString();process.stderr.write([`[TEST_TELEMETRY_ENDPOINT] ${J}`,...Object.entries(u).map(([X,q])=>`[TEST_TELEMETRY_HEADER] ${X}: ${q}`),`[TEST_TELEMETRY_BODY] ${V}`,""].join(`
`));return}await _("/mcp/usage",{method:"POST",headers:u,body:V,instrumentation:{packageVersion:"1.14.1",timestamp:new Date().toISOString()}})}catch{}}s(v,"reportValidation");var j={version:{type:"string",valueName:"YYYY-MM|unstable",description:"Shopify API version"},...h,"session-id":{type:"string",valueName:"id",description:"Agent session identifier"},"tool-use-id":{type:"string",valueName:"id",description:"Agent tool-use identifier"},...w},Ee=M(['scripts/search_docs.mjs "<query>" [options]'],j),{values:c,positionals:Se}=ge({options:U(j),allowPositionals:!0});c.help&&(console.log(Ee),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 m=c.version,y;function K(){return{api:"admin",...m&&{api_version:m},...y&&{resolve_api_version:y}}}s(K,"searchUsageMetadata");async function Ie(e,t,n){let i={query:e};t&&(i.api_name=t),n&&(i.api_version=n);let r=await _("/assistant/search",{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Surface":"skills",...A()},body:JSON.stringify(i),instrumentation:{packageVersion:"1.14.1",timestamp:new Date().toISOString()}});try{let o=JSON.parse(r);return JSON.stringify(o,null,2)}catch{return r}}s(Ie,"performSearch");try{let e=m;if(p.length>0){let n=k("admin",m);if(!n.ok)throw new Error(`Invalid --version: "${m}". Supported versions: ${n.supportedVersions.join(", ")}.`);y=n.version,e=n.version}let t=await Ie(S,"admin",e||void 0);process.stdout.write(t),process.stdout.write(`
`),await v("search_docs",t,{model:c.model,clientName:c["client-name"],clientVersion:c["client-version"],sessionId:c["session-id"],toolUseId:c["tool-use-id"],query:S},K())}catch(e){let t=e instanceof Error?e.message:String(e);console.error(`Search failed: ${t}`),await v("search_docs",t,{model:c.model,clientName:c["client-name"],clientVersion:c["client-version"],sessionId:c["session-id"],toolUseId:c["tool-use-id"],query:S},K()),process.exit(1)}

SHA-256: cdbae1beffaafe392834d34c3a90a0c59dddfb24e968ddf41240c2e31c19ca4f