@goldskycom/cli 1.15.0 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -488,10 +488,12 @@ ${$i.default.gray(hje+Jie.repeat(i+2)+gje)}
488
488
  `)},Hg=(e="")=>{process.stdout.write(`${$i.default.gray(dje)} ${e}
489
489
  `)};var _x=()=>{let e=Z6?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],t=Z6?80:120,r,n,i=!1,s="",o=(u="")=>{i=!0,r=Kie(),s=u.replace(/\.+$/,""),process.stdout.write(`${$i.default.gray(am)}
490
490
  `);let p=0,m=0;n=setInterval(()=>{let g=$i.default.magenta(e[p]),y=".".repeat(Math.floor(m)).slice(0,3);process.stdout.write(vx.cursor.move(-999,0)),process.stdout.write(vx.erase.down(1)),process.stdout.write(`${g} ${s}${y}`),p=p+1<e.length?p+1:0,m=m<e.length?m+.125:0},t)},a=(u="",p=0)=>{s=u??s,i=!1,clearInterval(n);let m=p===0?$i.default.green(r5):p===1?$i.default.red(Qie):$i.default.red(Zie);process.stdout.write(vx.cursor.move(-999,0)),process.stdout.write(vx.erase.down(1)),process.stdout.write(`${m} ${s}
491
- `),r()},c=(u="")=>{s=u??s},l=u=>{let p=u>1?"Something went wrong":"Canceled";i&&a(p,u)};return process.on("uncaughtExceptionMonitor",()=>l(2)),process.on("unhandledRejection",()=>l(2)),process.on("SIGINT",()=>l(1)),process.on("SIGTERM",()=>l(1)),process.on("exit",l),{start:o,stop:a,message:c}};function yje(){let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(e,"g")}var tCe=require("child_process"),rCe=require("fs");var th=async e=>{let t=await e;return Qy(t)&&(Zy("Operation cancelled."),process.exit(1)),t};async function rse(e){return th(Qh(Xa({},e)))}async function Wf(e){return e.options.length===1?e.options[0].value:th(yT(Xa({maxItems:15},e)))}async function Zl(e,t={}){let{required:r=!0}=t,n=await th(ese(bd(Xa({defaultValue:r?void 0:" ",validate(i){if(r&&i.trim().length===0)return"Value is required"}},e),{placeholder:r?e.placeholder||"":`(optional) ${e.placeholder||""}`})));if(t.required||n&&n.trim())return n}var f5=dr(qse());var Lse={barCompleteChar:"\u25A0",barIncompleteChar:" ",format:"{bar} {percentage}% | {value}/{total}"},vT=()=>new f5.default.SingleBar(Xa({},Lse)),Bse=()=>new f5.default.MultiBar(bd(Xa({},Lse),{hideCursor:!0,clearOnComplete:!0,stopOnComplete:!0,emptyOnZero:!0,forceRedraw:!0}));var Mse=require("child_process");var uv=()=>{let e=_x();e.start("Checking prerequisites");try{(0,Mse.execSync)("duckdb --version",{stdio:"ignore"})}catch(t){e.stop("Please install DuckDB. This helps us efficiently process indexed.xyz data. Instructions can be found at https://duckdb.org/docs/installation"),process.exit(1)}e.stop("Checked prerequisites"),process.on("SIGINT",()=>{process.exit(1)})};var Jxe=dr(require("crypto")),IC=require("fs"),L3=dr(require("path")),Qxe=dr(Dy());var B3=dr(RSe()),Zxe=dr(fm()),QAt=()=>{var e,t;return new Qxe.S3Client({credentials:{accessKeyId:(e=process.env.INDEXED_ACCESS_KEY_ID)!=null?e:"27fa1255881f94d1c05b56ba1d47e1fb",secretAccessKey:(t=process.env.INDEXED_SECRET_ACCESS_KEY)!=null?t:"53f7c1e9edbd9f34d82819c8f3707d83a968d813edc4d9d4be127f99b990fc10"},endpoint:"https://ed5d915e0259fcddb2ab1ce5592040c3.r2.cloudflarestorage.com",region:"auto"})},M3=e=>Jxe.default.createHash("md5").update(e).digest("hex").slice(-2),NC=({network:e,datasetType:t,tableName:r,partitionKey:n,version:i})=>{let s=n==="*"?"":`/partition_key=${n}`;return`${e}/${t}/${r}/v${i}${s}`},ZAt=e=>{let t=!1;return r=>{t?e.setTotal(r.count.total):(e.start(r.count.total,0),t=!0)}},Yxe,ePt=(e,t,r)=>n=>{e&&e(n.filePath),t.increment(),t.getProgress()===1&&(t.stop(),r&&!Yxe&&(Yxe=(0,Zxe.default)("Waiting for new data...").start()))},tPt=(e,t,r)=>{let n=new B3.TransferMonitor;return n.on("progress",ZAt(t)),n.on("done",ePt(e,t,r)),n},eCe=(e,t,r="")=>{(0,IC.readdirSync)(e).forEach(i=>{let s=L3.default.join(e,i),o=(0,IC.statSync)(s);if(o.isDirectory()){let a=L3.default.join(r,i);eCe(s,t,a)}else if(o.isFile()){let a=L3.default.join(r,i);t.add(a)}})},Uv=e=>{Zh(`1. Open a second terminal in this directory
491
+ `),r()},c=(u="")=>{s=u??s},l=u=>{let p=u>1?"Something went wrong":"Canceled";i&&a(p,u)};return process.on("uncaughtExceptionMonitor",()=>l(2)),process.on("unhandledRejection",()=>l(2)),process.on("SIGINT",()=>l(1)),process.on("SIGTERM",()=>l(1)),process.on("exit",l),{start:o,stop:a,message:c}};function yje(){let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(e,"g")}var tCe=require("child_process"),rCe=require("fs");var th=async e=>{let t=await e;return Qy(t)&&(Zy("Operation cancelled."),process.exit(1)),t};async function rse(e){return th(Qh(Xa({},e)))}async function Wf(e){return e.options.length===1?e.options[0].value:th(yT(Xa({maxItems:15},e)))}async function Zl(e,t={}){let{required:r=!0}=t,n=await th(ese(bd(Xa({defaultValue:r?void 0:" ",validate(i){if(r&&i.trim().length===0)return"Value is required"}},e),{placeholder:r?e.placeholder||"":`(optional) ${e.placeholder||""}`})));if(t.required||n&&n.trim())return n}var f5=dr(qse());var Lse={barCompleteChar:"\u25A0",barIncompleteChar:" ",format:"{bar} {percentage}% | {value}/{total}"},vT=()=>new f5.default.SingleBar(Xa({},Lse)),Bse=()=>new f5.default.MultiBar(bd(Xa({},Lse),{hideCursor:!0,clearOnComplete:!0,stopOnComplete:!0,emptyOnZero:!0,forceRedraw:!0}));var Mse=require("child_process");var uv=()=>{let e=_x();e.start("Checking prerequisites");try{(0,Mse.execSync)("duckdb --version",{stdio:"ignore"})}catch(t){e.stop("Please install DuckDB. This helps us efficiently process indexed.xyz data. Instructions can be found at https://duckdb.org/docs/installation"),process.exit(1)}e.stop("Checked prerequisites"),process.on("SIGINT",()=>{process.stdout.write(`
492
+ `),process.exit(1)})};var Jxe=dr(require("crypto")),IC=require("fs"),L3=dr(require("path")),Qxe=dr(Dy());var B3=dr(RSe()),Zxe=dr(fm()),QAt=()=>{var e,t;return new Qxe.S3Client({credentials:{accessKeyId:(e=process.env.INDEXED_ACCESS_KEY_ID)!=null?e:"27fa1255881f94d1c05b56ba1d47e1fb",secretAccessKey:(t=process.env.INDEXED_SECRET_ACCESS_KEY)!=null?t:"53f7c1e9edbd9f34d82819c8f3707d83a968d813edc4d9d4be127f99b990fc10"},endpoint:"https://ed5d915e0259fcddb2ab1ce5592040c3.r2.cloudflarestorage.com",region:"auto"})},M3=e=>Jxe.default.createHash("md5").update(e).digest("hex").slice(-2),NC=({network:e,datasetType:t,tableName:r,partitionKey:n,version:i})=>{let s=n==="*"?"":`/partition_key=${n}`;return`${e}/${t}/${r}/v${i}${s}`},ZAt=e=>{let t=!1;return r=>{t?e.setTotal(r.count.total):(e.start(r.count.total,0),t=!0)}},Yxe,ePt=(e,t,r)=>n=>{e&&e(n.filePath),t.increment(),t.getProgress()===1&&(t.stop(),r&&!Yxe&&(Yxe=(0,Zxe.default)("Waiting for new data...").start()))},tPt=(e,t,r)=>{let n=new B3.TransferMonitor;return n.on("progress",ZAt(t)),n.on("done",ePt(e,t,r)),n},eCe=(e,t,r="")=>{(0,IC.readdirSync)(e).forEach(i=>{let s=L3.default.join(e,i),o=(0,IC.statSync)(s);if(o.isDirectory()){let a=L3.default.join(r,i);eCe(s,t,a)}else if(o.isFile()){let a=L3.default.join(r,i);t.add(a)}})},Uv=e=>{Zh(`1. Open a second terminal in this directory
492
493
  2. Start DuckDB with \`duckdb\`
493
494
  3. Write your DuckDB SQL queries, e.g. \`SELECT COUNT(*) FROM './data/${e}/*.parquet';\``,"Query data (even while syncing)")},qC=async({sourcePath:e,destinationPath:t,processFile:r,relocations:n,syncProgress:i,shouldSyncContinuously:s=!0})=>{let o=QAt(),{sync:a}=new B3.default({client:o});(0,IC.mkdirSync)(t,{recursive:!0});let c=new Set;do eCe(t,c),await a(`s3://indexed-xyz/${e}`,t,{filters:[{exclude:()=>!0},{include:l=>!c.has(l)}],relocations:n,monitor:tPt(r,i,s)});while(s)};var Gv=async(e,t)=>{console.error(e),await rse({message:"Would you like to see more details?"})&&console.error(t)};var rPt=()=>Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0").toLowerCase()),nPt=async(e,t=10)=>{let r=0,n=async()=>{for(;r<e.length;){let s=e[r];r++,s&&(await s(),await n())}},i=e.slice(0,t);await Promise.all(i.map(n))},j3=async(e,t,r)=>{let n=rPt(),i=Bse(),s=1,o=n.map(a=>async()=>{let c=NC({datasetType:"raw",network:e,partitionKey:a,tableName:"transactions",version:r}),l=i.create(0,0);await qC({sourcePath:c,destinationPath:"./data",relocations:[u=>{let p=u.split("/").pop();return`${t}/${p}`}],syncProgress:l,shouldSyncContinuously:!1}),i.log(`Processed ${s++} / ${n.length} parts
494
- `),i.remove(l)});await nPt(o),console.log("Sync complete.")},Xv=()=>{let e=_x();e.start(),e.stop('Syncing... data is stored in the "./data" directory. Stop with Ctrl + C.'),console.log(""),process.on("SIGINT",()=>{process.exit(1)})};var iPt="1.0.0",sPt=(e,t)=>r=>{let n=r.split("/").pop(),i=`./data/${e}/${n}`;try{(0,tCe.execSync)(`duckdb -c "COPY (SELECT * FROM '${r}' WHERE lower(address) IN (lower('${t}'))) TO '${i}' (FORMAT 'parquet');"`)}catch(s){}},oPt=async e=>{let t={contractAddress:e.contractAddress,network:e.network};return t.contractAddress||(t.contractAddress=await Zl({message:"What is the contract address you are interested in?"})),{contractAddress:t.contractAddress.toLowerCase(),network:t.network.toLowerCase()}},aPt="decoded-logs",cPt="Sync decoded logs for a smart contract from a network to this computer",lPt=e=>e.option("contract-address",{describe:"The contract address you are interested in",type:"string",default:""}).option("network",{describe:"The network of indexed.xyz data to synchronize",type:"string",default:"ethereum"}).option("dataVersion",{describe:"The version of indexed.xyz data to synchronize",type:"string",default:iPt,hidden:!0}),uPt=async e=>{try{console.log(""),Hg("Sync decoded logs from indexed.xyz to your local computer"),uv();let{contractAddress:t,network:r}=await oPt(e),n=M3(t),i=NC({datasetType:"decoded",network:r,partitionKey:n,tableName:"logs",version:e.dataVersion}),s=`${r}/decoded/logs/${t}`;(0,rCe.mkdirSync)(`./data/${s}`,{recursive:!0}),Uv(s),Xv(),await qC({sourcePath:i,destinationPath:"./data/.tmp",processFile:sPt(s,t),syncProgress:vT()})}catch(t){await Gv("Syncing failed.",t),process.exit(1)}};var GH={};id(GH,{builder:()=>hPt,command:()=>mPt,describe:()=>fPt,handler:()=>gPt});var nCe=require("fs");var dPt="1.0.0",pPt=e=>({network:{network:e.network}.network.toLowerCase()}),mPt="raw-blocks",fPt="Sync all blocks from a network",hPt=e=>e.option("network",{describe:"The network of indexed.xyz data to synchronize",type:"string",default:"ethereum"}).option("dataVersion",{describe:"The version of indexed.xyz data to synchronize",type:"string",default:dPt,hidden:!0}),gPt=async e=>{try{console.log(""),Hg("Sync raw blocks from indexed.xyz to your local computer"),uv();let{network:t}=pPt(e),r=`${t}/raw/blocks`;(0,nCe.mkdirSync)(`./data/${r}`,{recursive:!0}),Uv(r),Xv(),await j3(t,r,e.dataVersion)}catch(t){await Gv("Syncing failed.",t),process.exit(1)}};var XH={};id(XH,{builder:()=>SPt,command:()=>_Pt,describe:()=>wPt,handler:()=>xPt});var iCe=require("child_process"),sCe=require("fs");var yPt="1.0.0",bPt=(e,t)=>r=>{let n=r.split("/").pop(),i=`./data/${e}/${n}`;try{(0,iCe.execSync)(`duckdb -c "COPY (SELECT * FROM '${r}' WHERE lower(address) IN (lower('${t}'))) TO '${i}' (FORMAT 'parquet');"`)}catch(s){}},vPt=async e=>{let t={contractAddress:e.contractAddress,network:e.network};return t.contractAddress||(t.contractAddress=await Zl({message:"What is the contract address you are interested in?"})),{contractAddress:t.contractAddress.toLowerCase(),network:t.network.toLowerCase()}},_Pt="raw-logs",wPt="Sync all logs from a network",SPt=e=>e.option("contract-address",{describe:"The contract address you are interested in",type:"string",default:""}).option("network",{describe:"The network of indexed.xyz data to synchronize",type:"string",default:"ethereum"}).option("dataVersion",{describe:"The version of indexed.xyz data to synchronize",type:"string",default:yPt,hidden:!0}),xPt=async e=>{try{console.log(""),Hg("Sync raw logs from indexed.xyz to your local computer"),uv();let{contractAddress:t,network:r}=await vPt(e),n=M3(t),i=NC({datasetType:"raw",network:r,partitionKey:n,tableName:"logs",version:e.dataVersion}),s=`${r}/raw/logs/${t}`;(0,sCe.mkdirSync)(`./data/${s}`,{recursive:!0}),Uv(s),Xv(),await qC({sourcePath:i,destinationPath:".data/.tmp",processFile:bPt(s,t),syncProgress:vT()})}catch(t){await Gv("Syncing failed.",t),process.exit(1)}};var VH={};id(VH,{builder:()=>PPt,command:()=>DPt,describe:()=>APt,handler:()=>kPt});var oCe=require("fs");var CPt="1.0.0",EPt=e=>({network:{network:e.network}.network.toLowerCase()}),DPt="raw-transactions",APt="Sync all transactions from a network",PPt=e=>e.option("network",{describe:"The network of indexed.xyz data to synchronize",type:"string",default:"ethereum"}).option("dataVersion",{describe:"The version of indexed.xyz data to synchronize",type:"string",default:CPt,hidden:!0}),kPt=async e=>{try{console.log(""),Hg("Sync raw transactions from indexed.xyz to your local computer"),uv();let{network:t}=EPt(e),r=`${t}/raw/transactions`;(0,oCe.mkdirSync)(`./data/${r}`,{recursive:!0}),Uv(r),Xv(),await j3(t,r,e.dataVersion)}catch(t){await Gv("Syncing failed.",t),process.exit(1)}};var RPt="sync",OPt="Commands related to syncing indexed.xyz real-time raw & decoded crypto datasets",FPt=e=>e.command(UH).command(GH).command(XH).command(VH).demandCommand(1),TPt=async()=>{};var WH={};id(WH,{builder:()=>qPt,command:()=>IPt,describe:()=>NPt,handler:()=>LPt});var IPt="rill",NPt="Analyze indexed.xyz data with Rill",qPt=e=>e,LPt=e=>{console.log(""),Hg("Analyze indexed.xyz data with Rill Data"),Zh("Please refer to https://www.rilldata.com/indexed-xyz for the latest news on analyzing Indexed.xyz data with Rill.")};var BPt="indexed",MPt="Analyze blockchain data with indexed.xyz",jPt=e=>e.command(HH).command("rill",!1,WH).version(!1).demandCommand(1),zPt=async()=>{};var JH={};id(JH,{builder:()=>HPt,command:()=>XPt,describe:()=>VPt,handler:()=>WPt});var G3=dr(require("path")),YH=dr(require("os")),X3=dr(require("fs"));var Db=dr(require("fs")),Kw=dr(require("path")),z3=dr(fm()),aCe=dr(require("os"));async function cCe(e){let t=(0,z3.default)("Validating build path").start(),r={isValid:!1,buildPath:e},n=Kw.default.join(e,"package.json"),i=Kw.default.join(e,"build");if(Db.default.existsSync(n)&&Db.default.statSync(n).isFile())if(Db.default.existsSync(i)&&Db.default.statSync(i).isDirectory())r.buildPath=Kw.default.join(e,"build");else return t.fail("It seems that you haven't built your subgraph. Please build it before deploying."),r.isValid=!1,r;try{await Promise.all([Db.default.promises.stat(Kw.default.join(e,"subgraph.yaml")),Db.default.promises.stat(Kw.default.join(e,"schema.graphql"))]),r.isValid=!0,t.succeed()}catch(s){t.fail()}return r}async function lCe(){let e=aCe.default.homedir(),t=Kw.default.join(e,".goldsky");try{await Db.default.promises.stat(t)}catch(r){await Db.default.promises.mkdir(t)}return t}function $3(e){let t=(0,z3.default)("Validating secret schema").start(),r;try{r=JSON.parse(e)}catch(n){t.fail("Provided input isn't a valid json"),process.exit(1)}return t.succeed("Validated secret schema"),r}function U3(e){let t,r=(0,z3.default)("Validating definition structure").start();try{t=JSON.parse(e),r.succeed()}catch(n){r.fail("Provided definition isn't a valid json"),process.exit(1)}return t}var $Pt=e=>e.map(t=>{switch(t.type){case uu.SourceTypes.SubgraphEntity:{let r=t;return{label:`Source: ${r.namespace}.${r.entity.name}`,value:`${r.namespace}.${r.entity.name}`,hint:r.description}}case uu.SourceTypes.Kafka:{let r=t;return{label:`Source: ${r.namespace}.${r.name}`,value:`${r.namespace}.${r.name}`,hint:r.description}}default:throw new Error(`Unhandled source type: ${t.type}.`)}}),UPt=e=>e.map(t=>{switch(t.type){case uu.TransformationTypes.SQL:{let r=t;return{label:`Transformation: ${r.name}`,value:r.name,hint:`Recommended - ${r.description}`}}default:throw new Error(`Unhandled transformation type: ${t.type}.`)}});async function LC(e,t,r){return Wf({message:r,options:[...UPt(t),...$Pt(e)]})}async function GPt(){let e=YH.default.homedir(),t=G3.default.join(e,".goldsky","auth_token");try{return await X3.default.promises.readFile(t,"utf8")}catch(r){}return null}async function uCe(){let e=await GPt();e&&uR(e)}function uR(e){ll.setAuth(`Bearer ${e}`)}async function dCe(e){let t=await lCe();await X3.default.promises.writeFile(G3.default.join(t,"auth_token"),e,"utf8")}async function pCe(){let e=YH.default.homedir(),t=G3.default.join(e,".goldsky","auth_token");try{await X3.default.promises.rm(t)}catch(r){}}var dR=dr(Od()),V3=dr(require("readline"));var fCe=dr(fm());async function mCe(e,t){uR(e),console.log();let r=(0,fCe.default)("Validating API Token").start();try{let n=await Hy.get(`${t.apiHost}/auth/check_token`,{headers:{Authorization:`Bearer ${e}`},validateStatus:i=>!0});if(n.status===200&&n.data.success){await dCe(e),r.succeed(`${dR.default.bold(`Logged in to project '${n.data.project.name}'`)} You can now run any authenticated commands on Goldsky from this computer`);return}}catch(n){}r.fail(`${dR.default.bold("Login failed")}. Make sure you entered your API token correctly - or contact Goldsky for more assistance`),process.exit(1)}async function hCe(e){if(e.token)return mCe(e.token,e);let t=`Enter or paste in your Goldsky API token ${dR.default.italic("(you can create a new one at https://app.goldsky.com/dashboard/settings)")}: `,r=V3.default.createInterface({input:process.stdin,output:process.stdout});r.stdoutMuted=!0,r.question(t,async n=>{r.close(),await mCe(n,e)}),r._writeToOutput=n=>{if(process.stdout.isTTY)if(n.charCodeAt(0)===13)r.output.write(n);else if(n.length>1){let i=r.line.length;V3.default.moveCursor(r.output,0,0),V3.default.clearLine(r.output,1),r.output.write(`${t}${"*".repeat(i)}`)}else r.output.write("*")}}async function gCe(e){await pCe(),console.log(`${dR.default.bold("Logged out")}. You will need to log in again if you want to run authenticated commands on this computer in future`)}var XPt="login",VPt="Log in to Goldsky to enable running authenticated CLI commands",HPt=e=>e.version(!1),WPt=async({apiHost:e,token:t})=>{await hCe({apiHost:e,token:t})};var QH={};id(QH,{builder:()=>JPt,command:()=>KPt,describe:()=>YPt,handler:()=>QPt});var KPt="logout",YPt="Log out of Goldsky on this computer",JPt=e=>e.version(!1),QPt=async({apiHost:e})=>{await gCe({apiHost:e})};var LW={};id(LW,{builder:()=>PFt,command:()=>DFt,describe:()=>AFt,handler:()=>kFt});var kDe=dr(Od());var kW={};id(kW,{builder:()=>rFt,command:()=>eFt,describe:()=>tFt,handler:()=>iFt});var fDe=dr(Od()),hDe=dr(require("fs"));var yCe=async()=>{let[e,t]=await ll.get("/api/admin/discover/v1/");return e&&(console.error(e.message),process.exit(1)),t};var MEe=dr(fm());var yh=dr(Od()),Fz=dr(FEe());var TEe={border:{topBody:yh.default.dim("\u2500"),topJoin:yh.default.dim("\u252C"),topLeft:yh.default.dim("\u250C"),topRight:yh.default.dim("\u2510"),bottomBody:yh.default.dim("\u2500"),bottomJoin:yh.default.dim("\u2534"),bottomLeft:yh.default.dim("\u2514"),bottomRight:yh.default.dim("\u2518"),bodyLeft:yh.default.dim("\u2502"),bodyRight:yh.default.dim("\u2502"),bodyJoin:yh.default.dim("\u2502"),joinBody:yh.default.dim("\u2500"),joinLeft:yh.default.dim("\u251C"),joinRight:yh.default.dim("\u2524"),joinJoin:yh.default.dim("\u253C")}};function GC(e,t){console.log((0,Fz.table)([e.map(r=>yh.default.green(r)),...t],TEe))}function IEe(e,t=40,r={}){return(0,Fz.createStream)(bd(Xa(Xa({},TEe),r),{columnDefault:Xa({width:t},r.columnDefault),columnCount:e}))}var NEe=["summary","all"];function Hv(e,t,r,n="all"){let i=e instanceof Array?e:[e];r==="json"?bOt(i,t,n):yOt(i,t,n)}function yOt(e,t,r){let n=r==="all"?["Id","Name","Version","Project Id","Description","Definition","Status",`Runtime
495
+ `),i.remove(l)});await nPt(o),console.log("Sync complete.")},Xv=()=>{let e=_x();e.start(),e.stop('Syncing... data is stored in the "./data" directory. Stop with Ctrl + C.'),console.log(""),process.on("SIGINT",()=>{process.stdout.write(`
496
+ `),process.exit(1)})};var iPt="1.0.0",sPt=(e,t)=>r=>{let n=r.split("/").pop(),i=`./data/${e}/${n}`;try{(0,tCe.execSync)(`duckdb -c "COPY (SELECT * FROM '${r}' WHERE lower(address) IN (lower('${t}'))) TO '${i}' (FORMAT 'parquet');"`)}catch(s){}},oPt=async e=>{let t={contractAddress:e.contractAddress,network:e.network};return t.contractAddress||(t.contractAddress=await Zl({message:"What is the contract address you are interested in?"})),{contractAddress:t.contractAddress.toLowerCase(),network:t.network.toLowerCase()}},aPt="decoded-logs",cPt="Sync decoded logs for a smart contract from a network to this computer",lPt=e=>e.option("contract-address",{describe:"The contract address you are interested in",type:"string",default:""}).option("network",{describe:"The network of indexed.xyz data to synchronize",type:"string",default:"ethereum"}).option("dataVersion",{describe:"The version of indexed.xyz data to synchronize",type:"string",default:iPt,hidden:!0}),uPt=async e=>{try{console.log(""),Hg("Sync decoded logs from indexed.xyz to your local computer"),uv();let{contractAddress:t,network:r}=await oPt(e),n=M3(t),i=NC({datasetType:"decoded",network:r,partitionKey:n,tableName:"logs",version:e.dataVersion}),s=`${r}/decoded/logs/${t}`;(0,rCe.mkdirSync)(`./data/${s}`,{recursive:!0}),Uv(s),Xv(),await qC({sourcePath:i,destinationPath:"./data/.tmp",processFile:sPt(s,t),syncProgress:vT()})}catch(t){await Gv("Syncing failed.",t),process.exit(1)}};var GH={};id(GH,{builder:()=>hPt,command:()=>mPt,describe:()=>fPt,handler:()=>gPt});var nCe=require("fs");var dPt="1.0.0",pPt=e=>({network:{network:e.network}.network.toLowerCase()}),mPt="raw-blocks",fPt="Sync all blocks from a network",hPt=e=>e.option("network",{describe:"The network of indexed.xyz data to synchronize",type:"string",default:"ethereum"}).option("dataVersion",{describe:"The version of indexed.xyz data to synchronize",type:"string",default:dPt,hidden:!0}),gPt=async e=>{try{console.log(""),Hg("Sync raw blocks from indexed.xyz to your local computer"),uv();let{network:t}=pPt(e),r=`${t}/raw/blocks`;(0,nCe.mkdirSync)(`./data/${r}`,{recursive:!0}),Uv(r),Xv(),await j3(t,r,e.dataVersion)}catch(t){await Gv("Syncing failed.",t),process.exit(1)}};var XH={};id(XH,{builder:()=>SPt,command:()=>_Pt,describe:()=>wPt,handler:()=>xPt});var iCe=require("child_process"),sCe=require("fs");var yPt="1.0.0",bPt=(e,t)=>r=>{let n=r.split("/").pop(),i=`./data/${e}/${n}`;try{(0,iCe.execSync)(`duckdb -c "COPY (SELECT * FROM '${r}' WHERE lower(address) IN (lower('${t}'))) TO '${i}' (FORMAT 'parquet');"`)}catch(s){}},vPt=async e=>{let t={contractAddress:e.contractAddress,network:e.network};return t.contractAddress||(t.contractAddress=await Zl({message:"What is the contract address you are interested in?"})),{contractAddress:t.contractAddress.toLowerCase(),network:t.network.toLowerCase()}},_Pt="raw-logs",wPt="Sync all logs from a network",SPt=e=>e.option("contract-address",{describe:"The contract address you are interested in",type:"string",default:""}).option("network",{describe:"The network of indexed.xyz data to synchronize",type:"string",default:"ethereum"}).option("dataVersion",{describe:"The version of indexed.xyz data to synchronize",type:"string",default:yPt,hidden:!0}),xPt=async e=>{try{console.log(""),Hg("Sync raw logs from indexed.xyz to your local computer"),uv();let{contractAddress:t,network:r}=await vPt(e),n=M3(t),i=NC({datasetType:"raw",network:r,partitionKey:n,tableName:"logs",version:e.dataVersion}),s=`${r}/raw/logs/${t}`;(0,sCe.mkdirSync)(`./data/${s}`,{recursive:!0}),Uv(s),Xv(),await qC({sourcePath:i,destinationPath:".data/.tmp",processFile:bPt(s,t),syncProgress:vT()})}catch(t){await Gv("Syncing failed.",t),process.exit(1)}};var VH={};id(VH,{builder:()=>PPt,command:()=>DPt,describe:()=>APt,handler:()=>kPt});var oCe=require("fs");var CPt="1.0.0",EPt=e=>({network:{network:e.network}.network.toLowerCase()}),DPt="raw-transactions",APt="Sync all transactions from a network",PPt=e=>e.option("network",{describe:"The network of indexed.xyz data to synchronize",type:"string",default:"ethereum"}).option("dataVersion",{describe:"The version of indexed.xyz data to synchronize",type:"string",default:CPt,hidden:!0}),kPt=async e=>{try{console.log(""),Hg("Sync raw transactions from indexed.xyz to your local computer"),uv();let{network:t}=EPt(e),r=`${t}/raw/transactions`;(0,oCe.mkdirSync)(`./data/${r}`,{recursive:!0}),Uv(r),Xv(),await j3(t,r,e.dataVersion)}catch(t){await Gv("Syncing failed.",t),process.exit(1)}};var RPt="sync",OPt="Commands related to syncing indexed.xyz real-time raw & decoded crypto datasets",FPt=e=>e.command(UH).command(GH).command(XH).command(VH).demandCommand(1),TPt=async()=>{};var WH={};id(WH,{builder:()=>qPt,command:()=>IPt,describe:()=>NPt,handler:()=>LPt});var IPt="rill",NPt="Analyze indexed.xyz data with Rill",qPt=e=>e,LPt=e=>{console.log(""),Hg("Analyze indexed.xyz data with Rill Data"),Zh("Please refer to https://www.rilldata.com/indexed-xyz for the latest news on analyzing Indexed.xyz data with Rill.")};var BPt="indexed",MPt="Analyze blockchain data with indexed.xyz",jPt=e=>e.command(HH).command("rill",!1,WH).version(!1).demandCommand(1),zPt=async()=>{};var JH={};id(JH,{builder:()=>HPt,command:()=>XPt,describe:()=>VPt,handler:()=>WPt});var G3=dr(require("path")),YH=dr(require("os")),X3=dr(require("fs"));var Db=dr(require("fs")),Kw=dr(require("path")),z3=dr(fm()),aCe=dr(require("os"));async function cCe(e){let t=(0,z3.default)("Validating build path").start(),r={isValid:!1,buildPath:e},n=Kw.default.join(e,"package.json"),i=Kw.default.join(e,"build");if(Db.default.existsSync(n)&&Db.default.statSync(n).isFile())if(Db.default.existsSync(i)&&Db.default.statSync(i).isDirectory())r.buildPath=Kw.default.join(e,"build");else return t.fail("It seems that you haven't built your subgraph. Please build it before deploying."),r.isValid=!1,r;try{await Promise.all([Db.default.promises.stat(Kw.default.join(e,"subgraph.yaml")),Db.default.promises.stat(Kw.default.join(e,"schema.graphql"))]),r.isValid=!0,t.succeed()}catch(s){t.fail()}return r}async function lCe(){let e=aCe.default.homedir(),t=Kw.default.join(e,".goldsky");try{await Db.default.promises.stat(t)}catch(r){await Db.default.promises.mkdir(t)}return t}function $3(e){let t=(0,z3.default)("Validating secret schema").start(),r;try{r=JSON.parse(e)}catch(n){t.fail("Provided input isn't a valid json"),process.exit(1)}return t.succeed("Validated secret schema"),r}function U3(e){let t,r=(0,z3.default)("Validating definition structure").start();try{t=JSON.parse(e),r.succeed()}catch(n){r.fail("Provided definition isn't a valid json"),process.exit(1)}return t}var $Pt=e=>e.map(t=>{switch(t.type){case uu.SourceTypes.SubgraphEntity:{let r=t;return{label:`Source: ${r.namespace}.${r.entity.name}`,value:`${r.namespace}.${r.entity.name}`,hint:r.description}}case uu.SourceTypes.Kafka:{let r=t;return{label:`Source: ${r.namespace}.${r.name}`,value:`${r.namespace}.${r.name}`,hint:r.description}}default:throw new Error(`Unhandled source type: ${t.type}.`)}}),UPt=e=>e.map(t=>{switch(t.type){case uu.TransformationTypes.SQL:{let r=t;return{label:`Transformation: ${r.name}`,value:r.name,hint:`Recommended - ${r.description}`}}default:throw new Error(`Unhandled transformation type: ${t.type}.`)}});async function LC(e,t,r){return Wf({message:r,options:[...UPt(t),...$Pt(e)]})}async function GPt(){let e=YH.default.homedir(),t=G3.default.join(e,".goldsky","auth_token");try{return await X3.default.promises.readFile(t,"utf8")}catch(r){}return null}async function uCe(){let e=await GPt();e&&uR(e)}function uR(e){ll.setAuth(`Bearer ${e}`)}async function dCe(e){let t=await lCe();await X3.default.promises.writeFile(G3.default.join(t,"auth_token"),e,"utf8")}async function pCe(){let e=YH.default.homedir(),t=G3.default.join(e,".goldsky","auth_token");try{await X3.default.promises.rm(t)}catch(r){}}var dR=dr(Od()),V3=dr(require("readline"));var fCe=dr(fm());async function mCe(e,t){uR(e),console.log();let r=(0,fCe.default)("Validating API Token").start();try{let n=await Hy.get(`${t.apiHost}/auth/check_token`,{headers:{Authorization:`Bearer ${e}`},validateStatus:i=>!0});if(n.status===200&&n.data.success){await dCe(e),r.succeed(`${dR.default.bold(`Logged in to project '${n.data.project.name}'`)} You can now run any authenticated commands on Goldsky from this computer`);return}}catch(n){}r.fail(`${dR.default.bold("Login failed")}. Make sure you entered your API token correctly - or contact Goldsky for more assistance`),process.exit(1)}async function hCe(e){if(e.token)return mCe(e.token,e);let t=`Enter or paste in your Goldsky API token ${dR.default.italic("(you can create a new one at https://app.goldsky.com/dashboard/settings)")}: `,r=V3.default.createInterface({input:process.stdin,output:process.stdout});r.stdoutMuted=!0,r.question(t,async n=>{r.close(),await mCe(n,e)}),r._writeToOutput=n=>{if(process.stdout.isTTY)if(n.charCodeAt(0)===13)r.output.write(n);else if(n.length>1){let i=r.line.length;V3.default.moveCursor(r.output,0,0),V3.default.clearLine(r.output,1),r.output.write(`${t}${"*".repeat(i)}`)}else r.output.write("*")}}async function gCe(e){await pCe(),console.log(`${dR.default.bold("Logged out")}. You will need to log in again if you want to run authenticated commands on this computer in future`)}var XPt="login",VPt="Log in to Goldsky to enable running authenticated CLI commands",HPt=e=>e.version(!1),WPt=async({apiHost:e,token:t})=>{await hCe({apiHost:e,token:t})};var QH={};id(QH,{builder:()=>JPt,command:()=>KPt,describe:()=>YPt,handler:()=>QPt});var KPt="logout",YPt="Log out of Goldsky on this computer",JPt=e=>e.version(!1),QPt=async({apiHost:e})=>{await gCe({apiHost:e})};var LW={};id(LW,{builder:()=>PFt,command:()=>DFt,describe:()=>AFt,handler:()=>kFt});var kDe=dr(Od());var kW={};id(kW,{builder:()=>rFt,command:()=>eFt,describe:()=>tFt,handler:()=>iFt});var fDe=dr(Od()),hDe=dr(require("fs"));var yCe=async()=>{let[e,t]=await ll.get("/api/admin/discover/v1/");return e&&(console.error(e.message),process.exit(1)),t};var MEe=dr(fm());var yh=dr(Od()),Fz=dr(FEe());var TEe={border:{topBody:yh.default.dim("\u2500"),topJoin:yh.default.dim("\u252C"),topLeft:yh.default.dim("\u250C"),topRight:yh.default.dim("\u2510"),bottomBody:yh.default.dim("\u2500"),bottomJoin:yh.default.dim("\u2534"),bottomLeft:yh.default.dim("\u2514"),bottomRight:yh.default.dim("\u2518"),bodyLeft:yh.default.dim("\u2502"),bodyRight:yh.default.dim("\u2502"),bodyJoin:yh.default.dim("\u2502"),joinBody:yh.default.dim("\u2500"),joinLeft:yh.default.dim("\u251C"),joinRight:yh.default.dim("\u2524"),joinJoin:yh.default.dim("\u253C")}};function GC(e,t){console.log((0,Fz.table)([e.map(r=>yh.default.green(r)),...t],TEe))}function IEe(e,t=40,r={}){return(0,Fz.createStream)(bd(Xa(Xa({},TEe),r),{columnDefault:Xa({width:t},r.columnDefault),columnCount:e}))}var NEe=["summary","all"];function Hv(e,t,r,n="all"){let i=e instanceof Array?e:[e];r==="json"?bOt(i,t,n):yOt(i,t,n)}function yOt(e,t,r){let n=r==="all"?["Id","Name","Version","Project Id","Description","Definition","Status",`Runtime
495
497
  Status`,`Resource
496
498
  Size`,"Errors","Stats","Created At","Updated At"]:["Id","Name","Version","Status",`Runtime
497
499
  Status`,`Resource
@@ -533,11 +535,13 @@ ${i}`,"Suggested sink tables");let s=await th(Qh({message:"Do you want to automa
533
535
 
534
536
  You can add one or more sinks to define where to persist data.
535
537
 
536
- For each sink, select either a source or transformation to let the pipeline know which data to persist to the sink.`,"Add sinks");let n=new Map,i=!1;do{let s=await YOt(e.sinks.eligibleUserProvidedSinks),o="";s.sinkType!==uu.SinkTypes.Postgres&&(o=await LC(t,r,`Select a transformation or source for your ${s.displayName} sink`));let a=_x(),c=ZOt(s.sinkType),l=[];try{a.start("Fetching existing secrets..."),l=await QOt(c)}catch(m){a.stop(`Encountered error with msg: ${m.message}`),process.exit(1)}let u=l.map(m=>({label:m.name,value:m.name,hint:m.description})),p="";if(l.length===0)a.stop(`No existing secret found for ${s.displayName}. Let's create a new one!`),p=await PW(c);else{a.stop(`Existing ${s.displayName} secrets fetched`),u.push({label:`Create new ${s.displayName} secret`,value:"createNewSecret",hint:void 0});let m=await Wf({message:`Select a secret to access ${s.displayName} (or create a new one)`,options:u});m==="createNewSecret"?p=await PW(c):p=m}switch(s.sinkType){case uu.SinkTypes.Postgres:(await dDe(t,r,p)).forEach(g=>{n.set(`postgres_${g.schema}_${g.table}`,g)});break;case uu.SinkTypes.Kafka:{let m=await uDe(t,p,o);n.set(`kafka_${m.topic}`,m)}break;case uu.SinkTypes.Rockset:{let m=await pDe(t,p,o);n.set(`rockset_${m.workspace}_${m.collection}`,m)}break;case uu.SinkTypes.File:{let m=await cDe(t,p,o);n.set(`file_${m.path}}`,m)}break;case uu.SinkTypes.ElasticSearch:{let m=await lDe(t,p,o);n.set(`es_${m.index}}`,m)}break;default:break}i=await JOt(),Qy(i)&&(Zy("Pipeline creation cancelled."),process.exit(1))}while(i);return[...n.values()]},YOt=e=>Wf({message:"Select a sink type",options:e.map(t=>({value:t,label:t.displayName,hint:t.description}))}),JOt=()=>th(Qh({message:"Would you like to add another sink?",initialValue:!1})),QOt=async e=>{let[t,r]=await ll.get("/api/admin/secrets/v1/");if(t)throw new Error(t.message);if(r.data)return r.data.filter(n=>n.type===e);throw new Error("Failed to list secrets, please try again")},ZOt=e=>{let t=Object.values(uu.SinkTypes).find(n=>n.toString()===e);if(!t)throw new Error("Encountered unexpected error");let r=Object.values(Fd.SchemaSecretType).find(n=>n.toString()===t.toString());if(!r){if(uu.SinkTypes.File===t)return Fd.SchemaSecretType.s3;if(Object.values(Fd.JdbcProtocol).find(i=>i.toString()===(t==null?void 0:t.toString())))return Fd.SchemaSecretType.jdbc;throw new Error("Encountered unexpected error")}return r};var eFt="create <name>",tFt=`${fDe.default.red("[BETA]")} Create a pipeline`,rFt=e=>e.positional("name",{describe:"name of the new pipeline",type:"string",demandOption:!0}).option("output",{describe:"format of the output. Either json or table. Defaults to table.",alias:["outputFormat"],type:"string",choices:uu.AllStreamCliOuputFormats,demandOption:!1}).option("resource-size",{describe:"runtime resource size for when the pipeline runs",alias:["resourceSize"],choices:uu.AllResourceSizes,default:"s",type:"string",demandOption:!0}).option("description",{describe:"the description of the new pipeline",type:"string",demandOption:!1}).option("definition",{describe:"definition of the pipeline that includes sources, transforms, sinks. Provided as json eg: `{sources: [], transforms: [], sinks:[]}`",type:"string",demandOption:!1}).option("definition-path",{describe:"path to a json file with the definition of the pipeline that includes sources, transforms, sinks.",type:"string",demandOption:!1}).option("status",{describe:"the desired status of the pipeline",type:"string",choices:uu.AllStreamStatuses,default:"INACTIVE",demandOption:!1}).conflicts("definition","definition-path"),nFt=e=>[...e.keys()].find(t=>t.startsWith("public_dataset_")&&t.includes("_logs")),iFt=async e=>{if(await sFt(e.name),e.definition||e.definitionPath){let t="";e.definition?t=e.definition:e.definitionPath&&(t=hDe.default.readFileSync(e.definitionPath,{encoding:"utf-8"}));let r=U3(t),n={name:e.name,description:e.description,resource_size:e.resourceSize,status:e.status,definition:r};await xW(n,e.output||"table")}else{console.log(""),Hg("With Goldsky pipelines, you sync data to your own infrastructure to power your APIs and for data analytics.");let t=await yCe(),r=await $Ee(t),n=[];nFt(r)&&(n=await XEe([...r.values()]));let i=await mDe(t,[...r.values()],n),s={sources:[...r.values()],transforms:n,sinks:i},o={name:e.name,description:e.description,resource_size:e.resourceSize,status:"ACTIVE",definition:s};await xW(o,e.output)}};async function sFt(e){let[t,r]=await ll.get("/api/admin/streams/v1/");(typeof(r==null?void 0:r.length)=="undefined"?[]:r).map(i=>i.name).includes(e)&&(console.error(`Provided pipeline with name: ${e} already exists in the project.`),process.exit(1))}var OW={};id(OW,{builder:()=>cFt,command:()=>oFt,describe:()=>aFt,handler:()=>lFt});var yDe=dr(Od());var RW=dr(fm());async function gDe(e,t){let r=(0,RW.default)("Fetching pipeline").start(),[n,i]=await ll.get(s=>`/api/admin/streams/v1/${s.name}?version=${s.version||""}`,{params:e});if(n)r.fail(n.message),process.exit(1);else{r.succeed();let s=(0,RW.default)("Fetching pipeline runtime details").start(),[o,a]=await ll.post("/api/admin/streams/v1/runtime-details",{body:{namesAndVersions:[{name:e.name,version:e.version}]}});o?s.warn("Couldn't load pipeline runtime details"):s.succeed(),Hv(i,o?[]:a,t)}}var oFt="get <name>",aFt=`${yDe.default.red("[BETA]")} Get a pipeline`,cFt=e=>e.positional("name",{describe:"pipeline name",type:"string",demandOption:!0}).option("output",{describe:"format of the output. Either json or table. Defaults to json.",alias:["outputFormat"],type:"string",choices:uu.AllStreamCliOuputFormats,default:"json"}).option("version",{describe:"pipeline version. Returns latest version of the pipeline if not set. Passing 'all' returns all versions.",type:"string"}),lFt=async e=>{await gDe({name:e.name,version:e.version},e.output)};var FW={};id(FW,{builder:()=>pFt,command:()=>uFt,describe:()=>dFt,handler:()=>mFt});var _De=dr(Od()),wDe=dr(require("fs"));var bDe=dr(fm());async function vDe(e,t){let r=(0,bDe.default)("Updating pipeline").start(),[n,i]=await ll.put(()=>`/api/admin/streams/v1/${e.name}`,{body:e});n?(r.fail(n.message),process.exit(1)):i?(r.succeed(`Updated pipeline: ${i.name}`),Hv(i,[],t)):(r.fail("Failed to update pipeline, try again"),process.exit(1))}var uFt="update <name>",dFt=`${_De.default.red("[BETA]")} Update a pipeline`,pFt=e=>e.positional("name",{describe:"name of the pipeline to update.",type:"string",demandOption:!0}).option("output",{describe:"format of the output. Either json or table. Defaults to json.",alias:["outputFormat"],type:"string",choices:uu.AllStreamCliOuputFormats,default:"json",demandOption:!0}).option("resource-size",{describe:"runtime resource size for when the pipeline runs ",alias:["resourceSize"],choices:uu.AllResourceSizes,type:"string",demandOption:!1}).option("status",{describe:"new status of the pipeline",type:"string",choices:uu.AllStreamStatuses,demandOption:!1}).option("definition",{describe:"definition of the pipeline that includes sources, transforms, sinks. Provided as json eg: `{sources: [], transforms: [], sinks:[]}`",type:"string",demandOption:!1}).option("definition-path",{describe:"path to a json file with the definition of the pipeline that includes sources, transforms, sinks.",type:"string",demandOption:!1}).option("description",{describe:"new description of the pipeline`",type:"string",demandOption:!1}).conflicts("definition","definition-path"),mFt=async e=>{let t;if(e.definition||e.definitionPath){let r="";e.definition?r=e.definition:e.definitionPath&&(r=wDe.default.readFileSync(e.definitionPath,{encoding:"utf-8"})),t=U3(r)}await vDe({name:e.name,definition:t,status:e.status,description:e.description,resource_size:e.resourceSize},e.output)};var TW={};id(TW,{builder:()=>gFt,command:()=>fFt,describe:()=>hFt,handler:()=>yFt});var CDe=dr(Od());var SDe=dr(fm());async function xDe(e){let t=(0,SDe.default)("Deleting pipeline").start(),[r]=await ll.delete_(()=>`/api/admin/streams/v1/${e.name}`);r?(t.fail(r.message),process.exit(1)):t.succeed(`Deleted pipeline with name: ${e.name}`)}var fFt="delete <name>",hFt=`${CDe.default.red("[BETA]")} Delete a pipeline`,gFt=e=>e.positional("name",{describe:"pipeline name",type:"string",demandOption:!0}),yFt=async e=>{await xDe({name:e.name})};var NW={};id(NW,{builder:()=>_Ft,command:()=>bFt,describe:()=>vFt,handler:()=>wFt});var ADe=dr(Od());var IW=dr(fm()),EDe=dr(Od());async function DDe(e,t="all"){let r=(0,IW.default)("Listing pipelines").start(),[n,i]=await ll.get("/api/admin/streams/v1/");if(n)r.fail(n.message),process.exit(1);else if(r.succeed(),i.length>0){let s=i.map(l=>({name:l.name,version:l.version})),o=(0,IW.default)("Fetching pipeline runtime details").start(),[a,c]=await ll.post("/api/admin/streams/v1/runtime-details",{body:{namesAndVersions:s}});a?o.warn("Couldn't load pipeline runtime details"):o.succeed(),Hv(i,a?[]:c,e,t)}else console.log(`No pipelines found. Create one with ${EDe.default.bold("goldsky pipeline create")}.`)}var bFt="list",vFt=`${ADe.default.red("[BETA]")} List all pipelines`,_Ft=e=>e.option("output",{describe:"format of the output. Either json or table. Defaults to json.",alias:["outputFormat"],type:"string",choices:uu.AllStreamCliOuputFormats,default:"table"}).option("outputVerbosity",{describe:"Either summary or all. Defaults to summary.",type:"string",choices:NEe,default:"summary"}),wFt=async e=>{await DDe(e.output,e.outputVerbosity),console.log("Please use `goldsky pipeline get <pipeline-name>` to load more details for a given pipeline."),console.log("Alternatively, try `goldsky pipeline monitor <pipeline-name>` to continuously monitor an active pipeline."),console.log("")};var qW={};id(qW,{builder:()=>CFt,command:()=>SFt,describe:()=>xFt,handler:()=>EFt});var PDe=dr(Od());var SFt="monitor <name>",xFt=`${PDe.default.red("[BETA]")} Monitor a pipeline runtime`,CFt=e=>e.positional("name",{describe:"pipeline name",type:"string",demandOption:!0}).option("version",{describe:"pipeline version, uses latest version if not set.",type:"string",demandOption:!1}).option("max-refreshes",{describe:"max. number of data refreshes.",alias:"maxRefreshes",type:"number",demandOption:!1}),EFt=async e=>{await Tz({name:e.name,version:e.version},e.maxRefreshes)};var DFt="pipeline",AFt=`${kDe.default.red("[BETA]")} Commands related to Goldsky pipelines`,PFt=e=>e.command(kW).command(OW).command(FW).command(TW).command(NW).command(qW).version(!1).demandCommand(1),kFt=async()=>{};var sK={};id(sK,{builder:()=>hTt,command:()=>mTt,describe:()=>fTt,handler:()=>gTt});var fAe=dr(Od());var QW={};id(QW,{builder:()=>KFt,command:()=>HFt,describe:()=>WFt,handler:()=>YFt});var tAe=dr(Od());var BW={};id(BW,{builder:()=>FFt,command:()=>RFt,describe:()=>OFt,handler:()=>TFt});var FDe=dr(Od());var RDe=dr(fm());async function ODe(){let e=(0,RDe.default)("Fetching users").start(),[t,r]=await ll.get("/api/admin/project/v1/users");if(t)e.fail(t.message),process.exit(1);else if(r.data.length===0)e.fail("No users found, this is extremely unusual. Please contact support@goldsky.com"),process.exit(1);else{e.succeed();for(let n of r.data)console.log(n.email)}}var RFt="list",OFt=`${FDe.default.red("[BETA]")} List all users for this project`,FFt=e=>e,TFt=async()=>{await ODe()};var YW={};id(YW,{builder:()=>zFt,command:()=>MFt,describe:()=>jFt,handler:()=>$Ft});var JDe=dr(Od());var WDe=dr(fm()),KDe=dr(HDe());async function YDe(e,t){let r=(0,WDe.default)();if(!t){let s=(0,KDe.question)("Any user you invite will have admin privileges, are you sure you want to invite them? (y/n) ");s!=="Y"&&s!=="y"&&(r.fail("Cancelled"),process.exit(1))}r.start("Inviting users");let[n,i]=await ll.post("/api/admin/invite/v1/invite",{body:{emails:e}});n?(r.fail(n.message),process.exit(1)):i.data?r.succeed("Invited users!"):(r.fail("Failed to invite users, try again"),process.exit(1))}var MFt="invite",jFt=`${JDe.default.red("[BETA]")} Invite a user to your project`,zFt=e=>e.option("emails",{describe:"emails of users to invite",type:"array",demandOption:!0,string:!0}).option("yes",{describe:"skip confirmation",type:"boolean",default:!1}),$Ft=async({emails:e,yes:t})=>{await YDe(e,t)};var JW={};id(JW,{builder:()=>XFt,command:()=>UFt,describe:()=>GFt,handler:()=>VFt});var eAe=dr(Od());var QDe=dr(fm());async function ZDe(e){let t=(0,QDe.default)("Removing user").start(),[r,n]=await ll.delete_("/api/admin/project/v1/user",{body:{email:e}});r?(t.fail(r.message),process.exit(1)):n.data?t.succeed(`Removed user ${e}`):(t.fail("Failed to remove user, try again"),process.exit(1))}var UFt="remove",GFt=`${eAe.default.red("[BETA]")} Remove a user from your project`,XFt=e=>e.option("email",{describe:"email of user to remove",type:"string",demandOption:!0}),VFt=async({email:e})=>{await ZDe(e)};var HFt="users",WFt=`${tAe.default.red("[BETA]")} Commands related to the users of a project`,KFt=e=>e.command(BW).command(YW).command(JW).version(!1).demandCommand(1),YFt=async()=>{};var ZW={};id(ZW,{builder:()=>ZFt,command:()=>JFt,describe:()=>QFt,handler:()=>eTt});var iAe=dr(Od());var rAe=dr(fm());async function nAe(e){let t=(0,rAe.default)("Leaving project").start(),[r,n]=await ll.post("/api/admin/project/v1/leave",{body:{projectId:e}});r?(t.fail(r.message),process.exit(1)):n.data?t.succeed("Left project."):(t.fail("Failed to leave project, try again"),process.exit(1))}var JFt="leave",QFt=`${iAe.default.red("[BETA]")} Leave a project`,ZFt=e=>e.option("projectId",{describe:"the ID of the project you want to leave",type:"string",demandOption:!0}),eTt=async({projectId:e})=>{await nAe(e)};var rK={};id(rK,{builder:()=>nTt,command:()=>tTt,describe:()=>rTt,handler:()=>iTt});var aAe=dr(Od());var sAe=dr(fm()),eK=dr(Od());function tK(e){console.log(`* ${eK.default.bold(e.name)}${e.currentlyAuthenticated?` ${eK.default.green("(active)")}`:""}`),console.log(` Created At: ${new Date(e.createdAt).toLocaleString()}`),console.log(` Project ID: ${e.projectId}`)}async function oAe(){let e=(0,sAe.default)("Fetching projects").start(),[t,r]=await ll.get("/api/admin/project/v1/projects");if(t)e.fail(t.message),process.exit(1);else if(r.data.length===0)e.warn("You don't belong to any projects!");else{e.succeed();for(let n of r.data)tK(n)}}var tTt="list",rTt=`${aAe.default.red("[BETA]")} List all of the projects you belong to`,nTt=e=>e,iTt=async()=>{await oAe()};var nK={};id(nK,{builder:()=>aTt,command:()=>sTt,describe:()=>oTt,handler:()=>cTt});var uAe=dr(Od());var cAe=dr(fm());async function lAe(e){let t=(0,cAe.default)("Updating project").start(),[r,n]=await ll.put("/api/admin/project/v1/",{body:e});r?(t.fail(r.message),process.exit(1)):n.data?t.succeed("Updated project"):(t.fail("Failed to update project, try again"),process.exit(1))}var sTt="update",oTt=`${uAe.default.red("[BETA]")} Update a project`,aTt=e=>e.option("name",{describe:"the new name of the project",type:"string",demandOption:!0}),cTt=async({name:e})=>{await lAe({name:e})};var iK={};id(iK,{builder:()=>dTt,command:()=>lTt,describe:()=>uTt,handler:()=>pTt});var mAe=dr(Od());var dAe=dr(fm());async function pAe(e){let t=(0,dAe.default)("Creating project").start(),[r,n]=await ll.post("/api/admin/project/v1/project",{body:{name:e}});r?(t.fail(r.message),process.exit(1)):n.data?(t.succeed("Created project. Use https://app.goldsky.com to create an API token for this project."),tK(n.data)):(t.fail("Failed to create project, try again"),process.exit(1))}var lTt="create",uTt=`${mAe.default.red("[BETA]")} Create a project`,dTt=e=>e.option("name",{describe:"the name of the new project",type:"string",demandOption:!0}),pTt=async({name:e})=>{await pAe(e)};var mTt="project",fTt=`${fAe.default.red("[BETA]")} Commands related to project management`,hTt=e=>e.command(QW).command(ZW).command(rK).command(nK).command(iK).version(!1).demandCommand(1),gTt=async()=>{};var pK={};id(pK,{builder:()=>MTt,command:()=>LTt,describe:()=>BTt,handler:()=>jTt});var oK={};id(oK,{builder:()=>vTt,command:()=>yTt,describe:()=>bTt,handler:()=>_Tt});var yTt="create <name>",bTt="create a secret",vTt=e=>e.positional("name",{describe:"the name of the new secret",type:"string",demandOption:!0}).option("value",{describe:"the value of the new secret in json",type:"string",demandOption:!0}).option("type",{describe:"the type of the new secret",choices:Object.values(Fd.SchemaSecretType),demandOption:!0}).option("description",{describe:"the description of the new secret",type:"string",demandOption:!1}),_Tt=async e=>{let t=$3(e.value);await AW(bd(Xa({},e),{value:t}))};var aK={};id(aK,{builder:()=>xTt,command:()=>wTt,describe:()=>STt,handler:()=>CTt});var hAe=dr(fm()),gAe=dr(Od());async function yAe(){let e=(0,hAe.default)("Listing secrets").start(),[t,r]=await ll.get("/api/admin/secrets/v1/");if(t)e.fail(t.message),process.exit(1);else if(!r.data)e.fail("Failed to list secrets, try again"),process.exit(1);else if(e.succeed(),r.data.length>0){let n=[];r.data.map(i=>{n.push([i.name,i.type,i.description||"",new Date(i.created_at).toLocaleString()])}),GC(["Name","Type","Description","Created At"],n)}else console.log(`No secrets found. Create one with ${gAe.default.bold("goldsky secret create")}.`)}var wTt="list",STt="list all secrets",xTt=e=>e,CTt=async()=>{await yAe()};var cK={};id(cK,{builder:()=>ATt,command:()=>ETt,describe:()=>DTt,handler:()=>PTt});var bAe=dr(fm());async function vAe({name:e}){let t=(0,bAe.default)("Revealing secrets").start(),[r,n]=await ll.get(i=>`/api/admin/secrets/v1/${i.secretName}`,{params:{secretName:e}});r?(t.fail(r.message),process.exit(1)):n.data?(t.succeed(),console.log(n.data.value)):(t.fail("Failed to reveal secret, try again"),process.exit(1))}var ETt="reveal <name>",DTt="reveal a secret",ATt=e=>e.positional("name",{describe:"the name of the secret",type:"string",demandOption:!0}),PTt=async e=>{await vAe(e)};var uK={};id(uK,{builder:()=>OTt,command:()=>kTt,describe:()=>RTt,handler:()=>FTt});var _Ae=dr(fm());async function lK(e){let t=(0,_Ae.default)("Updating secret").start(),[r,n]=await ll.put(i=>`/api/admin/secrets/v1/${i.secretName}`,{body:{value:e.value,description:e.description},params:{secretName:e.name}});r?(t.fail(r.message),process.exit(1)):n.data?t.succeed("Updated secret"):(t.fail("Failed to update secret, try again"),process.exit(1))}var kTt="update <name>",RTt="update a secret",OTt=e=>e.positional("name",{describe:"the name of the secret",type:"string",demandOption:!0}).option("value",{describe:"the new value of the secret",type:"string",demandOption:!1}).option("description",{describe:"the new description of the secret",type:"string",demandOption:!1}),FTt=async e=>{let t=e.value;if(t){let r=$3(t);await lK(bd(Xa({},e),{value:r}))}else await lK({name:e.name,description:e.description})};var dK={};id(dK,{builder:()=>NTt,command:()=>TTt,describe:()=>ITt,handler:()=>qTt});var wAe=dr(fm());async function SAe(e){let t=(0,wAe.default)("Deleting secret").start(),[r,n]=await ll.delete_(i=>`/api/admin/secrets/v1/${i.secretName}`,{params:e});r?(t.fail(r.message),process.exit(1)):n.success?t.succeed("Deleted secret"):(n.referencedStreams&&n.referencedStreams.length>0&&(t.fail(`Failed to delete secret because it is being used in following pipelines: ${n.referencedStreams.map(i=>i.streamName)}. Please delete these pipelines and try again.`),process.exit(1)),t.fail("Failed to delete secret, try again"),process.exit(1))}var TTt="delete <name>",ITt="delete a secret",NTt=e=>e.positional("name",{describe:"the name of the secret to delete",type:"string",demandOption:!0}),qTt=async e=>{await SAe({secretName:e.name})};var LTt="secret",BTt="Commands related to secret management",MTt=e=>e.command(oK).command(aK).command(cK).command(uK).command(dK).version(!1).demandCommand(1),jTt=async()=>{};var _Z={};id(_Z,{builder:()=>WUt,command:()=>VUt,describe:()=>HUt,handler:()=>KUt});var fK={};id(fK,{builder:()=>UTt,command:()=>zTt,describe:()=>$Tt,handler:()=>GTt});var Mz=dr(Od());var xAe=dr(fm());async function mK(e){let t=(0,xAe.default)("Removing subgraph").start(),[r,n]=await ll.delete_(i=>`/api/admin/subgraph/v1/subgraphs/${i.name}/deployments/${i.version_label}`,{params:{name:e.name,version_label:e.v}});r?(t.fail(`${Mz.default.bold("Subgraph removal failed:")} ${Mz.default.red(r.message)}`),process.exit(1)):t.succeed(Mz.default.bold("Removed subgraph"))}var Rf=e=>e.split("/");var zTt="delete <nameAndVersion>",$Tt="Delete a subgraph from Goldsky",UTt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}),GTt=async({apiHost:e,nameAndVersion:t})=>mK({apiHost:e,name:Rf(t)[0],v:Rf(t)[1]});var aZ={};id(aZ,{builder:()=>tUt,command:()=>Z$t,describe:()=>eUt,handler:()=>rUt});var ME=dr(Od());var eIe=dr(LRe()),Hb=dr(require("fs")),tIe=dr(require("os")),jy=dr(require("path")),DU=dr(COe());var BE=dr(fm());var rIe=dr(rZ());var U$t=dr(KTe()),G$t=dr(rZ()),sm=dr(Td()),X$t=sm.Type.Object({abi:sm.Type.String(),address:sm.Type.String(),startBlock:sm.Type.Number(),chain:sm.Type.String()}),V$t=sm.Type.Object({abi:sm.Type.String(),startBlock:sm.Type.Number(),source:sm.Type.Object({abi:sm.Type.String(),eventSignature:sm.Type.String(),addressParam:sm.Type.String()})}),YTe={version:sm.Type.Literal("1"),chains:sm.Type.Array(sm.Type.String()),instances:sm.Type.Array(sm.Type.Union([X$t,V$t]))},JTe=sm.Type.Object({...YTe,abis:sm.Type.Record(sm.Type.String(),sm.Type.Object({path:sm.Type.String()})),enableCallHandlers:sm.Type.Optional(sm.Type.Boolean())}),fmr=sm.Type.Object({...YTe,abis:sm.Type.Record(sm.Type.String(),sm.Type.Any()),enableCallHandlers:sm.Type.Optional(sm.Type.Boolean())});var QTe=3;async function H$t(e,t,r){let n=Hy.create({}),i=jy.default.join(tIe.default.tmpdir(),`goldsky-deploy-${e}`);try{await Hb.default.promises.mkdir(i)}catch(m){if(m.code!=="EEXIST")throw m}let s=[],o=0,a=0,c=(m,g,y)=>{let S=m.getIn(g);s.push([S.get("/").replace("/ipfs/",""),y]),m.setIn(g,DU.default.createNode(y))},l=()=>{r.prefixText=`${Math.round(a++/(s.length+1)*100)}%`},u=await n.get(`${t}/api/v0/cat?arg=${e}`);l();let p=DU.default.parseDocument(u.data);c(p,["schema","file"],"schema.graphql");for(let m of["dataSources","templates"]){let g=p.get(m);if(g)for(let[y,S]of g.items.entries()){c(S,["mapping","file"],`${o++}.wasm`);for(let[x,P]of S.getIn(["mapping","abis"]).items.entries())c(P,["file"],`${o++}.json`)}}await Hb.default.promises.writeFile(jy.default.join(i,"subgraph.yaml"),p.toString());for(let m of s){let g=jy.default.join(i,m[1]);if(!Hb.default.existsSync(g))try{let y=0;for(;y<QTe;){let S=await n.get(`${t}/api/v0/cat?arg=${m[0]}`,{responseType:"arraybuffer",validateStatus:x=>x>=200&&x<300||y<QTe-1&&x===504});if(S.status===504)++y;else{await Hb.default.promises.writeFile(g,S.data);break}}}catch(y){try{await Hb.default.promises.rm(g)}catch(S){}throw y}l()}return r.prefixText="",i}async function W$t(e){let t=new URL(e),r=Hy.create({});try{return(await r.post(e,{query:"{_meta{deployment}}",variables:null},Xa({},t.host==="gateway.thegraph.com"?{headers:{origin:"https://thegraph.com"}}:{}))).data.data._meta.deployment}catch(n){throw new Error("Could not find deployment, did you use a GraphQL endpoint?")}}async function nIe(e){if(console.log(ME.default.bold("Deploying Subgraph:")),e.abi){let s=(0,BE.default)("Generating subgraph(s) (this may take several minutes)").start(),o;try{o=await K$t(e.abi,e.enableCallHandlers)}catch(l){qS(s,l);return}let[a,c]=await ll.post("/api/admin/subgraph/v1/subgraphs/generated",{body:{bundle:o}});if(a){qS(s,a);return}else{let l=c.data.generate_config_cursor;for(;;){let[u,p]=await ll.post("/api/admin/subgraph/v1/subgraphs/check_generated",{body:{cursor:l}});if(u){qS(s,u);return}else{let m=p.data.filter(g=>g.status==="FAILED");if(m.length){qS(s,{message:`Failed to generate subgraph on chain ${m[0].chain} from Abi bundle: ${m[0].failure_info}`});return}else if(p.data.filter(g=>g.status==="COMPLETE").length===p.data.length){s.succeed();for(let g of p.data)await ZTe(bd(Xa({},e),{name:`${e.name}-${g.chain}`}),{generatedBundleId:g.generated_subgraph_id||void 0});return}}await new Promise(m=>setTimeout(m,5e3))}}}let t=e.path||jy.default.join(process.cwd()),r=e.ipfsHash;if(e.graphql){let s=(0,BE.default)("Getting subgraph deployment metadata").start();try{r=await W$t(e.graphql),s.succeed()}catch(o){qS(s,o);return}}if(r){let s=(0,BE.default)("Downloading subgraph from IPFS (This can take a while)").start();try{t=await H$t(r,e.ipfsGateway,s),s.succeed()}catch(o){qS(s,o);return}}let n=await cCe(t);n.isValid||(console.log("Deployment failed: This path doesn't point to a subgraph build path"),process.exit(1));let i=await Q$t(n.buildPath);await ZTe(e,{bundle:i})}async function K$t(e,t){let r=jy.default.resolve(process.cwd(),e),n=jy.default.dirname(r),i=(()=>{try{return require(r)}catch(a){throw new Error(`Unable to load config from '${r}'`)}})(),s=new rIe.default({}),o=Y$t(i,n,t);if(!s.validate(o.schema,i))throw new Error(`Invalid config: ${s.errorsText(s.errors)}`);return await o.stringify()}function Y$t(e,t,r){switch(e.version){case"1":return{schema:JTe,stringify:async()=>{let n=e,i={version:"1",abis:{},chains:n.chains,instances:n.instances,enableCallHandlers:r};for(let s in n.abis){let o=jy.default.resolve(t,n.abis[s].path);i.abis[s]=(()=>{try{return require(o)}catch(a){throw new Error(`Unable to load Abi '${s}' from '${o}'`)}})()}return await J$t(i.chains),JSON.stringify(i)}};default:throw new Error(`Unknown config version ${e.version}`)}}async function J$t(e){let[t,r]=await ll.get("/api/admin/subgraph/v1/subgraphs/supported_chains");if(t)throw t;{let n=e.filter(i=>!r.data.supported_chains.find(s=>s===i));if(n.length)throw new Error(`The chains [${n.join(", ")}] are not supported. Please specify any combination of the following supported chains: [${r.data.supported_chains.join(", ")}]`)}}async function ZTe(e,t){let r=(0,BE.default)(`Deploying ${e.name}/${e.v} to Goldsky`).start(),n=ll.FormData();t.bundle?n.append("bundle",t.bundle.generateNodeStream({streamFiles:!0}),"bundle.zip"):t.generatedBundleId&&n.append("generated_bundle_id",t.generatedBundleId),n.append("overwrite",e.overwrite?"1":"0"),n.append("remove_graft",e.removeGraft?"1":"0"),e.startBlock&&n.append("start_block",e.startBlock.toString()),e.graftFrom&&n.append("graft_from",e.graftFrom);let[i,s]=await ll.put(o=>`/api/admin/subgraph/v1/subgraphs/${o.name}/deployments/${o.version_label}`,{params:{name:e.name,version_label:e.v},body:n});i?i.statusCode===524?r.info(`This deployment is taking longer than usual and will keep deploying in the background.
538
+ For each sink, select either a source or transformation to let the pipeline know which data to persist to the sink.`,"Add sinks");let n=new Map,i=!1;do{let s=await YOt(e.sinks.eligibleUserProvidedSinks),o="";s.sinkType!==uu.SinkTypes.Postgres&&(o=await LC(t,r,`Select a transformation or source for your ${s.displayName} sink`));let a=_x(),c=ZOt(s.sinkType),l=[];try{a.start("Fetching existing secrets..."),l=await QOt(c)}catch(m){a.stop(`Encountered error with msg: ${m.message}`),process.exit(1)}let u=l.map(m=>({label:m.name,value:m.name,hint:m.description})),p="";if(l.length===0)a.stop(`No existing secret found for ${s.displayName}. Let's create a new one!`),process.on("SIGINT",()=>{process.stdout.write(`
539
+ `),process.exit(1)}),p=await PW(c);else{a.stop(`Existing ${s.displayName} secrets fetched`),process.on("SIGINT",()=>{process.stdout.write(`
540
+ `),process.exit(1)}),u.push({label:`Create new ${s.displayName} secret`,value:"createNewSecret",hint:void 0});let m=await Wf({message:`Select a secret to access ${s.displayName} (or create a new one)`,options:u});m==="createNewSecret"?p=await PW(c):p=m}switch(s.sinkType){case uu.SinkTypes.Postgres:(await dDe(t,r,p)).forEach(g=>{n.set(`postgres_${g.schema}_${g.table}`,g)});break;case uu.SinkTypes.Kafka:{let m=await uDe(t,p,o);n.set(`kafka_${m.topic}`,m)}break;case uu.SinkTypes.Rockset:{let m=await pDe(t,p,o);n.set(`rockset_${m.workspace}_${m.collection}`,m)}break;case uu.SinkTypes.File:{let m=await cDe(t,p,o);n.set(`file_${m.path}}`,m)}break;case uu.SinkTypes.ElasticSearch:{let m=await lDe(t,p,o);n.set(`es_${m.index}}`,m)}break;default:break}i=await JOt(),Qy(i)&&(Zy("Pipeline creation cancelled."),process.exit(1))}while(i);return[...n.values()]},YOt=e=>Wf({message:"Select a sink type",options:e.map(t=>({value:t,label:t.displayName,hint:t.description}))}),JOt=()=>th(Qh({message:"Would you like to add another sink?",initialValue:!1})),QOt=async e=>{let[t,r]=await ll.get("/api/admin/secrets/v1/");if(t)throw new Error(t.message);if(r.data)return r.data.filter(n=>n.type===e);throw new Error("Failed to list secrets, please try again")},ZOt=e=>{let t=Object.values(uu.SinkTypes).find(n=>n.toString()===e);if(!t)throw new Error("Encountered unexpected error");let r=Object.values(Fd.SchemaSecretType).find(n=>n.toString()===t.toString());if(!r){if(uu.SinkTypes.File===t)return Fd.SchemaSecretType.s3;if(Object.values(Fd.JdbcProtocol).find(i=>i.toString()===(t==null?void 0:t.toString())))return Fd.SchemaSecretType.jdbc;throw new Error("Encountered unexpected error")}return r};var eFt="create <name>",tFt=`${fDe.default.red("[BETA]")} Create a pipeline`,rFt=e=>e.positional("name",{describe:"name of the new pipeline",type:"string",demandOption:!0}).option("output",{describe:"format of the output. Either json or table. Defaults to table.",alias:["outputFormat"],type:"string",choices:uu.AllStreamCliOuputFormats,demandOption:!1}).option("resource-size",{describe:"runtime resource size for when the pipeline runs",alias:["resourceSize"],choices:uu.AllResourceSizes,default:"s",type:"string",demandOption:!0}).option("description",{describe:"the description of the new pipeline",type:"string",demandOption:!1}).option("definition",{describe:"definition of the pipeline that includes sources, transforms, sinks. Provided as json eg: `{sources: [], transforms: [], sinks:[]}`",type:"string",demandOption:!1}).option("definition-path",{describe:"path to a json file with the definition of the pipeline that includes sources, transforms, sinks.",type:"string",demandOption:!1}).option("status",{describe:"the desired status of the pipeline",type:"string",choices:uu.AllStreamStatuses,default:"INACTIVE",demandOption:!1}).conflicts("definition","definition-path"),nFt=e=>[...e.keys()].find(t=>t.startsWith("public_dataset_")&&t.includes("_logs")),iFt=async e=>{if(await sFt(e.name),e.definition||e.definitionPath){let t="";e.definition?t=e.definition:e.definitionPath&&(t=hDe.default.readFileSync(e.definitionPath,{encoding:"utf-8"}));let r=U3(t),n={name:e.name,description:e.description,resource_size:e.resourceSize,status:e.status,definition:r};await xW(n,e.output||"table")}else{console.log(""),Hg("With Goldsky pipelines, you sync data to your own infrastructure to power your APIs and for data analytics.");let t=await yCe(),r=await $Ee(t),n=[];nFt(r)&&(n=await XEe([...r.values()]));let i=await mDe(t,[...r.values()],n),s={sources:[...r.values()],transforms:n,sinks:i},o={name:e.name,description:e.description,resource_size:e.resourceSize,status:"ACTIVE",definition:s};await xW(o,e.output)}};async function sFt(e){let[t,r]=await ll.get("/api/admin/streams/v1/");(typeof(r==null?void 0:r.length)=="undefined"?[]:r).map(i=>i.name).includes(e)&&(console.error(`Provided pipeline with name: ${e} already exists in the project.`),process.exit(1))}var OW={};id(OW,{builder:()=>cFt,command:()=>oFt,describe:()=>aFt,handler:()=>lFt});var yDe=dr(Od());var RW=dr(fm());async function gDe(e,t){let r=(0,RW.default)("Fetching pipeline").start(),[n,i]=await ll.get(s=>`/api/admin/streams/v1/${s.name}?version=${s.version||""}`,{params:e});if(n)r.fail(n.message),process.exit(1);else{r.succeed();let s=(0,RW.default)("Fetching pipeline runtime details").start(),[o,a]=await ll.post("/api/admin/streams/v1/runtime-details",{body:{namesAndVersions:[{name:e.name,version:e.version}]}});o?s.warn("Couldn't load pipeline runtime details"):s.succeed(),Hv(i,o?[]:a,t)}}var oFt="get <name>",aFt=`${yDe.default.red("[BETA]")} Get a pipeline`,cFt=e=>e.positional("name",{describe:"pipeline name",type:"string",demandOption:!0}).option("output",{describe:"format of the output. Either json or table. Defaults to json.",alias:["outputFormat"],type:"string",choices:uu.AllStreamCliOuputFormats,default:"json"}).option("version",{describe:"pipeline version. Returns latest version of the pipeline if not set. Passing 'all' returns all versions.",type:"string"}),lFt=async e=>{await gDe({name:e.name,version:e.version},e.output)};var FW={};id(FW,{builder:()=>pFt,command:()=>uFt,describe:()=>dFt,handler:()=>mFt});var _De=dr(Od()),wDe=dr(require("fs"));var bDe=dr(fm());async function vDe(e,t){let r=(0,bDe.default)("Updating pipeline").start(),[n,i]=await ll.put(()=>`/api/admin/streams/v1/${e.name}`,{body:e});n?(r.fail(n.message),process.exit(1)):i?(r.succeed(`Updated pipeline: ${i.name}`),Hv(i,[],t)):(r.fail("Failed to update pipeline, try again"),process.exit(1))}var uFt="update <name>",dFt=`${_De.default.red("[BETA]")} Update a pipeline`,pFt=e=>e.positional("name",{describe:"name of the pipeline to update.",type:"string",demandOption:!0}).option("output",{describe:"format of the output. Either json or table. Defaults to json.",alias:["outputFormat"],type:"string",choices:uu.AllStreamCliOuputFormats,default:"json",demandOption:!0}).option("resource-size",{describe:"runtime resource size for when the pipeline runs ",alias:["resourceSize"],choices:uu.AllResourceSizes,type:"string",demandOption:!1}).option("status",{describe:"new status of the pipeline",type:"string",choices:uu.AllStreamStatuses,demandOption:!1}).option("definition",{describe:"definition of the pipeline that includes sources, transforms, sinks. Provided as json eg: `{sources: [], transforms: [], sinks:[]}`",type:"string",demandOption:!1}).option("definition-path",{describe:"path to a json file with the definition of the pipeline that includes sources, transforms, sinks.",type:"string",demandOption:!1}).option("description",{describe:"new description of the pipeline`",type:"string",demandOption:!1}).conflicts("definition","definition-path"),mFt=async e=>{let t;if(e.definition||e.definitionPath){let r="";e.definition?r=e.definition:e.definitionPath&&(r=wDe.default.readFileSync(e.definitionPath,{encoding:"utf-8"})),t=U3(r)}await vDe({name:e.name,definition:t,status:e.status,description:e.description,resource_size:e.resourceSize},e.output)};var TW={};id(TW,{builder:()=>gFt,command:()=>fFt,describe:()=>hFt,handler:()=>yFt});var CDe=dr(Od());var SDe=dr(fm());async function xDe(e){let t=(0,SDe.default)("Deleting pipeline").start(),[r]=await ll.delete_(()=>`/api/admin/streams/v1/${e.name}`);r?(t.fail(r.message),process.exit(1)):t.succeed(`Deleted pipeline with name: ${e.name}`)}var fFt="delete <name>",hFt=`${CDe.default.red("[BETA]")} Delete a pipeline`,gFt=e=>e.positional("name",{describe:"pipeline name",type:"string",demandOption:!0}),yFt=async e=>{await xDe({name:e.name})};var NW={};id(NW,{builder:()=>_Ft,command:()=>bFt,describe:()=>vFt,handler:()=>wFt});var ADe=dr(Od());var IW=dr(fm()),EDe=dr(Od());async function DDe(e,t="all"){let r=(0,IW.default)("Listing pipelines").start(),[n,i]=await ll.get("/api/admin/streams/v1/");if(n)r.fail(n.message),process.exit(1);else if(r.succeed(),i.length>0){let s=i.map(l=>({name:l.name,version:l.version})),o=(0,IW.default)("Fetching pipeline runtime details").start(),[a,c]=await ll.post("/api/admin/streams/v1/runtime-details",{body:{namesAndVersions:s}});a?o.warn("Couldn't load pipeline runtime details"):o.succeed(),Hv(i,a?[]:c,e,t)}else console.log(`No pipelines found. Create one with ${EDe.default.bold("goldsky pipeline create")}.`)}var bFt="list",vFt=`${ADe.default.red("[BETA]")} List all pipelines`,_Ft=e=>e.option("output",{describe:"format of the output. Either json or table. Defaults to json.",alias:["outputFormat"],type:"string",choices:uu.AllStreamCliOuputFormats,default:"table"}).option("outputVerbosity",{describe:"Either summary or all. Defaults to summary.",type:"string",choices:NEe,default:"summary"}),wFt=async e=>{await DDe(e.output,e.outputVerbosity),console.log("Please use `goldsky pipeline get <pipeline-name>` to load more details for a given pipeline."),console.log("Alternatively, try `goldsky pipeline monitor <pipeline-name>` to continuously monitor an active pipeline."),console.log("")};var qW={};id(qW,{builder:()=>CFt,command:()=>SFt,describe:()=>xFt,handler:()=>EFt});var PDe=dr(Od());var SFt="monitor <name>",xFt=`${PDe.default.red("[BETA]")} Monitor a pipeline runtime`,CFt=e=>e.positional("name",{describe:"pipeline name",type:"string",demandOption:!0}).option("version",{describe:"pipeline version, uses latest version if not set.",type:"string",demandOption:!1}).option("max-refreshes",{describe:"max. number of data refreshes.",alias:"maxRefreshes",type:"number",demandOption:!1}),EFt=async e=>{await Tz({name:e.name,version:e.version},e.maxRefreshes)};var DFt="pipeline",AFt=`${kDe.default.red("[BETA]")} Commands related to Goldsky pipelines`,PFt=e=>e.command(kW).command(OW).command(FW).command(TW).command(NW).command(qW).version(!1).demandCommand(1),kFt=async()=>{};var sK={};id(sK,{builder:()=>hTt,command:()=>mTt,describe:()=>fTt,handler:()=>gTt});var fAe=dr(Od());var QW={};id(QW,{builder:()=>KFt,command:()=>HFt,describe:()=>WFt,handler:()=>YFt});var tAe=dr(Od());var BW={};id(BW,{builder:()=>FFt,command:()=>RFt,describe:()=>OFt,handler:()=>TFt});var FDe=dr(Od());var RDe=dr(fm());async function ODe(){let e=(0,RDe.default)("Fetching users").start(),[t,r]=await ll.get("/api/admin/project/v1/users");if(t)e.fail(t.message),process.exit(1);else if(r.data.length===0)e.fail("No users found, this is extremely unusual. Please contact support@goldsky.com"),process.exit(1);else{e.succeed();for(let n of r.data)console.log(n.email)}}var RFt="list",OFt=`${FDe.default.red("[BETA]")} List all users for this project`,FFt=e=>e,TFt=async()=>{await ODe()};var YW={};id(YW,{builder:()=>zFt,command:()=>MFt,describe:()=>jFt,handler:()=>$Ft});var JDe=dr(Od());var WDe=dr(fm()),KDe=dr(HDe());async function YDe(e,t){let r=(0,WDe.default)();if(!t){let s=(0,KDe.question)("Any user you invite will have admin privileges, are you sure you want to invite them? (y/n) ");s!=="Y"&&s!=="y"&&(r.fail("Cancelled"),process.exit(1))}r.start("Inviting users");let[n,i]=await ll.post("/api/admin/invite/v1/invite",{body:{emails:e}});n?(r.fail(n.message),process.exit(1)):i.data?r.succeed("Invited users!"):(r.fail("Failed to invite users, try again"),process.exit(1))}var MFt="invite",jFt=`${JDe.default.red("[BETA]")} Invite a user to your project`,zFt=e=>e.option("emails",{describe:"emails of users to invite",type:"array",demandOption:!0,string:!0}).option("yes",{describe:"skip confirmation",type:"boolean",default:!1}),$Ft=async({emails:e,yes:t})=>{await YDe(e,t)};var JW={};id(JW,{builder:()=>XFt,command:()=>UFt,describe:()=>GFt,handler:()=>VFt});var eAe=dr(Od());var QDe=dr(fm());async function ZDe(e){let t=(0,QDe.default)("Removing user").start(),[r,n]=await ll.delete_("/api/admin/project/v1/user",{body:{email:e}});r?(t.fail(r.message),process.exit(1)):n.data?t.succeed(`Removed user ${e}`):(t.fail("Failed to remove user, try again"),process.exit(1))}var UFt="remove",GFt=`${eAe.default.red("[BETA]")} Remove a user from your project`,XFt=e=>e.option("email",{describe:"email of user to remove",type:"string",demandOption:!0}),VFt=async({email:e})=>{await ZDe(e)};var HFt="users",WFt=`${tAe.default.red("[BETA]")} Commands related to the users of a project`,KFt=e=>e.command(BW).command(YW).command(JW).version(!1).demandCommand(1),YFt=async()=>{};var ZW={};id(ZW,{builder:()=>ZFt,command:()=>JFt,describe:()=>QFt,handler:()=>eTt});var iAe=dr(Od());var rAe=dr(fm());async function nAe(e){let t=(0,rAe.default)("Leaving project").start(),[r,n]=await ll.post("/api/admin/project/v1/leave",{body:{projectId:e}});r?(t.fail(r.message),process.exit(1)):n.data?t.succeed("Left project."):(t.fail("Failed to leave project, try again"),process.exit(1))}var JFt="leave",QFt=`${iAe.default.red("[BETA]")} Leave a project`,ZFt=e=>e.option("projectId",{describe:"the ID of the project you want to leave",type:"string",demandOption:!0}),eTt=async({projectId:e})=>{await nAe(e)};var rK={};id(rK,{builder:()=>nTt,command:()=>tTt,describe:()=>rTt,handler:()=>iTt});var aAe=dr(Od());var sAe=dr(fm()),eK=dr(Od());function tK(e){console.log(`* ${eK.default.bold(e.name)}${e.currentlyAuthenticated?` ${eK.default.green("(active)")}`:""}`),console.log(` Created At: ${new Date(e.createdAt).toLocaleString()}`),console.log(` Project ID: ${e.projectId}`)}async function oAe(){let e=(0,sAe.default)("Fetching projects").start(),[t,r]=await ll.get("/api/admin/project/v1/projects");if(t)e.fail(t.message),process.exit(1);else if(r.data.length===0)e.warn("You don't belong to any projects!");else{e.succeed();for(let n of r.data)tK(n)}}var tTt="list",rTt=`${aAe.default.red("[BETA]")} List all of the projects you belong to`,nTt=e=>e,iTt=async()=>{await oAe()};var nK={};id(nK,{builder:()=>aTt,command:()=>sTt,describe:()=>oTt,handler:()=>cTt});var uAe=dr(Od());var cAe=dr(fm());async function lAe(e){let t=(0,cAe.default)("Updating project").start(),[r,n]=await ll.put("/api/admin/project/v1/",{body:e});r?(t.fail(r.message),process.exit(1)):n.data?t.succeed("Updated project"):(t.fail("Failed to update project, try again"),process.exit(1))}var sTt="update",oTt=`${uAe.default.red("[BETA]")} Update a project`,aTt=e=>e.option("name",{describe:"the new name of the project",type:"string",demandOption:!0}),cTt=async({name:e})=>{await lAe({name:e})};var iK={};id(iK,{builder:()=>dTt,command:()=>lTt,describe:()=>uTt,handler:()=>pTt});var mAe=dr(Od());var dAe=dr(fm());async function pAe(e){let t=(0,dAe.default)("Creating project").start(),[r,n]=await ll.post("/api/admin/project/v1/project",{body:{name:e}});r?(t.fail(r.message),process.exit(1)):n.data?(t.succeed("Created project. Use https://app.goldsky.com to create an API token for this project."),tK(n.data)):(t.fail("Failed to create project, try again"),process.exit(1))}var lTt="create",uTt=`${mAe.default.red("[BETA]")} Create a project`,dTt=e=>e.option("name",{describe:"the name of the new project",type:"string",demandOption:!0}),pTt=async({name:e})=>{await pAe(e)};var mTt="project",fTt=`${fAe.default.red("[BETA]")} Commands related to project management`,hTt=e=>e.command(QW).command(ZW).command(rK).command(nK).command(iK).version(!1).demandCommand(1),gTt=async()=>{};var pK={};id(pK,{builder:()=>MTt,command:()=>LTt,describe:()=>BTt,handler:()=>jTt});var oK={};id(oK,{builder:()=>vTt,command:()=>yTt,describe:()=>bTt,handler:()=>_Tt});var yTt="create <name>",bTt="create a secret",vTt=e=>e.positional("name",{describe:"the name of the new secret",type:"string",demandOption:!0}).option("value",{describe:"the value of the new secret in json",type:"string",demandOption:!0}).option("type",{describe:"the type of the new secret",choices:Object.values(Fd.SchemaSecretType),demandOption:!0}).option("description",{describe:"the description of the new secret",type:"string",demandOption:!1}),_Tt=async e=>{let t=$3(e.value);await AW(bd(Xa({},e),{value:t}))};var aK={};id(aK,{builder:()=>xTt,command:()=>wTt,describe:()=>STt,handler:()=>CTt});var hAe=dr(fm()),gAe=dr(Od());async function yAe(){let e=(0,hAe.default)("Listing secrets").start(),[t,r]=await ll.get("/api/admin/secrets/v1/");if(t)e.fail(t.message),process.exit(1);else if(!r.data)e.fail("Failed to list secrets, try again"),process.exit(1);else if(e.succeed(),r.data.length>0){let n=[];r.data.map(i=>{n.push([i.name,i.type,i.description||"",new Date(i.created_at).toLocaleString()])}),GC(["Name","Type","Description","Created At"],n)}else console.log(`No secrets found. Create one with ${gAe.default.bold("goldsky secret create")}.`)}var wTt="list",STt="list all secrets",xTt=e=>e,CTt=async()=>{await yAe()};var cK={};id(cK,{builder:()=>ATt,command:()=>ETt,describe:()=>DTt,handler:()=>PTt});var bAe=dr(fm());async function vAe({name:e}){let t=(0,bAe.default)("Revealing secrets").start(),[r,n]=await ll.get(i=>`/api/admin/secrets/v1/${i.secretName}`,{params:{secretName:e}});r?(t.fail(r.message),process.exit(1)):n.data?(t.succeed(),console.log(n.data.value)):(t.fail("Failed to reveal secret, try again"),process.exit(1))}var ETt="reveal <name>",DTt="reveal a secret",ATt=e=>e.positional("name",{describe:"the name of the secret",type:"string",demandOption:!0}),PTt=async e=>{await vAe(e)};var uK={};id(uK,{builder:()=>OTt,command:()=>kTt,describe:()=>RTt,handler:()=>FTt});var _Ae=dr(fm());async function lK(e){let t=(0,_Ae.default)("Updating secret").start(),[r,n]=await ll.put(i=>`/api/admin/secrets/v1/${i.secretName}`,{body:{value:e.value,description:e.description},params:{secretName:e.name}});r?(t.fail(r.message),process.exit(1)):n.data?t.succeed("Updated secret"):(t.fail("Failed to update secret, try again"),process.exit(1))}var kTt="update <name>",RTt="update a secret",OTt=e=>e.positional("name",{describe:"the name of the secret",type:"string",demandOption:!0}).option("value",{describe:"the new value of the secret",type:"string",demandOption:!1}).option("description",{describe:"the new description of the secret",type:"string",demandOption:!1}),FTt=async e=>{let t=e.value;if(t){let r=$3(t);await lK(bd(Xa({},e),{value:r}))}else await lK({name:e.name,description:e.description})};var dK={};id(dK,{builder:()=>NTt,command:()=>TTt,describe:()=>ITt,handler:()=>qTt});var wAe=dr(fm());async function SAe(e){let t=(0,wAe.default)("Deleting secret").start(),[r,n]=await ll.delete_(i=>`/api/admin/secrets/v1/${i.secretName}`,{params:e});r?(t.fail(r.message),process.exit(1)):n.success?t.succeed("Deleted secret"):(n.referencedStreams&&n.referencedStreams.length>0&&(t.fail(`Failed to delete secret because it is being used in following pipelines: ${n.referencedStreams.map(i=>i.streamName)}. Please delete these pipelines and try again.`),process.exit(1)),t.fail("Failed to delete secret, try again"),process.exit(1))}var TTt="delete <name>",ITt="delete a secret",NTt=e=>e.positional("name",{describe:"the name of the secret to delete",type:"string",demandOption:!0}),qTt=async e=>{await SAe({secretName:e.name})};var LTt="secret",BTt="Commands related to secret management",MTt=e=>e.command(oK).command(aK).command(cK).command(uK).command(dK).version(!1).demandCommand(1),jTt=async()=>{};var _Z={};id(_Z,{builder:()=>WUt,command:()=>VUt,describe:()=>HUt,handler:()=>KUt});var fK={};id(fK,{builder:()=>UTt,command:()=>zTt,describe:()=>$Tt,handler:()=>GTt});var Mz=dr(Od());var xAe=dr(fm());async function mK(e){let t=(0,xAe.default)("Removing subgraph").start(),[r,n]=await ll.delete_(i=>`/api/admin/subgraph/v1/subgraphs/${i.name}/deployments/${i.version_label}`,{params:{name:e.name,version_label:e.v}});r?(t.fail(`${Mz.default.bold("Subgraph removal failed:")} ${Mz.default.red(r.message)}`),process.exit(1)):t.succeed(Mz.default.bold("Removed subgraph"))}var Rf=e=>e.split("/");var zTt="delete <nameAndVersion>",$Tt="Delete a subgraph from Goldsky",UTt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}),GTt=async({apiHost:e,nameAndVersion:t})=>mK({apiHost:e,name:Rf(t)[0],v:Rf(t)[1]});var aZ={};id(aZ,{builder:()=>tUt,command:()=>Z$t,describe:()=>eUt,handler:()=>rUt});var ME=dr(Od());var eIe=dr(LRe()),Hb=dr(require("fs")),tIe=dr(require("os")),jy=dr(require("path")),DU=dr(COe());var BE=dr(fm());var rIe=dr(rZ());var U$t=dr(KTe()),G$t=dr(rZ()),sm=dr(Td()),X$t=sm.Type.Object({abi:sm.Type.String(),address:sm.Type.String(),startBlock:sm.Type.Number(),chain:sm.Type.String()}),V$t=sm.Type.Object({abi:sm.Type.String(),startBlock:sm.Type.Number(),source:sm.Type.Object({abi:sm.Type.String(),eventSignature:sm.Type.String(),addressParam:sm.Type.String()})}),YTe={version:sm.Type.Literal("1"),chains:sm.Type.Array(sm.Type.String()),instances:sm.Type.Array(sm.Type.Union([X$t,V$t]))},JTe=sm.Type.Object({...YTe,abis:sm.Type.Record(sm.Type.String(),sm.Type.Object({path:sm.Type.String()})),enableCallHandlers:sm.Type.Optional(sm.Type.Boolean())}),fmr=sm.Type.Object({...YTe,abis:sm.Type.Record(sm.Type.String(),sm.Type.Any()),enableCallHandlers:sm.Type.Optional(sm.Type.Boolean())});var QTe=3;async function H$t(e,t,r){let n=Hy.create({}),i=jy.default.join(tIe.default.tmpdir(),`goldsky-deploy-${e}`);try{await Hb.default.promises.mkdir(i)}catch(m){if(m.code!=="EEXIST")throw m}let s=[],o=0,a=0,c=(m,g,y)=>{let S=m.getIn(g);s.push([S.get("/").replace("/ipfs/",""),y]),m.setIn(g,DU.default.createNode(y))},l=()=>{r.prefixText=`${Math.round(a++/(s.length+1)*100)}%`},u=await n.get(`${t}/api/v0/cat?arg=${e}`);l();let p=DU.default.parseDocument(u.data);c(p,["schema","file"],"schema.graphql");for(let m of["dataSources","templates"]){let g=p.get(m);if(g)for(let[y,S]of g.items.entries()){c(S,["mapping","file"],`${o++}.wasm`);for(let[x,P]of S.getIn(["mapping","abis"]).items.entries())c(P,["file"],`${o++}.json`)}}await Hb.default.promises.writeFile(jy.default.join(i,"subgraph.yaml"),p.toString());for(let m of s){let g=jy.default.join(i,m[1]);if(!Hb.default.existsSync(g))try{let y=0;for(;y<QTe;){let S=await n.get(`${t}/api/v0/cat?arg=${m[0]}`,{responseType:"arraybuffer",validateStatus:x=>x>=200&&x<300||y<QTe-1&&x===504});if(S.status===504)++y;else{await Hb.default.promises.writeFile(g,S.data);break}}}catch(y){try{await Hb.default.promises.rm(g)}catch(S){}throw y}l()}return r.prefixText="",i}async function W$t(e){let t=new URL(e),r=Hy.create({});try{return(await r.post(e,{query:"{_meta{deployment}}",variables:null},Xa({},t.host==="gateway.thegraph.com"?{headers:{origin:"https://thegraph.com"}}:{}))).data.data._meta.deployment}catch(n){throw new Error("Could not find deployment, did you use a GraphQL endpoint?")}}async function nIe(e){if(console.log(ME.default.bold("Deploying Subgraph:")),e.abi){let s=(0,BE.default)("Generating subgraph(s) (this may take several minutes)").start(),o;try{o=await K$t(e.abi,e.enableCallHandlers)}catch(l){qS(s,l);return}let[a,c]=await ll.post("/api/admin/subgraph/v1/subgraphs/generated",{body:{bundle:o}});if(a){qS(s,a);return}else{let l=c.data.generate_config_cursor;for(;;){let[u,p]=await ll.post("/api/admin/subgraph/v1/subgraphs/check_generated",{body:{cursor:l}});if(u){qS(s,u);return}else{let m=p.data.filter(g=>g.status==="FAILED");if(m.length){qS(s,{message:`Failed to generate subgraph on chain ${m[0].chain} from Abi bundle: ${m[0].failure_info}`});return}else if(p.data.filter(g=>g.status==="COMPLETE").length===p.data.length){s.succeed();for(let g of p.data)await ZTe(bd(Xa({},e),{name:`${e.name}-${g.chain}`}),{generatedBundleId:g.generated_subgraph_id||void 0});return}}await new Promise(m=>setTimeout(m,5e3))}}}let t=e.path||jy.default.join(process.cwd()),r=e.ipfsHash;if(e.graphql){let s=(0,BE.default)("Getting subgraph deployment metadata").start();try{r=await W$t(e.graphql),s.succeed()}catch(o){qS(s,o);return}}if(r){let s=(0,BE.default)("Downloading subgraph from IPFS (This can take a while)").start();try{t=await H$t(r,e.ipfsGateway,s),s.succeed()}catch(o){qS(s,o);return}}let n=await cCe(t);n.isValid||(console.log("Deployment failed: This path doesn't point to a subgraph build path"),process.exit(1));let i=await Q$t(n.buildPath);await ZTe(e,{bundle:i})}async function K$t(e,t){let r=jy.default.resolve(process.cwd(),e),n=jy.default.dirname(r),i=(()=>{try{return require(r)}catch(a){throw new Error(`Unable to load config from '${r}'`)}})(),s=new rIe.default({}),o=Y$t(i,n,t);if(!s.validate(o.schema,i))throw new Error(`Invalid config: ${s.errorsText(s.errors)}`);return await o.stringify()}function Y$t(e,t,r){switch(e.version){case"1":return{schema:JTe,stringify:async()=>{let n=e,i={version:"1",abis:{},chains:n.chains,instances:n.instances,enableCallHandlers:r};for(let s in n.abis){let o=jy.default.resolve(t,n.abis[s].path);i.abis[s]=(()=>{try{return require(o)}catch(a){throw new Error(`Unable to load Abi '${s}' from '${o}'`)}})()}return await J$t(i.chains),JSON.stringify(i)}};default:throw new Error(`Unknown config version ${e.version}`)}}async function J$t(e){let[t,r]=await ll.get("/api/admin/subgraph/v1/subgraphs/supported_chains");if(t)throw t;{let n=e.filter(i=>!r.data.supported_chains.find(s=>s===i));if(n.length)throw new Error(`The chains [${n.join(", ")}] are not supported. Please specify any combination of the following supported chains: [${r.data.supported_chains.join(", ")}]`)}}async function ZTe(e,t){let r=(0,BE.default)(`Deploying ${e.name}/${e.v} to Goldsky`).start(),n=ll.FormData();t.bundle?n.append("bundle",t.bundle.generateNodeStream({streamFiles:!0}),"bundle.zip"):t.generatedBundleId&&n.append("generated_bundle_id",t.generatedBundleId),n.append("overwrite",e.overwrite?"1":"0"),n.append("remove_graft",e.removeGraft?"1":"0"),e.startBlock&&n.append("start_block",e.startBlock.toString()),e.graftFrom&&n.append("graft_from",e.graftFrom);let[i,s]=await ll.put(o=>`/api/admin/subgraph/v1/subgraphs/${o.name}/deployments/${o.version_label}`,{params:{name:e.name,version_label:e.v},body:n});i?i.statusCode===524?r.info(`This deployment is taking longer than usual and will keep deploying in the background.
537
541
  Wait a few minutes and use ${ME.default.bold("goldsky subgraph list")} to check the status of your deployments.`):qS(r,i):(r.succeed(),console.log(),console.log(`${ME.default.bold("Deployed subgraph API:")} ${e.apiHost}${s.data.subgraph.graphql_endpoint}`))}function qS(e,t){e.fail(),console.log(),console.log(`${ME.default.bold("Deployment failed:")} ${ME.default.red(t.message||t.error)}`),process.exit(1)}async function Q$t(e){let t=(0,BE.default)(`Packaging deployment bundle from ${e}`).start();try{let r=new eIe.default;r.generateNodeStream({type:"nodebuffer",streamFiles:!0});let n=await Hb.default.promises.readFile(jy.default.join(e,"subgraph.yaml"),{encoding:"utf8"}),i=DU.default.parse(n);r.file("subgraph.yaml",n);let s=i.schema.file,o=await Hb.default.promises.readFile(jy.default.join(e,s));r.file(s,o);let a=i.dataSources.concat(i.templates||[]);for(let c of a){let l=c.mapping,u=[l.file,...l.abis.map(p=>p.file)];for(let p of u){let m=await Hb.default.promises.readFile(jy.default.join(e,p));r.file(p,m)}}return t.succeed(),r}catch(r){throw t.fail(),r}}var AU=dr(Od()),iIe=e=>e==null?void 0:e.replace(/\/$/,""),Z$t="deploy <nameAndVersion>",eUt="Deploy a subgraph to Goldsky",tUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}).option("path",{describe:"Path to subgraph",type:"string"}).option("from-ipfs-hash",{describe:"IPFS hash of a publicly deployed subgraph",type:"string"}).option("ipfs-gateway",{describe:"IPFS gateway to use if downloading the subgraph from IPFS",type:"string",default:"https://ipfs.network.thegraph.com"}).option("from-graphql",{describe:"[Deprecated] Use --from-url instead",type:"string",hidden:!0,coerce(t){return iIe(t)}}).option("from-abi",{describe:`${AU.default.red("[BETA] Generate a subgraph from an ABI ")}`,type:"string"}).option("from-url",{describe:"GraphQL endpoint for a publicly deployed subgraph",type:"string",coerce(t){return iIe(t)}}).option("overwrite",{describe:"Overwrite existing subgraph with the matching name/version",type:"boolean",default:!1}).option("remove-graft",{describe:"Remove grafts from the subgraph prior to deployment",type:"boolean",default:!1}).option("start-block",{describe:"Change start block of your subgraph prior to deployment",type:"number"}).option("graft-from",{describe:`${AU.default.red("[BETA] Graft from the latest block of an existing subgraph in the format <name>/<version>")}`,demandOption:!1,type:"string"}).option("enable-call-handlers",{describe:`${AU.default.red("[BETA] Generate a subgraph from an ABI with call handlers enabled. Only meaningful when used with --from-abi")}`,type:"boolean",default:!1}).conflicts("path",["from-ipfs-hash","from-graphql","from-url","from-abi"]).conflicts("from-ipfs-hash",["path","from-graphql","from-url","from-abi"]).conflicts("from-graphql",["path","from-ipfs-hash","from-url","from-abi"]).conflicts("from-url",["path","from-ipfs-hash","from-graphql","from-abi"]).conflicts("from-abi",["path","from-ipfs-hash","from-graphql","from-url"]),rUt=async({apiHost:e,nameAndVersion:t,overwrite:r,path:n,fromIpfsHash:i,fromUrl:s,fromGraphql:o,fromAbi:a,ipfsGateway:c,removeGraft:l,startBlock:u,graftFrom:p,enableCallHandlers:m})=>nIe({apiHost:e,name:Rf(t)[0],overwrite:r,path:n,ipfsHash:i,graphql:s||o,abi:a,ipfsGateway:c,v:Rf(t)[1],removeGraft:l,startBlock:u,graftFrom:p,enableCallHandlers:m});var cZ={};id(cZ,{builder:()=>sUt,command:()=>nUt,describe:()=>iUt,handler:()=>oUt});var zy=dr(Od());var sIe=dr(fm());async function oIe(e){var s,o;let t="/api/admin/subgraph/v1/subgraphs";e.name&&(t+=`/${e.name}`),e.filter&&(t+=`/${e.filter}`),e.v&&(t+=`/${e.v}`);let r=(0,sIe.default)("Fetching subgraphs").start(),[n,i]=await ll.get(t);if(n)r.fail(`${zy.default.bold("Subgraph listing failed:")} ${zy.default.red(n.message)}`),process.exit(1);else if(r.stop(),i.data.length===0)console.log(zy.default.bold("No subgraphs found."),"Run 'goldsky subgraph deploy --help' for information on deploying a subgraph");else{console.log(zy.default.bold("Subgraphs"));for(let a of i.data)if(a.tag?a.tag.target_version?console.log(zy.default.bold(`* ${a.name}/${a.version} -> ${a.name}/${a.tag.target_version}`)):console.log(zy.default.bold(`* ${a.name}/${a.version} -> [no target]`)):console.log(zy.default.bold(`* ${a.name}/${a.version}`)),!e.summary&&a.deployments.length){let c=a.deployments[0];console.log(" ","GraphQL API:",ll.getPath(a.graphql_endpoint,{})),console.log(" ","Created:",new Date(c.created_at).toLocaleString()),console.log(" ","Status:",`${zy.default[c.health==="healthy"?"green":"red"](c.health)}`),c.fatal_error&&console.log(" ","Fatal error:",zy.default.red(c.fatal_error.replace(/\t/g,`\r
538
542
  `))),console.log(" ","Synced:",`${c.synced?zy.default.green("\u2714"):`${((s=c.indexing_progress)==null?void 0:s.progress_percent.toPrecision(3))||0}%`}`),c.indexing_progress&&(console.log(" ","Blocks indexed:",`${c.indexing_progress.deployment_start_block} -> ${c.indexing_progress.deployment_head_block}`),console.log(" ","Chain:",(o=c.indexing_progress)==null?void 0:o.network))}}}var nUt="list [nameAndVersion]",iUt="View deployed subgraphs and tags",sUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string"}).option("filter",{describe:"Limit results to just tags or deployments",choices:["tags","deployments"]}).option("summary",{describe:"Summarize subgraphs & versions without all their details",type:"boolean",default:!1}).implies("version","name").conflicts("filter","version"),oUt=async({apiHost:e,summary:t,filter:r,nameAndVersion:n})=>oIe({apiHost:e,summary:t,filter:r,name:n?Rf(n)[0]:void 0,v:n?Rf(n)[1]:void 0});var pZ={};id(pZ,{builder:()=>yUt,command:()=>hUt,describe:()=>gUt,handler:()=>bUt});var uZ={};id(uZ,{builder:()=>lUt,command:()=>aUt,describe:()=>cUt,handler:()=>uUt});var S_=dr(Od());var lZ=dr(fm());async function PU(e){let t=r=>`/api/admin/subgraph/v1/subgraphs/${r.name}/tags/${r.version_label}`;if(e.remove){let r=(0,lZ.default)("Removing tag").start(),[n,i]=await ll.delete_(t,{params:{name:e.name,version_label:e.v}});n?r.fail(`${S_.default.bold("Tag removal failed:")} ${S_.default.red(n.message)}`):r.succeed(`${S_.default.bold("Removed tag:")} ${t({name:e.name,version_label:e.v})}`)}else{let r=(0,lZ.default)("Tagging subgraph").start(),[n,i]=await ll.put(t,{params:{name:e.name,version_label:e.v},body:{target_version:e.t}});n?(r.fail(`${S_.default.bold("Tagging failed:")} ${S_.default.red(n.message)}`),process.exit(1)):(r.succeed(`${S_.default.bold("Tagged subgraph:")}
539
543
  ${t({name:e.name,version_label:e.v})} ->
540
- ${e.t?t({name:e.name,version_label:e.t}):"null"}`),i.data.subgraph.deployments.length&&console.log(`${S_.default.bold("GraphQL API:")} ${e.apiHost}${i.data.subgraph.graphql_endpoint}`))}}var aUt="create <nameAndVersion>",cUt="Create a new tag",lUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}).option("tag",{alias:"t",describe:"The name of the tag",type:"string",demandOption:!0}),uUt=async({apiHost:e,nameAndVersion:t,tag:r})=>{await PU({apiHost:e,name:Rf(t)[0],remove:!1,v:r,t:Rf(t)[1]})};var dZ={};id(dZ,{builder:()=>mUt,command:()=>dUt,describe:()=>pUt,handler:()=>fUt});var dUt="delete <nameAndVersion>",pUt="Delete a tag",mUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}).option("tag",{alias:"t",describe:"The name of the tag to delete",type:"string",demandOption:!0}),fUt=async({apiHost:e,nameAndVersion:t,tag:r})=>{await PU({apiHost:e,name:Rf(t)[0],remove:!0,v:r})};var hUt="tag",gUt="Commands related to tags",yUt=e=>e.command(uZ).command(dZ).demandCommand(1),bUt=async()=>{};var fZ={};id(fZ,{builder:()=>SUt,command:()=>_Ut,describe:()=>wUt,handler:()=>xUt});var mZ=dr(fm()),Wb=dr(Od());var vUt=/(-?(?:\d+\.?\d*|\d*\.?\d+)(?:e[-+]?\d+)?)\s*([\p{L}]*)/uig;kd.nanosecond=kd.ns=1/1e6;kd.\u00B5s=kd.\u03BCs=kd.us=kd.microsecond=1/1e3;kd.millisecond=kd.ms=kd[""]=1;kd.second=kd.sec=kd.s=kd.ms*1e3;kd.minute=kd.min=kd.m=kd.s*60;kd.hour=kd.hr=kd.h=kd.m*60;kd.day=kd.d=kd.h*24;kd.week=kd.wk=kd.w=kd.d*7;kd.month=kd.b=kd.d*(365.25/12);kd.year=kd.yr=kd.y=kd.d*365.25;function kd(e="",t="ms"){var r=null;return e=(e+"").replace(/(\d)[,_](\d)/g,"$1$2"),e.replace(vUt,function(n,i,s){s=aIe(s),s&&(r=(r||0)+parseFloat(i,10)*s)}),r&&r/(aIe(t)||1)}function aIe(e){return kd[e]||kd[e.toLowerCase().replace(/s$/,"")]}var cIe=kd;var _Ut="log <nameAndVersion>",wUt=`${Wb.default.red("[BETA]")} Tail a subgraph's logs`,SUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}).option("since",{describe:"Return logs newer than a relative duration like 5s, 2m, or 3h",default:"1m",demandOption:!1}).option("format",{describe:"The format used to output logs, use text or json for easier parsed output, use pretty for more readable console output",choices:["pretty","json","text"],default:"text"}).option("filter",{describe:"The minimum log level to output",choices:yF.SubgraphLogLevels,default:"info"}).option("interval",{describe:"The time in seconds to wait between checking for new logs",type:"number",default:5}).option("max-queries",{describe:"The maximum number of queries to make. Meant for testing.",type:"number",hidden:!0,demandOption:!1}),xUt=async({since:e,format:t,filter:r,interval:n,nameAndVersion:i,maxQueries:s})=>{let o=(0,mZ.default)("Validating since").start(),a=cIe(e);a||(o.fail(),console.log(Wb.default.red(`Invalid value for parameter 'since': ${e}. Make sure the value you provide can be parsed by https://www.npmjs.com/package/parse-duration`)),process.exit(1)),o.stop();let c=(0,mZ.default)("Tailing logs").start(),l=new Date(Date.now()-a).getTime(),[u,p]=Rf(i),[m,g]=await ll.get(S=>`/api/admin/subgraph/v1/subgraph_deployments/${S.name}/${S.version_label}/logs`,{params:{name:u,version_label:p},querystring:{after:l,log_level:r}}),y=1;if(m)c.fail(m.message),process.exit(1);else{c.stop();let S;for(;m?(console.log(m.message),process.exit(1)):(S=g.data.cursor,EUt(t,g.data.results)),!(s&&y>=s);)[m,g]=await ll.get(x=>`/api/admin/subgraph/v1/subgraph_deployments/${x.name}/${x.version_label}/logs`,{params:{name:u,version_label:p},querystring:{cursor:S,log_level:r}}),y++,await CUt(Math.max(n,1)*1e3)}};function CUt(e){return new Promise(t=>setTimeout(t,e))}function EUt(e,t){t.map(r=>bd(Xa({},r),{timestamp:new Date(r.timestamp).toLocaleString()})).forEach(r=>{switch(e){case"json":{console.log(r);break}case"pretty":{let n=`[${Wb.default.dim(r.timestamp)}]`;n+=`[${(s=>{switch(s){case"error":return Wb.default.red;case"warning":return Wb.default.yellow;case"info":return Wb.default.cyan;case"debug":return Wb.default.dim;default:return Wb.default.grey}})(r.level)(r.level)}] `,n+=r.text,console.log(n);break}default:{console.log(`[${r.timestamp}][${r.level}] ${r.text}`);break}}})}var vZ={};id(vZ,{builder:()=>GUt,command:()=>$Ut,describe:()=>UUt,handler:()=>XUt});var yIe=dr(Od());var hZ={};id(hZ,{builder:()=>PUt,command:()=>DUt,describe:()=>AUt,handler:()=>kUt});var mIe=dr(Od());var MO=dr(fm()),dg=dr(Od());async function lIe(e){let t=(0,MO.default)("Creating webhook").start(),[r,n]=await ll.post(i=>`/api/admin/subgraph/v1/webhooks/${i.subgraphName}/${i.subgraphVersion}`,{params:{subgraphName:e.subgraphName,subgraphVersion:e.subgraphVersion},body:{name:e.name,webhookUrl:e.webhookUrl,entity:e.entity,numRetries:e.numRetries,retryIntervalSeconds:e.retryInterval,retryTimeoutSeconds:e.retryTimeout}});r?(t.fail(),console.log(),console.log(`${dg.default.bold("Webhook creation failed:")} ${dg.default.red(r.message)}`),process.exit(1)):(t.succeed(),console.log(),console.log(`Webhook '${dg.default.bold(n.data.name)}' with ID '${dg.default.bold(n.data.id)}' created.`),console.log(`Make sure calls to your endpoint have the following value for the 'goldsky-webhook-secret' header: ${dg.default.bold(`${n.data.webhookSecret}`)}`))}async function uIe(e){let t=(0,MO.default)("Deleting webhook").start(),[r]=await ll.delete_(n=>`/api/admin/subgraph/v1/webhooks/${n.name}`,{params:{name:e.name}});r?(t.fail(),console.log(),console.log(`${dg.default.bold("Webhook deletion failed:")} ${dg.default.red(r.message)}`),process.exit(1)):(t.succeed(),console.log(),console.log(`Webhook '${dg.default.bold(e.name)}' deleted.`))}async function dIe(){let e=(0,MO.default)("Listing webhooks").start(),t="/api/admin/subgraph/v1/webhooks",[r,n]=await ll.get(t);if(r)e.fail(),console.log(),console.log(`${dg.default.bold("Could not list webhooks:")} ${dg.default.red(r.message)}`),process.exit(1);else if(e.succeed(),console.log(),n.data.length>0){let i=[];n.data.map(s=>{i.push([s.subgraphName,s.subgraphVersion,s.name,s.id,s.entity,s.webhookUrl])}),GC(["Subgraph Name","Subgraph Version","Webhook Name","Webhook ID","Entity","URL"],i)}else console.log(`No webhooks found. Create one with ${dg.default.bold("goldsky subgraph webhook create")}.`)}async function pIe({name:e,version:t}){let r=(0,MO.default)("Listing entities").start(),n=`/api/admin/subgraph/v1/webhooks/entities/${e}/${t}`,[i,s]=await ll.get(n);if(i)r.fail(),console.log(),console.log(`${dg.default.bold("Could not list entities:")} ${dg.default.red(i.message)}`),process.exit(1);else if(s.data.length===0)r.fail("No entities found. Please reach out to support@goldsky.com"),process.exit(1);else{r.succeed("Possible webhook entities:");for(let o of s.data)console.log(o.name)}}var DUt="create <nameAndVersion>",AUt=`${mIe.default.red("[BETA]")} Create a webhook`,PUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}).option("name",{describe:"Name of the webhook, must be unique",type:"string",demandOption:!0}).option("url",{describe:"URL to send events to",type:"string",demandOption:!0}).option("entity",{describe:"Subgraph entity to send events for",type:"string",demandOption:!0}).option("num-retries",{describe:"Number of times to retry sending an event",type:"number",default:10}).option("retry-interval",{describe:"Number of seconds to wait between retries",type:"number",default:60}).option("retry-timeout",{describe:"Number of seconds to wait for a response before retrying",type:"number",default:30}),kUt=async({entity:e,name:t,nameAndVersion:r,url:n,numRetries:i,retryInterval:s,retryTimeout:o})=>{await lIe({name:t,subgraphName:Rf(r)[0],subgraphVersion:Rf(r)[1],webhookUrl:n,entity:e,numRetries:i,retryInterval:s,retryTimeout:o})};var gZ={};id(gZ,{builder:()=>FUt,command:()=>RUt,describe:()=>OUt,handler:()=>TUt});var fIe=dr(Od());var RUt="delete",OUt=`${fIe.default.red("[BETA]")} Delete a webhook`,FUt=e=>e.option("name",{describe:"Name of the webhook to delete",type:"string",demandOption:!0}),TUt=async({name:e})=>{await uIe({name:e})};var yZ={};id(yZ,{builder:()=>qUt,command:()=>IUt,describe:()=>NUt,handler:()=>LUt});var hIe=dr(Od());var IUt="list",NUt=`${hIe.default.red("[BETA]")} List webhooks`,qUt=e=>e,LUt=async e=>{await dIe()};var bZ={};id(bZ,{builder:()=>jUt,command:()=>BUt,describe:()=>MUt,handler:()=>zUt});var gIe=dr(Od());var BUt="list-entities <nameAndVersion>",MUt=`${gIe.default.red("[BETA]")} List possible webhook entities for a subgraph`,jUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}),zUt=async({nameAndVersion:e})=>{let[t,r]=Rf(e);await pIe({name:t,version:r})};var $Ut="webhook",UUt=`${yIe.default.red("[BETA]")} Commands related to webhooks`,GUt=e=>e.command(hZ).command(gZ).command(yZ).command(bZ).demandCommand(1),XUt=async()=>{};var VUt="subgraph",HUt="Commands related to subgraphs",WUt=e=>e.command(aZ).command(cZ).command(fK).command(pZ).command(vZ).command(fZ).version(!1).demandCommand(1),KUt=async()=>{};var RU=dr(Od());var kU={name:"@goldskycom/cli",version:"1.15.0",description:"The Goldsky CLI to deploy subgraphs, index & transform blockchain data, configure webhooks, and access your data in real-time.",main:"dist/index.js",keywords:["goldsky","web3","blockchain","real-time","data pipelines","streams","webhooks"],author:"Goldsky",scripts:{lint:"eslint .",typecheck:"tsc --noEmit",clean:"rimraf ./dist && rimraf tsconfig.tsbuildinfo",build:"pnpm clean && tsc --noEmit --skipLibCheck && node ./scripts/build.js && chmod a+x bin/goldsky","build:sdk":"npx pkg -t linux,macos,win . -o sdk/goldsky","dev:debug":"NODE_ENV=development ts-node src/index.ts",prepublishOnly:"pnpm build","test:unit":"pnpm clean && tsc --skipLibCheck && node --test --test-reporter spec dist"},bin:{goldsky:"bin/goldsky"},files:["bin/goldsky","dist"],devDependencies:{"@aws-sdk/abort-controller":"^3.272.0","@aws-sdk/client-s3":"^3.272.0","@clack/prompts":"^0.7.0","@goldskyio/core":"workspace:*","@sinclair/typebox":"^0.25.8","@types/cli-progress":"^3.11.0","@types/form-data":"^2.5.0","@types/jszip":"^3.4.1","@types/node":"^18.11.18","@types/readline-sync":"^1.4.4","@types/update-notifier":"^6.0.1","@types/yaml":"^1.9.7","@types/yargs":"^17.0.7",ajv:"^8.11.2",axios:"^1.4.0",chalk:"^4.1.2","cli-progress":"^3.12.0","form-data":"^4.0.0",jszip:"^3.7.1",ora:"4.1.1","s3-sync-client":"^4.3.1",table:"^6.8.1",typescript:"^4.7.4",yaml:"^1.10.2",yargs:"^17.5.1"},license:"",dependencies:{cuid:"^2.1.8","parse-duration":"^1.0.3","readline-sync":"^1.4.10","update-notifier":"^6.0.2"}};var JUt=1e3*60*60*24*7,bIe=async()=>{(await Function('return import("update-notifier")')()).default({pkg:kU,updateCheckInterval:JUt}).notify({message:`\u{1F389} A new version of the Goldsky CLI is available \u{1F389}
544
+ ${e.t?t({name:e.name,version_label:e.t}):"null"}`),i.data.subgraph.deployments.length&&console.log(`${S_.default.bold("GraphQL API:")} ${e.apiHost}${i.data.subgraph.graphql_endpoint}`))}}var aUt="create <nameAndVersion>",cUt="Create a new tag",lUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}).option("tag",{alias:"t",describe:"The name of the tag",type:"string",demandOption:!0}),uUt=async({apiHost:e,nameAndVersion:t,tag:r})=>{await PU({apiHost:e,name:Rf(t)[0],remove:!1,v:r,t:Rf(t)[1]})};var dZ={};id(dZ,{builder:()=>mUt,command:()=>dUt,describe:()=>pUt,handler:()=>fUt});var dUt="delete <nameAndVersion>",pUt="Delete a tag",mUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}).option("tag",{alias:"t",describe:"The name of the tag to delete",type:"string",demandOption:!0}),fUt=async({apiHost:e,nameAndVersion:t,tag:r})=>{await PU({apiHost:e,name:Rf(t)[0],remove:!0,v:r})};var hUt="tag",gUt="Commands related to tags",yUt=e=>e.command(uZ).command(dZ).demandCommand(1),bUt=async()=>{};var fZ={};id(fZ,{builder:()=>SUt,command:()=>_Ut,describe:()=>wUt,handler:()=>xUt});var mZ=dr(fm()),Wb=dr(Od());var vUt=/(-?(?:\d+\.?\d*|\d*\.?\d+)(?:e[-+]?\d+)?)\s*([\p{L}]*)/uig;kd.nanosecond=kd.ns=1/1e6;kd.\u00B5s=kd.\u03BCs=kd.us=kd.microsecond=1/1e3;kd.millisecond=kd.ms=kd[""]=1;kd.second=kd.sec=kd.s=kd.ms*1e3;kd.minute=kd.min=kd.m=kd.s*60;kd.hour=kd.hr=kd.h=kd.m*60;kd.day=kd.d=kd.h*24;kd.week=kd.wk=kd.w=kd.d*7;kd.month=kd.b=kd.d*(365.25/12);kd.year=kd.yr=kd.y=kd.d*365.25;function kd(e="",t="ms"){var r=null;return e=(e+"").replace(/(\d)[,_](\d)/g,"$1$2"),e.replace(vUt,function(n,i,s){s=aIe(s),s&&(r=(r||0)+parseFloat(i,10)*s)}),r&&r/(aIe(t)||1)}function aIe(e){return kd[e]||kd[e.toLowerCase().replace(/s$/,"")]}var cIe=kd;var _Ut="log <nameAndVersion>",wUt=`${Wb.default.red("[BETA]")} Tail a subgraph's logs`,SUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}).option("since",{describe:"Return logs newer than a relative duration like 5s, 2m, or 3h",default:"1m",demandOption:!1}).option("format",{describe:"The format used to output logs, use text or json for easier parsed output, use pretty for more readable console output",choices:["pretty","json","text"],default:"text"}).option("filter",{describe:"The minimum log level to output",choices:yF.SubgraphLogLevels,default:"info"}).option("interval",{describe:"The time in seconds to wait between checking for new logs",type:"number",default:5}).option("max-queries",{describe:"The maximum number of queries to make. Meant for testing.",type:"number",hidden:!0,demandOption:!1}),xUt=async({since:e,format:t,filter:r,interval:n,nameAndVersion:i,maxQueries:s})=>{let o=(0,mZ.default)("Validating since").start(),a=cIe(e);a||(o.fail(),console.log(Wb.default.red(`Invalid value for parameter 'since': ${e}. Make sure the value you provide can be parsed by https://www.npmjs.com/package/parse-duration`)),process.exit(1)),o.stop();let c=(0,mZ.default)("Tailing logs").start(),l=new Date(Date.now()-a).getTime(),[u,p]=Rf(i),[m,g]=await ll.get(S=>`/api/admin/subgraph/v1/subgraph_deployments/${S.name}/${S.version_label}/logs`,{params:{name:u,version_label:p},querystring:{after:l,log_level:r}}),y=1;if(m)c.fail(m.message),process.exit(1);else{c.stop();let S;for(;m?(console.log(m.message),process.exit(1)):(S=g.data.cursor,EUt(t,g.data.results)),!(s&&y>=s);)[m,g]=await ll.get(x=>`/api/admin/subgraph/v1/subgraph_deployments/${x.name}/${x.version_label}/logs`,{params:{name:u,version_label:p},querystring:{cursor:S,log_level:r}}),y++,await CUt(Math.max(n,1)*1e3)}};function CUt(e){return new Promise(t=>setTimeout(t,e))}function EUt(e,t){t.map(r=>bd(Xa({},r),{timestamp:new Date(r.timestamp).toLocaleString()})).forEach(r=>{switch(e){case"json":{console.log(r);break}case"pretty":{let n=`[${Wb.default.dim(r.timestamp)}]`;n+=`[${(s=>{switch(s){case"error":return Wb.default.red;case"warning":return Wb.default.yellow;case"info":return Wb.default.cyan;case"debug":return Wb.default.dim;default:return Wb.default.grey}})(r.level)(r.level)}] `,n+=r.text,console.log(n);break}default:{console.log(`[${r.timestamp}][${r.level}] ${r.text}`);break}}})}var vZ={};id(vZ,{builder:()=>GUt,command:()=>$Ut,describe:()=>UUt,handler:()=>XUt});var yIe=dr(Od());var hZ={};id(hZ,{builder:()=>PUt,command:()=>DUt,describe:()=>AUt,handler:()=>kUt});var mIe=dr(Od());var MO=dr(fm()),dg=dr(Od());async function lIe(e){let t=(0,MO.default)("Creating webhook").start(),[r,n]=await ll.post(i=>`/api/admin/subgraph/v1/webhooks/${i.subgraphName}/${i.subgraphVersion}`,{params:{subgraphName:e.subgraphName,subgraphVersion:e.subgraphVersion},body:{name:e.name,webhookUrl:e.webhookUrl,entity:e.entity,numRetries:e.numRetries,retryIntervalSeconds:e.retryInterval,retryTimeoutSeconds:e.retryTimeout}});r?(t.fail(),console.log(),console.log(`${dg.default.bold("Webhook creation failed:")} ${dg.default.red(r.message)}`),process.exit(1)):(t.succeed(),console.log(),console.log(`Webhook '${dg.default.bold(n.data.name)}' with ID '${dg.default.bold(n.data.id)}' created.`),console.log(`Make sure calls to your endpoint have the following value for the 'goldsky-webhook-secret' header: ${dg.default.bold(`${n.data.webhookSecret}`)}`))}async function uIe(e){let t=(0,MO.default)("Deleting webhook").start(),[r]=await ll.delete_(n=>`/api/admin/subgraph/v1/webhooks/${n.name}`,{params:{name:e.name}});r?(t.fail(),console.log(),console.log(`${dg.default.bold("Webhook deletion failed:")} ${dg.default.red(r.message)}`),process.exit(1)):(t.succeed(),console.log(),console.log(`Webhook '${dg.default.bold(e.name)}' deleted.`))}async function dIe(){let e=(0,MO.default)("Listing webhooks").start(),t="/api/admin/subgraph/v1/webhooks",[r,n]=await ll.get(t);if(r)e.fail(),console.log(),console.log(`${dg.default.bold("Could not list webhooks:")} ${dg.default.red(r.message)}`),process.exit(1);else if(e.succeed(),console.log(),n.data.length>0){let i=[];n.data.map(s=>{i.push([s.subgraphName,s.subgraphVersion,s.name,s.id,s.entity,s.webhookUrl])}),GC(["Subgraph Name","Subgraph Version","Webhook Name","Webhook ID","Entity","URL"],i)}else console.log(`No webhooks found. Create one with ${dg.default.bold("goldsky subgraph webhook create")}.`)}async function pIe({name:e,version:t}){let r=(0,MO.default)("Listing entities").start(),n=`/api/admin/subgraph/v1/webhooks/entities/${e}/${t}`,[i,s]=await ll.get(n);if(i)r.fail(),console.log(),console.log(`${dg.default.bold("Could not list entities:")} ${dg.default.red(i.message)}`),process.exit(1);else if(s.data.length===0)r.fail("No entities found. Please reach out to support@goldsky.com"),process.exit(1);else{r.succeed("Possible webhook entities:");for(let o of s.data)console.log(o.name)}}var DUt="create <nameAndVersion>",AUt=`${mIe.default.red("[BETA]")} Create a webhook`,PUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}).option("name",{describe:"Name of the webhook, must be unique",type:"string",demandOption:!0}).option("url",{describe:"URL to send events to",type:"string",demandOption:!0}).option("entity",{describe:"Subgraph entity to send events for",type:"string",demandOption:!0}).option("num-retries",{describe:"Number of times to retry sending an event",type:"number",default:10}).option("retry-interval",{describe:"Number of seconds to wait between retries",type:"number",default:60}).option("retry-timeout",{describe:"Number of seconds to wait for a response before retrying",type:"number",default:30}),kUt=async({entity:e,name:t,nameAndVersion:r,url:n,numRetries:i,retryInterval:s,retryTimeout:o})=>{await lIe({name:t,subgraphName:Rf(r)[0],subgraphVersion:Rf(r)[1],webhookUrl:n,entity:e,numRetries:i,retryInterval:s,retryTimeout:o})};var gZ={};id(gZ,{builder:()=>FUt,command:()=>RUt,describe:()=>OUt,handler:()=>TUt});var fIe=dr(Od());var RUt="delete",OUt=`${fIe.default.red("[BETA]")} Delete a webhook`,FUt=e=>e.option("name",{describe:"Name of the webhook to delete",type:"string",demandOption:!0}),TUt=async({name:e})=>{await uIe({name:e})};var yZ={};id(yZ,{builder:()=>qUt,command:()=>IUt,describe:()=>NUt,handler:()=>LUt});var hIe=dr(Od());var IUt="list",NUt=`${hIe.default.red("[BETA]")} List webhooks`,qUt=e=>e,LUt=async e=>{await dIe()};var bZ={};id(bZ,{builder:()=>jUt,command:()=>BUt,describe:()=>MUt,handler:()=>zUt});var gIe=dr(Od());var BUt="list-entities <nameAndVersion>",MUt=`${gIe.default.red("[BETA]")} List possible webhook entities for a subgraph`,jUt=e=>e.positional("nameAndVersion",{describe:"Name and version of the subgraph, e.g. 'my-subgraph/1.0.0'",type:"string",demandOption:!0}),zUt=async({nameAndVersion:e})=>{let[t,r]=Rf(e);await pIe({name:t,version:r})};var $Ut="webhook",UUt=`${yIe.default.red("[BETA]")} Commands related to webhooks`,GUt=e=>e.command(hZ).command(gZ).command(yZ).command(bZ).demandCommand(1),XUt=async()=>{};var VUt="subgraph",HUt="Commands related to subgraphs",WUt=e=>e.command(aZ).command(cZ).command(fK).command(pZ).command(vZ).command(fZ).version(!1).demandCommand(1),KUt=async()=>{};var RU=dr(Od());var kU={name:"@goldskycom/cli",version:"1.15.1",description:"The Goldsky CLI to deploy subgraphs, index & transform blockchain data, configure webhooks, and access your data in real-time.",main:"dist/index.js",keywords:["goldsky","web3","blockchain","real-time","data pipelines","streams","webhooks"],author:"Goldsky",scripts:{lint:"eslint .",typecheck:"tsc --noEmit",clean:"rimraf ./dist && rimraf tsconfig.tsbuildinfo",build:"pnpm clean && tsc --noEmit --skipLibCheck && node ./scripts/build.js && chmod a+x bin/goldsky","build:sdk":"npx pkg -t linux,macos,win . -o sdk/goldsky","dev:debug":"NODE_ENV=development ts-node src/index.ts",prepublishOnly:"pnpm build","test:unit":"pnpm clean && tsc --skipLibCheck && node --test --test-reporter spec dist"},bin:{goldsky:"bin/goldsky"},files:["bin/goldsky","dist"],devDependencies:{"@aws-sdk/abort-controller":"^3.272.0","@aws-sdk/client-s3":"^3.272.0","@clack/prompts":"^0.7.0","@goldskyio/core":"workspace:*","@sinclair/typebox":"^0.25.8","@types/cli-progress":"^3.11.0","@types/form-data":"^2.5.0","@types/jszip":"^3.4.1","@types/node":"^18.11.18","@types/readline-sync":"^1.4.4","@types/update-notifier":"^6.0.1","@types/yaml":"^1.9.7","@types/yargs":"^17.0.7",ajv:"^8.11.2",axios:"^1.4.0",chalk:"^4.1.2","cli-progress":"^3.12.0","form-data":"^4.0.0",jszip:"^3.7.1",ora:"4.1.1","s3-sync-client":"^4.3.1",table:"^6.8.1",typescript:"^4.7.4",yaml:"^1.10.2",yargs:"^17.5.1"},license:"",dependencies:{cuid:"^2.1.8","parse-duration":"^1.0.3","readline-sync":"^1.4.10","update-notifier":"^6.0.2"}};var JUt=1e3*60*60*24*7,bIe=async()=>{(await Function('return import("update-notifier")')()).default({pkg:kU,updateCheckInterval:JUt}).notify({message:`\u{1F389} A new version of the Goldsky CLI is available \u{1F389}
541
545
 
542
546
  Run {updateCommand} to update (${RU.default.dim("{currentVersion}")}${RU.default.reset(" \u2192 ")}${RU.default.green("{latestVersion}")})`})};var QUt=e=>["subgraph list","subgraph tag delete"].includes(e),ZUt=r8(process.argv);bIe().then(uCe).then(()=>{fte(ZUt).scriptName("goldsky").usage("$0 <cmd> args").check(e=>{if(e.nameAndVersion&&!QUt(e._.join(" "))&&!e.nameAndVersion.match(/^.*\/.*$/))throw new Error(`The provided <nameAndValue> "${e.nameAndVersion}" does not match the "name/version" pattern, such as "my-subgraph/1.0.0".`);return!0}).option("apiHost",{alias:"api-host",describe:"Goldsky API host path",type:"string",default:Tie,hidden:!0}).option("token",{describe:"CLI Auth Token",type:"string",default:""}).option("color",{describe:"Colorize output",type:"boolean",default:!0}).command(JH).command(QH).command(_Z).command(sK).command("pipeline",!1,LW).command(KH).command("secret",!1,pK).version(kU.version).alias("v","version").alias("h","help").strict().demandCommand(1).middleware([({color:e})=>{e||(vIe.default.level=0)},e=>{ll.setApiHost(e.apiHost),e.token&&uR(e.token)}]).showHelpOnFail(!0).argv});
543
547
  /*!