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