@e2b/cli 0.0.6 → 0.0.7
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 +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -79,7 +79,7 @@ Content-Type: ${n.type||"application/octet-stream"}\r
|
|
|
79
79
|
`);return n!==-1&&(e=c4(e,i,a,n)),a+e+i};Object.defineProperties(In.prototype,ui);var $E=In(),EY=In({level:h4?h4.level:0});var nr=$E;o();var Bc=M(r3()),mt=M(require("path")),Pc=M(require("util"));var qr=M(require("fs")),Ic=M(m3()),Lc=M(D3()),kc=M(Nc()),yx=Pc.promisify(Bc.walk);async function Vc(t,e){let r;if(e!=null&&e.respectGitignore){let n=mt.join(t,".gitignore");qr.existsSync(n)&&(r=(0,Ic.default)().add(qr.readFileSync(n).toString()))}let a;if(e!=null&&e.respectDockerignore){let n=mt.join(t,".dockerignore");if(qr.existsSync(n)){let l=qr.readFileSync(n,"utf-8").split(`
|
|
80
80
|
`).map(u=>u.trim());a=(0,Lc.default)().add(l)}}let i=await yx(t,{entryFilter:n=>{var p;return[!!((p=n.stats)!=null&&p.isFile()),e!=null&&e.extension?n.name.endsWith(e.extension):!0,e!=null&&e.name?n.name===e.name:!0,!(r&&r.ignores(mt.relative(t,n.path))),!(a&&a.ignores(mt.relative(t,n.path)))].every(Boolean)},stats:!0});return await Promise.all(i.map(async n=>({path:n.path,rootPath:mt.join("/",mt.relative(t,n.path)),name:n.name})))}function ho(t){let e=process.cwd();return t?mt.isAbsolute(t)?t:mt.resolve(e,t):e}function qc(t){return mt.relative(process.cwd(),t)}var Mc=(t,e,r)=>new Promise((a,i)=>{kc.default.pack(t,{entries:e}).pipe(qr.createWriteStream(r)).on("error",i).on("finish",a)});function Kn(t,e){let r=He(t.id),a=t.template?Cx` [${t.template}]`:"",i=t.title?` ${t.title}`:"",n=e?Ex(" <-> ")+Qn(e):"";return`${r}${a}${i}${n}`}function Mr(t,e){return nr.redBright(`> ${t} ${e?`:
|
|
81
81
|
`+e:""}
|
|
82
|
-
`)}function Ex(t){return nr.dim(t)}function He(t){return nr.bold(t)}function Cx(t,e){return nr.dim(t[0]+e+t[1])}function Do(t){return nr.blue(t)}function Qn(t){return t?Do("./"+qc(t)):""}o();var df=M(nf()),uf=M(of());var ul=M(require("path")),lf=M(require("os")),Sa=M(require("fs")),mf=M(require("http"));var ol={};$p(ol,{author:()=>Gx,bin:()=>tA,bugs:()=>Yx,default:()=>dl,dependencies:()=>rA,description:()=>jx,devDependencies:()=>Xx,engines:()=>aA,files:()=>eA,homepage:()=>Wx,license:()=>zx,name:()=>Hx,publishConfig:()=>Qx,repository:()=>Kx,scripts:()=>Jx,sideEffects:()=>Zx,version:()=>pl});var Hx="@e2b/cli",pl="0.0.
|
|
82
|
+
`)}function Ex(t){return nr.dim(t)}function He(t){return nr.bold(t)}function Cx(t,e){return nr.dim(t[0]+e+t[1])}function Do(t){return nr.blue(t)}function Qn(t){return t?Do("./"+qc(t)):""}o();var df=M(nf()),uf=M(of());var ul=M(require("path")),lf=M(require("os")),Sa=M(require("fs")),mf=M(require("http"));var ol={};$p(ol,{author:()=>Gx,bin:()=>tA,bugs:()=>Yx,default:()=>dl,dependencies:()=>rA,description:()=>jx,devDependencies:()=>Xx,engines:()=>aA,files:()=>eA,homepage:()=>Wx,license:()=>zx,name:()=>Hx,publishConfig:()=>Qx,repository:()=>Kx,scripts:()=>Jx,sideEffects:()=>Zx,version:()=>pl});var Hx="@e2b/cli",pl="0.0.7",jx="CLI for managing e2b environments",Wx="https://usedevbook.com",zx="SEE LICENSE IN LICENSE",Gx={name:"FoundryLabs, Inc.",email:"hello@e2b.dev",url:"https://e2b.dev"},Yx="https://github.com/e2b-dev/e2b/issues",Kx={type:"git",url:"https://github.com/e2b-dev/e2b/tree/main/packages/cli"},Qx={access:"public"},Zx=!1,Jx={prepublishOnly:"pnpm build",build:"rm -rf ./dist && tsup --minify",dev:"tsup --watch",fix:"npx eslint **/src/**/*.{ts,js} --fix",format:"prettier --check --ignore-path .gitignore .","format:fix":"prettier --write --ignore-path .gitignore ."},Xx={"@trivago/prettier-plugin-sort-imports":"^3.3.0","@types/common-tags":"^1.8.2","@types/inquirer":"^8.0.0","@types/node":"16.11","@types/node-fetch":"^2.6.5","@types/parse-gitignore":"^1.0.0","@types/update-notifier":"5.1.0","@typescript-eslint/eslint-plugin":"^5.38.1","@typescript-eslint/parser":"^5.38.1",eslint:"^8.24.0","eslint-config-prettier":"^8.5.0","eslint-plugin-prettier":"^4.2.1","eslint-plugin-unused-imports":"^2.0.0",prettier:"^2.7.1",tsup:"^6.5.0",typescript:"^4.9.3"},eA=["dist","LICENSE","README","package.json"],tA={e2b:"dist/index.js"},rA={"@balena/dockerignore":"^1.0.2","@devbookhq/sdk":"^2.6.88","@iarna/toml":"^2.2.5","@nodelib/fs.walk":"^1.2.8","@types/tar-fs":"^2.0.2","async-listen":"^3.0.1",boxen:"^7.0.0",chalk:"^5.1.2",chokidar:"^3.5.3",commander:"^9.4.1","common-tags":"^1.8.2","docker-names":"^1.2.1","get-port":"^7.0.0",ignore:"^5.2.4",inquirer:"^8.0.0","node-fetch":"^3.3.2",open:"^8.4.2","parse-gitignore":"^2.0.0","tar-fs":"^3.0.4","update-notifier":"5.1.0",yup:"^0.32.11"},aA={node:">=16"},dl={name:Hx,version:pl,description:jx,homepage:Wx,license:zx,author:Gx,bugs:Yx,repository:Kx,publishConfig:Qx,sideEffects:Zx,scripts:Jx,devDependencies:Xx,files:eA,bin:tA,dependencies:rA,engines:aA};var Ei=ul.default.join(lf.homedir(),".e2b","config.json"),pf=process.env.E2B_DOCS_BASE||"https://e2b.dev/docs",cf=new ot("login").description("Login to e2b").action(async()=>{let t;try{t=wo()}catch(e){console.error(Mr("Failed to read user config",e))}if(t){console.log(`Already logged in as ${He(t.email)}, if you want to login as a different user, logout first.`);return}else if(!t){if(console.log("Attempting to login..."),t=await iA(),!t){console.info("Login aborted");return}Sa.default.mkdirSync(ul.default.dirname(Ei),{recursive:!0}),Sa.default.writeFileSync(Ei,JSON.stringify(t,null,2))}console.log(`Logged in as ${He(t.email)}`),process.exit(0)}),ff=new ot("logout").description("Logout of e2b").action(()=>{Sa.default.existsSync(Ei)?(Sa.default.unlinkSync(Ei),console.log("Logged out.")):console.log("Not logged in, nothing to do")});function wo(){return Sa.default.existsSync(Ei)?JSON.parse(Sa.default.readFileSync(Ei,"utf8")):null}async function iA(){let t=mf.default.createServer(),{port:e}=await(0,uf.listen)(t,0,"127.0.0.1"),r=new URL(`${pf}/api/cli`);return r.searchParams.set("next",`http://localhost:${e}`),r.searchParams.set("cliVersion",dl.version),new Promise((a,i)=>(t.once("request",(n,p)=>{p.setHeader("connection","close");let l=new URL(`${pf}/api/cli`),u=new URL(n.url||"/","http://localhost").searchParams,m=Object.fromEntries(u.entries()),{error:f}=m;f?(i(new Error(f)),l.searchParams.set("state","error"),l.searchParams.set("error",f)):(a(m),l.searchParams.set("state","success"),l.searchParams.set("email",m.email)),p.statusCode=302,p.setHeader("location",l.href),p.end()}),(0,df.default)(r.toString())))}var hf="https://ondevbook.com",Fa=process.env.E2B_API_BASE??hf,yo=process.env.E2B_API_KEY,Eo=process.env.E2B_ACCESS_TOKEN;Fa!==hf&&console.warn(`
|
|
83
83
|
Beware: Using custom API base URL: ${He(Fa)}
|
|
84
84
|
`);var Df=Td(`You must be logged in to use this command. Run ${He("e2b login")}.`,{width:70,float:"center",padding:.5,margin:1,borderStyle:"round",borderColor:"redBright"});function gf(){if(!yo){let t=wo();yo=t==null?void 0:t.defaultTeamApiKey}if(!yo)console.error(Df),process.exit(1);else return yo}function Co(){if(!Eo){let t=wo();Eo=t==null?void 0:t.accessToken}if(!Eo)console.error(Df),process.exit(1);else return Eo}o();o();o();o();o();var ll;try{ll=Map}catch{}var ml;try{ml=Set}catch{}function _f(t,e,r){if(!t||typeof t!="object"||typeof t=="function")return t;if(t.nodeType&&"cloneNode"in t)return t.cloneNode(!0);if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return new RegExp(t);if(Array.isArray(t))return t.map(Jn);if(ll&&t instanceof ll)return new Map(Array.from(t.entries()));if(ml&&t instanceof ml)return new Set(Array.from(t.values()));if(t instanceof Object){e.push(t);var a=Object.create(t);r.push(a);for(var i in t){var n=e.findIndex(function(p){return p===t[i]});a[i]=n>-1?r[n]:_f(t[i],e,r)}return a}return t}function Jn(t){return _f(t,[],[])}o();o();var nA=Object.prototype.toString,sA=Error.prototype.toString,oA=RegExp.prototype.toString,pA=typeof Symbol<"u"?Symbol.prototype.toString:()=>"",dA=/^Symbol\((.*)\)(.*)$/;function uA(t){return t!=+t?"NaN":t===0&&1/t<0?"-0":""+t}function vf(t,e=!1){if(t==null||t===!0||t===!1)return""+t;let r=typeof t;if(r==="number")return uA(t);if(r==="string")return e?`"${t}"`:t;if(r==="function")return"[Function "+(t.name||"anonymous")+"]";if(r==="symbol")return pA.call(t).replace(dA,"Symbol($1)");let a=nA.call(t).slice(8,-1);return a==="Date"?isNaN(t.getTime())?""+t:t.toISOString(t):a==="Error"||t instanceof Error?"["+sA.call(t)+"]":a==="RegExp"?oA.call(t):null}function It(t,e){let r=vf(t,e);return r!==null?r:JSON.stringify(t,function(a,i){let n=vf(this[a],e);return n!==null?n:i},2)}var Ur={default:"${path} is invalid",required:"${path} is a required field",oneOf:"${path} must be one of the following values: ${values}",notOneOf:"${path} must not be one of the following values: ${values}",notType:({path:t,type:e,value:r,originalValue:a})=>{let i=a!=null&&a!==r,n=`${t} must be a \`${e}\` type, but the final value was: \`${It(r,!0)}\``+(i?` (cast from the value \`${It(a,!0)}\`).`:".");return r===null&&(n+='\n If "null" is intended as an empty value be sure to mark the schema as `.nullable()`'),n},defined:"${path} must be defined"},yt={length:"${path} must be exactly ${length} characters",min:"${path} must be at least ${min} characters",max:"${path} must be at most ${max} characters",matches:'${path} must match the following: "${regex}"',email:"${path} must be a valid email",url:"${path} must be a valid URL",uuid:"${path} must be a valid UUID",trim:"${path} must be a trimmed string",lowercase:"${path} must be a lowercase string",uppercase:"${path} must be a upper case string"},pr={min:"${path} must be greater than or equal to ${min}",max:"${path} must be less than or equal to ${max}",lessThan:"${path} must be less than ${less}",moreThan:"${path} must be greater than ${more}",positive:"${path} must be a positive number",negative:"${path} must be a negative number",integer:"${path} must be an integer"},So={min:"${path} field must be later than ${min}",max:"${path} field must be at earlier than ${max}"},Fo={isValue:"${path} field must be ${value}"},xo={noUnknown:"${path} field has unspecified keys: ${unknown}"},Xn={min:"${path} field must have at least ${min} items",max:"${path} field must have less than or equal to ${max} items",length:"${path} must have ${length} items"},lA=Object.assign(Object.create(null),{mixed:Ur,string:yt,number:pr,date:So,object:xo,array:Xn,boolean:Fo});o();var c9=M(Po());o();var vO=t=>t&&t.__isYupSchema__,Hr=vO;var El=class{constructor(e,r){if(this.fn=void 0,this.refs=e,this.refs=e,typeof r=="function"){this.fn=r;return}if(!(0,c9.default)(r,"is"))throw new TypeError("`is:` is required for `when()` conditions");if(!r.then&&!r.otherwise)throw new TypeError("either `then:` or `otherwise:` is required for `when()` conditions");let{is:a,then:i,otherwise:n}=r,p=typeof a=="function"?a:(...l)=>l.every(u=>u===a);this.fn=function(...l){let u=l.pop(),m=l.pop(),f=p(...l)?i:n;if(f)return typeof f=="function"?f(m):m.concat(f.resolve(u))}}resolve(e,r){let a=this.refs.map(n=>n.getValue(r==null?void 0:r.value,r==null?void 0:r.parent,r==null?void 0:r.context)),i=this.fn.apply(e,a.concat(e,r));if(i===void 0||i===e)return e;if(!Hr(i))throw new TypeError("conditions must return a schema object");return i.resolve(r)}},f9=El;o();o();o();function os(t){return t==null?[]:[].concat(t)}function Cl(){return Cl=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(t[a]=r[a])}return t},Cl.apply(this,arguments)}var bO=/\$\{\s*(\w+)\s*\}/g,we=class extends Error{static formatError(e,r){let a=r.label||r.path||"this";return a!==r.path&&(r=Cl({},r,{path:a})),typeof e=="string"?e.replace(bO,(i,n)=>It(r[n])):typeof e=="function"?e(r):e}static isError(e){return e&&e.name==="ValidationError"}constructor(e,r,a,i){super(),this.value=void 0,this.path=void 0,this.type=void 0,this.errors=void 0,this.params=void 0,this.inner=void 0,this.name="ValidationError",this.value=r,this.path=a,this.type=i,this.errors=[],this.inner=[],os(e).forEach(n=>{we.isError(n)?(this.errors.push(...n.errors),this.inner=this.inner.concat(n.inner.length?n.inner:n)):this.errors.push(n)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,we)}};var wO=t=>{let e=!1;return(...r)=>{e||(e=!0,t(...r))}};function jr(t,e){let{endEarly:r,tests:a,args:i,value:n,errors:p,sort:l,path:u}=t,m=wO(e),f=a.length,g=[];if(p=p||[],!f)return p.length?m(new we(p,n,u)):m(null,n);for(let D=0;D<a.length;D++){let v=a[D];v(i,function(S){if(S){if(!we.isError(S))return m(S,n);if(r)return S.value=n,m(S,n);g.push(S)}if(--f<=0){if(g.length&&(l&&g.sort(l),p.length&&g.push(...p),p=g),p.length){m(new we(p,n,u),n);return}m(null,n)}})}}o();var e7=M(jl());o();var Xh=M(ls()),Vo={context:"$",value:"."};var je=class{constructor(e,r={}){if(this.key=void 0,this.isContext=void 0,this.isValue=void 0,this.isSibling=void 0,this.path=void 0,this.getter=void 0,this.map=void 0,typeof e!="string")throw new TypeError("ref must be a string, got: "+e);if(this.key=e.trim(),e==="")throw new TypeError("ref must be a non-empty string");this.isContext=this.key[0]===Vo.context,this.isValue=this.key[0]===Vo.value,this.isSibling=!this.isContext&&!this.isValue;let a=this.isContext?Vo.context:this.isValue?Vo.value:"";this.path=this.key.slice(a.length),this.getter=this.path&&(0,Xh.getter)(this.path,!0),this.map=r.map}getValue(e,r,a){let i=this.isContext?a:this.isValue?e:r;return this.getter&&(i=this.getter(i||{})),this.map&&(i=this.map(i)),i}cast(e,r){return this.getValue(e,r==null?void 0:r.parent,r==null?void 0:r.context)}resolve(){return this}describe(){return{type:"ref",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(e){return e&&e.__isYupRef}};je.prototype.__isYupRef=!0;function qo(){return qo=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(t[a]=r[a])}return t},qo.apply(this,arguments)}function UI(t,e){if(t==null)return{};var r={},a=Object.keys(t),i,n;for(n=0;n<a.length;n++)i=a[n],!(e.indexOf(i)>=0)&&(r[i]=t[i]);return r}function Pi(t){function e(r,a){let{value:i,path:n="",label:p,options:l,originalValue:u,sync:m}=r,f=UI(r,["value","path","label","options","originalValue","sync"]),{name:g,test:D,params:v,message:b}=t,{parent:S,context:x}=l;function R(F){return je.isRef(F)?F.getValue(i,S,x):F}function I(F={}){let B=(0,e7.default)(qo({value:i,originalValue:u,label:p,path:F.path||n},v,F.params),R),E=new we(we.formatError(F.message||b,B),i,B.path,F.type||g);return E.params=B,E}let L=qo({path:n,parent:S,type:g,createError:I,resolve:R,options:l,originalValue:u},f);if(!m){try{Promise.resolve(D.call(L,i,L)).then(F=>{we.isError(F)?a(F):F?a(null,F):a(I())}).catch(a)}catch(F){a(F)}return}let C;try{var A;if(C=D.call(L,i,L),typeof((A=C)==null?void 0:A.then)=="function")throw new Error(`Validation test of type: "${L.type}" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(F){a(F);return}we.isError(C)?a(C):C?a(null,C):a(I())}return e.OPTIONS=t,e}o();var t7=M(ls()),$I=t=>t.substr(0,t.length-1).substr(1);function r7(t,e,r,a=r){let i,n,p;return e?((0,t7.forEach)(e,(l,u,m)=>{let f=u?$I(l):l;if(t=t.resolve({context:a,parent:i,value:r}),t.innerType){let g=m?parseInt(f,10):0;if(r&&g>=r.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${l}, in the path: ${e}. because there is no value at that index. `);i=r,r=r&&r[g],t=t.innerType}if(!m){if(!t.fields||!t.fields[f])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${p} which is a type: "${t._type}")`);i=r,r=r&&r[f],t=t.fields[f]}n=f,p=u?"["+l+"]":"."+l}),{schema:t,parent:i,parentPath:n}):{parent:i,parentPath:e,schema:t}}o();var Wr=class{constructor(){this.list=void 0,this.refs=void 0,this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){let e=[];for(let r of this.list)e.push(r);for(let[,r]of this.refs)e.push(r.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}resolveAll(e){return this.toArray().reduce((r,a)=>r.concat(je.isRef(a)?e(a):a),[])}add(e){je.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){je.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}clone(){let e=new Wr;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,r){let a=this.clone();return e.list.forEach(i=>a.add(i)),e.refs.forEach(i=>a.add(i)),r.list.forEach(i=>a.delete(i)),r.refs.forEach(i=>a.delete(i)),a}};function Et(){return Et=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(t[a]=r[a])}return t},Et.apply(this,arguments)}var ne=class{constructor(e){this.deps=[],this.tests=void 0,this.transforms=void 0,this.conditions=[],this._mutate=void 0,this._typeError=void 0,this._whitelist=new Wr,this._blacklist=new Wr,this.exclusiveTests=Object.create(null),this.spec=void 0,this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Ur.notType)}),this.type=(e==null?void 0:e.type)||"mixed",this.spec=Et({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:"optional"},e==null?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;let r=Object.create(Object.getPrototypeOf(this));return r.type=this.type,r._typeError=this._typeError,r._whitelistError=this._whitelistError,r._blacklistError=this._blacklistError,r._whitelist=this._whitelist.clone(),r._blacklist=this._blacklist.clone(),r.exclusiveTests=Et({},this.exclusiveTests),r.deps=[...this.deps],r.conditions=[...this.conditions],r.tests=[...this.tests],r.transforms=[...this.transforms],r.spec=Jn(Et({},this.spec,e)),r}label(e){let r=this.clone();return r.spec.label=e,r}meta(...e){if(e.length===0)return this.spec.meta;let r=this.clone();return r.spec.meta=Object.assign(r.spec.meta||{},e[0]),r}withMutation(e){let r=this._mutate;this._mutate=!0;let a=e(this);return this._mutate=r,a}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&this.type!=="mixed")throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this.type} and ${e.type}`);let r=this,a=e.clone(),i=Et({},r.spec,a.spec);return a.spec=i,a._typeError||(a._typeError=r._typeError),a._whitelistError||(a._whitelistError=r._whitelistError),a._blacklistError||(a._blacklistError=r._blacklistError),a._whitelist=r._whitelist.merge(e._whitelist,e._blacklist),a._blacklist=r._blacklist.merge(e._blacklist,e._whitelist),a.tests=r.tests,a.exclusiveTests=r.exclusiveTests,a.withMutation(n=>{e.tests.forEach(p=>{n.test(p.OPTIONS)})}),a.transforms=[...r.transforms,...a.transforms],a}isType(e){return this.spec.nullable&&e===null?!0:this._typeCheck(e)}resolve(e){let r=this;if(r.conditions.length){let a=r.conditions;r=r.clone(),r.conditions=[],r=a.reduce((i,n)=>n.resolve(i,e),r),r=r.resolve(e)}return r}cast(e,r={}){let a=this.resolve(Et({value:e},r)),i=a._cast(e,r);if(e!==void 0&&r.assert!==!1&&a.isType(i)!==!0){let n=It(e),p=It(i);throw new TypeError(`The value of ${r.path||"field"} could not be cast to a value that satisfies the schema type: "${a._type}".
|
|
85
85
|
|
|
@@ -98,7 +98,7 @@ attempted value: ${n}
|
|
|
98
98
|
`)}catch(t){console.error(Mr(t.message)),process.exit(1)}});o();o();o();o();var tp=t_(),r_=tp.fetch.bind({});r_.polyfill=!0;global.fetch||(global.fetch=r_,global.Response=tp.Response,global.Headers=tp.Headers,global.Request=tp.Request);o();o();o();var Lne=Symbol(),Ia=class extends Error{constructor(e){super(e.statusText),Object.defineProperty(this,"headers",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"url",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"status",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"statusText",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.setPrototypeOf(this,new.target.prototype),this.headers=e.headers,this.url=e.url,this.status=e.status,this.statusText=e.statusText,this.data=e.data}};var Es=function(t,e,r,a){function i(n){return n instanceof r?n:new r(function(p){p(n)})}return new(r||(r=Promise))(function(n,p){function l(f){try{m(a.next(f))}catch(g){p(g)}}function u(f){try{m(a.throw(f))}catch(g){p(g)}}function m(f){f.done?n(f.value):i(f.value).then(l,u)}m((a=a.apply(t,e||[])).next())})},a_=t=>t==="post"||t==="put"||t==="patch"||t==="delete";function wq(t){let e=[],r=(a,i)=>`${encodeURIComponent(a)}=${encodeURIComponent(String(i))}`;return Object.keys(t).forEach(a=>{let i=t[a];i!=null&&(Array.isArray(i)?i.forEach(n=>e.push(r(a,n))):e.push(r(a,i)))}),e.length>0?`?${e.join("&")}`:""}function yq(t,e){return t.replace(/\{([^}]+)\}/g,(r,a)=>{let i=encodeURIComponent(e[a]);return delete e[a],i})}function Eq(t,e,r){let a={};return a_(t)?r.forEach(i=>{a[i]=e[i],delete e[i]}):a=Object.assign({},e),wq(a)}function Cq(t,e){let r=new Headers(e);return t!==void 0&&!r.has("Content-Type")&&r.append("Content-Type","application/json"),r.has("Accept")||r.append("Accept","application/json"),r}function Sq(t,e){let r=a_(t)?JSON.stringify(e):void 0;return t==="delete"&&r==="{}"?void 0:r}function Fq(t,e){let r=new Headers(t==null?void 0:t.headers),a=new Headers(e==null?void 0:e.headers);for(let i of a.keys()){let n=a.get(i);n!=null&&r.set(i,n)}return Object.assign(Object.assign(Object.assign({},t),e),{headers:r})}function xq(t){var e;let r=Object.assign(Array.isArray(t.payload)?[]:{},t.payload),a=yq(t.path,r),i=Eq(t.method,r,t.queryParams),n=Sq(t.method,r),p=Cq(n,(e=t.init)===null||e===void 0?void 0:e.headers),l=t.baseUrl+a+i,u=Object.assign(Object.assign({},t.init),{method:t.method.toUpperCase(),headers:p,body:n});return{url:l,init:u}}function Aq(t){return Es(this,void 0,void 0,function*(){let e=t.headers.get("content-type");if(t.status===204)return;if(e&&e.indexOf("application/json")!==-1)return yield t.json();let r=yield t.text();try{return JSON.parse(r)}catch{return r}})}function Tq(t,e){return Es(this,void 0,void 0,function*(){let r=yield fetch(t,e),a=yield Aq(r),i={headers:r.headers,url:r.url,ok:r.ok,status:r.status,statusText:r.statusText,data:a};if(i.ok)return i;throw new Ia(i)})}function Rq(t,e){let r=(a,i,n)=>Es(this,void 0,void 0,function*(){if(t==null||a===t.length)return e(i,n);let p=t[a];return yield p(i,n,(l,u)=>r(a+1,l,u))});return(a,i)=>r(0,a,i)}function Oq(t){return Es(this,void 0,void 0,function*(){let{url:e,init:r}=xq(t);return yield t.fetch(e,r)})}function Nq(t){let e=(r,a)=>Es(this,void 0,void 0,function*(){try{return yield t(r,a)}catch(i){throw i instanceof Ia?new e.Error(i):i}});return e.Error=class extends Ia{constructor(r){super(r),Object.setPrototypeOf(this,new.target.prototype)}getActualType(){return{status:this.status,data:this.data}}},e}function Bq(){let t="",e={},r=[],a=Rq(r,Tq);return{configure:i=>{t=i.baseUrl||"",e=i.init||{},r.splice(0),r.push(...i.use||[])},use:i=>r.push(i),path:i=>({method:n=>({create:p=>Nq((l,u)=>Oq({baseUrl:t||"",path:i,method:n,queryParams:Object.keys(p||{}),payload:l,init:Fq(e,u),fetch:a}))})})}}var A0={for:()=>Bq()};o();var ip=M(i_());o();var ap="ondevbook.com";var n_="/ws";var o_=A0.for(),s_;o_.configure({baseUrl:`https://${ap}`,init:{headers:{package_version:"__pkgVersion__",lang:"js",engine:ip.default.name||"unknown",lang_version:ip.default.version||"unknown",system:((s_=ip.default.os)==null?void 0:s_.family)||"unknown",publisher:"e2b"}}});var T0=o_;o();var Uv=M(d_());o();function np(t){let e="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",a=r.length;for(let i=0;i<t;i++)e+=r.charAt(Math.floor(Math.random()*a));return e}o();o();var sp=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},op=class extends Error{constructor(e){super(e),this.name="AuthenticationError"}};function u_(t){return t.status==="fulfilled"}function Ss(t){if(!t.every(e=>e.status==="fulfilled"))return t.reduce((e,r,a)=>r.status==="rejected"?e+`
|
|
99
99
|
[${a}]: ${JSON.stringify(r)}`:e,`errors:
|
|
100
100
|
`)}function Fs(){let t,e;return{promise:new Promise((a,i)=>{t=a,e=i}),reject:e,resolve:t}}function Jr(t,e=6e4){if(e===void 0||e<=0||e===Number.POSITIVE_INFINITY)return t;let r,a=new Promise((i,n)=>{r=setTimeout(()=>n(new sp(`Calling "${t.name}" timeouted after ${e}ms.`)),e)});return(...i)=>{let n=Promise.race([a,t(...i)]);return n.finally(()=>clearTimeout(r)),n}}o();var l_="codeSnippet";o();var Xr="filesystem";o();var R0=class{constructor(e,r){this.sessConn=e;this.path=r;this.listeners=new Set}async start(e){return await Jr(async()=>{this.rpcSubscriptionID||(this.handleFilesystemEvents=this.handleFilesystemEvents.bind(this),this.rpcSubscriptionID=await this.sessConn.subscribe(Xr,this.handleFilesystemEvents,"watchDir",this.path))},e==null?void 0:e.timeout)()}async stop(){this.listeners.clear(),this.rpcSubscriptionID&&await this.sessConn.unsubscribe(this.rpcSubscriptionID)}addEventListener(e){return this.listeners.add(e),()=>this.listeners.delete(e)}handleFilesystemEvents(e){this.listeners.forEach(r=>{r(e)})}},m_=R0;o();var La="process",xs=class{constructor(e,r,a){this.line=e;this.timestamp=r;this.error=a}},pp=class{constructor(){this.delimiter=`
|
|
101
|
-
`;this.messages=[];this._error=!1}get error(){return this._error}get stdout(){return this.messages.filter(e=>!e.error).map(e=>e.line).join(this.delimiter)}get stderr(){return this.messages.filter(e=>e.error).map(e=>e.line).join(this.delimiter)}addStdout(e){this.insertByTimestamp(e)}addStderr(e){this._error=!0,this.insertByTimestamp(e)}insertByTimestamp(e){let r=this.messages.length-1;for(;r>=0&&this.messages[r].timestamp>e.timestamp;)r-=1;this.messages.splice(r+1,0,e)}},dp=class{constructor(e,r,a,i,n){this.processID=e;this.session=r;this.triggerExit=a;this.finished=i;this.output=n}async kill(){try{await this.session.call(La,"kill",[this.processID])}finally{this.triggerExit(),await this.finished}}async sendStdin(e,r){await this.session.call(La,"stdin",[this.processID,e],r)}};o();o();var JM=b_(),XM=kv(),Yi;(function(t){t.RPC_VERSION="2.0"})(Yi||(Yi={}));var Vv=function(){function t(){this.idAwaiter={},this.onOpenHandlers=[],this.onAnyMessageHandlers=[],this.onNotification=[],this.onRequest=[],this.onSuccessResponse=[],this.onErrorResponse=[],this.onErrorHandlers=[],this.onCloseHandlers=[],this.config={responseTimeout:1e4},this.ws=void 0}return t.prototype.connect=function(e,r){return this.ws=new XM(e,r),this.listen()},t.prototype.onOpen=function(e){this.onOpenHandlers.push(e)},t.prototype.onAnyMessage=function(e){this.onAnyMessageHandlers.push(e)},t.prototype.onError=function(e){this.onErrorHandlers.push(e)},t.prototype.onClose=function(e){this.onCloseHandlers.push(e)},t.prototype.listenMessages=function(){var e=this,r;this.ws.onmessage&&(r=this.ws.onmessage.bind(this.ws)),this.ws.onmessage=function(a){r&&r(a);for(var i=0,n=e.onAnyMessageHandlers;i<n.length;i++){var p=n[i];p(a)}var l=JSON.parse(a.data.toString());if(e.isNotification(l))for(var u=0,m=e.onNotification;u<m.length;u++){var p=m[u];p(l)}else if(e.isRequest(l))for(var f=0,g=e.onRequest;f<g.length;f++){var p=g[f];p(l)}else if(e.isSuccessResponse(l)){for(var D=0,v=e.onSuccessResponse;D<v.length;D++){var p=v[D];p(l)}e.idAwaiter[l.id](l.result)}else if(e.isErrorResponse(l)){for(var b=0,S=e.onErrorResponse;b<S.length;b++){var p=S[b];p(l)}e.idAwaiter[l.id](l.error)}}},t.prototype.call=function(e,r){var a=this;return new Promise(function(i,n){var p=a.buildRequest(e,r),l;a.config.responseTimeout&&(l=setTimeout(function(){delete a.idAwaiter[p.id],n('Awaiting response to "'+e+'" with id: '+p.id+" timed out.")},a.config.responseTimeout)),a.idAwaiter[p.id]=function(m){if(clearInterval(l),delete a.idAwaiter[p.id],a.isRpcError(m)){n(m);return}i(m)};var u=JSON.stringify(p);a.ws.send(u)})},t.prototype.notify=function(e,r){this.ws.send(JSON.stringify(this.buildNotification(e,r)))},t.prototype.customId=function(e){this.idFn=e},t.prototype.noRpc=function(){this.buildRequest=this.buildRequestBase,this.buildNotification=this.buildNotificationBase,this.buildRpcSuccessResponse=this.buildRpcSuccessResponseBase,this.buildRpcErrorResponse=this.buildRpcErrorResponseBase},t.prototype.configure=function(e){Object.assign(this.config,e)},t.prototype.changeSocket=function(e){this.ws=e},t.prototype.listen=function(){var e=this;return new Promise(function(r,a){e.ws.onopen=function(i){for(var n=0,p=e.onOpenHandlers;n<p.length;n++){var l=p[n];l(i)}r(i)},e.listenMessages(),e.ws.onerror=function(i){for(var n=0,p=e.onErrorHandlers;n<p.length;n++){var l=p[n];l(i)}},e.ws.onclose=function(i){for(var n=0,p=e.onCloseHandlers;n<p.length;n++){var l=p[n];l(i)}a(i)}})},t.prototype.buildRequest=function(e,r){var a=this.buildRequestBase(e,r);return a.jsonrpc=Yi.RPC_VERSION,a},t.prototype.buildRequestBase=function(e,r){var a={};return a.id=this.idFn(),a.method=e,r&&(a.params=r),a},t.prototype.buildNotification=function(e,r){var a=this.buildNotificationBase(e,r);return a.jsonrpc=Yi.RPC_VERSION,a},t.prototype.buildNotificationBase=function(e,r){var a={};return a.method=e,r&&(a.params=r),a},t.prototype.buildRpcSuccessResponse=function(e,r){var a=this.buildRpcSuccessResponseBase(e,r);return a.jsonrpc=Yi.RPC_VERSION,a},t.prototype.buildRpcSuccessResponseBase=function(e,r){var a={};return a.id=e,a.result=r,a},t.prototype.buildRpcErrorResponse=function(e,r){var a=this.buildRpcErrorResponseBase(e,r);return a.jsonrpc=Yi.RPC_VERSION,a},t.prototype.buildRpcErrorResponseBase=function(e,r){var a={};return a.id=e,a.error=r,a},t.prototype.idFn=function(){return JM()},t.prototype.isNotification=function(e){return!e.id},t.prototype.isRequest=function(e){return e.method},t.prototype.isSuccessResponse=function(e){return e.hasOwnProperty("result")},t.prototype.isErrorResponse=function(e){return e.hasOwnProperty("error")},t.prototype.isRpcError=function(e){var r;return typeof((r=e)===null||r===void 0?void 0:r.code)<"u"},t}();o();function eU(t){return new Promise(e=>setTimeout(e,t))}var f2=eU;var qv=T0.path("/sessions").method("post").create({api_key:!0}),Mv=T0.path("/sessions/{sessionID}/refresh").method("post").create({api_key:!0}),Dp=class{constructor(e){this.opts=e;this.isOpen=!1;this.rpc=new Vv;this.subscribers=[];var r,a;if(!e.apiKey)throw new op("API key is required, please visit https://e2b.dev/docs to get your API key");this.logger=e.logger??{warn:console.warn,error:console.error},(a=(r=this.logger).info)==null||a.call(r,`Session for code snippet "${e.id}" initialized`)}getHostname(e){if(this.opts.__debug_hostname)return e&&this.opts.__debug_devEnv==="remote"?`${e}-${this.opts.__debug_hostname}`:e?`${this.opts.__debug_hostname}:${e}`:this.opts.__debug_hostname;if(!this.session)return;let r=`${this.session.sessionID}-${this.session.clientID}.${ap}`;return e?`${e}-${r}`:r}async close(){var e,r,a,i,n,p,l,u,m,f,g;this.isOpen&&((a=(r=this.logger).debug)==null||a.call(r,`Closing session "${(e=this.session)==null?void 0:e.sessionID}"`),this.isOpen=!1,(n=(i=this.logger).debug)==null||n.call(i,"Unsubscribing..."),(await Promise.allSettled(this.subscribers.map(v=>this.unsubscribe(v.subID)))).forEach(v=>{var b,S;v.status==="rejected"&&((S=(b=this.logger).warn)==null||S.call(b,`Failed to unsubscribe: "${v.reason}"`))}),(l=(p=this.rpc.ws)==null?void 0:p.terminate)==null||l.call(p),(m=(u=this.rpc.ws)==null?void 0:u.close)==null||m.call(u),(g=(f=this.logger).info)==null||g.call(f,"Disconnected from the session"))}async open(e){return await Jr(async()=>{var f,g,D,v,b,S,x,R,I,L;if(this.isOpen||this.session)throw new Error("Session connect was already called");if(this.isOpen=!0,(g=(f=this.logger).debug)==null||g.call(f,"Opening session..."),!this.opts.__debug_hostname)try{let C=await qv({api_key:this.opts.apiKey,codeSnippetID:this.opts.id,editEnabled:!1});this.session=C.data,(v=(D=this.logger).debug)==null||v.call(D,`Acquired session "${this.session.sessionID}"`),this.refresh(this.session.sessionID)}catch(C){if(C instanceof qv.Error){let A=C.getActualType();if(A.status===400)throw new Error(`Error creating session - (${A.status}) bad request: ${A.data.message}`);if(A.status===401)throw new Error(`Error creating session - (${A.status}) unauthenticated: ${A.data.message}`);if(A.status===500)throw new Error(`Error creating session - (${A.status}) server error: ${A.data.message}`)}throw C}let a=this.getHostname(this.opts.__debug_port||49982);if(!a)throw new Error("Cannot get session's hostname");let n=`${this.opts.__debug_devEnv==="local"?"ws":"wss"}://${a}${n_}`;this.rpc.onError(C=>{var A,F,B;(B=(F=this.logger).debug)==null||B.call(F,`Error in WS session "${(A=this.session)==null?void 0:A.sessionID}": ${C.message??C.code??C.toString()}. Trying to reconnect...`)});let p=!1,l,u,m=new Promise((C,A)=>{l=()=>{p||(p=!0,C())},u=()=>{p||(p=!0,A())}});this.rpc.onOpen(()=>{var C,A,F;(F=(A=this.logger).debug)==null||F.call(A,`Connected to session "${(C=this.session)==null?void 0:C.sessionID}"`),l==null||l()}),this.rpc.onClose(async()=>{var C,A,F,B,E,k,$,j,de,re,me,Re;if((F=(A=this.logger).debug)==null||F.call(A,`Closing WS connection to session "${(C=this.session)==null?void 0:C.sessionID}"`),this.isOpen){await f2(600),(k=(E=this.logger).debug)==null||k.call(E,`Reconnecting to session "${(B=this.session)==null?void 0:B.sessionID}"`);try{this.subscribers=[],await this.rpc.connect(n),(de=(j=this.logger).debug)==null||de.call(j,`Reconnected to session "${($=this.session)==null?void 0:$.sessionID}"`)}catch(ht){(Re=(me=this.logger).debug)==null||Re.call(me,`Failed reconnecting to session "${(re=this.session)==null?void 0:re.sessionID}": ${ht.message??ht.code??ht.toString()}`)}}else u==null||u()}),this.rpc.onNotification.push(this.handleNotification.bind(this));try{(x=(S=this.logger).debug)==null||x.call(S,`Connection to session "${(b=this.session)==null?void 0:b.sessionID}"`),await this.rpc.connect(n)}catch(C){(L=(I=this.logger).debug)==null||L.call(I,`Error connecting to session "${(R=this.session)==null?void 0:R.sessionID}": ${C.message??C.code??C.toString()}`)}return await m,this},e==null?void 0:e.timeout)()}async call(e,r,a,i){var p,l;return(l=(p=this.logger).debug)==null||l.call(p,`Calling "${e}_${r}" with params:`,a),await Jr(async(u,m)=>await this.rpc.call(u,m),i==null?void 0:i.timeout)(`${e}_${r}`,a)}async handleSubscriptions(...e){let r=await Promise.allSettled(e);if(r.every(a=>a.status==="fulfilled"))return r.map(a=>a.status==="fulfilled"?a.value:void 0);throw await Promise.all(r.filter(u_).map(a=>a.value?this.unsubscribe(a.value):void 0)),new Error(Ss(r))}async unsubscribe(e){var a,i;let r=this.subscribers.find(n=>n.subID===e);r&&(await this.call(r.service,"unsubscribe",[r.subID]),this.subscribers=this.subscribers.filter(n=>n!==r),(i=(a=this.logger).debug)==null||i.call(a,`Unsubscribed '${e}' from '${r.service}'`))}async subscribe(e,r,a,...i){var p,l;let n=await this.call(e,"subscribe",[a,...i]);if(typeof n!="string")throw new Error(`Cannot subscribe to ${e}_${a}${i.length>0?" with params ["+i.join(", ")+"]":""}. Expected response should have been a subscription ID, instead we got ${JSON.stringify(n)}`);return this.subscribers.push({handler:r,service:e,subID:n}),(l=(p=this.logger).debug)==null||l.call(p,`Subscribed to "${e}_${a}"${i.length>0?" with params ["+i.join(", ")+"] and":""} with id "${n}"`),n}handleNotification(e){var r,a;(a=(r=this.logger).debug)==null||a.call(r,"Handling notification:",e),this.subscribers.filter(i=>{var n;return i.subID===((n=e.params)==null?void 0:n.subscription)}).forEach(i=>{var n;return i.handler((n=e.params)==null?void 0:n.result)})}async refresh(e){var r,a,i,n,p,l,u,m,f,g,D,v,b;(a=(r=this.logger).debug)==null||a.call(r,`Started refreshing session "${e}"`);try{for(;;){if(!this.isOpen){(p=(n=this.logger).debug)==null||p.call(n,`Cannot refresh session ${(i=this.session)==null?void 0:i.sessionID} - it was closed`);return}await f2(5e3);try{(u=(l=this.logger).debug)==null||u.call(l,`Refreshed session "${e}"`),await Mv({api_key:this.opts.apiKey,sessionID:e})}catch(S){if(S instanceof Mv.Error){let x=S.getActualType();if(x.status===404){(f=(m=this.logger).warn)==null||f.call(m,`Error refreshing session - (${x.status}): ${x.data.message}`);return}(D=(g=this.logger).warn)==null||D.call(g,`Refreshing session "${e}" failed - (${x.status})`)}}}}finally{(b=(v=this.logger).debug)==null||b.call(v,`Stopped refreshing session "${e}"`),await this.close()}}};o();var Ma="terminal",gp=class{constructor(){this._data=""}get data(){return this._data}addData(e){this._data+=e}},_p=class{constructor(e,r,a,i,n){this.terminalID=e;this.session=r;this.triggerExit=a;this.finished=i;this.output=n}get data(){return this.output.data}async kill(){try{await this.session.call(Ma,"destroy",[this.terminalID])}finally{this.triggerExit(),await this.finished}}async sendData(e){await this.session.call(Ma,"data",[this.terminalID,e])}async resize({cols:e,rows:r}){await this.session.call(Ma,"resize",[this.terminalID,e,r])}};var Ua=class extends Dp{constructor(r){super(r);this.onScanPorts=r.onScanPorts,this.filesystem={list:async(a,i)=>await this.call(Xr,"list",[a],i),read:async(a,i)=>await this.call(Xr,"read",[a],i),remove:async(a,i)=>{await this.call(Xr,"remove",[a],i)},write:async(a,i,n)=>{await this.call(Xr,"write",[a,i],n)},makeDir:async(a,i)=>{await this.call(Xr,"makeDir",[a],i)},watchDir:a=>{var n,p;(p=(n=this.logger).debug)==null||p.call(n,`Watching directory "${a}"`);let i=(0,Uv.default)(a);return new m_(this,i)}},this.terminal={start:async({onData:a,size:i,onExit:n,envVars:p,cmd:l,rootdir:u="",terminalID:m=np(12),timeout:f=void 0})=>await Jr(async({onData:D,size:v,onExit:b,envVars:S,cmd:x,rootdir:R="",terminalID:I=np(12)})=>{var j,de;(de=(j=this.logger).debug)==null||de.call(j,`Starting terminal "${I}"`);let{promise:L,resolve:C}=Fs(),A=new gp;function F(re){A.addData(re),D==null||D(re)}let[B,E]=await this.handleSubscriptions(this.subscribe(Ma,F,"onData",I),this.subscribe(Ma,C,"onExit",I)),{promise:k,resolve:$}=Fs();L.then(async()=>{var Re,ht,$a,ra;let re=await Promise.allSettled([this.unsubscribe(E),this.unsubscribe(B)]);(ht=(Re=this.logger).debug)==null||ht.call(Re,`Terminal "${I}" exited`);let me=Ss(re);me&&((ra=($a=this.logger).error)==null||ra.call($a,me)),b==null||b(),$(A)});try{await this.call(Ma,"start",[I,v.cols,v.rows,...x!==void 0?[S,x,R]:[]])}catch(re){throw C(),await k,re}return new _p(I,this,C,k,A)},f)({onData:a,size:i,onExit:n,envVars:p,cmd:l,rootdir:u,terminalID:m})},this.process={start:async a=>{let i=async({cmd:p,onStdout:l,onStderr:u,onExit:m,envVars:f={},rootdir:g="",processID:D=np(12)})=>{var B,E;if(!p)throw new Error("cmd is required");(E=(B=this.logger).debug)==null||E.call(B,`Starting process "${D}"`);let{promise:v,resolve:b}=Fs(),S=new pp;function x(k){let $=new xs(k.line,k.timestamp,!1);S.addStdout($),l==null||l($)}function R(k){let $=new xs(k.line,k.timestamp,!0);S.addStderr($),u==null||u($)}let[I,L,C]=await this.handleSubscriptions(this.subscribe(La,b,"onExit",D),this.subscribe(La,x,"onStdout",D),this.subscribe(La,R,"onStderr",D)),{promise:A,resolve:F}=Fs();v.then(async()=>{var j,de,re,me;let k=await Promise.allSettled([this.unsubscribe(I),L?this.unsubscribe(L):void 0,C?this.unsubscribe(C):void 0]);(de=(j=this.logger).debug)==null||de.call(j,`Process "${D}" exited`);let $=Ss(k);$&&((me=(re=this.logger).error)==null||me.call(re,$)),m==null||m(),F(S)});try{await this.call(La,"start",[D,p,f,g])}catch(k){throw b(),await A,k}return new dp(D,this,b,A,S)},n=a.timeout;return await Jr(i,n)(a)}}}static async create(r){return new Ua(r).open({timeout:r==null?void 0:r.timeout})}async open(r){await super.open(r);let a=this.onScanPorts?i=>{var n;return(n=this.onScanPorts)==null?void 0:n.call(this,i.map(p=>({ip:p.Ip,port:p.Port,state:p.State})))}:void 0;return await this.handleSubscriptions(a?this.subscribe(l_,a,"scanOpenedPorts"):void 0),this}};o();var $v=new td("[id]",`Use environment specified by ${He("[id]")}`),ooe=new td("[ids...]",`Use environments specified by ${He("[ids...]")}`);o();o();function Hv(){let t,e,r=new Promise((a,i)=>{t=a,e=i});return{resolve:t,reject:e,promise:r}}function jv(){return{cols:process.stdout.columns,rows:process.stdout.rows}}async function Wv(t,e,r){let{promise:a,resolve:i}=Hv();console.log(e);let n=await t.start({onData:u=>process.stdout.write(u),size:jv(),onExit:i,envVars:{TERM:"xterm-256color"}});process.stdin.setEncoding("utf8"),process.stdin.setRawMode(!0),process.stdout.setEncoding("utf8");let p=process.stdout.on("resize",()=>n.resize(jv())),l=process.stdin.on("data",u=>n.sendData(u.toString("utf8")));return a.then(()=>{console.log(r),p.destroy(),l.destroy()}),{exited:a}}var Gv=new ot("shell").description("Connect terminal to environment").addArgument($v).addOption(mg).addOption(Ko).alias("cn").option("-L, --local-debug","Connect to existing local environment instance for debugging").action(async(t,e)=>{try{let r=gf(),a=ho(e.path);if(e.localDebug){await zv({apiKey:r,local:!0,config:{id:"local-debug"}});return}let i;if(t)i={id:t};else throw e.select?new Error("Not implemented"):new Error("Not implemented");if(!i){console.log(`No environments found in ${Qn(a)}`);return}await zv({apiKey:r,config:i}),process.exit(0)}catch(r){console.error(Mr(r.message)),process.exit(1)}});async function zv({apiKey:t,config:e,local:r}){let a=new Ua({apiKey:t,id:e.id,...r?{__debug_devEnv:"local",__debug_hostname:"localhost",__debug_port:49982}:{}});if(await a.open({}),a.terminal){let{exited:i}=await Wv(a.terminal,`Terminal connected to environment ${Kn(e)}
|
|
101
|
+
`;this.messages=[];this._error=!1}get error(){return this._error}get stdout(){return this.messages.filter(e=>!e.error).map(e=>e.line).join(this.delimiter)}get stderr(){return this.messages.filter(e=>e.error).map(e=>e.line).join(this.delimiter)}addStdout(e){this.insertByTimestamp(e)}addStderr(e){this._error=!0,this.insertByTimestamp(e)}insertByTimestamp(e){let r=this.messages.length-1;for(;r>=0&&this.messages[r].timestamp>e.timestamp;)r-=1;this.messages.splice(r+1,0,e)}},dp=class{constructor(e,r,a,i,n){this.processID=e;this.session=r;this.triggerExit=a;this.finished=i;this.output=n}async kill(){try{await this.session.call(La,"kill",[this.processID])}finally{this.triggerExit(),await this.finished}}async sendStdin(e,r){await this.session.call(La,"stdin",[this.processID,e],r)}};o();o();var JM=b_(),XM=kv(),Yi;(function(t){t.RPC_VERSION="2.0"})(Yi||(Yi={}));var Vv=function(){function t(){this.idAwaiter={},this.onOpenHandlers=[],this.onAnyMessageHandlers=[],this.onNotification=[],this.onRequest=[],this.onSuccessResponse=[],this.onErrorResponse=[],this.onErrorHandlers=[],this.onCloseHandlers=[],this.config={responseTimeout:1e4},this.ws=void 0}return t.prototype.connect=function(e,r){return this.ws=new XM(e,r),this.listen()},t.prototype.onOpen=function(e){this.onOpenHandlers.push(e)},t.prototype.onAnyMessage=function(e){this.onAnyMessageHandlers.push(e)},t.prototype.onError=function(e){this.onErrorHandlers.push(e)},t.prototype.onClose=function(e){this.onCloseHandlers.push(e)},t.prototype.listenMessages=function(){var e=this,r;this.ws.onmessage&&(r=this.ws.onmessage.bind(this.ws)),this.ws.onmessage=function(a){r&&r(a);for(var i=0,n=e.onAnyMessageHandlers;i<n.length;i++){var p=n[i];p(a)}var l=JSON.parse(a.data.toString());if(e.isNotification(l))for(var u=0,m=e.onNotification;u<m.length;u++){var p=m[u];p(l)}else if(e.isRequest(l))for(var f=0,g=e.onRequest;f<g.length;f++){var p=g[f];p(l)}else if(e.isSuccessResponse(l)){for(var D=0,v=e.onSuccessResponse;D<v.length;D++){var p=v[D];p(l)}e.idAwaiter[l.id](l.result)}else if(e.isErrorResponse(l)){for(var b=0,S=e.onErrorResponse;b<S.length;b++){var p=S[b];p(l)}e.idAwaiter[l.id](l.error)}}},t.prototype.call=function(e,r){var a=this;return new Promise(function(i,n){var p=a.buildRequest(e,r),l;a.config.responseTimeout&&(l=setTimeout(function(){delete a.idAwaiter[p.id],n('Awaiting response to "'+e+'" with id: '+p.id+" timed out.")},a.config.responseTimeout)),a.idAwaiter[p.id]=function(m){if(clearInterval(l),delete a.idAwaiter[p.id],a.isRpcError(m)){n(m);return}i(m)};var u=JSON.stringify(p);a.ws.send(u)})},t.prototype.notify=function(e,r){this.ws.send(JSON.stringify(this.buildNotification(e,r)))},t.prototype.customId=function(e){this.idFn=e},t.prototype.noRpc=function(){this.buildRequest=this.buildRequestBase,this.buildNotification=this.buildNotificationBase,this.buildRpcSuccessResponse=this.buildRpcSuccessResponseBase,this.buildRpcErrorResponse=this.buildRpcErrorResponseBase},t.prototype.configure=function(e){Object.assign(this.config,e)},t.prototype.changeSocket=function(e){this.ws=e},t.prototype.listen=function(){var e=this;return new Promise(function(r,a){e.ws.onopen=function(i){for(var n=0,p=e.onOpenHandlers;n<p.length;n++){var l=p[n];l(i)}r(i)},e.listenMessages(),e.ws.onerror=function(i){for(var n=0,p=e.onErrorHandlers;n<p.length;n++){var l=p[n];l(i)}},e.ws.onclose=function(i){for(var n=0,p=e.onCloseHandlers;n<p.length;n++){var l=p[n];l(i)}a(i)}})},t.prototype.buildRequest=function(e,r){var a=this.buildRequestBase(e,r);return a.jsonrpc=Yi.RPC_VERSION,a},t.prototype.buildRequestBase=function(e,r){var a={};return a.id=this.idFn(),a.method=e,r&&(a.params=r),a},t.prototype.buildNotification=function(e,r){var a=this.buildNotificationBase(e,r);return a.jsonrpc=Yi.RPC_VERSION,a},t.prototype.buildNotificationBase=function(e,r){var a={};return a.method=e,r&&(a.params=r),a},t.prototype.buildRpcSuccessResponse=function(e,r){var a=this.buildRpcSuccessResponseBase(e,r);return a.jsonrpc=Yi.RPC_VERSION,a},t.prototype.buildRpcSuccessResponseBase=function(e,r){var a={};return a.id=e,a.result=r,a},t.prototype.buildRpcErrorResponse=function(e,r){var a=this.buildRpcErrorResponseBase(e,r);return a.jsonrpc=Yi.RPC_VERSION,a},t.prototype.buildRpcErrorResponseBase=function(e,r){var a={};return a.id=e,a.error=r,a},t.prototype.idFn=function(){return JM()},t.prototype.isNotification=function(e){return!e.id},t.prototype.isRequest=function(e){return e.method},t.prototype.isSuccessResponse=function(e){return e.hasOwnProperty("result")},t.prototype.isErrorResponse=function(e){return e.hasOwnProperty("error")},t.prototype.isRpcError=function(e){var r;return typeof((r=e)===null||r===void 0?void 0:r.code)<"u"},t}();o();function eU(t){return new Promise(e=>setTimeout(e,t))}var f2=eU;var qv=T0.path("/sessions").method("post").create({api_key:!0}),Mv=T0.path("/sessions/{sessionID}/refresh").method("post").create({api_key:!0}),Dp=class{constructor(e){this.opts=e;this.isOpen=!1;this.rpc=new Vv;this.subscribers=[];var r,a;if(!e.apiKey)throw new op("API key is required, please visit https://e2b.dev/docs to get your API key");this.logger=e.logger??{warn:console.warn,error:console.error},(a=(r=this.logger).info)==null||a.call(r,`Session for code snippet "${e.id}" initialized`)}getHostname(e){if(this.opts.__debug_hostname)return e&&this.opts.__debug_devEnv==="remote"?`${e}-${this.opts.__debug_hostname}`:e?`${this.opts.__debug_hostname}:${e}`:this.opts.__debug_hostname;if(!this.session)return;let r=`${this.session.sessionID}-${this.session.clientID}.${ap}`;return e?`${e}-${r}`:r}async close(){var e,r,a,i,n,p,l,u,m,f,g;this.isOpen&&((a=(r=this.logger).debug)==null||a.call(r,`Closing session "${(e=this.session)==null?void 0:e.sessionID}"`),this.isOpen=!1,(n=(i=this.logger).debug)==null||n.call(i,"Unsubscribing..."),(await Promise.allSettled(this.subscribers.map(v=>this.unsubscribe(v.subID)))).forEach(v=>{var b,S;v.status==="rejected"&&((S=(b=this.logger).warn)==null||S.call(b,`Failed to unsubscribe: "${v.reason}"`))}),(l=(p=this.rpc.ws)==null?void 0:p.terminate)==null||l.call(p),(m=(u=this.rpc.ws)==null?void 0:u.close)==null||m.call(u),(g=(f=this.logger).info)==null||g.call(f,"Disconnected from the session"))}async open(e){return await Jr(async()=>{var f,g,D,v,b,S,x,R,I,L;if(this.isOpen||this.session)throw new Error("Session connect was already called");if(this.isOpen=!0,(g=(f=this.logger).debug)==null||g.call(f,"Opening session..."),!this.opts.__debug_hostname)try{let C=await qv({api_key:this.opts.apiKey,codeSnippetID:this.opts.id,editEnabled:!1});this.session=C.data,(v=(D=this.logger).debug)==null||v.call(D,`Acquired session "${this.session.sessionID}"`),this.refresh(this.session.sessionID)}catch(C){if(C instanceof qv.Error){let A=C.getActualType();if(A.status===400)throw new Error(`Error creating session - (${A.status}) bad request: ${A.data.message}`);if(A.status===401)throw new Error(`Error creating session - (${A.status}) unauthenticated: ${A.data.message}`);if(A.status===500)throw new Error(`Error creating session - (${A.status}) server error: ${A.data.message}`)}throw C}let a=this.getHostname(this.opts.__debug_port||49982);if(!a)throw new Error("Cannot get session's hostname");let n=`${this.opts.__debug_devEnv==="local"?"ws":"wss"}://${a}${n_}`;this.rpc.onError(C=>{var A,F,B;(B=(F=this.logger).debug)==null||B.call(F,`Error in WS session "${(A=this.session)==null?void 0:A.sessionID}": ${C.message??C.code??C.toString()}. Trying to reconnect...`)});let p=!1,l,u,m=new Promise((C,A)=>{l=()=>{p||(p=!0,C())},u=()=>{p||(p=!0,A())}});this.rpc.onOpen(()=>{var C,A,F;(F=(A=this.logger).debug)==null||F.call(A,`Connected to session "${(C=this.session)==null?void 0:C.sessionID}"`),l==null||l()}),this.rpc.onClose(async()=>{var C,A,F,B,E,k,$,j,de,re,me,Re;if((F=(A=this.logger).debug)==null||F.call(A,`Closing WS connection to session "${(C=this.session)==null?void 0:C.sessionID}"`),this.isOpen){await f2(600),(k=(E=this.logger).debug)==null||k.call(E,`Reconnecting to session "${(B=this.session)==null?void 0:B.sessionID}"`);try{this.subscribers=[],await this.rpc.connect(n),(de=(j=this.logger).debug)==null||de.call(j,`Reconnected to session "${($=this.session)==null?void 0:$.sessionID}"`)}catch(ht){(Re=(me=this.logger).debug)==null||Re.call(me,`Failed reconnecting to session "${(re=this.session)==null?void 0:re.sessionID}": ${ht.message??ht.code??ht.toString()}`)}}else u==null||u()}),this.rpc.onNotification.push(this.handleNotification.bind(this));try{(x=(S=this.logger).debug)==null||x.call(S,`Connection to session "${(b=this.session)==null?void 0:b.sessionID}"`),await this.rpc.connect(n)}catch(C){(L=(I=this.logger).debug)==null||L.call(I,`Error connecting to session "${(R=this.session)==null?void 0:R.sessionID}": ${C.message??C.code??C.toString()}`)}return await m,this},e==null?void 0:e.timeout)()}async call(e,r,a,i){var p,l;return(l=(p=this.logger).debug)==null||l.call(p,`Calling "${e}_${r}" with params:`,a),await Jr(async(u,m)=>await this.rpc.call(u,m),i==null?void 0:i.timeout)(`${e}_${r}`,a)}async handleSubscriptions(...e){let r=await Promise.allSettled(e);if(r.every(a=>a.status==="fulfilled"))return r.map(a=>a.status==="fulfilled"?a.value:void 0);throw await Promise.all(r.filter(u_).map(a=>a.value?this.unsubscribe(a.value):void 0)),new Error(Ss(r))}async unsubscribe(e){var a,i;let r=this.subscribers.find(n=>n.subID===e);r&&(await this.call(r.service,"unsubscribe",[r.subID]),this.subscribers=this.subscribers.filter(n=>n!==r),(i=(a=this.logger).debug)==null||i.call(a,`Unsubscribed '${e}' from '${r.service}'`))}async subscribe(e,r,a,...i){var p,l;let n=await this.call(e,"subscribe",[a,...i]);if(typeof n!="string")throw new Error(`Cannot subscribe to ${e}_${a}${i.length>0?" with params ["+i.join(", ")+"]":""}. Expected response should have been a subscription ID, instead we got ${JSON.stringify(n)}`);return this.subscribers.push({handler:r,service:e,subID:n}),(l=(p=this.logger).debug)==null||l.call(p,`Subscribed to "${e}_${a}"${i.length>0?" with params ["+i.join(", ")+"] and":""} with id "${n}"`),n}handleNotification(e){var r,a;(a=(r=this.logger).debug)==null||a.call(r,"Handling notification:",e),this.subscribers.filter(i=>{var n;return i.subID===((n=e.params)==null?void 0:n.subscription)}).forEach(i=>{var n;return i.handler((n=e.params)==null?void 0:n.result)})}async refresh(e){var r,a,i,n,p,l,u,m,f,g,D,v,b;(a=(r=this.logger).debug)==null||a.call(r,`Started refreshing session "${e}"`);try{for(;;){if(!this.isOpen){(p=(n=this.logger).debug)==null||p.call(n,`Cannot refresh session ${(i=this.session)==null?void 0:i.sessionID} - it was closed`);return}await f2(5e3);try{(u=(l=this.logger).debug)==null||u.call(l,`Refreshed session "${e}"`),await Mv({api_key:this.opts.apiKey,sessionID:e})}catch(S){if(S instanceof Mv.Error){let x=S.getActualType();if(x.status===404){(f=(m=this.logger).warn)==null||f.call(m,`Error refreshing session - (${x.status}): ${x.data.message}`);return}(D=(g=this.logger).warn)==null||D.call(g,`Refreshing session "${e}" failed - (${x.status})`)}}}}finally{(b=(v=this.logger).debug)==null||b.call(v,`Stopped refreshing session "${e}"`),await this.close()}}};o();var Ma="terminal",gp=class{constructor(){this._data=""}get data(){return this._data}addData(e){this._data+=e}},_p=class{constructor(e,r,a,i,n){this.terminalID=e;this.session=r;this.triggerExit=a;this.finished=i;this.output=n}get data(){return this.output.data}async kill(){try{await this.session.call(Ma,"destroy",[this.terminalID])}finally{this.triggerExit(),await this.finished}}async sendData(e){await this.session.call(Ma,"data",[this.terminalID,e])}async resize({cols:e,rows:r}){await this.session.call(Ma,"resize",[this.terminalID,e,r])}};var Ua=class extends Dp{constructor(r){super(r);this.onScanPorts=r.onScanPorts,this.filesystem={list:async(a,i)=>await this.call(Xr,"list",[a],i),read:async(a,i)=>await this.call(Xr,"read",[a],i),remove:async(a,i)=>{await this.call(Xr,"remove",[a],i)},write:async(a,i,n)=>{await this.call(Xr,"write",[a,i],n)},makeDir:async(a,i)=>{await this.call(Xr,"makeDir",[a],i)},watchDir:a=>{var n,p;(p=(n=this.logger).debug)==null||p.call(n,`Watching directory "${a}"`);let i=(0,Uv.default)(a);return new m_(this,i)}},this.terminal={start:async({onData:a,size:i,onExit:n,envVars:p,cmd:l,rootdir:u="",terminalID:m=np(12),timeout:f=void 0})=>await Jr(async({onData:D,size:v,onExit:b,envVars:S,cmd:x,rootdir:R="",terminalID:I=np(12)})=>{var j,de;(de=(j=this.logger).debug)==null||de.call(j,`Starting terminal "${I}"`);let{promise:L,resolve:C}=Fs(),A=new gp;function F(re){A.addData(re),D==null||D(re)}let[B,E]=await this.handleSubscriptions(this.subscribe(Ma,F,"onData",I),this.subscribe(Ma,C,"onExit",I)),{promise:k,resolve:$}=Fs();L.then(async()=>{var Re,ht,$a,ra;let re=await Promise.allSettled([this.unsubscribe(E),this.unsubscribe(B)]);(ht=(Re=this.logger).debug)==null||ht.call(Re,`Terminal "${I}" exited`);let me=Ss(re);me&&((ra=($a=this.logger).error)==null||ra.call($a,me)),b==null||b(),$(A)});try{await this.call(Ma,"start",[I,v.cols,v.rows,...x!==void 0?[S,x,R]:[]])}catch(re){throw C(),await k,re}return new _p(I,this,C,k,A)},f)({onData:a,size:i,onExit:n,envVars:p,cmd:l,rootdir:u,terminalID:m})},this.process={start:async a=>{let i=async({cmd:p,onStdout:l,onStderr:u,onExit:m,envVars:f={},rootdir:g="",processID:D=np(12)})=>{var B,E;if(!p)throw new Error("cmd is required");(E=(B=this.logger).debug)==null||E.call(B,`Starting process "${D}"`);let{promise:v,resolve:b}=Fs(),S=new pp;function x(k){let $=new xs(k.line,k.timestamp,!1);S.addStdout($),l==null||l($)}function R(k){let $=new xs(k.line,k.timestamp,!0);S.addStderr($),u==null||u($)}let[I,L,C]=await this.handleSubscriptions(this.subscribe(La,b,"onExit",D),this.subscribe(La,x,"onStdout",D),this.subscribe(La,R,"onStderr",D)),{promise:A,resolve:F}=Fs();v.then(async()=>{var j,de,re,me;let k=await Promise.allSettled([this.unsubscribe(I),L?this.unsubscribe(L):void 0,C?this.unsubscribe(C):void 0]);(de=(j=this.logger).debug)==null||de.call(j,`Process "${D}" exited`);let $=Ss(k);$&&((me=(re=this.logger).error)==null||me.call(re,$)),m==null||m(),F(S)});try{await this.call(La,"start",[D,p,f,g])}catch(k){throw b(),await A,k}return new dp(D,this,b,A,S)},n=a.timeout;return await Jr(i,n)(a)}}}static async create(r){return new Ua(r).open({timeout:r==null?void 0:r.timeout})}async open(r){await super.open(r);let a=this.onScanPorts?i=>{var n;return(n=this.onScanPorts)==null?void 0:n.call(this,i.map(p=>({ip:p.Ip,port:p.Port,state:p.State})))}:void 0;return await this.handleSubscriptions(a?this.subscribe(l_,a,"scanOpenedPorts"):void 0),this}};o();var $v=new td("[id]",`Use environment specified by ${He("[id]")}`),ooe=new td("[ids...]",`Use environments specified by ${He("[ids...]")}`);o();o();function Hv(){let t,e,r=new Promise((a,i)=>{t=a,e=i});return{resolve:t,reject:e,promise:r}}function jv(){return{cols:process.stdout.columns,rows:process.stdout.rows}}async function Wv(t,e,r){let{promise:a,resolve:i}=Hv();console.log(e);let n=await t.start({onData:u=>process.stdout.write(u),size:jv(),onExit:i,envVars:{TERM:"xterm-256color"}});process.stdin.setEncoding("utf8"),process.stdin.setRawMode(!0),process.stdout.setEncoding("utf8");let p=process.stdout.on("resize",()=>n.resize(jv())),l=process.stdin.on("data",u=>n.sendData(u.toString("utf8")));return a.then(()=>{console.log(r),p.destroy(),l.destroy()}),{exited:a}}var Gv=new ot("shell").description("Connect terminal to environment").addArgument($v).addOption(mg).addOption(Ko).alias("cn").option("-L, --local-debug","Connect to existing local environment instance for debugging").action(async(t,e)=>{try{let r=gf(),a=ho(e.path);if(e.localDebug){await zv({apiKey:r,local:!0,config:{id:"local-debug"}});return}let i;if(t)i={id:t};else throw e.select?new Error("Selecting is not yet implemented"):new Error('No environment ID provided, use "e2b env shell --id <envID>"');if(!i){console.log(`No environments found in ${Qn(a)}`);return}await zv({apiKey:r,config:i}),process.exit(0)}catch(r){console.error(Mr(r.message)),process.exit(1)}});async function zv({apiKey:t,config:e,local:r}){let a=new Ua({apiKey:t,id:e.id,...r?{__debug_devEnv:"local",__debug_hostname:"localhost",__debug_port:49982}:{}});if(await a.open({}),a.terminal){let{exited:i}=await Wv(a.terminal,`Terminal connected to environment ${Kn(e)}
|
|
102
102
|
with session URL ${He(`https://${a.getHostname()}`)}`,`Disconnecting terminal from environment ${Kn(e)}`);await i,console.log(`Closing terminal connection to environment ${Kn(e)}`)}else throw new Error("Cannot start terminal - no session")}var Yv=new ot("env").description("Manage e2b environments").addCommand(cg).addCommand(hg).addCommand(Gv).alias("environment");var Kv=new ot().description("Tool for interacting with e2b from command line").addCommand(Yv).addCommand(cf).addCommand(ff);Qv.default({pkg:ol}).notify();Kv.version(pl,void 0,"Display e2b CLI version").parse();
|
|
103
103
|
/*! Bundled license information:
|
|
104
104
|
|