@capgo/cli 7.84.9 → 7.85.0
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/README.md +3 -0
- package/dist/index.js +158 -157
- package/dist/package.json +1 -1
- package/dist/src/build/credentials-command.d.ts +1 -0
- package/dist/src/schemas/build.d.ts +3 -0
- package/dist/src/sdk.js +17 -17
- package/package.json +1 -1
package/dist/src/sdk.js
CHANGED
|
@@ -22,7 +22,7 @@ import{createRequire as j0D}from"node:module";var N0D=Object.create;var{getProto
|
|
|
22
22
|
`),U=G[Symbol.iterator](),O=U.next(),z=U.next(),q=0;for(;!O.done;){let B=O.value,W=z.value;if(Y+=B,B===p2||B===RI){VI.lastIndex=q+1;let M=VI.exec(G)?.groups;if(M?.code!==void 0){let I=Number.parseFloat(M.code);J=I===q1D?void 0:I}else M?.uri!==void 0&&(Q=M.uri.length===0?void 0:M.uri)}let L=J?B1D(J):void 0;W===`
|
|
23
23
|
`?(Q&&(Y+=LI("")),J&&L&&(Y+=NI(L))):B===`
|
|
24
24
|
`&&(J&&L&&(Y+=NI(J)),Q&&(Y+=LI(Q))),q+=B.length,O=z,z=U.next()}return Y},V1D=(D,$,X,Y,J)=>{let Q=$,F=0;for(let Z=X;Z<Y;Z++){let w=D[Z];if(Q=Q-w.length,F++,Q<=J)break}return{lineCount:Q,removals:F}},N1D=(D)=>{let{cursor:$,options:X,style:Y}=D,J=D.output??process.stdout,Q=h2(J),F=D.columnPadding??0,Z=D.rowPadding??4,w=Q-F,G=HG(J),U=JD.default.dim("..."),O=D.maxItems??Number.POSITIVE_INFINITY,z=Math.max(G-Z,0),q=Math.max(Math.min(O,z),5),B=0;$>=q-3&&(B=Math.max(Math.min($-q+3,X.length-q),0));let W=q<X.length&&B>0,L=q<X.length&&B+q<X.length,M=Math.min(B+q,X.length),I=[],K=0;W&&K++,L&&K++;let N=B+(W?1:0),V=M-(L?1:0);for(let x=N;x<V;x++){let A=TG(Y(X[x],x===$),w,{hard:!0,trim:!1}).split(`
|
|
25
|
-
`);I.push(A),K+=A.length}if(K>z){let x=0,A=0,_=K,v=$-N,S=(h,b)=>V1D(I,_,h,b,z);W?({lineCount:_,removals:x}=S(0,v),_>z&&({lineCount:_,removals:A}=S(v+1,I.length))):({lineCount:_,removals:A}=S(v+1,I.length),_>z&&({lineCount:_,removals:x}=S(0,v))),x>0&&(W=!0,I.splice(0,x)),A>0&&(L=!0,I.splice(I.length-A,A))}let R=[];W&&R.push(U);for(let x of I)for(let A of x)R.push(A);return L&&R.push(U),R},
|
|
25
|
+
`);I.push(A),K+=A.length}if(K>z){let x=0,A=0,_=K,v=$-N,S=(h,b)=>V1D(I,_,h,b,z);W?({lineCount:_,removals:x}=S(0,v),_>z&&({lineCount:_,removals:A}=S(v+1,I.length))):({lineCount:_,removals:A}=S(v+1,I.length),_>z&&({lineCount:_,removals:x}=S(0,v))),x>0&&(W=!0,I.splice(0,x)),A>0&&(L=!0,I.splice(I.length-A,A))}let R=[];W&&R.push(U);for(let x of I)for(let A of x)R.push(A);return L&&R.push(U),R},d0=(D)=>{let $=D.active??"Yes",X=D.inactive??"No";return new VG({active:$,inactive:X,signal:D.signal,input:D.input,output:D.output,initialValue:D.initialValue??!0,render(){let Y=D.withGuide??E1.withGuide,J=`${Y?`${JD.default.gray(hD)}
|
|
26
26
|
`:""}${i2(this.state)} ${D.message}
|
|
27
27
|
`,Q=this.value?$:X;switch(this.state){case"submit":{let F=Y?`${JD.default.gray(hD)} `:"";return`${J}${F}${JD.default.dim(Q)}`}case"cancel":{let F=Y?`${JD.default.gray(hD)} `:"";return`${J}${F}${JD.default.strikethrough(JD.default.dim(Q))}${Y?`
|
|
28
28
|
${JD.default.gray(hD)}`:""}`}default:{let F=Y?`${JD.default.cyan(hD)} `:"",Z=Y?JD.default.cyan(P4):"";return`${J}${F}${this.value?`${JD.default.green(EG)} ${$}`:`${JD.default.dim(n2)} ${JD.default.dim($)}`}${D.vertical?Y?`
|
|
@@ -127,12 +127,12 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
127
127
|
`)}),$.__defineSetter__("stack",function(X){return[X].concat($.stack).join(`
|
|
128
128
|
|
|
129
129
|
`)}),$}});var Hx=T((RbD,Kx)=>{var c6=i("constants"),HQD=process.cwd,qY=null,VQD=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){if(!qY)qY=HQD.call(process);return qY};try{process.cwd()}catch(D){}if(typeof process.chdir==="function"){if(zY=process.chdir,process.chdir=function(D){qY=null,zY.call(process,D)},Object.setPrototypeOf)Object.setPrototypeOf(process.chdir,zY)}var zY;Kx.exports=NQD;function NQD(D){if(c6.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./))$(D);if(!D.lutimes)X(D);if(D.chown=Q(D.chown),D.fchown=Q(D.fchown),D.lchown=Q(D.lchown),D.chmod=Y(D.chmod),D.fchmod=Y(D.fchmod),D.lchmod=Y(D.lchmod),D.chownSync=F(D.chownSync),D.fchownSync=F(D.fchownSync),D.lchownSync=F(D.lchownSync),D.chmodSync=J(D.chmodSync),D.fchmodSync=J(D.fchmodSync),D.lchmodSync=J(D.lchmodSync),D.stat=Z(D.stat),D.fstat=Z(D.fstat),D.lstat=Z(D.lstat),D.statSync=w(D.statSync),D.fstatSync=w(D.fstatSync),D.lstatSync=w(D.lstatSync),D.chmod&&!D.lchmod)D.lchmod=function(U,O,z){if(z)process.nextTick(z)},D.lchmodSync=function(){};if(D.chown&&!D.lchown)D.lchown=function(U,O,z,q){if(q)process.nextTick(q)},D.lchownSync=function(){};if(VQD==="win32")D.rename=typeof D.rename!=="function"?D.rename:function(U){function O(z,q,B){var W=Date.now(),L=0;U(z,q,function M(I){if(I&&(I.code==="EACCES"||I.code==="EPERM"||I.code==="EBUSY")&&Date.now()-W<60000){if(setTimeout(function(){D.stat(q,function(K,N){if(K&&K.code==="ENOENT")U(z,q,M);else B(I)})},L),L<100)L+=10;return}if(B)B(I)})}if(Object.setPrototypeOf)Object.setPrototypeOf(O,U);return O}(D.rename);D.read=typeof D.read!=="function"?D.read:function(U){function O(z,q,B,W,L,M){var I;if(M&&typeof M==="function"){var K=0;I=function(N,V,R){if(N&&N.code==="EAGAIN"&&K<10)return K++,U.call(D,z,q,B,W,L,I);M.apply(this,arguments)}}return U.call(D,z,q,B,W,L,I)}if(Object.setPrototypeOf)Object.setPrototypeOf(O,U);return O}(D.read),D.readSync=typeof D.readSync!=="function"?D.readSync:function(U){return function(O,z,q,B,W){var L=0;while(!0)try{return U.call(D,O,z,q,B,W)}catch(M){if(M.code==="EAGAIN"&&L<10){L++;continue}throw M}}}(D.readSync);function $(U){U.lchmod=function(O,z,q){U.open(O,c6.O_WRONLY|c6.O_SYMLINK,z,function(B,W){if(B){if(q)q(B);return}U.fchmod(W,z,function(L){U.close(W,function(M){if(q)q(L||M)})})})},U.lchmodSync=function(O,z){var q=U.openSync(O,c6.O_WRONLY|c6.O_SYMLINK,z),B=!0,W;try{W=U.fchmodSync(q,z),B=!1}finally{if(B)try{U.closeSync(q)}catch(L){}else U.closeSync(q)}return W}}function X(U){if(c6.hasOwnProperty("O_SYMLINK")&&U.futimes)U.lutimes=function(O,z,q,B){U.open(O,c6.O_SYMLINK,function(W,L){if(W){if(B)B(W);return}U.futimes(L,z,q,function(M){U.close(L,function(I){if(B)B(M||I)})})})},U.lutimesSync=function(O,z,q){var B=U.openSync(O,c6.O_SYMLINK),W,L=!0;try{W=U.futimesSync(B,z,q),L=!1}finally{if(L)try{U.closeSync(B)}catch(M){}else U.closeSync(B)}return W};else if(U.futimes)U.lutimes=function(O,z,q,B){if(B)process.nextTick(B)},U.lutimesSync=function(){}}function Y(U){if(!U)return U;return function(O,z,q){return U.call(D,O,z,function(B){if(G(B))B=null;if(q)q.apply(this,arguments)})}}function J(U){if(!U)return U;return function(O,z){try{return U.call(D,O,z)}catch(q){if(!G(q))throw q}}}function Q(U){if(!U)return U;return function(O,z,q,B){return U.call(D,O,z,q,function(W){if(G(W))W=null;if(B)B.apply(this,arguments)})}}function F(U){if(!U)return U;return function(O,z,q){try{return U.call(D,O,z,q)}catch(B){if(!G(B))throw B}}}function Z(U){if(!U)return U;return function(O,z,q){if(typeof z==="function")q=z,z=null;function B(W,L){if(L){if(L.uid<0)L.uid+=4294967296;if(L.gid<0)L.gid+=4294967296}if(q)q.apply(this,arguments)}return z?U.call(D,O,z,B):U.call(D,O,B)}}function w(U){if(!U)return U;return function(O,z){var q=z?U.call(D,O,z):U.call(D,O);if(q){if(q.uid<0)q.uid+=4294967296;if(q.gid<0)q.gid+=4294967296}return q}}function G(U){if(!U)return!0;if(U.code==="ENOSYS")return!0;var O=!process.getuid||process.getuid()!==0;if(O){if(U.code==="EINVAL"||U.code==="EPERM")return!0}return!1}}});var Lx=T((jbD,Nx)=>{var Vx=i("stream").Stream;Nx.exports=LQD;function LQD(D){return{ReadStream:$,WriteStream:X};function $(Y,J){if(!(this instanceof $))return new $(Y,J);Vx.call(this);var Q=this;this.path=Y,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=65536,J=J||{};var F=Object.keys(J);for(var Z=0,w=F.length;Z<w;Z++){var G=F[Z];this[G]=J[G]}if(this.encoding)this.setEncoding(this.encoding);if(this.start!==void 0){if(typeof this.start!=="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!=="number")throw TypeError("end must be a Number");if(this.start>this.end)throw Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){Q._read()});return}D.open(this.path,this.flags,this.mode,function(U,O){if(U){Q.emit("error",U),Q.readable=!1;return}Q.fd=O,Q.emit("open",O),Q._read()})}function X(Y,J){if(!(this instanceof X))return new X(Y,J);Vx.call(this),this.path=Y,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,J=J||{};var Q=Object.keys(J);for(var F=0,Z=Q.length;F<Z;F++){var w=Q[F];this[w]=J[w]}if(this.start!==void 0){if(typeof this.start!=="number")throw TypeError("start must be a Number");if(this.start<0)throw Error("start must be >= zero");this.pos=this.start}if(this.busy=!1,this._queue=[],this.fd===null)this._open=D.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush()}}});var Ix=T((EbD,Mx)=>{Mx.exports=IQD;var MQD=Object.getPrototypeOf||function(D){return D.__proto__};function IQD(D){if(D===null||typeof D!=="object")return D;if(D instanceof Object)var $={__proto__:MQD(D)};else var $=Object.create(null);return Object.getOwnPropertyNames(D).forEach(function(X){Object.defineProperty($,X,Object.getOwnPropertyDescriptor(D,X))}),$}});var S0=T((TbD,AO)=>{var M0=i("fs"),AQD=Hx(),RQD=Lx(),jQD=Ix(),BY=i("util"),o0,KY;if(typeof Symbol==="function"&&typeof Symbol.for==="function")o0=Symbol.for("graceful-fs.queue"),KY=Symbol.for("graceful-fs.previous");else o0="___graceful-fs.queue",KY="___graceful-fs.previous";function EQD(){}function Rx(D,$){Object.defineProperty(D,o0,{get:function(){return $}})}var D8=EQD;if(BY.debuglog)D8=BY.debuglog("gfs4");else if(/\bgfs4\b/i.test(process.env.NODE_DEBUG||""))D8=function(){var D=BY.format.apply(BY,arguments);D="GFS4: "+D.split(/\n/).join(`
|
|
130
|
-
GFS4: `),console.error(D)};if(!M0[o0]){if(LO=global[o0]||[],Rx(M0,LO),M0.close=function(D){function $(X,Y){return D.call(M0,X,function(J){if(!J)Ax();if(typeof Y==="function")Y.apply(this,arguments)})}return Object.defineProperty($,KY,{value:D}),$}(M0.close),M0.closeSync=function(D){function $(X){D.apply(M0,arguments),Ax()}return Object.defineProperty($,KY,{value:D}),$}(M0.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||""))process.on("exit",function(){D8(M0[o0]),i("assert").equal(M0[o0].length,0)})}var LO;if(!global[o0])Rx(global,M0[o0]);AO.exports=MO(jQD(M0));if(process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!M0.__patched)AO.exports=MO(M0),M0.__patched=!0;function MO(D){AQD(D),D.gracefulify=MO,D.createReadStream=V,D.createWriteStream=R;var $=D.readFile;D.readFile=X;function X(_,v,S){if(typeof v==="function")S=v,v=null;return h(_,v,S);function h(b,l,f,j){return $(b,l,function(P){if(P&&(P.code==="EMFILE"||P.code==="ENFILE"))v9([h,[b,l,f],P,j||Date.now(),Date.now()]);else if(typeof f==="function")f.apply(this,arguments)})}}var Y=D.writeFile;D.writeFile=J;function J(_,v,S,h){if(typeof S==="function")h=S,S=null;return b(_,v,S,h);function b(l,f,j,P,u){return Y(l,f,j,function(y){if(y&&(y.code==="EMFILE"||y.code==="ENFILE"))v9([b,[l,f,j,P],y,u||Date.now(),Date.now()]);else if(typeof P==="function")P.apply(this,arguments)})}}var Q=D.appendFile;if(Q)D.appendFile=F;function F(_,v,S,h){if(typeof S==="function")h=S,S=null;return b(_,v,S,h);function b(l,f,j,P,u){return Q(l,f,j,function(y){if(y&&(y.code==="EMFILE"||y.code==="ENFILE"))v9([b,[l,f,j,P],y,u||Date.now(),Date.now()]);else if(typeof P==="function")P.apply(this,arguments)})}}var Z=D.copyFile;if(Z)D.copyFile=w;function w(_,v,S,h){if(typeof S==="function")h=S,S=0;return b(_,v,S,h);function b(l,f,j,P,u){return Z(l,f,j,function(y){if(y&&(y.code==="EMFILE"||y.code==="ENFILE"))v9([b,[l,f,j,P],y,u||Date.now(),Date.now()]);else if(typeof P==="function")P.apply(this,arguments)})}}var G=D.readdir;D.readdir=O;var U=/^v[0-5]\./;function O(_,v,S){if(typeof v==="function")S=v,v=null;var h=U.test(process.version)?function(f,j,P,u){return G(f,b(f,j,P,u))}:function(f,j,P,u){return G(f,j,b(f,j,P,u))};return h(_,v,S);function b(l,f,j,P){return function(u,y){if(u&&(u.code==="EMFILE"||u.code==="ENFILE"))v9([h,[l,f,j],u,P||Date.now(),Date.now()]);else{if(y&&y.sort)y.sort();if(typeof j==="function")j.call(this,u,y)}}}}if(process.version.substr(0,4)==="v0.8"){var z=RQD(D);M=z.ReadStream,K=z.WriteStream}var q=D.ReadStream;if(q)M.prototype=Object.create(q.prototype),M.prototype.open=I;var B=D.WriteStream;if(B)K.prototype=Object.create(B.prototype),K.prototype.open=N;Object.defineProperty(D,"ReadStream",{get:function(){return M},set:function(_){M=_},enumerable:!0,configurable:!0}),Object.defineProperty(D,"WriteStream",{get:function(){return K},set:function(_){K=_},enumerable:!0,configurable:!0});var W=M;Object.defineProperty(D,"FileReadStream",{get:function(){return W},set:function(_){W=_},enumerable:!0,configurable:!0});var L=K;Object.defineProperty(D,"FileWriteStream",{get:function(){return L},set:function(_){L=_},enumerable:!0,configurable:!0});function M(_,v){if(this instanceof M)return q.apply(this,arguments),this;else return M.apply(Object.create(M.prototype),arguments)}function I(){var _=this;A(_.path,_.flags,_.mode,function(v,S){if(v){if(_.autoClose)_.destroy();_.emit("error",v)}else _.fd=S,_.emit("open",S),_.read()})}function K(_,v){if(this instanceof K)return B.apply(this,arguments),this;else return K.apply(Object.create(K.prototype),arguments)}function N(){var _=this;A(_.path,_.flags,_.mode,function(v,S){if(v)_.destroy(),_.emit("error",v);else _.fd=S,_.emit("open",S)})}function V(_,v){return new D.ReadStream(_,v)}function R(_,v){return new D.WriteStream(_,v)}var x=D.open;D.open=A;function A(_,v,S,h){if(typeof S==="function")h=S,S=null;return b(_,v,S,h);function b(l,f,j,P,u){return x(l,f,j,function(y,c){if(y&&(y.code==="EMFILE"||y.code==="ENFILE"))v9([b,[l,f,j,P],y,u||Date.now(),Date.now()]);else if(typeof P==="function")P.apply(this,arguments)})}}return D}function v9(D){D8("ENQUEUE",D[0].name,D[1]),M0[o0].push(D),IO()}var WY;function Ax(){var D=Date.now();for(var $=0;$<M0[o0].length;++$)if(M0[o0][$].length>2)M0[o0][$][3]=D,M0[o0][$][4]=D;IO()}function IO(){if(clearTimeout(WY),WY=void 0,M0[o0].length===0)return;var D=M0[o0].shift(),$=D[0],X=D[1],Y=D[2],J=D[3],Q=D[4];if(J===void 0)D8("RETRY",$.name,X),$.apply(null,X);else if(Date.now()-J>=60000){D8("TIMEOUT",$.name,X);var F=X.pop();if(typeof F==="function")F.call(null,Y)}else{var Z=Date.now()-Q,w=Math.max(Q-J,1),G=Math.min(w*1.2,100);if(Z>=G)D8("RETRY",$.name,X),$.apply(null,X.concat([J]));else M0[o0].push(D)}if(WY===void 0)WY=setTimeout(IO,0)}});var Ex=T((CbD,jx)=>{function e1(D,$){if(typeof $==="boolean")$={forever:$};if(this._originalTimeouts=JSON.parse(JSON.stringify(D)),this._timeouts=D,this._options=$||{},this._maxRetryTime=$&&$.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever)this._cachedTimeouts=this._timeouts.slice(0)}jx.exports=e1;e1.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};e1.prototype.stop=function(){if(this._timeout)clearTimeout(this._timeout);this._timeouts=[],this._cachedTimeouts=null};e1.prototype.retry=function(D){if(this._timeout)clearTimeout(this._timeout);if(!D)return!1;var $=new Date().getTime();if(D&&$-this._operationStart>=this._maxRetryTime)return this._errors.unshift(Error("RetryOperation timeout occurred")),!1;this._errors.push(D);var X=this._timeouts.shift();if(X===void 0)if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),X=this._timeouts.shift();else return!1;var Y=this,J=setTimeout(function(){if(Y._attempts++,Y._operationTimeoutCb){if(Y._timeout=setTimeout(function(){Y._operationTimeoutCb(Y._attempts)},Y._operationTimeout),Y._options.unref)Y._timeout.unref()}Y._fn(Y._attempts)},X);if(this._options.unref)J.unref();return!0};e1.prototype.attempt=function(D,$){if(this._fn=D,$){if($.timeout)this._operationTimeout=$.timeout;if($.cb)this._operationTimeoutCb=$.cb}var X=this;if(this._operationTimeoutCb)this._timeout=setTimeout(function(){X._operationTimeoutCb()},X._operationTimeout);this._operationStart=new Date().getTime(),this._fn(this._attempts)};e1.prototype.try=function(D){console.log("Using RetryOperation.try() is deprecated"),this.attempt(D)};e1.prototype.start=function(D){console.log("Using RetryOperation.start() is deprecated"),this.attempt(D)};e1.prototype.start=e1.prototype.try;e1.prototype.errors=function(){return this._errors};e1.prototype.attempts=function(){return this._attempts};e1.prototype.mainError=function(){if(this._errors.length===0)return null;var D={},$=null,X=0;for(var Y=0;Y<this._errors.length;Y++){var J=this._errors[Y],Q=J.message,F=(D[Q]||0)+1;if(D[Q]=F,F>=X)$=J,X=F}return $}});var Cx=T((CQD)=>{var TQD=Ex();CQD.operation=function(D){var $=CQD.timeouts(D);return new TQD($,{forever:D&&D.forever,unref:D&&D.unref,maxRetryTime:D&&D.maxRetryTime})};CQD.timeouts=function(D){if(D instanceof Array)return[].concat(D);var $={retries:10,factor:2,minTimeout:1000,maxTimeout:1/0,randomize:!1};for(var X in D)$[X]=D[X];if($.minTimeout>$.maxTimeout)throw Error("minTimeout is greater than maxTimeout");var Y=[];for(var J=0;J<$.retries;J++)Y.push(this.createTimeout(J,$));if(D&&D.forever&&!Y.length)Y.push(this.createTimeout(J,$));return Y.sort(function(Q,F){return Q-F}),Y};CQD.createTimeout=function(D,$){var X=$.randomize?Math.random()+1:1,Y=Math.round(X*$.minTimeout*Math.pow($.factor,D));return Y=Math.min(Y,$.maxTimeout),Y};CQD.wrap=function(D,$,X){if($ instanceof Array)X=$,$=null;if(!X){X=[];for(var Y in D)if(typeof D[Y]==="function")X.push(Y)}for(var J=0;J<X.length;J++){var Q=X[J],F=D[Q];D[Q]=function(w){var G=CQD.operation($),U=Array.prototype.slice.call(arguments,1),O=U.pop();U.push(function(z){if(G.retry(z))return;if(z)arguments[0]=G.mainError();O.apply(this,arguments)}),G.attempt(function(){w.apply(D,U)})}.bind(D,F),D[Q].options=$}}});var Px=T((xbD,HY)=>{HY.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];if(process.platform!=="win32")HY.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");if(process.platform==="linux")HY.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var LY=T((SbD,k9)=>{var K0=global.process,$8=function(D){return D&&typeof D==="object"&&typeof D.removeListener==="function"&&typeof D.emit==="function"&&typeof D.reallyExit==="function"&&typeof D.listeners==="function"&&typeof D.kill==="function"&&typeof D.pid==="number"&&typeof D.on==="function"};if(!$8(K0))k9.exports=function(){return function(){}};else{if(RO=i("assert"),X8=Px(),jO=/^win/i.test(K0.platform),_9=i("events"),typeof _9!=="function")_9=_9.EventEmitter;if(K0.__signal_exit_emitter__)g0=K0.__signal_exit_emitter__;else g0=K0.__signal_exit_emitter__=new _9,g0.count=0,g0.emitted={};if(!g0.infinite)g0.setMaxListeners(1/0),g0.infinite=!0;k9.exports=function(D,$){if(!$8(global.process))return function(){};if(RO.equal(typeof D,"function","a callback must be provided for exit handler"),J8===!1)VY();var X="exit";if($&&$.alwaysLast)X="afterexit";var Y=function(){if(g0.removeListener(X,D),g0.listeners("exit").length===0&&g0.listeners("afterexit").length===0)O3()};return g0.on(X,D),Y},O3=function(){if(!J8||!$8(global.process))return;J8=!1,X8.forEach(function($){try{K0.removeListener($,q3[$])}catch(X){}}),K0.emit=z3,K0.reallyExit=NY,g0.count-=1},k9.exports.unload=O3,d6=function($,X,Y){if(g0.emitted[$])return;g0.emitted[$]=!0,g0.emit($,X,Y)},q3={},X8.forEach(function(D){q3[D]=function(){if(!$8(global.process))return;var X=K0.listeners(D);if(X.length===g0.count){if(O3(),d6("exit",null,D),d6("afterexit",null,D),jO&&D==="SIGHUP")D="SIGINT";K0.kill(K0.pid,D)}}}),k9.exports.signals=function(){return X8},J8=!1,VY=function(){if(J8||!$8(global.process))return;J8=!0,g0.count+=1,X8=X8.filter(function($){try{return K0.on($,q3[$]),!0}catch(X){return!1}}),K0.emit=TO,K0.reallyExit=EO},k9.exports.load=VY,NY=K0.reallyExit,EO=function($){if(!$8(global.process))return;K0.exitCode=$||0,d6("exit",K0.exitCode,null),d6("afterexit",K0.exitCode,null),NY.call(K0,K0.exitCode)},z3=K0.emit,TO=function($,X){if($==="exit"&&$8(global.process)){if(X!==void 0)K0.exitCode=X;var Y=z3.apply(this,arguments);return d6("exit",K0.exitCode,null),d6("afterexit",K0.exitCode,null),Y}else return z3.apply(this,arguments)}}var RO,X8,jO,_9,g0,O3,d6,q3,J8,VY,NY,EO,z3,TO});var Sx=T((_QD,CO)=>{var xx=Symbol();function uQD(D,$,X){let Y=$[xx];if(Y)return $.stat(D,(Q,F)=>{if(Q)return X(Q);X(null,F.mtime,Y)});let J=new Date(Math.ceil(Date.now()/1000)*1000+5);$.utimes(D,J,J,(Q)=>{if(Q)return X(Q);$.stat(D,(F,Z)=>{if(F)return X(F);let w=Z.mtime.getTime()%1000===0?"s":"ms";Object.defineProperty($,xx,{value:w}),X(null,Z.mtime,w)})})}function vQD(D){let $=Date.now();if(D==="s")$=Math.ceil($/1000)*1000;return new Date($)}_QD.probe=uQD;_QD.getMtime=vQD});var fx=T((dQD,W3)=>{var yQD=i("path"),SO=S0(),bQD=Cx(),hQD=LY(),ux=Sx(),Z6={};function B3(D,$){return $.lockfilePath||`${D}.lock`}function uO(D,$,X){if(!$.realpath)return X(null,yQD.resolve(D));$.fs.realpath(D,X)}function xO(D,$,X){let Y=B3(D,$);$.fs.mkdir(Y,(J)=>{if(!J)return ux.probe(Y,$.fs,(Q,F,Z)=>{if(Q)return $.fs.rmdir(Y,()=>{}),X(Q);X(null,F,Z)});if(J.code!=="EEXIST")return X(J);if($.stale<=0)return X(Object.assign(Error("Lock file is already being held"),{code:"ELOCKED",file:D}));$.fs.stat(Y,(Q,F)=>{if(Q){if(Q.code==="ENOENT")return xO(D,{...$,stale:0},X);return X(Q)}if(!vx(F,$))return X(Object.assign(Error("Lock file is already being held"),{code:"ELOCKED",file:D}));_x(D,$,(Z)=>{if(Z)return X(Z);xO(D,{...$,stale:0},X)})})})}function vx(D,$){return D.mtime.getTime()<Date.now()-$.stale}function _x(D,$,X){$.fs.rmdir(B3(D,$),(Y)=>{if(Y&&Y.code!=="ENOENT")return X(Y);X()})}function MY(D,$){let X=Z6[D];if(X.updateTimeout)return;if(X.updateDelay=X.updateDelay||$.update,X.updateTimeout=setTimeout(()=>{X.updateTimeout=null,$.fs.stat(X.lockfilePath,(Y,J)=>{let Q=X.lastUpdate+$.stale<Date.now();if(Y){if(Y.code==="ENOENT"||Q)return PO(D,X,Object.assign(Y,{code:"ECOMPROMISED"}));return X.updateDelay=1000,MY(D,$)}if(X.mtime.getTime()!==J.mtime.getTime())return PO(D,X,Object.assign(Error("Unable to update lock within the stale threshold"),{code:"ECOMPROMISED"}));let Z=ux.getMtime(X.mtimePrecision);$.fs.utimes(X.lockfilePath,Z,Z,(w)=>{let G=X.lastUpdate+$.stale<Date.now();if(X.released)return;if(w){if(w.code==="ENOENT"||G)return PO(D,X,Object.assign(w,{code:"ECOMPROMISED"}));return X.updateDelay=1000,MY(D,$)}X.mtime=Z,X.lastUpdate=Date.now(),X.updateDelay=null,MY(D,$)})})},X.updateDelay),X.updateTimeout.unref)X.updateTimeout.unref()}function PO(D,$,X){if($.released=!0,$.updateTimeout)clearTimeout($.updateTimeout);if(Z6[D]===$)delete Z6[D];$.options.onCompromised(X)}function gQD(D,$,X){$={stale:1e4,update:null,realpath:!0,retries:0,fs:SO,onCompromised:(Y)=>{throw Y},...$},$.retries=$.retries||0,$.retries=typeof $.retries==="number"?{retries:$.retries}:$.retries,$.stale=Math.max($.stale||0,2000),$.update=$.update==null?$.stale/2:$.update||0,$.update=Math.max(Math.min($.update,$.stale/2),1000),uO(D,$,(Y,J)=>{if(Y)return X(Y);let Q=bQD.operation($.retries);Q.attempt(()=>{xO(J,$,(F,Z,w)=>{if(Q.retry(F))return;if(F)return X(Q.mainError());let G=Z6[J]={lockfilePath:B3(J,$),mtime:Z,mtimePrecision:w,options:$,lastUpdate:Date.now()};MY(J,$),X(null,(U)=>{if(G.released)return U&&U(Object.assign(Error("Lock is already released"),{code:"ERELEASED"}));kx(J,{...$,realpath:!1},U)})})})})}function kx(D,$,X){$={fs:SO,realpath:!0,...$},uO(D,$,(Y,J)=>{if(Y)return X(Y);let Q=Z6[J];if(!Q)return X(Object.assign(Error("Lock is not acquired/owned by you"),{code:"ENOTACQUIRED"}));Q.updateTimeout&&clearTimeout(Q.updateTimeout),Q.released=!0,delete Z6[J],_x(J,$,X)})}function mQD(D,$,X){$={stale:1e4,realpath:!0,fs:SO,...$},$.stale=Math.max($.stale||0,2000),uO(D,$,(Y,J)=>{if(Y)return X(Y);$.fs.stat(B3(J,$),(Q,F)=>{if(Q)return Q.code==="ENOENT"?X(null,!1):X(Q);return X(null,!vx(F,$))})})}function cQD(){return Z6}hQD(()=>{for(let D in Z6){let $=Z6[D].options;try{$.fs.rmdirSync(B3(D,$))}catch(X){}}});dQD.lock=gQD;dQD.unlock=kx;dQD.check=mQD;dQD.getLocks=cQD});var bx=T((ubD,yx)=>{var rQD=S0();function oQD(D){let $=["mkdir","realpath","stat","rmdir","utimes"],X={...D};return $.forEach((Y)=>{X[Y]=(...J)=>{let Q=J.pop(),F;try{F=D[`${Y}Sync`](...J)}catch(Z){return Q(Z)}Q(null,F)}}),X}function aQD(D){return(...$)=>new Promise((X,Y)=>{$.push((J,Q)=>{if(J)Y(J);else X(Q)}),D(...$)})}function tQD(D){return(...$)=>{let X,Y;if($.push((J,Q)=>{X=J,Y=Q}),D(...$),X)throw X;return Y}}function sQD(D){if(D={...D},D.fs=oQD(D.fs||rQD),typeof D.retries==="number"&&D.retries>0||D.retries&&typeof D.retries.retries==="number"&&D.retries.retries>0)throw Object.assign(Error("Cannot use retries with the sync api"),{code:"ESYNC"});return D}yx.exports={toPromise:aQD,toSync:tQD,toSyncOptions:sQD}});var gx=T((vbD,l6)=>{var f9=fx(),{toPromise:IY,toSync:AY,toSyncOptions:vO}=bx();async function hx(D,$){let X=await IY(f9.lock)(D,$);return IY(X)}function eQD(D,$){let X=AY(f9.lock)(D,vO($));return AY(X)}function DFD(D,$){return IY(f9.unlock)(D,$)}function $FD(D,$){return AY(f9.unlock)(D,vO($))}function XFD(D,$){return IY(f9.check)(D,$)}function JFD(D,$){return AY(f9.check)(D,vO($))}l6.exports=hx;l6.exports.lock=hx;l6.exports.unlock=DFD;l6.exports.lockSync=eQD;l6.exports.unlockSync=$FD;l6.exports.check=XFD;l6.exports.checkSync=JFD});var px=T((nx)=>{Object.defineProperty(nx,"__esModule",{value:!0});nx.canStoreURLs=nx.FileUrlStorage=void 0;var mx=i("fs"),YFD=FFD(Wx()),cx=QFD(gx());function lx(D){if(typeof WeakMap!="function")return null;var $=new WeakMap,X=new WeakMap;return(lx=function(Y){return Y?X:$})(D)}function QFD(D,$){if(!$&&D&&D.__esModule)return D;if(D===null||typeof D!="object"&&typeof D!="function")return{default:D};var X=lx($);if(X&&X.has(D))return X.get(D);var Y={__proto__:null},J=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var Q in D)if(Q!=="default"&&{}.hasOwnProperty.call(D,Q)){var F=J?Object.getOwnPropertyDescriptor(D,Q):null;F&&(F.get||F.set)?Object.defineProperty(Y,Q,F):Y[Q]=D[Q]}return Y.default=D,X&&X.set(D,Y),Y}function FFD(D){return D&&D.__esModule?D:{default:D}}function K3(D){return K3=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function($){return typeof $}:function($){return $&&typeof Symbol=="function"&&$.constructor===Symbol&&$!==Symbol.prototype?"symbol":typeof $},K3(D)}function ZFD(D,$){if(!(D instanceof $))throw TypeError("Cannot call a class as a function")}function dx(D,$){for(var X=0;X<$.length;X++){var Y=$[X];if(Y.enumerable=Y.enumerable||!1,Y.configurable=!0,"value"in Y)Y.writable=!0;Object.defineProperty(D,GFD(Y.key),Y)}}function wFD(D,$,X){if($)dx(D.prototype,$);if(X)dx(D,X);return Object.defineProperty(D,"prototype",{writable:!1}),D}function GFD(D){var $=UFD(D,"string");return K3($)=="symbol"?$:$+""}function UFD(D,$){if(K3(D)!="object"||!D)return D;var X=D[Symbol.toPrimitive];if(X!==void 0){var Y=X.call(D,$||"default");if(K3(Y)!="object")return Y;throw TypeError("@@toPrimitive must return a primitive value.")}return($==="string"?String:Number)(D)}var _bD=nx.canStoreURLs=!0,kbD=nx.FileUrlStorage=function(){function D($){ZFD(this,D),this.path=$}return wFD(D,[{key:"findAllUploads",value:function(){var X=this;return new Promise(function(Y,J){X._getItems("tus::",function(Q,F){if(Q)J(Q);else Y(F)})})}},{key:"findUploadsByFingerprint",value:function(X){var Y=this;return new Promise(function(J,Q){Y._getItems("tus::".concat(X),function(F,Z){if(F)Q(F);else J(Z)})})}},{key:"removeUpload",value:function(X){var Y=this;return new Promise(function(J,Q){Y._removeItem(X,function(F){if(F)Q(F);else J()})})}},{key:"addUpload",value:function(X,Y){var J=this,Q=Math.round(Math.random()*1000000000000),F="tus::".concat(X,"::").concat(Q);return new Promise(function(Z,w){J._setItem(F,Y,function(G){if(G)w(G);else Z(F)})})}},{key:"_setItem",value:function(X,Y,J){var Q=this;cx.lock(this.path,this._lockfileOptions()).then(function(F){J=Q._releaseAndCb(F,J),Q._getData(function(Z,w){if(Z){J(Z);return}w[X]=Y,Q._writeData(w,function(G){return J(G)})})}).catch(J)}},{key:"_getItems",value:function(X,Y){this._getData(function(J,Q){if(J){Y(J);return}var F=Object.keys(Q).filter(function(Z){return Z.startsWith(X)}).map(function(Z){var w=Q[Z];return w.urlStorageKey=Z,w});Y(null,F)})}},{key:"_removeItem",value:function(X,Y){var J=this;cx.lock(this.path,this._lockfileOptions()).then(function(Q){Y=J._releaseAndCb(Q,Y),J._getData(function(F,Z){if(F){Y(F);return}delete Z[X],J._writeData(Z,function(w){return Y(w)})})}).catch(Y)}},{key:"_lockfileOptions",value:function(){return{realpath:!1,retries:{retries:5,minTimeout:20}}}},{key:"_releaseAndCb",value:function(X,Y){return function(J){if(J){X().then(function(){return Y(J)}).catch(function(Q){return Y((0,YFD.default)([J,Q]))});return}X().then(Y).catch(Y)}}},{key:"_writeData",value:function(X,Y){var J={encoding:"utf8",mode:432,flag:"w"};(0,mx.writeFile)(this.path,JSON.stringify(X),J,function(Q){return Y(Q)})}},{key:"_getData",value:function(X){(0,mx.readFile)(this.path,"utf8",function(Y,J){if(Y){if(Y.code==="ENOENT")X(null,{});else X(Y);return}try{J=!J.trim().length?{}:JSON.parse(J)}catch(Q){X(Q);return}X(null,J)})}}])}()});var jY=T((n6)=>{Object.defineProperty(n6,"__esModule",{value:!0});Object.defineProperty(n6,"DefaultHttpStack",{enumerable:!0,get:function(){return tx.default}});Object.defineProperty(n6,"DetailedError",{enumerable:!0,get:function(){return qFD.default}});Object.defineProperty(n6,"FileUrlStorage",{enumerable:!0,get:function(){return sx.FileUrlStorage}});Object.defineProperty(n6,"StreamSource",{enumerable:!0,get:function(){return HFD.default}});n6.Upload=void 0;Object.defineProperty(n6,"canStoreURLs",{enumerable:!0,get:function(){return sx.canStoreURLs}});n6.defaultOptions=void 0;Object.defineProperty(n6,"enableDebugLog",{enumerable:!0,get:function(){return zFD.enableDebugLog}});n6.isSupported=void 0;var qFD=Y8(vU()),zFD=_U(),BFD=Y8(gT()),_O=Y8(NC()),WFD=Y8(hC()),KFD=Y8(lC()),tx=Y8(FP()),HFD=Y8(nU()),sx=px();function Y8(D){return D&&D.__esModule?D:{default:D}}function b9(D){return b9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function($){return typeof $}:function($){return $&&typeof Symbol=="function"&&$.constructor===Symbol&&$!==Symbol.prototype?"symbol":typeof $},b9(D)}function VFD(D,$){if(!(D instanceof $))throw TypeError("Cannot call a class as a function")}function rx(D,$){for(var X=0;X<$.length;X++){var Y=$[X];if(Y.enumerable=Y.enumerable||!1,Y.configurable=!0,"value"in Y)Y.writable=!0;Object.defineProperty(D,DS(Y.key),Y)}}function NFD(D,$,X){if($)rx(D.prototype,$);if(X)rx(D,X);return Object.defineProperty(D,"prototype",{writable:!1}),D}function LFD(D,$,X){return $=RY($),MFD(D,ex()?Reflect.construct($,X||[],RY(D).constructor):$.apply(D,X))}function MFD(D,$){if($&&(b9($)==="object"||typeof $==="function"))return $;else if($!==void 0)throw TypeError("Derived constructors may only return object or undefined");return IFD(D)}function IFD(D){if(D===void 0)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return D}function ex(){try{var D=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch($){}return(ex=function(){return!!D})()}function RY(D){return RY=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(X){return X.__proto__||Object.getPrototypeOf(X)},RY(D)}function AFD(D,$){if(typeof $!=="function"&&$!==null)throw TypeError("Super expression must either be null or a function");if(D.prototype=Object.create($&&$.prototype,{constructor:{value:D,writable:!0,configurable:!0}}),Object.defineProperty(D,"prototype",{writable:!1}),$)kO(D,$)}function kO(D,$){return kO=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(Y,J){return Y.__proto__=J,Y},kO(D,$)}function ox(D,$){var X=Object.keys(D);if(Object.getOwnPropertySymbols){var Y=Object.getOwnPropertySymbols(D);$&&(Y=Y.filter(function(J){return Object.getOwnPropertyDescriptor(D,J).enumerable})),X.push.apply(X,Y)}return X}function y9(D){for(var $=1;$<arguments.length;$++){var X=arguments[$]!=null?arguments[$]:{};$%2?ox(Object(X),!0).forEach(function(Y){RFD(D,Y,X[Y])}):Object.getOwnPropertyDescriptors?Object.defineProperties(D,Object.getOwnPropertyDescriptors(X)):ox(Object(X)).forEach(function(Y){Object.defineProperty(D,Y,Object.getOwnPropertyDescriptor(X,Y))})}return D}function RFD(D,$,X){if($=DS($),$ in D)Object.defineProperty(D,$,{value:X,enumerable:!0,configurable:!0,writable:!0});else D[$]=X;return D}function DS(D){var $=jFD(D,"string");return b9($)=="symbol"?$:$+""}function jFD(D,$){if(b9(D)!="object"||!D)return D;var X=D[Symbol.toPrimitive];if(X!==void 0){var Y=X.call(D,$||"default");if(b9(Y)!="object")return Y;throw TypeError("@@toPrimitive must return a primitive value.")}return($==="string"?String:Number)(D)}var ax=n6.defaultOptions=y9(y9({},_O.default.defaultOptions),{},{httpStack:new tx.default,fileReader:new WFD.default,urlStorage:new BFD.default,fingerprint:KFD.default}),ybD=n6.Upload=function(D){function $(){var X=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,Y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return VFD(this,$),Y=y9(y9({},ax),Y),LFD(this,$,[X,Y])}return AFD($,D),NFD($,null,[{key:"terminate",value:function(Y){var J=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return J=y9(y9({},ax),J),_O.default.terminate(Y,J)}}])}(_O.default),bbD=n6.isSupported=!0});var H$;var H3=o(()=>{H$={name:"@capgo/cli",type:"module",version:"7.84.9",description:"A CLI to upload to capgo servers",author:"Martin martin@capgo.app",license:"Apache 2.0",homepage:"https://github.com/Cap-go/CLI#readme",repository:{type:"git",url:"git+https://github.com/Cap-go/CLI.git"},bugs:{url:"https://github.com/Cap-go/CLI/issues"},keywords:["appflow alternative","ionic","capacitor","auto update","live update","capgo","cli","upload","capgo-cli","sdk"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js"},"./sdk":{types:"./dist/src/sdk.d.ts",import:"./dist/src/sdk.js"}},main:"dist/index.js",types:"dist/src/index.d.ts",bin:{capgo:"dist/index.js"},engines:{npm:">=8.0.0",node:">=20.0.0"},scripts:{build:"tsc && bun build.mjs",dev:"NODE_ENV=development ncc build","no-debug":"node dist/index.js","dev-build":"SUPA_DB=development ncc build",pack:"pkg",types:"npx --yes supabase gen types typescript --project-id=xvwzpoazmxkqosrdewyv > src/types/supabase.types.ts",typecheck:"tsc --noEmit",lint:'eslint "src/**/*.ts" --fix',"check-posix-paths":"node test/check-posix-paths.js","generate-docs":"node dist/index.js generate-docs README.md","test:bundle":"bun test/test-bundle.mjs","test:functional":"bun test/test-functional.mjs","test:semver":"bun test/test-semver-validation.mjs","test:version-edge-cases":"bun test/test-version-validation.mjs","test:regex":"bun test/test-regex-validation.mjs","test:upload":"bun test/test-upload-validation.mjs","test:credentials":"bun test/test-credentials.mjs","test:credentials-validation":"bun test/test-credentials-validation.mjs","test:build-zip-filter":"bun test/test-build-zip-filter.mjs","test:checksum":"bun test/test-checksum-algorithm.mjs","test:esm-sdk":"node test/test-sdk-esm.mjs","test:mcp":"node test/test-mcp.mjs","test:version-detection":"node test/test-get-installed-version.mjs","test:version-detection:setup":"./test/fixtures/setup-test-projects.sh","test:platform-paths":"bun test/test-platform-paths.mjs","test:payload-split":"bun test/test-payload-split.mjs",test:"bun run test:bundle && bun run test:functional && bun run test:semver && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:credentials && bun run test:credentials-validation && bun run test:build-zip-filter && bun run test:checksum && bun run test:esm-sdk && bun run test:mcp && bun run test:version-detection && bun run test:platform-paths && bun run test:payload-split"},devDependencies:{"@antfu/eslint-config":"^7.0.0","@bradenmacdonald/s3-lite-client":"npm:@jsr/bradenmacdonald__s3-lite-client@0.9.4","@capacitor/cli":"^8.0.0","@capgo/find-package-manager":"^0.0.18","@clack/prompts":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.3","@sauber/table":"npm:@jsr/sauber__table","@std/semver":"npm:@jsr/std__semver@1.0.8","@supabase/supabase-js":"^2.79.0","@types/adm-zip":"^0.5.7","@types/node":"^25.0.0","@types/prettyjson":"^0.0.33","@types/tmp":"^0.2.6","@vercel/ncc":"^0.38.4","adm-zip":"^0.5.16","ci-info":"^4.3.1",commander:"^14.0.2",eslint:"^9.38.0","git-format-staged":"4.0.1",husky:"^9.1.7","is-wsl":"^3.1.0",micromatch:"^4.0.8",open:"^11.0.0",prettyjson:"^1.2.5",tmp:"^0.2.5","tus-js-client":"^4.3.1",typescript:"^5.9.3",partysocket:"^1.1.11",ws:"^8.18.3",zod:"^4.3.6"}}});async function EY(D){try{let X=`https://registry.npmjs.org/${encodeURIComponent(D.toLowerCase())}`,Y=await fetch(X,{headers:{accept:"application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*"}});if(!Y.ok)return null;return(await Y.json())["dist-tags"]?.latest||null}catch{return null}}async function Z0(){let D=await EY("@capgo/cli")??"",$=D?.split(".")[0];if(D!==H$.version)H.warning(`\uD83D\uDEA8 You are using @capgo/cli@${H$.version} it's not the latest version.
|
|
131
|
-
Please use @capgo/cli@${D}" or @capgo/cli@${$} to keep up to date with the latest features and bug fixes.`)}var O1=o(()=>{vD();H3()});async function YS(D,$,X,Y,J,Q="✅"){await AD(X,{channel:D,event:Y,icon:Q,user_id:$,...J?{tags:{"app-id":J}}:{},notify:!1})}var QS=o(()=>{vD();D6();O1();kD()});import{Buffer as FS}from"node:buffer";import{createHash as TFD}from"node:crypto";function PFD(D){let $=4294967295;for(let X=0;X<D.length;X++){let Y=D[X];$=CFD[($^Y)&255]^$>>>8}return $=$^4294967295,($>>>0).toString(16).padStart(8,"0")}async function i6(D,$="sha256"){let X=FS.isBuffer(D)?D:FS.from(D);if($==="crc32")return PFD(X);let Y=TFD($);return Y.update(X),Y.digest("hex")}var CFD;var V3=o(()=>{CFD=(()=>{let D=[];for(let $=0;$<256;$++){let X=$;for(let Y=0;Y<8;Y++)X=X&1?3988292384^X>>>1:X>>>1;D[$]=X}return D})()});var wS=T((DhD,ZS)=>{var h9=1000,g9=h9*60,m9=g9*60,Q8=m9*24,xFD=Q8*7,SFD=Q8*365.25;ZS.exports=function(D,$){$=$||{};var X=typeof D;if(X==="string"&&D.length>0)return uFD(D);else if(X==="number"&&isFinite(D))return $.long?_FD(D):vFD(D);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(D))};function uFD(D){if(D=String(D),D.length>100)return;var $=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(D);if(!$)return;var X=parseFloat($[1]),Y=($[2]||"ms").toLowerCase();switch(Y){case"years":case"year":case"yrs":case"yr":case"y":return X*SFD;case"weeks":case"week":case"w":return X*xFD;case"days":case"day":case"d":return X*Q8;case"hours":case"hour":case"hrs":case"hr":case"h":return X*m9;case"minutes":case"minute":case"mins":case"min":case"m":return X*g9;case"seconds":case"second":case"secs":case"sec":case"s":return X*h9;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return X;default:return}}function vFD(D){var $=Math.abs(D);if($>=Q8)return Math.round(D/Q8)+"d";if($>=m9)return Math.round(D/m9)+"h";if($>=g9)return Math.round(D/g9)+"m";if($>=h9)return Math.round(D/h9)+"s";return D+"ms"}function _FD(D){var $=Math.abs(D);if($>=Q8)return TY(D,$,Q8,"day");if($>=m9)return TY(D,$,m9,"hour");if($>=g9)return TY(D,$,g9,"minute");if($>=h9)return TY(D,$,h9,"second");return D+" ms"}function TY(D,$,X,Y){var J=$>=X*1.5;return Math.round(D/X)+" "+Y+(J?"s":"")}});var fO=T(($hD,GS)=>{function kFD(D){X.debug=X,X.default=X,X.coerce=w,X.disable=F,X.enable=J,X.enabled=Z,X.humanize=wS(),X.destroy=G,Object.keys(D).forEach((U)=>{X[U]=D[U]}),X.names=[],X.skips=[],X.formatters={};function $(U){let O=0;for(let z=0;z<U.length;z++)O=(O<<5)-O+U.charCodeAt(z),O|=0;return X.colors[Math.abs(O)%X.colors.length]}X.selectColor=$;function X(U){let O,z=null,q,B;function W(...L){if(!W.enabled)return;let M=W,I=Number(new Date),K=I-(O||I);if(M.diff=K,M.prev=O,M.curr=I,O=I,L[0]=X.coerce(L[0]),typeof L[0]!=="string")L.unshift("%O");let N=0;L[0]=L[0].replace(/%([a-zA-Z%])/g,(R,x)=>{if(R==="%%")return"%";N++;let A=X.formatters[x];if(typeof A==="function"){let _=L[N];R=A.call(M,_),L.splice(N,1),N--}return R}),X.formatArgs.call(M,L),(M.log||X.log).apply(M,L)}if(W.namespace=U,W.useColors=X.useColors(),W.color=X.selectColor(U),W.extend=Y,W.destroy=X.destroy,Object.defineProperty(W,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(z!==null)return z;if(q!==X.namespaces)q=X.namespaces,B=X.enabled(U);return B},set:(L)=>{z=L}}),typeof X.init==="function")X.init(W);return W}function Y(U,O){let z=X(this.namespace+(typeof O>"u"?":":O)+U);return z.log=this.log,z}function J(U){X.save(U),X.namespaces=U,X.names=[],X.skips=[];let O=(typeof U==="string"?U:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let z of O)if(z[0]==="-")X.skips.push(z.slice(1));else X.names.push(z)}function Q(U,O){let z=0,q=0,B=-1,W=0;while(z<U.length)if(q<O.length&&(O[q]===U[z]||O[q]==="*"))if(O[q]==="*")B=q,W=z,q++;else z++,q++;else if(B!==-1)q=B+1,W++,z=W;else return!1;while(q<O.length&&O[q]==="*")q++;return q===O.length}function F(){let U=[...X.names,...X.skips.map((O)=>"-"+O)].join(",");return X.enable(""),U}function Z(U){for(let O of X.skips)if(Q(U,O))return!1;for(let O of X.names)if(Q(U,O))return!0;return!1}function w(U){if(U instanceof Error)return U.stack||U.message;return U}function G(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return X.enable(X.load()),X}GS.exports=kFD});var OS=T((US,CY)=>{US.formatArgs=yFD;US.save=bFD;US.load=hFD;US.useColors=fFD;US.storage=gFD();US.destroy=(()=>{let D=!1;return()=>{if(!D)D=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();US.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function fFD(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let D;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(D=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(D[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function yFD(D){if(D[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+D[0]+(this.useColors?"%c ":" ")+"+"+CY.exports.humanize(this.diff),!this.useColors)return;let $="color: "+this.color;D.splice(1,0,$,"color: inherit");let X=0,Y=0;D[0].replace(/%[a-zA-Z%]/g,(J)=>{if(J==="%%")return;if(X++,J==="%c")Y=X}),D.splice(Y,0,$)}US.log=console.debug||console.log||(()=>{});function bFD(D){try{if(D)US.storage.setItem("debug",D);else US.storage.removeItem("debug")}catch($){}}function hFD(){let D;try{D=US.storage.getItem("debug")||US.storage.getItem("DEBUG")}catch($){}if(!D&&typeof process<"u"&&"env"in process)D=process.env.DEBUG;return D}function gFD(){try{return localStorage}catch(D){}}CY.exports=fO()(US);var{formatters:mFD}=CY.exports;mFD.j=function(D){try{return JSON.stringify(D)}catch($){return"[UnexpectedJSONParseError]: "+$.message}}});var zS=T((JhD,qS)=>{qS.exports=(D,$=process.argv)=>{let X=D.startsWith("-")?"":D.length===1?"-":"--",Y=$.indexOf(X+D),J=$.indexOf("--");return Y!==-1&&(J===-1||Y<J)}});var KS=T((YhD,WS)=>{var oFD=i("os"),BS=i("tty"),D$=zS(),{env:l0}=process,p6;if(D$("no-color")||D$("no-colors")||D$("color=false")||D$("color=never"))p6=0;else if(D$("color")||D$("colors")||D$("color=true")||D$("color=always"))p6=1;if("FORCE_COLOR"in l0)if(l0.FORCE_COLOR==="true")p6=1;else if(l0.FORCE_COLOR==="false")p6=0;else p6=l0.FORCE_COLOR.length===0?1:Math.min(parseInt(l0.FORCE_COLOR,10),3);function yO(D){if(D===0)return!1;return{level:D,hasBasic:!0,has256:D>=2,has16m:D>=3}}function bO(D,$){if(p6===0)return 0;if(D$("color=16m")||D$("color=full")||D$("color=truecolor"))return 3;if(D$("color=256"))return 2;if(D&&!$&&p6===void 0)return 0;let X=p6||0;if(l0.TERM==="dumb")return X;if(process.platform==="win32"){let Y=oFD.release().split(".");if(Number(Y[0])>=10&&Number(Y[2])>=10586)return Number(Y[2])>=14931?3:2;return 1}if("CI"in l0){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some((Y)=>(Y in l0))||l0.CI_NAME==="codeship")return 1;return X}if("TEAMCITY_VERSION"in l0)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(l0.TEAMCITY_VERSION)?1:0;if(l0.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in l0){let Y=parseInt((l0.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(l0.TERM_PROGRAM){case"iTerm.app":return Y>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(l0.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(l0.TERM))return 1;if("COLORTERM"in l0)return 1;return X}function aFD(D){let $=bO(D,D&&D.isTTY);return yO($)}WS.exports={supportsColor:aFD,stdout:yO(bO(!0,BS.isatty(1))),stderr:yO(bO(!0,BS.isatty(2)))}});var LS=T((VS,xY)=>{var tFD=i("tty"),PY=i("util");VS.init=YZD;VS.log=$ZD;VS.formatArgs=eFD;VS.save=XZD;VS.load=JZD;VS.useColors=sFD;VS.destroy=PY.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");VS.colors=[6,2,3,4,5,1];try{let D=KS();if(D&&(D.stderr||D).level>=2)VS.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch(D){}VS.inspectOpts=Object.keys(process.env).filter((D)=>{return/^debug_/i.test(D)}).reduce((D,$)=>{let X=$.substring(6).toLowerCase().replace(/_([a-z])/g,(J,Q)=>{return Q.toUpperCase()}),Y=process.env[$];if(/^(yes|on|true|enabled)$/i.test(Y))Y=!0;else if(/^(no|off|false|disabled)$/i.test(Y))Y=!1;else if(Y==="null")Y=null;else Y=Number(Y);return D[X]=Y,D},{});function sFD(){return"colors"in VS.inspectOpts?Boolean(VS.inspectOpts.colors):tFD.isatty(process.stderr.fd)}function eFD(D){let{namespace:$,useColors:X}=this;if(X){let Y=this.color,J="\x1B[3"+(Y<8?Y:"8;5;"+Y),Q=` ${J};1m${$} \x1B[0m`;D[0]=Q+D[0].split(`
|
|
130
|
+
GFS4: `),console.error(D)};if(!M0[o0]){if(LO=global[o0]||[],Rx(M0,LO),M0.close=function(D){function $(X,Y){return D.call(M0,X,function(J){if(!J)Ax();if(typeof Y==="function")Y.apply(this,arguments)})}return Object.defineProperty($,KY,{value:D}),$}(M0.close),M0.closeSync=function(D){function $(X){D.apply(M0,arguments),Ax()}return Object.defineProperty($,KY,{value:D}),$}(M0.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||""))process.on("exit",function(){D8(M0[o0]),i("assert").equal(M0[o0].length,0)})}var LO;if(!global[o0])Rx(global,M0[o0]);AO.exports=MO(jQD(M0));if(process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!M0.__patched)AO.exports=MO(M0),M0.__patched=!0;function MO(D){AQD(D),D.gracefulify=MO,D.createReadStream=V,D.createWriteStream=R;var $=D.readFile;D.readFile=X;function X(_,v,S){if(typeof v==="function")S=v,v=null;return h(_,v,S);function h(b,l,f,j){return $(b,l,function(P){if(P&&(P.code==="EMFILE"||P.code==="ENFILE"))v9([h,[b,l,f],P,j||Date.now(),Date.now()]);else if(typeof f==="function")f.apply(this,arguments)})}}var Y=D.writeFile;D.writeFile=J;function J(_,v,S,h){if(typeof S==="function")h=S,S=null;return b(_,v,S,h);function b(l,f,j,P,u){return Y(l,f,j,function(y){if(y&&(y.code==="EMFILE"||y.code==="ENFILE"))v9([b,[l,f,j,P],y,u||Date.now(),Date.now()]);else if(typeof P==="function")P.apply(this,arguments)})}}var Q=D.appendFile;if(Q)D.appendFile=F;function F(_,v,S,h){if(typeof S==="function")h=S,S=null;return b(_,v,S,h);function b(l,f,j,P,u){return Q(l,f,j,function(y){if(y&&(y.code==="EMFILE"||y.code==="ENFILE"))v9([b,[l,f,j,P],y,u||Date.now(),Date.now()]);else if(typeof P==="function")P.apply(this,arguments)})}}var Z=D.copyFile;if(Z)D.copyFile=w;function w(_,v,S,h){if(typeof S==="function")h=S,S=0;return b(_,v,S,h);function b(l,f,j,P,u){return Z(l,f,j,function(y){if(y&&(y.code==="EMFILE"||y.code==="ENFILE"))v9([b,[l,f,j,P],y,u||Date.now(),Date.now()]);else if(typeof P==="function")P.apply(this,arguments)})}}var G=D.readdir;D.readdir=O;var U=/^v[0-5]\./;function O(_,v,S){if(typeof v==="function")S=v,v=null;var h=U.test(process.version)?function(f,j,P,u){return G(f,b(f,j,P,u))}:function(f,j,P,u){return G(f,j,b(f,j,P,u))};return h(_,v,S);function b(l,f,j,P){return function(u,y){if(u&&(u.code==="EMFILE"||u.code==="ENFILE"))v9([h,[l,f,j],u,P||Date.now(),Date.now()]);else{if(y&&y.sort)y.sort();if(typeof j==="function")j.call(this,u,y)}}}}if(process.version.substr(0,4)==="v0.8"){var z=RQD(D);M=z.ReadStream,K=z.WriteStream}var q=D.ReadStream;if(q)M.prototype=Object.create(q.prototype),M.prototype.open=I;var B=D.WriteStream;if(B)K.prototype=Object.create(B.prototype),K.prototype.open=N;Object.defineProperty(D,"ReadStream",{get:function(){return M},set:function(_){M=_},enumerable:!0,configurable:!0}),Object.defineProperty(D,"WriteStream",{get:function(){return K},set:function(_){K=_},enumerable:!0,configurable:!0});var W=M;Object.defineProperty(D,"FileReadStream",{get:function(){return W},set:function(_){W=_},enumerable:!0,configurable:!0});var L=K;Object.defineProperty(D,"FileWriteStream",{get:function(){return L},set:function(_){L=_},enumerable:!0,configurable:!0});function M(_,v){if(this instanceof M)return q.apply(this,arguments),this;else return M.apply(Object.create(M.prototype),arguments)}function I(){var _=this;A(_.path,_.flags,_.mode,function(v,S){if(v){if(_.autoClose)_.destroy();_.emit("error",v)}else _.fd=S,_.emit("open",S),_.read()})}function K(_,v){if(this instanceof K)return B.apply(this,arguments),this;else return K.apply(Object.create(K.prototype),arguments)}function N(){var _=this;A(_.path,_.flags,_.mode,function(v,S){if(v)_.destroy(),_.emit("error",v);else _.fd=S,_.emit("open",S)})}function V(_,v){return new D.ReadStream(_,v)}function R(_,v){return new D.WriteStream(_,v)}var x=D.open;D.open=A;function A(_,v,S,h){if(typeof S==="function")h=S,S=null;return b(_,v,S,h);function b(l,f,j,P,u){return x(l,f,j,function(y,c){if(y&&(y.code==="EMFILE"||y.code==="ENFILE"))v9([b,[l,f,j,P],y,u||Date.now(),Date.now()]);else if(typeof P==="function")P.apply(this,arguments)})}}return D}function v9(D){D8("ENQUEUE",D[0].name,D[1]),M0[o0].push(D),IO()}var WY;function Ax(){var D=Date.now();for(var $=0;$<M0[o0].length;++$)if(M0[o0][$].length>2)M0[o0][$][3]=D,M0[o0][$][4]=D;IO()}function IO(){if(clearTimeout(WY),WY=void 0,M0[o0].length===0)return;var D=M0[o0].shift(),$=D[0],X=D[1],Y=D[2],J=D[3],Q=D[4];if(J===void 0)D8("RETRY",$.name,X),$.apply(null,X);else if(Date.now()-J>=60000){D8("TIMEOUT",$.name,X);var F=X.pop();if(typeof F==="function")F.call(null,Y)}else{var Z=Date.now()-Q,w=Math.max(Q-J,1),G=Math.min(w*1.2,100);if(Z>=G)D8("RETRY",$.name,X),$.apply(null,X.concat([J]));else M0[o0].push(D)}if(WY===void 0)WY=setTimeout(IO,0)}});var Ex=T((CbD,jx)=>{function e1(D,$){if(typeof $==="boolean")$={forever:$};if(this._originalTimeouts=JSON.parse(JSON.stringify(D)),this._timeouts=D,this._options=$||{},this._maxRetryTime=$&&$.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever)this._cachedTimeouts=this._timeouts.slice(0)}jx.exports=e1;e1.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts};e1.prototype.stop=function(){if(this._timeout)clearTimeout(this._timeout);this._timeouts=[],this._cachedTimeouts=null};e1.prototype.retry=function(D){if(this._timeout)clearTimeout(this._timeout);if(!D)return!1;var $=new Date().getTime();if(D&&$-this._operationStart>=this._maxRetryTime)return this._errors.unshift(Error("RetryOperation timeout occurred")),!1;this._errors.push(D);var X=this._timeouts.shift();if(X===void 0)if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),X=this._timeouts.shift();else return!1;var Y=this,J=setTimeout(function(){if(Y._attempts++,Y._operationTimeoutCb){if(Y._timeout=setTimeout(function(){Y._operationTimeoutCb(Y._attempts)},Y._operationTimeout),Y._options.unref)Y._timeout.unref()}Y._fn(Y._attempts)},X);if(this._options.unref)J.unref();return!0};e1.prototype.attempt=function(D,$){if(this._fn=D,$){if($.timeout)this._operationTimeout=$.timeout;if($.cb)this._operationTimeoutCb=$.cb}var X=this;if(this._operationTimeoutCb)this._timeout=setTimeout(function(){X._operationTimeoutCb()},X._operationTimeout);this._operationStart=new Date().getTime(),this._fn(this._attempts)};e1.prototype.try=function(D){console.log("Using RetryOperation.try() is deprecated"),this.attempt(D)};e1.prototype.start=function(D){console.log("Using RetryOperation.start() is deprecated"),this.attempt(D)};e1.prototype.start=e1.prototype.try;e1.prototype.errors=function(){return this._errors};e1.prototype.attempts=function(){return this._attempts};e1.prototype.mainError=function(){if(this._errors.length===0)return null;var D={},$=null,X=0;for(var Y=0;Y<this._errors.length;Y++){var J=this._errors[Y],Q=J.message,F=(D[Q]||0)+1;if(D[Q]=F,F>=X)$=J,X=F}return $}});var Cx=T((CQD)=>{var TQD=Ex();CQD.operation=function(D){var $=CQD.timeouts(D);return new TQD($,{forever:D&&D.forever,unref:D&&D.unref,maxRetryTime:D&&D.maxRetryTime})};CQD.timeouts=function(D){if(D instanceof Array)return[].concat(D);var $={retries:10,factor:2,minTimeout:1000,maxTimeout:1/0,randomize:!1};for(var X in D)$[X]=D[X];if($.minTimeout>$.maxTimeout)throw Error("minTimeout is greater than maxTimeout");var Y=[];for(var J=0;J<$.retries;J++)Y.push(this.createTimeout(J,$));if(D&&D.forever&&!Y.length)Y.push(this.createTimeout(J,$));return Y.sort(function(Q,F){return Q-F}),Y};CQD.createTimeout=function(D,$){var X=$.randomize?Math.random()+1:1,Y=Math.round(X*$.minTimeout*Math.pow($.factor,D));return Y=Math.min(Y,$.maxTimeout),Y};CQD.wrap=function(D,$,X){if($ instanceof Array)X=$,$=null;if(!X){X=[];for(var Y in D)if(typeof D[Y]==="function")X.push(Y)}for(var J=0;J<X.length;J++){var Q=X[J],F=D[Q];D[Q]=function(w){var G=CQD.operation($),U=Array.prototype.slice.call(arguments,1),O=U.pop();U.push(function(z){if(G.retry(z))return;if(z)arguments[0]=G.mainError();O.apply(this,arguments)}),G.attempt(function(){w.apply(D,U)})}.bind(D,F),D[Q].options=$}}});var Px=T((xbD,HY)=>{HY.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];if(process.platform!=="win32")HY.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");if(process.platform==="linux")HY.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var LY=T((SbD,k9)=>{var K0=global.process,$8=function(D){return D&&typeof D==="object"&&typeof D.removeListener==="function"&&typeof D.emit==="function"&&typeof D.reallyExit==="function"&&typeof D.listeners==="function"&&typeof D.kill==="function"&&typeof D.pid==="number"&&typeof D.on==="function"};if(!$8(K0))k9.exports=function(){return function(){}};else{if(RO=i("assert"),X8=Px(),jO=/^win/i.test(K0.platform),_9=i("events"),typeof _9!=="function")_9=_9.EventEmitter;if(K0.__signal_exit_emitter__)g0=K0.__signal_exit_emitter__;else g0=K0.__signal_exit_emitter__=new _9,g0.count=0,g0.emitted={};if(!g0.infinite)g0.setMaxListeners(1/0),g0.infinite=!0;k9.exports=function(D,$){if(!$8(global.process))return function(){};if(RO.equal(typeof D,"function","a callback must be provided for exit handler"),J8===!1)VY();var X="exit";if($&&$.alwaysLast)X="afterexit";var Y=function(){if(g0.removeListener(X,D),g0.listeners("exit").length===0&&g0.listeners("afterexit").length===0)O3()};return g0.on(X,D),Y},O3=function(){if(!J8||!$8(global.process))return;J8=!1,X8.forEach(function($){try{K0.removeListener($,q3[$])}catch(X){}}),K0.emit=z3,K0.reallyExit=NY,g0.count-=1},k9.exports.unload=O3,d6=function($,X,Y){if(g0.emitted[$])return;g0.emitted[$]=!0,g0.emit($,X,Y)},q3={},X8.forEach(function(D){q3[D]=function(){if(!$8(global.process))return;var X=K0.listeners(D);if(X.length===g0.count){if(O3(),d6("exit",null,D),d6("afterexit",null,D),jO&&D==="SIGHUP")D="SIGINT";K0.kill(K0.pid,D)}}}),k9.exports.signals=function(){return X8},J8=!1,VY=function(){if(J8||!$8(global.process))return;J8=!0,g0.count+=1,X8=X8.filter(function($){try{return K0.on($,q3[$]),!0}catch(X){return!1}}),K0.emit=TO,K0.reallyExit=EO},k9.exports.load=VY,NY=K0.reallyExit,EO=function($){if(!$8(global.process))return;K0.exitCode=$||0,d6("exit",K0.exitCode,null),d6("afterexit",K0.exitCode,null),NY.call(K0,K0.exitCode)},z3=K0.emit,TO=function($,X){if($==="exit"&&$8(global.process)){if(X!==void 0)K0.exitCode=X;var Y=z3.apply(this,arguments);return d6("exit",K0.exitCode,null),d6("afterexit",K0.exitCode,null),Y}else return z3.apply(this,arguments)}}var RO,X8,jO,_9,g0,O3,d6,q3,J8,VY,NY,EO,z3,TO});var Sx=T((_QD,CO)=>{var xx=Symbol();function uQD(D,$,X){let Y=$[xx];if(Y)return $.stat(D,(Q,F)=>{if(Q)return X(Q);X(null,F.mtime,Y)});let J=new Date(Math.ceil(Date.now()/1000)*1000+5);$.utimes(D,J,J,(Q)=>{if(Q)return X(Q);$.stat(D,(F,Z)=>{if(F)return X(F);let w=Z.mtime.getTime()%1000===0?"s":"ms";Object.defineProperty($,xx,{value:w}),X(null,Z.mtime,w)})})}function vQD(D){let $=Date.now();if(D==="s")$=Math.ceil($/1000)*1000;return new Date($)}_QD.probe=uQD;_QD.getMtime=vQD});var fx=T((dQD,W3)=>{var yQD=i("path"),SO=S0(),bQD=Cx(),hQD=LY(),ux=Sx(),Z6={};function B3(D,$){return $.lockfilePath||`${D}.lock`}function uO(D,$,X){if(!$.realpath)return X(null,yQD.resolve(D));$.fs.realpath(D,X)}function xO(D,$,X){let Y=B3(D,$);$.fs.mkdir(Y,(J)=>{if(!J)return ux.probe(Y,$.fs,(Q,F,Z)=>{if(Q)return $.fs.rmdir(Y,()=>{}),X(Q);X(null,F,Z)});if(J.code!=="EEXIST")return X(J);if($.stale<=0)return X(Object.assign(Error("Lock file is already being held"),{code:"ELOCKED",file:D}));$.fs.stat(Y,(Q,F)=>{if(Q){if(Q.code==="ENOENT")return xO(D,{...$,stale:0},X);return X(Q)}if(!vx(F,$))return X(Object.assign(Error("Lock file is already being held"),{code:"ELOCKED",file:D}));_x(D,$,(Z)=>{if(Z)return X(Z);xO(D,{...$,stale:0},X)})})})}function vx(D,$){return D.mtime.getTime()<Date.now()-$.stale}function _x(D,$,X){$.fs.rmdir(B3(D,$),(Y)=>{if(Y&&Y.code!=="ENOENT")return X(Y);X()})}function MY(D,$){let X=Z6[D];if(X.updateTimeout)return;if(X.updateDelay=X.updateDelay||$.update,X.updateTimeout=setTimeout(()=>{X.updateTimeout=null,$.fs.stat(X.lockfilePath,(Y,J)=>{let Q=X.lastUpdate+$.stale<Date.now();if(Y){if(Y.code==="ENOENT"||Q)return PO(D,X,Object.assign(Y,{code:"ECOMPROMISED"}));return X.updateDelay=1000,MY(D,$)}if(X.mtime.getTime()!==J.mtime.getTime())return PO(D,X,Object.assign(Error("Unable to update lock within the stale threshold"),{code:"ECOMPROMISED"}));let Z=ux.getMtime(X.mtimePrecision);$.fs.utimes(X.lockfilePath,Z,Z,(w)=>{let G=X.lastUpdate+$.stale<Date.now();if(X.released)return;if(w){if(w.code==="ENOENT"||G)return PO(D,X,Object.assign(w,{code:"ECOMPROMISED"}));return X.updateDelay=1000,MY(D,$)}X.mtime=Z,X.lastUpdate=Date.now(),X.updateDelay=null,MY(D,$)})})},X.updateDelay),X.updateTimeout.unref)X.updateTimeout.unref()}function PO(D,$,X){if($.released=!0,$.updateTimeout)clearTimeout($.updateTimeout);if(Z6[D]===$)delete Z6[D];$.options.onCompromised(X)}function gQD(D,$,X){$={stale:1e4,update:null,realpath:!0,retries:0,fs:SO,onCompromised:(Y)=>{throw Y},...$},$.retries=$.retries||0,$.retries=typeof $.retries==="number"?{retries:$.retries}:$.retries,$.stale=Math.max($.stale||0,2000),$.update=$.update==null?$.stale/2:$.update||0,$.update=Math.max(Math.min($.update,$.stale/2),1000),uO(D,$,(Y,J)=>{if(Y)return X(Y);let Q=bQD.operation($.retries);Q.attempt(()=>{xO(J,$,(F,Z,w)=>{if(Q.retry(F))return;if(F)return X(Q.mainError());let G=Z6[J]={lockfilePath:B3(J,$),mtime:Z,mtimePrecision:w,options:$,lastUpdate:Date.now()};MY(J,$),X(null,(U)=>{if(G.released)return U&&U(Object.assign(Error("Lock is already released"),{code:"ERELEASED"}));kx(J,{...$,realpath:!1},U)})})})})}function kx(D,$,X){$={fs:SO,realpath:!0,...$},uO(D,$,(Y,J)=>{if(Y)return X(Y);let Q=Z6[J];if(!Q)return X(Object.assign(Error("Lock is not acquired/owned by you"),{code:"ENOTACQUIRED"}));Q.updateTimeout&&clearTimeout(Q.updateTimeout),Q.released=!0,delete Z6[J],_x(J,$,X)})}function mQD(D,$,X){$={stale:1e4,realpath:!0,fs:SO,...$},$.stale=Math.max($.stale||0,2000),uO(D,$,(Y,J)=>{if(Y)return X(Y);$.fs.stat(B3(J,$),(Q,F)=>{if(Q)return Q.code==="ENOENT"?X(null,!1):X(Q);return X(null,!vx(F,$))})})}function cQD(){return Z6}hQD(()=>{for(let D in Z6){let $=Z6[D].options;try{$.fs.rmdirSync(B3(D,$))}catch(X){}}});dQD.lock=gQD;dQD.unlock=kx;dQD.check=mQD;dQD.getLocks=cQD});var bx=T((ubD,yx)=>{var rQD=S0();function oQD(D){let $=["mkdir","realpath","stat","rmdir","utimes"],X={...D};return $.forEach((Y)=>{X[Y]=(...J)=>{let Q=J.pop(),F;try{F=D[`${Y}Sync`](...J)}catch(Z){return Q(Z)}Q(null,F)}}),X}function aQD(D){return(...$)=>new Promise((X,Y)=>{$.push((J,Q)=>{if(J)Y(J);else X(Q)}),D(...$)})}function tQD(D){return(...$)=>{let X,Y;if($.push((J,Q)=>{X=J,Y=Q}),D(...$),X)throw X;return Y}}function sQD(D){if(D={...D},D.fs=oQD(D.fs||rQD),typeof D.retries==="number"&&D.retries>0||D.retries&&typeof D.retries.retries==="number"&&D.retries.retries>0)throw Object.assign(Error("Cannot use retries with the sync api"),{code:"ESYNC"});return D}yx.exports={toPromise:aQD,toSync:tQD,toSyncOptions:sQD}});var gx=T((vbD,l6)=>{var f9=fx(),{toPromise:IY,toSync:AY,toSyncOptions:vO}=bx();async function hx(D,$){let X=await IY(f9.lock)(D,$);return IY(X)}function eQD(D,$){let X=AY(f9.lock)(D,vO($));return AY(X)}function DFD(D,$){return IY(f9.unlock)(D,$)}function $FD(D,$){return AY(f9.unlock)(D,vO($))}function XFD(D,$){return IY(f9.check)(D,$)}function JFD(D,$){return AY(f9.check)(D,vO($))}l6.exports=hx;l6.exports.lock=hx;l6.exports.unlock=DFD;l6.exports.lockSync=eQD;l6.exports.unlockSync=$FD;l6.exports.check=XFD;l6.exports.checkSync=JFD});var px=T((nx)=>{Object.defineProperty(nx,"__esModule",{value:!0});nx.canStoreURLs=nx.FileUrlStorage=void 0;var mx=i("fs"),YFD=FFD(Wx()),cx=QFD(gx());function lx(D){if(typeof WeakMap!="function")return null;var $=new WeakMap,X=new WeakMap;return(lx=function(Y){return Y?X:$})(D)}function QFD(D,$){if(!$&&D&&D.__esModule)return D;if(D===null||typeof D!="object"&&typeof D!="function")return{default:D};var X=lx($);if(X&&X.has(D))return X.get(D);var Y={__proto__:null},J=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var Q in D)if(Q!=="default"&&{}.hasOwnProperty.call(D,Q)){var F=J?Object.getOwnPropertyDescriptor(D,Q):null;F&&(F.get||F.set)?Object.defineProperty(Y,Q,F):Y[Q]=D[Q]}return Y.default=D,X&&X.set(D,Y),Y}function FFD(D){return D&&D.__esModule?D:{default:D}}function K3(D){return K3=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function($){return typeof $}:function($){return $&&typeof Symbol=="function"&&$.constructor===Symbol&&$!==Symbol.prototype?"symbol":typeof $},K3(D)}function ZFD(D,$){if(!(D instanceof $))throw TypeError("Cannot call a class as a function")}function dx(D,$){for(var X=0;X<$.length;X++){var Y=$[X];if(Y.enumerable=Y.enumerable||!1,Y.configurable=!0,"value"in Y)Y.writable=!0;Object.defineProperty(D,GFD(Y.key),Y)}}function wFD(D,$,X){if($)dx(D.prototype,$);if(X)dx(D,X);return Object.defineProperty(D,"prototype",{writable:!1}),D}function GFD(D){var $=UFD(D,"string");return K3($)=="symbol"?$:$+""}function UFD(D,$){if(K3(D)!="object"||!D)return D;var X=D[Symbol.toPrimitive];if(X!==void 0){var Y=X.call(D,$||"default");if(K3(Y)!="object")return Y;throw TypeError("@@toPrimitive must return a primitive value.")}return($==="string"?String:Number)(D)}var _bD=nx.canStoreURLs=!0,kbD=nx.FileUrlStorage=function(){function D($){ZFD(this,D),this.path=$}return wFD(D,[{key:"findAllUploads",value:function(){var X=this;return new Promise(function(Y,J){X._getItems("tus::",function(Q,F){if(Q)J(Q);else Y(F)})})}},{key:"findUploadsByFingerprint",value:function(X){var Y=this;return new Promise(function(J,Q){Y._getItems("tus::".concat(X),function(F,Z){if(F)Q(F);else J(Z)})})}},{key:"removeUpload",value:function(X){var Y=this;return new Promise(function(J,Q){Y._removeItem(X,function(F){if(F)Q(F);else J()})})}},{key:"addUpload",value:function(X,Y){var J=this,Q=Math.round(Math.random()*1000000000000),F="tus::".concat(X,"::").concat(Q);return new Promise(function(Z,w){J._setItem(F,Y,function(G){if(G)w(G);else Z(F)})})}},{key:"_setItem",value:function(X,Y,J){var Q=this;cx.lock(this.path,this._lockfileOptions()).then(function(F){J=Q._releaseAndCb(F,J),Q._getData(function(Z,w){if(Z){J(Z);return}w[X]=Y,Q._writeData(w,function(G){return J(G)})})}).catch(J)}},{key:"_getItems",value:function(X,Y){this._getData(function(J,Q){if(J){Y(J);return}var F=Object.keys(Q).filter(function(Z){return Z.startsWith(X)}).map(function(Z){var w=Q[Z];return w.urlStorageKey=Z,w});Y(null,F)})}},{key:"_removeItem",value:function(X,Y){var J=this;cx.lock(this.path,this._lockfileOptions()).then(function(Q){Y=J._releaseAndCb(Q,Y),J._getData(function(F,Z){if(F){Y(F);return}delete Z[X],J._writeData(Z,function(w){return Y(w)})})}).catch(Y)}},{key:"_lockfileOptions",value:function(){return{realpath:!1,retries:{retries:5,minTimeout:20}}}},{key:"_releaseAndCb",value:function(X,Y){return function(J){if(J){X().then(function(){return Y(J)}).catch(function(Q){return Y((0,YFD.default)([J,Q]))});return}X().then(Y).catch(Y)}}},{key:"_writeData",value:function(X,Y){var J={encoding:"utf8",mode:432,flag:"w"};(0,mx.writeFile)(this.path,JSON.stringify(X),J,function(Q){return Y(Q)})}},{key:"_getData",value:function(X){(0,mx.readFile)(this.path,"utf8",function(Y,J){if(Y){if(Y.code==="ENOENT")X(null,{});else X(Y);return}try{J=!J.trim().length?{}:JSON.parse(J)}catch(Q){X(Q);return}X(null,J)})}}])}()});var jY=T((n6)=>{Object.defineProperty(n6,"__esModule",{value:!0});Object.defineProperty(n6,"DefaultHttpStack",{enumerable:!0,get:function(){return tx.default}});Object.defineProperty(n6,"DetailedError",{enumerable:!0,get:function(){return qFD.default}});Object.defineProperty(n6,"FileUrlStorage",{enumerable:!0,get:function(){return sx.FileUrlStorage}});Object.defineProperty(n6,"StreamSource",{enumerable:!0,get:function(){return HFD.default}});n6.Upload=void 0;Object.defineProperty(n6,"canStoreURLs",{enumerable:!0,get:function(){return sx.canStoreURLs}});n6.defaultOptions=void 0;Object.defineProperty(n6,"enableDebugLog",{enumerable:!0,get:function(){return zFD.enableDebugLog}});n6.isSupported=void 0;var qFD=Y8(vU()),zFD=_U(),BFD=Y8(gT()),_O=Y8(NC()),WFD=Y8(hC()),KFD=Y8(lC()),tx=Y8(FP()),HFD=Y8(nU()),sx=px();function Y8(D){return D&&D.__esModule?D:{default:D}}function b9(D){return b9=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function($){return typeof $}:function($){return $&&typeof Symbol=="function"&&$.constructor===Symbol&&$!==Symbol.prototype?"symbol":typeof $},b9(D)}function VFD(D,$){if(!(D instanceof $))throw TypeError("Cannot call a class as a function")}function rx(D,$){for(var X=0;X<$.length;X++){var Y=$[X];if(Y.enumerable=Y.enumerable||!1,Y.configurable=!0,"value"in Y)Y.writable=!0;Object.defineProperty(D,DS(Y.key),Y)}}function NFD(D,$,X){if($)rx(D.prototype,$);if(X)rx(D,X);return Object.defineProperty(D,"prototype",{writable:!1}),D}function LFD(D,$,X){return $=RY($),MFD(D,ex()?Reflect.construct($,X||[],RY(D).constructor):$.apply(D,X))}function MFD(D,$){if($&&(b9($)==="object"||typeof $==="function"))return $;else if($!==void 0)throw TypeError("Derived constructors may only return object or undefined");return IFD(D)}function IFD(D){if(D===void 0)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return D}function ex(){try{var D=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch($){}return(ex=function(){return!!D})()}function RY(D){return RY=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(X){return X.__proto__||Object.getPrototypeOf(X)},RY(D)}function AFD(D,$){if(typeof $!=="function"&&$!==null)throw TypeError("Super expression must either be null or a function");if(D.prototype=Object.create($&&$.prototype,{constructor:{value:D,writable:!0,configurable:!0}}),Object.defineProperty(D,"prototype",{writable:!1}),$)kO(D,$)}function kO(D,$){return kO=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(Y,J){return Y.__proto__=J,Y},kO(D,$)}function ox(D,$){var X=Object.keys(D);if(Object.getOwnPropertySymbols){var Y=Object.getOwnPropertySymbols(D);$&&(Y=Y.filter(function(J){return Object.getOwnPropertyDescriptor(D,J).enumerable})),X.push.apply(X,Y)}return X}function y9(D){for(var $=1;$<arguments.length;$++){var X=arguments[$]!=null?arguments[$]:{};$%2?ox(Object(X),!0).forEach(function(Y){RFD(D,Y,X[Y])}):Object.getOwnPropertyDescriptors?Object.defineProperties(D,Object.getOwnPropertyDescriptors(X)):ox(Object(X)).forEach(function(Y){Object.defineProperty(D,Y,Object.getOwnPropertyDescriptor(X,Y))})}return D}function RFD(D,$,X){if($=DS($),$ in D)Object.defineProperty(D,$,{value:X,enumerable:!0,configurable:!0,writable:!0});else D[$]=X;return D}function DS(D){var $=jFD(D,"string");return b9($)=="symbol"?$:$+""}function jFD(D,$){if(b9(D)!="object"||!D)return D;var X=D[Symbol.toPrimitive];if(X!==void 0){var Y=X.call(D,$||"default");if(b9(Y)!="object")return Y;throw TypeError("@@toPrimitive must return a primitive value.")}return($==="string"?String:Number)(D)}var ax=n6.defaultOptions=y9(y9({},_O.default.defaultOptions),{},{httpStack:new tx.default,fileReader:new WFD.default,urlStorage:new BFD.default,fingerprint:KFD.default}),ybD=n6.Upload=function(D){function $(){var X=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,Y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return VFD(this,$),Y=y9(y9({},ax),Y),LFD(this,$,[X,Y])}return AFD($,D),NFD($,null,[{key:"terminate",value:function(Y){var J=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return J=y9(y9({},ax),J),_O.default.terminate(Y,J)}}])}(_O.default),bbD=n6.isSupported=!0});var H$;var H3=o(()=>{H$={name:"@capgo/cli",type:"module",version:"7.85.0",description:"A CLI to upload to capgo servers",author:"Martin martin@capgo.app",license:"Apache 2.0",homepage:"https://github.com/Cap-go/CLI#readme",repository:{type:"git",url:"git+https://github.com/Cap-go/CLI.git"},bugs:{url:"https://github.com/Cap-go/CLI/issues"},keywords:["appflow alternative","ionic","capacitor","auto update","live update","capgo","cli","upload","capgo-cli","sdk"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js"},"./sdk":{types:"./dist/src/sdk.d.ts",import:"./dist/src/sdk.js"}},main:"dist/index.js",types:"dist/src/index.d.ts",bin:{capgo:"dist/index.js"},engines:{npm:">=8.0.0",node:">=20.0.0"},scripts:{build:"tsc && bun build.mjs",dev:"NODE_ENV=development ncc build","no-debug":"node dist/index.js","dev-build":"SUPA_DB=development ncc build",pack:"pkg",types:"npx --yes supabase gen types typescript --project-id=xvwzpoazmxkqosrdewyv > src/types/supabase.types.ts",typecheck:"tsc --noEmit",lint:'eslint "src/**/*.ts" --fix',"check-posix-paths":"node test/check-posix-paths.js","generate-docs":"node dist/index.js generate-docs README.md","test:bundle":"bun test/test-bundle.mjs","test:functional":"bun test/test-functional.mjs","test:semver":"bun test/test-semver-validation.mjs","test:version-edge-cases":"bun test/test-version-validation.mjs","test:regex":"bun test/test-regex-validation.mjs","test:upload":"bun test/test-upload-validation.mjs","test:credentials":"bun test/test-credentials.mjs","test:credentials-validation":"bun test/test-credentials-validation.mjs","test:build-zip-filter":"bun test/test-build-zip-filter.mjs","test:checksum":"bun test/test-checksum-algorithm.mjs","test:esm-sdk":"node test/test-sdk-esm.mjs","test:mcp":"node test/test-mcp.mjs","test:version-detection":"node test/test-get-installed-version.mjs","test:version-detection:setup":"./test/fixtures/setup-test-projects.sh","test:platform-paths":"bun test/test-platform-paths.mjs","test:payload-split":"bun test/test-payload-split.mjs",test:"bun run test:bundle && bun run test:functional && bun run test:semver && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:credentials && bun run test:credentials-validation && bun run test:build-zip-filter && bun run test:checksum && bun run test:esm-sdk && bun run test:mcp && bun run test:version-detection && bun run test:platform-paths && bun run test:payload-split"},devDependencies:{"@antfu/eslint-config":"^7.0.0","@bradenmacdonald/s3-lite-client":"npm:@jsr/bradenmacdonald__s3-lite-client@0.9.4","@capacitor/cli":"^8.0.0","@capgo/find-package-manager":"^0.0.18","@clack/prompts":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.3","@sauber/table":"npm:@jsr/sauber__table","@std/semver":"npm:@jsr/std__semver@1.0.8","@supabase/supabase-js":"^2.79.0","@types/adm-zip":"^0.5.7","@types/node":"^25.0.0","@types/prettyjson":"^0.0.33","@types/tmp":"^0.2.6","@vercel/ncc":"^0.38.4","adm-zip":"^0.5.16","ci-info":"^4.3.1",commander:"^14.0.2",eslint:"^9.38.0","git-format-staged":"4.0.1",husky:"^9.1.7","is-wsl":"^3.1.0",micromatch:"^4.0.8",open:"^11.0.0",prettyjson:"^1.2.5",tmp:"^0.2.5","tus-js-client":"^4.3.1",typescript:"^5.9.3",partysocket:"^1.1.11",ws:"^8.18.3",zod:"^4.3.6"}}});async function EY(D){try{let X=`https://registry.npmjs.org/${encodeURIComponent(D.toLowerCase())}`,Y=await fetch(X,{headers:{accept:"application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*"}});if(!Y.ok)return null;return(await Y.json())["dist-tags"]?.latest||null}catch{return null}}async function Z0(){let D=await EY("@capgo/cli")??"",$=D?.split(".")[0];if(D!==H$.version)H.warning(`\uD83D\uDEA8 You are using @capgo/cli@${H$.version} it's not the latest version.
|
|
131
|
+
Please use @capgo/cli@${D}" or @capgo/cli@${$} to keep up to date with the latest features and bug fixes.`)}var O1=o(()=>{vD();H3()});async function YS(D,$,X,Y,J,Q="✅"){await AD(X,{channel:D,event:Y,icon:Q,user_id:$,...J?{tags:{"app-id":J}}:{},notify:!1})}var QS=o(()=>{vD();D6();O1();kD()});import{Buffer as FS}from"node:buffer";import{createHash as TFD}from"node:crypto";function PFD(D){let $=4294967295;for(let X=0;X<D.length;X++){let Y=D[X];$=CFD[($^Y)&255]^$>>>8}return $=$^4294967295,($>>>0).toString(16).padStart(8,"0")}async function i6(D,$="sha256"){let X=FS.isBuffer(D)?D:FS.from(D);if($==="crc32")return PFD(X);let Y=TFD($);return Y.update(X),Y.digest("hex")}var CFD;var V3=o(()=>{CFD=(()=>{let D=[];for(let $=0;$<256;$++){let X=$;for(let Y=0;Y<8;Y++)X=X&1?3988292384^X>>>1:X>>>1;D[$]=X}return D})()});var wS=T((DhD,ZS)=>{var h9=1000,g9=h9*60,m9=g9*60,Q8=m9*24,xFD=Q8*7,SFD=Q8*365.25;ZS.exports=function(D,$){$=$||{};var X=typeof D;if(X==="string"&&D.length>0)return uFD(D);else if(X==="number"&&isFinite(D))return $.long?_FD(D):vFD(D);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(D))};function uFD(D){if(D=String(D),D.length>100)return;var $=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(D);if(!$)return;var X=parseFloat($[1]),Y=($[2]||"ms").toLowerCase();switch(Y){case"years":case"year":case"yrs":case"yr":case"y":return X*SFD;case"weeks":case"week":case"w":return X*xFD;case"days":case"day":case"d":return X*Q8;case"hours":case"hour":case"hrs":case"hr":case"h":return X*m9;case"minutes":case"minute":case"mins":case"min":case"m":return X*g9;case"seconds":case"second":case"secs":case"sec":case"s":return X*h9;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return X;default:return}}function vFD(D){var $=Math.abs(D);if($>=Q8)return Math.round(D/Q8)+"d";if($>=m9)return Math.round(D/m9)+"h";if($>=g9)return Math.round(D/g9)+"m";if($>=h9)return Math.round(D/h9)+"s";return D+"ms"}function _FD(D){var $=Math.abs(D);if($>=Q8)return TY(D,$,Q8,"day");if($>=m9)return TY(D,$,m9,"hour");if($>=g9)return TY(D,$,g9,"minute");if($>=h9)return TY(D,$,h9,"second");return D+" ms"}function TY(D,$,X,Y){var J=$>=X*1.5;return Math.round(D/X)+" "+Y+(J?"s":"")}});var fO=T(($hD,GS)=>{function kFD(D){X.debug=X,X.default=X,X.coerce=w,X.disable=F,X.enable=J,X.enabled=Z,X.humanize=wS(),X.destroy=G,Object.keys(D).forEach((U)=>{X[U]=D[U]}),X.names=[],X.skips=[],X.formatters={};function $(U){let O=0;for(let z=0;z<U.length;z++)O=(O<<5)-O+U.charCodeAt(z),O|=0;return X.colors[Math.abs(O)%X.colors.length]}X.selectColor=$;function X(U){let O,z=null,q,B;function W(...L){if(!W.enabled)return;let M=W,I=Number(new Date),K=I-(O||I);if(M.diff=K,M.prev=O,M.curr=I,O=I,L[0]=X.coerce(L[0]),typeof L[0]!=="string")L.unshift("%O");let N=0;L[0]=L[0].replace(/%([a-zA-Z%])/g,(R,x)=>{if(R==="%%")return"%";N++;let A=X.formatters[x];if(typeof A==="function"){let _=L[N];R=A.call(M,_),L.splice(N,1),N--}return R}),X.formatArgs.call(M,L),(M.log||X.log).apply(M,L)}if(W.namespace=U,W.useColors=X.useColors(),W.color=X.selectColor(U),W.extend=Y,W.destroy=X.destroy,Object.defineProperty(W,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(z!==null)return z;if(q!==X.namespaces)q=X.namespaces,B=X.enabled(U);return B},set:(L)=>{z=L}}),typeof X.init==="function")X.init(W);return W}function Y(U,O){let z=X(this.namespace+(typeof O>"u"?":":O)+U);return z.log=this.log,z}function J(U){X.save(U),X.namespaces=U,X.names=[],X.skips=[];let O=(typeof U==="string"?U:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let z of O)if(z[0]==="-")X.skips.push(z.slice(1));else X.names.push(z)}function Q(U,O){let z=0,q=0,B=-1,W=0;while(z<U.length)if(q<O.length&&(O[q]===U[z]||O[q]==="*"))if(O[q]==="*")B=q,W=z,q++;else z++,q++;else if(B!==-1)q=B+1,W++,z=W;else return!1;while(q<O.length&&O[q]==="*")q++;return q===O.length}function F(){let U=[...X.names,...X.skips.map((O)=>"-"+O)].join(",");return X.enable(""),U}function Z(U){for(let O of X.skips)if(Q(U,O))return!1;for(let O of X.names)if(Q(U,O))return!0;return!1}function w(U){if(U instanceof Error)return U.stack||U.message;return U}function G(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return X.enable(X.load()),X}GS.exports=kFD});var OS=T((US,CY)=>{US.formatArgs=yFD;US.save=bFD;US.load=hFD;US.useColors=fFD;US.storage=gFD();US.destroy=(()=>{let D=!1;return()=>{if(!D)D=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();US.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function fFD(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let D;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(D=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(D[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function yFD(D){if(D[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+D[0]+(this.useColors?"%c ":" ")+"+"+CY.exports.humanize(this.diff),!this.useColors)return;let $="color: "+this.color;D.splice(1,0,$,"color: inherit");let X=0,Y=0;D[0].replace(/%[a-zA-Z%]/g,(J)=>{if(J==="%%")return;if(X++,J==="%c")Y=X}),D.splice(Y,0,$)}US.log=console.debug||console.log||(()=>{});function bFD(D){try{if(D)US.storage.setItem("debug",D);else US.storage.removeItem("debug")}catch($){}}function hFD(){let D;try{D=US.storage.getItem("debug")||US.storage.getItem("DEBUG")}catch($){}if(!D&&typeof process<"u"&&"env"in process)D=process.env.DEBUG;return D}function gFD(){try{return localStorage}catch(D){}}CY.exports=fO()(US);var{formatters:mFD}=CY.exports;mFD.j=function(D){try{return JSON.stringify(D)}catch($){return"[UnexpectedJSONParseError]: "+$.message}}});var zS=T((JhD,qS)=>{qS.exports=(D,$=process.argv)=>{let X=D.startsWith("-")?"":D.length===1?"-":"--",Y=$.indexOf(X+D),J=$.indexOf("--");return Y!==-1&&(J===-1||Y<J)}});var KS=T((YhD,WS)=>{var oFD=i("os"),BS=i("tty"),D$=zS(),{env:n0}=process,p6;if(D$("no-color")||D$("no-colors")||D$("color=false")||D$("color=never"))p6=0;else if(D$("color")||D$("colors")||D$("color=true")||D$("color=always"))p6=1;if("FORCE_COLOR"in n0)if(n0.FORCE_COLOR==="true")p6=1;else if(n0.FORCE_COLOR==="false")p6=0;else p6=n0.FORCE_COLOR.length===0?1:Math.min(parseInt(n0.FORCE_COLOR,10),3);function yO(D){if(D===0)return!1;return{level:D,hasBasic:!0,has256:D>=2,has16m:D>=3}}function bO(D,$){if(p6===0)return 0;if(D$("color=16m")||D$("color=full")||D$("color=truecolor"))return 3;if(D$("color=256"))return 2;if(D&&!$&&p6===void 0)return 0;let X=p6||0;if(n0.TERM==="dumb")return X;if(process.platform==="win32"){let Y=oFD.release().split(".");if(Number(Y[0])>=10&&Number(Y[2])>=10586)return Number(Y[2])>=14931?3:2;return 1}if("CI"in n0){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some((Y)=>(Y in n0))||n0.CI_NAME==="codeship")return 1;return X}if("TEAMCITY_VERSION"in n0)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(n0.TEAMCITY_VERSION)?1:0;if(n0.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in n0){let Y=parseInt((n0.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(n0.TERM_PROGRAM){case"iTerm.app":return Y>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(n0.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(n0.TERM))return 1;if("COLORTERM"in n0)return 1;return X}function aFD(D){let $=bO(D,D&&D.isTTY);return yO($)}WS.exports={supportsColor:aFD,stdout:yO(bO(!0,BS.isatty(1))),stderr:yO(bO(!0,BS.isatty(2)))}});var LS=T((VS,xY)=>{var tFD=i("tty"),PY=i("util");VS.init=YZD;VS.log=$ZD;VS.formatArgs=eFD;VS.save=XZD;VS.load=JZD;VS.useColors=sFD;VS.destroy=PY.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");VS.colors=[6,2,3,4,5,1];try{let D=KS();if(D&&(D.stderr||D).level>=2)VS.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch(D){}VS.inspectOpts=Object.keys(process.env).filter((D)=>{return/^debug_/i.test(D)}).reduce((D,$)=>{let X=$.substring(6).toLowerCase().replace(/_([a-z])/g,(J,Q)=>{return Q.toUpperCase()}),Y=process.env[$];if(/^(yes|on|true|enabled)$/i.test(Y))Y=!0;else if(/^(no|off|false|disabled)$/i.test(Y))Y=!1;else if(Y==="null")Y=null;else Y=Number(Y);return D[X]=Y,D},{});function sFD(){return"colors"in VS.inspectOpts?Boolean(VS.inspectOpts.colors):tFD.isatty(process.stderr.fd)}function eFD(D){let{namespace:$,useColors:X}=this;if(X){let Y=this.color,J="\x1B[3"+(Y<8?Y:"8;5;"+Y),Q=` ${J};1m${$} \x1B[0m`;D[0]=Q+D[0].split(`
|
|
132
132
|
`).join(`
|
|
133
133
|
`+Q),D.push(J+"m+"+xY.exports.humanize(this.diff)+"\x1B[0m")}else D[0]=DZD()+$+" "+D[0]}function DZD(){if(VS.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function $ZD(...D){return process.stderr.write(PY.formatWithOptions(VS.inspectOpts,...D)+`
|
|
134
134
|
`)}function XZD(D){if(D)process.env.DEBUG=D;else delete process.env.DEBUG}function JZD(){return process.env.DEBUG}function YZD(D){D.inspectOpts={};let $=Object.keys(VS.inspectOpts);for(let X=0;X<$.length;X++)D.inspectOpts[$[X]]=VS.inspectOpts[$[X]]}xY.exports=fO()(VS);var{formatters:HS}=xY.exports;HS.o=function(D){return this.inspectOpts.colors=this.useColors,PY.inspect(D,this.inspectOpts).split(`
|
|
135
|
-
`).map(($)=>$.trim()).join(" ")};HS.O=function(D){return this.inspectOpts.colors=this.useColors,PY.inspect(D,this.inspectOpts)}});var SY=T((FhD,hO)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)hO.exports=OS();else hO.exports=LS()});var cD=T((qZD)=>{qZD.fromCallback=function(D){return Object.defineProperty(function(...$){if(typeof $[$.length-1]==="function")D.apply(this,$);else return new Promise((X,Y)=>{$.push((J,Q)=>J!=null?Y(J):X(Q)),D.apply(this,$)})},"name",{value:D.name})};qZD.fromPromise=function(D){return Object.defineProperty(function(...$){let X=$[$.length-1];if(typeof X!=="function")return D.apply(this,$);else $.pop(),D.apply(this,$).then((Y)=>X(null,Y),X)},"name",{value:D.name})}});var z1=T((gO)=>{var MS=cD().fromCallback,q1=S0(),WZD=["access","appendFile","chmod","chown","close","copyFile","cp","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","glob","lchmod","lchown","lutimes","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","statfs","symlink","truncate","unlink","utimes","writeFile"].filter((D)=>{return typeof q1[D]==="function"});Object.assign(gO,q1);WZD.forEach((D)=>{gO[D]=MS(q1[D])});gO.exists=function(D,$){if(typeof $==="function")return q1.exists(D,$);return new Promise((X)=>{return q1.exists(D,X)})};gO.read=function(D,$,X,Y,J,Q){if(typeof Q==="function")return q1.read(D,$,X,Y,J,Q);return new Promise((F,Z)=>{q1.read(D,$,X,Y,J,(w,G,U)=>{if(w)return Z(w);F({bytesRead:G,buffer:U})})})};gO.write=function(D,$,...X){if(typeof X[X.length-1]==="function")return q1.write(D,$,...X);return new Promise((Y,J)=>{q1.write(D,$,...X,(Q,F,Z)=>{if(Q)return J(Q);Y({bytesWritten:F,buffer:Z})})})};gO.readv=function(D,$,...X){if(typeof X[X.length-1]==="function")return q1.readv(D,$,...X);return new Promise((Y,J)=>{q1.readv(D,$,...X,(Q,F,Z)=>{if(Q)return J(Q);Y({bytesRead:F,buffers:Z})})})};gO.writev=function(D,$,...X){if(typeof X[X.length-1]==="function")return q1.writev(D,$,...X);return new Promise((Y,J)=>{q1.writev(D,$,...X,(Q,F,Z)=>{if(Q)return J(Q);Y({bytesWritten:F,buffers:Z})})})};if(typeof q1.realpath.native==="function")gO.realpath.native=MS(q1.realpath.native);else process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var AS=T((IZD,IS)=>{var MZD=i("path");IZD.checkPath=function($){if(process.platform==="win32"){if(/[<>:"|?*]/.test($.replace(MZD.parse($).root,""))){let Y=Error(`Path contains invalid characters: ${$}`);throw Y.code="EINVAL",Y}}}});var TS=T((RZD,mO)=>{var RS=z1(),{checkPath:jS}=AS(),ES=(D)=>{let $={mode:511};if(typeof D==="number")return D;return{...$,...D}.mode};RZD.makeDir=async(D,$)=>{return jS(D),RS.mkdir(D,{mode:ES($),recursive:!0})};RZD.makeDirSync=(D,$)=>{return jS(D),RS.mkdirSync(D,{mode:ES($),recursive:!0})}});var V$=T((UhD,CS)=>{var TZD=cD().fromPromise,{makeDir:CZD,makeDirSync:cO}=TS(),dO=TZD(CZD);CS.exports={mkdirs:dO,mkdirsSync:cO,mkdirp:dO,mkdirpSync:cO,ensureDir:dO,ensureDirSync:cO}});var r6=T((OhD,xS)=>{var PZD=cD().fromPromise,PS=z1();function xZD(D){return PS.access(D).then(()=>!0).catch(()=>!1)}xS.exports={pathExists:PZD(xZD),pathExistsSync:PS.existsSync}});var lO=T((qhD,SS)=>{var c9=z1(),SZD=cD().fromPromise;async function uZD(D,$,X){let Y=await c9.open(D,"r+"),J=null;try{await c9.futimes(Y,$,X)}finally{try{await c9.close(Y)}catch(Q){J=Q}}if(J)throw J}function vZD(D,$,X){let Y=c9.openSync(D,"r+");return c9.futimesSync(Y,$,X),c9.closeSync(Y)}SS.exports={utimesMillis:SZD(uZD),utimesMillisSync:vZD}});var Z8=T((zhD,kS)=>{var d9=z1(),
|
|
135
|
+
`).map(($)=>$.trim()).join(" ")};HS.O=function(D){return this.inspectOpts.colors=this.useColors,PY.inspect(D,this.inspectOpts)}});var SY=T((FhD,hO)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)hO.exports=OS();else hO.exports=LS()});var cD=T((qZD)=>{qZD.fromCallback=function(D){return Object.defineProperty(function(...$){if(typeof $[$.length-1]==="function")D.apply(this,$);else return new Promise((X,Y)=>{$.push((J,Q)=>J!=null?Y(J):X(Q)),D.apply(this,$)})},"name",{value:D.name})};qZD.fromPromise=function(D){return Object.defineProperty(function(...$){let X=$[$.length-1];if(typeof X!=="function")return D.apply(this,$);else $.pop(),D.apply(this,$).then((Y)=>X(null,Y),X)},"name",{value:D.name})}});var z1=T((gO)=>{var MS=cD().fromCallback,q1=S0(),WZD=["access","appendFile","chmod","chown","close","copyFile","cp","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","glob","lchmod","lchown","lutimes","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","statfs","symlink","truncate","unlink","utimes","writeFile"].filter((D)=>{return typeof q1[D]==="function"});Object.assign(gO,q1);WZD.forEach((D)=>{gO[D]=MS(q1[D])});gO.exists=function(D,$){if(typeof $==="function")return q1.exists(D,$);return new Promise((X)=>{return q1.exists(D,X)})};gO.read=function(D,$,X,Y,J,Q){if(typeof Q==="function")return q1.read(D,$,X,Y,J,Q);return new Promise((F,Z)=>{q1.read(D,$,X,Y,J,(w,G,U)=>{if(w)return Z(w);F({bytesRead:G,buffer:U})})})};gO.write=function(D,$,...X){if(typeof X[X.length-1]==="function")return q1.write(D,$,...X);return new Promise((Y,J)=>{q1.write(D,$,...X,(Q,F,Z)=>{if(Q)return J(Q);Y({bytesWritten:F,buffer:Z})})})};gO.readv=function(D,$,...X){if(typeof X[X.length-1]==="function")return q1.readv(D,$,...X);return new Promise((Y,J)=>{q1.readv(D,$,...X,(Q,F,Z)=>{if(Q)return J(Q);Y({bytesRead:F,buffers:Z})})})};gO.writev=function(D,$,...X){if(typeof X[X.length-1]==="function")return q1.writev(D,$,...X);return new Promise((Y,J)=>{q1.writev(D,$,...X,(Q,F,Z)=>{if(Q)return J(Q);Y({bytesWritten:F,buffers:Z})})})};if(typeof q1.realpath.native==="function")gO.realpath.native=MS(q1.realpath.native);else process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var AS=T((IZD,IS)=>{var MZD=i("path");IZD.checkPath=function($){if(process.platform==="win32"){if(/[<>:"|?*]/.test($.replace(MZD.parse($).root,""))){let Y=Error(`Path contains invalid characters: ${$}`);throw Y.code="EINVAL",Y}}}});var TS=T((RZD,mO)=>{var RS=z1(),{checkPath:jS}=AS(),ES=(D)=>{let $={mode:511};if(typeof D==="number")return D;return{...$,...D}.mode};RZD.makeDir=async(D,$)=>{return jS(D),RS.mkdir(D,{mode:ES($),recursive:!0})};RZD.makeDirSync=(D,$)=>{return jS(D),RS.mkdirSync(D,{mode:ES($),recursive:!0})}});var V$=T((UhD,CS)=>{var TZD=cD().fromPromise,{makeDir:CZD,makeDirSync:cO}=TS(),dO=TZD(CZD);CS.exports={mkdirs:dO,mkdirsSync:cO,mkdirp:dO,mkdirpSync:cO,ensureDir:dO,ensureDirSync:cO}});var r6=T((OhD,xS)=>{var PZD=cD().fromPromise,PS=z1();function xZD(D){return PS.access(D).then(()=>!0).catch(()=>!1)}xS.exports={pathExists:PZD(xZD),pathExistsSync:PS.existsSync}});var lO=T((qhD,SS)=>{var c9=z1(),SZD=cD().fromPromise;async function uZD(D,$,X){let Y=await c9.open(D,"r+"),J=null;try{await c9.futimes(Y,$,X)}finally{try{await c9.close(Y)}catch(Q){J=Q}}if(J)throw J}function vZD(D,$,X){let Y=c9.openSync(D,"r+");return c9.futimesSync(Y,$,X),c9.closeSync(Y)}SS.exports={utimesMillis:SZD(uZD),utimesMillisSync:vZD}});var Z8=T((zhD,kS)=>{var d9=z1(),i0=i("path"),uS=cD().fromPromise;function _ZD(D,$,X){let Y=X.dereference?(J)=>d9.stat(J,{bigint:!0}):(J)=>d9.lstat(J,{bigint:!0});return Promise.all([Y(D),Y($).catch((J)=>{if(J.code==="ENOENT")return null;throw J})]).then(([J,Q])=>({srcStat:J,destStat:Q}))}function kZD(D,$,X){let Y,J=X.dereference?(F)=>d9.statSync(F,{bigint:!0}):(F)=>d9.lstatSync(F,{bigint:!0}),Q=J(D);try{Y=J($)}catch(F){if(F.code==="ENOENT")return{srcStat:Q,destStat:null};throw F}return{srcStat:Q,destStat:Y}}async function fZD(D,$,X,Y){let{srcStat:J,destStat:Q}=await _ZD(D,$,Y);if(Q){if(L3(J,Q)){let F=i0.basename(D),Z=i0.basename($);if(X==="move"&&F!==Z&&F.toLowerCase()===Z.toLowerCase())return{srcStat:J,destStat:Q,isChangingCase:!0};throw Error("Source and destination must not be the same.")}if(J.isDirectory()&&!Q.isDirectory())throw Error(`Cannot overwrite non-directory '${$}' with directory '${D}'.`);if(!J.isDirectory()&&Q.isDirectory())throw Error(`Cannot overwrite directory '${$}' with non-directory '${D}'.`)}if(J.isDirectory()&&nO(D,$))throw Error(uY(D,$,X));return{srcStat:J,destStat:Q}}function yZD(D,$,X,Y){let{srcStat:J,destStat:Q}=kZD(D,$,Y);if(Q){if(L3(J,Q)){let F=i0.basename(D),Z=i0.basename($);if(X==="move"&&F!==Z&&F.toLowerCase()===Z.toLowerCase())return{srcStat:J,destStat:Q,isChangingCase:!0};throw Error("Source and destination must not be the same.")}if(J.isDirectory()&&!Q.isDirectory())throw Error(`Cannot overwrite non-directory '${$}' with directory '${D}'.`);if(!J.isDirectory()&&Q.isDirectory())throw Error(`Cannot overwrite directory '${$}' with non-directory '${D}'.`)}if(J.isDirectory()&&nO(D,$))throw Error(uY(D,$,X));return{srcStat:J,destStat:Q}}async function vS(D,$,X,Y){let J=i0.resolve(i0.dirname(D)),Q=i0.resolve(i0.dirname(X));if(Q===J||Q===i0.parse(Q).root)return;let F;try{F=await d9.stat(Q,{bigint:!0})}catch(Z){if(Z.code==="ENOENT")return;throw Z}if(L3($,F))throw Error(uY(D,X,Y));return vS(D,$,Q,Y)}function _S(D,$,X,Y){let J=i0.resolve(i0.dirname(D)),Q=i0.resolve(i0.dirname(X));if(Q===J||Q===i0.parse(Q).root)return;let F;try{F=d9.statSync(Q,{bigint:!0})}catch(Z){if(Z.code==="ENOENT")return;throw Z}if(L3($,F))throw Error(uY(D,X,Y));return _S(D,$,Q,Y)}function L3(D,$){return $.ino!==void 0&&$.dev!==void 0&&$.ino===D.ino&&$.dev===D.dev}function nO(D,$){let X=i0.resolve(D).split(i0.sep).filter((J)=>J),Y=i0.resolve($).split(i0.sep).filter((J)=>J);return X.every((J,Q)=>Y[Q]===J)}function uY(D,$,X){return`Cannot ${X} '${D}' to a subdirectory of itself, '${$}'.`}kS.exports={checkPaths:uS(fZD),checkPathsSync:yZD,checkParentPaths:uS(vS),checkParentPathsSync:_S,isSrcSubdir:nO,areIdentical:L3}});var yS=T((BhD,fS)=>{async function bZD(D,$){let X=[];for await(let Y of D)X.push($(Y).then(()=>null,(J)=>J??Error("unknown error")));await Promise.all(X.map((Y)=>Y.then((J)=>{if(J!==null)throw J})))}fS.exports={asyncIteratorConcurrentProcess:bZD}});var cS=T((WhD,mS)=>{var J1=z1(),M3=i("path"),{mkdirs:hZD}=V$(),{pathExists:gZD}=r6(),{utimesMillis:mZD}=lO(),I3=Z8(),{asyncIteratorConcurrentProcess:cZD}=yS();async function dZD(D,$,X={}){if(typeof X==="function")X={filter:X};if(X.clobber="clobber"in X?!!X.clobber:!0,X.overwrite="overwrite"in X?!!X.overwrite:X.clobber,X.preserveTimestamps&&process.arch==="ia32")process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
|
|
136
136
|
|
|
137
137
|
see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0001");let{srcStat:Y,destStat:J}=await I3.checkPaths(D,$,"copy",X);if(await I3.checkParentPaths(D,Y,$,"copy"),!await hS(D,$,X))return;let F=M3.dirname($);if(!await gZD(F))await hZD(F);await gS(J,D,$,X)}async function hS(D,$,X){if(!X.filter)return!0;return X.filter(D,$)}async function gS(D,$,X,Y){let Q=await(Y.dereference?J1.stat:J1.lstat)($);if(Q.isDirectory())return pZD(Q,D,$,X,Y);if(Q.isFile()||Q.isCharacterDevice()||Q.isBlockDevice())return lZD(Q,D,$,X,Y);if(Q.isSymbolicLink())return rZD(D,$,X,Y);if(Q.isSocket())throw Error(`Cannot copy a socket file: ${$}`);if(Q.isFIFO())throw Error(`Cannot copy a FIFO pipe: ${$}`);throw Error(`Unknown file: ${$}`)}async function lZD(D,$,X,Y,J){if(!$)return bS(D,X,Y,J);if(J.overwrite)return await J1.unlink(Y),bS(D,X,Y,J);if(J.errorOnExist)throw Error(`'${Y}' already exists`)}async function bS(D,$,X,Y){if(await J1.copyFile($,X),Y.preserveTimestamps){if(nZD(D.mode))await iZD(X,D.mode);let J=await J1.stat($);await mZD(X,J.atime,J.mtime)}return J1.chmod(X,D.mode)}function nZD(D){return(D&128)===0}function iZD(D,$){return J1.chmod(D,$|128)}async function pZD(D,$,X,Y,J){if(!$)await J1.mkdir(Y);if(await cZD(await J1.opendir(X),async(Q)=>{let F=M3.join(X,Q.name),Z=M3.join(Y,Q.name);if(await hS(F,Z,J)){let{destStat:G}=await I3.checkPaths(F,Z,"copy",J);await gS(G,F,Z,J)}}),!$)await J1.chmod(Y,D.mode)}async function rZD(D,$,X,Y){let J=await J1.readlink($);if(Y.dereference)J=M3.resolve(process.cwd(),J);if(!D)return J1.symlink(J,X);let Q=null;try{Q=await J1.readlink(X)}catch(F){if(F.code==="EINVAL"||F.code==="UNKNOWN")return J1.symlink(J,X);throw F}if(Y.dereference)Q=M3.resolve(process.cwd(),Q);if(J!==Q){if(I3.isSrcSubdir(J,Q))throw Error(`Cannot copy '${J}' to a subdirectory of itself, '${Q}'.`);if(I3.isSrcSubdir(Q,J))throw Error(`Cannot overwrite '${Q}' with '${J}'.`)}return await J1.unlink(X),J1.symlink(J,X)}mS.exports=dZD});var pS=T((KhD,iS)=>{var B1=S0(),A3=i("path"),oZD=V$().mkdirsSync,aZD=lO().utimesMillisSync,R3=Z8();function tZD(D,$,X){if(typeof X==="function")X={filter:X};if(X=X||{},X.clobber="clobber"in X?!!X.clobber:!0,X.overwrite="overwrite"in X?!!X.overwrite:X.clobber,X.preserveTimestamps&&process.arch==="ia32")process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
|
|
138
138
|
|
|
@@ -392,12 +392,12 @@ The organization "${D}" requires all members to have 2FA enabled.`);else H.error
|
|
|
392
392
|
This organization requires all members to have 2FA enabled.`);throw H.error(`
|
|
393
393
|
To regain access:`),H.error(" 1. Go to https://web.capgo.app/settings/account"),H.error(" 2. Enable Two-Factor Authentication on your account"),H.error(" 3. Try your command again"),H.error(`
|
|
394
394
|
For more information, visit: https://capgo.app/docs/webapp/2fa-enforcement/
|
|
395
|
-
`),Error("2FA required for this organization")}async function Bw(D,$){let{error:X,data:Y}=await D.rpc("get_orgs_v7");if(X)throw H.error("Cannot get the list of organizations - exiting"),H.error(`Error ${JSON.stringify(X)}`),Error("Cannot get the list of organizations");let J=(U)=>U?.replace(/^org_/,"")??"",Q=$.map((U)=>J(U)),F=Y.filter((U)=>Q.includes(J(U.role)));if(Y.length===0)throw H.error("Could not get organization please create an organization first"),Error("No organizations available");if(F.length===0)throw H.error(`Could not find organization with roles: ${$.join(" or ")} please create an organization or ask the admin to add you to the organization with this roles`),Error("Could not find organization with required roles");let Z=F.length>1?await t1({message:"Please pick the organization that you want to insert to",options:F.map((U)=>{let O=U.enforcing_2fa&&!U["2fa_has_access"]?" ⚠️ (2FA required)":"";return{value:U.gid,label:`${U.name}${O}`}})}):F[0].gid;if(bD(Z))throw H.error("Canceled organization selection, exiting"),Error("Organization selection cancelled");let w=Z,G=Y.find((U)=>U.gid===w);if(G.enforcing_2fa&&!G["2fa_has_access"])cL(G.name);return H.info(`Using the organization "${G.name}" as the app owner`),G}async function xD(D,$,X=["all"]){await ZTD(D,$,X);let{data:Y,error:J}=await D.rpc("get_user_id",{apikey:$}).single(),Q=(Y||"").toString();if(!Q||J)throw H.error("Cannot auth user with apikey"),Error("Cannot authenticate user with provided API key");return Q}async function
|
|
395
|
+
`),Error("2FA required for this organization")}async function Bw(D,$){let{error:X,data:Y}=await D.rpc("get_orgs_v7");if(X)throw H.error("Cannot get the list of organizations - exiting"),H.error(`Error ${JSON.stringify(X)}`),Error("Cannot get the list of organizations");let J=(U)=>U?.replace(/^org_/,"")??"",Q=$.map((U)=>J(U)),F=Y.filter((U)=>Q.includes(J(U.role)));if(Y.length===0)throw H.error("Could not get organization please create an organization first"),Error("No organizations available");if(F.length===0)throw H.error(`Could not find organization with roles: ${$.join(" or ")} please create an organization or ask the admin to add you to the organization with this roles`),Error("Could not find organization with required roles");let Z=F.length>1?await t1({message:"Please pick the organization that you want to insert to",options:F.map((U)=>{let O=U.enforcing_2fa&&!U["2fa_has_access"]?" ⚠️ (2FA required)":"";return{value:U.gid,label:`${U.name}${O}`}})}):F[0].gid;if(bD(Z))throw H.error("Canceled organization selection, exiting"),Error("Organization selection cancelled");let w=Z,G=Y.find((U)=>U.gid===w);if(G.enforcing_2fa&&!G["2fa_has_access"])cL(G.name);return H.info(`Using the organization "${G.name}" as the app owner`),G}async function xD(D,$,X=["all"]){await ZTD(D,$,X);let{data:Y,error:J}=await D.rpc("get_user_id",{apikey:$}).single(),Q=(Y||"").toString();if(!Q||J)throw H.error("Cannot auth user with apikey"),Error("Cannot authenticate user with provided API key");return Q}async function l0(D,$){let{data:X,error:Y}=await D.from("apps").select("owner_org").eq("app_id",$).single();if(!X||Y)throw H.error(`Cannot get organization id for app id ${$}`),t(Y),Error(`Cannot get organization id for app id ${$}`);return X.owner_org}function t5(D){return new Date(D||"").toLocaleString()}function v8(){if(Ra)return{pm:i5,command:F2,installCommand:`${i5} ${F2}`,runner:bL};let D=e0(a$());return i5=I7(D,"npm"),F2=a2(i5),Ra=!0,bL=uI(D),{pm:i5,command:F2,installCommand:`${i5} ${F2}`,runner:bL}}function ca(D){return G2(D,{withFileTypes:!0}).flatMap((Y)=>{let J=fD(D,Y.name);if(Y.isDirectory())return ca(J);else return J.split(`node_modules${Ea}`)[1]||J})}function da(D){if(!X0(D))return[];try{return G2(D,{withFileTypes:!0}).flatMap((Y)=>{let J=fD(D,Y.name);if(Y.isDirectory())return da(J);else return J})}catch{return[]}}function qTD(D,$){let X=[];if($==="ios"){try{let Q=G2(D);for(let F of Q)if(F.endsWith(".podspec"))X.push(fD(D,F))}catch{}let Y=fD(D,"Package.swift"),J=fD(D,"ios","Package.swift");if(X0(Y))X.push(Y);if(X0(J))X.push(J)}else if($==="android"){let Y=fD(D,"android"),J=fD(Y,"build.gradle"),Q=fD(Y,"build.gradle.kts");if(X0(J))X.push(J);if(X0(Q))X.push(Q)}return X}async function zTD(D){let $=fD(D,"ios"),X=fD(D,"android"),Y=async(F,Z)=>{let w=X0(F)?da(F).filter((q)=>Pa.test(q)):[],G=qTD(D,Z),U=[...w,...G].sort((q,B)=>q.localeCompare(B));if(U.length===0)return;let{createHash:O}=await import("node:crypto"),z=O("sha256");for(let q of U)try{let B=ja(D,q);z.update(B);let W=f0(q);z.update(W)}catch{}return z.digest("hex")},[J,Q]=await Promise.all([Y($,"ios"),Y(X,"android")]);return{ios_checksum:J,android_checksum:Q}}async function dL(D,$){let X=$?$.split(",").map((U)=>U.trim()).filter(Boolean):[],Y;try{Y=await ww("",D)}catch(U){throw H.error("Invalid package.json, JSON parsing failed"),H.error(`json parse error: ${t(U)}`),U instanceof Error?U:Error("Invalid package.json")}let J=D?D.split(",")[0].trim():void 0,Q=!J?e0(a$()):U2.resolve(J).replace(A6,"");if(!Y)throw H.error("Missing dependencies section in package.json"),Error("Missing dependencies section in package.json");for(let[U,O]of Object.entries(Y))if(typeof O!=="string")throw H.error(`Invalid dependency ${U}: ${O}, expected string, got ${typeof O}`),Error(`Invalid dependency ${U}: expected string version`);let F=X.length===0?[fD(a$(),"node_modules")]:X;if(!F.some((U)=>X0(U))){let U=I7(Q,"npm"),O=a2(U);throw H.error(`Missing node_modules folder at ${F.join(", ")}, please run ${U} ${O}`),Error("Missing node_modules folder")}let w=!1,G=await Promise.all(Array.from(Y.entries()).map(async([U,O])=>{let z=!1,q=!1,B=O,W;for(let I of F){let K=fD(I,U);if(X0(K)){z=!0,W=K;try{let N=fD(K,A6);if(X0(N)){let V=JSON.parse(f0(N,"utf-8"));if(V.version)B=V.version}}catch{}try{if(ca(K).some((V)=>Pa.test(V))){q=!0;break}}catch(N){throw H.error(`Error reading node_modules files for ${U} package in ${I}`),H.error(t(N)),N instanceof Error?N:Error(`Error reading node_modules files for ${U}`)}}}if(!z){w=!0;let I=I7(Q,"npm"),K=a2(I);return H.error(`Missing dependency ${U}, please run ${I} ${K}`),{name:U,version:O}}let L,M;if(q&&W){let I=await zTD(W);L=I.ios_checksum,M=I.android_checksum}return{name:U,version:B,native:q,ios_checksum:L,android_checksum:M}})).catch(()=>[]);if(w||G.find((U)=>U.native===void 0))throw H.error("Missing dependencies or invalid dependencies"),H.error("If you use monorepo, workspace or any special package manager you can use the --package-json [path,] and --node-modules [path,] options to make the command work properly"),Error("Missing dependencies or invalid dependencies");return G}async function BTD(D,$,X){let{data:Y,error:J}=await D.from("channels").select("version(checksum)").eq("name",X).eq("app_id",$).single(),Q=Y;if(J||Q===null||!Q.version||!Q.version.checksum)return null;return Q.version.checksum}function WTD(D){if(!D)throw H.error("Error parsing native packages, perhaps the metadata does not exist in Capgo?"),Error("Error parsing native packages");for(let X of D){let Y=io.safeParse(X);if(!Y.success){let J=Y.error.issues.map((Q)=>`${Q.path.join(".")}: ${Q.message}`).join(", ");throw H.error(`Invalid remote native package data: ${J}`),Error(`Invalid remote native package data: ${J}`)}}return new Map(D.map((X)=>[X.name,X]))}async function la(D,$,X){let{data:Y,error:J}=await D.from("channels").select(`version (
|
|
396
396
|
native_packages
|
|
397
397
|
)`).eq("name",X).eq("app_id",$).single();if(J)throw H.error(`Error fetching native packages: ${J.message}`),Error(`Error fetching native packages: ${J.message}`);return WTD(Y.version.native_packages??[])}async function na(D,$,X,Y){let J=A0();J.start(`Checking bundle checksum compatibility with channel ${X}`);let Q=await BTD(D,$,X);if(!Q){J.stop(`No checksum found for channel ${X}, the bundle will be uploaded`);return}if(Q&&Q===Y)throw J.stop("Checksum check failed"),H.error(`Cannot upload the same bundle content.
|
|
398
398
|
Current bundle checksum matches remote bundle for channel ${X}
|
|
399
399
|
Did you build your app before uploading?
|
|
400
|
-
PS: You can ignore this check with "--ignore-checksum-check"`),Error("Cannot upload the same bundle content");J.stop(`Checksum compatible with ${X} channel`)}function mD(D,$){return D||$?.plugins?.CapacitorUpdater?.appId||$?.appId}function _8(D){let $=[];if(!D.localVersion)return{compatible:!0,reasons:[],message:"Package only exists on remote (will be removed)"};if(!D.remoteVersion)return $.push("new_plugin"),{compatible:!1,reasons:$,message:"New native plugin added (requires app store update)"};let X=!1;try{let F=JJ(D.localVersion),Z=JJ(D.remoteVersion);X=oI(F,Z)}catch{X=!1}if(!X)$.push("version_mismatch");let Y=D.localIosChecksum&&D.remoteIosChecksum&&D.localIosChecksum!==D.remoteIosChecksum,J=D.localAndroidChecksum&&D.remoteAndroidChecksum&&D.localAndroidChecksum!==D.remoteAndroidChecksum;if(Y&&J)$.push("both_platforms_changed");else if(Y)$.push("ios_code_changed");else if(J)$.push("android_code_changed");if($.length===0)return{compatible:!0,reasons:[],message:"Compatible"};let Q=[];for(let F of $)switch(F){case"version_mismatch":Q.push(`version changed: ${D.remoteVersion} → ${D.localVersion}`);break;case"ios_code_changed":Q.push("iOS native code changed");break;case"android_code_changed":Q.push("Android native code changed");break;case"both_platforms_changed":Q.push("iOS and Android native code changed");break;case"new_plugin":Q.push("new plugin (requires app store update)");break;case"removed_plugin":Q.push("plugin removed");break}return{compatible:!1,reasons:$,message:Q.join(", ")}}function L4(D){return _8(D).compatible}async function Ww(D,$,X,Y,J){let Q=await dL(Y,J),F=await la(D,$,X),Z=Q.filter((G)=>!!G.native).map((G)=>{let U=F.get(G.name);if(U)return{name:G.name,localVersion:G.version,remoteVersion:U.version,localIosChecksum:G.ios_checksum,remoteIosChecksum:U.ios_checksum,localAndroidChecksum:G.android_checksum,remoteAndroidChecksum:U.android_checksum};return{name:G.name,localVersion:G.version,remoteVersion:void 0,localIosChecksum:G.ios_checksum,localAndroidChecksum:G.android_checksum}}),w=[...F].filter(([G])=>Q.find((U)=>U.name===G)===void 0).map(([G,U])=>({name:G,localVersion:void 0,remoteVersion:U.version,remoteIosChecksum:U.ios_checksum,remoteAndroidChecksum:U.android_checksum}));return Z.push(...w),{finalCompatibility:Z,localDependencies:Q}}async function lL(D,$,X,Y){let J=await la(D,$,X),Q=Y.map((Z)=>{let w=J.get(Z.name);if(w)return{name:Z.name,localVersion:Z.version,remoteVersion:w.version,localIosChecksum:Z.ios_checksum,remoteIosChecksum:w.ios_checksum,localAndroidChecksum:Z.android_checksum,remoteAndroidChecksum:w.android_checksum};return{name:Z.name,localVersion:Z.version,remoteVersion:void 0,localIosChecksum:Z.ios_checksum,localAndroidChecksum:Z.android_checksum}}),F=[...J].filter(([Z])=>Y.find((w)=>w.name===Z)===void 0).map(([Z,w])=>({name:Z,localVersion:void 0,remoteVersion:w.version,remoteIosChecksum:w.ios_checksum,remoteAndroidChecksum:w.android_checksum}));return Q.push(...F),{finalCompatibility:Q,localDependencies:Y}}function KTD(D){if(!X0(D))return null;try{return JSON.parse(f0(D,"utf-8"))}catch{return null}}function Z2(D){if(!D)return!1;return/@capgo\/capacitor-updater|CapgoCapacitorUpdater|CapacitorUpdaterPlugin/.test(D)}function HTD(D,$){if(!$)return fD(D,A6);return U2.isAbsolute($)?$:p5(D,$)}function VTD(D=a$(),$){let X=HTD(D,$),Y=U2.basename(X)===A6?w2(X):X,J=[fD(Y,"ios","App"),fD(D,"ios","App")].find((x)=>X0(x));if(!J)return{shouldCheck:!1,valid:!0,details:[]};let Q=KTD(X),F={...Q?.dependencies,...Q?.devDependencies,...Q?.optionalDependencies},Z=Object.prototype.hasOwnProperty.call(F,"@capgo/capacitor-updater"),w=[Y,D].some((x)=>X0(fD(x,"node_modules","@capgo","capacitor-updater"))),G=fD(J,"Podfile"),U=fD(J,"CapApp-SPM","Package.swift"),O=X0(G)?f0(G,"utf-8"):void 0,z=X0(U)?f0(U,"utf-8"):void 0,q=Z2(O)||Z2(z),B=fD(J,"Podfile.lock"),W=fD(J,"App.xcworkspace","xcshareddata","swiftpm","Package.resolved"),L=fD(J,"App","capacitor.plugins.json"),M=X0(B)?f0(B,"utf-8"):void 0,I=X0(W)?f0(W,"utf-8"):void 0,K=X0(L)?f0(L,"utf-8"):void 0,N=Z2(M)||Z2(I)||Z2(K);if(!(Z||w||q||N))return{shouldCheck:!1,valid:!0,details:[]};let R=[];if(!q)R.push(`Missing @capgo/capacitor-updater in iOS dependency files (${G} or ${U})`);if(!N)R.push(`Missing @capgo/capacitor-updater in iOS native project outputs (${B}, ${W}, or ${L})`);return{shouldCheck:!0,valid:q&&N,details:R}}async function ia(D,$,X,Y){let J=await c0({message:"Would you like to sync your project with Capacitor now? This is recommended to ensure encrypted updates work properly."});if(bD(J)){if(D&&$&&X)await YS("onboarding-v2",$,X,"canceled","\uD83E\uDD37");throw H.error("Canceled Capacitor sync"),Error("Capacitor sync cancelled")}if(J){let Q=v8(),F=A0();F.start("Running the command...");let Z;try{await new Promise((w,G)=>{let U=aED(Q.runner,["cap","sync"],{stdio:"pipe"});U.on("close",(O)=>{if(O===0)w();else G(Error(`Command failed with exit code ${O}`))}),U.on("error",(O)=>{G(O)})})}catch(w){Z=w,H.error(`Failed to run Capacitor sync: ${w}`),H.warn(`Please run "${Q.runner} cap sync" manually to ensure encrypted updates work properly`)}if(Y?.validateIosUpdater){let w=VTD(a$(),Y.packageJsonPath);if(w.shouldCheck&&!w.valid){F.stop("iOS sync check failed ❌"),H.error("Capgo iOS dependency sync verification failed.");for(let G of w.details)H.error(G);throw H.error("Stop here to avoid testing on a broken native iOS project."),H.warn("Best fix: reset the iOS folder, then run sync again."),H.info(`1. ${Q.runner} cap rm ios`),H.info(`2. ${Q.runner} cap add ios`),H.info(`3. ${Q.runner} cap sync ios`),Error("iOS sync validation failed. Reset your iOS folder and retry.")}}if(Z){F.stop("Error");return}F.stop("Capacitor sync completed ✅")}else{let Q=v8();H.warn("⚠️ Important: If you upload encrypted bundles without syncing, updates will fail!"),H.info(`Remember to run "${Q.runner} cap sync" before uploading encrypted bundles`)}}var H4,hL,Ta,Qw,r5=".capgo_key",i1=".capgo_key_v2",Fw,R6,La="https://capgo.app",Ma="https://files.capgo.app",Ia="https://api.capgo.app",Aa="https://console.capgo.app",gL=120000,$TD=20971520,XTD=1073741824,JTD=103809024,A6="package.json",o5,Pa,A1,a5=(D,$)=>D>=$,Uw="5.10.0",Ow="6.25.0",O2="7.0.30",Ra=!1,i5="npm",F2="install",bL="npx";var kD=o(()=>{vI();vD();X6();IE();QS();V3();BF();po();eZ();H4=V0(o2(),1),hL=V0(EU(),1),Ta=V0(ST(),1),Qw=V0(jY(),1),Fw=`${r5}.pub`,R6=`${i1}.pub`,o5=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-z-][0-9a-z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-z-][0-9a-z-]*))*))?(?:\+([0-9a-z-]+(?:\.[0-9a-z-]+)*))?$/i;Pa=/([A-Za-z0-9]+)\.(java|swift|kt|scala)$/;((F)=>{F[F.none=0]="none";F[F.read=1]="read";F[F.upload=2]="upload";F[F.write=3]="write";F[F.admin=4]="admin";F[F.super_admin=5]="super_admin"})(A1||={})});var j6=T((CoD,Lt)=>{var Vt=["nodebuffer","arraybuffer","fragments"],Nt=typeof Blob<"u";if(Nt)Vt.push("blob");Lt.exports={BINARY_TYPES:Vt,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Nt,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var q2=T((PoD,Lw)=>{var{EMPTY_BUFFER:_TD}=j6(),rL=Buffer[Symbol.species];function kTD(D,$){if(D.length===0)return _TD;if(D.length===1)return D[0];let X=Buffer.allocUnsafe($),Y=0;for(let J=0;J<D.length;J++){let Q=D[J];X.set(Q,Y),Y+=Q.length}if(Y<$)return new rL(X.buffer,X.byteOffset,Y);return X}function Mt(D,$,X,Y,J){for(let Q=0;Q<J;Q++)X[Y+Q]=D[Q]^$[Q&3]}function It(D,$){for(let X=0;X<D.length;X++)D[X]^=$[X&3]}function fTD(D){if(D.length===D.buffer.byteLength)return D.buffer;return D.buffer.slice(D.byteOffset,D.byteOffset+D.length)}function oL(D){if(oL.readOnly=!0,Buffer.isBuffer(D))return D;let $;if(D instanceof ArrayBuffer)$=new rL(D);else if(ArrayBuffer.isView(D))$=new rL(D.buffer,D.byteOffset,D.byteLength);else $=Buffer.from(D),oL.readOnly=!1;return $}Lw.exports={concat:kTD,mask:Mt,toArrayBuffer:fTD,toBuffer:oL,unmask:It};if(!process.env.WS_NO_BUFFER_UTIL)try{let D=(()=>{throw new Error("Cannot require module "+"bufferutil");})();Lw.exports.mask=function($,X,Y,J,Q){if(Q<48)Mt($,X,Y,J,Q);else D.mask($,X,Y,J,Q)},Lw.exports.unmask=function($,X){if($.length<32)It($,X);else D.unmask($,X)}}catch(D){}});var Et=T((xoD,jt)=>{var At=Symbol("kDone"),aL=Symbol("kRun");class Rt{constructor(D){this[At]=()=>{this.pending--,this[aL]()},this.concurrency=D||1/0,this.jobs=[],this.pending=0}add(D){this.jobs.push(D),this[aL]()}[aL](){if(this.pending===this.concurrency)return;if(this.jobs.length){let D=this.jobs.shift();this.pending++,D(this[At])}}}jt.exports=Rt});var B2=T((SoD,St)=>{var z2=i("zlib"),Tt=q2(),yTD=Et(),{kStatusCode:Ct}=j6(),bTD=Buffer[Symbol.species],hTD=Buffer.from([0,0,255,255]),Iw=Symbol("permessage-deflate"),E6=Symbol("total-length"),D7=Symbol("callback"),M4=Symbol("buffers"),$7=Symbol("error"),Mw;class Pt{constructor(D,$,X){if(this._maxPayload=X|0,this._options=D||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!$,this._deflate=null,this._inflate=null,this.params=null,!Mw){let Y=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Mw=new yTD(Y)}}static get extensionName(){return"permessage-deflate"}offer(){let D={};if(this._options.serverNoContextTakeover)D.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)D.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)D.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)D.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)D.client_max_window_bits=!0;return D}accept(D){return D=this.normalizeParams(D),this.params=this._isServer?this.acceptAsServer(D):this.acceptAsClient(D),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let D=this._deflate[D7];if(this._deflate.close(),this._deflate=null,D)D(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(D){let $=this._options,X=D.find((Y)=>{if($.serverNoContextTakeover===!1&&Y.server_no_context_takeover||Y.server_max_window_bits&&($.serverMaxWindowBits===!1||typeof $.serverMaxWindowBits==="number"&&$.serverMaxWindowBits>Y.server_max_window_bits)||typeof $.clientMaxWindowBits==="number"&&!Y.client_max_window_bits)return!1;return!0});if(!X)throw Error("None of the extension offers can be accepted");if($.serverNoContextTakeover)X.server_no_context_takeover=!0;if($.clientNoContextTakeover)X.client_no_context_takeover=!0;if(typeof $.serverMaxWindowBits==="number")X.server_max_window_bits=$.serverMaxWindowBits;if(typeof $.clientMaxWindowBits==="number")X.client_max_window_bits=$.clientMaxWindowBits;else if(X.client_max_window_bits===!0||$.clientMaxWindowBits===!1)delete X.client_max_window_bits;return X}acceptAsClient(D){let $=D[0];if(this._options.clientNoContextTakeover===!1&&$.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!$.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")$.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&$.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return $}normalizeParams(D){return D.forEach(($)=>{Object.keys($).forEach((X)=>{let Y=$[X];if(Y.length>1)throw Error(`Parameter "${X}" must have only a single value`);if(Y=Y[0],X==="client_max_window_bits"){if(Y!==!0){let J=+Y;if(!Number.isInteger(J)||J<8||J>15)throw TypeError(`Invalid value for parameter "${X}": ${Y}`);Y=J}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${X}": ${Y}`)}else if(X==="server_max_window_bits"){let J=+Y;if(!Number.isInteger(J)||J<8||J>15)throw TypeError(`Invalid value for parameter "${X}": ${Y}`);Y=J}else if(X==="client_no_context_takeover"||X==="server_no_context_takeover"){if(Y!==!0)throw TypeError(`Invalid value for parameter "${X}": ${Y}`)}else throw Error(`Unknown parameter "${X}"`);$[X]=Y})}),D}decompress(D,$,X){Mw.add((Y)=>{this._decompress(D,$,(J,Q)=>{Y(),X(J,Q)})})}compress(D,$,X){Mw.add((Y)=>{this._compress(D,$,(J,Q)=>{Y(),X(J,Q)})})}_decompress(D,$,X){let Y=this._isServer?"client":"server";if(!this._inflate){let J=`${Y}_max_window_bits`,Q=typeof this.params[J]!=="number"?z2.Z_DEFAULT_WINDOWBITS:this.params[J];this._inflate=z2.createInflateRaw({...this._options.zlibInflateOptions,windowBits:Q}),this._inflate[Iw]=this,this._inflate[E6]=0,this._inflate[M4]=[],this._inflate.on("error",mTD),this._inflate.on("data",xt)}if(this._inflate[D7]=X,this._inflate.write(D),$)this._inflate.write(hTD);this._inflate.flush(()=>{let J=this._inflate[$7];if(J){this._inflate.close(),this._inflate=null,X(J);return}let Q=Tt.concat(this._inflate[M4],this._inflate[E6]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[E6]=0,this._inflate[M4]=[],$&&this.params[`${Y}_no_context_takeover`])this._inflate.reset();X(null,Q)})}_compress(D,$,X){let Y=this._isServer?"server":"client";if(!this._deflate){let J=`${Y}_max_window_bits`,Q=typeof this.params[J]!=="number"?z2.Z_DEFAULT_WINDOWBITS:this.params[J];this._deflate=z2.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:Q}),this._deflate[E6]=0,this._deflate[M4]=[],this._deflate.on("data",gTD)}this._deflate[D7]=X,this._deflate.write(D),this._deflate.flush(z2.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let J=Tt.concat(this._deflate[M4],this._deflate[E6]);if($)J=new bTD(J.buffer,J.byteOffset,J.length-4);if(this._deflate[D7]=null,this._deflate[E6]=0,this._deflate[M4]=[],$&&this.params[`${Y}_no_context_takeover`])this._deflate.reset();X(null,J)})}}St.exports=Pt;function gTD(D){this[M4].push(D),this[E6]+=D.length}function xt(D){if(this[E6]+=D.length,this[Iw]._maxPayload<1||this[E6]<=this[Iw]._maxPayload){this[M4].push(D);return}this[$7]=RangeError("Max payload size exceeded"),this[$7].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[$7][Ct]=1009,this.removeListener("data",xt),this.reset()}function mTD(D){if(this[Iw]._inflate=null,this[$7]){this[D7](this[$7]);return}D[Ct]=1007,this[D7](D)}});var X7=T((uoD,Aw)=>{var{isUtf8:ut}=i("buffer"),{hasBlob:cTD}=j6(),dTD=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function lTD(D){return D>=1000&&D<=1014&&D!==1004&&D!==1005&&D!==1006||D>=3000&&D<=4999}function tL(D){let $=D.length,X=0;while(X<$)if((D[X]&128)===0)X++;else if((D[X]&224)===192){if(X+1===$||(D[X+1]&192)!==128||(D[X]&254)===192)return!1;X+=2}else if((D[X]&240)===224){if(X+2>=$||(D[X+1]&192)!==128||(D[X+2]&192)!==128||D[X]===224&&(D[X+1]&224)===128||D[X]===237&&(D[X+1]&224)===160)return!1;X+=3}else if((D[X]&248)===240){if(X+3>=$||(D[X+1]&192)!==128||(D[X+2]&192)!==128||(D[X+3]&192)!==128||D[X]===240&&(D[X+1]&240)===128||D[X]===244&&D[X+1]>143||D[X]>244)return!1;X+=4}else return!1;return!0}function nTD(D){return cTD&&typeof D==="object"&&typeof D.arrayBuffer==="function"&&typeof D.type==="string"&&typeof D.stream==="function"&&(D[Symbol.toStringTag]==="Blob"||D[Symbol.toStringTag]==="File")}Aw.exports={isBlob:nTD,isValidStatusCode:lTD,isValidUTF8:tL,tokenChars:dTD};if(ut)Aw.exports.isValidUTF8=function(D){return D.length<24?tL(D):ut(D)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let D=(()=>{throw new Error("Cannot require module "+"utf-8-validate");})();Aw.exports.isValidUTF8=function($){return $.length<32?tL($):D($)}}catch(D){}});var eL=T((voD,yt)=>{var{Writable:iTD}=i("stream"),vt=B2(),{BINARY_TYPES:pTD,EMPTY_BUFFER:_t,kStatusCode:rTD,kWebSocket:oTD}=j6(),{concat:sL,toArrayBuffer:aTD,unmask:tTD}=q2(),{isValidStatusCode:sTD,isValidUTF8:kt}=X7(),Rw=Buffer[Symbol.species];class ft extends iTD{constructor(D={}){super();this._allowSynchronousEvents=D.allowSynchronousEvents!==void 0?D.allowSynchronousEvents:!0,this._binaryType=D.binaryType||pTD[0],this._extensions=D.extensions||{},this._isServer=!!D.isServer,this._maxPayload=D.maxPayload|0,this._skipUTF8Validation=!!D.skipUTF8Validation,this[oTD]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(D,$,X){if(this._opcode===8&&this._state==0)return X();this._bufferedBytes+=D.length,this._buffers.push(D),this.startLoop(X)}consume(D){if(this._bufferedBytes-=D,D===this._buffers[0].length)return this._buffers.shift();if(D<this._buffers[0].length){let X=this._buffers[0];return this._buffers[0]=new Rw(X.buffer,X.byteOffset+D,X.length-D),new Rw(X.buffer,X.byteOffset,D)}let $=Buffer.allocUnsafe(D);do{let X=this._buffers[0],Y=$.length-D;if(D>=X.length)$.set(this._buffers.shift(),Y);else $.set(new Uint8Array(X.buffer,X.byteOffset,D),Y),this._buffers[0]=new Rw(X.buffer,X.byteOffset+D,X.length-D);D-=X.length}while(D>0);return $}startLoop(D){this._loop=!0;do switch(this._state){case 0:this.getInfo(D);break;case 1:this.getPayloadLength16(D);break;case 2:this.getPayloadLength64(D);break;case 3:this.getMask();break;case 4:this.getData(D);break;case 5:case 6:this._loop=!1;return}while(this._loop);if(!this._errored)D()}getInfo(D){if(this._bufferedBytes<2){this._loop=!1;return}let $=this.consume(2);if(($[0]&48)!==0){let Y=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");D(Y);return}let X=($[0]&64)===64;if(X&&!this._extensions[vt.extensionName]){let Y=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");D(Y);return}if(this._fin=($[0]&128)===128,this._opcode=$[0]&15,this._payloadLength=$[1]&127,this._opcode===0){if(X){let Y=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");D(Y);return}if(!this._fragmented){let Y=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");D(Y);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let Y=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");D(Y);return}this._compressed=X}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let Y=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");D(Y);return}if(X){let Y=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");D(Y);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let Y=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");D(Y);return}}else{let Y=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");D(Y);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=($[1]&128)===128,this._isServer){if(!this._masked){let Y=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");D(Y);return}}else if(this._masked){let Y=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");D(Y);return}if(this._payloadLength===126)this._state=1;else if(this._payloadLength===127)this._state=2;else this.haveLength(D)}getPayloadLength16(D){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(D)}getPayloadLength64(D){if(this._bufferedBytes<8){this._loop=!1;return}let $=this.consume(8),X=$.readUInt32BE(0);if(X>Math.pow(2,21)-1){let Y=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");D(Y);return}this._payloadLength=X*Math.pow(2,32)+$.readUInt32BE(4),this.haveLength(D)}haveLength(D){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let $=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");D($);return}}if(this._masked)this._state=3;else this._state=4}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=4}getData(D){let $=_t;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if($=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)tTD($,this._mask)}if(this._opcode>7){this.controlMessage($,D);return}if(this._compressed){this._state=5,this.decompress($,D);return}if($.length)this._messageLength=this._totalPayloadLength,this._fragments.push($);this.dataMessage(D)}decompress(D,$){this._extensions[vt.extensionName].decompress(D,this._fin,(Y,J)=>{if(Y)return $(Y);if(J.length){if(this._messageLength+=J.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let Q=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");$(Q);return}this._fragments.push(J)}if(this.dataMessage($),this._state===0)this.startLoop($)})}dataMessage(D){if(!this._fin){this._state=0;return}let $=this._messageLength,X=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let Y;if(this._binaryType==="nodebuffer")Y=sL(X,$);else if(this._binaryType==="arraybuffer")Y=aTD(sL(X,$));else if(this._binaryType==="blob")Y=new Blob(X);else Y=X;if(this._allowSynchronousEvents)this.emit("message",Y,!0),this._state=0;else this._state=6,setImmediate(()=>{this.emit("message",Y,!0),this._state=0,this.startLoop(D)})}else{let Y=sL(X,$);if(!this._skipUTF8Validation&&!kt(Y)){let J=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");D(J);return}if(this._state===5||this._allowSynchronousEvents)this.emit("message",Y,!1),this._state=0;else this._state=6,setImmediate(()=>{this.emit("message",Y,!1),this._state=0,this.startLoop(D)})}}controlMessage(D,$){if(this._opcode===8){if(D.length===0)this._loop=!1,this.emit("conclude",1005,_t),this.end();else{let X=D.readUInt16BE(0);if(!sTD(X)){let J=this.createError(RangeError,`invalid status code ${X}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");$(J);return}let Y=new Rw(D.buffer,D.byteOffset+2,D.length-2);if(!this._skipUTF8Validation&&!kt(Y)){let J=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");$(J);return}this._loop=!1,this.emit("conclude",X,Y),this.end()}this._state=0;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",D),this._state=0;else this._state=6,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",D),this._state=0,this.startLoop($)})}createError(D,$,X,Y,J){this._loop=!1,this._errored=!0;let Q=new D(X?`Invalid WebSocket frame: ${$}`:$);return Error.captureStackTrace(Q,this.createError),Q.code=J,Q[rTD]=Y,Q}}yt.exports=ft});var $M=T((koD,gt)=>{var{Duplex:_oD}=i("stream"),{randomFillSync:eTD}=i("crypto"),bt=B2(),{EMPTY_BUFFER:DCD,kWebSocket:$CD,NOOP:XCD}=j6(),{isBlob:J7,isValidStatusCode:JCD}=X7(),{mask:ht,toBuffer:f8}=q2(),U$=Symbol("kByteLength"),YCD=Buffer.alloc(4),y8,Y7=8192,j$=0,QCD=1,FCD=2;class I4{constructor(D,$,X){if(this._extensions=$||{},X)this._generateMask=X,this._maskBuffer=Buffer.alloc(4);this._socket=D,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=j$,this.onerror=XCD,this[$CD]=void 0}static frame(D,$){let X,Y=!1,J=2,Q=!1;if($.mask){if(X=$.maskBuffer||YCD,$.generateMask)$.generateMask(X);else{if(Y7===8192){if(y8===void 0)y8=Buffer.alloc(8192);eTD(y8,0,8192),Y7=0}X[0]=y8[Y7++],X[1]=y8[Y7++],X[2]=y8[Y7++],X[3]=y8[Y7++]}Q=(X[0]|X[1]|X[2]|X[3])===0,J=6}let F;if(typeof D==="string")if((!$.mask||Q)&&$[U$]!==void 0)F=$[U$];else D=Buffer.from(D),F=D.length;else F=D.length,Y=$.mask&&$.readOnly&&!Q;let Z=F;if(F>=65536)J+=8,Z=127;else if(F>125)J+=2,Z=126;let w=Buffer.allocUnsafe(Y?F+J:J);if(w[0]=$.fin?$.opcode|128:$.opcode,$.rsv1)w[0]|=64;if(w[1]=Z,Z===126)w.writeUInt16BE(F,2);else if(Z===127)w[2]=w[3]=0,w.writeUIntBE(F,4,6);if(!$.mask)return[w,D];if(w[1]|=128,w[J-4]=X[0],w[J-3]=X[1],w[J-2]=X[2],w[J-1]=X[3],Q)return[w,D];if(Y)return ht(D,X,w,J,F),[w];return ht(D,X,D,0,F),[w,D]}close(D,$,X,Y){let J;if(D===void 0)J=DCD;else if(typeof D!=="number"||!JCD(D))throw TypeError("First argument must be a valid error code number");else if($===void 0||!$.length)J=Buffer.allocUnsafe(2),J.writeUInt16BE(D,0);else{let F=Buffer.byteLength($);if(F>123)throw RangeError("The message must not be greater than 123 bytes");if(J=Buffer.allocUnsafe(2+F),J.writeUInt16BE(D,0),typeof $==="string")J.write($,2);else J.set($,2)}let Q={[U$]:J.length,fin:!0,generateMask:this._generateMask,mask:X,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==j$)this.enqueue([this.dispatch,J,!1,Q,Y]);else this.sendFrame(I4.frame(J,Q),Y)}ping(D,$,X){let Y,J;if(typeof D==="string")Y=Buffer.byteLength(D),J=!1;else if(J7(D))Y=D.size,J=!1;else D=f8(D),Y=D.length,J=f8.readOnly;if(Y>125)throw RangeError("The data size must not be greater than 125 bytes");let Q={[U$]:Y,fin:!0,generateMask:this._generateMask,mask:$,maskBuffer:this._maskBuffer,opcode:9,readOnly:J,rsv1:!1};if(J7(D))if(this._state!==j$)this.enqueue([this.getBlobData,D,!1,Q,X]);else this.getBlobData(D,!1,Q,X);else if(this._state!==j$)this.enqueue([this.dispatch,D,!1,Q,X]);else this.sendFrame(I4.frame(D,Q),X)}pong(D,$,X){let Y,J;if(typeof D==="string")Y=Buffer.byteLength(D),J=!1;else if(J7(D))Y=D.size,J=!1;else D=f8(D),Y=D.length,J=f8.readOnly;if(Y>125)throw RangeError("The data size must not be greater than 125 bytes");let Q={[U$]:Y,fin:!0,generateMask:this._generateMask,mask:$,maskBuffer:this._maskBuffer,opcode:10,readOnly:J,rsv1:!1};if(J7(D))if(this._state!==j$)this.enqueue([this.getBlobData,D,!1,Q,X]);else this.getBlobData(D,!1,Q,X);else if(this._state!==j$)this.enqueue([this.dispatch,D,!1,Q,X]);else this.sendFrame(I4.frame(D,Q),X)}send(D,$,X){let Y=this._extensions[bt.extensionName],J=$.binary?2:1,Q=$.compress,F,Z;if(typeof D==="string")F=Buffer.byteLength(D),Z=!1;else if(J7(D))F=D.size,Z=!1;else D=f8(D),F=D.length,Z=f8.readOnly;if(this._firstFragment){if(this._firstFragment=!1,Q&&Y&&Y.params[Y._isServer?"server_no_context_takeover":"client_no_context_takeover"])Q=F>=Y._threshold;this._compress=Q}else Q=!1,J=0;if($.fin)this._firstFragment=!0;let w={[U$]:F,fin:$.fin,generateMask:this._generateMask,mask:$.mask,maskBuffer:this._maskBuffer,opcode:J,readOnly:Z,rsv1:Q};if(J7(D))if(this._state!==j$)this.enqueue([this.getBlobData,D,this._compress,w,X]);else this.getBlobData(D,this._compress,w,X);else if(this._state!==j$)this.enqueue([this.dispatch,D,this._compress,w,X]);else this.dispatch(D,this._compress,w,X)}getBlobData(D,$,X,Y){this._bufferedBytes+=X[U$],this._state=FCD,D.arrayBuffer().then((J)=>{if(this._socket.destroyed){let F=Error("The socket was closed while the blob was being read");process.nextTick(DM,this,F,Y);return}this._bufferedBytes-=X[U$];let Q=f8(J);if(!$)this._state=j$,this.sendFrame(I4.frame(Q,X),Y),this.dequeue();else this.dispatch(Q,$,X,Y)}).catch((J)=>{process.nextTick(ZCD,this,J,Y)})}dispatch(D,$,X,Y){if(!$){this.sendFrame(I4.frame(D,X),Y);return}let J=this._extensions[bt.extensionName];this._bufferedBytes+=X[U$],this._state=QCD,J.compress(D,X.fin,(Q,F)=>{if(this._socket.destroyed){let Z=Error("The socket was closed while data was being compressed");DM(this,Z,Y);return}this._bufferedBytes-=X[U$],this._state=j$,X.readOnly=!1,this.sendFrame(I4.frame(F,X),Y),this.dequeue()})}dequeue(){while(this._state===j$&&this._queue.length){let D=this._queue.shift();this._bufferedBytes-=D[3][U$],Reflect.apply(D[0],this,D.slice(1))}}enqueue(D){this._bufferedBytes+=D[3][U$],this._queue.push(D)}sendFrame(D,$){if(D.length===2)this._socket.cork(),this._socket.write(D[0]),this._socket.write(D[1],$),this._socket.uncork();else this._socket.write(D[0],$)}}gt.exports=I4;function DM(D,$,X){if(typeof X==="function")X($);for(let Y=0;Y<D._queue.length;Y++){let J=D._queue[Y],Q=J[J.length-1];if(typeof Q==="function")Q($)}}function ZCD(D,$,X){DM(D,$,X),D.onerror($)}});var ot=T((foD,rt)=>{var{kForOnEventAttribute:W2,kListener:XM}=j6(),mt=Symbol("kCode"),ct=Symbol("kData"),dt=Symbol("kError"),lt=Symbol("kMessage"),nt=Symbol("kReason"),Q7=Symbol("kTarget"),it=Symbol("kType"),pt=Symbol("kWasClean");class A4{constructor(D){this[Q7]=null,this[it]=D}get target(){return this[Q7]}get type(){return this[it]}}Object.defineProperty(A4.prototype,"target",{enumerable:!0});Object.defineProperty(A4.prototype,"type",{enumerable:!0});class F7 extends A4{constructor(D,$={}){super(D);this[mt]=$.code===void 0?0:$.code,this[nt]=$.reason===void 0?"":$.reason,this[pt]=$.wasClean===void 0?!1:$.wasClean}get code(){return this[mt]}get reason(){return this[nt]}get wasClean(){return this[pt]}}Object.defineProperty(F7.prototype,"code",{enumerable:!0});Object.defineProperty(F7.prototype,"reason",{enumerable:!0});Object.defineProperty(F7.prototype,"wasClean",{enumerable:!0});class K2 extends A4{constructor(D,$={}){super(D);this[dt]=$.error===void 0?null:$.error,this[lt]=$.message===void 0?"":$.message}get error(){return this[dt]}get message(){return this[lt]}}Object.defineProperty(K2.prototype,"error",{enumerable:!0});Object.defineProperty(K2.prototype,"message",{enumerable:!0});class Ew extends A4{constructor(D,$={}){super(D);this[ct]=$.data===void 0?null:$.data}get data(){return this[ct]}}Object.defineProperty(Ew.prototype,"data",{enumerable:!0});var wCD={addEventListener(D,$,X={}){for(let J of this.listeners(D))if(!X[W2]&&J[XM]===$&&!J[W2])return;let Y;if(D==="message")Y=function(Q,F){let Z=new Ew("message",{data:F?Q:Q.toString()});Z[Q7]=this,jw($,this,Z)};else if(D==="close")Y=function(Q,F){let Z=new F7("close",{code:Q,reason:F.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});Z[Q7]=this,jw($,this,Z)};else if(D==="error")Y=function(Q){let F=new K2("error",{error:Q,message:Q.message});F[Q7]=this,jw($,this,F)};else if(D==="open")Y=function(){let Q=new A4("open");Q[Q7]=this,jw($,this,Q)};else return;if(Y[W2]=!!X[W2],Y[XM]=$,X.once)this.once(D,Y);else this.on(D,Y)},removeEventListener(D,$){for(let X of this.listeners(D))if(X[XM]===$&&!X[W2]){this.removeListener(D,X);break}}};rt.exports={CloseEvent:F7,ErrorEvent:K2,Event:A4,EventTarget:wCD,MessageEvent:Ew};function jw(D,$,X){if(typeof D==="object"&&D.handleEvent)D.handleEvent.call(D,X);else D.call($,X)}});var JM=T((yoD,at)=>{var{tokenChars:H2}=X7();function t$(D,$,X){if(D[$]===void 0)D[$]=[X];else D[$].push(X)}function GCD(D){let $=Object.create(null),X=Object.create(null),Y=!1,J=!1,Q=!1,F,Z,w=-1,G=-1,U=-1,O=0;for(;O<D.length;O++)if(G=D.charCodeAt(O),F===void 0)if(U===-1&&H2[G]===1){if(w===-1)w=O}else if(O!==0&&(G===32||G===9)){if(U===-1&&w!==-1)U=O}else if(G===59||G===44){if(w===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(U===-1)U=O;let q=D.slice(w,U);if(G===44)t$($,q,X),X=Object.create(null);else F=q;w=U=-1}else throw SyntaxError(`Unexpected character at index ${O}`);else if(Z===void 0)if(U===-1&&H2[G]===1){if(w===-1)w=O}else if(G===32||G===9){if(U===-1&&w!==-1)U=O}else if(G===59||G===44){if(w===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(U===-1)U=O;if(t$(X,D.slice(w,U),!0),G===44)t$($,F,X),X=Object.create(null),F=void 0;w=U=-1}else if(G===61&&w!==-1&&U===-1)Z=D.slice(w,O),w=U=-1;else throw SyntaxError(`Unexpected character at index ${O}`);else if(J){if(H2[G]!==1)throw SyntaxError(`Unexpected character at index ${O}`);if(w===-1)w=O;else if(!Y)Y=!0;J=!1}else if(Q)if(H2[G]===1){if(w===-1)w=O}else if(G===34&&w!==-1)Q=!1,U=O;else if(G===92)J=!0;else throw SyntaxError(`Unexpected character at index ${O}`);else if(G===34&&D.charCodeAt(O-1)===61)Q=!0;else if(U===-1&&H2[G]===1){if(w===-1)w=O}else if(w!==-1&&(G===32||G===9)){if(U===-1)U=O}else if(G===59||G===44){if(w===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(U===-1)U=O;let q=D.slice(w,U);if(Y)q=q.replace(/\\/g,""),Y=!1;if(t$(X,Z,q),G===44)t$($,F,X),X=Object.create(null),F=void 0;Z=void 0,w=U=-1}else throw SyntaxError(`Unexpected character at index ${O}`);if(w===-1||Q||G===32||G===9)throw SyntaxError("Unexpected end of input");if(U===-1)U=O;let z=D.slice(w,U);if(F===void 0)t$($,z,X);else{if(Z===void 0)t$(X,z,!0);else if(Y)t$(X,Z,z.replace(/\\/g,""));else t$(X,Z,z);t$($,F,X)}return $}function UCD(D){return Object.keys(D).map(($)=>{let X=D[$];if(!Array.isArray(X))X=[X];return X.map((Y)=>{return[$].concat(Object.keys(Y).map((J)=>{let Q=Y[J];if(!Array.isArray(Q))Q=[Q];return Q.map((F)=>F===!0?J:`${J}=${F}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}at.exports={format:UCD,parse:GCD}});var xw=T((goD,ws)=>{var OCD=i("events"),qCD=i("https"),zCD=i("http"),et=i("net"),BCD=i("tls"),{randomBytes:WCD,createHash:KCD}=i("crypto"),{Duplex:boD,Readable:hoD}=i("stream"),{URL:YM}=i("url"),R4=B2(),HCD=eL(),VCD=$M(),{isBlob:NCD}=X7(),{BINARY_TYPES:tt,CLOSE_TIMEOUT:LCD,EMPTY_BUFFER:Tw,GUID:MCD,kForOnEventAttribute:QM,kListener:ICD,kStatusCode:ACD,kWebSocket:i0,NOOP:Ds}=j6(),{EventTarget:{addEventListener:RCD,removeEventListener:jCD}}=ot(),{format:ECD,parse:TCD}=JM(),{toBuffer:CCD}=q2(),$s=Symbol("kAborted"),FM=[8,13],T6=["CONNECTING","OPEN","CLOSING","CLOSED"],PCD=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class ED extends OCD{constructor(D,$,X){super();if(this._binaryType=tt[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Tw,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=ED.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,D!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,$===void 0)$=[];else if(!Array.isArray($))if(typeof $==="object"&&$!==null)X=$,$=[];else $=[$];Xs(this,D,$,X)}else this._autoPong=X.autoPong,this._closeTimeout=X.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(D){if(!tt.includes(D))return;if(this._binaryType=D,this._receiver)this._receiver._binaryType=D}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(D,$,X){let Y=new HCD({allowSynchronousEvents:X.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:X.maxPayload,skipUTF8Validation:X.skipUTF8Validation}),J=new VCD(D,this._extensions,X.generateMask);if(this._receiver=Y,this._sender=J,this._socket=D,Y[i0]=this,J[i0]=this,D[i0]=this,Y.on("conclude",uCD),Y.on("drain",vCD),Y.on("error",_CD),Y.on("message",kCD),Y.on("ping",fCD),Y.on("pong",yCD),J.onerror=bCD,D.setTimeout)D.setTimeout(0);if(D.setNoDelay)D.setNoDelay();if($.length>0)D.unshift($);D.on("close",Qs),D.on("data",Pw),D.on("end",Fs),D.on("error",Zs),this._readyState=ED.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=ED.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[R4.extensionName])this._extensions[R4.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=ED.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(D,$){if(this.readyState===ED.CLOSED)return;if(this.readyState===ED.CONNECTING){p1(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===ED.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=ED.CLOSING,this._sender.close(D,$,!this._isServer,(X)=>{if(X)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),Ys(this)}pause(){if(this.readyState===ED.CONNECTING||this.readyState===ED.CLOSED)return;this._paused=!0,this._socket.pause()}ping(D,$,X){if(this.readyState===ED.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof D==="function")X=D,D=$=void 0;else if(typeof $==="function")X=$,$=void 0;if(typeof D==="number")D=D.toString();if(this.readyState!==ED.OPEN){ZM(this,D,X);return}if($===void 0)$=!this._isServer;this._sender.ping(D||Tw,$,X)}pong(D,$,X){if(this.readyState===ED.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof D==="function")X=D,D=$=void 0;else if(typeof $==="function")X=$,$=void 0;if(typeof D==="number")D=D.toString();if(this.readyState!==ED.OPEN){ZM(this,D,X);return}if($===void 0)$=!this._isServer;this._sender.pong(D||Tw,$,X)}resume(){if(this.readyState===ED.CONNECTING||this.readyState===ED.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(D,$,X){if(this.readyState===ED.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof $==="function")X=$,$={};if(typeof D==="number")D=D.toString();if(this.readyState!==ED.OPEN){ZM(this,D,X);return}let Y={binary:typeof D!=="string",mask:!this._isServer,compress:!0,fin:!0,...$};if(!this._extensions[R4.extensionName])Y.compress=!1;this._sender.send(D||Tw,Y,X)}terminate(){if(this.readyState===ED.CLOSED)return;if(this.readyState===ED.CONNECTING){p1(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=ED.CLOSING,this._socket.destroy()}}Object.defineProperty(ED,"CONNECTING",{enumerable:!0,value:T6.indexOf("CONNECTING")});Object.defineProperty(ED.prototype,"CONNECTING",{enumerable:!0,value:T6.indexOf("CONNECTING")});Object.defineProperty(ED,"OPEN",{enumerable:!0,value:T6.indexOf("OPEN")});Object.defineProperty(ED.prototype,"OPEN",{enumerable:!0,value:T6.indexOf("OPEN")});Object.defineProperty(ED,"CLOSING",{enumerable:!0,value:T6.indexOf("CLOSING")});Object.defineProperty(ED.prototype,"CLOSING",{enumerable:!0,value:T6.indexOf("CLOSING")});Object.defineProperty(ED,"CLOSED",{enumerable:!0,value:T6.indexOf("CLOSED")});Object.defineProperty(ED.prototype,"CLOSED",{enumerable:!0,value:T6.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((D)=>{Object.defineProperty(ED.prototype,D,{enumerable:!0})});["open","error","close","message"].forEach((D)=>{Object.defineProperty(ED.prototype,`on${D}`,{enumerable:!0,get(){for(let $ of this.listeners(D))if($[QM])return $[ICD];return null},set($){for(let X of this.listeners(D))if(X[QM]){this.removeListener(D,X);break}if(typeof $!=="function")return;this.addEventListener(D,$,{[QM]:!0})}})});ED.prototype.addEventListener=RCD;ED.prototype.removeEventListener=jCD;ws.exports=ED;function Xs(D,$,X,Y){let J={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:LCD,protocolVersion:FM[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...Y,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(D._autoPong=J.autoPong,D._closeTimeout=J.closeTimeout,!FM.includes(J.protocolVersion))throw RangeError(`Unsupported protocol version: ${J.protocolVersion} (supported versions: ${FM.join(", ")})`);let Q;if($ instanceof YM)Q=$;else try{Q=new YM($)}catch(W){throw SyntaxError(`Invalid URL: ${$}`)}if(Q.protocol==="http:")Q.protocol="ws:";else if(Q.protocol==="https:")Q.protocol="wss:";D._url=Q.href;let F=Q.protocol==="wss:",Z=Q.protocol==="ws+unix:",w;if(Q.protocol!=="ws:"&&!F&&!Z)w=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(Z&&!Q.pathname)w="The URL's pathname is empty";else if(Q.hash)w="The URL contains a fragment identifier";if(w){let W=SyntaxError(w);if(D._redirects===0)throw W;else{Cw(D,W);return}}let G=F?443:80,U=WCD(16).toString("base64"),O=F?qCD.request:zCD.request,z=new Set,q;if(J.createConnection=J.createConnection||(F?SCD:xCD),J.defaultPort=J.defaultPort||G,J.port=Q.port||G,J.host=Q.hostname.startsWith("[")?Q.hostname.slice(1,-1):Q.hostname,J.headers={...J.headers,"Sec-WebSocket-Version":J.protocolVersion,"Sec-WebSocket-Key":U,Connection:"Upgrade",Upgrade:"websocket"},J.path=Q.pathname+Q.search,J.timeout=J.handshakeTimeout,J.perMessageDeflate)q=new R4(J.perMessageDeflate!==!0?J.perMessageDeflate:{},!1,J.maxPayload),J.headers["Sec-WebSocket-Extensions"]=ECD({[R4.extensionName]:q.offer()});if(X.length){for(let W of X){if(typeof W!=="string"||!PCD.test(W)||z.has(W))throw SyntaxError("An invalid or duplicated subprotocol was specified");z.add(W)}J.headers["Sec-WebSocket-Protocol"]=X.join(",")}if(J.origin)if(J.protocolVersion<13)J.headers["Sec-WebSocket-Origin"]=J.origin;else J.headers.Origin=J.origin;if(Q.username||Q.password)J.auth=`${Q.username}:${Q.password}`;if(Z){let W=J.path.split(":");J.socketPath=W[0],J.path=W[1]}let B;if(J.followRedirects){if(D._redirects===0){D._originalIpc=Z,D._originalSecure=F,D._originalHostOrSocketPath=Z?J.socketPath:Q.host;let W=Y&&Y.headers;if(Y={...Y,headers:{}},W)for(let[L,M]of Object.entries(W))Y.headers[L.toLowerCase()]=M}else if(D.listenerCount("redirect")===0){let W=Z?D._originalIpc?J.socketPath===D._originalHostOrSocketPath:!1:D._originalIpc?!1:Q.host===D._originalHostOrSocketPath;if(!W||D._originalSecure&&!F){if(delete J.headers.authorization,delete J.headers.cookie,!W)delete J.headers.host;J.auth=void 0}}if(J.auth&&!Y.headers.authorization)Y.headers.authorization="Basic "+Buffer.from(J.auth).toString("base64");if(B=D._req=O(J),D._redirects)D.emit("redirect",D.url,B)}else B=D._req=O(J);if(J.timeout)B.on("timeout",()=>{p1(D,B,"Opening handshake has timed out")});if(B.on("error",(W)=>{if(B===null||B[$s])return;B=D._req=null,Cw(D,W)}),B.on("response",(W)=>{let L=W.headers.location,M=W.statusCode;if(L&&J.followRedirects&&M>=300&&M<400){if(++D._redirects>J.maxRedirects){p1(D,B,"Maximum redirects exceeded");return}B.abort();let I;try{I=new YM(L,$)}catch(K){let N=SyntaxError(`Invalid URL: ${L}`);Cw(D,N);return}Xs(D,I,X,Y)}else if(!D.emit("unexpected-response",B,W))p1(D,B,`Unexpected server response: ${W.statusCode}`)}),B.on("upgrade",(W,L,M)=>{if(D.emit("upgrade",W),D.readyState!==ED.CONNECTING)return;B=D._req=null;let I=W.headers.upgrade;if(I===void 0||I.toLowerCase()!=="websocket"){p1(D,L,"Invalid Upgrade header");return}let K=KCD("sha1").update(U+MCD).digest("base64");if(W.headers["sec-websocket-accept"]!==K){p1(D,L,"Invalid Sec-WebSocket-Accept header");return}let N=W.headers["sec-websocket-protocol"],V;if(N!==void 0){if(!z.size)V="Server sent a subprotocol but none was requested";else if(!z.has(N))V="Server sent an invalid subprotocol"}else if(z.size)V="Server sent no subprotocol";if(V){p1(D,L,V);return}if(N)D._protocol=N;let R=W.headers["sec-websocket-extensions"];if(R!==void 0){if(!q){p1(D,L,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let x;try{x=TCD(R)}catch(_){p1(D,L,"Invalid Sec-WebSocket-Extensions header");return}let A=Object.keys(x);if(A.length!==1||A[0]!==R4.extensionName){p1(D,L,"Server indicated an extension that was not requested");return}try{q.accept(x[R4.extensionName])}catch(_){p1(D,L,"Invalid Sec-WebSocket-Extensions header");return}D._extensions[R4.extensionName]=q}D.setSocket(L,M,{allowSynchronousEvents:J.allowSynchronousEvents,generateMask:J.generateMask,maxPayload:J.maxPayload,skipUTF8Validation:J.skipUTF8Validation})}),J.finishRequest)J.finishRequest(B,D);else B.end()}function Cw(D,$){D._readyState=ED.CLOSING,D._errorEmitted=!0,D.emit("error",$),D.emitClose()}function xCD(D){return D.path=D.socketPath,et.connect(D)}function SCD(D){if(D.path=void 0,!D.servername&&D.servername!=="")D.servername=et.isIP(D.host)?"":D.host;return BCD.connect(D)}function p1(D,$,X){D._readyState=ED.CLOSING;let Y=Error(X);if(Error.captureStackTrace(Y,p1),$.setHeader){if($[$s]=!0,$.abort(),$.socket&&!$.socket.destroyed)$.socket.destroy();process.nextTick(Cw,D,Y)}else $.destroy(Y),$.once("error",D.emit.bind(D,"error")),$.once("close",D.emitClose.bind(D))}function ZM(D,$,X){if($){let Y=NCD($)?$.size:CCD($).length;if(D._socket)D._sender._bufferedBytes+=Y;else D._bufferedAmount+=Y}if(X){let Y=Error(`WebSocket is not open: readyState ${D.readyState} (${T6[D.readyState]})`);process.nextTick(X,Y)}}function uCD(D,$){let X=this[i0];if(X._closeFrameReceived=!0,X._closeMessage=$,X._closeCode=D,X._socket[i0]===void 0)return;if(X._socket.removeListener("data",Pw),process.nextTick(Js,X._socket),D===1005)X.close();else X.close(D,$)}function vCD(){let D=this[i0];if(!D.isPaused)D._socket.resume()}function _CD(D){let $=this[i0];if($._socket[i0]!==void 0)$._socket.removeListener("data",Pw),process.nextTick(Js,$._socket),$.close(D[ACD]);if(!$._errorEmitted)$._errorEmitted=!0,$.emit("error",D)}function st(){this[i0].emitClose()}function kCD(D,$){this[i0].emit("message",D,$)}function fCD(D){let $=this[i0];if($._autoPong)$.pong(D,!this._isServer,Ds);$.emit("ping",D)}function yCD(D){this[i0].emit("pong",D)}function Js(D){D.resume()}function bCD(D){let $=this[i0];if($.readyState===ED.CLOSED)return;if($.readyState===ED.OPEN)$._readyState=ED.CLOSING,Ys($);if(this._socket.end(),!$._errorEmitted)$._errorEmitted=!0,$.emit("error",D)}function Ys(D){D._closeTimer=setTimeout(D._socket.destroy.bind(D._socket),D._closeTimeout)}function Qs(){let D=this[i0];if(this.removeListener("close",Qs),this.removeListener("data",Pw),this.removeListener("end",Fs),D._readyState=ED.CLOSING,!this._readableState.endEmitted&&!D._closeFrameReceived&&!D._receiver._writableState.errorEmitted&&this._readableState.length!==0){let $=this.read(this._readableState.length);D._receiver.write($)}if(D._receiver.end(),this[i0]=void 0,clearTimeout(D._closeTimer),D._receiver._writableState.finished||D._receiver._writableState.errorEmitted)D.emitClose();else D._receiver.on("error",st),D._receiver.on("finish",st)}function Pw(D){if(!this[i0]._receiver.write(D))this.pause()}function Fs(){let D=this[i0];D._readyState=ED.CLOSING,D._receiver.end(),this.end()}function Zs(){let D=this[i0];if(this.removeListener("error",Zs),this.on("error",Ds),D)D._readyState=ED.CLOSING,this.destroy()}});var qs=T((coD,Os)=>{var moD=xw(),{Duplex:hCD}=i("stream");function Gs(D){D.emit("close")}function gCD(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function Us(D){if(this.removeListener("error",Us),this.destroy(),this.listenerCount("error")===0)this.emit("error",D)}function mCD(D,$){let X=!0,Y=new hCD({...$,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return D.on("message",function(Q,F){let Z=!F&&Y._readableState.objectMode?Q.toString():Q;if(!Y.push(Z))D.pause()}),D.once("error",function(Q){if(Y.destroyed)return;X=!1,Y.destroy(Q)}),D.once("close",function(){if(Y.destroyed)return;Y.push(null)}),Y._destroy=function(J,Q){if(D.readyState===D.CLOSED){Q(J),process.nextTick(Gs,Y);return}let F=!1;if(D.once("error",function(w){F=!0,Q(w)}),D.once("close",function(){if(!F)Q(J);process.nextTick(Gs,Y)}),X)D.terminate()},Y._final=function(J){if(D.readyState===D.CONNECTING){D.once("open",function(){Y._final(J)});return}if(D._socket===null)return;if(D._socket._writableState.finished){if(J(),Y._readableState.endEmitted)Y.destroy()}else D._socket.once("finish",function(){J()}),D.close()},Y._read=function(){if(D.isPaused)D.resume()},Y._write=function(J,Q,F){if(D.readyState===D.CONNECTING){D.once("open",function(){Y._write(J,Q,F)});return}D.send(J,F)},Y.on("end",gCD),Y.on("error",Us),Y}Os.exports=mCD});var Bs=T((doD,zs)=>{var{tokenChars:cCD}=X7();function dCD(D){let $=new Set,X=-1,Y=-1,J=0;for(J;J<D.length;J++){let F=D.charCodeAt(J);if(Y===-1&&cCD[F]===1){if(X===-1)X=J}else if(J!==0&&(F===32||F===9)){if(Y===-1&&X!==-1)Y=J}else if(F===44){if(X===-1)throw SyntaxError(`Unexpected character at index ${J}`);if(Y===-1)Y=J;let Z=D.slice(X,Y);if($.has(Z))throw SyntaxError(`The "${Z}" subprotocol is duplicated`);$.add(Z),X=Y=-1}else throw SyntaxError(`Unexpected character at index ${J}`)}if(X===-1||Y!==-1)throw SyntaxError("Unexpected end of input");let Q=D.slice(X,J);if($.has(Q))throw SyntaxError(`The "${Q}" subprotocol is duplicated`);return $.add(Q),$}zs.exports={parse:dCD}});var Ns=T((noD,Vs)=>{var lCD=i("events"),Sw=i("http"),{Duplex:loD}=i("stream"),{createHash:nCD}=i("crypto"),Ws=JM(),b8=B2(),iCD=Bs(),pCD=xw(),{CLOSE_TIMEOUT:rCD,GUID:oCD,kWebSocket:aCD}=j6(),tCD=/^[+/0-9A-Za-z]{22}==$/;class Hs extends lCD{constructor(D,$){super();if(D={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:rCD,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:pCD,...D},D.port==null&&!D.server&&!D.noServer||D.port!=null&&(D.server||D.noServer)||D.server&&D.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(D.port!=null)this._server=Sw.createServer((X,Y)=>{let J=Sw.STATUS_CODES[426];Y.writeHead(426,{"Content-Length":J.length,"Content-Type":"text/plain"}),Y.end(J)}),this._server.listen(D.port,D.host,D.backlog,$);else if(D.server)this._server=D.server;if(this._server){let X=this.emit.bind(this,"connection");this._removeListeners=sCD(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(Y,J,Q)=>{this.handleUpgrade(Y,J,Q,X)}})}if(D.perMessageDeflate===!0)D.perMessageDeflate={};if(D.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=D,this._state=0}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(D){if(this._state===2){if(D)this.once("close",()=>{D(Error("The server is not running"))});process.nextTick(V2,this);return}if(D)this.once("close",D);if(this._state===1)return;if(this._state=1,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(V2,this);else this._shouldEmitClose=!0;else process.nextTick(V2,this)}else{let $=this._server;this._removeListeners(),this._removeListeners=this._server=null,$.close(()=>{V2(this)})}}shouldHandle(D){if(this.options.path){let $=D.url.indexOf("?");if(($!==-1?D.url.slice(0,$):D.url)!==this.options.path)return!1}return!0}handleUpgrade(D,$,X,Y){$.on("error",Ks);let J=D.headers["sec-websocket-key"],Q=D.headers.upgrade,F=+D.headers["sec-websocket-version"];if(D.method!=="GET"){h8(this,D,$,405,"Invalid HTTP method");return}if(Q===void 0||Q.toLowerCase()!=="websocket"){h8(this,D,$,400,"Invalid Upgrade header");return}if(J===void 0||!tCD.test(J)){h8(this,D,$,400,"Missing or invalid Sec-WebSocket-Key header");return}if(F!==13&&F!==8){h8(this,D,$,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(D)){N2($,400);return}let Z=D.headers["sec-websocket-protocol"],w=new Set;if(Z!==void 0)try{w=iCD.parse(Z)}catch(O){h8(this,D,$,400,"Invalid Sec-WebSocket-Protocol header");return}let G=D.headers["sec-websocket-extensions"],U={};if(this.options.perMessageDeflate&&G!==void 0){let O=new b8(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let z=Ws.parse(G);if(z[b8.extensionName])O.accept(z[b8.extensionName]),U[b8.extensionName]=O}catch(z){h8(this,D,$,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let O={origin:D.headers[`${F===8?"sec-websocket-origin":"origin"}`],secure:!!(D.socket.authorized||D.socket.encrypted),req:D};if(this.options.verifyClient.length===2){this.options.verifyClient(O,(z,q,B,W)=>{if(!z)return N2($,q||401,B,W);this.completeUpgrade(U,J,w,D,$,X,Y)});return}if(!this.options.verifyClient(O))return N2($,401)}this.completeUpgrade(U,J,w,D,$,X,Y)}completeUpgrade(D,$,X,Y,J,Q,F){if(!J.readable||!J.writable)return J.destroy();if(J[aCD])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return N2(J,503);let w=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${nCD("sha1").update($+oCD).digest("base64")}`],G=new this.options.WebSocket(null,void 0,this.options);if(X.size){let U=this.options.handleProtocols?this.options.handleProtocols(X,Y):X.values().next().value;if(U)w.push(`Sec-WebSocket-Protocol: ${U}`),G._protocol=U}if(D[b8.extensionName]){let U=D[b8.extensionName].params,O=Ws.format({[b8.extensionName]:[U]});w.push(`Sec-WebSocket-Extensions: ${O}`),G._extensions=D}if(this.emit("headers",w,Y),J.write(w.concat(`\r
|
|
400
|
+
PS: You can ignore this check with "--ignore-checksum-check"`),Error("Cannot upload the same bundle content");J.stop(`Checksum compatible with ${X} channel`)}function mD(D,$){return D||$?.plugins?.CapacitorUpdater?.appId||$?.appId}function _8(D){let $=[];if(!D.localVersion)return{compatible:!0,reasons:[],message:"Package only exists on remote (will be removed)"};if(!D.remoteVersion)return $.push("new_plugin"),{compatible:!1,reasons:$,message:"New native plugin added (requires app store update)"};let X=!1;try{let F=JJ(D.localVersion),Z=JJ(D.remoteVersion);X=oI(F,Z)}catch{X=!1}if(!X)$.push("version_mismatch");let Y=D.localIosChecksum&&D.remoteIosChecksum&&D.localIosChecksum!==D.remoteIosChecksum,J=D.localAndroidChecksum&&D.remoteAndroidChecksum&&D.localAndroidChecksum!==D.remoteAndroidChecksum;if(Y&&J)$.push("both_platforms_changed");else if(Y)$.push("ios_code_changed");else if(J)$.push("android_code_changed");if($.length===0)return{compatible:!0,reasons:[],message:"Compatible"};let Q=[];for(let F of $)switch(F){case"version_mismatch":Q.push(`version changed: ${D.remoteVersion} → ${D.localVersion}`);break;case"ios_code_changed":Q.push("iOS native code changed");break;case"android_code_changed":Q.push("Android native code changed");break;case"both_platforms_changed":Q.push("iOS and Android native code changed");break;case"new_plugin":Q.push("new plugin (requires app store update)");break;case"removed_plugin":Q.push("plugin removed");break}return{compatible:!1,reasons:$,message:Q.join(", ")}}function L4(D){return _8(D).compatible}async function Ww(D,$,X,Y,J){let Q=await dL(Y,J),F=await la(D,$,X),Z=Q.filter((G)=>!!G.native).map((G)=>{let U=F.get(G.name);if(U)return{name:G.name,localVersion:G.version,remoteVersion:U.version,localIosChecksum:G.ios_checksum,remoteIosChecksum:U.ios_checksum,localAndroidChecksum:G.android_checksum,remoteAndroidChecksum:U.android_checksum};return{name:G.name,localVersion:G.version,remoteVersion:void 0,localIosChecksum:G.ios_checksum,localAndroidChecksum:G.android_checksum}}),w=[...F].filter(([G])=>Q.find((U)=>U.name===G)===void 0).map(([G,U])=>({name:G,localVersion:void 0,remoteVersion:U.version,remoteIosChecksum:U.ios_checksum,remoteAndroidChecksum:U.android_checksum}));return Z.push(...w),{finalCompatibility:Z,localDependencies:Q}}async function lL(D,$,X,Y){let J=await la(D,$,X),Q=Y.map((Z)=>{let w=J.get(Z.name);if(w)return{name:Z.name,localVersion:Z.version,remoteVersion:w.version,localIosChecksum:Z.ios_checksum,remoteIosChecksum:w.ios_checksum,localAndroidChecksum:Z.android_checksum,remoteAndroidChecksum:w.android_checksum};return{name:Z.name,localVersion:Z.version,remoteVersion:void 0,localIosChecksum:Z.ios_checksum,localAndroidChecksum:Z.android_checksum}}),F=[...J].filter(([Z])=>Y.find((w)=>w.name===Z)===void 0).map(([Z,w])=>({name:Z,localVersion:void 0,remoteVersion:w.version,remoteIosChecksum:w.ios_checksum,remoteAndroidChecksum:w.android_checksum}));return Q.push(...F),{finalCompatibility:Q,localDependencies:Y}}function KTD(D){if(!X0(D))return null;try{return JSON.parse(f0(D,"utf-8"))}catch{return null}}function Z2(D){if(!D)return!1;return/@capgo\/capacitor-updater|CapgoCapacitorUpdater|CapacitorUpdaterPlugin/.test(D)}function HTD(D,$){if(!$)return fD(D,A6);return U2.isAbsolute($)?$:p5(D,$)}function VTD(D=a$(),$){let X=HTD(D,$),Y=U2.basename(X)===A6?w2(X):X,J=[fD(Y,"ios","App"),fD(D,"ios","App")].find((x)=>X0(x));if(!J)return{shouldCheck:!1,valid:!0,details:[]};let Q=KTD(X),F={...Q?.dependencies,...Q?.devDependencies,...Q?.optionalDependencies},Z=Object.prototype.hasOwnProperty.call(F,"@capgo/capacitor-updater"),w=[Y,D].some((x)=>X0(fD(x,"node_modules","@capgo","capacitor-updater"))),G=fD(J,"Podfile"),U=fD(J,"CapApp-SPM","Package.swift"),O=X0(G)?f0(G,"utf-8"):void 0,z=X0(U)?f0(U,"utf-8"):void 0,q=Z2(O)||Z2(z),B=fD(J,"Podfile.lock"),W=fD(J,"App.xcworkspace","xcshareddata","swiftpm","Package.resolved"),L=fD(J,"App","capacitor.plugins.json"),M=X0(B)?f0(B,"utf-8"):void 0,I=X0(W)?f0(W,"utf-8"):void 0,K=X0(L)?f0(L,"utf-8"):void 0,N=Z2(M)||Z2(I)||Z2(K);if(!(Z||w||q||N))return{shouldCheck:!1,valid:!0,details:[]};let R=[];if(!q)R.push(`Missing @capgo/capacitor-updater in iOS dependency files (${G} or ${U})`);if(!N)R.push(`Missing @capgo/capacitor-updater in iOS native project outputs (${B}, ${W}, or ${L})`);return{shouldCheck:!0,valid:q&&N,details:R}}async function ia(D,$,X,Y){let J=await d0({message:"Would you like to sync your project with Capacitor now? This is recommended to ensure encrypted updates work properly."});if(bD(J)){if(D&&$&&X)await YS("onboarding-v2",$,X,"canceled","\uD83E\uDD37");throw H.error("Canceled Capacitor sync"),Error("Capacitor sync cancelled")}if(J){let Q=v8(),F=A0();F.start("Running the command...");let Z;try{await new Promise((w,G)=>{let U=aED(Q.runner,["cap","sync"],{stdio:"pipe"});U.on("close",(O)=>{if(O===0)w();else G(Error(`Command failed with exit code ${O}`))}),U.on("error",(O)=>{G(O)})})}catch(w){Z=w,H.error(`Failed to run Capacitor sync: ${w}`),H.warn(`Please run "${Q.runner} cap sync" manually to ensure encrypted updates work properly`)}if(Y?.validateIosUpdater){let w=VTD(a$(),Y.packageJsonPath);if(w.shouldCheck&&!w.valid){F.stop("iOS sync check failed ❌"),H.error("Capgo iOS dependency sync verification failed.");for(let G of w.details)H.error(G);throw H.error("Stop here to avoid testing on a broken native iOS project."),H.warn("Best fix: reset the iOS folder, then run sync again."),H.info(`1. ${Q.runner} cap rm ios`),H.info(`2. ${Q.runner} cap add ios`),H.info(`3. ${Q.runner} cap sync ios`),Error("iOS sync validation failed. Reset your iOS folder and retry.")}}if(Z){F.stop("Error");return}F.stop("Capacitor sync completed ✅")}else{let Q=v8();H.warn("⚠️ Important: If you upload encrypted bundles without syncing, updates will fail!"),H.info(`Remember to run "${Q.runner} cap sync" before uploading encrypted bundles`)}}var H4,hL,Ta,Qw,r5=".capgo_key",i1=".capgo_key_v2",Fw,R6,La="https://capgo.app",Ma="https://files.capgo.app",Ia="https://api.capgo.app",Aa="https://console.capgo.app",gL=120000,$TD=20971520,XTD=1073741824,JTD=103809024,A6="package.json",o5,Pa,A1,a5=(D,$)=>D>=$,Uw="5.10.0",Ow="6.25.0",O2="7.0.30",Ra=!1,i5="npm",F2="install",bL="npx";var kD=o(()=>{vI();vD();X6();IE();QS();V3();BF();po();eZ();H4=V0(o2(),1),hL=V0(EU(),1),Ta=V0(ST(),1),Qw=V0(jY(),1),Fw=`${r5}.pub`,R6=`${i1}.pub`,o5=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-z-][0-9a-z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-z-][0-9a-z-]*))*))?(?:\+([0-9a-z-]+(?:\.[0-9a-z-]+)*))?$/i;Pa=/([A-Za-z0-9]+)\.(java|swift|kt|scala)$/;((F)=>{F[F.none=0]="none";F[F.read=1]="read";F[F.upload=2]="upload";F[F.write=3]="write";F[F.admin=4]="admin";F[F.super_admin=5]="super_admin"})(A1||={})});var j6=T((CoD,Lt)=>{var Vt=["nodebuffer","arraybuffer","fragments"],Nt=typeof Blob<"u";if(Nt)Vt.push("blob");Lt.exports={BINARY_TYPES:Vt,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Nt,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var q2=T((PoD,Lw)=>{var{EMPTY_BUFFER:_TD}=j6(),rL=Buffer[Symbol.species];function kTD(D,$){if(D.length===0)return _TD;if(D.length===1)return D[0];let X=Buffer.allocUnsafe($),Y=0;for(let J=0;J<D.length;J++){let Q=D[J];X.set(Q,Y),Y+=Q.length}if(Y<$)return new rL(X.buffer,X.byteOffset,Y);return X}function Mt(D,$,X,Y,J){for(let Q=0;Q<J;Q++)X[Y+Q]=D[Q]^$[Q&3]}function It(D,$){for(let X=0;X<D.length;X++)D[X]^=$[X&3]}function fTD(D){if(D.length===D.buffer.byteLength)return D.buffer;return D.buffer.slice(D.byteOffset,D.byteOffset+D.length)}function oL(D){if(oL.readOnly=!0,Buffer.isBuffer(D))return D;let $;if(D instanceof ArrayBuffer)$=new rL(D);else if(ArrayBuffer.isView(D))$=new rL(D.buffer,D.byteOffset,D.byteLength);else $=Buffer.from(D),oL.readOnly=!1;return $}Lw.exports={concat:kTD,mask:Mt,toArrayBuffer:fTD,toBuffer:oL,unmask:It};if(!process.env.WS_NO_BUFFER_UTIL)try{let D=(()=>{throw new Error("Cannot require module "+"bufferutil");})();Lw.exports.mask=function($,X,Y,J,Q){if(Q<48)Mt($,X,Y,J,Q);else D.mask($,X,Y,J,Q)},Lw.exports.unmask=function($,X){if($.length<32)It($,X);else D.unmask($,X)}}catch(D){}});var Et=T((xoD,jt)=>{var At=Symbol("kDone"),aL=Symbol("kRun");class Rt{constructor(D){this[At]=()=>{this.pending--,this[aL]()},this.concurrency=D||1/0,this.jobs=[],this.pending=0}add(D){this.jobs.push(D),this[aL]()}[aL](){if(this.pending===this.concurrency)return;if(this.jobs.length){let D=this.jobs.shift();this.pending++,D(this[At])}}}jt.exports=Rt});var B2=T((SoD,St)=>{var z2=i("zlib"),Tt=q2(),yTD=Et(),{kStatusCode:Ct}=j6(),bTD=Buffer[Symbol.species],hTD=Buffer.from([0,0,255,255]),Iw=Symbol("permessage-deflate"),E6=Symbol("total-length"),D7=Symbol("callback"),M4=Symbol("buffers"),$7=Symbol("error"),Mw;class Pt{constructor(D,$,X){if(this._maxPayload=X|0,this._options=D||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!$,this._deflate=null,this._inflate=null,this.params=null,!Mw){let Y=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Mw=new yTD(Y)}}static get extensionName(){return"permessage-deflate"}offer(){let D={};if(this._options.serverNoContextTakeover)D.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)D.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)D.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)D.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)D.client_max_window_bits=!0;return D}accept(D){return D=this.normalizeParams(D),this.params=this._isServer?this.acceptAsServer(D):this.acceptAsClient(D),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let D=this._deflate[D7];if(this._deflate.close(),this._deflate=null,D)D(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(D){let $=this._options,X=D.find((Y)=>{if($.serverNoContextTakeover===!1&&Y.server_no_context_takeover||Y.server_max_window_bits&&($.serverMaxWindowBits===!1||typeof $.serverMaxWindowBits==="number"&&$.serverMaxWindowBits>Y.server_max_window_bits)||typeof $.clientMaxWindowBits==="number"&&!Y.client_max_window_bits)return!1;return!0});if(!X)throw Error("None of the extension offers can be accepted");if($.serverNoContextTakeover)X.server_no_context_takeover=!0;if($.clientNoContextTakeover)X.client_no_context_takeover=!0;if(typeof $.serverMaxWindowBits==="number")X.server_max_window_bits=$.serverMaxWindowBits;if(typeof $.clientMaxWindowBits==="number")X.client_max_window_bits=$.clientMaxWindowBits;else if(X.client_max_window_bits===!0||$.clientMaxWindowBits===!1)delete X.client_max_window_bits;return X}acceptAsClient(D){let $=D[0];if(this._options.clientNoContextTakeover===!1&&$.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!$.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")$.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&$.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return $}normalizeParams(D){return D.forEach(($)=>{Object.keys($).forEach((X)=>{let Y=$[X];if(Y.length>1)throw Error(`Parameter "${X}" must have only a single value`);if(Y=Y[0],X==="client_max_window_bits"){if(Y!==!0){let J=+Y;if(!Number.isInteger(J)||J<8||J>15)throw TypeError(`Invalid value for parameter "${X}": ${Y}`);Y=J}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${X}": ${Y}`)}else if(X==="server_max_window_bits"){let J=+Y;if(!Number.isInteger(J)||J<8||J>15)throw TypeError(`Invalid value for parameter "${X}": ${Y}`);Y=J}else if(X==="client_no_context_takeover"||X==="server_no_context_takeover"){if(Y!==!0)throw TypeError(`Invalid value for parameter "${X}": ${Y}`)}else throw Error(`Unknown parameter "${X}"`);$[X]=Y})}),D}decompress(D,$,X){Mw.add((Y)=>{this._decompress(D,$,(J,Q)=>{Y(),X(J,Q)})})}compress(D,$,X){Mw.add((Y)=>{this._compress(D,$,(J,Q)=>{Y(),X(J,Q)})})}_decompress(D,$,X){let Y=this._isServer?"client":"server";if(!this._inflate){let J=`${Y}_max_window_bits`,Q=typeof this.params[J]!=="number"?z2.Z_DEFAULT_WINDOWBITS:this.params[J];this._inflate=z2.createInflateRaw({...this._options.zlibInflateOptions,windowBits:Q}),this._inflate[Iw]=this,this._inflate[E6]=0,this._inflate[M4]=[],this._inflate.on("error",mTD),this._inflate.on("data",xt)}if(this._inflate[D7]=X,this._inflate.write(D),$)this._inflate.write(hTD);this._inflate.flush(()=>{let J=this._inflate[$7];if(J){this._inflate.close(),this._inflate=null,X(J);return}let Q=Tt.concat(this._inflate[M4],this._inflate[E6]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[E6]=0,this._inflate[M4]=[],$&&this.params[`${Y}_no_context_takeover`])this._inflate.reset();X(null,Q)})}_compress(D,$,X){let Y=this._isServer?"server":"client";if(!this._deflate){let J=`${Y}_max_window_bits`,Q=typeof this.params[J]!=="number"?z2.Z_DEFAULT_WINDOWBITS:this.params[J];this._deflate=z2.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:Q}),this._deflate[E6]=0,this._deflate[M4]=[],this._deflate.on("data",gTD)}this._deflate[D7]=X,this._deflate.write(D),this._deflate.flush(z2.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let J=Tt.concat(this._deflate[M4],this._deflate[E6]);if($)J=new bTD(J.buffer,J.byteOffset,J.length-4);if(this._deflate[D7]=null,this._deflate[E6]=0,this._deflate[M4]=[],$&&this.params[`${Y}_no_context_takeover`])this._deflate.reset();X(null,J)})}}St.exports=Pt;function gTD(D){this[M4].push(D),this[E6]+=D.length}function xt(D){if(this[E6]+=D.length,this[Iw]._maxPayload<1||this[E6]<=this[Iw]._maxPayload){this[M4].push(D);return}this[$7]=RangeError("Max payload size exceeded"),this[$7].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[$7][Ct]=1009,this.removeListener("data",xt),this.reset()}function mTD(D){if(this[Iw]._inflate=null,this[$7]){this[D7](this[$7]);return}D[Ct]=1007,this[D7](D)}});var X7=T((uoD,Aw)=>{var{isUtf8:ut}=i("buffer"),{hasBlob:cTD}=j6(),dTD=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function lTD(D){return D>=1000&&D<=1014&&D!==1004&&D!==1005&&D!==1006||D>=3000&&D<=4999}function tL(D){let $=D.length,X=0;while(X<$)if((D[X]&128)===0)X++;else if((D[X]&224)===192){if(X+1===$||(D[X+1]&192)!==128||(D[X]&254)===192)return!1;X+=2}else if((D[X]&240)===224){if(X+2>=$||(D[X+1]&192)!==128||(D[X+2]&192)!==128||D[X]===224&&(D[X+1]&224)===128||D[X]===237&&(D[X+1]&224)===160)return!1;X+=3}else if((D[X]&248)===240){if(X+3>=$||(D[X+1]&192)!==128||(D[X+2]&192)!==128||(D[X+3]&192)!==128||D[X]===240&&(D[X+1]&240)===128||D[X]===244&&D[X+1]>143||D[X]>244)return!1;X+=4}else return!1;return!0}function nTD(D){return cTD&&typeof D==="object"&&typeof D.arrayBuffer==="function"&&typeof D.type==="string"&&typeof D.stream==="function"&&(D[Symbol.toStringTag]==="Blob"||D[Symbol.toStringTag]==="File")}Aw.exports={isBlob:nTD,isValidStatusCode:lTD,isValidUTF8:tL,tokenChars:dTD};if(ut)Aw.exports.isValidUTF8=function(D){return D.length<24?tL(D):ut(D)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let D=(()=>{throw new Error("Cannot require module "+"utf-8-validate");})();Aw.exports.isValidUTF8=function($){return $.length<32?tL($):D($)}}catch(D){}});var eL=T((voD,yt)=>{var{Writable:iTD}=i("stream"),vt=B2(),{BINARY_TYPES:pTD,EMPTY_BUFFER:_t,kStatusCode:rTD,kWebSocket:oTD}=j6(),{concat:sL,toArrayBuffer:aTD,unmask:tTD}=q2(),{isValidStatusCode:sTD,isValidUTF8:kt}=X7(),Rw=Buffer[Symbol.species];class ft extends iTD{constructor(D={}){super();this._allowSynchronousEvents=D.allowSynchronousEvents!==void 0?D.allowSynchronousEvents:!0,this._binaryType=D.binaryType||pTD[0],this._extensions=D.extensions||{},this._isServer=!!D.isServer,this._maxPayload=D.maxPayload|0,this._skipUTF8Validation=!!D.skipUTF8Validation,this[oTD]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(D,$,X){if(this._opcode===8&&this._state==0)return X();this._bufferedBytes+=D.length,this._buffers.push(D),this.startLoop(X)}consume(D){if(this._bufferedBytes-=D,D===this._buffers[0].length)return this._buffers.shift();if(D<this._buffers[0].length){let X=this._buffers[0];return this._buffers[0]=new Rw(X.buffer,X.byteOffset+D,X.length-D),new Rw(X.buffer,X.byteOffset,D)}let $=Buffer.allocUnsafe(D);do{let X=this._buffers[0],Y=$.length-D;if(D>=X.length)$.set(this._buffers.shift(),Y);else $.set(new Uint8Array(X.buffer,X.byteOffset,D),Y),this._buffers[0]=new Rw(X.buffer,X.byteOffset+D,X.length-D);D-=X.length}while(D>0);return $}startLoop(D){this._loop=!0;do switch(this._state){case 0:this.getInfo(D);break;case 1:this.getPayloadLength16(D);break;case 2:this.getPayloadLength64(D);break;case 3:this.getMask();break;case 4:this.getData(D);break;case 5:case 6:this._loop=!1;return}while(this._loop);if(!this._errored)D()}getInfo(D){if(this._bufferedBytes<2){this._loop=!1;return}let $=this.consume(2);if(($[0]&48)!==0){let Y=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");D(Y);return}let X=($[0]&64)===64;if(X&&!this._extensions[vt.extensionName]){let Y=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");D(Y);return}if(this._fin=($[0]&128)===128,this._opcode=$[0]&15,this._payloadLength=$[1]&127,this._opcode===0){if(X){let Y=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");D(Y);return}if(!this._fragmented){let Y=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");D(Y);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let Y=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");D(Y);return}this._compressed=X}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let Y=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");D(Y);return}if(X){let Y=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");D(Y);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let Y=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");D(Y);return}}else{let Y=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");D(Y);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=($[1]&128)===128,this._isServer){if(!this._masked){let Y=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");D(Y);return}}else if(this._masked){let Y=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");D(Y);return}if(this._payloadLength===126)this._state=1;else if(this._payloadLength===127)this._state=2;else this.haveLength(D)}getPayloadLength16(D){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(D)}getPayloadLength64(D){if(this._bufferedBytes<8){this._loop=!1;return}let $=this.consume(8),X=$.readUInt32BE(0);if(X>Math.pow(2,21)-1){let Y=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");D(Y);return}this._payloadLength=X*Math.pow(2,32)+$.readUInt32BE(4),this.haveLength(D)}haveLength(D){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let $=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");D($);return}}if(this._masked)this._state=3;else this._state=4}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=4}getData(D){let $=_t;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if($=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)tTD($,this._mask)}if(this._opcode>7){this.controlMessage($,D);return}if(this._compressed){this._state=5,this.decompress($,D);return}if($.length)this._messageLength=this._totalPayloadLength,this._fragments.push($);this.dataMessage(D)}decompress(D,$){this._extensions[vt.extensionName].decompress(D,this._fin,(Y,J)=>{if(Y)return $(Y);if(J.length){if(this._messageLength+=J.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let Q=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");$(Q);return}this._fragments.push(J)}if(this.dataMessage($),this._state===0)this.startLoop($)})}dataMessage(D){if(!this._fin){this._state=0;return}let $=this._messageLength,X=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let Y;if(this._binaryType==="nodebuffer")Y=sL(X,$);else if(this._binaryType==="arraybuffer")Y=aTD(sL(X,$));else if(this._binaryType==="blob")Y=new Blob(X);else Y=X;if(this._allowSynchronousEvents)this.emit("message",Y,!0),this._state=0;else this._state=6,setImmediate(()=>{this.emit("message",Y,!0),this._state=0,this.startLoop(D)})}else{let Y=sL(X,$);if(!this._skipUTF8Validation&&!kt(Y)){let J=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");D(J);return}if(this._state===5||this._allowSynchronousEvents)this.emit("message",Y,!1),this._state=0;else this._state=6,setImmediate(()=>{this.emit("message",Y,!1),this._state=0,this.startLoop(D)})}}controlMessage(D,$){if(this._opcode===8){if(D.length===0)this._loop=!1,this.emit("conclude",1005,_t),this.end();else{let X=D.readUInt16BE(0);if(!sTD(X)){let J=this.createError(RangeError,`invalid status code ${X}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");$(J);return}let Y=new Rw(D.buffer,D.byteOffset+2,D.length-2);if(!this._skipUTF8Validation&&!kt(Y)){let J=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");$(J);return}this._loop=!1,this.emit("conclude",X,Y),this.end()}this._state=0;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",D),this._state=0;else this._state=6,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",D),this._state=0,this.startLoop($)})}createError(D,$,X,Y,J){this._loop=!1,this._errored=!0;let Q=new D(X?`Invalid WebSocket frame: ${$}`:$);return Error.captureStackTrace(Q,this.createError),Q.code=J,Q[rTD]=Y,Q}}yt.exports=ft});var $M=T((koD,gt)=>{var{Duplex:_oD}=i("stream"),{randomFillSync:eTD}=i("crypto"),bt=B2(),{EMPTY_BUFFER:DCD,kWebSocket:$CD,NOOP:XCD}=j6(),{isBlob:J7,isValidStatusCode:JCD}=X7(),{mask:ht,toBuffer:f8}=q2(),U$=Symbol("kByteLength"),YCD=Buffer.alloc(4),y8,Y7=8192,j$=0,QCD=1,FCD=2;class I4{constructor(D,$,X){if(this._extensions=$||{},X)this._generateMask=X,this._maskBuffer=Buffer.alloc(4);this._socket=D,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=j$,this.onerror=XCD,this[$CD]=void 0}static frame(D,$){let X,Y=!1,J=2,Q=!1;if($.mask){if(X=$.maskBuffer||YCD,$.generateMask)$.generateMask(X);else{if(Y7===8192){if(y8===void 0)y8=Buffer.alloc(8192);eTD(y8,0,8192),Y7=0}X[0]=y8[Y7++],X[1]=y8[Y7++],X[2]=y8[Y7++],X[3]=y8[Y7++]}Q=(X[0]|X[1]|X[2]|X[3])===0,J=6}let F;if(typeof D==="string")if((!$.mask||Q)&&$[U$]!==void 0)F=$[U$];else D=Buffer.from(D),F=D.length;else F=D.length,Y=$.mask&&$.readOnly&&!Q;let Z=F;if(F>=65536)J+=8,Z=127;else if(F>125)J+=2,Z=126;let w=Buffer.allocUnsafe(Y?F+J:J);if(w[0]=$.fin?$.opcode|128:$.opcode,$.rsv1)w[0]|=64;if(w[1]=Z,Z===126)w.writeUInt16BE(F,2);else if(Z===127)w[2]=w[3]=0,w.writeUIntBE(F,4,6);if(!$.mask)return[w,D];if(w[1]|=128,w[J-4]=X[0],w[J-3]=X[1],w[J-2]=X[2],w[J-1]=X[3],Q)return[w,D];if(Y)return ht(D,X,w,J,F),[w];return ht(D,X,D,0,F),[w,D]}close(D,$,X,Y){let J;if(D===void 0)J=DCD;else if(typeof D!=="number"||!JCD(D))throw TypeError("First argument must be a valid error code number");else if($===void 0||!$.length)J=Buffer.allocUnsafe(2),J.writeUInt16BE(D,0);else{let F=Buffer.byteLength($);if(F>123)throw RangeError("The message must not be greater than 123 bytes");if(J=Buffer.allocUnsafe(2+F),J.writeUInt16BE(D,0),typeof $==="string")J.write($,2);else J.set($,2)}let Q={[U$]:J.length,fin:!0,generateMask:this._generateMask,mask:X,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==j$)this.enqueue([this.dispatch,J,!1,Q,Y]);else this.sendFrame(I4.frame(J,Q),Y)}ping(D,$,X){let Y,J;if(typeof D==="string")Y=Buffer.byteLength(D),J=!1;else if(J7(D))Y=D.size,J=!1;else D=f8(D),Y=D.length,J=f8.readOnly;if(Y>125)throw RangeError("The data size must not be greater than 125 bytes");let Q={[U$]:Y,fin:!0,generateMask:this._generateMask,mask:$,maskBuffer:this._maskBuffer,opcode:9,readOnly:J,rsv1:!1};if(J7(D))if(this._state!==j$)this.enqueue([this.getBlobData,D,!1,Q,X]);else this.getBlobData(D,!1,Q,X);else if(this._state!==j$)this.enqueue([this.dispatch,D,!1,Q,X]);else this.sendFrame(I4.frame(D,Q),X)}pong(D,$,X){let Y,J;if(typeof D==="string")Y=Buffer.byteLength(D),J=!1;else if(J7(D))Y=D.size,J=!1;else D=f8(D),Y=D.length,J=f8.readOnly;if(Y>125)throw RangeError("The data size must not be greater than 125 bytes");let Q={[U$]:Y,fin:!0,generateMask:this._generateMask,mask:$,maskBuffer:this._maskBuffer,opcode:10,readOnly:J,rsv1:!1};if(J7(D))if(this._state!==j$)this.enqueue([this.getBlobData,D,!1,Q,X]);else this.getBlobData(D,!1,Q,X);else if(this._state!==j$)this.enqueue([this.dispatch,D,!1,Q,X]);else this.sendFrame(I4.frame(D,Q),X)}send(D,$,X){let Y=this._extensions[bt.extensionName],J=$.binary?2:1,Q=$.compress,F,Z;if(typeof D==="string")F=Buffer.byteLength(D),Z=!1;else if(J7(D))F=D.size,Z=!1;else D=f8(D),F=D.length,Z=f8.readOnly;if(this._firstFragment){if(this._firstFragment=!1,Q&&Y&&Y.params[Y._isServer?"server_no_context_takeover":"client_no_context_takeover"])Q=F>=Y._threshold;this._compress=Q}else Q=!1,J=0;if($.fin)this._firstFragment=!0;let w={[U$]:F,fin:$.fin,generateMask:this._generateMask,mask:$.mask,maskBuffer:this._maskBuffer,opcode:J,readOnly:Z,rsv1:Q};if(J7(D))if(this._state!==j$)this.enqueue([this.getBlobData,D,this._compress,w,X]);else this.getBlobData(D,this._compress,w,X);else if(this._state!==j$)this.enqueue([this.dispatch,D,this._compress,w,X]);else this.dispatch(D,this._compress,w,X)}getBlobData(D,$,X,Y){this._bufferedBytes+=X[U$],this._state=FCD,D.arrayBuffer().then((J)=>{if(this._socket.destroyed){let F=Error("The socket was closed while the blob was being read");process.nextTick(DM,this,F,Y);return}this._bufferedBytes-=X[U$];let Q=f8(J);if(!$)this._state=j$,this.sendFrame(I4.frame(Q,X),Y),this.dequeue();else this.dispatch(Q,$,X,Y)}).catch((J)=>{process.nextTick(ZCD,this,J,Y)})}dispatch(D,$,X,Y){if(!$){this.sendFrame(I4.frame(D,X),Y);return}let J=this._extensions[bt.extensionName];this._bufferedBytes+=X[U$],this._state=QCD,J.compress(D,X.fin,(Q,F)=>{if(this._socket.destroyed){let Z=Error("The socket was closed while data was being compressed");DM(this,Z,Y);return}this._bufferedBytes-=X[U$],this._state=j$,X.readOnly=!1,this.sendFrame(I4.frame(F,X),Y),this.dequeue()})}dequeue(){while(this._state===j$&&this._queue.length){let D=this._queue.shift();this._bufferedBytes-=D[3][U$],Reflect.apply(D[0],this,D.slice(1))}}enqueue(D){this._bufferedBytes+=D[3][U$],this._queue.push(D)}sendFrame(D,$){if(D.length===2)this._socket.cork(),this._socket.write(D[0]),this._socket.write(D[1],$),this._socket.uncork();else this._socket.write(D[0],$)}}gt.exports=I4;function DM(D,$,X){if(typeof X==="function")X($);for(let Y=0;Y<D._queue.length;Y++){let J=D._queue[Y],Q=J[J.length-1];if(typeof Q==="function")Q($)}}function ZCD(D,$,X){DM(D,$,X),D.onerror($)}});var ot=T((foD,rt)=>{var{kForOnEventAttribute:W2,kListener:XM}=j6(),mt=Symbol("kCode"),ct=Symbol("kData"),dt=Symbol("kError"),lt=Symbol("kMessage"),nt=Symbol("kReason"),Q7=Symbol("kTarget"),it=Symbol("kType"),pt=Symbol("kWasClean");class A4{constructor(D){this[Q7]=null,this[it]=D}get target(){return this[Q7]}get type(){return this[it]}}Object.defineProperty(A4.prototype,"target",{enumerable:!0});Object.defineProperty(A4.prototype,"type",{enumerable:!0});class F7 extends A4{constructor(D,$={}){super(D);this[mt]=$.code===void 0?0:$.code,this[nt]=$.reason===void 0?"":$.reason,this[pt]=$.wasClean===void 0?!1:$.wasClean}get code(){return this[mt]}get reason(){return this[nt]}get wasClean(){return this[pt]}}Object.defineProperty(F7.prototype,"code",{enumerable:!0});Object.defineProperty(F7.prototype,"reason",{enumerable:!0});Object.defineProperty(F7.prototype,"wasClean",{enumerable:!0});class K2 extends A4{constructor(D,$={}){super(D);this[dt]=$.error===void 0?null:$.error,this[lt]=$.message===void 0?"":$.message}get error(){return this[dt]}get message(){return this[lt]}}Object.defineProperty(K2.prototype,"error",{enumerable:!0});Object.defineProperty(K2.prototype,"message",{enumerable:!0});class Ew extends A4{constructor(D,$={}){super(D);this[ct]=$.data===void 0?null:$.data}get data(){return this[ct]}}Object.defineProperty(Ew.prototype,"data",{enumerable:!0});var wCD={addEventListener(D,$,X={}){for(let J of this.listeners(D))if(!X[W2]&&J[XM]===$&&!J[W2])return;let Y;if(D==="message")Y=function(Q,F){let Z=new Ew("message",{data:F?Q:Q.toString()});Z[Q7]=this,jw($,this,Z)};else if(D==="close")Y=function(Q,F){let Z=new F7("close",{code:Q,reason:F.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});Z[Q7]=this,jw($,this,Z)};else if(D==="error")Y=function(Q){let F=new K2("error",{error:Q,message:Q.message});F[Q7]=this,jw($,this,F)};else if(D==="open")Y=function(){let Q=new A4("open");Q[Q7]=this,jw($,this,Q)};else return;if(Y[W2]=!!X[W2],Y[XM]=$,X.once)this.once(D,Y);else this.on(D,Y)},removeEventListener(D,$){for(let X of this.listeners(D))if(X[XM]===$&&!X[W2]){this.removeListener(D,X);break}}};rt.exports={CloseEvent:F7,ErrorEvent:K2,Event:A4,EventTarget:wCD,MessageEvent:Ew};function jw(D,$,X){if(typeof D==="object"&&D.handleEvent)D.handleEvent.call(D,X);else D.call($,X)}});var JM=T((yoD,at)=>{var{tokenChars:H2}=X7();function t$(D,$,X){if(D[$]===void 0)D[$]=[X];else D[$].push(X)}function GCD(D){let $=Object.create(null),X=Object.create(null),Y=!1,J=!1,Q=!1,F,Z,w=-1,G=-1,U=-1,O=0;for(;O<D.length;O++)if(G=D.charCodeAt(O),F===void 0)if(U===-1&&H2[G]===1){if(w===-1)w=O}else if(O!==0&&(G===32||G===9)){if(U===-1&&w!==-1)U=O}else if(G===59||G===44){if(w===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(U===-1)U=O;let q=D.slice(w,U);if(G===44)t$($,q,X),X=Object.create(null);else F=q;w=U=-1}else throw SyntaxError(`Unexpected character at index ${O}`);else if(Z===void 0)if(U===-1&&H2[G]===1){if(w===-1)w=O}else if(G===32||G===9){if(U===-1&&w!==-1)U=O}else if(G===59||G===44){if(w===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(U===-1)U=O;if(t$(X,D.slice(w,U),!0),G===44)t$($,F,X),X=Object.create(null),F=void 0;w=U=-1}else if(G===61&&w!==-1&&U===-1)Z=D.slice(w,O),w=U=-1;else throw SyntaxError(`Unexpected character at index ${O}`);else if(J){if(H2[G]!==1)throw SyntaxError(`Unexpected character at index ${O}`);if(w===-1)w=O;else if(!Y)Y=!0;J=!1}else if(Q)if(H2[G]===1){if(w===-1)w=O}else if(G===34&&w!==-1)Q=!1,U=O;else if(G===92)J=!0;else throw SyntaxError(`Unexpected character at index ${O}`);else if(G===34&&D.charCodeAt(O-1)===61)Q=!0;else if(U===-1&&H2[G]===1){if(w===-1)w=O}else if(w!==-1&&(G===32||G===9)){if(U===-1)U=O}else if(G===59||G===44){if(w===-1)throw SyntaxError(`Unexpected character at index ${O}`);if(U===-1)U=O;let q=D.slice(w,U);if(Y)q=q.replace(/\\/g,""),Y=!1;if(t$(X,Z,q),G===44)t$($,F,X),X=Object.create(null),F=void 0;Z=void 0,w=U=-1}else throw SyntaxError(`Unexpected character at index ${O}`);if(w===-1||Q||G===32||G===9)throw SyntaxError("Unexpected end of input");if(U===-1)U=O;let z=D.slice(w,U);if(F===void 0)t$($,z,X);else{if(Z===void 0)t$(X,z,!0);else if(Y)t$(X,Z,z.replace(/\\/g,""));else t$(X,Z,z);t$($,F,X)}return $}function UCD(D){return Object.keys(D).map(($)=>{let X=D[$];if(!Array.isArray(X))X=[X];return X.map((Y)=>{return[$].concat(Object.keys(Y).map((J)=>{let Q=Y[J];if(!Array.isArray(Q))Q=[Q];return Q.map((F)=>F===!0?J:`${J}=${F}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}at.exports={format:UCD,parse:GCD}});var xw=T((goD,ws)=>{var OCD=i("events"),qCD=i("https"),zCD=i("http"),et=i("net"),BCD=i("tls"),{randomBytes:WCD,createHash:KCD}=i("crypto"),{Duplex:boD,Readable:hoD}=i("stream"),{URL:YM}=i("url"),R4=B2(),HCD=eL(),VCD=$M(),{isBlob:NCD}=X7(),{BINARY_TYPES:tt,CLOSE_TIMEOUT:LCD,EMPTY_BUFFER:Tw,GUID:MCD,kForOnEventAttribute:QM,kListener:ICD,kStatusCode:ACD,kWebSocket:p0,NOOP:Ds}=j6(),{EventTarget:{addEventListener:RCD,removeEventListener:jCD}}=ot(),{format:ECD,parse:TCD}=JM(),{toBuffer:CCD}=q2(),$s=Symbol("kAborted"),FM=[8,13],T6=["CONNECTING","OPEN","CLOSING","CLOSED"],PCD=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class ED extends OCD{constructor(D,$,X){super();if(this._binaryType=tt[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Tw,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=ED.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,D!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,$===void 0)$=[];else if(!Array.isArray($))if(typeof $==="object"&&$!==null)X=$,$=[];else $=[$];Xs(this,D,$,X)}else this._autoPong=X.autoPong,this._closeTimeout=X.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(D){if(!tt.includes(D))return;if(this._binaryType=D,this._receiver)this._receiver._binaryType=D}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(D,$,X){let Y=new HCD({allowSynchronousEvents:X.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:X.maxPayload,skipUTF8Validation:X.skipUTF8Validation}),J=new VCD(D,this._extensions,X.generateMask);if(this._receiver=Y,this._sender=J,this._socket=D,Y[p0]=this,J[p0]=this,D[p0]=this,Y.on("conclude",uCD),Y.on("drain",vCD),Y.on("error",_CD),Y.on("message",kCD),Y.on("ping",fCD),Y.on("pong",yCD),J.onerror=bCD,D.setTimeout)D.setTimeout(0);if(D.setNoDelay)D.setNoDelay();if($.length>0)D.unshift($);D.on("close",Qs),D.on("data",Pw),D.on("end",Fs),D.on("error",Zs),this._readyState=ED.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=ED.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[R4.extensionName])this._extensions[R4.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=ED.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(D,$){if(this.readyState===ED.CLOSED)return;if(this.readyState===ED.CONNECTING){p1(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===ED.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=ED.CLOSING,this._sender.close(D,$,!this._isServer,(X)=>{if(X)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),Ys(this)}pause(){if(this.readyState===ED.CONNECTING||this.readyState===ED.CLOSED)return;this._paused=!0,this._socket.pause()}ping(D,$,X){if(this.readyState===ED.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof D==="function")X=D,D=$=void 0;else if(typeof $==="function")X=$,$=void 0;if(typeof D==="number")D=D.toString();if(this.readyState!==ED.OPEN){ZM(this,D,X);return}if($===void 0)$=!this._isServer;this._sender.ping(D||Tw,$,X)}pong(D,$,X){if(this.readyState===ED.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof D==="function")X=D,D=$=void 0;else if(typeof $==="function")X=$,$=void 0;if(typeof D==="number")D=D.toString();if(this.readyState!==ED.OPEN){ZM(this,D,X);return}if($===void 0)$=!this._isServer;this._sender.pong(D||Tw,$,X)}resume(){if(this.readyState===ED.CONNECTING||this.readyState===ED.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(D,$,X){if(this.readyState===ED.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof $==="function")X=$,$={};if(typeof D==="number")D=D.toString();if(this.readyState!==ED.OPEN){ZM(this,D,X);return}let Y={binary:typeof D!=="string",mask:!this._isServer,compress:!0,fin:!0,...$};if(!this._extensions[R4.extensionName])Y.compress=!1;this._sender.send(D||Tw,Y,X)}terminate(){if(this.readyState===ED.CLOSED)return;if(this.readyState===ED.CONNECTING){p1(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=ED.CLOSING,this._socket.destroy()}}Object.defineProperty(ED,"CONNECTING",{enumerable:!0,value:T6.indexOf("CONNECTING")});Object.defineProperty(ED.prototype,"CONNECTING",{enumerable:!0,value:T6.indexOf("CONNECTING")});Object.defineProperty(ED,"OPEN",{enumerable:!0,value:T6.indexOf("OPEN")});Object.defineProperty(ED.prototype,"OPEN",{enumerable:!0,value:T6.indexOf("OPEN")});Object.defineProperty(ED,"CLOSING",{enumerable:!0,value:T6.indexOf("CLOSING")});Object.defineProperty(ED.prototype,"CLOSING",{enumerable:!0,value:T6.indexOf("CLOSING")});Object.defineProperty(ED,"CLOSED",{enumerable:!0,value:T6.indexOf("CLOSED")});Object.defineProperty(ED.prototype,"CLOSED",{enumerable:!0,value:T6.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((D)=>{Object.defineProperty(ED.prototype,D,{enumerable:!0})});["open","error","close","message"].forEach((D)=>{Object.defineProperty(ED.prototype,`on${D}`,{enumerable:!0,get(){for(let $ of this.listeners(D))if($[QM])return $[ICD];return null},set($){for(let X of this.listeners(D))if(X[QM]){this.removeListener(D,X);break}if(typeof $!=="function")return;this.addEventListener(D,$,{[QM]:!0})}})});ED.prototype.addEventListener=RCD;ED.prototype.removeEventListener=jCD;ws.exports=ED;function Xs(D,$,X,Y){let J={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:LCD,protocolVersion:FM[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...Y,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(D._autoPong=J.autoPong,D._closeTimeout=J.closeTimeout,!FM.includes(J.protocolVersion))throw RangeError(`Unsupported protocol version: ${J.protocolVersion} (supported versions: ${FM.join(", ")})`);let Q;if($ instanceof YM)Q=$;else try{Q=new YM($)}catch(W){throw SyntaxError(`Invalid URL: ${$}`)}if(Q.protocol==="http:")Q.protocol="ws:";else if(Q.protocol==="https:")Q.protocol="wss:";D._url=Q.href;let F=Q.protocol==="wss:",Z=Q.protocol==="ws+unix:",w;if(Q.protocol!=="ws:"&&!F&&!Z)w=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(Z&&!Q.pathname)w="The URL's pathname is empty";else if(Q.hash)w="The URL contains a fragment identifier";if(w){let W=SyntaxError(w);if(D._redirects===0)throw W;else{Cw(D,W);return}}let G=F?443:80,U=WCD(16).toString("base64"),O=F?qCD.request:zCD.request,z=new Set,q;if(J.createConnection=J.createConnection||(F?SCD:xCD),J.defaultPort=J.defaultPort||G,J.port=Q.port||G,J.host=Q.hostname.startsWith("[")?Q.hostname.slice(1,-1):Q.hostname,J.headers={...J.headers,"Sec-WebSocket-Version":J.protocolVersion,"Sec-WebSocket-Key":U,Connection:"Upgrade",Upgrade:"websocket"},J.path=Q.pathname+Q.search,J.timeout=J.handshakeTimeout,J.perMessageDeflate)q=new R4(J.perMessageDeflate!==!0?J.perMessageDeflate:{},!1,J.maxPayload),J.headers["Sec-WebSocket-Extensions"]=ECD({[R4.extensionName]:q.offer()});if(X.length){for(let W of X){if(typeof W!=="string"||!PCD.test(W)||z.has(W))throw SyntaxError("An invalid or duplicated subprotocol was specified");z.add(W)}J.headers["Sec-WebSocket-Protocol"]=X.join(",")}if(J.origin)if(J.protocolVersion<13)J.headers["Sec-WebSocket-Origin"]=J.origin;else J.headers.Origin=J.origin;if(Q.username||Q.password)J.auth=`${Q.username}:${Q.password}`;if(Z){let W=J.path.split(":");J.socketPath=W[0],J.path=W[1]}let B;if(J.followRedirects){if(D._redirects===0){D._originalIpc=Z,D._originalSecure=F,D._originalHostOrSocketPath=Z?J.socketPath:Q.host;let W=Y&&Y.headers;if(Y={...Y,headers:{}},W)for(let[L,M]of Object.entries(W))Y.headers[L.toLowerCase()]=M}else if(D.listenerCount("redirect")===0){let W=Z?D._originalIpc?J.socketPath===D._originalHostOrSocketPath:!1:D._originalIpc?!1:Q.host===D._originalHostOrSocketPath;if(!W||D._originalSecure&&!F){if(delete J.headers.authorization,delete J.headers.cookie,!W)delete J.headers.host;J.auth=void 0}}if(J.auth&&!Y.headers.authorization)Y.headers.authorization="Basic "+Buffer.from(J.auth).toString("base64");if(B=D._req=O(J),D._redirects)D.emit("redirect",D.url,B)}else B=D._req=O(J);if(J.timeout)B.on("timeout",()=>{p1(D,B,"Opening handshake has timed out")});if(B.on("error",(W)=>{if(B===null||B[$s])return;B=D._req=null,Cw(D,W)}),B.on("response",(W)=>{let L=W.headers.location,M=W.statusCode;if(L&&J.followRedirects&&M>=300&&M<400){if(++D._redirects>J.maxRedirects){p1(D,B,"Maximum redirects exceeded");return}B.abort();let I;try{I=new YM(L,$)}catch(K){let N=SyntaxError(`Invalid URL: ${L}`);Cw(D,N);return}Xs(D,I,X,Y)}else if(!D.emit("unexpected-response",B,W))p1(D,B,`Unexpected server response: ${W.statusCode}`)}),B.on("upgrade",(W,L,M)=>{if(D.emit("upgrade",W),D.readyState!==ED.CONNECTING)return;B=D._req=null;let I=W.headers.upgrade;if(I===void 0||I.toLowerCase()!=="websocket"){p1(D,L,"Invalid Upgrade header");return}let K=KCD("sha1").update(U+MCD).digest("base64");if(W.headers["sec-websocket-accept"]!==K){p1(D,L,"Invalid Sec-WebSocket-Accept header");return}let N=W.headers["sec-websocket-protocol"],V;if(N!==void 0){if(!z.size)V="Server sent a subprotocol but none was requested";else if(!z.has(N))V="Server sent an invalid subprotocol"}else if(z.size)V="Server sent no subprotocol";if(V){p1(D,L,V);return}if(N)D._protocol=N;let R=W.headers["sec-websocket-extensions"];if(R!==void 0){if(!q){p1(D,L,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let x;try{x=TCD(R)}catch(_){p1(D,L,"Invalid Sec-WebSocket-Extensions header");return}let A=Object.keys(x);if(A.length!==1||A[0]!==R4.extensionName){p1(D,L,"Server indicated an extension that was not requested");return}try{q.accept(x[R4.extensionName])}catch(_){p1(D,L,"Invalid Sec-WebSocket-Extensions header");return}D._extensions[R4.extensionName]=q}D.setSocket(L,M,{allowSynchronousEvents:J.allowSynchronousEvents,generateMask:J.generateMask,maxPayload:J.maxPayload,skipUTF8Validation:J.skipUTF8Validation})}),J.finishRequest)J.finishRequest(B,D);else B.end()}function Cw(D,$){D._readyState=ED.CLOSING,D._errorEmitted=!0,D.emit("error",$),D.emitClose()}function xCD(D){return D.path=D.socketPath,et.connect(D)}function SCD(D){if(D.path=void 0,!D.servername&&D.servername!=="")D.servername=et.isIP(D.host)?"":D.host;return BCD.connect(D)}function p1(D,$,X){D._readyState=ED.CLOSING;let Y=Error(X);if(Error.captureStackTrace(Y,p1),$.setHeader){if($[$s]=!0,$.abort(),$.socket&&!$.socket.destroyed)$.socket.destroy();process.nextTick(Cw,D,Y)}else $.destroy(Y),$.once("error",D.emit.bind(D,"error")),$.once("close",D.emitClose.bind(D))}function ZM(D,$,X){if($){let Y=NCD($)?$.size:CCD($).length;if(D._socket)D._sender._bufferedBytes+=Y;else D._bufferedAmount+=Y}if(X){let Y=Error(`WebSocket is not open: readyState ${D.readyState} (${T6[D.readyState]})`);process.nextTick(X,Y)}}function uCD(D,$){let X=this[p0];if(X._closeFrameReceived=!0,X._closeMessage=$,X._closeCode=D,X._socket[p0]===void 0)return;if(X._socket.removeListener("data",Pw),process.nextTick(Js,X._socket),D===1005)X.close();else X.close(D,$)}function vCD(){let D=this[p0];if(!D.isPaused)D._socket.resume()}function _CD(D){let $=this[p0];if($._socket[p0]!==void 0)$._socket.removeListener("data",Pw),process.nextTick(Js,$._socket),$.close(D[ACD]);if(!$._errorEmitted)$._errorEmitted=!0,$.emit("error",D)}function st(){this[p0].emitClose()}function kCD(D,$){this[p0].emit("message",D,$)}function fCD(D){let $=this[p0];if($._autoPong)$.pong(D,!this._isServer,Ds);$.emit("ping",D)}function yCD(D){this[p0].emit("pong",D)}function Js(D){D.resume()}function bCD(D){let $=this[p0];if($.readyState===ED.CLOSED)return;if($.readyState===ED.OPEN)$._readyState=ED.CLOSING,Ys($);if(this._socket.end(),!$._errorEmitted)$._errorEmitted=!0,$.emit("error",D)}function Ys(D){D._closeTimer=setTimeout(D._socket.destroy.bind(D._socket),D._closeTimeout)}function Qs(){let D=this[p0];if(this.removeListener("close",Qs),this.removeListener("data",Pw),this.removeListener("end",Fs),D._readyState=ED.CLOSING,!this._readableState.endEmitted&&!D._closeFrameReceived&&!D._receiver._writableState.errorEmitted&&this._readableState.length!==0){let $=this.read(this._readableState.length);D._receiver.write($)}if(D._receiver.end(),this[p0]=void 0,clearTimeout(D._closeTimer),D._receiver._writableState.finished||D._receiver._writableState.errorEmitted)D.emitClose();else D._receiver.on("error",st),D._receiver.on("finish",st)}function Pw(D){if(!this[p0]._receiver.write(D))this.pause()}function Fs(){let D=this[p0];D._readyState=ED.CLOSING,D._receiver.end(),this.end()}function Zs(){let D=this[p0];if(this.removeListener("error",Zs),this.on("error",Ds),D)D._readyState=ED.CLOSING,this.destroy()}});var qs=T((coD,Os)=>{var moD=xw(),{Duplex:hCD}=i("stream");function Gs(D){D.emit("close")}function gCD(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function Us(D){if(this.removeListener("error",Us),this.destroy(),this.listenerCount("error")===0)this.emit("error",D)}function mCD(D,$){let X=!0,Y=new hCD({...$,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return D.on("message",function(Q,F){let Z=!F&&Y._readableState.objectMode?Q.toString():Q;if(!Y.push(Z))D.pause()}),D.once("error",function(Q){if(Y.destroyed)return;X=!1,Y.destroy(Q)}),D.once("close",function(){if(Y.destroyed)return;Y.push(null)}),Y._destroy=function(J,Q){if(D.readyState===D.CLOSED){Q(J),process.nextTick(Gs,Y);return}let F=!1;if(D.once("error",function(w){F=!0,Q(w)}),D.once("close",function(){if(!F)Q(J);process.nextTick(Gs,Y)}),X)D.terminate()},Y._final=function(J){if(D.readyState===D.CONNECTING){D.once("open",function(){Y._final(J)});return}if(D._socket===null)return;if(D._socket._writableState.finished){if(J(),Y._readableState.endEmitted)Y.destroy()}else D._socket.once("finish",function(){J()}),D.close()},Y._read=function(){if(D.isPaused)D.resume()},Y._write=function(J,Q,F){if(D.readyState===D.CONNECTING){D.once("open",function(){Y._write(J,Q,F)});return}D.send(J,F)},Y.on("end",gCD),Y.on("error",Us),Y}Os.exports=mCD});var Bs=T((doD,zs)=>{var{tokenChars:cCD}=X7();function dCD(D){let $=new Set,X=-1,Y=-1,J=0;for(J;J<D.length;J++){let F=D.charCodeAt(J);if(Y===-1&&cCD[F]===1){if(X===-1)X=J}else if(J!==0&&(F===32||F===9)){if(Y===-1&&X!==-1)Y=J}else if(F===44){if(X===-1)throw SyntaxError(`Unexpected character at index ${J}`);if(Y===-1)Y=J;let Z=D.slice(X,Y);if($.has(Z))throw SyntaxError(`The "${Z}" subprotocol is duplicated`);$.add(Z),X=Y=-1}else throw SyntaxError(`Unexpected character at index ${J}`)}if(X===-1||Y!==-1)throw SyntaxError("Unexpected end of input");let Q=D.slice(X,J);if($.has(Q))throw SyntaxError(`The "${Q}" subprotocol is duplicated`);return $.add(Q),$}zs.exports={parse:dCD}});var Ns=T((noD,Vs)=>{var lCD=i("events"),Sw=i("http"),{Duplex:loD}=i("stream"),{createHash:nCD}=i("crypto"),Ws=JM(),b8=B2(),iCD=Bs(),pCD=xw(),{CLOSE_TIMEOUT:rCD,GUID:oCD,kWebSocket:aCD}=j6(),tCD=/^[+/0-9A-Za-z]{22}==$/;class Hs extends lCD{constructor(D,$){super();if(D={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:rCD,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:pCD,...D},D.port==null&&!D.server&&!D.noServer||D.port!=null&&(D.server||D.noServer)||D.server&&D.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(D.port!=null)this._server=Sw.createServer((X,Y)=>{let J=Sw.STATUS_CODES[426];Y.writeHead(426,{"Content-Length":J.length,"Content-Type":"text/plain"}),Y.end(J)}),this._server.listen(D.port,D.host,D.backlog,$);else if(D.server)this._server=D.server;if(this._server){let X=this.emit.bind(this,"connection");this._removeListeners=sCD(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(Y,J,Q)=>{this.handleUpgrade(Y,J,Q,X)}})}if(D.perMessageDeflate===!0)D.perMessageDeflate={};if(D.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=D,this._state=0}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(D){if(this._state===2){if(D)this.once("close",()=>{D(Error("The server is not running"))});process.nextTick(V2,this);return}if(D)this.once("close",D);if(this._state===1)return;if(this._state=1,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(V2,this);else this._shouldEmitClose=!0;else process.nextTick(V2,this)}else{let $=this._server;this._removeListeners(),this._removeListeners=this._server=null,$.close(()=>{V2(this)})}}shouldHandle(D){if(this.options.path){let $=D.url.indexOf("?");if(($!==-1?D.url.slice(0,$):D.url)!==this.options.path)return!1}return!0}handleUpgrade(D,$,X,Y){$.on("error",Ks);let J=D.headers["sec-websocket-key"],Q=D.headers.upgrade,F=+D.headers["sec-websocket-version"];if(D.method!=="GET"){h8(this,D,$,405,"Invalid HTTP method");return}if(Q===void 0||Q.toLowerCase()!=="websocket"){h8(this,D,$,400,"Invalid Upgrade header");return}if(J===void 0||!tCD.test(J)){h8(this,D,$,400,"Missing or invalid Sec-WebSocket-Key header");return}if(F!==13&&F!==8){h8(this,D,$,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(D)){N2($,400);return}let Z=D.headers["sec-websocket-protocol"],w=new Set;if(Z!==void 0)try{w=iCD.parse(Z)}catch(O){h8(this,D,$,400,"Invalid Sec-WebSocket-Protocol header");return}let G=D.headers["sec-websocket-extensions"],U={};if(this.options.perMessageDeflate&&G!==void 0){let O=new b8(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let z=Ws.parse(G);if(z[b8.extensionName])O.accept(z[b8.extensionName]),U[b8.extensionName]=O}catch(z){h8(this,D,$,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let O={origin:D.headers[`${F===8?"sec-websocket-origin":"origin"}`],secure:!!(D.socket.authorized||D.socket.encrypted),req:D};if(this.options.verifyClient.length===2){this.options.verifyClient(O,(z,q,B,W)=>{if(!z)return N2($,q||401,B,W);this.completeUpgrade(U,J,w,D,$,X,Y)});return}if(!this.options.verifyClient(O))return N2($,401)}this.completeUpgrade(U,J,w,D,$,X,Y)}completeUpgrade(D,$,X,Y,J,Q,F){if(!J.readable||!J.writable)return J.destroy();if(J[aCD])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return N2(J,503);let w=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${nCD("sha1").update($+oCD).digest("base64")}`],G=new this.options.WebSocket(null,void 0,this.options);if(X.size){let U=this.options.handleProtocols?this.options.handleProtocols(X,Y):X.values().next().value;if(U)w.push(`Sec-WebSocket-Protocol: ${U}`),G._protocol=U}if(D[b8.extensionName]){let U=D[b8.extensionName].params,O=Ws.format({[b8.extensionName]:[U]});w.push(`Sec-WebSocket-Extensions: ${O}`),G._extensions=D}if(this.emit("headers",w,Y),J.write(w.concat(`\r
|
|
401
401
|
`).join(`\r
|
|
402
402
|
`)),J.removeListener("error",Ks),G.setSocket(J,Q,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(G),G.on("close",()=>{if(this.clients.delete(G),this._shouldEmitClose&&!this.clients.size)process.nextTick(V2,this)});F(G,Y)}}Vs.exports=Hs;function sCD(D,$){for(let X of Object.keys($))D.on(X,$[X]);return function(){for(let Y of Object.keys($))D.removeListener(Y,$[Y])}}function V2(D){D._state=2,D.emit("close")}function Ks(){this.destroy()}function N2(D,$,X,Y){X=X||Sw.STATUS_CODES[$],Y={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(X),...Y},D.once("finish",D.destroy),D.end(`HTTP/1.1 ${$} ${Sw.STATUS_CODES[$]}\r
|
|
403
403
|
`+Object.keys(Y).map((J)=>`${J}: ${Y[J]}`).join(`\r
|
|
@@ -419,7 +419,7 @@ PS: You can ignore this check with "--ignore-checksum-check"`),Error("Cannot upl
|
|
|
419
419
|
* Copyright (c) 2014-present, Jon Schlinkert.
|
|
420
420
|
* Licensed under the MIT License.
|
|
421
421
|
*/var QSD=i("util"),le=ce(),de=(D)=>D!==null&&typeof D==="object"&&!Array.isArray(D),FSD=(D)=>{return($)=>D===!0?Number($):String($)},kM=(D)=>{return typeof D==="number"||typeof D==="string"&&D!==""},T2=(D)=>Number.isInteger(+D),fM=(D)=>{let $=`${D}`,X=-1;if($[0]==="-")$=$.slice(1);if($==="0")return!1;while($[++X]==="0");return X>0},ZSD=(D,$,X)=>{if(typeof D==="string"||typeof $==="string")return!0;return X.stringify===!0},wSD=(D,$,X)=>{if($>0){let Y=D[0]==="-"?"-":"";if(Y)D=D.slice(1);D=Y+D.padStart(Y?$-1:$,"0")}if(X===!1)return String(D);return D},aw=(D,$)=>{let X=D[0]==="-"?"-":"";if(X)D=D.slice(1),$--;while(D.length<$)D="0"+D;return X?"-"+D:D},GSD=(D,$,X)=>{D.negatives.sort((Z,w)=>Z<w?-1:Z>w?1:0),D.positives.sort((Z,w)=>Z<w?-1:Z>w?1:0);let Y=$.capture?"":"?:",J="",Q="",F;if(D.positives.length)J=D.positives.map((Z)=>aw(String(Z),X)).join("|");if(D.negatives.length)Q=`-(${Y}${D.negatives.map((Z)=>aw(String(Z),X)).join("|")})`;if(J&&Q)F=`${J}|${Q}`;else F=J||Q;if($.wrap)return`(${Y}${F})`;return F},ne=(D,$,X,Y)=>{if(X)return le(D,$,{wrap:!1,...Y});let J=String.fromCharCode(D);if(D===$)return J;let Q=String.fromCharCode($);return`[${J}-${Q}]`},ie=(D,$,X)=>{if(Array.isArray(D)){let Y=X.wrap===!0,J=X.capture?"":"?:";return Y?`(${J}${D.join("|")})`:D.join("|")}return le(D,$,X)},pe=(...D)=>{return RangeError("Invalid range arguments: "+QSD.inspect(...D))},re=(D,$,X)=>{if(X.strictRanges===!0)throw pe([D,$]);return[]},USD=(D,$)=>{if($.strictRanges===!0)throw TypeError(`Expected step "${D}" to be a number`);return[]},OSD=(D,$,X=1,Y={})=>{let J=Number(D),Q=Number($);if(!Number.isInteger(J)||!Number.isInteger(Q)){if(Y.strictRanges===!0)throw pe([D,$]);return[]}if(J===0)J=0;if(Q===0)Q=0;let F=J>Q,Z=String(D),w=String($),G=String(X);X=Math.max(Math.abs(X),1);let U=fM(Z)||fM(w)||fM(G),O=U?Math.max(Z.length,w.length,G.length):0,z=U===!1&&ZSD(D,$,Y)===!1,q=Y.transform||FSD(z);if(Y.toRegex&&X===1)return ne(aw(D,O),aw($,O),!0,Y);let B={negatives:[],positives:[]},W=(I)=>B[I<0?"negatives":"positives"].push(Math.abs(I)),L=[],M=0;while(F?J>=Q:J<=Q){if(Y.toRegex===!0&&X>1)W(J);else L.push(wSD(q(J,M),O,z));J=F?J-X:J+X,M++}if(Y.toRegex===!0)return X>1?GSD(B,Y,O):ie(L,null,{wrap:!1,...Y});return L},qSD=(D,$,X=1,Y={})=>{if(!T2(D)&&D.length>1||!T2($)&&$.length>1)return re(D,$,Y);let J=Y.transform||((z)=>String.fromCharCode(z)),Q=`${D}`.charCodeAt(0),F=`${$}`.charCodeAt(0),Z=Q>F,w=Math.min(Q,F),G=Math.max(Q,F);if(Y.toRegex&&X===1)return ne(w,G,!1,Y);let U=[],O=0;while(Z?Q>=F:Q<=F)U.push(J(Q,O)),Q=Z?Q-X:Q+X,O++;if(Y.toRegex===!0)return ie(U,null,{wrap:!1,options:Y});return U},ow=(D,$,X,Y={})=>{if($==null&&kM(D))return[D];if(!kM(D)||!kM($))return re(D,$,Y);if(typeof X==="function")return ow(D,$,1,{transform:X});if(de(X))return ow(D,$,0,X);let J={...Y};if(J.capture===!0)J.wrap=!0;if(X=X||J.step||1,!T2(X)){if(X!=null&&!de(X))return USD(X,J);return ow(D,$,1,X)}if(T2(D)&&T2($))return OSD(D,$,X,J);return qSD(D,$,Math.max(Math.abs(X),1),J)};oe.exports=ow});var se=T((FsD,te)=>{var zSD=yM(),ae=pw(),BSD=(D,$={})=>{let X=(Y,J={})=>{let Q=ae.isInvalidBrace(J),F=Y.invalid===!0&&$.escapeInvalid===!0,Z=Q===!0||F===!0,w=$.escapeInvalid===!0?"\\":"",G="";if(Y.isOpen===!0)return w+Y.value;if(Y.isClose===!0)return console.log("node.isClose",w,Y.value),w+Y.value;if(Y.type==="open")return Z?w+Y.value:"(";if(Y.type==="close")return Z?w+Y.value:")";if(Y.type==="comma")return Y.prev.type==="comma"?"":Z?Y.value:"|";if(Y.value)return Y.value;if(Y.nodes&&Y.ranges>0){let U=ae.reduce(Y.nodes),O=zSD(...U,{...$,wrap:!1,toRegex:!0,strictZeros:!0});if(O.length!==0)return U.length>1&&O.length>1?`(${O})`:O}if(Y.nodes)for(let U of Y.nodes)G+=X(U,Y);return G};return X(D)};te.exports=BSD});var $DD=T((ZsD,DDD)=>{var WSD=yM(),ee=rw(),z7=pw(),r8=(D="",$="",X=!1)=>{let Y=[];if(D=[].concat(D),$=[].concat($),!$.length)return D;if(!D.length)return X?z7.flatten($).map((J)=>`{${J}}`):$;for(let J of D)if(Array.isArray(J))for(let Q of J)Y.push(r8(Q,$,X));else for(let Q of $){if(X===!0&&typeof Q==="string")Q=`{${Q}}`;Y.push(Array.isArray(Q)?r8(J,Q,X):J+Q)}return z7.flatten(Y)},KSD=(D,$={})=>{let X=$.rangeLimit===void 0?1000:$.rangeLimit,Y=(J,Q={})=>{J.queue=[];let F=Q,Z=Q.queue;while(F.type!=="brace"&&F.type!=="root"&&F.parent)F=F.parent,Z=F.queue;if(J.invalid||J.dollar){Z.push(r8(Z.pop(),ee(J,$)));return}if(J.type==="brace"&&J.invalid!==!0&&J.nodes.length===2){Z.push(r8(Z.pop(),["{}"]));return}if(J.nodes&&J.ranges>0){let O=z7.reduce(J.nodes);if(z7.exceedsLimit(...O,$.step,X))throw RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let z=WSD(...O,$);if(z.length===0)z=ee(J,$);Z.push(r8(Z.pop(),z)),J.nodes=[];return}let w=z7.encloseBrace(J),G=J.queue,U=J;while(U.type!=="brace"&&U.type!=="root"&&U.parent)U=U.parent,G=U.queue;for(let O=0;O<J.nodes.length;O++){let z=J.nodes[O];if(z.type==="comma"&&J.type==="brace"){if(O===1)G.push("");G.push("");continue}if(z.type==="close"){Z.push(r8(Z.pop(),G,w));continue}if(z.value&&z.type!=="open"){G.push(r8(G.pop(),z.value));continue}if(z.nodes)Y(z,J)}return G};return z7.flatten(Y(D))};DDD.exports=KSD});var JDD=T((wsD,XDD)=>{XDD.exports={MAX_LENGTH:1e4,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:`
|
|
422
|
-
`,CHAR_NO_BREAK_SPACE:" ",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:"\t",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var wDD=T((GsD,ZDD)=>{var HSD=rw(),{MAX_LENGTH:YDD,CHAR_BACKSLASH:bM,CHAR_BACKTICK:VSD,CHAR_COMMA:NSD,CHAR_DOT:LSD,CHAR_LEFT_PARENTHESES:MSD,CHAR_RIGHT_PARENTHESES:ISD,CHAR_LEFT_CURLY_BRACE:ASD,CHAR_RIGHT_CURLY_BRACE:RSD,CHAR_LEFT_SQUARE_BRACKET:QDD,CHAR_RIGHT_SQUARE_BRACKET:FDD,CHAR_DOUBLE_QUOTE:jSD,CHAR_SINGLE_QUOTE:ESD,CHAR_NO_BREAK_SPACE:TSD,CHAR_ZERO_WIDTH_NOBREAK_SPACE:CSD}=JDD(),PSD=(D,$={})=>{if(typeof D!=="string")throw TypeError("Expected a string");let X=$||{},Y=typeof X.maxLength==="number"?Math.min(YDD,X.maxLength):YDD;if(D.length>Y)throw SyntaxError(`Input length (${D.length}), exceeds max characters (${Y})`);let J={type:"root",input:D,nodes:[]},Q=[J],F=J,Z=J,w=0,G=D.length,U=0,O=0,z,q=()=>D[U++],B=(W)=>{if(W.type==="text"&&Z.type==="dot")Z.type="text";if(Z&&Z.type==="text"&&W.type==="text"){Z.value+=W.value;return}return F.nodes.push(W),W.parent=F,W.prev=Z,Z=W,W};B({type:"bos"});while(U<G){if(F=Q[Q.length-1],z=q(),z===CSD||z===TSD)continue;if(z===bM){B({type:"text",value:($.keepEscaping?z:"")+q()});continue}if(z===FDD){B({type:"text",value:"\\"+z});continue}if(z===QDD){w++;let W;while(U<G&&(W=q())){if(z+=W,W===QDD){w++;continue}if(W===bM){z+=q();continue}if(W===FDD){if(w--,w===0)break}}B({type:"text",value:z});continue}if(z===MSD){F=B({type:"paren",nodes:[]}),Q.push(F),B({type:"text",value:z});continue}if(z===ISD){if(F.type!=="paren"){B({type:"text",value:z});continue}F=Q.pop(),B({type:"text",value:z}),F=Q[Q.length-1];continue}if(z===jSD||z===ESD||z===VSD){let W=z,L;if($.keepQuotes!==!0)z="";while(U<G&&(L=q())){if(L===bM){z+=L+q();continue}if(L===W){if($.keepQuotes===!0)z+=L;break}z+=L}B({type:"text",value:z});continue}if(z===ASD){O++;let L={type:"brace",open:!0,close:!1,dollar:Z.value&&Z.value.slice(-1)==="$"||F.dollar===!0,depth:O,commas:0,ranges:0,nodes:[]};F=B(L),Q.push(F),B({type:"open",value:z});continue}if(z===RSD){if(F.type!=="brace"){B({type:"text",value:z});continue}let W="close";F=Q.pop(),F.close=!0,B({type:W,value:z}),O--,F=Q[Q.length-1];continue}if(z===NSD&&O>0){if(F.ranges>0){F.ranges=0;let W=F.nodes.shift();F.nodes=[W,{type:"text",value:HSD(F)}]}B({type:"comma",value:z}),F.commas++;continue}if(z===LSD&&O>0&&F.commas===0){let W=F.nodes;if(O===0||W.length===0){B({type:"text",value:z});continue}if(Z.type==="dot"){if(F.range=[],Z.value+=z,Z.type="range",F.nodes.length!==3&&F.nodes.length!==5){F.invalid=!0,F.ranges=0,Z.type="text";continue}F.ranges++,F.args=[];continue}if(Z.type==="range"){W.pop();let L=W[W.length-1];L.value+=Z.value+z,Z=L,F.ranges--;continue}B({type:"dot",value:z});continue}B({type:"text",value:z})}do if(F=Q.pop(),F.type!=="root"){F.nodes.forEach((M)=>{if(!M.nodes){if(M.type==="open")M.isOpen=!0;if(M.type==="close")M.isClose=!0;if(!M.nodes)M.type="text";M.invalid=!0}});let W=Q[Q.length-1],L=W.nodes.indexOf(F);W.nodes.splice(L,1,...F.nodes)}while(Q.length>0);return B({type:"eos"}),J};ZDD.exports=PSD});var ODD=T((UsD,UDD)=>{var GDD=rw(),xSD=se(),SSD=$DD(),uSD=wDD(),r1=(D,$={})=>{let X=[];if(Array.isArray(D))for(let Y of D){let J=r1.create(Y,$);if(Array.isArray(J))X.push(...J);else X.push(J)}else X=[].concat(r1.create(D,$));if($&&$.expand===!0&&$.nodupes===!0)X=[...new Set(X)];return X};r1.parse=(D,$={})=>uSD(D,$);r1.stringify=(D,$={})=>{if(typeof D==="string")return GDD(r1.parse(D,$),$);return GDD(D,$)};r1.compile=(D,$={})=>{if(typeof D==="string")D=r1.parse(D,$);return xSD(D,$)};r1.expand=(D,$={})=>{if(typeof D==="string")D=r1.parse(D,$);let X=SSD(D,$);if($.noempty===!0)X=X.filter(Boolean);if($.nodupes===!0)X=[...new Set(X)];return X};r1.create=(D,$={})=>{if(D===""||D.length<3)return[D];return $.expand!==!0?r1.compile(D,$):r1.expand(D,$)};UDD.exports=r1});var C2=T((OsD,zDD)=>{var vSD=i("path"),qDD={DOT_LITERAL:"\\.",PLUS_LITERAL:"\\+",QMARK_LITERAL:"\\?",SLASH_LITERAL:"\\/",ONE_CHAR:"(?=.)",QMARK:"[^/]",END_ANCHOR:"(?:\\/|$)",DOTS_SLASH:"\\.{1,2}(?:\\/|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|\\/)\\.{1,2}(?:\\/|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:\\/|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:\\/|$))",QMARK_NO_DOT:"[^.\\/]",STAR:"[^/]*?",START_ANCHOR:"(?:^|\\/)"},_SD={...qDD,SLASH_LITERAL:"[\\\\/]",QMARK:"[^\\\\/]",STAR:"[^\\\\/]*?",DOTS_SLASH:"\\.{1,2}(?:[\\\\/]|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|[\\\\/])\\.{1,2}(?:[\\\\/]|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:[\\\\/]|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:[\\\\/]|$))",QMARK_NO_DOT:"[^.\\\\/]",START_ANCHOR:"(?:^|[\\\\/])",END_ANCHOR:"(?:[\\\\/]|$)"},kSD={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};zDD.exports={MAX_LENGTH:65536,POSIX_REGEX_SOURCE:kSD,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:vSD.sep,extglobChars(D){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${D.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(D){return D===!0?_SD:qDD}}});var P2=T((cSD)=>{var fSD=i("path"),ySD=process.platform==="win32",{REGEX_BACKSLASH:bSD,REGEX_REMOVE_BACKSLASH:hSD,REGEX_SPECIAL_CHARS:gSD,REGEX_SPECIAL_CHARS_GLOBAL:mSD}=C2();cSD.isObject=(D)=>D!==null&&typeof D==="object"&&!Array.isArray(D);cSD.hasRegexChars=(D)=>gSD.test(D);cSD.isRegexChar=(D)=>D.length===1&&cSD.hasRegexChars(D);cSD.escapeRegex=(D)=>D.replace(mSD,"\\$1");cSD.toPosixSlashes=(D)=>D.replace(bSD,"/");cSD.removeBackslashes=(D)=>{return D.replace(hSD,($)=>{return $==="\\"?"":$})};cSD.supportsLookbehinds=()=>{let D=process.version.slice(1).split(".").map(Number);if(D.length===3&&D[0]>=9||D[0]===8&&D[1]>=10)return!0;return!1};cSD.isWindows=(D)=>{if(D&&typeof D.windows==="boolean")return D.windows;return ySD===!0||fSD.sep==="\\"};cSD.escapeLast=(D,$,X)=>{let Y=D.lastIndexOf($,X);if(Y===-1)return D;if(D[Y-1]==="\\")return cSD.escapeLast(D,$,Y-1);return`${D.slice(0,Y)}\\${D.slice(Y)}`};cSD.removePrefix=(D,$={})=>{let X=D;if(X.startsWith("./"))X=X.slice(2),$.prefix="./";return X};cSD.wrapOutput=(D,$={},X={})=>{let Y=X.contains?"":"^",J=X.contains?"":"$",Q=`${Y}(?:${D})${J}`;if($.negated===!0)Q=`(?:^(?!${Q}).*$)`;return Q}});var ADD=T((zsD,IDD)=>{var KDD=P2(),{CHAR_ASTERISK:hM,CHAR_AT:sSD,CHAR_BACKWARD_SLASH:x2,CHAR_COMMA:eSD,CHAR_DOT:gM,CHAR_EXCLAMATION_MARK:mM,CHAR_FORWARD_SLASH:MDD,CHAR_LEFT_CURLY_BRACE:cM,CHAR_LEFT_PARENTHESES:dM,CHAR_LEFT_SQUARE_BRACKET:DuD,CHAR_PLUS:$uD,CHAR_QUESTION_MARK:HDD,CHAR_RIGHT_CURLY_BRACE:XuD,CHAR_RIGHT_PARENTHESES:VDD,CHAR_RIGHT_SQUARE_BRACKET:JuD}=C2(),NDD=(D)=>{return D===MDD||D===x2},LDD=(D)=>{if(D.isPrefix!==!0)D.depth=D.isGlobstar?1/0:1},YuD=(D,$)=>{let X=$||{},Y=D.length-1,J=X.parts===!0||X.scanToEnd===!0,Q=[],F=[],Z=[],w=D,G=-1,U=0,O=0,z=!1,q=!1,B=!1,W=!1,L=!1,M=!1,I=!1,K=!1,N=!1,V=!1,R=0,x,A,_={value:"",depth:0,isGlob:!1},v=()=>G>=Y,S=()=>w.charCodeAt(G+1),h=()=>{return x=A,w.charCodeAt(++G)};while(G<Y){A=h();let P;if(A===x2){if(I=_.backslashes=!0,A=h(),A===cM)M=!0;continue}if(M===!0||A===cM){R++;while(v()!==!0&&(A=h())){if(A===x2){I=_.backslashes=!0,h();continue}if(A===cM){R++;continue}if(M!==!0&&A===gM&&(A=h())===gM){if(z=_.isBrace=!0,B=_.isGlob=!0,V=!0,J===!0)continue;break}if(M!==!0&&A===eSD){if(z=_.isBrace=!0,B=_.isGlob=!0,V=!0,J===!0)continue;break}if(A===XuD){if(R--,R===0){M=!1,z=_.isBrace=!0,V=!0;break}}}if(J===!0)continue;break}if(A===MDD){if(Q.push(G),F.push(_),_={value:"",depth:0,isGlob:!1},V===!0)continue;if(x===gM&&G===U+1){U+=2;continue}O=G+1;continue}if(X.noext!==!0){if((A===$uD||A===sSD||A===hM||A===HDD||A===mM)===!0&&S()===dM){if(B=_.isGlob=!0,W=_.isExtglob=!0,V=!0,A===mM&&G===U)N=!0;if(J===!0){while(v()!==!0&&(A=h())){if(A===x2){I=_.backslashes=!0,A=h();continue}if(A===VDD){B=_.isGlob=!0,V=!0;break}}continue}break}}if(A===hM){if(x===hM)L=_.isGlobstar=!0;if(B=_.isGlob=!0,V=!0,J===!0)continue;break}if(A===HDD){if(B=_.isGlob=!0,V=!0,J===!0)continue;break}if(A===DuD){while(v()!==!0&&(P=h())){if(P===x2){I=_.backslashes=!0,h();continue}if(P===JuD){q=_.isBracket=!0,B=_.isGlob=!0,V=!0;break}}if(J===!0)continue;break}if(X.nonegate!==!0&&A===mM&&G===U){K=_.negated=!0,U++;continue}if(X.noparen!==!0&&A===dM){if(B=_.isGlob=!0,J===!0){while(v()!==!0&&(A=h())){if(A===dM){I=_.backslashes=!0,A=h();continue}if(A===VDD){V=!0;break}}continue}break}if(B===!0){if(V=!0,J===!0)continue;break}}if(X.noext===!0)W=!1,B=!1;let b=w,l="",f="";if(U>0)l=w.slice(0,U),w=w.slice(U),O-=U;if(b&&B===!0&&O>0)b=w.slice(0,O),f=w.slice(O);else if(B===!0)b="",f=w;else b=w;if(b&&b!==""&&b!=="/"&&b!==w){if(NDD(b.charCodeAt(b.length-1)))b=b.slice(0,-1)}if(X.unescape===!0){if(f)f=KDD.removeBackslashes(f);if(b&&I===!0)b=KDD.removeBackslashes(b)}let j={prefix:l,input:D,start:U,base:b,glob:f,isBrace:z,isBracket:q,isGlob:B,isExtglob:W,isGlobstar:L,negated:K,negatedExtglob:N};if(X.tokens===!0){if(j.maxDepth=0,!NDD(A))F.push(_);j.tokens=F}if(X.parts===!0||X.tokens===!0){let P;for(let u=0;u<Q.length;u++){let y=P?P+1:U,c=Q[u],g=D.slice(y,c);if(X.tokens){if(u===0&&U!==0)F[u].isPrefix=!0,F[u].value=l;else F[u].value=g;LDD(F[u]),j.maxDepth+=F[u].depth}if(u!==0||g!=="")Z.push(g);P=c}if(P&&P+1<D.length){let u=D.slice(P+1);if(Z.push(u),X.tokens)F[F.length-1].value=u,LDD(F[F.length-1]),j.maxDepth+=F[F.length-1].depth}j.slashes=Q,j.parts=Z}return j};IDD.exports=YuD});var EDD=T((BsD,jDD)=>{var tw=C2(),o1=P2(),{MAX_LENGTH:sw,POSIX_REGEX_SOURCE:QuD,REGEX_NON_SPECIAL_CHARS:FuD,REGEX_SPECIAL_CHARS_BACKREF:ZuD,REPLACEMENTS:RDD}=tw,wuD=(D,$)=>{if(typeof $.expandRange==="function")return $.expandRange(...D,$);D.sort();let X=`[${D.join("-")}]`;try{new RegExp(X)}catch(Y){return D.map((J)=>o1.escapeRegex(J)).join("..")}return X},B7=(D,$)=>{return`Missing ${D}: "${$}" - use "\\\\${$}" to match literal characters`},lM=(D,$)=>{if(typeof D!=="string")throw TypeError("Expected a string");D=RDD[D]||D;let X={...$},Y=typeof X.maxLength==="number"?Math.min(sw,X.maxLength):sw,J=D.length;if(J>Y)throw SyntaxError(`Input length: ${J}, exceeds maximum allowed length: ${Y}`);let Q={type:"bos",value:"",output:X.prepend||""},F=[Q],Z=X.capture?"":"?:",w=o1.isWindows($),G=tw.globChars(w),U=tw.extglobChars(G),{DOT_LITERAL:O,PLUS_LITERAL:z,SLASH_LITERAL:q,ONE_CHAR:B,DOTS_SLASH:W,NO_DOT:L,NO_DOT_SLASH:M,NO_DOTS_SLASH:I,QMARK:K,QMARK_NO_DOT:N,STAR:V,START_ANCHOR:R}=G,x=(k)=>{return`(${Z}(?:(?!${R}${k.dot?W:O}).)*?)`},A=X.dot?"":L,_=X.dot?K:N,v=X.bash===!0?x(X):V;if(X.capture)v=`(${v})`;if(typeof X.noext==="boolean")X.noextglob=X.noext;let S={input:D,index:-1,start:0,dot:X.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:F};D=o1.removePrefix(D,S),J=D.length;let h=[],b=[],l=[],f=Q,j,P=()=>S.index===J-1,u=S.peek=(k=1)=>D[S.index+k],y=S.advance=()=>D[++S.index]||"",c=()=>D.slice(S.index+1),g=(k="",zD=0)=>{S.consumed+=k,S.index+=zD},e=(k)=>{S.output+=k.output!=null?k.output:k.value,g(k.value)},d=()=>{let k=1;while(u()==="!"&&(u(2)!=="("||u(3)==="?"))y(),S.start++,k++;if(k%2===0)return!1;return S.negated=!0,S.start++,!0},r=(k)=>{S[k]++,l.push(k)},YD=(k)=>{S[k]--,l.pop()},C=(k)=>{if(f.type==="globstar"){let zD=S.braces>0&&(k.type==="comma"||k.type==="brace"),a=k.extglob===!0||h.length&&(k.type==="pipe"||k.type==="paren");if(k.type!=="slash"&&k.type!=="paren"&&!zD&&!a)S.output=S.output.slice(0,-f.output.length),f.type="star",f.value="*",f.output=v,S.output+=f.output}if(h.length&&k.type!=="paren")h[h.length-1].inner+=k.value;if(k.value||k.output)e(k);if(f&&f.type==="text"&&k.type==="text"){f.value+=k.value,f.output=(f.output||"")+k.value;return}k.prev=f,F.push(k),f=k},E=(k,zD)=>{let a={...U[zD],conditions:1,inner:""};a.prev=f,a.parens=S.parens,a.output=S.output;let WD=(X.capture?"(":"")+a.open;r("parens"),C({type:k,value:zD,output:S.output?"":B}),C({type:"paren",extglob:!0,value:y(),output:WD}),h.push(a)},p=(k)=>{let zD=k.close+(X.capture?")":""),a;if(k.type==="negate"){let WD=v;if(k.inner&&k.inner.length>1&&k.inner.includes("/"))WD=x(X);if(WD!==v||P()||/^\)+$/.test(c()))zD=k.close=`)$))${WD}`;if(k.inner.includes("*")&&(a=c())&&/^\.[^\\/.]+$/.test(a)){let uD=lM(a,{...$,fastpaths:!1}).output;zD=k.close=`)${uD})${WD})`}if(k.prev.type==="bos")S.negatedExtglob=!0}C({type:"paren",extglob:!0,value:j,output:zD}),YD("parens")};if(X.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(D)){let k=!1,zD=D.replace(ZuD,(a,WD,uD,gD,J0,v0)=>{if(gD==="\\")return k=!0,a;if(gD==="?"){if(WD)return WD+gD+(J0?K.repeat(J0.length):"");if(v0===0)return _+(J0?K.repeat(J0.length):"");return K.repeat(uD.length)}if(gD===".")return O.repeat(uD.length);if(gD==="*"){if(WD)return WD+gD+(J0?v:"");return v}return WD?a:`\\${a}`});if(k===!0)if(X.unescape===!0)zD=zD.replace(/\\/g,"");else zD=zD.replace(/\\+/g,(a)=>{return a.length%2===0?"\\\\":a?"\\":""});if(zD===D&&X.contains===!0)return S.output=D,S;return S.output=o1.wrapOutput(zD,S,$),S}while(!P()){if(j=y(),j==="\x00")continue;if(j==="\\"){let a=u();if(a==="/"&&X.bash!==!0)continue;if(a==="."||a===";")continue;if(!a){j+="\\",C({type:"text",value:j});continue}let WD=/^\\+/.exec(c()),uD=0;if(WD&&WD[0].length>2){if(uD=WD[0].length,S.index+=uD,uD%2!==0)j+="\\"}if(X.unescape===!0)j=y();else j+=y();if(S.brackets===0){C({type:"text",value:j});continue}}if(S.brackets>0&&(j!=="]"||f.value==="["||f.value==="[^")){if(X.posix!==!1&&j===":"){let a=f.value.slice(1);if(a.includes("[")){if(f.posix=!0,a.includes(":")){let WD=f.value.lastIndexOf("["),uD=f.value.slice(0,WD),gD=f.value.slice(WD+2),J0=QuD[gD];if(J0){if(f.value=uD+J0,S.backtrack=!0,y(),!Q.output&&F.indexOf(f)===1)Q.output=B;continue}}}}if(j==="["&&u()!==":"||j==="-"&&u()==="]")j=`\\${j}`;if(j==="]"&&(f.value==="["||f.value==="[^"))j=`\\${j}`;if(X.posix===!0&&j==="!"&&f.value==="[")j="^";f.value+=j,e({value:j});continue}if(S.quotes===1&&j!=='"'){j=o1.escapeRegex(j),f.value+=j,e({value:j});continue}if(j==='"'){if(S.quotes=S.quotes===1?0:1,X.keepQuotes===!0)C({type:"text",value:j});continue}if(j==="("){r("parens"),C({type:"paren",value:j});continue}if(j===")"){if(S.parens===0&&X.strictBrackets===!0)throw SyntaxError(B7("opening","("));let a=h[h.length-1];if(a&&S.parens===a.parens+1){p(h.pop());continue}C({type:"paren",value:j,output:S.parens?")":"\\)"}),YD("parens");continue}if(j==="["){if(X.nobracket===!0||!c().includes("]")){if(X.nobracket!==!0&&X.strictBrackets===!0)throw SyntaxError(B7("closing","]"));j=`\\${j}`}else r("brackets");C({type:"bracket",value:j});continue}if(j==="]"){if(X.nobracket===!0||f&&f.type==="bracket"&&f.value.length===1){C({type:"text",value:j,output:`\\${j}`});continue}if(S.brackets===0){if(X.strictBrackets===!0)throw SyntaxError(B7("opening","["));C({type:"text",value:j,output:`\\${j}`});continue}YD("brackets");let a=f.value.slice(1);if(f.posix!==!0&&a[0]==="^"&&!a.includes("/"))j=`/${j}`;if(f.value+=j,e({value:j}),X.literalBrackets===!1||o1.hasRegexChars(a))continue;let WD=o1.escapeRegex(f.value);if(S.output=S.output.slice(0,-f.value.length),X.literalBrackets===!0){S.output+=WD,f.value=WD;continue}f.value=`(${Z}${WD}|${f.value})`,S.output+=f.value;continue}if(j==="{"&&X.nobrace!==!0){r("braces");let a={type:"brace",value:j,output:"(",outputIndex:S.output.length,tokensIndex:S.tokens.length};b.push(a),C(a);continue}if(j==="}"){let a=b[b.length-1];if(X.nobrace===!0||!a){C({type:"text",value:j,output:j});continue}let WD=")";if(a.dots===!0){let uD=F.slice(),gD=[];for(let J0=uD.length-1;J0>=0;J0--){if(F.pop(),uD[J0].type==="brace")break;if(uD[J0].type!=="dots")gD.unshift(uD[J0].value)}WD=wuD(gD,X),S.backtrack=!0}if(a.comma!==!0&&a.dots!==!0){let uD=S.output.slice(0,a.outputIndex),gD=S.tokens.slice(a.tokensIndex);a.value=a.output="\\{",j=WD="\\}",S.output=uD;for(let J0 of gD)S.output+=J0.output||J0.value}C({type:"brace",value:j,output:WD}),YD("braces"),b.pop();continue}if(j==="|"){if(h.length>0)h[h.length-1].conditions++;C({type:"text",value:j});continue}if(j===","){let a=j,WD=b[b.length-1];if(WD&&l[l.length-1]==="braces")WD.comma=!0,a="|";C({type:"comma",value:j,output:a});continue}if(j==="/"){if(f.type==="dot"&&S.index===S.start+1){S.start=S.index+1,S.consumed="",S.output="",F.pop(),f=Q;continue}C({type:"slash",value:j,output:q});continue}if(j==="."){if(S.braces>0&&f.type==="dot"){if(f.value===".")f.output=O;let a=b[b.length-1];f.type="dots",f.output+=j,f.value+=j,a.dots=!0;continue}if(S.braces+S.parens===0&&f.type!=="bos"&&f.type!=="slash"){C({type:"text",value:j,output:O});continue}C({type:"dot",value:j,output:O});continue}if(j==="?"){if(!(f&&f.value==="(")&&X.noextglob!==!0&&u()==="("&&u(2)!=="?"){E("qmark",j);continue}if(f&&f.type==="paren"){let WD=u(),uD=j;if(WD==="<"&&!o1.supportsLookbehinds())throw Error("Node.js v10 or higher is required for regex lookbehinds");if(f.value==="("&&!/[!=<:]/.test(WD)||WD==="<"&&!/<([!=]|\w+>)/.test(c()))uD=`\\${j}`;C({type:"text",value:j,output:uD});continue}if(X.dot!==!0&&(f.type==="slash"||f.type==="bos")){C({type:"qmark",value:j,output:N});continue}C({type:"qmark",value:j,output:K});continue}if(j==="!"){if(X.noextglob!==!0&&u()==="("){if(u(2)!=="?"||!/[!=<:]/.test(u(3))){E("negate",j);continue}}if(X.nonegate!==!0&&S.index===0){d();continue}}if(j==="+"){if(X.noextglob!==!0&&u()==="("&&u(2)!=="?"){E("plus",j);continue}if(f&&f.value==="("||X.regex===!1){C({type:"plus",value:j,output:z});continue}if(f&&(f.type==="bracket"||f.type==="paren"||f.type==="brace")||S.parens>0){C({type:"plus",value:j});continue}C({type:"plus",value:z});continue}if(j==="@"){if(X.noextglob!==!0&&u()==="("&&u(2)!=="?"){C({type:"at",extglob:!0,value:j,output:""});continue}C({type:"text",value:j});continue}if(j!=="*"){if(j==="$"||j==="^")j=`\\${j}`;let a=FuD.exec(c());if(a)j+=a[0],S.index+=a[0].length;C({type:"text",value:j});continue}if(f&&(f.type==="globstar"||f.star===!0)){f.type="star",f.star=!0,f.value+=j,f.output=v,S.backtrack=!0,S.globstar=!0,g(j);continue}let k=c();if(X.noextglob!==!0&&/^\([^?]/.test(k)){E("star",j);continue}if(f.type==="star"){if(X.noglobstar===!0){g(j);continue}let a=f.prev,WD=a.prev,uD=a.type==="slash"||a.type==="bos",gD=WD&&(WD.type==="star"||WD.type==="globstar");if(X.bash===!0&&(!uD||k[0]&&k[0]!=="/")){C({type:"star",value:j,output:""});continue}let J0=S.braces>0&&(a.type==="comma"||a.type==="brace"),v0=h.length&&(a.type==="pipe"||a.type==="paren");if(!uD&&a.type!=="paren"&&!J0&&!v0){C({type:"star",value:j,output:""});continue}while(k.slice(0,3)==="/**"){let j1=D[S.index+4];if(j1&&j1!=="/")break;k=k.slice(3),g("/**",3)}if(a.type==="bos"&&P()){f.type="globstar",f.value+=j,f.output=x(X),S.output=f.output,S.globstar=!0,g(j);continue}if(a.type==="slash"&&a.prev.type!=="bos"&&!gD&&P()){S.output=S.output.slice(0,-(a.output+f.output).length),a.output=`(?:${a.output}`,f.type="globstar",f.output=x(X)+(X.strictSlashes?")":"|$)"),f.value+=j,S.globstar=!0,S.output+=a.output+f.output,g(j);continue}if(a.type==="slash"&&a.prev.type!=="bos"&&k[0]==="/"){let j1=k[1]!==void 0?"|$":"";S.output=S.output.slice(0,-(a.output+f.output).length),a.output=`(?:${a.output}`,f.type="globstar",f.output=`${x(X)}${q}|${q}${j1})`,f.value+=j,S.output+=a.output+f.output,S.globstar=!0,g(j+y()),C({type:"slash",value:"/",output:""});continue}if(a.type==="bos"&&k[0]==="/"){f.type="globstar",f.value+=j,f.output=`(?:^|${q}|${x(X)}${q})`,S.output=f.output,S.globstar=!0,g(j+y()),C({type:"slash",value:"/",output:""});continue}S.output=S.output.slice(0,-f.output.length),f.type="globstar",f.output=x(X),f.value+=j,S.output+=f.output,S.globstar=!0,g(j);continue}let zD={type:"star",value:j,output:v};if(X.bash===!0){if(zD.output=".*?",f.type==="bos"||f.type==="slash")zD.output=A+zD.output;C(zD);continue}if(f&&(f.type==="bracket"||f.type==="paren")&&X.regex===!0){zD.output=j,C(zD);continue}if(S.index===S.start||f.type==="slash"||f.type==="dot"){if(f.type==="dot")S.output+=M,f.output+=M;else if(X.dot===!0)S.output+=I,f.output+=I;else S.output+=A,f.output+=A;if(u()!=="*")S.output+=B,f.output+=B}C(zD)}while(S.brackets>0){if(X.strictBrackets===!0)throw SyntaxError(B7("closing","]"));S.output=o1.escapeLast(S.output,"["),YD("brackets")}while(S.parens>0){if(X.strictBrackets===!0)throw SyntaxError(B7("closing",")"));S.output=o1.escapeLast(S.output,"("),YD("parens")}while(S.braces>0){if(X.strictBrackets===!0)throw SyntaxError(B7("closing","}"));S.output=o1.escapeLast(S.output,"{"),YD("braces")}if(X.strictSlashes!==!0&&(f.type==="star"||f.type==="bracket"))C({type:"maybe_slash",value:"",output:`${q}?`});if(S.backtrack===!0){S.output="";for(let k of S.tokens)if(S.output+=k.output!=null?k.output:k.value,k.suffix)S.output+=k.suffix}return S};lM.fastpaths=(D,$)=>{let X={...$},Y=typeof X.maxLength==="number"?Math.min(sw,X.maxLength):sw,J=D.length;if(J>Y)throw SyntaxError(`Input length: ${J}, exceeds maximum allowed length: ${Y}`);D=RDD[D]||D;let Q=o1.isWindows($),{DOT_LITERAL:F,SLASH_LITERAL:Z,ONE_CHAR:w,DOTS_SLASH:G,NO_DOT:U,NO_DOTS:O,NO_DOTS_SLASH:z,STAR:q,START_ANCHOR:B}=tw.globChars(Q),W=X.dot?O:U,L=X.dot?z:U,M=X.capture?"":"?:",I={negated:!1,prefix:""},K=X.bash===!0?".*?":q;if(X.capture)K=`(${K})`;let N=(A)=>{if(A.noglobstar===!0)return K;return`(${M}(?:(?!${B}${A.dot?G:F}).)*?)`},V=(A)=>{switch(A){case"*":return`${W}${w}${K}`;case".*":return`${F}${w}${K}`;case"*.*":return`${W}${K}${F}${w}${K}`;case"*/*":return`${W}${K}${Z}${w}${L}${K}`;case"**":return W+N(X);case"**/*":return`(?:${W}${N(X)}${Z})?${L}${w}${K}`;case"**/*.*":return`(?:${W}${N(X)}${Z})?${L}${K}${F}${w}${K}`;case"**/.*":return`(?:${W}${N(X)}${Z})?${F}${w}${K}`;default:{let _=/^(.*?)\.(\w+)$/.exec(A);if(!_)return;let v=V(_[1]);if(!v)return;return v+F+_[2]}}},R=o1.removePrefix(D,I),x=V(R);if(x&&X.strictSlashes!==!0)x+=`${Z}?`;return x};jDD.exports=lM});var CDD=T((WsD,TDD)=>{var GuD=i("path"),UuD=ADD(),nM=EDD(),iM=P2(),OuD=C2(),quD=(D)=>D&&typeof D==="object"&&!Array.isArray(D),y0=(D,$,X=!1)=>{if(Array.isArray(D)){let U=D.map((z)=>y0(z,$,X));return(z)=>{for(let q of U){let B=q(z);if(B)return B}return!1}}let Y=quD(D)&&D.tokens&&D.input;if(D===""||typeof D!=="string"&&!Y)throw TypeError("Expected pattern to be a non-empty string");let J=$||{},Q=iM.isWindows($),F=Y?y0.compileRe(D,$):y0.makeRe(D,$,!1,!0),Z=F.state;delete F.state;let w=()=>!1;if(J.ignore){let U={...$,ignore:null,onMatch:null,onResult:null};w=y0(J.ignore,U,X)}let G=(U,O=!1)=>{let{isMatch:z,match:q,output:B}=y0.test(U,F,$,{glob:D,posix:Q}),W={glob:D,state:Z,regex:F,posix:Q,input:U,output:B,match:q,isMatch:z};if(typeof J.onResult==="function")J.onResult(W);if(z===!1)return W.isMatch=!1,O?W:!1;if(w(U)){if(typeof J.onIgnore==="function")J.onIgnore(W);return W.isMatch=!1,O?W:!1}if(typeof J.onMatch==="function")J.onMatch(W);return O?W:!0};if(X)G.state=Z;return G};y0.test=(D,$,X,{glob:Y,posix:J}={})=>{if(typeof D!=="string")throw TypeError("Expected input to be a string");if(D==="")return{isMatch:!1,output:""};let Q=X||{},F=Q.format||(J?iM.toPosixSlashes:null),Z=D===Y,w=Z&&F?F(D):D;if(Z===!1)w=F?F(D):D,Z=w===Y;if(Z===!1||Q.capture===!0)if(Q.matchBase===!0||Q.basename===!0)Z=y0.matchBase(D,$,X,J);else Z=$.exec(w);return{isMatch:Boolean(Z),match:Z,output:w}};y0.matchBase=(D,$,X,Y=iM.isWindows(X))=>{return($ instanceof RegExp?$:y0.makeRe($,X)).test(GuD.basename(D))};y0.isMatch=(D,$,X)=>y0($,X)(D);y0.parse=(D,$)=>{if(Array.isArray(D))return D.map((X)=>y0.parse(X,$));return nM(D,{...$,fastpaths:!1})};y0.scan=(D,$)=>UuD(D,$);y0.compileRe=(D,$,X=!1,Y=!1)=>{if(X===!0)return D.output;let J=$||{},Q=J.contains?"":"^",F=J.contains?"":"$",Z=`${Q}(?:${D.output})${F}`;if(D&&D.negated===!0)Z=`^(?!${Z}).*$`;let w=y0.toRegex(Z,$);if(Y===!0)w.state=D;return w};y0.makeRe=(D,$={},X=!1,Y=!1)=>{if(!D||typeof D!=="string")throw TypeError("Expected a non-empty string");let J={negated:!1,fastpaths:!0};if($.fastpaths!==!1&&(D[0]==="."||D[0]==="*"))J.output=nM.fastpaths(D,$);if(!J.output)J=nM(D,$);return y0.compileRe(J,$,X,Y)};y0.toRegex=(D,$)=>{try{let X=$||{};return new RegExp(D,X.flags||(X.nocase?"i":""))}catch(X){if($&&$.debug===!0)throw X;return/$^/}};y0.constants=OuD;TDD.exports=y0});var _DD=T((KsD,vDD)=>{var xDD=i("util"),SDD=ODD(),e$=CDD(),pM=P2(),PDD=(D)=>D===""||D==="./",uDD=(D)=>{let $=D.indexOf("{");return $>-1&&D.indexOf("}",$)>-1},B0=(D,$,X)=>{$=[].concat($),D=[].concat(D);let Y=new Set,J=new Set,Q=new Set,F=0,Z=(U)=>{if(Q.add(U.output),X&&X.onResult)X.onResult(U)};for(let U=0;U<$.length;U++){let O=e$(String($[U]),{...X,onResult:Z},!0),z=O.state.negated||O.state.negatedExtglob;if(z)F++;for(let q of D){let B=O(q,!0);if(!(z?!B.isMatch:B.isMatch))continue;if(z)Y.add(B.output);else Y.delete(B.output),J.add(B.output)}}let G=(F===$.length?[...Q]:[...J]).filter((U)=>!Y.has(U));if(X&&G.length===0){if(X.failglob===!0)throw Error(`No matches found for "${$.join(", ")}"`);if(X.nonull===!0||X.nullglob===!0)return X.unescape?$.map((U)=>U.replace(/\\/g,"")):$}return G};B0.match=B0;B0.matcher=(D,$)=>e$(D,$);B0.isMatch=(D,$,X)=>e$($,X)(D);B0.any=B0.isMatch;B0.not=(D,$,X={})=>{$=[].concat($).map(String);let Y=new Set,J=[],F=new Set(B0(D,$,{...X,onResult:(Z)=>{if(X.onResult)X.onResult(Z);J.push(Z.output)}}));for(let Z of J)if(!F.has(Z))Y.add(Z);return[...Y]};B0.contains=(D,$,X)=>{if(typeof D!=="string")throw TypeError(`Expected a string: "${xDD.inspect(D)}"`);if(Array.isArray($))return $.some((Y)=>B0.contains(D,Y,X));if(typeof $==="string"){if(PDD(D)||PDD($))return!1;if(D.includes($)||D.startsWith("./")&&D.slice(2).includes($))return!0}return B0.isMatch(D,$,{...X,contains:!0})};B0.matchKeys=(D,$,X)=>{if(!pM.isObject(D))throw TypeError("Expected the first argument to be an object");let Y=B0(Object.keys(D),$,X),J={};for(let Q of Y)J[Q]=D[Q];return J};B0.some=(D,$,X)=>{let Y=[].concat(D);for(let J of[].concat($)){let Q=e$(String(J),X);if(Y.some((F)=>Q(F)))return!0}return!1};B0.every=(D,$,X)=>{let Y=[].concat(D);for(let J of[].concat($)){let Q=e$(String(J),X);if(!Y.every((F)=>Q(F)))return!1}return!0};B0.all=(D,$,X)=>{if(typeof D!=="string")throw TypeError(`Expected a string: "${xDD.inspect(D)}"`);return[].concat($).every((Y)=>e$(Y,X)(D))};B0.capture=(D,$,X)=>{let Y=pM.isWindows(X),Q=e$.makeRe(String(D),{...X,capture:!0}).exec(Y?pM.toPosixSlashes($):$);if(Q)return Q.slice(1).map((F)=>F===void 0?"":F)};B0.makeRe=(...D)=>e$.makeRe(...D);B0.scan=(...D)=>e$.scan(...D);B0.parse=(D,$)=>{let X=[];for(let Y of[].concat(D||[]))for(let J of SDD(String(Y),$))X.push(e$.parse(J,$));return X};B0.braces=(D,$)=>{if(typeof D!=="string")throw TypeError("Expected a string");if($&&$.nobrace===!0||!uDD(D))return[D];return SDD(D,$)};B0.braceExpand=(D,$)=>{if(typeof D!=="string")throw TypeError("Expected a string");return B0.braces(D,{...$,expand:!0})};B0.hasBraces=uDD;vDD.exports=B0});import{existsSync as DvD,readFileSync as $vD}from"node:fs";import{dirname as XvD,join as K7}from"node:path";import{cwd as $G}from"node:process";function sM(D){if(!DvD(D))return;return $vD(D,"utf-8")}function QvD(D){let $=[K7($G(),D,"app","build.gradle"),K7($G(),D,"app","build.gradle.kts")];for(let X of $){let Y=sM(X);if(!Y)continue;let J=Y.match(/versionName\s*(?:=\s*)?["']([^"']+)["']/)?.[1],Q=Y.match(/versionCode\s*(?:=\s*)?(\d+)/)?.[1];if(J)return{versionName:J,versionCode:Q,source:X}}return}function F0D(D,$){let X=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return D.match(new RegExp(`<key>${X}</key>\\s*<string>([^<]+)</string>`))?.[1]?.trim()}function DG(D,$){let Y=D.match(new RegExp(`${$}\\s*=\\s*([^;]+);`))?.[1]?.trim();if(!Y)return;return Y.replace(/"/g,"").trim()}function FvD(D){let $=K7($G(),D,"App"),X=K7($,"App","Info.plist"),Y=K7($,"App.xcodeproj","project.pbxproj"),J=sM(X),Q=sM(Y);if(!J)return;let F=F0D(J,"CFBundleShortVersionString"),Z=F0D(J,"CFBundleVersion");if(F==="$(MARKETING_VERSION)")F=Q?DG(Q,"MARKETING_VERSION"):void 0;if(Z==="$(CURRENT_PROJECT_VERSION)")Z=Q?DG(Q,"CURRENT_PROJECT_VERSION"):void 0;if(!F&&Q)F=DG(Q,"MARKETING_VERSION");if(!Z&&Q)Z=DG(Q,"CURRENT_PROJECT_VERSION");if(!F)return;return{versionName:F,versionCode:Z,source:X}}function ZvD(D){let $=D?.plugins?.CapacitorUpdater?.version;if(typeof $==="string"&&$.trim().length>0)return $.trim();return}function wvD(D){let $=D?.plugins?.CapacitorUpdater?.defaultChannel;if(typeof $==="string"&&$.trim().length>0)return $.trim();return""}function GvD(D){let $=D?.plugins?.CapacitorUpdater?.updateUrl;if(typeof $==="string"&&$.trim().length>0)return $.trim();return JvD}async function w0D(D,$){let X=$?.plugins?.CapacitorUpdater?.appId,Y=$?.appId,J=X||Y;if(!J)return{ok:!1,error:"Could not resolve app ID from capacitor config. Ensure appId is set in capacitor.config.ts or CapacitorUpdater.appId is configured."};let Q=X?"CapacitorUpdater.appId from capacitor config":"top-level appId from capacitor config",F=L2($,D),Z=D==="android"?QvD(F):FvD(F);if(!Z)return{ok:!1,error:`Unable to resolve native ${D.toUpperCase()} version values from platform files in "${F}".`};let w=ZvD($),G=w||Z.versionName,U=w?"CapacitorUpdater.version from capacitor config":`native ${D.toUpperCase()} versionName`,O=K7($G(),"package.json"),z=XvD(O),q=await y1("@capgo/capacitor-updater",z,O);if(!q)return{ok:!1,error:"Unable to resolve installed @capgo/capacitor-updater version from this project."};return{ok:!0,context:{endpoint:GvD($),payload:{app_id:J,device_id:YvD,version_name:"builtin",version_build:G,is_emulator:!1,is_prod:!1,platform:D,plugin_version:q,defaultChannel:wvD($)},nativeSource:Z.source,versionBuildSource:U,appIdSource:Q}}}function G0D(D){let $={};if(D&&typeof D==="object"){for(let[X,Y]of Object.entries(D))if(X!=="error"&&X!=="message")$[X]=Y}return $}function UvD(D,$){let X=typeof D?.error==="string"?D.error:void 0,Y=typeof D?.message==="string"?D.message:void 0,J=typeof D?.version==="string"?D.version:void 0;if(X==="no_new_version_available"||J&&J===$)return{status:"retry",detail:Y||"No new version available yet"};if(X)return{status:"failed",detail:`${X}: ${Y??"Unknown backend message"}`,errorCode:X,backendMessage:Y,extra:G0D(D)};if(J&&J!==$)return{status:"available",detail:`Update ${J} is available`,responseVersion:J};return{status:"failed",detail:`Unexpected response format: ${JSON.stringify(D)}`}}async function U0D(D,$){let X;try{X=await fetch(D,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($),signal:AbortSignal.timeout(Z0D)})}catch(Q){if(Q instanceof DOMException&&Q.name==="TimeoutError")return{success:!1,reason:`Request timed out after ${Z0D/1000}s — the endpoint did not respond in time.`,backendRefusal:!1};return{success:!1,reason:`Network error: ${Q instanceof Error?Q.message:String(Q)}`,backendRefusal:!1}}let Y;try{Y=await X.json()}catch{Y={error:"invalid_json_response",message:"Non-JSON response from updates endpoint"}}if(!X.ok){let Q=typeof Y?.error==="string"?Y.error:void 0,F=typeof Y?.message==="string"?Y.message:void 0;return{success:!1,reason:`HTTP ${X.status}: ${JSON.stringify(Y)}`,backendRefusal:!!Q,errorCode:Q,backendMessage:F,extra:G0D(Y)}}let J=UvD(Y,$.version_name);if(J.status==="available")return{success:!0,availableVersion:J.responseVersion??""};if(J.status==="retry")return{success:!1,reason:J.detail,backendRefusal:!1};return{success:!1,reason:J.detail,backendRefusal:!!J.errorCode,errorCode:J.errorCode,backendMessage:J.backendMessage,extra:J.extra}}function O0D(D){if(!D.errorCode)return[];let $=[];if(D.errorCode==="disable_auto_update_to_major"){let Y=typeof D.extra?.version==="string"?D.extra.version:"unknown",J=typeof D.extra?.old==="string"?D.extra.old:"unknown";$.push(`Channel policy blocks major upgrades (target ${Y}, device baseline ${J}).`)}let X=OvD[D.errorCode];if(X)$.push(X.cause),$.push(`Fix: ${X.fix}`),$.push(`Details: ${X.docsUrl||b0}`);else $.push(`Backend returned ${D.errorCode}.`),$.push("Check channel restrictions, app/plugin configuration, and device version values."),$.push(`Troubleshooting guide: ${b0}`);return $}var JvD="https://plugin.capgo.app/updates",YvD="00000000-0000-0000-0000-000000000000",b0="https://capgo.app/docs/plugins/updater/commonproblems/",Z0D=1e4,OvD;var q0D=o(()=>{kD();OvD={disable_auto_update_to_major:{cause:"Channel blocks major upgrades and device baseline major does not match the target bundle major.",fix:"Set plugins.CapacitorUpdater.version so its MAJOR matches the bundle MAJOR (e.g. 1.0.0 for bundle 1.x.x), run npx cap sync, and reinstall the native build.",docsUrl:`${b0}#disable_auto_update_to_major`},disable_auto_update_to_minor:{cause:"Channel blocks minor upgrades and the target bundle minor is above the device baseline.",fix:"Upload a bundle within the allowed minor range, or change the channel disable_auto_update policy in the dashboard.",docsUrl:`${b0}#disable_auto_update_to_minor--disable_auto_update_to_patch`},disable_auto_update_to_patch:{cause:"Channel blocks patch upgrades and the target bundle patch is above the device baseline.",fix:"Upload a bundle within the allowed patch range, or change the channel disable_auto_update policy in the dashboard.",docsUrl:`${b0}#disable_auto_update_to_minor--disable_auto_update_to_patch`},disable_auto_update_to_metadata:{cause:"Channel uses metadata-based targeting (version_number) and the device baseline is below the required min_update_version.",fix:"Set plugins.CapacitorUpdater.version to match the installed native version, or adjust min_update_version on the channel.",docsUrl:`${b0}#disable_auto_update_to_metadata`},disable_auto_update_under_native:{cause:"Channel prevents downgrades below the native app version.",fix:"Upload a bundle with version >= native baseline, or disable the under-native downgrade protection on the channel.",docsUrl:`${b0}#disable_auto_update_under_native`},misconfigured_channel:{cause:"Channel has disable_auto_update=version_number but min_update_version is missing.",fix:"Set a valid min_update_version on the channel, or change disable_auto_update to a different mode."},cannot_update_via_private_channel:{cause:"The selected channel does not allow device self-assignment.",fix:"Use a channel with self-assignment enabled, or enable self-assignment / make the channel public.",docsUrl:`${b0}#cannot_update_via_private_channel`},semver_error:{cause:"version_build sent to the backend is not valid semver (expected x.y.z).",fix:"Set plugins.CapacitorUpdater.version to a valid semver like 1.2.3, run npx cap sync, and rebuild native.",docsUrl:`${b0}#unknown_version_build--semver_error`},unknown_version_build:{cause:"Backend received version_build=unknown (device baseline version is missing).",fix:"Set plugins.CapacitorUpdater.version in capacitor.config.*, run npx cap sync, and rebuild native.",docsUrl:`${b0}#unknown_version_build--semver_error`},unsupported_plugin_version:{cause:"Installed @capgo/capacitor-updater is too old for the current backend.",fix:"Run npm install @capgo/capacitor-updater@latest, then npx cap sync, and rebuild native.",docsUrl:`${b0}#unsupported_plugin_version`},key_id_mismatch:{cause:"Bundle encryption key and device key differ.",fix:"Ensure the same public key is used in app config and when encrypting bundles, then re-upload the bundle.",docsUrl:`${b0}#key_id_mismatch`},disabled_platform_ios:{cause:"Channel has iOS updates disabled.",fix:"Enable the iOS platform toggle on the target channel in the dashboard.",docsUrl:`${b0}#disabled_platform_ios--disabled_platform_android`},disabled_platform_android:{cause:"Channel has Android updates disabled.",fix:"Enable the Android platform toggle on the target channel in the dashboard.",docsUrl:`${b0}#disabled_platform_ios--disabled_platform_android`},disabled_platform_electron:{cause:"Channel has Electron updates disabled.",fix:"Enable the Electron platform toggle on the target channel in the dashboard."},disable_prod_build:{cause:"Channel blocks production builds (allow_prod is off).",fix:"Enable allow_prod on the channel, or test with a development build.",docsUrl:`${b0}#disable_prod_build--disable_dev_build--disable_device--disable_emulator`},disable_dev_build:{cause:"Channel blocks development builds (allow_dev is off).",fix:"Enable allow_dev on the channel, or test with a production build.",docsUrl:`${b0}#disable_prod_build--disable_dev_build--disable_device--disable_emulator`},disable_device:{cause:"Channel blocks physical devices (allow_device is off).",fix:"Enable allow_device on the channel, or test on an emulator.",docsUrl:`${b0}#disable_prod_build--disable_dev_build--disable_device--disable_emulator`},disable_emulator:{cause:"Channel blocks emulators (allow_emulator is off).",fix:"Enable allow_emulator on the channel, or test on a physical device.",docsUrl:`${b0}#disable_prod_build--disable_dev_build--disable_device--disable_emulator`},no_channel:{cause:"No channel was resolved for this device.",fix:"Set defaultChannel in capacitor.config.* plugins.CapacitorUpdater section, or create a default channel in the dashboard.",docsUrl:`${b0}#no_channel--null_channel_data`},null_channel_data:{cause:"Channel was resolved but contains no usable data.",fix:"Set defaultChannel in capacitor.config.* plugins.CapacitorUpdater section, or verify the channel has a bundle assigned.",docsUrl:`${b0}#no_channel--null_channel_data`},missing_info:{cause:"Request is missing required fields (app_id, device_id, version_build, or platform).",fix:"Check capacitor.config.* for a valid appId and verify the probe payload."},no_bundle:{cause:"Channel resolved a version but no downloadable bundle artifact exists.",fix:"Re-upload the bundle with npx @capgo/cli@latest bundle upload and verify channel assignment."},no_bundle_url:{cause:"Bundle was resolved but its download URL is missing.",fix:"Re-upload the bundle — the storage artifact may be corrupted or missing."},no_url_or_manifest:{cause:"Bundle was resolved but neither URL nor manifest is available.",fix:"Re-upload the bundle — the storage artifact may be corrupted or missing."},already_on_builtin:{cause:"Device is already running the builtin bundle.",fix:"Upload and assign a bundle to the channel for OTA updates to be delivered."},revert_to_builtin_plugin_version_too_old:{cause:"Plugin version is too old for safe builtin revert.",fix:"Run npm install @capgo/capacitor-updater@latest, then npx cap sync, and rebuild native."},on_premise_app:{cause:"App is either flagged as on-premise or does not exist in Capgo Cloud.",fix:"Check that the app_id is registered in Capgo (capgo app add). If it is an on-premise app, configure plugins.CapacitorUpdater.updateUrl to point to your on-prem update endpoint."},need_plan_upgrade:{cause:"Update checks are blocked by plan limits.",fix:"Upgrade your Capgo plan or contact your organization admin."},invalid_json_body:{cause:"Updates endpoint rejected the request body as invalid JSON.",fix:"This is likely a CLI bug — please report it at https://github.com/Cap-go/CLI/issues."},invalid_query_parameters:{cause:"Updates endpoint rejected the query parameters.",fix:"This is likely a CLI bug — please report it at https://github.com/Cap-go/CLI/issues."}}});var K0D={};a1(K0D,{probeInternal:()=>W0D,probe:()=>zvD});import{exit as qvD,stdin as z0D,stdout as B0D}from"node:process";async function W0D(D){let $;try{$=(await ID()).config}catch{return{success:!1,error:"Failed to load Capacitor config."}}let X;if(D.platform==="ios"||D.platform==="android")X=D.platform;else if(D.platform)return{success:!1,error:`Invalid platform "${D.platform}". Must be "ios" or "android".`};else{if(!(!!z0D.isTTY&&!!B0D.isTTY))return{success:!1,error:"Platform is required in non-interactive environments. Use --platform ios or --platform android."};let w=await t1({message:"Which platform do you want to probe?",options:[{value:"ios",label:"iOS"},{value:"android",label:"Android"}]});if(bD(w))return{success:!1,error:"Probe cancelled."};X=w}let Y=await w0D(X,$);if(!Y.ok)return{success:!1,error:`Probe setup failed: ${Y.error}`};let J=Y.context,Q=await U0D(J.endpoint,J.payload),F={success:Q.success,probeResult:Q,endpoint:J.endpoint,platform:X,versionBuild:J.payload.version_build,versionBuildSource:J.versionBuildSource,appId:J.payload.app_id,appIdSource:J.appIdSource,nativeSource:J.nativeSource};if(!Q.success)F.hints=O0D(Q);return F}async function zvD(D){VD("Probe Capgo updates endpoint");let $=await W0D(D);if($.error)H.error($.error),qvD(1);H.info(`Endpoint: ${$.endpoint}`),H.info(`Platform: ${$.platform}, version_build: ${$.versionBuild}`),H.info(`version_build source: ${$.versionBuildSource}`),H.info(`app_id: ${$.appId} (${$.appIdSource})`),H.info(`Native values source: ${$.nativeSource}`);let X=$.probeResult;if(X.success)H.success(`Update available: ${X.availableVersion}`);else{if(H.warn(`Reason: ${X.reason}`),X.backendRefusal)H.warn("The backend actively refused the request (not a cache/propagation issue).");if(X.errorCode)H.warn(`Error code: ${X.errorCode}`);if(X.backendMessage)H.warn(`Backend message: ${X.backendMessage}`);if($.hints)for(let Y of $.hints)H.warn(` ${Y}`)}}var H0D=o(()=>{vD();q0D();kD()});vD();D6();kD();vD();D6();kD();async function pa(D,$,X,Y={}){let{silent:J=!1,autoUnlink:Q=!1}=Y,{data:F,error:Z}=await D.from("channels").select().eq("app_id",$).eq("version",X.id);if(Z){if(!J)H.error(`Cannot check Version ${$}@${X.name}: ${t(Z)}`);throw Error(`Cannot check version ${$}@${X.name}: ${t(Z)}`)}if(!F?.length)return;if(J)throw Error(`Version ${$}@${X.name} is used in ${F.length} channel(s)`);VD(`❌ Version ${$}@${X.name} is used in ${F.length} channel${F.length>1?"s":""}`);let w=Q;if(!Q)w=await c0({message:"unlink it?"})===!0;if(!w)throw H.error("Unlink it first"),Error(`Version ${$}@${X.name} is still linked to channel(s)`);for(let G of F){let U=A0();U.start(`Unlinking channel ${G.name}`);let O=await nL(D,$,{silent:J});if(!O)throw U.stop(`Cannot find unknown version for ${$}`),Error(`Cannot find unknown version for ${$}`);let{error:z}=await D.from("channels").update({version:O.id}).eq("id",G.id);if(z)throw U.stop(`Cannot update channel ${G.name} ${t(z)}`),Error(`Cannot update channel ${G.name}: ${t(z)}`);U.stop(`✅ Channel ${G.name} unlinked`)}ND(`Version unlinked from ${F.length} channel${F.length>1?"s":""}`)}async function nL(D,$,X={}){let{silent:Y=!1}=X,{data:J,error:Q}=await D.from("app_versions").select("id").eq("app_id",$).eq("name","unknown").single();if(!Q)return J;try{let F=await d0(D,$),{data:Z,error:w}=await D.from("app_versions").insert({owner_org:F,deleted:!0,name:"unknown",app_id:$}).select("id").single();if(w){if(!Y)H.error(`Cannot find or create unknown version for ${$}. Find error: ${t(Q)}, Create error: ${t(w)}`);throw Error(`Cannot find or create unknown version for app ${$}: ${t(w)}`)}return Z}catch(F){if(!Y)H.error(`Cannot find or create unknown version for ${$}. Find error: ${t(Q)}, Create error: ${t(F)}`);throw Error(`Cannot retrieve or create unknown version for app ${$}: ${t(F)}`)}}function ra(D,$){return D.from("channels").insert($).select().single()}function oa(D,$,X,Y){return D.from("channels").delete().eq("name",$).eq("app_id",X).single()}function aa(D,$,X){return D.from("channels").select().eq("app_id",$).eq("name",X).single()}function ta(D,$,X){return D.from("channel_devices").delete().eq("app_id",$).eq("channel_id",X)}function sa(D,$,X){return D.from("channels").select(`
|
|
422
|
+
`,CHAR_NO_BREAK_SPACE:" ",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:"\t",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var wDD=T((GsD,ZDD)=>{var HSD=rw(),{MAX_LENGTH:YDD,CHAR_BACKSLASH:bM,CHAR_BACKTICK:VSD,CHAR_COMMA:NSD,CHAR_DOT:LSD,CHAR_LEFT_PARENTHESES:MSD,CHAR_RIGHT_PARENTHESES:ISD,CHAR_LEFT_CURLY_BRACE:ASD,CHAR_RIGHT_CURLY_BRACE:RSD,CHAR_LEFT_SQUARE_BRACKET:QDD,CHAR_RIGHT_SQUARE_BRACKET:FDD,CHAR_DOUBLE_QUOTE:jSD,CHAR_SINGLE_QUOTE:ESD,CHAR_NO_BREAK_SPACE:TSD,CHAR_ZERO_WIDTH_NOBREAK_SPACE:CSD}=JDD(),PSD=(D,$={})=>{if(typeof D!=="string")throw TypeError("Expected a string");let X=$||{},Y=typeof X.maxLength==="number"?Math.min(YDD,X.maxLength):YDD;if(D.length>Y)throw SyntaxError(`Input length (${D.length}), exceeds max characters (${Y})`);let J={type:"root",input:D,nodes:[]},Q=[J],F=J,Z=J,w=0,G=D.length,U=0,O=0,z,q=()=>D[U++],B=(W)=>{if(W.type==="text"&&Z.type==="dot")Z.type="text";if(Z&&Z.type==="text"&&W.type==="text"){Z.value+=W.value;return}return F.nodes.push(W),W.parent=F,W.prev=Z,Z=W,W};B({type:"bos"});while(U<G){if(F=Q[Q.length-1],z=q(),z===CSD||z===TSD)continue;if(z===bM){B({type:"text",value:($.keepEscaping?z:"")+q()});continue}if(z===FDD){B({type:"text",value:"\\"+z});continue}if(z===QDD){w++;let W;while(U<G&&(W=q())){if(z+=W,W===QDD){w++;continue}if(W===bM){z+=q();continue}if(W===FDD){if(w--,w===0)break}}B({type:"text",value:z});continue}if(z===MSD){F=B({type:"paren",nodes:[]}),Q.push(F),B({type:"text",value:z});continue}if(z===ISD){if(F.type!=="paren"){B({type:"text",value:z});continue}F=Q.pop(),B({type:"text",value:z}),F=Q[Q.length-1];continue}if(z===jSD||z===ESD||z===VSD){let W=z,L;if($.keepQuotes!==!0)z="";while(U<G&&(L=q())){if(L===bM){z+=L+q();continue}if(L===W){if($.keepQuotes===!0)z+=L;break}z+=L}B({type:"text",value:z});continue}if(z===ASD){O++;let L={type:"brace",open:!0,close:!1,dollar:Z.value&&Z.value.slice(-1)==="$"||F.dollar===!0,depth:O,commas:0,ranges:0,nodes:[]};F=B(L),Q.push(F),B({type:"open",value:z});continue}if(z===RSD){if(F.type!=="brace"){B({type:"text",value:z});continue}let W="close";F=Q.pop(),F.close=!0,B({type:W,value:z}),O--,F=Q[Q.length-1];continue}if(z===NSD&&O>0){if(F.ranges>0){F.ranges=0;let W=F.nodes.shift();F.nodes=[W,{type:"text",value:HSD(F)}]}B({type:"comma",value:z}),F.commas++;continue}if(z===LSD&&O>0&&F.commas===0){let W=F.nodes;if(O===0||W.length===0){B({type:"text",value:z});continue}if(Z.type==="dot"){if(F.range=[],Z.value+=z,Z.type="range",F.nodes.length!==3&&F.nodes.length!==5){F.invalid=!0,F.ranges=0,Z.type="text";continue}F.ranges++,F.args=[];continue}if(Z.type==="range"){W.pop();let L=W[W.length-1];L.value+=Z.value+z,Z=L,F.ranges--;continue}B({type:"dot",value:z});continue}B({type:"text",value:z})}do if(F=Q.pop(),F.type!=="root"){F.nodes.forEach((M)=>{if(!M.nodes){if(M.type==="open")M.isOpen=!0;if(M.type==="close")M.isClose=!0;if(!M.nodes)M.type="text";M.invalid=!0}});let W=Q[Q.length-1],L=W.nodes.indexOf(F);W.nodes.splice(L,1,...F.nodes)}while(Q.length>0);return B({type:"eos"}),J};ZDD.exports=PSD});var ODD=T((UsD,UDD)=>{var GDD=rw(),xSD=se(),SSD=$DD(),uSD=wDD(),r1=(D,$={})=>{let X=[];if(Array.isArray(D))for(let Y of D){let J=r1.create(Y,$);if(Array.isArray(J))X.push(...J);else X.push(J)}else X=[].concat(r1.create(D,$));if($&&$.expand===!0&&$.nodupes===!0)X=[...new Set(X)];return X};r1.parse=(D,$={})=>uSD(D,$);r1.stringify=(D,$={})=>{if(typeof D==="string")return GDD(r1.parse(D,$),$);return GDD(D,$)};r1.compile=(D,$={})=>{if(typeof D==="string")D=r1.parse(D,$);return xSD(D,$)};r1.expand=(D,$={})=>{if(typeof D==="string")D=r1.parse(D,$);let X=SSD(D,$);if($.noempty===!0)X=X.filter(Boolean);if($.nodupes===!0)X=[...new Set(X)];return X};r1.create=(D,$={})=>{if(D===""||D.length<3)return[D];return $.expand!==!0?r1.compile(D,$):r1.expand(D,$)};UDD.exports=r1});var C2=T((OsD,zDD)=>{var vSD=i("path"),qDD={DOT_LITERAL:"\\.",PLUS_LITERAL:"\\+",QMARK_LITERAL:"\\?",SLASH_LITERAL:"\\/",ONE_CHAR:"(?=.)",QMARK:"[^/]",END_ANCHOR:"(?:\\/|$)",DOTS_SLASH:"\\.{1,2}(?:\\/|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|\\/)\\.{1,2}(?:\\/|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:\\/|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:\\/|$))",QMARK_NO_DOT:"[^.\\/]",STAR:"[^/]*?",START_ANCHOR:"(?:^|\\/)"},_SD={...qDD,SLASH_LITERAL:"[\\\\/]",QMARK:"[^\\\\/]",STAR:"[^\\\\/]*?",DOTS_SLASH:"\\.{1,2}(?:[\\\\/]|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|[\\\\/])\\.{1,2}(?:[\\\\/]|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:[\\\\/]|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:[\\\\/]|$))",QMARK_NO_DOT:"[^.\\\\/]",START_ANCHOR:"(?:^|[\\\\/])",END_ANCHOR:"(?:[\\\\/]|$)"},kSD={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};zDD.exports={MAX_LENGTH:65536,POSIX_REGEX_SOURCE:kSD,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:vSD.sep,extglobChars(D){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${D.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(D){return D===!0?_SD:qDD}}});var P2=T((cSD)=>{var fSD=i("path"),ySD=process.platform==="win32",{REGEX_BACKSLASH:bSD,REGEX_REMOVE_BACKSLASH:hSD,REGEX_SPECIAL_CHARS:gSD,REGEX_SPECIAL_CHARS_GLOBAL:mSD}=C2();cSD.isObject=(D)=>D!==null&&typeof D==="object"&&!Array.isArray(D);cSD.hasRegexChars=(D)=>gSD.test(D);cSD.isRegexChar=(D)=>D.length===1&&cSD.hasRegexChars(D);cSD.escapeRegex=(D)=>D.replace(mSD,"\\$1");cSD.toPosixSlashes=(D)=>D.replace(bSD,"/");cSD.removeBackslashes=(D)=>{return D.replace(hSD,($)=>{return $==="\\"?"":$})};cSD.supportsLookbehinds=()=>{let D=process.version.slice(1).split(".").map(Number);if(D.length===3&&D[0]>=9||D[0]===8&&D[1]>=10)return!0;return!1};cSD.isWindows=(D)=>{if(D&&typeof D.windows==="boolean")return D.windows;return ySD===!0||fSD.sep==="\\"};cSD.escapeLast=(D,$,X)=>{let Y=D.lastIndexOf($,X);if(Y===-1)return D;if(D[Y-1]==="\\")return cSD.escapeLast(D,$,Y-1);return`${D.slice(0,Y)}\\${D.slice(Y)}`};cSD.removePrefix=(D,$={})=>{let X=D;if(X.startsWith("./"))X=X.slice(2),$.prefix="./";return X};cSD.wrapOutput=(D,$={},X={})=>{let Y=X.contains?"":"^",J=X.contains?"":"$",Q=`${Y}(?:${D})${J}`;if($.negated===!0)Q=`(?:^(?!${Q}).*$)`;return Q}});var ADD=T((zsD,IDD)=>{var KDD=P2(),{CHAR_ASTERISK:hM,CHAR_AT:sSD,CHAR_BACKWARD_SLASH:x2,CHAR_COMMA:eSD,CHAR_DOT:gM,CHAR_EXCLAMATION_MARK:mM,CHAR_FORWARD_SLASH:MDD,CHAR_LEFT_CURLY_BRACE:cM,CHAR_LEFT_PARENTHESES:dM,CHAR_LEFT_SQUARE_BRACKET:DuD,CHAR_PLUS:$uD,CHAR_QUESTION_MARK:HDD,CHAR_RIGHT_CURLY_BRACE:XuD,CHAR_RIGHT_PARENTHESES:VDD,CHAR_RIGHT_SQUARE_BRACKET:JuD}=C2(),NDD=(D)=>{return D===MDD||D===x2},LDD=(D)=>{if(D.isPrefix!==!0)D.depth=D.isGlobstar?1/0:1},YuD=(D,$)=>{let X=$||{},Y=D.length-1,J=X.parts===!0||X.scanToEnd===!0,Q=[],F=[],Z=[],w=D,G=-1,U=0,O=0,z=!1,q=!1,B=!1,W=!1,L=!1,M=!1,I=!1,K=!1,N=!1,V=!1,R=0,x,A,_={value:"",depth:0,isGlob:!1},v=()=>G>=Y,S=()=>w.charCodeAt(G+1),h=()=>{return x=A,w.charCodeAt(++G)};while(G<Y){A=h();let P;if(A===x2){if(I=_.backslashes=!0,A=h(),A===cM)M=!0;continue}if(M===!0||A===cM){R++;while(v()!==!0&&(A=h())){if(A===x2){I=_.backslashes=!0,h();continue}if(A===cM){R++;continue}if(M!==!0&&A===gM&&(A=h())===gM){if(z=_.isBrace=!0,B=_.isGlob=!0,V=!0,J===!0)continue;break}if(M!==!0&&A===eSD){if(z=_.isBrace=!0,B=_.isGlob=!0,V=!0,J===!0)continue;break}if(A===XuD){if(R--,R===0){M=!1,z=_.isBrace=!0,V=!0;break}}}if(J===!0)continue;break}if(A===MDD){if(Q.push(G),F.push(_),_={value:"",depth:0,isGlob:!1},V===!0)continue;if(x===gM&&G===U+1){U+=2;continue}O=G+1;continue}if(X.noext!==!0){if((A===$uD||A===sSD||A===hM||A===HDD||A===mM)===!0&&S()===dM){if(B=_.isGlob=!0,W=_.isExtglob=!0,V=!0,A===mM&&G===U)N=!0;if(J===!0){while(v()!==!0&&(A=h())){if(A===x2){I=_.backslashes=!0,A=h();continue}if(A===VDD){B=_.isGlob=!0,V=!0;break}}continue}break}}if(A===hM){if(x===hM)L=_.isGlobstar=!0;if(B=_.isGlob=!0,V=!0,J===!0)continue;break}if(A===HDD){if(B=_.isGlob=!0,V=!0,J===!0)continue;break}if(A===DuD){while(v()!==!0&&(P=h())){if(P===x2){I=_.backslashes=!0,h();continue}if(P===JuD){q=_.isBracket=!0,B=_.isGlob=!0,V=!0;break}}if(J===!0)continue;break}if(X.nonegate!==!0&&A===mM&&G===U){K=_.negated=!0,U++;continue}if(X.noparen!==!0&&A===dM){if(B=_.isGlob=!0,J===!0){while(v()!==!0&&(A=h())){if(A===dM){I=_.backslashes=!0,A=h();continue}if(A===VDD){V=!0;break}}continue}break}if(B===!0){if(V=!0,J===!0)continue;break}}if(X.noext===!0)W=!1,B=!1;let b=w,l="",f="";if(U>0)l=w.slice(0,U),w=w.slice(U),O-=U;if(b&&B===!0&&O>0)b=w.slice(0,O),f=w.slice(O);else if(B===!0)b="",f=w;else b=w;if(b&&b!==""&&b!=="/"&&b!==w){if(NDD(b.charCodeAt(b.length-1)))b=b.slice(0,-1)}if(X.unescape===!0){if(f)f=KDD.removeBackslashes(f);if(b&&I===!0)b=KDD.removeBackslashes(b)}let j={prefix:l,input:D,start:U,base:b,glob:f,isBrace:z,isBracket:q,isGlob:B,isExtglob:W,isGlobstar:L,negated:K,negatedExtglob:N};if(X.tokens===!0){if(j.maxDepth=0,!NDD(A))F.push(_);j.tokens=F}if(X.parts===!0||X.tokens===!0){let P;for(let u=0;u<Q.length;u++){let y=P?P+1:U,c=Q[u],g=D.slice(y,c);if(X.tokens){if(u===0&&U!==0)F[u].isPrefix=!0,F[u].value=l;else F[u].value=g;LDD(F[u]),j.maxDepth+=F[u].depth}if(u!==0||g!=="")Z.push(g);P=c}if(P&&P+1<D.length){let u=D.slice(P+1);if(Z.push(u),X.tokens)F[F.length-1].value=u,LDD(F[F.length-1]),j.maxDepth+=F[F.length-1].depth}j.slashes=Q,j.parts=Z}return j};IDD.exports=YuD});var EDD=T((BsD,jDD)=>{var tw=C2(),o1=P2(),{MAX_LENGTH:sw,POSIX_REGEX_SOURCE:QuD,REGEX_NON_SPECIAL_CHARS:FuD,REGEX_SPECIAL_CHARS_BACKREF:ZuD,REPLACEMENTS:RDD}=tw,wuD=(D,$)=>{if(typeof $.expandRange==="function")return $.expandRange(...D,$);D.sort();let X=`[${D.join("-")}]`;try{new RegExp(X)}catch(Y){return D.map((J)=>o1.escapeRegex(J)).join("..")}return X},B7=(D,$)=>{return`Missing ${D}: "${$}" - use "\\\\${$}" to match literal characters`},lM=(D,$)=>{if(typeof D!=="string")throw TypeError("Expected a string");D=RDD[D]||D;let X={...$},Y=typeof X.maxLength==="number"?Math.min(sw,X.maxLength):sw,J=D.length;if(J>Y)throw SyntaxError(`Input length: ${J}, exceeds maximum allowed length: ${Y}`);let Q={type:"bos",value:"",output:X.prepend||""},F=[Q],Z=X.capture?"":"?:",w=o1.isWindows($),G=tw.globChars(w),U=tw.extglobChars(G),{DOT_LITERAL:O,PLUS_LITERAL:z,SLASH_LITERAL:q,ONE_CHAR:B,DOTS_SLASH:W,NO_DOT:L,NO_DOT_SLASH:M,NO_DOTS_SLASH:I,QMARK:K,QMARK_NO_DOT:N,STAR:V,START_ANCHOR:R}=G,x=(k)=>{return`(${Z}(?:(?!${R}${k.dot?W:O}).)*?)`},A=X.dot?"":L,_=X.dot?K:N,v=X.bash===!0?x(X):V;if(X.capture)v=`(${v})`;if(typeof X.noext==="boolean")X.noextglob=X.noext;let S={input:D,index:-1,start:0,dot:X.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:F};D=o1.removePrefix(D,S),J=D.length;let h=[],b=[],l=[],f=Q,j,P=()=>S.index===J-1,u=S.peek=(k=1)=>D[S.index+k],y=S.advance=()=>D[++S.index]||"",c=()=>D.slice(S.index+1),g=(k="",zD=0)=>{S.consumed+=k,S.index+=zD},e=(k)=>{S.output+=k.output!=null?k.output:k.value,g(k.value)},d=()=>{let k=1;while(u()==="!"&&(u(2)!=="("||u(3)==="?"))y(),S.start++,k++;if(k%2===0)return!1;return S.negated=!0,S.start++,!0},r=(k)=>{S[k]++,l.push(k)},YD=(k)=>{S[k]--,l.pop()},C=(k)=>{if(f.type==="globstar"){let zD=S.braces>0&&(k.type==="comma"||k.type==="brace"),a=k.extglob===!0||h.length&&(k.type==="pipe"||k.type==="paren");if(k.type!=="slash"&&k.type!=="paren"&&!zD&&!a)S.output=S.output.slice(0,-f.output.length),f.type="star",f.value="*",f.output=v,S.output+=f.output}if(h.length&&k.type!=="paren")h[h.length-1].inner+=k.value;if(k.value||k.output)e(k);if(f&&f.type==="text"&&k.type==="text"){f.value+=k.value,f.output=(f.output||"")+k.value;return}k.prev=f,F.push(k),f=k},E=(k,zD)=>{let a={...U[zD],conditions:1,inner:""};a.prev=f,a.parens=S.parens,a.output=S.output;let WD=(X.capture?"(":"")+a.open;r("parens"),C({type:k,value:zD,output:S.output?"":B}),C({type:"paren",extglob:!0,value:y(),output:WD}),h.push(a)},p=(k)=>{let zD=k.close+(X.capture?")":""),a;if(k.type==="negate"){let WD=v;if(k.inner&&k.inner.length>1&&k.inner.includes("/"))WD=x(X);if(WD!==v||P()||/^\)+$/.test(c()))zD=k.close=`)$))${WD}`;if(k.inner.includes("*")&&(a=c())&&/^\.[^\\/.]+$/.test(a)){let uD=lM(a,{...$,fastpaths:!1}).output;zD=k.close=`)${uD})${WD})`}if(k.prev.type==="bos")S.negatedExtglob=!0}C({type:"paren",extglob:!0,value:j,output:zD}),YD("parens")};if(X.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(D)){let k=!1,zD=D.replace(ZuD,(a,WD,uD,gD,J0,v0)=>{if(gD==="\\")return k=!0,a;if(gD==="?"){if(WD)return WD+gD+(J0?K.repeat(J0.length):"");if(v0===0)return _+(J0?K.repeat(J0.length):"");return K.repeat(uD.length)}if(gD===".")return O.repeat(uD.length);if(gD==="*"){if(WD)return WD+gD+(J0?v:"");return v}return WD?a:`\\${a}`});if(k===!0)if(X.unescape===!0)zD=zD.replace(/\\/g,"");else zD=zD.replace(/\\+/g,(a)=>{return a.length%2===0?"\\\\":a?"\\":""});if(zD===D&&X.contains===!0)return S.output=D,S;return S.output=o1.wrapOutput(zD,S,$),S}while(!P()){if(j=y(),j==="\x00")continue;if(j==="\\"){let a=u();if(a==="/"&&X.bash!==!0)continue;if(a==="."||a===";")continue;if(!a){j+="\\",C({type:"text",value:j});continue}let WD=/^\\+/.exec(c()),uD=0;if(WD&&WD[0].length>2){if(uD=WD[0].length,S.index+=uD,uD%2!==0)j+="\\"}if(X.unescape===!0)j=y();else j+=y();if(S.brackets===0){C({type:"text",value:j});continue}}if(S.brackets>0&&(j!=="]"||f.value==="["||f.value==="[^")){if(X.posix!==!1&&j===":"){let a=f.value.slice(1);if(a.includes("[")){if(f.posix=!0,a.includes(":")){let WD=f.value.lastIndexOf("["),uD=f.value.slice(0,WD),gD=f.value.slice(WD+2),J0=QuD[gD];if(J0){if(f.value=uD+J0,S.backtrack=!0,y(),!Q.output&&F.indexOf(f)===1)Q.output=B;continue}}}}if(j==="["&&u()!==":"||j==="-"&&u()==="]")j=`\\${j}`;if(j==="]"&&(f.value==="["||f.value==="[^"))j=`\\${j}`;if(X.posix===!0&&j==="!"&&f.value==="[")j="^";f.value+=j,e({value:j});continue}if(S.quotes===1&&j!=='"'){j=o1.escapeRegex(j),f.value+=j,e({value:j});continue}if(j==='"'){if(S.quotes=S.quotes===1?0:1,X.keepQuotes===!0)C({type:"text",value:j});continue}if(j==="("){r("parens"),C({type:"paren",value:j});continue}if(j===")"){if(S.parens===0&&X.strictBrackets===!0)throw SyntaxError(B7("opening","("));let a=h[h.length-1];if(a&&S.parens===a.parens+1){p(h.pop());continue}C({type:"paren",value:j,output:S.parens?")":"\\)"}),YD("parens");continue}if(j==="["){if(X.nobracket===!0||!c().includes("]")){if(X.nobracket!==!0&&X.strictBrackets===!0)throw SyntaxError(B7("closing","]"));j=`\\${j}`}else r("brackets");C({type:"bracket",value:j});continue}if(j==="]"){if(X.nobracket===!0||f&&f.type==="bracket"&&f.value.length===1){C({type:"text",value:j,output:`\\${j}`});continue}if(S.brackets===0){if(X.strictBrackets===!0)throw SyntaxError(B7("opening","["));C({type:"text",value:j,output:`\\${j}`});continue}YD("brackets");let a=f.value.slice(1);if(f.posix!==!0&&a[0]==="^"&&!a.includes("/"))j=`/${j}`;if(f.value+=j,e({value:j}),X.literalBrackets===!1||o1.hasRegexChars(a))continue;let WD=o1.escapeRegex(f.value);if(S.output=S.output.slice(0,-f.value.length),X.literalBrackets===!0){S.output+=WD,f.value=WD;continue}f.value=`(${Z}${WD}|${f.value})`,S.output+=f.value;continue}if(j==="{"&&X.nobrace!==!0){r("braces");let a={type:"brace",value:j,output:"(",outputIndex:S.output.length,tokensIndex:S.tokens.length};b.push(a),C(a);continue}if(j==="}"){let a=b[b.length-1];if(X.nobrace===!0||!a){C({type:"text",value:j,output:j});continue}let WD=")";if(a.dots===!0){let uD=F.slice(),gD=[];for(let J0=uD.length-1;J0>=0;J0--){if(F.pop(),uD[J0].type==="brace")break;if(uD[J0].type!=="dots")gD.unshift(uD[J0].value)}WD=wuD(gD,X),S.backtrack=!0}if(a.comma!==!0&&a.dots!==!0){let uD=S.output.slice(0,a.outputIndex),gD=S.tokens.slice(a.tokensIndex);a.value=a.output="\\{",j=WD="\\}",S.output=uD;for(let J0 of gD)S.output+=J0.output||J0.value}C({type:"brace",value:j,output:WD}),YD("braces"),b.pop();continue}if(j==="|"){if(h.length>0)h[h.length-1].conditions++;C({type:"text",value:j});continue}if(j===","){let a=j,WD=b[b.length-1];if(WD&&l[l.length-1]==="braces")WD.comma=!0,a="|";C({type:"comma",value:j,output:a});continue}if(j==="/"){if(f.type==="dot"&&S.index===S.start+1){S.start=S.index+1,S.consumed="",S.output="",F.pop(),f=Q;continue}C({type:"slash",value:j,output:q});continue}if(j==="."){if(S.braces>0&&f.type==="dot"){if(f.value===".")f.output=O;let a=b[b.length-1];f.type="dots",f.output+=j,f.value+=j,a.dots=!0;continue}if(S.braces+S.parens===0&&f.type!=="bos"&&f.type!=="slash"){C({type:"text",value:j,output:O});continue}C({type:"dot",value:j,output:O});continue}if(j==="?"){if(!(f&&f.value==="(")&&X.noextglob!==!0&&u()==="("&&u(2)!=="?"){E("qmark",j);continue}if(f&&f.type==="paren"){let WD=u(),uD=j;if(WD==="<"&&!o1.supportsLookbehinds())throw Error("Node.js v10 or higher is required for regex lookbehinds");if(f.value==="("&&!/[!=<:]/.test(WD)||WD==="<"&&!/<([!=]|\w+>)/.test(c()))uD=`\\${j}`;C({type:"text",value:j,output:uD});continue}if(X.dot!==!0&&(f.type==="slash"||f.type==="bos")){C({type:"qmark",value:j,output:N});continue}C({type:"qmark",value:j,output:K});continue}if(j==="!"){if(X.noextglob!==!0&&u()==="("){if(u(2)!=="?"||!/[!=<:]/.test(u(3))){E("negate",j);continue}}if(X.nonegate!==!0&&S.index===0){d();continue}}if(j==="+"){if(X.noextglob!==!0&&u()==="("&&u(2)!=="?"){E("plus",j);continue}if(f&&f.value==="("||X.regex===!1){C({type:"plus",value:j,output:z});continue}if(f&&(f.type==="bracket"||f.type==="paren"||f.type==="brace")||S.parens>0){C({type:"plus",value:j});continue}C({type:"plus",value:z});continue}if(j==="@"){if(X.noextglob!==!0&&u()==="("&&u(2)!=="?"){C({type:"at",extglob:!0,value:j,output:""});continue}C({type:"text",value:j});continue}if(j!=="*"){if(j==="$"||j==="^")j=`\\${j}`;let a=FuD.exec(c());if(a)j+=a[0],S.index+=a[0].length;C({type:"text",value:j});continue}if(f&&(f.type==="globstar"||f.star===!0)){f.type="star",f.star=!0,f.value+=j,f.output=v,S.backtrack=!0,S.globstar=!0,g(j);continue}let k=c();if(X.noextglob!==!0&&/^\([^?]/.test(k)){E("star",j);continue}if(f.type==="star"){if(X.noglobstar===!0){g(j);continue}let a=f.prev,WD=a.prev,uD=a.type==="slash"||a.type==="bos",gD=WD&&(WD.type==="star"||WD.type==="globstar");if(X.bash===!0&&(!uD||k[0]&&k[0]!=="/")){C({type:"star",value:j,output:""});continue}let J0=S.braces>0&&(a.type==="comma"||a.type==="brace"),v0=h.length&&(a.type==="pipe"||a.type==="paren");if(!uD&&a.type!=="paren"&&!J0&&!v0){C({type:"star",value:j,output:""});continue}while(k.slice(0,3)==="/**"){let j1=D[S.index+4];if(j1&&j1!=="/")break;k=k.slice(3),g("/**",3)}if(a.type==="bos"&&P()){f.type="globstar",f.value+=j,f.output=x(X),S.output=f.output,S.globstar=!0,g(j);continue}if(a.type==="slash"&&a.prev.type!=="bos"&&!gD&&P()){S.output=S.output.slice(0,-(a.output+f.output).length),a.output=`(?:${a.output}`,f.type="globstar",f.output=x(X)+(X.strictSlashes?")":"|$)"),f.value+=j,S.globstar=!0,S.output+=a.output+f.output,g(j);continue}if(a.type==="slash"&&a.prev.type!=="bos"&&k[0]==="/"){let j1=k[1]!==void 0?"|$":"";S.output=S.output.slice(0,-(a.output+f.output).length),a.output=`(?:${a.output}`,f.type="globstar",f.output=`${x(X)}${q}|${q}${j1})`,f.value+=j,S.output+=a.output+f.output,S.globstar=!0,g(j+y()),C({type:"slash",value:"/",output:""});continue}if(a.type==="bos"&&k[0]==="/"){f.type="globstar",f.value+=j,f.output=`(?:^|${q}|${x(X)}${q})`,S.output=f.output,S.globstar=!0,g(j+y()),C({type:"slash",value:"/",output:""});continue}S.output=S.output.slice(0,-f.output.length),f.type="globstar",f.output=x(X),f.value+=j,S.output+=f.output,S.globstar=!0,g(j);continue}let zD={type:"star",value:j,output:v};if(X.bash===!0){if(zD.output=".*?",f.type==="bos"||f.type==="slash")zD.output=A+zD.output;C(zD);continue}if(f&&(f.type==="bracket"||f.type==="paren")&&X.regex===!0){zD.output=j,C(zD);continue}if(S.index===S.start||f.type==="slash"||f.type==="dot"){if(f.type==="dot")S.output+=M,f.output+=M;else if(X.dot===!0)S.output+=I,f.output+=I;else S.output+=A,f.output+=A;if(u()!=="*")S.output+=B,f.output+=B}C(zD)}while(S.brackets>0){if(X.strictBrackets===!0)throw SyntaxError(B7("closing","]"));S.output=o1.escapeLast(S.output,"["),YD("brackets")}while(S.parens>0){if(X.strictBrackets===!0)throw SyntaxError(B7("closing",")"));S.output=o1.escapeLast(S.output,"("),YD("parens")}while(S.braces>0){if(X.strictBrackets===!0)throw SyntaxError(B7("closing","}"));S.output=o1.escapeLast(S.output,"{"),YD("braces")}if(X.strictSlashes!==!0&&(f.type==="star"||f.type==="bracket"))C({type:"maybe_slash",value:"",output:`${q}?`});if(S.backtrack===!0){S.output="";for(let k of S.tokens)if(S.output+=k.output!=null?k.output:k.value,k.suffix)S.output+=k.suffix}return S};lM.fastpaths=(D,$)=>{let X={...$},Y=typeof X.maxLength==="number"?Math.min(sw,X.maxLength):sw,J=D.length;if(J>Y)throw SyntaxError(`Input length: ${J}, exceeds maximum allowed length: ${Y}`);D=RDD[D]||D;let Q=o1.isWindows($),{DOT_LITERAL:F,SLASH_LITERAL:Z,ONE_CHAR:w,DOTS_SLASH:G,NO_DOT:U,NO_DOTS:O,NO_DOTS_SLASH:z,STAR:q,START_ANCHOR:B}=tw.globChars(Q),W=X.dot?O:U,L=X.dot?z:U,M=X.capture?"":"?:",I={negated:!1,prefix:""},K=X.bash===!0?".*?":q;if(X.capture)K=`(${K})`;let N=(A)=>{if(A.noglobstar===!0)return K;return`(${M}(?:(?!${B}${A.dot?G:F}).)*?)`},V=(A)=>{switch(A){case"*":return`${W}${w}${K}`;case".*":return`${F}${w}${K}`;case"*.*":return`${W}${K}${F}${w}${K}`;case"*/*":return`${W}${K}${Z}${w}${L}${K}`;case"**":return W+N(X);case"**/*":return`(?:${W}${N(X)}${Z})?${L}${w}${K}`;case"**/*.*":return`(?:${W}${N(X)}${Z})?${L}${K}${F}${w}${K}`;case"**/.*":return`(?:${W}${N(X)}${Z})?${F}${w}${K}`;default:{let _=/^(.*?)\.(\w+)$/.exec(A);if(!_)return;let v=V(_[1]);if(!v)return;return v+F+_[2]}}},R=o1.removePrefix(D,I),x=V(R);if(x&&X.strictSlashes!==!0)x+=`${Z}?`;return x};jDD.exports=lM});var CDD=T((WsD,TDD)=>{var GuD=i("path"),UuD=ADD(),nM=EDD(),iM=P2(),OuD=C2(),quD=(D)=>D&&typeof D==="object"&&!Array.isArray(D),y0=(D,$,X=!1)=>{if(Array.isArray(D)){let U=D.map((z)=>y0(z,$,X));return(z)=>{for(let q of U){let B=q(z);if(B)return B}return!1}}let Y=quD(D)&&D.tokens&&D.input;if(D===""||typeof D!=="string"&&!Y)throw TypeError("Expected pattern to be a non-empty string");let J=$||{},Q=iM.isWindows($),F=Y?y0.compileRe(D,$):y0.makeRe(D,$,!1,!0),Z=F.state;delete F.state;let w=()=>!1;if(J.ignore){let U={...$,ignore:null,onMatch:null,onResult:null};w=y0(J.ignore,U,X)}let G=(U,O=!1)=>{let{isMatch:z,match:q,output:B}=y0.test(U,F,$,{glob:D,posix:Q}),W={glob:D,state:Z,regex:F,posix:Q,input:U,output:B,match:q,isMatch:z};if(typeof J.onResult==="function")J.onResult(W);if(z===!1)return W.isMatch=!1,O?W:!1;if(w(U)){if(typeof J.onIgnore==="function")J.onIgnore(W);return W.isMatch=!1,O?W:!1}if(typeof J.onMatch==="function")J.onMatch(W);return O?W:!0};if(X)G.state=Z;return G};y0.test=(D,$,X,{glob:Y,posix:J}={})=>{if(typeof D!=="string")throw TypeError("Expected input to be a string");if(D==="")return{isMatch:!1,output:""};let Q=X||{},F=Q.format||(J?iM.toPosixSlashes:null),Z=D===Y,w=Z&&F?F(D):D;if(Z===!1)w=F?F(D):D,Z=w===Y;if(Z===!1||Q.capture===!0)if(Q.matchBase===!0||Q.basename===!0)Z=y0.matchBase(D,$,X,J);else Z=$.exec(w);return{isMatch:Boolean(Z),match:Z,output:w}};y0.matchBase=(D,$,X,Y=iM.isWindows(X))=>{return($ instanceof RegExp?$:y0.makeRe($,X)).test(GuD.basename(D))};y0.isMatch=(D,$,X)=>y0($,X)(D);y0.parse=(D,$)=>{if(Array.isArray(D))return D.map((X)=>y0.parse(X,$));return nM(D,{...$,fastpaths:!1})};y0.scan=(D,$)=>UuD(D,$);y0.compileRe=(D,$,X=!1,Y=!1)=>{if(X===!0)return D.output;let J=$||{},Q=J.contains?"":"^",F=J.contains?"":"$",Z=`${Q}(?:${D.output})${F}`;if(D&&D.negated===!0)Z=`^(?!${Z}).*$`;let w=y0.toRegex(Z,$);if(Y===!0)w.state=D;return w};y0.makeRe=(D,$={},X=!1,Y=!1)=>{if(!D||typeof D!=="string")throw TypeError("Expected a non-empty string");let J={negated:!1,fastpaths:!0};if($.fastpaths!==!1&&(D[0]==="."||D[0]==="*"))J.output=nM.fastpaths(D,$);if(!J.output)J=nM(D,$);return y0.compileRe(J,$,X,Y)};y0.toRegex=(D,$)=>{try{let X=$||{};return new RegExp(D,X.flags||(X.nocase?"i":""))}catch(X){if($&&$.debug===!0)throw X;return/$^/}};y0.constants=OuD;TDD.exports=y0});var _DD=T((KsD,vDD)=>{var xDD=i("util"),SDD=ODD(),e$=CDD(),pM=P2(),PDD=(D)=>D===""||D==="./",uDD=(D)=>{let $=D.indexOf("{");return $>-1&&D.indexOf("}",$)>-1},B0=(D,$,X)=>{$=[].concat($),D=[].concat(D);let Y=new Set,J=new Set,Q=new Set,F=0,Z=(U)=>{if(Q.add(U.output),X&&X.onResult)X.onResult(U)};for(let U=0;U<$.length;U++){let O=e$(String($[U]),{...X,onResult:Z},!0),z=O.state.negated||O.state.negatedExtglob;if(z)F++;for(let q of D){let B=O(q,!0);if(!(z?!B.isMatch:B.isMatch))continue;if(z)Y.add(B.output);else Y.delete(B.output),J.add(B.output)}}let G=(F===$.length?[...Q]:[...J]).filter((U)=>!Y.has(U));if(X&&G.length===0){if(X.failglob===!0)throw Error(`No matches found for "${$.join(", ")}"`);if(X.nonull===!0||X.nullglob===!0)return X.unescape?$.map((U)=>U.replace(/\\/g,"")):$}return G};B0.match=B0;B0.matcher=(D,$)=>e$(D,$);B0.isMatch=(D,$,X)=>e$($,X)(D);B0.any=B0.isMatch;B0.not=(D,$,X={})=>{$=[].concat($).map(String);let Y=new Set,J=[],F=new Set(B0(D,$,{...X,onResult:(Z)=>{if(X.onResult)X.onResult(Z);J.push(Z.output)}}));for(let Z of J)if(!F.has(Z))Y.add(Z);return[...Y]};B0.contains=(D,$,X)=>{if(typeof D!=="string")throw TypeError(`Expected a string: "${xDD.inspect(D)}"`);if(Array.isArray($))return $.some((Y)=>B0.contains(D,Y,X));if(typeof $==="string"){if(PDD(D)||PDD($))return!1;if(D.includes($)||D.startsWith("./")&&D.slice(2).includes($))return!0}return B0.isMatch(D,$,{...X,contains:!0})};B0.matchKeys=(D,$,X)=>{if(!pM.isObject(D))throw TypeError("Expected the first argument to be an object");let Y=B0(Object.keys(D),$,X),J={};for(let Q of Y)J[Q]=D[Q];return J};B0.some=(D,$,X)=>{let Y=[].concat(D);for(let J of[].concat($)){let Q=e$(String(J),X);if(Y.some((F)=>Q(F)))return!0}return!1};B0.every=(D,$,X)=>{let Y=[].concat(D);for(let J of[].concat($)){let Q=e$(String(J),X);if(!Y.every((F)=>Q(F)))return!1}return!0};B0.all=(D,$,X)=>{if(typeof D!=="string")throw TypeError(`Expected a string: "${xDD.inspect(D)}"`);return[].concat($).every((Y)=>e$(Y,X)(D))};B0.capture=(D,$,X)=>{let Y=pM.isWindows(X),Q=e$.makeRe(String(D),{...X,capture:!0}).exec(Y?pM.toPosixSlashes($):$);if(Q)return Q.slice(1).map((F)=>F===void 0?"":F)};B0.makeRe=(...D)=>e$.makeRe(...D);B0.scan=(...D)=>e$.scan(...D);B0.parse=(D,$)=>{let X=[];for(let Y of[].concat(D||[]))for(let J of SDD(String(Y),$))X.push(e$.parse(J,$));return X};B0.braces=(D,$)=>{if(typeof D!=="string")throw TypeError("Expected a string");if($&&$.nobrace===!0||!uDD(D))return[D];return SDD(D,$)};B0.braceExpand=(D,$)=>{if(typeof D!=="string")throw TypeError("Expected a string");return B0.braces(D,{...$,expand:!0})};B0.hasBraces=uDD;vDD.exports=B0});import{existsSync as DvD,readFileSync as $vD}from"node:fs";import{dirname as XvD,join as K7}from"node:path";import{cwd as $G}from"node:process";function sM(D){if(!DvD(D))return;return $vD(D,"utf-8")}function QvD(D){let $=[K7($G(),D,"app","build.gradle"),K7($G(),D,"app","build.gradle.kts")];for(let X of $){let Y=sM(X);if(!Y)continue;let J=Y.match(/versionName\s*(?:=\s*)?["']([^"']+)["']/)?.[1],Q=Y.match(/versionCode\s*(?:=\s*)?(\d+)/)?.[1];if(J)return{versionName:J,versionCode:Q,source:X}}return}function F0D(D,$){let X=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return D.match(new RegExp(`<key>${X}</key>\\s*<string>([^<]+)</string>`))?.[1]?.trim()}function DG(D,$){let Y=D.match(new RegExp(`${$}\\s*=\\s*([^;]+);`))?.[1]?.trim();if(!Y)return;return Y.replace(/"/g,"").trim()}function FvD(D){let $=K7($G(),D,"App"),X=K7($,"App","Info.plist"),Y=K7($,"App.xcodeproj","project.pbxproj"),J=sM(X),Q=sM(Y);if(!J)return;let F=F0D(J,"CFBundleShortVersionString"),Z=F0D(J,"CFBundleVersion");if(F==="$(MARKETING_VERSION)")F=Q?DG(Q,"MARKETING_VERSION"):void 0;if(Z==="$(CURRENT_PROJECT_VERSION)")Z=Q?DG(Q,"CURRENT_PROJECT_VERSION"):void 0;if(!F&&Q)F=DG(Q,"MARKETING_VERSION");if(!Z&&Q)Z=DG(Q,"CURRENT_PROJECT_VERSION");if(!F)return;return{versionName:F,versionCode:Z,source:X}}function ZvD(D){let $=D?.plugins?.CapacitorUpdater?.version;if(typeof $==="string"&&$.trim().length>0)return $.trim();return}function wvD(D){let $=D?.plugins?.CapacitorUpdater?.defaultChannel;if(typeof $==="string"&&$.trim().length>0)return $.trim();return""}function GvD(D){let $=D?.plugins?.CapacitorUpdater?.updateUrl;if(typeof $==="string"&&$.trim().length>0)return $.trim();return JvD}async function w0D(D,$){let X=$?.plugins?.CapacitorUpdater?.appId,Y=$?.appId,J=X||Y;if(!J)return{ok:!1,error:"Could not resolve app ID from capacitor config. Ensure appId is set in capacitor.config.ts or CapacitorUpdater.appId is configured."};let Q=X?"CapacitorUpdater.appId from capacitor config":"top-level appId from capacitor config",F=L2($,D),Z=D==="android"?QvD(F):FvD(F);if(!Z)return{ok:!1,error:`Unable to resolve native ${D.toUpperCase()} version values from platform files in "${F}".`};let w=ZvD($),G=w||Z.versionName,U=w?"CapacitorUpdater.version from capacitor config":`native ${D.toUpperCase()} versionName`,O=K7($G(),"package.json"),z=XvD(O),q=await y1("@capgo/capacitor-updater",z,O);if(!q)return{ok:!1,error:"Unable to resolve installed @capgo/capacitor-updater version from this project."};return{ok:!0,context:{endpoint:GvD($),payload:{app_id:J,device_id:YvD,version_name:"builtin",version_build:G,is_emulator:!1,is_prod:!1,platform:D,plugin_version:q,defaultChannel:wvD($)},nativeSource:Z.source,versionBuildSource:U,appIdSource:Q}}}function G0D(D){let $={};if(D&&typeof D==="object"){for(let[X,Y]of Object.entries(D))if(X!=="error"&&X!=="message")$[X]=Y}return $}function UvD(D,$){let X=typeof D?.error==="string"?D.error:void 0,Y=typeof D?.message==="string"?D.message:void 0,J=typeof D?.version==="string"?D.version:void 0;if(X==="no_new_version_available"||J&&J===$)return{status:"retry",detail:Y||"No new version available yet"};if(X)return{status:"failed",detail:`${X}: ${Y??"Unknown backend message"}`,errorCode:X,backendMessage:Y,extra:G0D(D)};if(J&&J!==$)return{status:"available",detail:`Update ${J} is available`,responseVersion:J};return{status:"failed",detail:`Unexpected response format: ${JSON.stringify(D)}`}}async function U0D(D,$){let X;try{X=await fetch(D,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($),signal:AbortSignal.timeout(Z0D)})}catch(Q){if(Q instanceof DOMException&&Q.name==="TimeoutError")return{success:!1,reason:`Request timed out after ${Z0D/1000}s — the endpoint did not respond in time.`,backendRefusal:!1};return{success:!1,reason:`Network error: ${Q instanceof Error?Q.message:String(Q)}`,backendRefusal:!1}}let Y;try{Y=await X.json()}catch{Y={error:"invalid_json_response",message:"Non-JSON response from updates endpoint"}}if(!X.ok){let Q=typeof Y?.error==="string"?Y.error:void 0,F=typeof Y?.message==="string"?Y.message:void 0;return{success:!1,reason:`HTTP ${X.status}: ${JSON.stringify(Y)}`,backendRefusal:!!Q,errorCode:Q,backendMessage:F,extra:G0D(Y)}}let J=UvD(Y,$.version_name);if(J.status==="available")return{success:!0,availableVersion:J.responseVersion??""};if(J.status==="retry")return{success:!1,reason:J.detail,backendRefusal:!1};return{success:!1,reason:J.detail,backendRefusal:!!J.errorCode,errorCode:J.errorCode,backendMessage:J.backendMessage,extra:J.extra}}function O0D(D){if(!D.errorCode)return[];let $=[];if(D.errorCode==="disable_auto_update_to_major"){let Y=typeof D.extra?.version==="string"?D.extra.version:"unknown",J=typeof D.extra?.old==="string"?D.extra.old:"unknown";$.push(`Channel policy blocks major upgrades (target ${Y}, device baseline ${J}).`)}let X=OvD[D.errorCode];if(X)$.push(X.cause),$.push(`Fix: ${X.fix}`),$.push(`Details: ${X.docsUrl||b0}`);else $.push(`Backend returned ${D.errorCode}.`),$.push("Check channel restrictions, app/plugin configuration, and device version values."),$.push(`Troubleshooting guide: ${b0}`);return $}var JvD="https://plugin.capgo.app/updates",YvD="00000000-0000-0000-0000-000000000000",b0="https://capgo.app/docs/plugins/updater/commonproblems/",Z0D=1e4,OvD;var q0D=o(()=>{kD();OvD={disable_auto_update_to_major:{cause:"Channel blocks major upgrades and device baseline major does not match the target bundle major.",fix:"Set plugins.CapacitorUpdater.version so its MAJOR matches the bundle MAJOR (e.g. 1.0.0 for bundle 1.x.x), run npx cap sync, and reinstall the native build.",docsUrl:`${b0}#disable_auto_update_to_major`},disable_auto_update_to_minor:{cause:"Channel blocks minor upgrades and the target bundle minor is above the device baseline.",fix:"Upload a bundle within the allowed minor range, or change the channel disable_auto_update policy in the dashboard.",docsUrl:`${b0}#disable_auto_update_to_minor--disable_auto_update_to_patch`},disable_auto_update_to_patch:{cause:"Channel blocks patch upgrades and the target bundle patch is above the device baseline.",fix:"Upload a bundle within the allowed patch range, or change the channel disable_auto_update policy in the dashboard.",docsUrl:`${b0}#disable_auto_update_to_minor--disable_auto_update_to_patch`},disable_auto_update_to_metadata:{cause:"Channel uses metadata-based targeting (version_number) and the device baseline is below the required min_update_version.",fix:"Set plugins.CapacitorUpdater.version to match the installed native version, or adjust min_update_version on the channel.",docsUrl:`${b0}#disable_auto_update_to_metadata`},disable_auto_update_under_native:{cause:"Channel prevents downgrades below the native app version.",fix:"Upload a bundle with version >= native baseline, or disable the under-native downgrade protection on the channel.",docsUrl:`${b0}#disable_auto_update_under_native`},misconfigured_channel:{cause:"Channel has disable_auto_update=version_number but min_update_version is missing.",fix:"Set a valid min_update_version on the channel, or change disable_auto_update to a different mode."},cannot_update_via_private_channel:{cause:"The selected channel does not allow device self-assignment.",fix:"Use a channel with self-assignment enabled, or enable self-assignment / make the channel public.",docsUrl:`${b0}#cannot_update_via_private_channel`},semver_error:{cause:"version_build sent to the backend is not valid semver (expected x.y.z).",fix:"Set plugins.CapacitorUpdater.version to a valid semver like 1.2.3, run npx cap sync, and rebuild native.",docsUrl:`${b0}#unknown_version_build--semver_error`},unknown_version_build:{cause:"Backend received version_build=unknown (device baseline version is missing).",fix:"Set plugins.CapacitorUpdater.version in capacitor.config.*, run npx cap sync, and rebuild native.",docsUrl:`${b0}#unknown_version_build--semver_error`},unsupported_plugin_version:{cause:"Installed @capgo/capacitor-updater is too old for the current backend.",fix:"Run npm install @capgo/capacitor-updater@latest, then npx cap sync, and rebuild native.",docsUrl:`${b0}#unsupported_plugin_version`},key_id_mismatch:{cause:"Bundle encryption key and device key differ.",fix:"Ensure the same public key is used in app config and when encrypting bundles, then re-upload the bundle.",docsUrl:`${b0}#key_id_mismatch`},disabled_platform_ios:{cause:"Channel has iOS updates disabled.",fix:"Enable the iOS platform toggle on the target channel in the dashboard.",docsUrl:`${b0}#disabled_platform_ios--disabled_platform_android`},disabled_platform_android:{cause:"Channel has Android updates disabled.",fix:"Enable the Android platform toggle on the target channel in the dashboard.",docsUrl:`${b0}#disabled_platform_ios--disabled_platform_android`},disabled_platform_electron:{cause:"Channel has Electron updates disabled.",fix:"Enable the Electron platform toggle on the target channel in the dashboard."},disable_prod_build:{cause:"Channel blocks production builds (allow_prod is off).",fix:"Enable allow_prod on the channel, or test with a development build.",docsUrl:`${b0}#disable_prod_build--disable_dev_build--disable_device--disable_emulator`},disable_dev_build:{cause:"Channel blocks development builds (allow_dev is off).",fix:"Enable allow_dev on the channel, or test with a production build.",docsUrl:`${b0}#disable_prod_build--disable_dev_build--disable_device--disable_emulator`},disable_device:{cause:"Channel blocks physical devices (allow_device is off).",fix:"Enable allow_device on the channel, or test on an emulator.",docsUrl:`${b0}#disable_prod_build--disable_dev_build--disable_device--disable_emulator`},disable_emulator:{cause:"Channel blocks emulators (allow_emulator is off).",fix:"Enable allow_emulator on the channel, or test on a physical device.",docsUrl:`${b0}#disable_prod_build--disable_dev_build--disable_device--disable_emulator`},no_channel:{cause:"No channel was resolved for this device.",fix:"Set defaultChannel in capacitor.config.* plugins.CapacitorUpdater section, or create a default channel in the dashboard.",docsUrl:`${b0}#no_channel--null_channel_data`},null_channel_data:{cause:"Channel was resolved but contains no usable data.",fix:"Set defaultChannel in capacitor.config.* plugins.CapacitorUpdater section, or verify the channel has a bundle assigned.",docsUrl:`${b0}#no_channel--null_channel_data`},missing_info:{cause:"Request is missing required fields (app_id, device_id, version_build, or platform).",fix:"Check capacitor.config.* for a valid appId and verify the probe payload."},no_bundle:{cause:"Channel resolved a version but no downloadable bundle artifact exists.",fix:"Re-upload the bundle with npx @capgo/cli@latest bundle upload and verify channel assignment."},no_bundle_url:{cause:"Bundle was resolved but its download URL is missing.",fix:"Re-upload the bundle — the storage artifact may be corrupted or missing."},no_url_or_manifest:{cause:"Bundle was resolved but neither URL nor manifest is available.",fix:"Re-upload the bundle — the storage artifact may be corrupted or missing."},already_on_builtin:{cause:"Device is already running the builtin bundle.",fix:"Upload and assign a bundle to the channel for OTA updates to be delivered."},revert_to_builtin_plugin_version_too_old:{cause:"Plugin version is too old for safe builtin revert.",fix:"Run npm install @capgo/capacitor-updater@latest, then npx cap sync, and rebuild native."},on_premise_app:{cause:"App is either flagged as on-premise or does not exist in Capgo Cloud.",fix:"Check that the app_id is registered in Capgo (capgo app add). If it is an on-premise app, configure plugins.CapacitorUpdater.updateUrl to point to your on-prem update endpoint."},need_plan_upgrade:{cause:"Update checks are blocked by plan limits.",fix:"Upgrade your Capgo plan or contact your organization admin."},invalid_json_body:{cause:"Updates endpoint rejected the request body as invalid JSON.",fix:"This is likely a CLI bug — please report it at https://github.com/Cap-go/CLI/issues."},invalid_query_parameters:{cause:"Updates endpoint rejected the query parameters.",fix:"This is likely a CLI bug — please report it at https://github.com/Cap-go/CLI/issues."}}});var K0D={};a1(K0D,{probeInternal:()=>W0D,probe:()=>zvD});import{exit as qvD,stdin as z0D,stdout as B0D}from"node:process";async function W0D(D){let $;try{$=(await ID()).config}catch{return{success:!1,error:"Failed to load Capacitor config."}}let X;if(D.platform==="ios"||D.platform==="android")X=D.platform;else if(D.platform)return{success:!1,error:`Invalid platform "${D.platform}". Must be "ios" or "android".`};else{if(!(!!z0D.isTTY&&!!B0D.isTTY))return{success:!1,error:"Platform is required in non-interactive environments. Use --platform ios or --platform android."};let w=await t1({message:"Which platform do you want to probe?",options:[{value:"ios",label:"iOS"},{value:"android",label:"Android"}]});if(bD(w))return{success:!1,error:"Probe cancelled."};X=w}let Y=await w0D(X,$);if(!Y.ok)return{success:!1,error:`Probe setup failed: ${Y.error}`};let J=Y.context,Q=await U0D(J.endpoint,J.payload),F={success:Q.success,probeResult:Q,endpoint:J.endpoint,platform:X,versionBuild:J.payload.version_build,versionBuildSource:J.versionBuildSource,appId:J.payload.app_id,appIdSource:J.appIdSource,nativeSource:J.nativeSource};if(!Q.success)F.hints=O0D(Q);return F}async function zvD(D){VD("Probe Capgo updates endpoint");let $=await W0D(D);if($.error)H.error($.error),qvD(1);H.info(`Endpoint: ${$.endpoint}`),H.info(`Platform: ${$.platform}, version_build: ${$.versionBuild}`),H.info(`version_build source: ${$.versionBuildSource}`),H.info(`app_id: ${$.appId} (${$.appIdSource})`),H.info(`Native values source: ${$.nativeSource}`);let X=$.probeResult;if(X.success)H.success(`Update available: ${X.availableVersion}`);else{if(H.warn(`Reason: ${X.reason}`),X.backendRefusal)H.warn("The backend actively refused the request (not a cache/propagation issue).");if(X.errorCode)H.warn(`Error code: ${X.errorCode}`);if(X.backendMessage)H.warn(`Backend message: ${X.backendMessage}`);if($.hints)for(let Y of $.hints)H.warn(` ${Y}`)}}var H0D=o(()=>{vD();q0D();kD()});vD();D6();kD();vD();D6();kD();async function pa(D,$,X,Y={}){let{silent:J=!1,autoUnlink:Q=!1}=Y,{data:F,error:Z}=await D.from("channels").select().eq("app_id",$).eq("version",X.id);if(Z){if(!J)H.error(`Cannot check Version ${$}@${X.name}: ${t(Z)}`);throw Error(`Cannot check version ${$}@${X.name}: ${t(Z)}`)}if(!F?.length)return;if(J)throw Error(`Version ${$}@${X.name} is used in ${F.length} channel(s)`);VD(`❌ Version ${$}@${X.name} is used in ${F.length} channel${F.length>1?"s":""}`);let w=Q;if(!Q)w=await d0({message:"unlink it?"})===!0;if(!w)throw H.error("Unlink it first"),Error(`Version ${$}@${X.name} is still linked to channel(s)`);for(let G of F){let U=A0();U.start(`Unlinking channel ${G.name}`);let O=await nL(D,$,{silent:J});if(!O)throw U.stop(`Cannot find unknown version for ${$}`),Error(`Cannot find unknown version for ${$}`);let{error:z}=await D.from("channels").update({version:O.id}).eq("id",G.id);if(z)throw U.stop(`Cannot update channel ${G.name} ${t(z)}`),Error(`Cannot update channel ${G.name}: ${t(z)}`);U.stop(`✅ Channel ${G.name} unlinked`)}ND(`Version unlinked from ${F.length} channel${F.length>1?"s":""}`)}async function nL(D,$,X={}){let{silent:Y=!1}=X,{data:J,error:Q}=await D.from("app_versions").select("id").eq("app_id",$).eq("name","unknown").single();if(!Q)return J;try{let F=await l0(D,$),{data:Z,error:w}=await D.from("app_versions").insert({owner_org:F,deleted:!0,name:"unknown",app_id:$}).select("id").single();if(w){if(!Y)H.error(`Cannot find or create unknown version for ${$}. Find error: ${t(Q)}, Create error: ${t(w)}`);throw Error(`Cannot find or create unknown version for app ${$}: ${t(w)}`)}return Z}catch(F){if(!Y)H.error(`Cannot find or create unknown version for ${$}. Find error: ${t(Q)}, Create error: ${t(F)}`);throw Error(`Cannot retrieve or create unknown version for app ${$}: ${t(F)}`)}}function ra(D,$){return D.from("channels").insert($).select().single()}function oa(D,$,X,Y){return D.from("channels").delete().eq("name",$).eq("app_id",X).single()}function aa(D,$,X){return D.from("channels").select().eq("app_id",$).eq("name",X).single()}function ta(D,$,X){return D.from("channel_devices").delete().eq("app_id",$).eq("channel_id",X)}function sa(D,$,X){return D.from("channels").select(`
|
|
423
423
|
id,
|
|
424
424
|
version (id, name)
|
|
425
425
|
`).eq("app_id",$).eq("name",X).single().throwOnError().then(({data:Y})=>Y?.version)}function ea(D,$=!1){if($)return;let X=new R0;X.theme=R0.roundTheme,X.headers=["Name","Version","Public","iOS","Android","Auto Update","Native Auto Update","Device Self Set","Progressive Deploy","Secondary Version","Secondary Version Percentage","AB Testing","AB Testing Version","AB Testing Percentage","Emulator","Device","Dev","Prod"],X.rows=[];for(let Y of D.toReversed())X.rows.push([Y.name,Y.version?.name,Y.public?"✅":"❌",Y.ios?"✅":"❌",Y.android?"✅":"❌",Y.disable_auto_update,Y.disable_auto_update_under_native?"❌":"✅",Y.allow_device_self_set?"✅":"❌",Y.allow_emulator?"✅":"❌",Y.allow_device?"✅":"❌",Y.allow_dev?"✅":"❌",Y.allow_prod?"✅":"❌"]);H.success("Channels"),H.success(X.toString())}async function Dt(D,$,X=!1){let{data:Y,error:J}=await D.from("channels").select(`
|
|
@@ -439,7 +439,7 @@ PS: You can ignore this check with "--ignore-checksum-check"`),Error("Cannot upl
|
|
|
439
439
|
created_by,
|
|
440
440
|
app_id,
|
|
441
441
|
version (id, name)
|
|
442
|
-
`).eq("app_id",$).order("created_at",{ascending:!1});if(J){if(!X)H.error(`App ${$} not found in database`);throw Error(`App ${$} not found in database: ${t(J)}`)}return Y}async function iL(D,$,X,Y={}){let{silent:J=!1}=Y,{error:Q}=await D.from("app_versions").update({deleted:!0}).eq("app_id",$).eq("deleted",!1).eq("name",X);if(Q){let F=`App version ${$}@${X} not found in database`;if(!J)H.error(F);throw Error(`${F}: ${t(Q)}`)}}async function Kw(D,$,X,Y={}){let{silent:J=!1,autoUnlink:Q=!1}=Y,F=await NTD(D,$,X,{silent:J});await pa(D,$,F,{silent:J,autoUnlink:Q}),await iL(D,$,X,{silent:J})}function $t(D,$=!1){if($)return;if(!D.length)throw Error("No bundle found");let X=new R0;X.theme=R0.roundTheme,X.headers=["Version","Created","Keep"],X.rows=[];for(let Y of D.toReversed())X.rows.push([Y.name,t5(Y.created_at),Y.keep??""]);H.success("Bundles"),H.success(X.toString())}async function Hw(D,$,X={}){let{silent:Y=!1}=X,{data:J,error:Q}=await D.from("app_versions").select().eq("app_id",$).eq("deleted",!1).order("created_at",{ascending:!1});if(Q){let F=`App ${$} not found in database`;if(!Y)H.error(F);throw Error(`${F}: ${t(Q)}`)}return J??[]}async function Xt(D,$,X={}){let{silent:Y=!1}=X,{data:J,error:Q}=await D.from("channels").select("version").eq("app_id",$);if(Q){let F=`App ${$} not found in database`;if(!Y)H.error(F);throw Error(`${F}: ${t(Q)}`)}return(J??[]).map((F)=>F.version)}async function NTD(D,$,X,Y={}){let{silent:J=!1}=Y,{data:Q,error:F}=await D.from("app_versions").select().eq("app_id",$).eq("name",X).eq("deleted",!1).single();if(!Q||F){let Z=`App version ${$}@${X} doesn't exist`;if(!J)H.error(Z);throw Error(`${Z}${F?`: ${t(F)}`:""}`)}return Q}vD();import{existsSync as Yt,readFileSync as Qt}from"node:fs";vD();kD();async function Jt(D,$){let{data:X}=await D.rpc("exist_app_v2",{appid:$}).single();return!!X}async function m0(D,$,X=!1){let{data:Y,error:J}=await D.rpc("reject_access_due_to_2fa_for_app",{app_id:$});if(J){if(!X)H.error(`Cannot check 2FA compliance: ${J.message}`);throw Error(`Cannot check 2FA compliance: ${J.message}`)}if(Y){if(X)throw Error("2FA required for this organization");cL()}}async function u0(D,$,X,Y,J=!1,Q=!1){let F=v8();if(!Q)await m0(D,X,J);let Z=await va(D,$,X);if(!Z.okay)switch(Z.error){case"INVALID_APIKEY":{if(!J)H.error("Invalid apikey, such apikey does not exists!");throw Error("Invalid apikey, such apikey does not exists!")}case"NO_APP":{let U=`App ${X} does not exist, run first \`${F.runner} @capgo/cli app add ${X}\` to create it`;if(!J)H.error(U);throw Error(U)}case"NO_ORG":{if(!J)H.error("Could not find organization, please contact support to resolve this!");throw Error("Could not find organization, please contact support to resolve this!")}}let w=Z.data;if(Y>w){let U=`Insuficcent permissions for app ${X}. Current permission: ${A1[Z.data]}, required for this action: ${A1[Y]}.`;if(!J)H.error(U);throw Error(U)}return Z.data}var G$="assets/icon.png",Vw="public/capgo.png";function s5(D,$){return`org/${D}/${$}/icon`}O1();kD();var LTD=/^[a-z0-9]+(\.[\w-]+)+$/i;function MTD(D,$,X){if(!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(D.includes("--")){if(!X)H.error('The app id includes illegal symbols. You cannot use "--" in the app id');throw Error("App id includes illegal symbols")}if(!LTD.test(D)){if(!X)H.error(`Invalid app ID format: "${D}"`),H.info("App ID must be in reverse domain notation (e.g., com.example.app)"),H.info("Valid format: lowercase letters, numbers, dots, hyphens, and underscores"),H.info("Examples: com.mycompany.myapp, io.capgo.app, com.example.my-app");throw Error("Invalid app ID format")}}async function ITD(D,$,X){if(!await Jt(D,$))return;if($==="io.ionic.starter"){if(!X)H.error(`This appId ${$} cannot be used it's reserved, please change it in your capacitor config.`);throw Error("Reserved appId, please change it in capacitor config")}if(!X)H.error(`App ${$} already exist`);throw Error(`App ${$} already exists`)}async function Ft(D,$,X,Y=!1){if(!Y)VD("Adding");await Z0(),$.apikey=$.apikey||BD();let J=await ID(),Q=mD(D,J?.config);MTD(Q,$,Y);let F=await jD($.apikey,$.supaHost,$.supaAnon),Z=await xD(F,$.apikey,["write","all"]);if(await ITD(F,Q,Y),!X)X=await Bw(F,["admin","super_admin"]);let w=X.gid,{name:G,icon:U}=$;if(G=G||J.config?.appName||"Unknown",U=U||"resources/icon.png",!U||!G){if(!Y)H.error("Missing argument, you need to provide a appId and a name, or be in a capacitor project");throw Error("Missing app name or icon path")}if(!Y)H.info(`Adding ${Q} to Capgo`);let O=null,z=null;if(U&&Yt(U)){if(O=Qt(U),z=N4(U)||"image/png",!Y)H.warn(`Found app icon ${U}`)}else if(Yt(G$)){if(O=Qt(G$),z=N4(G$)||"image/png",!Y)H.warn(`Found app icon ${G$}`)}else if(!Y)H.warn(`Cannot find app icon in any of the following locations: ${U}, ${G$}`);let q=s5(w,Q),B=Vw;if(O&&z){let{error:L}=await F.storage.from("images").upload(q,O,{contentType:z,upsert:!0});if(L){if(!Y)H.error(`Could not add app ${t(L)}`);throw Error(`Could not add app ${t(L)}`)}B=q}let{error:W}=await F.from("apps").insert({icon_url:B,owner_org:w,user_id:Z,name:G,app_id:Q});if(W){if(!Y)H.error(`Could not add app ${t(W)}`);throw Error(`Could not add app ${t(W)}`)}if(await AD($.apikey,{channel:"app",event:"App Created",icon:"\uD83C\uDD95",user_id:w,tags:{"app-id":Q},notify:!1,notifyConsole:!0}).catch(()=>{}),!Y)H.success(`App ${Q} added to Capgo`),H.info("This app is accessible to all members of your organization based on their permissions"),H.info(`Next step: upload a bundle with "npx @capgo/cli bundle upload ${Q}"`),ND("Done ✅");return{appId:Q,organizationUid:w,userId:Z,name:G,iconUrl:B,signedURL:B}}vD();kD();async function Zt(D,$,X=!1,Y=!1){if(!X)VD("Deleting");$.apikey=$.apikey||BD();let J=await ID(),Q=mD(D,J?.config);if(!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Q){if(!X)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let F=await jD($.apikey,$.supaHost,$.supaAnon),Z=await xD(F,$.apikey,["write","all"]);await u0(F,$.apikey,Q,5,X);let{data:w,error:G}=await F.from("apps").select("owner_org ( created_by, id )").eq("app_id",Q).single(),U=w;if(!Y&&!G&&(U?.owner_org.created_by??"")!==Z)if(!X){H.warn("Deleting the app is not recommended for users that are not the organization owner"),H.warn("You are invited as a super_admin but your are not the owner"),H.warn("It's strongly recommended that you do not continue!");let W=await t1({message:"Do you want to continue?",options:[{label:"Yes",value:"yes"},{label:"No",value:"no"}]});if(bD(W)||W==="no")throw H.error("Canceled deleting the app, exiting"),Error("App deletion cancelled")}else throw Error("Cannot delete app: you are not the organization owner");else if(G&&!X)H.warn(`Cannot get the app owner ${t(G)}`);let{error:O}=U?.owner_org.id?await F.storage.from("images").remove([s5(U.owner_org.id,Q)]):{error:null};if(O&&!X)H.error("Could not delete app logo");let{error:z}=await F.storage.from(`apps/${Q}/${Z}`).remove(["versions"]);if(z&&!X)H.error("Could not delete app version");let{error:q}=await F.from("apps").delete().eq("app_id",Q);if(q){if(!X)H.error("Could not delete app");throw Error(`Could not delete app: ${t(q)}`)}let B=await d0(F,Q);if(await AD($.apikey,{channel:"app",event:"App Deleted",icon:"\uD83D\uDDD1️",user_id:B,tags:{"app-id":Q},notify:!1}).catch(()=>{}),!X)H.success("App deleted in Capgo"),ND("Done ✅");return!0}vD();H3();kD();import{platform as ATD,version as RTD}from"node:os";import{version as jTD}from"node:process";async function wt(D){let $={},X=Object.keys(D);return(await Promise.all(X.map((J)=>EY(J)))).forEach((J,Q)=>{if(J)$[X[Q]]=J}),$}async function ETD(){let D=await ww(),$={"@capgo/cli":H$.version};for(let[X,Y]of D)if(X.startsWith("@capgo/")||X.startsWith("@capawesome/")||X.startsWith("capacitor"))$[X]=Y;return $}async function Gt(D,$=!1){if(!$)H.warn(" \uD83D\uDC8A Capgo Doctor \uD83D\uDC8A");let X=await ID(),Y=V4("",D.packageJson),J=X?.config?.plugins?.CapacitorUpdater?.version||Y,Q=X?.config?.appName||"",F=mD("",X?.config),Z=X?.config?.webDir||"";if(!$)H.info(` App Name: ${Q}`),H.info(` App ID: ${F}`),H.info(` App Version: ${J}`),H.info(` Web Dir: ${Z}`),H.info(` OS: ${ATD()} ${RTD()}`),H.info(` Node: ${jTD}`),H.info(" Installed Dependencies:");let w=await ETD();if(Object.keys(w).length===0){if(!$)H.warning("\x1B[31m%s\x1B[0m \uD83D\uDEA8 No dependencies found");throw Error("No dependencies found")}if(!$)for(let U of Object.keys(w))H.info(` ${U}: ${w[U]}`);let G={};if(!$){let U=A0();U.start("Running: Loading latest dependencies"),G=await wt(w),U.stop("Latest Dependencies:");for(let O of Object.keys(G))H.info(` ${O}: ${G[O]}`)}else G=await wt(w);if(JSON.stringify(w)!==JSON.stringify(G)){if(!$)H.warn("\x1B[31m\uD83D\uDEA8 Some dependencies are not up to date\x1B[0m");throw Error("Some dependencies are not up to date")}if(!$)H.success("\x1B[32m✅ All dependencies are up to date\x1B[0m");return{appName:Q,appId:F,appVersion:J,webDir:Z,installedDependencies:w,latestDependencies:G}}vD();D6();O1();kD();function TTD(D){let $=new R0;$.headers=["Name","id","Created"],$.rows=[];for(let X of D.toReversed())$.rows.push([X.name??"",X.app_id,t5(X.created_at)]);H.success("Apps"),H.success($.toString())}async function CTD(D,$){let{data:X,error:Y}=await D.from("apps").select().order("created_at",{ascending:!1});if(Y){if(!$)H.error("Apps not found");throw Error("Apps not found")}return X??[]}async function Ut(D,$=!1){if(!$)VD("List apps in Capgo");await Z0(),D.apikey=D.apikey||BD();let X=await jD(D.apikey,D.supaHost,D.supaAnon);if(await xD(X,D.apikey,["write","all","read","upload"]),!$)H.info("Getting active bundle in Capgo");let Y=await CTD(X,$);if(!Y.length){if(!$)H.error("No apps found");throw Error("No apps found")}if(!$)H.info(`Active app in Capgo: ${Y.length}`),TTD(Y),ND("Done ✅");return Y}vD();import{existsSync as Ot,readFileSync as qt}from"node:fs";kD();async function zt(D,$,X=!1){if(!X)VD("Set app");$.apikey=$.apikey||BD();let Y=await ID();if(D=mD(D,Y?.config),!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let J=await jD($.apikey,$.supaHost,$.supaAnon),F=(await Bw(J,["admin","super_admin"])).gid,Z=await xD(J,$.apikey,["write","all"]);await u0(J,$.apikey,D,4,X);let{name:w,icon:G,retention:U,exposeMetadata:O}=$;if(U&&Number.isNaN(Number(U))){if(!X)H.error("retention value must be a number");throw Error("Retention value must be a number")}else if(U&&U<0){if(!X)H.error("retention value cannot be less than 0");throw Error("Retention value cannot be less than 0")}else if(U&&U>=63113904){if(!X)H.error("retention value cannot be greater than 63113904 seconds (2 years)");throw Error("Retention value cannot be greater than 63113904 seconds (2 years)")}let z,q,B=s5(F,D),W=Vw;if(G&&Ot(G)){if(z=qt(G),q=N4(G)||"image/png",!X)H.warn(`Found app icon ${G}`)}else if(Ot(G$)){if(z=qt(G$),q=N4(G$)||"image/png",!X)H.warn(`Found app icon ${G$}`)}else if(!X)H.warn(`Cannot find app icon in any of the following locations: ${G}, ${G$}`);if(z&&q){let{error:M}=await J.storage.from("images").upload(B,z,{contentType:q,upsert:!0});if(M){if(!X)H.error(`Could not set app ${t(M)}`);throw Error(`Could not set app: ${t(M)}`)}W=B}let{error:L}=await J.from("apps").update({icon_url:W,name:w,retention:!U?void 0:U*24*60*60,expose_metadata:O}).eq("app_id",D).eq("user_id",Z);if(L){if(!X)H.error(`Could not set app ${t(L)}`);throw Error(`Could not set app: ${t(L)}`)}if(await AD($.apikey,{channel:"app",event:"App Updated",icon:"\uD83D\uDCDD",user_id:F,tags:{"app-id":D},notify:!1,notifyConsole:!0}).catch(()=>{}),!X)ND("Done ✅");return!0}vD();BF();kD();async function Bt(D,$,X=!1){if(!X)VD("Set a specific setting in capacitor config");if($.bool&&$.string){if(!X)H.error("Bool and string CANNOT be set at the same time");throw Error("Bool and string cannot both be provided")}if(!$.bool&&!$.string){if(!X)H.error("You MUST provide either bool or string as the value");throw Error("Either bool or string value is required")}if($.bool&&$.bool!=="true"&&$.bool!=="false"){if(!X)H.error("Invalid bool");throw Error("Invalid bool value; expected true or false")}try{let Y=await ID(),J=Y.config,Q=D.split(".");if(Q.length===0){if(!X)H.error("Invalid path");throw Error("Invalid config path")}for(let Z of Q.slice(0,-1)){if(!Object.prototype.hasOwnProperty.call(J,Z))J[Z]={};J=J[Z]}let F=$.bool?$.bool==="true":$.string;if(J[Q.at(-1)]=F,await q5(Y,!0),!X)H.success(`Set "${D}" to "${F}"`)}catch(Y){if(!X)H.error(`Cannot set config in capacitor settings ${t(Y)}`);throw Error(`Cannot set capacitor config: ${t(Y)}`)}if(!X)ND("Done ✅")}vD();var ls=V0(EU(),1);import{Buffer as ys}from"node:buffer";import{existsSync as M2,readdirSync as ds,readFileSync as xPD,statSync as SPD}from"node:fs";import{mkdir as uPD,readFile as zM,rm as vPD,stat as _PD,writeFile as kPD}from"node:fs/promises";import{tmpdir as fPD}from"node:os";import{basename as bs,join as s$,resolve as hs}from"node:path";import BM,{chdir as gs,cwd as WM,exit as _aD}from"node:process";if(!globalThis.EventTarget||!globalThis.Event)console.error(`
|
|
442
|
+
`).eq("app_id",$).order("created_at",{ascending:!1});if(J){if(!X)H.error(`App ${$} not found in database`);throw Error(`App ${$} not found in database: ${t(J)}`)}return Y}async function iL(D,$,X,Y={}){let{silent:J=!1}=Y,{error:Q}=await D.from("app_versions").update({deleted:!0}).eq("app_id",$).eq("deleted",!1).eq("name",X);if(Q){let F=`App version ${$}@${X} not found in database`;if(!J)H.error(F);throw Error(`${F}: ${t(Q)}`)}}async function Kw(D,$,X,Y={}){let{silent:J=!1,autoUnlink:Q=!1}=Y,F=await NTD(D,$,X,{silent:J});await pa(D,$,F,{silent:J,autoUnlink:Q}),await iL(D,$,X,{silent:J})}function $t(D,$=!1){if($)return;if(!D.length)throw Error("No bundle found");let X=new R0;X.theme=R0.roundTheme,X.headers=["Version","Created","Keep"],X.rows=[];for(let Y of D.toReversed())X.rows.push([Y.name,t5(Y.created_at),Y.keep??""]);H.success("Bundles"),H.success(X.toString())}async function Hw(D,$,X={}){let{silent:Y=!1}=X,{data:J,error:Q}=await D.from("app_versions").select().eq("app_id",$).eq("deleted",!1).order("created_at",{ascending:!1});if(Q){let F=`App ${$} not found in database`;if(!Y)H.error(F);throw Error(`${F}: ${t(Q)}`)}return J??[]}async function Xt(D,$,X={}){let{silent:Y=!1}=X,{data:J,error:Q}=await D.from("channels").select("version").eq("app_id",$);if(Q){let F=`App ${$} not found in database`;if(!Y)H.error(F);throw Error(`${F}: ${t(Q)}`)}return(J??[]).map((F)=>F.version)}async function NTD(D,$,X,Y={}){let{silent:J=!1}=Y,{data:Q,error:F}=await D.from("app_versions").select().eq("app_id",$).eq("name",X).eq("deleted",!1).single();if(!Q||F){let Z=`App version ${$}@${X} doesn't exist`;if(!J)H.error(Z);throw Error(`${Z}${F?`: ${t(F)}`:""}`)}return Q}vD();import{existsSync as Yt,readFileSync as Qt}from"node:fs";vD();kD();async function Jt(D,$){let{data:X}=await D.rpc("exist_app_v2",{appid:$}).single();return!!X}async function m0(D,$,X=!1){let{data:Y,error:J}=await D.rpc("reject_access_due_to_2fa_for_app",{app_id:$});if(J){if(!X)H.error(`Cannot check 2FA compliance: ${J.message}`);throw Error(`Cannot check 2FA compliance: ${J.message}`)}if(Y){if(X)throw Error("2FA required for this organization");cL()}}async function u0(D,$,X,Y,J=!1,Q=!1){let F=v8();if(!Q)await m0(D,X,J);let Z=await va(D,$,X);if(!Z.okay)switch(Z.error){case"INVALID_APIKEY":{if(!J)H.error("Invalid apikey, such apikey does not exists!");throw Error("Invalid apikey, such apikey does not exists!")}case"NO_APP":{let U=`App ${X} does not exist, run first \`${F.runner} @capgo/cli app add ${X}\` to create it`;if(!J)H.error(U);throw Error(U)}case"NO_ORG":{if(!J)H.error("Could not find organization, please contact support to resolve this!");throw Error("Could not find organization, please contact support to resolve this!")}}let w=Z.data;if(Y>w){let U=`Insuficcent permissions for app ${X}. Current permission: ${A1[Z.data]}, required for this action: ${A1[Y]}.`;if(!J)H.error(U);throw Error(U)}return Z.data}var G$="assets/icon.png",Vw="public/capgo.png";function s5(D,$){return`org/${D}/${$}/icon`}O1();kD();var LTD=/^[a-z0-9]+(\.[\w-]+)+$/i;function MTD(D,$,X){if(!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(D.includes("--")){if(!X)H.error('The app id includes illegal symbols. You cannot use "--" in the app id');throw Error("App id includes illegal symbols")}if(!LTD.test(D)){if(!X)H.error(`Invalid app ID format: "${D}"`),H.info("App ID must be in reverse domain notation (e.g., com.example.app)"),H.info("Valid format: lowercase letters, numbers, dots, hyphens, and underscores"),H.info("Examples: com.mycompany.myapp, io.capgo.app, com.example.my-app");throw Error("Invalid app ID format")}}async function ITD(D,$,X){if(!await Jt(D,$))return;if($==="io.ionic.starter"){if(!X)H.error(`This appId ${$} cannot be used it's reserved, please change it in your capacitor config.`);throw Error("Reserved appId, please change it in capacitor config")}if(!X)H.error(`App ${$} already exist`);throw Error(`App ${$} already exists`)}async function Ft(D,$,X,Y=!1){if(!Y)VD("Adding");await Z0(),$.apikey=$.apikey||BD();let J=await ID(),Q=mD(D,J?.config);MTD(Q,$,Y);let F=await jD($.apikey,$.supaHost,$.supaAnon),Z=await xD(F,$.apikey,["write","all"]);if(await ITD(F,Q,Y),!X)X=await Bw(F,["admin","super_admin"]);let w=X.gid,{name:G,icon:U}=$;if(G=G||J.config?.appName||"Unknown",U=U||"resources/icon.png",!U||!G){if(!Y)H.error("Missing argument, you need to provide a appId and a name, or be in a capacitor project");throw Error("Missing app name or icon path")}if(!Y)H.info(`Adding ${Q} to Capgo`);let O=null,z=null;if(U&&Yt(U)){if(O=Qt(U),z=N4(U)||"image/png",!Y)H.warn(`Found app icon ${U}`)}else if(Yt(G$)){if(O=Qt(G$),z=N4(G$)||"image/png",!Y)H.warn(`Found app icon ${G$}`)}else if(!Y)H.warn(`Cannot find app icon in any of the following locations: ${U}, ${G$}`);let q=s5(w,Q),B=Vw;if(O&&z){let{error:L}=await F.storage.from("images").upload(q,O,{contentType:z,upsert:!0});if(L){if(!Y)H.error(`Could not add app ${t(L)}`);throw Error(`Could not add app ${t(L)}`)}B=q}let{error:W}=await F.from("apps").insert({icon_url:B,owner_org:w,user_id:Z,name:G,app_id:Q});if(W){if(!Y)H.error(`Could not add app ${t(W)}`);throw Error(`Could not add app ${t(W)}`)}if(await AD($.apikey,{channel:"app",event:"App Created",icon:"\uD83C\uDD95",user_id:w,tags:{"app-id":Q},notify:!1,notifyConsole:!0}).catch(()=>{}),!Y)H.success(`App ${Q} added to Capgo`),H.info("This app is accessible to all members of your organization based on their permissions"),H.info(`Next step: upload a bundle with "npx @capgo/cli bundle upload ${Q}"`),ND("Done ✅");return{appId:Q,organizationUid:w,userId:Z,name:G,iconUrl:B,signedURL:B}}vD();kD();async function Zt(D,$,X=!1,Y=!1){if(!X)VD("Deleting");$.apikey=$.apikey||BD();let J=await ID(),Q=mD(D,J?.config);if(!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Q){if(!X)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let F=await jD($.apikey,$.supaHost,$.supaAnon),Z=await xD(F,$.apikey,["write","all"]);await u0(F,$.apikey,Q,5,X);let{data:w,error:G}=await F.from("apps").select("owner_org ( created_by, id )").eq("app_id",Q).single(),U=w;if(!Y&&!G&&(U?.owner_org.created_by??"")!==Z)if(!X){H.warn("Deleting the app is not recommended for users that are not the organization owner"),H.warn("You are invited as a super_admin but your are not the owner"),H.warn("It's strongly recommended that you do not continue!");let W=await t1({message:"Do you want to continue?",options:[{label:"Yes",value:"yes"},{label:"No",value:"no"}]});if(bD(W)||W==="no")throw H.error("Canceled deleting the app, exiting"),Error("App deletion cancelled")}else throw Error("Cannot delete app: you are not the organization owner");else if(G&&!X)H.warn(`Cannot get the app owner ${t(G)}`);let{error:O}=U?.owner_org.id?await F.storage.from("images").remove([s5(U.owner_org.id,Q)]):{error:null};if(O&&!X)H.error("Could not delete app logo");let{error:z}=await F.storage.from(`apps/${Q}/${Z}`).remove(["versions"]);if(z&&!X)H.error("Could not delete app version");let{error:q}=await F.from("apps").delete().eq("app_id",Q);if(q){if(!X)H.error("Could not delete app");throw Error(`Could not delete app: ${t(q)}`)}let B=await l0(F,Q);if(await AD($.apikey,{channel:"app",event:"App Deleted",icon:"\uD83D\uDDD1️",user_id:B,tags:{"app-id":Q},notify:!1}).catch(()=>{}),!X)H.success("App deleted in Capgo"),ND("Done ✅");return!0}vD();H3();kD();import{platform as ATD,version as RTD}from"node:os";import{version as jTD}from"node:process";async function wt(D){let $={},X=Object.keys(D);return(await Promise.all(X.map((J)=>EY(J)))).forEach((J,Q)=>{if(J)$[X[Q]]=J}),$}async function ETD(){let D=await ww(),$={"@capgo/cli":H$.version};for(let[X,Y]of D)if(X.startsWith("@capgo/")||X.startsWith("@capawesome/")||X.startsWith("capacitor"))$[X]=Y;return $}async function Gt(D,$=!1){if(!$)H.warn(" \uD83D\uDC8A Capgo Doctor \uD83D\uDC8A");let X=await ID(),Y=V4("",D.packageJson),J=X?.config?.plugins?.CapacitorUpdater?.version||Y,Q=X?.config?.appName||"",F=mD("",X?.config),Z=X?.config?.webDir||"";if(!$)H.info(` App Name: ${Q}`),H.info(` App ID: ${F}`),H.info(` App Version: ${J}`),H.info(` Web Dir: ${Z}`),H.info(` OS: ${ATD()} ${RTD()}`),H.info(` Node: ${jTD}`),H.info(" Installed Dependencies:");let w=await ETD();if(Object.keys(w).length===0){if(!$)H.warning("\x1B[31m%s\x1B[0m \uD83D\uDEA8 No dependencies found");throw Error("No dependencies found")}if(!$)for(let U of Object.keys(w))H.info(` ${U}: ${w[U]}`);let G={};if(!$){let U=A0();U.start("Running: Loading latest dependencies"),G=await wt(w),U.stop("Latest Dependencies:");for(let O of Object.keys(G))H.info(` ${O}: ${G[O]}`)}else G=await wt(w);if(JSON.stringify(w)!==JSON.stringify(G)){if(!$)H.warn("\x1B[31m\uD83D\uDEA8 Some dependencies are not up to date\x1B[0m");throw Error("Some dependencies are not up to date")}if(!$)H.success("\x1B[32m✅ All dependencies are up to date\x1B[0m");return{appName:Q,appId:F,appVersion:J,webDir:Z,installedDependencies:w,latestDependencies:G}}vD();D6();O1();kD();function TTD(D){let $=new R0;$.headers=["Name","id","Created"],$.rows=[];for(let X of D.toReversed())$.rows.push([X.name??"",X.app_id,t5(X.created_at)]);H.success("Apps"),H.success($.toString())}async function CTD(D,$){let{data:X,error:Y}=await D.from("apps").select().order("created_at",{ascending:!1});if(Y){if(!$)H.error("Apps not found");throw Error("Apps not found")}return X??[]}async function Ut(D,$=!1){if(!$)VD("List apps in Capgo");await Z0(),D.apikey=D.apikey||BD();let X=await jD(D.apikey,D.supaHost,D.supaAnon);if(await xD(X,D.apikey,["write","all","read","upload"]),!$)H.info("Getting active bundle in Capgo");let Y=await CTD(X,$);if(!Y.length){if(!$)H.error("No apps found");throw Error("No apps found")}if(!$)H.info(`Active app in Capgo: ${Y.length}`),TTD(Y),ND("Done ✅");return Y}vD();import{existsSync as Ot,readFileSync as qt}from"node:fs";kD();async function zt(D,$,X=!1){if(!X)VD("Set app");$.apikey=$.apikey||BD();let Y=await ID();if(D=mD(D,Y?.config),!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let J=await jD($.apikey,$.supaHost,$.supaAnon),F=(await Bw(J,["admin","super_admin"])).gid,Z=await xD(J,$.apikey,["write","all"]);await u0(J,$.apikey,D,4,X);let{name:w,icon:G,retention:U,exposeMetadata:O}=$;if(U&&Number.isNaN(Number(U))){if(!X)H.error("retention value must be a number");throw Error("Retention value must be a number")}else if(U&&U<0){if(!X)H.error("retention value cannot be less than 0");throw Error("Retention value cannot be less than 0")}else if(U&&U>=63113904){if(!X)H.error("retention value cannot be greater than 63113904 seconds (2 years)");throw Error("Retention value cannot be greater than 63113904 seconds (2 years)")}let z,q,B=s5(F,D),W=Vw;if(G&&Ot(G)){if(z=qt(G),q=N4(G)||"image/png",!X)H.warn(`Found app icon ${G}`)}else if(Ot(G$)){if(z=qt(G$),q=N4(G$)||"image/png",!X)H.warn(`Found app icon ${G$}`)}else if(!X)H.warn(`Cannot find app icon in any of the following locations: ${G}, ${G$}`);if(z&&q){let{error:M}=await J.storage.from("images").upload(B,z,{contentType:q,upsert:!0});if(M){if(!X)H.error(`Could not set app ${t(M)}`);throw Error(`Could not set app: ${t(M)}`)}W=B}let{error:L}=await J.from("apps").update({icon_url:W,name:w,retention:!U?void 0:U*24*60*60,expose_metadata:O}).eq("app_id",D).eq("user_id",Z);if(L){if(!X)H.error(`Could not set app ${t(L)}`);throw Error(`Could not set app: ${t(L)}`)}if(await AD($.apikey,{channel:"app",event:"App Updated",icon:"\uD83D\uDCDD",user_id:F,tags:{"app-id":D},notify:!1,notifyConsole:!0}).catch(()=>{}),!X)ND("Done ✅");return!0}vD();BF();kD();async function Bt(D,$,X=!1){if(!X)VD("Set a specific setting in capacitor config");if($.bool&&$.string){if(!X)H.error("Bool and string CANNOT be set at the same time");throw Error("Bool and string cannot both be provided")}if(!$.bool&&!$.string){if(!X)H.error("You MUST provide either bool or string as the value");throw Error("Either bool or string value is required")}if($.bool&&$.bool!=="true"&&$.bool!=="false"){if(!X)H.error("Invalid bool");throw Error("Invalid bool value; expected true or false")}try{let Y=await ID(),J=Y.config,Q=D.split(".");if(Q.length===0){if(!X)H.error("Invalid path");throw Error("Invalid config path")}for(let Z of Q.slice(0,-1)){if(!Object.prototype.hasOwnProperty.call(J,Z))J[Z]={};J=J[Z]}let F=$.bool?$.bool==="true":$.string;if(J[Q.at(-1)]=F,await q5(Y,!0),!X)H.success(`Set "${D}" to "${F}"`)}catch(Y){if(!X)H.error(`Cannot set config in capacitor settings ${t(Y)}`);throw Error(`Cannot set capacitor config: ${t(Y)}`)}if(!X)ND("Done ✅")}vD();var ls=V0(EU(),1);import{Buffer as ys}from"node:buffer";import{existsSync as M2,readdirSync as ds,readFileSync as xPD,statSync as SPD}from"node:fs";import{mkdir as uPD,readFile as zM,rm as vPD,stat as _PD,writeFile as kPD}from"node:fs/promises";import{tmpdir as fPD}from"node:os";import{basename as bs,join as s$,resolve as hs}from"node:path";import BM,{chdir as gs,cwd as WM,exit as _aD}from"node:process";if(!globalThis.EventTarget||!globalThis.Event)console.error(`
|
|
443
443
|
PartySocket requires a global 'EventTarget' class to be available!
|
|
444
444
|
You can polyfill this global by adding this to your code before any partysocket imports:
|
|
445
445
|
|
|
@@ -460,12 +460,12 @@ const partysocket = new PartySocket({
|
|
|
460
460
|
WebSocket: WS
|
|
461
461
|
});
|
|
462
462
|
|
|
463
|
-
`),Wt=!0;let Q=this._options.WebSocket||WebSocket;this._debug("connect",{url:Y,protocols:J}),this._ws=J?new Q(Y,J):new Q(Y),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),X)}).catch((Y)=>{this._connectLock=!1,this._handleError(new pL.ErrorEvent(Error(Y.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new pL.ErrorEvent(Error("TIMEOUT"),this))}_disconnect($=1000,X){if(this._clearTimeouts(),!this._ws)return;this._removeListeners();try{if(this._ws.readyState===this.OPEN||this._ws.readyState===this.CONNECTING)this._ws.close($,X);this._handleClose(new pL.CloseEvent($,X,this))}catch(Y){}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_handleOpen=($)=>{this._debug("open event");let{minUptime:X=k8.minUptime}=this._options;if(clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),X),PTD(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach((Y)=>{this._ws?.send(Y)}),this._messageQueue=[],this.onopen)this.onopen($);this.dispatchEvent(Nw($))};_handleMessage=($)=>{if(this._debug("message event"),this.onmessage)this.onmessage($);this.dispatchEvent(Nw($))};_handleError=($)=>{if(this._debug("error event",$.message),this._disconnect(void 0,$.message==="TIMEOUT"?"timeout":void 0),this.onerror)this.onerror($);this._debug("exec error listeners"),this.dispatchEvent(Nw($)),this._connect()};_handleClose=($)=>{if(this._debug("close event"),this._clearTimeouts(),this._shouldReconnect)this._connect();if(this.onclose)this.onclose($);this.dispatchEvent(Nw($))};_removeListeners(){if(!this._ws)return;this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError)}_addListeners(){if(!this._ws)return;this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError)}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var fw=V0(jY(),1);var eCD=V0(qs(),1),DPD=V0(eL(),1),$PD=V0($M(),1),Ls=V0(xw(),1),XPD=V0(Ns(),1);var Ms=Ls.default;H3();kD();import{homedir as qPD}from"node:os";import{join as UM}from"node:path";import{cwd as zPD,env as BPD}from"node:process";import{chmod as roD,lstat as JPD,mkdir as ooD,readFile as YPD,rename as QPD,rm as FPD,writeFile as ZPD,appendFile as wPD}from"node:fs/promises";import{dirname as GPD,join as UPD}from"node:path";import{randomBytes as OPD}from"node:crypto";async function wM(D){try{if((await JPD(D)).isSymbolicLink())throw Error(`Refusing to access symbolic link path: ${D}`)}catch($){if($.code!=="ENOENT")throw $}}async function Is(D,$,X=384){await wM(D),await wPD(D,$,{mode:X})}async function uw(D,$,X={}){let Y=X.mode??384;await wM(D);let J=UPD(GPD(D),`.capgo-tmp-${OPD(8).toString("hex")}`);try{await ZPD(J,$,{encoding:X.encoding??"utf-8",mode:Y}),await QPD(J,D)}catch(Q){throw await FPD(J,{force:!0}),Q}}async function As(D){return await wM(D),await YPD(D,"utf-8")}var WPD=UM(qPD(),".capgo-credentials"),KPD=UM(WPD,"credentials.json"),HPD=".capgo-credentials.json",g8=3600,Rs=604800;function VPD(D){return D?UM(zPD(),HPD):KPD}function vw(D){let X=D.trim().match(/^(\d+)\s*([smhd])?$/i);if(!X)throw Error("output-retention must be a number with optional unit: s, m, h, d (examples: 1h, 3600s, 2d)");let Y=Number.parseInt(X[1],10),J=(X[2]||"s").toLowerCase(),F=Y*(J==="s"?1:J==="m"?60:J==="h"?3600:86400);if(F<g8)throw Error(`output-retention must be at least ${g8} seconds (1h)`);if(F>Rs)throw Error(`output-retention must be at most ${Rs} seconds (7d)`);return F}function Z7(D){if(D===void 0)return!0;if(typeof D==="boolean")return D;let $=D.trim().toLowerCase();if($==="true"||$==="1"||$==="yes")return!0;if($==="false"||$==="0"||$==="no")return!1;throw Error("output-upload must be true/false (examples: --output-upload, --output-upload false)")}async function GM(D){try{let $=VPD(D),X=await As($);return JSON.parse(X)}catch{return{}}}async function js(D,$){if($!==void 0){let J=await GM($);if(!D){let Q=Object.keys(J);if(Q.length===0)return null;return J[Q[0]]||null}return J[D]||null}let X=await GM(!0),Y=await GM(!1);if(!D){let J=Object.keys(X);if(J.length>0)return X[J[0]]||null;let Q=Object.keys(Y);if(Q.length===0)return null;return Y[Q[0]]||null}return X[D]||Y[D]||null}function p0(D){return BPD[D]}function NPD(){let D={},$=p0("BUILD_CERTIFICATE_BASE64"),X=p0("P12_PASSWORD"),Y=p0("APPLE_KEY_ID"),J=p0("APPLE_ISSUER_ID"),Q=p0("APPLE_KEY_CONTENT"),F=p0("APP_STORE_CONNECT_TEAM_ID"),Z=p0("CAPGO_IOS_SCHEME"),w=p0("CAPGO_IOS_TARGET"),G=p0("CAPGO_IOS_PROVISIONING_MAP"),U=p0("ANDROID_KEYSTORE_FILE"),O=p0("KEYSTORE_KEY_ALIAS"),z=p0("KEYSTORE_KEY_PASSWORD"),q=p0("KEYSTORE_STORE_PASSWORD"),B=p0("PLAY_CONFIG_JSON"),W=p0("BUILD_OUTPUT_UPLOAD_ENABLED"),L=p0("BUILD_OUTPUT_RETENTION_SECONDS"),M=p0("SKIP_BUILD_NUMBER_BUMP"),I=p0("CAPGO_IOS_DISTRIBUTION");if($)D.BUILD_CERTIFICATE_BASE64=$;if(X)D.P12_PASSWORD=X;if(Y)D.APPLE_KEY_ID=Y;if(J)D.APPLE_ISSUER_ID=J;if(Q)D.APPLE_KEY_CONTENT=Q;if(F)D.APP_STORE_CONNECT_TEAM_ID=F;if(Z)D.CAPGO_IOS_SCHEME=Z;if(w)D.CAPGO_IOS_TARGET=w;if(I)D.CAPGO_IOS_DISTRIBUTION=I;if(G)D.CAPGO_IOS_PROVISIONING_MAP=G;if(U)D.ANDROID_KEYSTORE_FILE=U;if(O)D.KEYSTORE_KEY_ALIAS=O;if(z)D.KEYSTORE_KEY_PASSWORD=z;if(q)D.KEYSTORE_STORE_PASSWORD=q;if(B)D.PLAY_CONFIG_JSON=B;if(W)D.BUILD_OUTPUT_UPLOAD_ENABLED=Z7(W)?"true":"false";if(L)D.BUILD_OUTPUT_RETENTION_SECONDS=String(vw(L));if(M)D.SKIP_BUILD_NUMBER_BUMP=Z7(M)?"true":"false";return D}async function Es(D,$,X){let Y=await js(D),J=NPD(),Q={...Y?.[$]||{}};if(Object.assign(Q,J),X)Object.assign(Q,X);if($==="android"){let F=!!Q.KEYSTORE_KEY_PASSWORD,Z=!!Q.KEYSTORE_STORE_PASSWORD;if(F&&!Z)Q.KEYSTORE_STORE_PASSWORD=Q.KEYSTORE_KEY_PASSWORD;else if(!F&&Z)Q.KEYSTORE_KEY_PASSWORD=Q.KEYSTORE_STORE_PASSWORD}return Object.keys(Q).length>0?Q:void 0}import{existsSync as _s,readFileSync as CPD}from"node:fs";import{resolve as ks}from"node:path";vD();kD();import{readFileSync as LPD}from"node:fs";function qM(D){let $=LPD(D);return MPD($,D)}function MPD(D,$){let J=D.indexOf("<?xml"),Q=J!==-1?D.indexOf("</plist>",J):-1;if(J===-1||Q===-1||Q<=J)throw Error(`No embedded plist found in mobileprovision file: ${$}`);let F=D.slice(J,Q+8).toString("utf-8"),Z=OM(F,"Name");if(!Z)throw Error(`Mobileprovision file missing required 'Name' key: ${$}`);let w=OM(F,"UUID")||"",G=IPD(F,"Entitlements","application-identifier")||"",U=G.indexOf("."),O=U!==-1?G.slice(U+1):G;return{name:Z,uuid:w,applicationIdentifier:G,bundleId:O}}function OM(D,$){let X=new RegExp(`<key>${Ts($)}</key>\\s*<string>([^<]*)</string>`),Y=D.match(X);return Y?Y[1]:null}function IPD(D,$,X){let Y=new RegExp(`<key>${Ts($)}</key>\\s*<dict>([\\s\\S]*?)</dict>`),J=D.match(Y);if(!J)return null;return OM(J[1],X)}function Ts(D){return D.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as Cs,readdirSync as APD,readFileSync as RPD}from"node:fs";import{join as Ss}from"node:path";var jPD=new Set(["com.apple.product-type.application","com.apple.product-type.app-extension","com.apple.product-type.app-extension.messages","com.apple.product-type.app-extension.messages-sticker-pack","com.apple.product-type.application.watchapp2","com.apple.product-type.watchkit2-extension","com.apple.product-type.extensionkit-extension","com.apple.product-type.application.on-demand-install-capable"]);function us(D){if(!D)return[];let $=/\w+\s*\/\*[^*]*\*\/\s*=\s*\{[^}]*isa\s*=\s*PBXNativeTarget;[^}]*\}/g,X=[];for(let Y of D.matchAll($)){let J=Y[0],Q=J.match(/name\s*=\s*("[^"]*"|[^;\s]+)\s*;/),F=J.match(/productType\s*=\s*"([^"]+)"/),Z=J.match(/buildConfigurationList\s*=\s*(\w+)/);if(!Q||!F||!Z)continue;let w=Q[1].replace(/^"|"$/g,""),G=F[1],U=Z[1];if(!jPD.has(G))continue;let O=EPD(D,U);X.push({name:w,bundleId:O,productType:G})}return X}function EPD(D,$){let X=new RegExp(`${xs($)}\\s*\\/\\*[^*]*\\*\\/\\s*=\\s*\\{[^}]*isa\\s*=\\s*XCConfigurationList;[^}]*\\}`),Y=D.match(X);if(!Y)return"";let J=Y[0].match(/buildConfigurations\s*=\s*\(([^)]*)\)/);if(!J)return"";let Q=[...J[1].matchAll(/(\w+)/g)].map((Z)=>Z[1]);if(Q.length===0)return"";let F="";for(let Z of Q){let w=new RegExp(`${xs(Z)}\\s*\\/\\*[^*]*\\*\\/\\s*=\\s*\\{(?:[^{}]*\\{[^}]*\\})*[^}]*\\}`),G=D.match(w);if(!G)continue;let U=G[0],O=U.match(/PRODUCT_BUNDLE_IDENTIFIER\s*=\s*"?([^";\s]+)"?\s*;/);if(!O)continue;let z=U.match(/name\s*=\s*("[^"]*"|[^;\s]+)\s*;/);if((z?z[1].replace(/^"|"$/g,""):"")==="Release")return O[1];if(!F)F=O[1]}return F}function TPD(D){let $=Ss(D,"ios"),X=Ps($);if(X)return X;return Ps(D)}function Ps(D){if(!Cs(D))return null;let $;try{$=APD(D)}catch{return null}for(let X of $)if(X.endsWith(".xcodeproj")){let Y=Ss(D,X,"project.pbxproj");if(Cs(Y))return Y}return null}function vs(D){let $=TPD(D);if(!$)return null;try{return RPD($,"utf-8")}catch{return null}}function xs(D){return D.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function fs(D,$){let X={},Y=[];if($){let J=vs($);if(J)Y=us(J)}for(let J of D){let Q=J.indexOf("="),F,Z;if(Q!==-1){if(F=J.slice(0,Q).trim(),Z=J.slice(Q+1).trim(),!F)throw Error(`Empty bundle ID in provisioning profile entry: "${J}"`);if(!Z)throw Error(`Empty profile path in provisioning profile entry: "${J}"`)}else{if(Z=J.trim(),!Z)throw Error("Empty provisioning profile entry");let z=ks(Z);if(!_s(z))throw Error(`Provisioning profile not found: ${z}`);let q=qM(z);if(Y.find((W)=>W.bundleId===q.bundleId))F=q.bundleId;else if(q.bundleId.endsWith(".*")){let W=Y.find((L)=>L.productType==="com.apple.product-type.application");if(W)F=W.bundleId;else F=q.bundleId}else F=q.bundleId}let w=ks(Z);if(!_s(w))throw Error(`Provisioning profile not found: ${w}`);if(X[F])throw Error(`Duplicate provisioning profile for bundle ID "${F}". Each bundle ID can only have one profile.`);let U=CPD(w).toString("base64"),O=qM(w);X[F]={profile:U,name:O.name}}return X}var ms=Promise.resolve();async function yPD(D,$){let X=async()=>{let J=WM();try{gs(D)}catch(Q){throw Error(`Failed to change working directory to "${D}": ${Q.message}`)}try{return await $()}finally{try{gs(J)}catch{}}},Y=ms.then(X,X);return ms=Y.then(()=>{return},()=>{return}),Y}async function bPD(D,$,X=3,Y=!1){let J=[1000,3000,5000];for(let Q=1;Q<=X;Q++)try{let F=await fetch(D,$);if(F.ok||F.status>=400&&F.status<500)return F;let Z=await F.text().catch(()=>"unknown error");if(!Y)H.warn(`Build request attempt ${Q}/${X} failed: ${F.status} - ${Z}`);if(Q<X){let w=J[Q-1]||5000;if(!Y)H.info(`Retrying in ${w/1000}s...`);await new Promise((G)=>setTimeout(G,w))}else throw Error(`Failed to request build after ${X} attempts: ${F.status} - ${Z}`)}catch(F){let Z=F instanceof Error?F.message:String(F);if(Z.startsWith("Failed to request build after"))throw F;if(!Y)H.warn(`Build request attempt ${Q}/${X} failed: ${Z}`);if(Q<X){let w=J[Q-1]||5000;if(!Y)H.info(`Retrying in ${w/1000}s...`);await new Promise((G)=>setTimeout(G,w))}else throw Error(`Failed to request build after ${X} attempts: ${Z}`)}throw Error("Unexpected error in fetchWithRetry")}var hPD=["succeeded","failed","expired","released","cancelled"],kw=new Set(hPD);async function gPD(D,$=!1,X,Y,J,Q,F){if(D)return null;let Z=null,w=!1,G=(O)=>{if(!O.trim())return;if(Z)return;if(!w)w=!0,console.log("");console.log(O)},U=async()=>{if(!X||!Y)return null;let O=X.replace(/\/+$/,""),z=`${O}/start`,B=`${O}/stream?token=${encodeURIComponent(Y)}`.replace(/^https:/,"wss:").replace(/^http:/,"ws:");if(!D)console.log("Connecting to log streaming...");let W=await fetch(z,{method:"POST",headers:{"x-capgo-log-token":Y}});if(!W.ok){let L=await W.text().catch(()=>"unknown error");if(!D)console.warn(`Could not start log session (${W.status}): ${L}`);return null}return await new Promise((L)=>{let M=!1,I=10,K=0,N=!1,V=new e5(B,void 0,{maxRetries:I,WebSocket:Ms}),R=null,x=0,A=Date.now(),_=!1,v=2000,S=4,h=kw,b=null,l=null,f=(P)=>{if(M)return;if(M=!0,l)clearTimeout(l),l=null;if(R)clearInterval(R),R=null;if(Q&&b)Q.removeEventListener("abort",b),b=null;try{V.close()}catch{}L(P)};if(l=setTimeout(()=>{if(!M){if(!D)console.warn("Log streaming timed out after 3 hours");f(null)}},10800000),(()=>{if(R)return;R=setInterval(async()=>{try{if(V.readyState===e5.OPEN)V.send(JSON.stringify({type:"heartbeat",lastId:x}));let P=Date.now();if(J&&!_&&P-A>=v*S){_=!0;try{let u=await J();if(u&&h.has(u))Z=u,f(Z)}finally{_=!1}}}catch(P){if(!D)H.warn(`Heartbeat encountered an error, continuing... ${String(P)}`)}},v)})(),Q){if(b=()=>{if(!M)f("cancelled")},Q.aborted){f("cancelled");return}Q.addEventListener("abort",b)}V.addEventListener("message",(P)=>{let u="";if(typeof P.data==="string")u=P.data;else if(P.data instanceof ArrayBuffer)u=new TextDecoder().decode(P.data);else if(ArrayBuffer.isView(P.data)){let g=P.data;u=new TextDecoder().decode(new Uint8Array(g.buffer,g.byteOffset,g.byteLength))}else if(P.data&&typeof P.data.toString==="function")u=P.data.toString();let y=null;try{y=JSON.parse(u)}catch{y=null}let c=(g)=>{if(g.type==="status"&&typeof g.status==="string"){let e=g.status.toLowerCase();if(A=Date.now(),h.has(e))Z=e;return}if(g.type==="log"&&typeof g.message==="string"){A=Date.now(),G(g.message);return}if(typeof g.message==="string")A=Date.now(),G(g.message)};if(y?.type==="heartbeat_response")return;if(y?.type==="batch_messages"&&Array.isArray(y.messages)){let g=x;for(let e of y.messages)if(c(e),typeof e.id==="number")g=Math.max(g,e.id);if(g>x){if(x=g,V.readyState===e5.OPEN)try{V.send(JSON.stringify({type:"confirmed_received",lastId:g}))}catch(e){if(!D)H.warn(`Failed to send log confirmation, continuing... ${String(e)}`)}}}else{if(y)c(y);else if(u)A=Date.now(),G(u);if(y&&typeof y.id==="number"){if(x=y.id,V.readyState===e5.OPEN)try{V.send(JSON.stringify({type:"confirmed_received",lastId:y.id}))}catch(g){if(!D)H.warn(`Failed to send log confirmation, continuing... ${String(g)}`)}}}if(Z)f(Z)}),V.addEventListener("error",()=>{if(K+=1,!D)console.warn(`Log stream encountered an error, retrying (${K}/${I})...`);if(!N&&K>=I){if(N=!0,!D)H.warn("Log stream retry limit reached. Falling back to status checks.");if(F)F();f(null)}}),V.addEventListener("close",()=>{if(M)return;if(Z){f(Z);return}if(!D)H.warn("Log stream closed, waiting for reconnect...")})})};try{let O=await U();if(O||Z)return O||Z}catch(O){if(!D)H.warn(`Direct log streaming failed${O instanceof Error?`: ${O.message}`:""}`)}return Z}async function mPD(D,$,X,Y,J,Q,F=!1,Z){let G=0;while(G<120){if(Z?.aborted)return"cancelled";try{let U=await fetch(`${D}/build/status?job_id=${encodeURIComponent($)}&app_id=${encodeURIComponent(X)}&platform=${Y}`,{headers:{authorization:J},signal:Z});if(!U.ok){if(!Q)H.warn(`Status check failed: ${U.status}`);await new Promise((q)=>setTimeout(q,5000)),G++;continue}let O=await U.json(),z=O.status?.toLowerCase?.()??"";if(!Q&&F)H.info(`Build status: ${z||O.status}`);if(kw.has(z))return z;await new Promise((q)=>setTimeout(q,5000)),G++}catch(U){if(Z?.aborted)return"cancelled";if(!Q)H.warn(`Status check error: ${U}`);await new Promise((O)=>setTimeout(O,5000)),G++}}if(!Q)H.warn("Build status polling timed out");return"timeout"}async function cPD(D,$,X){let Y=new Set,J=!1,Q=!1;if($==="ios"){let F=s$(D,X,"App","CapApp-SPM","Package.swift");if(M2(F)){J=!0;let G=(await zM(F,"utf-8")).matchAll(/\.package\s*\([^)]*path:\s*["'](?:\.\.\/)*node_modules\/([^"']+)["']\s*\)/g);for(let U of G){let O=U[1],z=O.lastIndexOf("node_modules/");if(z!==-1)O=O.substring(z+13);Y.add(O)}}let Z=s$(D,X);if(M2(Z)){let w=[s$(Z,"App","Podfile"),s$(Z,"Podfile")];for(let U of ds(Z,{withFileTypes:!0}))if(U.isDirectory())w.push(s$(Z,U.name,"Podfile"));let G=[...new Set(w)].filter((U)=>M2(U));if(G.length>0)Q=!0;for(let U of G){let z=(await zM(U,"utf-8")).matchAll(/pod\s+['"][^'"]+['"],\s*:path\s*=>\s*['"](?:\.\.\/)+node_modules\/([^'"]+)['"]/g);for(let q of z){let B=q[1],W=B.lastIndexOf("node_modules/");if(W!==-1)B=B.substring(W+13);Y.add(B)}}}}else if($==="android"){let F=s$(D,X,"capacitor.settings.gradle");if(M2(F)){let w=(await zM(F,"utf-8")).matchAll(/new\s+File\s*\(\s*['"]\.\.\/node_modules\/([^'"]+)['"]\s*\)/g);for(let G of w){let U=G[1],O=U.lastIndexOf("node_modules/");if(O!==-1)U=U.substring(O+13);let z=U.replace(/\/(android|capacitor)$/,"");Y.add(z)}}}return{packages:Y,usesSPM:J,usesCocoaPods:Q}}function cs(D,$,X,Y){let J=D.replace(/\\/g,"/");if(J.startsWith(`${Y}/`))return!0;if(J==="package.json"||J==="package-lock.json"||J.startsWith("capacitor.config."))return!0;if(J.startsWith("resources/"))return!0;if($==="ios"&&J.startsWith("node_modules/@capacitor/ios/"))return!0;if($==="android"&&J.startsWith("node_modules/@capacitor/android/"))return!0;for(let Q of X.packages){let F=`node_modules/${Q}/`;if(J===`${F}package.json`)return!0;if($==="android"){if(J.startsWith(`${F}android/`))return!0}else if($==="ios"){if(J.startsWith(`${F}ios/`))return!0;if(X.usesSPM){if(J===`${F}Package.swift`)return!0}if(X.usesCocoaPods||!X.usesSPM){if(J.startsWith(F)&&J.endsWith(".podspec"))return!0}}}return!1}function _w(D,$,X,Y,J,Q){let F=ds($);for(let Z of F){let w=s$($,Z),G=X?`${X}/${Z}`:Z,U=SPD(w);if(U.isDirectory()){if(Z===".git"||Z==="dist"||Z==="build"||Z===".angular"||Z===".vite"||Z===".gradle"||Z===".idea"||Z===".swiftpm")continue;if(Z==="node_modules"){_w(D,w,G,Y,J,Q);continue}if(Z==="resources"){_w(D,w,G,Y,J,Q);continue}let O=G.replace(/\\/g,"/");if(cs(G,Y,J,Q)||Q===O||Q.startsWith(`${O}/`)||Array.from(J.packages).some((q)=>{return`node_modules/${q}/`.startsWith(`${O}/`)||O.startsWith(`node_modules/${q}`)}))_w(D,w,G,Y,J,Q)}else if(U.isFile()){if(Z===".DS_Store"||Z.endsWith(".log"))continue;if(cs(G,Y,J,Q))D.addLocalFile(w,X||void 0)}}}async function dPD(D,$,X,Y){let J=L2(Y,X),Q=await cPD(D,X,J),F=new ls.default;_w(F,D,"",X,Q,J);let Z=/node_modules\/\.pnpm\/[^/\n\r]+(?:\/[^/\n\r]+)*\/node_modules\//g,w=new Set(["",".gradle",".swift",".json",".lock",".xml",".properties",".pbxproj",".xcconfig",".plist",".podspec",".rb",".yaml",".yml"]);for(let U of F.getEntries()){if(U.isDirectory)continue;let O=U.entryName.includes(".")?`.${U.entryName.split(".").pop()}`:"",z=U.entryName.split("/").pop()||"";if(!w.has(O)&&z!=="Podfile")continue;let q=U.getData().toString("utf-8"),B=q.replace(Z,"node_modules/");if(X==="ios")B=B.replace(/(?:\.\.\/){4,}(ios\/)/g,"../../../$1");if(B!==q)F.updateFile(U.entryName,ys.from(B,"utf-8"))}let G=s$(D,"capacitor.config.json");if(Y&&!M2(G)){let U=`${JSON.stringify(Y,null,2)}
|
|
464
|
-
`;F.addFile("capacitor.config.json",ys.from(U,"utf-8"))}await kPD($,F.toBuffer())}var lPD=new Set(["CAPGO_IOS_SCHEME","CAPGO_IOS_TARGET","CAPGO_IOS_DISTRIBUTION","BUILD_OUTPUT_UPLOAD_ENABLED","BUILD_OUTPUT_RETENTION_SECONDS","SKIP_BUILD_NUMBER_BUMP","CAPGO_IOS_SOURCE_DIR","CAPGO_IOS_APP_DIR","CAPGO_IOS_PROJECT_DIR","IOS_PROJECT_DIR","CAPGO_ANDROID_SOURCE_DIR","CAPGO_ANDROID_APP_DIR","CAPGO_ANDROID_PROJECT_DIR","ANDROID_PROJECT_DIR"]);function nPD(D,$,X,Y){let J={platform:$,buildMode:X,cliVersion:Y,iosScheme:D.CAPGO_IOS_SCHEME,iosTarget:D.CAPGO_IOS_TARGET,iosDistribution:D.CAPGO_IOS_DISTRIBUTION,iosSourceDir:D.CAPGO_IOS_SOURCE_DIR,iosAppDir:D.CAPGO_IOS_APP_DIR,iosProjectDir:D.CAPGO_IOS_PROJECT_DIR,androidSourceDir:D.CAPGO_ANDROID_SOURCE_DIR,androidAppDir:D.CAPGO_ANDROID_APP_DIR,androidProjectDir:D.CAPGO_ANDROID_PROJECT_DIR,outputUploadEnabled:D.BUILD_OUTPUT_UPLOAD_ENABLED==="true",outputRetentionSeconds:D.BUILD_OUTPUT_RETENTION_SECONDS?Number.parseInt(D.BUILD_OUTPUT_RETENTION_SECONDS,10)||g8:g8,skipBuildNumberBump:D.SKIP_BUILD_NUMBER_BUMP==="true"},Q={};for(let[F,Z]of Object.entries(D))if(!lPD.has(F)&&Z!==void 0)Q[F]=Z;return{buildOptions:J,buildCredentials:Q}}async function ns(D,$,X=!1){let Y=Date.now(),J=$.verbose??!1;try{$.apikey=$.apikey||BD(X);let Q=hs($.path||WM()),F=await yPD(Q,()=>ID());if(D=D||F?.config?.appId,!D)throw Error("Missing argument, you need to provide a appId, or be in a capacitor project");if(!$.platform)throw Error("Missing required argument: --platform <ios|android>");if($.platform!=="ios"&&$.platform!=="android")throw Error(`Invalid platform "${$.platform}". Must be "ios" or "android"`);let Z=$.supaHost||"https://api.capgo.app",w=await jD($.apikey,$.supaHost,$.supaAnon);await xD(w,$.apikey,["write","all"]);let G=await
|
|
463
|
+
`),Wt=!0;let Q=this._options.WebSocket||WebSocket;this._debug("connect",{url:Y,protocols:J}),this._ws=J?new Q(Y,J):new Q(Y),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),X)}).catch((Y)=>{this._connectLock=!1,this._handleError(new pL.ErrorEvent(Error(Y.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new pL.ErrorEvent(Error("TIMEOUT"),this))}_disconnect($=1000,X){if(this._clearTimeouts(),!this._ws)return;this._removeListeners();try{if(this._ws.readyState===this.OPEN||this._ws.readyState===this.CONNECTING)this._ws.close($,X);this._handleClose(new pL.CloseEvent($,X,this))}catch(Y){}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_handleOpen=($)=>{this._debug("open event");let{minUptime:X=k8.minUptime}=this._options;if(clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),X),PTD(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach((Y)=>{this._ws?.send(Y)}),this._messageQueue=[],this.onopen)this.onopen($);this.dispatchEvent(Nw($))};_handleMessage=($)=>{if(this._debug("message event"),this.onmessage)this.onmessage($);this.dispatchEvent(Nw($))};_handleError=($)=>{if(this._debug("error event",$.message),this._disconnect(void 0,$.message==="TIMEOUT"?"timeout":void 0),this.onerror)this.onerror($);this._debug("exec error listeners"),this.dispatchEvent(Nw($)),this._connect()};_handleClose=($)=>{if(this._debug("close event"),this._clearTimeouts(),this._shouldReconnect)this._connect();if(this.onclose)this.onclose($);this.dispatchEvent(Nw($))};_removeListeners(){if(!this._ws)return;this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError)}_addListeners(){if(!this._ws)return;this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError)}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var fw=V0(jY(),1);var eCD=V0(qs(),1),DPD=V0(eL(),1),$PD=V0($M(),1),Ls=V0(xw(),1),XPD=V0(Ns(),1);var Ms=Ls.default;H3();kD();import{homedir as qPD}from"node:os";import{join as UM}from"node:path";import{cwd as zPD,env as BPD}from"node:process";import{chmod as roD,lstat as JPD,mkdir as ooD,readFile as YPD,rename as QPD,rm as FPD,writeFile as ZPD,appendFile as wPD}from"node:fs/promises";import{dirname as GPD,join as UPD}from"node:path";import{randomBytes as OPD}from"node:crypto";async function wM(D){try{if((await JPD(D)).isSymbolicLink())throw Error(`Refusing to access symbolic link path: ${D}`)}catch($){if($.code!=="ENOENT")throw $}}async function Is(D,$,X=384){await wM(D),await wPD(D,$,{mode:X})}async function uw(D,$,X={}){let Y=X.mode??384;await wM(D);let J=UPD(GPD(D),`.capgo-tmp-${OPD(8).toString("hex")}`);try{await ZPD(J,$,{encoding:X.encoding??"utf-8",mode:Y}),await QPD(J,D)}catch(Q){throw await FPD(J,{force:!0}),Q}}async function As(D){return await wM(D),await YPD(D,"utf-8")}var WPD=UM(qPD(),".capgo-credentials"),KPD=UM(WPD,"credentials.json"),HPD=".capgo-credentials.json",g8=3600,Rs=604800;function VPD(D){return D?UM(zPD(),HPD):KPD}function vw(D){let X=D.trim().match(/^(\d+)\s*([smhd])?$/i);if(!X)throw Error("output-retention must be a number with optional unit: s, m, h, d (examples: 1h, 3600s, 2d)");let Y=Number.parseInt(X[1],10),J=(X[2]||"s").toLowerCase(),F=Y*(J==="s"?1:J==="m"?60:J==="h"?3600:86400);if(F<g8)throw Error(`output-retention must be at least ${g8} seconds (1h)`);if(F>Rs)throw Error(`output-retention must be at most ${Rs} seconds (7d)`);return F}function Z7(D){if(D===void 0)return!0;if(typeof D==="boolean")return D;let $=D.trim().toLowerCase();if($==="true"||$==="1"||$==="yes")return!0;if($==="false"||$==="0"||$==="no")return!1;throw Error("output-upload must be true/false (examples: --output-upload, --output-upload false)")}async function GM(D){try{let $=VPD(D),X=await As($);return JSON.parse(X)}catch{return{}}}async function js(D,$){if($!==void 0){let J=await GM($);if(!D){let Q=Object.keys(J);if(Q.length===0)return null;return J[Q[0]]||null}return J[D]||null}let X=await GM(!0),Y=await GM(!1);if(!D){let J=Object.keys(X);if(J.length>0)return X[J[0]]||null;let Q=Object.keys(Y);if(Q.length===0)return null;return Y[Q[0]]||null}return X[D]||Y[D]||null}function c0(D){return BPD[D]}function NPD(){let D={},$=c0("BUILD_CERTIFICATE_BASE64"),X=c0("P12_PASSWORD"),Y=c0("APPLE_KEY_ID"),J=c0("APPLE_ISSUER_ID"),Q=c0("APPLE_KEY_CONTENT"),F=c0("APP_STORE_CONNECT_TEAM_ID"),Z=c0("CAPGO_IOS_SCHEME"),w=c0("CAPGO_IOS_TARGET"),G=c0("CAPGO_IOS_PROVISIONING_MAP"),O=c0("CAPGO_ANDROID_FLAVOR")?.trim()||void 0,z=c0("ANDROID_KEYSTORE_FILE"),q=c0("KEYSTORE_KEY_ALIAS"),B=c0("KEYSTORE_KEY_PASSWORD"),W=c0("KEYSTORE_STORE_PASSWORD"),L=c0("PLAY_CONFIG_JSON"),M=c0("BUILD_OUTPUT_UPLOAD_ENABLED"),I=c0("BUILD_OUTPUT_RETENTION_SECONDS"),K=c0("SKIP_BUILD_NUMBER_BUMP"),N=c0("CAPGO_IOS_DISTRIBUTION");if($)D.BUILD_CERTIFICATE_BASE64=$;if(X)D.P12_PASSWORD=X;if(Y)D.APPLE_KEY_ID=Y;if(J)D.APPLE_ISSUER_ID=J;if(Q)D.APPLE_KEY_CONTENT=Q;if(F)D.APP_STORE_CONNECT_TEAM_ID=F;if(Z)D.CAPGO_IOS_SCHEME=Z;if(w)D.CAPGO_IOS_TARGET=w;if(N)D.CAPGO_IOS_DISTRIBUTION=N;if(G)D.CAPGO_IOS_PROVISIONING_MAP=G;let V=O?.trim();if(V)D.CAPGO_ANDROID_FLAVOR=V;if(z)D.ANDROID_KEYSTORE_FILE=z;if(q)D.KEYSTORE_KEY_ALIAS=q;if(B)D.KEYSTORE_KEY_PASSWORD=B;if(W)D.KEYSTORE_STORE_PASSWORD=W;if(L)D.PLAY_CONFIG_JSON=L;if(M)D.BUILD_OUTPUT_UPLOAD_ENABLED=Z7(M)?"true":"false";if(I)D.BUILD_OUTPUT_RETENTION_SECONDS=String(vw(I));if(K)D.SKIP_BUILD_NUMBER_BUMP=Z7(K)?"true":"false";return D}async function Es(D,$,X){let Y=await js(D),J=NPD(),Q={...Y?.[$]||{}};if(Object.assign(Q,J),X)Object.assign(Q,X);if($==="android"){let F=!!Q.KEYSTORE_KEY_PASSWORD,Z=!!Q.KEYSTORE_STORE_PASSWORD;if(F&&!Z)Q.KEYSTORE_STORE_PASSWORD=Q.KEYSTORE_KEY_PASSWORD;else if(!F&&Z)Q.KEYSTORE_KEY_PASSWORD=Q.KEYSTORE_STORE_PASSWORD}return Object.keys(Q).length>0?Q:void 0}import{existsSync as _s,readFileSync as CPD}from"node:fs";import{resolve as ks}from"node:path";vD();kD();import{readFileSync as LPD}from"node:fs";function qM(D){let $=LPD(D);return MPD($,D)}function MPD(D,$){let J=D.indexOf("<?xml"),Q=J!==-1?D.indexOf("</plist>",J):-1;if(J===-1||Q===-1||Q<=J)throw Error(`No embedded plist found in mobileprovision file: ${$}`);let F=D.slice(J,Q+8).toString("utf-8"),Z=OM(F,"Name");if(!Z)throw Error(`Mobileprovision file missing required 'Name' key: ${$}`);let w=OM(F,"UUID")||"",G=IPD(F,"Entitlements","application-identifier")||"",U=G.indexOf("."),O=U!==-1?G.slice(U+1):G;return{name:Z,uuid:w,applicationIdentifier:G,bundleId:O}}function OM(D,$){let X=new RegExp(`<key>${Ts($)}</key>\\s*<string>([^<]*)</string>`),Y=D.match(X);return Y?Y[1]:null}function IPD(D,$,X){let Y=new RegExp(`<key>${Ts($)}</key>\\s*<dict>([\\s\\S]*?)</dict>`),J=D.match(Y);if(!J)return null;return OM(J[1],X)}function Ts(D){return D.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as Cs,readdirSync as APD,readFileSync as RPD}from"node:fs";import{join as Ss}from"node:path";var jPD=new Set(["com.apple.product-type.application","com.apple.product-type.app-extension","com.apple.product-type.app-extension.messages","com.apple.product-type.app-extension.messages-sticker-pack","com.apple.product-type.application.watchapp2","com.apple.product-type.watchkit2-extension","com.apple.product-type.extensionkit-extension","com.apple.product-type.application.on-demand-install-capable"]);function us(D){if(!D)return[];let $=/\w+\s*\/\*[^*]*\*\/\s*=\s*\{[^}]*isa\s*=\s*PBXNativeTarget;[^}]*\}/g,X=[];for(let Y of D.matchAll($)){let J=Y[0],Q=J.match(/name\s*=\s*("[^"]*"|[^;\s]+)\s*;/),F=J.match(/productType\s*=\s*"([^"]+)"/),Z=J.match(/buildConfigurationList\s*=\s*(\w+)/);if(!Q||!F||!Z)continue;let w=Q[1].replace(/^"|"$/g,""),G=F[1],U=Z[1];if(!jPD.has(G))continue;let O=EPD(D,U);X.push({name:w,bundleId:O,productType:G})}return X}function EPD(D,$){let X=new RegExp(`${xs($)}\\s*\\/\\*[^*]*\\*\\/\\s*=\\s*\\{[^}]*isa\\s*=\\s*XCConfigurationList;[^}]*\\}`),Y=D.match(X);if(!Y)return"";let J=Y[0].match(/buildConfigurations\s*=\s*\(([^)]*)\)/);if(!J)return"";let Q=[...J[1].matchAll(/(\w+)/g)].map((Z)=>Z[1]);if(Q.length===0)return"";let F="";for(let Z of Q){let w=new RegExp(`${xs(Z)}\\s*\\/\\*[^*]*\\*\\/\\s*=\\s*\\{(?:[^{}]*\\{[^}]*\\})*[^}]*\\}`),G=D.match(w);if(!G)continue;let U=G[0],O=U.match(/PRODUCT_BUNDLE_IDENTIFIER\s*=\s*"?([^";\s]+)"?\s*;/);if(!O)continue;let z=U.match(/name\s*=\s*("[^"]*"|[^;\s]+)\s*;/);if((z?z[1].replace(/^"|"$/g,""):"")==="Release")return O[1];if(!F)F=O[1]}return F}function TPD(D){let $=Ss(D,"ios"),X=Ps($);if(X)return X;return Ps(D)}function Ps(D){if(!Cs(D))return null;let $;try{$=APD(D)}catch{return null}for(let X of $)if(X.endsWith(".xcodeproj")){let Y=Ss(D,X,"project.pbxproj");if(Cs(Y))return Y}return null}function vs(D){let $=TPD(D);if(!$)return null;try{return RPD($,"utf-8")}catch{return null}}function xs(D){return D.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function fs(D,$){let X={},Y=[];if($){let J=vs($);if(J)Y=us(J)}for(let J of D){let Q=J.indexOf("="),F,Z;if(Q!==-1){if(F=J.slice(0,Q).trim(),Z=J.slice(Q+1).trim(),!F)throw Error(`Empty bundle ID in provisioning profile entry: "${J}"`);if(!Z)throw Error(`Empty profile path in provisioning profile entry: "${J}"`)}else{if(Z=J.trim(),!Z)throw Error("Empty provisioning profile entry");let z=ks(Z);if(!_s(z))throw Error(`Provisioning profile not found: ${z}`);let q=qM(z);if(Y.find((W)=>W.bundleId===q.bundleId))F=q.bundleId;else if(q.bundleId.endsWith(".*")){let W=Y.find((L)=>L.productType==="com.apple.product-type.application");if(W)F=W.bundleId;else F=q.bundleId}else F=q.bundleId}let w=ks(Z);if(!_s(w))throw Error(`Provisioning profile not found: ${w}`);if(X[F])throw Error(`Duplicate provisioning profile for bundle ID "${F}". Each bundle ID can only have one profile.`);let U=CPD(w).toString("base64"),O=qM(w);X[F]={profile:U,name:O.name}}return X}var ms=Promise.resolve();async function yPD(D,$){let X=async()=>{let J=WM();try{gs(D)}catch(Q){throw Error(`Failed to change working directory to "${D}": ${Q.message}`)}try{return await $()}finally{try{gs(J)}catch{}}},Y=ms.then(X,X);return ms=Y.then(()=>{return},()=>{return}),Y}async function bPD(D,$,X=3,Y=!1){let J=[1000,3000,5000];for(let Q=1;Q<=X;Q++)try{let F=await fetch(D,$);if(F.ok||F.status>=400&&F.status<500)return F;let Z=await F.text().catch(()=>"unknown error");if(!Y)H.warn(`Build request attempt ${Q}/${X} failed: ${F.status} - ${Z}`);if(Q<X){let w=J[Q-1]||5000;if(!Y)H.info(`Retrying in ${w/1000}s...`);await new Promise((G)=>setTimeout(G,w))}else throw Error(`Failed to request build after ${X} attempts: ${F.status} - ${Z}`)}catch(F){let Z=F instanceof Error?F.message:String(F);if(Z.startsWith("Failed to request build after"))throw F;if(!Y)H.warn(`Build request attempt ${Q}/${X} failed: ${Z}`);if(Q<X){let w=J[Q-1]||5000;if(!Y)H.info(`Retrying in ${w/1000}s...`);await new Promise((G)=>setTimeout(G,w))}else throw Error(`Failed to request build after ${X} attempts: ${Z}`)}throw Error("Unexpected error in fetchWithRetry")}var hPD=["succeeded","failed","expired","released","cancelled"],kw=new Set(hPD);async function gPD(D,$=!1,X,Y,J,Q,F){if(D)return null;let Z=null,w=!1,G=(O)=>{if(!O.trim())return;if(Z)return;if(!w)w=!0,console.log("");console.log(O)},U=async()=>{if(!X||!Y)return null;let O=X.replace(/\/+$/,""),z=`${O}/start`,B=`${O}/stream?token=${encodeURIComponent(Y)}`.replace(/^https:/,"wss:").replace(/^http:/,"ws:");if(!D)console.log("Connecting to log streaming...");let W=await fetch(z,{method:"POST",headers:{"x-capgo-log-token":Y}});if(!W.ok){let L=await W.text().catch(()=>"unknown error");if(!D)console.warn(`Could not start log session (${W.status}): ${L}`);return null}return await new Promise((L)=>{let M=!1,I=10,K=0,N=!1,V=new e5(B,void 0,{maxRetries:I,WebSocket:Ms}),R=null,x=0,A=Date.now(),_=!1,v=2000,S=4,h=kw,b=null,l=null,f=(P)=>{if(M)return;if(M=!0,l)clearTimeout(l),l=null;if(R)clearInterval(R),R=null;if(Q&&b)Q.removeEventListener("abort",b),b=null;try{V.close()}catch{}L(P)};if(l=setTimeout(()=>{if(!M){if(!D)console.warn("Log streaming timed out after 3 hours");f(null)}},10800000),(()=>{if(R)return;R=setInterval(async()=>{try{if(V.readyState===e5.OPEN)V.send(JSON.stringify({type:"heartbeat",lastId:x}));let P=Date.now();if(J&&!_&&P-A>=v*S){_=!0;try{let u=await J();if(u&&h.has(u))Z=u,f(Z)}finally{_=!1}}}catch(P){if(!D)H.warn(`Heartbeat encountered an error, continuing... ${String(P)}`)}},v)})(),Q){if(b=()=>{if(!M)f("cancelled")},Q.aborted){f("cancelled");return}Q.addEventListener("abort",b)}V.addEventListener("message",(P)=>{let u="";if(typeof P.data==="string")u=P.data;else if(P.data instanceof ArrayBuffer)u=new TextDecoder().decode(P.data);else if(ArrayBuffer.isView(P.data)){let g=P.data;u=new TextDecoder().decode(new Uint8Array(g.buffer,g.byteOffset,g.byteLength))}else if(P.data&&typeof P.data.toString==="function")u=P.data.toString();let y=null;try{y=JSON.parse(u)}catch{y=null}let c=(g)=>{if(g.type==="status"&&typeof g.status==="string"){let e=g.status.toLowerCase();if(A=Date.now(),h.has(e))Z=e;return}if(g.type==="log"&&typeof g.message==="string"){A=Date.now(),G(g.message);return}if(typeof g.message==="string")A=Date.now(),G(g.message)};if(y?.type==="heartbeat_response")return;if(y?.type==="batch_messages"&&Array.isArray(y.messages)){let g=x;for(let e of y.messages)if(c(e),typeof e.id==="number")g=Math.max(g,e.id);if(g>x){if(x=g,V.readyState===e5.OPEN)try{V.send(JSON.stringify({type:"confirmed_received",lastId:g}))}catch(e){if(!D)H.warn(`Failed to send log confirmation, continuing... ${String(e)}`)}}}else{if(y)c(y);else if(u)A=Date.now(),G(u);if(y&&typeof y.id==="number"){if(x=y.id,V.readyState===e5.OPEN)try{V.send(JSON.stringify({type:"confirmed_received",lastId:y.id}))}catch(g){if(!D)H.warn(`Failed to send log confirmation, continuing... ${String(g)}`)}}}if(Z)f(Z)}),V.addEventListener("error",()=>{if(K+=1,!D)console.warn(`Log stream encountered an error, retrying (${K}/${I})...`);if(!N&&K>=I){if(N=!0,!D)H.warn("Log stream retry limit reached. Falling back to status checks.");if(F)F();f(null)}}),V.addEventListener("close",()=>{if(M)return;if(Z){f(Z);return}if(!D)H.warn("Log stream closed, waiting for reconnect...")})})};try{let O=await U();if(O||Z)return O||Z}catch(O){if(!D)H.warn(`Direct log streaming failed${O instanceof Error?`: ${O.message}`:""}`)}return Z}async function mPD(D,$,X,Y,J,Q,F=!1,Z){let G=0;while(G<120){if(Z?.aborted)return"cancelled";try{let U=await fetch(`${D}/build/status?job_id=${encodeURIComponent($)}&app_id=${encodeURIComponent(X)}&platform=${Y}`,{headers:{authorization:J},signal:Z});if(!U.ok){if(!Q)H.warn(`Status check failed: ${U.status}`);await new Promise((q)=>setTimeout(q,5000)),G++;continue}let O=await U.json(),z=O.status?.toLowerCase?.()??"";if(!Q&&F)H.info(`Build status: ${z||O.status}`);if(kw.has(z))return z;await new Promise((q)=>setTimeout(q,5000)),G++}catch(U){if(Z?.aborted)return"cancelled";if(!Q)H.warn(`Status check error: ${U}`);await new Promise((O)=>setTimeout(O,5000)),G++}}if(!Q)H.warn("Build status polling timed out");return"timeout"}async function cPD(D,$,X){let Y=new Set,J=!1,Q=!1;if($==="ios"){let F=s$(D,X,"App","CapApp-SPM","Package.swift");if(M2(F)){J=!0;let G=(await zM(F,"utf-8")).matchAll(/\.package\s*\([^)]*path:\s*["'](?:\.\.\/)*node_modules\/([^"']+)["']\s*\)/g);for(let U of G){let O=U[1],z=O.lastIndexOf("node_modules/");if(z!==-1)O=O.substring(z+13);Y.add(O)}}let Z=s$(D,X);if(M2(Z)){let w=[s$(Z,"App","Podfile"),s$(Z,"Podfile")];for(let U of ds(Z,{withFileTypes:!0}))if(U.isDirectory())w.push(s$(Z,U.name,"Podfile"));let G=[...new Set(w)].filter((U)=>M2(U));if(G.length>0)Q=!0;for(let U of G){let z=(await zM(U,"utf-8")).matchAll(/pod\s+['"][^'"]+['"],\s*:path\s*=>\s*['"](?:\.\.\/)+node_modules\/([^'"]+)['"]/g);for(let q of z){let B=q[1],W=B.lastIndexOf("node_modules/");if(W!==-1)B=B.substring(W+13);Y.add(B)}}}}else if($==="android"){let F=s$(D,X,"capacitor.settings.gradle");if(M2(F)){let w=(await zM(F,"utf-8")).matchAll(/new\s+File\s*\(\s*['"]\.\.\/node_modules\/([^'"]+)['"]\s*\)/g);for(let G of w){let U=G[1],O=U.lastIndexOf("node_modules/");if(O!==-1)U=U.substring(O+13);let z=U.replace(/\/(android|capacitor)$/,"");Y.add(z)}}}return{packages:Y,usesSPM:J,usesCocoaPods:Q}}function cs(D,$,X,Y){let J=D.replace(/\\/g,"/");if(J.startsWith(`${Y}/`))return!0;if(J==="package.json"||J==="package-lock.json"||J.startsWith("capacitor.config."))return!0;if(J.startsWith("resources/"))return!0;if($==="ios"&&J.startsWith("node_modules/@capacitor/ios/"))return!0;if($==="android"&&J.startsWith("node_modules/@capacitor/android/"))return!0;for(let Q of X.packages){let F=`node_modules/${Q}/`;if(J===`${F}package.json`)return!0;if($==="android"){if(J.startsWith(`${F}android/`))return!0}else if($==="ios"){if(J.startsWith(`${F}ios/`))return!0;if(X.usesSPM){if(J===`${F}Package.swift`)return!0}if(X.usesCocoaPods||!X.usesSPM){if(J.startsWith(F)&&J.endsWith(".podspec"))return!0}}}return!1}function _w(D,$,X,Y,J,Q){let F=ds($);for(let Z of F){let w=s$($,Z),G=X?`${X}/${Z}`:Z,U=SPD(w);if(U.isDirectory()){if(Z===".git"||Z==="dist"||Z==="build"||Z===".angular"||Z===".vite"||Z===".gradle"||Z===".idea"||Z===".swiftpm")continue;if(Z==="node_modules"){_w(D,w,G,Y,J,Q);continue}if(Z==="resources"){_w(D,w,G,Y,J,Q);continue}let O=G.replace(/\\/g,"/");if(cs(G,Y,J,Q)||Q===O||Q.startsWith(`${O}/`)||Array.from(J.packages).some((q)=>{return`node_modules/${q}/`.startsWith(`${O}/`)||O.startsWith(`node_modules/${q}`)}))_w(D,w,G,Y,J,Q)}else if(U.isFile()){if(Z===".DS_Store"||Z.endsWith(".log"))continue;if(cs(G,Y,J,Q))D.addLocalFile(w,X||void 0)}}}async function dPD(D,$,X,Y){let J=L2(Y,X),Q=await cPD(D,X,J),F=new ls.default;_w(F,D,"",X,Q,J);let Z=/node_modules\/\.pnpm\/[^/\n\r]+(?:\/[^/\n\r]+)*\/node_modules\//g,w=new Set(["",".gradle",".swift",".json",".lock",".xml",".properties",".pbxproj",".xcconfig",".plist",".podspec",".rb",".yaml",".yml"]);for(let U of F.getEntries()){if(U.isDirectory)continue;let O=U.entryName.includes(".")?`.${U.entryName.split(".").pop()}`:"",z=U.entryName.split("/").pop()||"";if(!w.has(O)&&z!=="Podfile")continue;let q=U.getData().toString("utf-8"),B=q.replace(Z,"node_modules/");if(X==="ios")B=B.replace(/(?:\.\.\/){4,}(ios\/)/g,"../../../$1");if(B!==q)F.updateFile(U.entryName,ys.from(B,"utf-8"))}let G=s$(D,"capacitor.config.json");if(Y&&!M2(G)){let U=`${JSON.stringify(Y,null,2)}
|
|
464
|
+
`;F.addFile("capacitor.config.json",ys.from(U,"utf-8"))}await kPD($,F.toBuffer())}var lPD=new Set(["CAPGO_IOS_SCHEME","CAPGO_IOS_TARGET","CAPGO_IOS_DISTRIBUTION","BUILD_OUTPUT_UPLOAD_ENABLED","BUILD_OUTPUT_RETENTION_SECONDS","SKIP_BUILD_NUMBER_BUMP","CAPGO_IOS_SOURCE_DIR","CAPGO_IOS_APP_DIR","CAPGO_IOS_PROJECT_DIR","IOS_PROJECT_DIR","CAPGO_ANDROID_SOURCE_DIR","CAPGO_ANDROID_APP_DIR","CAPGO_ANDROID_PROJECT_DIR","ANDROID_PROJECT_DIR","CAPGO_ANDROID_FLAVOR"]);function nPD(D,$,X,Y){let J={platform:$,buildMode:X,cliVersion:Y,iosScheme:D.CAPGO_IOS_SCHEME,iosTarget:D.CAPGO_IOS_TARGET,iosDistribution:D.CAPGO_IOS_DISTRIBUTION,iosSourceDir:D.CAPGO_IOS_SOURCE_DIR,iosAppDir:D.CAPGO_IOS_APP_DIR,iosProjectDir:D.CAPGO_IOS_PROJECT_DIR,androidSourceDir:D.CAPGO_ANDROID_SOURCE_DIR,androidAppDir:D.CAPGO_ANDROID_APP_DIR,androidProjectDir:D.CAPGO_ANDROID_PROJECT_DIR,androidFlavor:D.CAPGO_ANDROID_FLAVOR,outputUploadEnabled:D.BUILD_OUTPUT_UPLOAD_ENABLED==="true",outputRetentionSeconds:D.BUILD_OUTPUT_RETENTION_SECONDS?Number.parseInt(D.BUILD_OUTPUT_RETENTION_SECONDS,10)||g8:g8,skipBuildNumberBump:D.SKIP_BUILD_NUMBER_BUMP==="true"},Q={};for(let[F,Z]of Object.entries(D))if(!lPD.has(F)&&Z!==void 0)Q[F]=Z;return{buildOptions:J,buildCredentials:Q}}async function ns(D,$,X=!1){let Y=Date.now(),J=$.verbose??!1;try{$.apikey=$.apikey||BD(X);let Q=hs($.path||WM()),F=await yPD(Q,()=>ID());if(D=D||F?.config?.appId,!D)throw Error("Missing argument, you need to provide a appId, or be in a capacitor project");if(!$.platform)throw Error("Missing required argument: --platform <ios|android>");if($.platform!=="ios"&&$.platform!=="android")throw Error(`Invalid platform "${$.platform}". Must be "ios" or "android"`);let Z=$.supaHost||"https://api.capgo.app",w=await jD($.apikey,$.supaHost,$.supaAnon);await xD(w,$.apikey,["write","all"]);let G=await l0(w,D);if(!X)H.info(`Requesting native build for ${D}`),H.info(`Platform: ${$.platform}`),H.info(`Project: ${Q}`),H.info(`
|
|
465
465
|
\uD83D\uDD12 Security: Credentials are never stored on Capgo servers`),H.info(" They are used only during build and deleted after"),H.info(` Build outputs can optionally be uploaded for time-limited download links
|
|
466
|
-
`);if(J)H.info(`API host: ${Z}`);let U={};if($.buildCertificateBase64)U.BUILD_CERTIFICATE_BASE64=$.buildCertificateBase64;if($.p12Password)U.P12_PASSWORD=$.p12Password;if($.appleKeyId)U.APPLE_KEY_ID=$.appleKeyId;if($.appleIssuerId)U.APPLE_ISSUER_ID=$.appleIssuerId;if($.appleKeyContent)U.APPLE_KEY_CONTENT=$.appleKeyContent;if($.appStoreConnectTeamId)U.APP_STORE_CONNECT_TEAM_ID=$.appStoreConnectTeamId;if($.iosScheme)U.CAPGO_IOS_SCHEME=$.iosScheme;if($.iosTarget)U.CAPGO_IOS_TARGET=$.iosTarget;if($.iosDistribution)U.CAPGO_IOS_DISTRIBUTION=$.iosDistribution;if($.iosProvisioningProfile&&$.iosProvisioningProfile.length>0){let A=fs($.iosProvisioningProfile,hs($.path||WM()));U.CAPGO_IOS_PROVISIONING_MAP=JSON.stringify(A)}if($.iosProvisioningMap)U.CAPGO_IOS_PROVISIONING_MAP=$.iosProvisioningMap;if($.androidKeystoreFile)U.ANDROID_KEYSTORE_FILE=$.androidKeystoreFile;if($.keystoreKeyAlias)U.KEYSTORE_KEY_ALIAS=$.keystoreKeyAlias;let O=!!$.keystoreKeyPassword,z=!!$.keystoreStorePassword;if(O&&!z)U.KEYSTORE_KEY_PASSWORD=$.keystoreKeyPassword,U.KEYSTORE_STORE_PASSWORD=$.keystoreKeyPassword;else if(!O&&z)U.KEYSTORE_KEY_PASSWORD=$.keystoreStorePassword,U.KEYSTORE_STORE_PASSWORD=$.keystoreStorePassword;else if(O&&z)U.KEYSTORE_KEY_PASSWORD=$.keystoreKeyPassword,U.KEYSTORE_STORE_PASSWORD=$.keystoreStorePassword;if($.playConfigJson)U.PLAY_CONFIG_JSON=$.playConfigJson;if($.outputUpload!==void 0)U.BUILD_OUTPUT_UPLOAD_ENABLED=Z7($.outputUpload)?"true":"false";if($.outputRetention)U.BUILD_OUTPUT_RETENTION_SECONDS=String(vw($.outputRetention));if($.skipBuildNumberBump!==void 0)U.SKIP_BUILD_NUMBER_BUMP=Z7($.skipBuildNumberBump)?"true":"false";let q=await Es(D,$.platform,Object.keys(U).length>0?U:void 0),B=L2(F?.config,$.platform);if(q&&B)if($.platform==="ios")q.CAPGO_IOS_SOURCE_DIR=B,q.CAPGO_IOS_APP_DIR=B,q.CAPGO_IOS_PROJECT_DIR=B,q.IOS_PROJECT_DIR=B;else q.CAPGO_ANDROID_SOURCE_DIR=B,q.CAPGO_ANDROID_APP_DIR=B,q.CAPGO_ANDROID_PROJECT_DIR=B,q.ANDROID_PROJECT_DIR=B;if(!q){if(!X)H.error("❌ No credentials found for this app and platform"),H.error(""),H.error("You must provide credentials via:"),H.error(" 1. CLI arguments (--apple-key-id, --p12-password, etc.)"),H.error(" 2. Environment variables (APPLE_KEY_ID, P12_PASSWORD, etc.)"),H.error(" 3. Saved credentials file:"),H.error(` npx @capgo/cli build credentials save --appId ${D} --platform ${$.platform}`),H.error(""),H.error("Documentation:"),H.error(" https://capgo.app/docs/cli/cloud-build/credentials/");throw Error("No credentials found. Please provide credentials before building.")}let W=[];if($.platform==="ios"){let A=q.CAPGO_IOS_DISTRIBUTION,_=["app_store","ad_hoc"];if(A&&!_.includes(A))W.push(`Invalid CAPGO_IOS_DISTRIBUTION value: '${A}'. Must be one of: ${_.join(", ")}`);let v=A&&_.includes(A)?A:"app_store";if(!A&&!X)H.info("ℹ️ --ios-distribution not specified, defaulting to app_store");if(q.CAPGO_IOS_DISTRIBUTION=v,!q.BUILD_CERTIFICATE_BASE64)W.push("BUILD_CERTIFICATE_BASE64 (or --build-certificate-base64)");if(!q.P12_PASSWORD&&!X)H.warn("⚠️ P12_PASSWORD not provided - assuming certificate has no password"),H.warn(" If your certificate requires a password, provide it with --p12-password");if(!!(q.BUILD_PROVISION_PROFILE_BASE64||q.APPLE_PROFILE_NAME)&&!q.CAPGO_IOS_PROVISIONING_MAP){if(!X)H.error("❌ Legacy provisioning profile format detected. Run:"),H.error(" npx @capgo/cli build credentials migrate --platform ios"),H.error(""),H.error(" This will convert your existing provisioning profile to the new multi-target format.");throw Error("Legacy provisioning profile format detected. Run: npx @capgo/cli build credentials migrate --platform ios")}if(!q.CAPGO_IOS_PROVISIONING_MAP)W.push('CAPGO_IOS_PROVISIONING_MAP (use --ios-provisioning-profile or save via "build credentials save")');if(v==="app_store"){let h=!!q.APPLE_KEY_ID,b=!!q.APPLE_ISSUER_ID,l=!!q.APPLE_KEY_CONTENT,f=h||b||l;if(!(h&&b&&l)){if(f){let P=[];if(!h)P.push("APPLE_KEY_ID (or --apple-key-id)");if(!b)P.push("APPLE_ISSUER_ID (or --apple-issuer-id)");if(!l)P.push("APPLE_KEY_CONTENT (or --apple-key-content)");W.push(`Incomplete App Store Connect API key - missing: ${P.join(", ")}`)}else if(q.BUILD_OUTPUT_UPLOAD_ENABLED!=="true")W.push("APPLE_KEY_ID/APPLE_ISSUER_ID/APPLE_KEY_CONTENT or BUILD_OUTPUT_UPLOAD_ENABLED=true (or --output-upload) (build has no output destination - enable either TestFlight upload or Capgo download link)");else if(q.SKIP_BUILD_NUMBER_BUMP!=="true")W.push("APPLE_KEY_ID/APPLE_ISSUER_ID/APPLE_KEY_CONTENT or --skip-build-number-bump (App Store Connect API key not provided - build numbers cannot be auto-incremented without it)");else if(!X)H.warn("⚠️ App Store Connect API key not provided - build will succeed but cannot auto-upload to TestFlight")}}else if(v==="ad_hoc"){if(!X)H.info("\uD83D\uDCE6 Ad-hoc distribution mode: App Store Connect API key not required"),H.info(" Build number will use timestamp-based fallback")}if(!q.APP_STORE_CONNECT_TEAM_ID)W.push("APP_STORE_CONNECT_TEAM_ID (or --app-store-connect-team-id)")}else if($.platform==="android"){if(!q.ANDROID_KEYSTORE_FILE)W.push("ANDROID_KEYSTORE_FILE (or --android-keystore-file)");if(!q.KEYSTORE_KEY_ALIAS)W.push("KEYSTORE_KEY_ALIAS (or --keystore-key-alias)");if(!q.KEYSTORE_KEY_PASSWORD&&!q.KEYSTORE_STORE_PASSWORD)W.push("KEYSTORE_KEY_PASSWORD or KEYSTORE_STORE_PASSWORD (at least one password required)");if(!q.PLAY_CONFIG_JSON){if(q.BUILD_OUTPUT_UPLOAD_ENABLED!=="true")W.push("PLAY_CONFIG_JSON or BUILD_OUTPUT_UPLOAD_ENABLED=true (build has no output destination - enable either Play Store upload or Capgo download link)");else if(!X)H.warn("⚠️ PLAY_CONFIG_JSON not provided - build will succeed but cannot auto-upload to Play Store")}}if(W.length>0){if(!X){H.error(`❌ Missing required credentials for ${$.platform}:`),H.error("");for(let A of W)H.error(` • ${A}`);H.error(""),H.error("Provide credentials via:"),H.error(' 1. CLI arguments: npx @capgo/cli build request --platform ios --apple-id "..." --p12-password "..."'),H.error(' 2. Environment variables: export APPLE_ID="..." P12_PASSWORD="..."'),H.error(" 3. Saved credentials: npx @capgo/cli build credentials save --platform ios ..."),H.error(""),H.error("Documentation:"),H.error(` https://capgo.app/docs/cli/cloud-build/${$.platform}/`)}throw Error(`Missing required credentials for ${$.platform}: ${W.join(", ")}`)}if(!X){if(!q.BUILD_OUTPUT_UPLOAD_ENABLED)H.info("ℹ️ --output-upload not specified, defaulting to false (no Capgo download link)");if(!q.BUILD_OUTPUT_RETENTION_SECONDS)H.info(`ℹ️ --output-retention not specified, defaulting to ${g8}s (1 hour)`);if(!q.SKIP_BUILD_NUMBER_BUMP)H.info("ℹ️ --skip-build-number-bump not specified, build number will be auto-incremented (default)")}let{buildOptions:L,buildCredentials:M}=nPD(q,$.platform,$.buildMode||"release",H$.version),I={app_id:D,platform:$.platform,build_mode:$.buildMode||"release",build_options:L,build_credentials:M};if(!X)H.info("✓ Using credentials (merged from CLI args, env vars, and saved file)");if(J){let A=Object.keys(M);H.info(`Credentials provided: ${A.join(", ")}`),H.info(`Build options: platform=${L.platform}, mode=${L.buildMode}, cliVersion=${L.cliVersion}`)}if(!X)H.info("Requesting build from Capgo...");let K=3,N=await bPD(`${Z}/build/request`,{method:"POST",headers:{"Content-Type":"application/json",authorization:$.apikey},body:JSON.stringify(I)},K,X);if(!N.ok){let A=await N.text();throw Error(`Failed to request build: ${N.status} - ${A}`)}let V=await N.json();if(!X)H.success(`Build job created: ${V.job_id}`),H.info(`Status: ${V.status}`);if(J)H.info(`Upload URL: ${V.upload_url}`),H.info(`Upload expires: ${V.upload_expires_at}`);await AD($.apikey,{channel:"native-builder",event:"Build requested",icon:"\uD83C\uDFD7️",user_id:G,tags:{"app-id":D,platform:$.platform},notify:!1}).catch();let R=s$(fPD(),`capgo-build-${Date.now()}`);await uPD(R,{recursive:!0});let x=s$(R,`${bs(Q)}.zip`);try{if(!X)H.info(`Zipping ${$.platform} project from ${Q}...`);await dPD(Q,x,$.platform,F?.config);let _=((await _PD(x)).size/1024/1024).toFixed(2);if(!X)H.success(`Created zip: ${x} (${_} MB)`);if(!X)H.info("Uploading to builder...");if(J)H.info(`Upload endpoint: ${V.upload_url}`),H.info(`File size: ${_} MB`),H.info(`Job ID: ${V.job_id}`);let v=xPD(x),S=A0();if(!X)S.start("Uploading bundle");if(await new Promise((d,r)=>{let YD=new fw.Upload(v,{endpoint:V.upload_url,chunkSize:5242880,metadata:{filename:bs(x),filetype:"application/zip"},headers:{authorization:$.apikey},onBeforeRequest(C){if(J){H.info(`[TUS] ${C.getMethod()} ${C.getURL()}`);let E=C.getHeader("authorization");H.info(`[TUS] Authorization header present: ${!!E}`)}},onAfterResponse(C,E){if(J){H.info(`[TUS] Response status: ${E.getStatus()}`);let p=E.getHeader("upload-offset"),k=E.getHeader("tus-resumable");H.info(`[TUS] Upload-Offset: ${p}, Tus-Resumable: ${k}`)}},onError(C){if(!X)S.stop("Upload failed"),H.error(`Upload error: ${C.message}`);if(C instanceof fw.DetailedError){let E=C.originalResponse?.getBody(),p=C.originalResponse?.getStatus(),k=C.originalRequest?.getURL();if(J)H.error(`[TUS] Request URL: ${k}`),H.error(`[TUS] Response status: ${p}`),H.error(`[TUS] Response body: ${E}`);let zD="Unknown error";try{let a=JSON.parse(E||'{"error": "unknown error"}');zD=a.status||a.error||a.message||"unknown error"}catch{zD=E||C.message}r(Error(`TUS upload failed: ${zD}`))}else r(Error(`TUS upload failed: ${C.message||C.toString()}`))},onProgress(C,E){let p=(C/E*100).toFixed(2);if(!X)S.message(`Uploading ${p}%`)},onSuccess(){if(!X)S.stop("Upload complete!");if(J)H.success("TUS upload completed successfully");d()}});if(J)H.info("[TUS] Starting upload...");YD.start()}),!X)H.info("Starting build job...");let h=await fetch(`${Z}/build/start/${V.job_id}`,{method:"POST",headers:{"Content-Type":"application/json",authorization:$.apikey},body:JSON.stringify({app_id:D})});if(!h.ok){let d=await h.text();throw Error(`Failed to start build: ${h.status} - ${d}`)}let b=await h.json();if(!X)H.success("Build started!"),H.info("Streaming build logs...");let l=new AbortController,f=!1,j=async()=>{if(f)return;f=!0;let d=new AbortController,r=setTimeout(()=>d.abort(),4000);try{await fetch(`${Z}/build/cancel/${V.job_id}`,{method:"POST",headers:{"Content-Type":"application/json",authorization:$.apikey},body:JSON.stringify({app_id:D}),signal:d.signal})}catch{}finally{clearTimeout(r)}},P=async()=>{try{if(f)BM.exit(1);if(!X)H.warn("Canceling build... (press Ctrl+C again to force quit)");await j(),l.abort()}catch{}};BM.on("SIGINT",P);let u,y=!1,c=async()=>{try{let d=await fetch(`${Z}/build/status?job_id=${encodeURIComponent(V.job_id)}&app_id=${encodeURIComponent(D)}&platform=${$.platform}`,{headers:{authorization:$.apikey}});if(!d.ok)return null;let r=await d.json(),YD=r.status?.toLowerCase?.()??"";if(!X&&y)H.info(`Build status: ${YD||r.status}`);if(kw.has(YD))return YD;return null}catch{return null}},g=null;try{g=await gPD(X,J,b.logs_url,b.logs_token,c,l.signal,()=>{y=!0})}finally{BM.removeListener("SIGINT",P)}if(g){if(u=g,kw.has(g))await c().catch(()=>{})}else u=await mPD(Z,V.job_id,D,$.platform,$.apikey,X,y,l.signal);if(!X)if(u==="succeeded")H.success("Build completed successfully!");else if(u==="failed")H.error("Build failed");else H.warn(`Build finished with status: ${u}`);let e=((Date.now()-Y)/1000).toFixed(2);return await AD($.apikey,{channel:"native-builder",event:u==="succeeded"?"Build succeeded":"Build failed",icon:u==="succeeded"?"✅":"❌",user_id:G,tags:{"app-id":D,platform:$.platform,status:u||"unknown",time:e},notify:!1}).catch(),{success:u==="succeeded",jobId:V.job_id,uploadUrl:V.upload_url,status:u||b.status||V.status}}finally{await vPD(R,{recursive:!0,force:!0})}}catch(Q){let F=Q instanceof Error?Q.message:String(Q);if(!X)H.error(F);return{success:!1,error:F}}}vD();X6();O1();kD();async function iPD(D,$,X,Y){for await(let J of D){if(!Y)H.warn(`Removing ${J.name} created on ${t5(J.created_at)}`);await Kw($,X,J.name)}}function pPD(D,$,X){let Y=[];for(let J of D??[]){let Q=eD(J.name);if(hG(Q,$)&&x4(Q,X))Y.push(J)}return Y}async function is(D,$,X=!1){if(!X)VD("Cleanup versions in Capgo");await Z0(),$.apikey=$.apikey||BD();let{bundle:Y,keep:J=4}=$,Q=$.force||!1,F=$.ignoreChannel||!1,Z=await ID();if(D=mD(D,Z?.config),!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to delete your app");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide a appid, or be in a capacitor project");throw Error("Missing appId")}let w=await jD($.apikey,$.supaHost,$.supaAnon);if(await m0(w,D,X),await xD(w,$.apikey,["write","all"]),await u0(w,$.apikey,D,3,X,!0),!X)H.info("Querying all available versions in Capgo");let G=await Hw(w,D),U=await Xt(w,D);if(!X)H.info(`Total active versions in Capgo: ${G?.length??0}`);if(!G?.length){if(!X)H.error("No versions found, aborting cleanup");throw Error("No versions found")}if(Y){let q=eD(Y),B=E7(q,"major");if(!X)H.info(`Querying available versions in Capgo between ${q$(q)} and ${q$(B)}`);if(G=pPD(G,q,B),!X)H.info(`Active versions in Capgo between ${q$(q)} and ${q$(B)}: ${G?.length??0}`)}let O=[],z=0;for(let q of G){let B=U.find((W)=>W===q.id);if(z<J||B&&!F)q.keep=B?"✅ (Linked to channel)":"✅",z+=1;else q.keep="❌",O.push(q)}if(!O.length){if(!X)H.warn("Nothing to be removed, aborting removal...");return{removed:0,kept:z}}if(!X)$t(G);if(!Q)if(!X){let q=await c0({message:"Do you want to continue removing the versions specified?"});if(bD(q)||!q)throw H.warn("Not confirmed, aborting removal..."),Error("Cleanup cancelled by user")}else throw Error("Cleanup requires force=true in SDK mode to prevent accidental deletions");if(!X)H.success("You have confirmed removal, removing versions now");if(await iPD(O,w,D,X),!X)ND("Done ✅");return{removed:O.length,kept:z}}vD();D6();kD();async function ps(D,$,X=!1){if(!X)VD("Check compatibility");let Y={...$,apikey:$.apikey||BD()},J=D?void 0:await ID(),Q=mD(D,J?.config),F=Y.channel;if(!F){if(!X)H.error("Missing argument, you need to provide a channel");throw Error("Missing channel")}if(!Y.apikey){if(!X)H.error("Missing API key, you need to provide an API key to access Capgo Cloud metadata");throw Error("Missing API key")}if(!Q){if(!X)H.error("Missing argument, you need to provide an appId, or be in a capacitor project");throw Error("Missing appId")}let Z=await jD(Y.apikey,Y.supaHost,Y.supaAnon);await m0(Z,Q,X),await xD(Z,Y.apikey,["write","all","read","upload"]),await u0(Z,Y.apikey,Q,1,X,!0);let w=await Ww(Z,Q,F,Y.packageJson,Y.nodeModules),G=w.finalCompatibility.some((U)=>!L4(U));if(!X){let U=new R0;U.headers=["Package","Local","Remote","Status","Details"],U.theme=R0.roundTheme,U.rows=[];let O=Y.text?"OK":"✅",z=Y.text?"FAIL":"❌";for(let q of w.finalCompatibility){let{name:B,localVersion:W,remoteVersion:L}=q,M=_8(q),I=M.compatible?O:z;U.rows.push([B,W||"-",L||"-",I,M.message])}if(H.success("Compatibility Check Results"),H.info(U.toString()),G){let q=w.finalCompatibility.filter((B)=>!L4(B)).length;H.warn(`
|
|
466
|
+
`);if(J)H.info(`API host: ${Z}`);let U={};if($.buildCertificateBase64)U.BUILD_CERTIFICATE_BASE64=$.buildCertificateBase64;if($.p12Password)U.P12_PASSWORD=$.p12Password;if($.appleKeyId)U.APPLE_KEY_ID=$.appleKeyId;if($.appleIssuerId)U.APPLE_ISSUER_ID=$.appleIssuerId;if($.appleKeyContent)U.APPLE_KEY_CONTENT=$.appleKeyContent;if($.appStoreConnectTeamId)U.APP_STORE_CONNECT_TEAM_ID=$.appStoreConnectTeamId;if($.iosScheme)U.CAPGO_IOS_SCHEME=$.iosScheme;if($.iosTarget)U.CAPGO_IOS_TARGET=$.iosTarget;if($.iosDistribution)U.CAPGO_IOS_DISTRIBUTION=$.iosDistribution;if($.iosProvisioningProfile&&$.iosProvisioningProfile.length>0){let A=fs($.iosProvisioningProfile,hs($.path||WM()));U.CAPGO_IOS_PROVISIONING_MAP=JSON.stringify(A)}if($.iosProvisioningMap)U.CAPGO_IOS_PROVISIONING_MAP=$.iosProvisioningMap;if($.androidKeystoreFile)U.ANDROID_KEYSTORE_FILE=$.androidKeystoreFile;if($.keystoreKeyAlias)U.KEYSTORE_KEY_ALIAS=$.keystoreKeyAlias;let O=!!$.keystoreKeyPassword,z=!!$.keystoreStorePassword;if(O&&!z)U.KEYSTORE_KEY_PASSWORD=$.keystoreKeyPassword,U.KEYSTORE_STORE_PASSWORD=$.keystoreKeyPassword;else if(!O&&z)U.KEYSTORE_KEY_PASSWORD=$.keystoreStorePassword,U.KEYSTORE_STORE_PASSWORD=$.keystoreStorePassword;else if(O&&z)U.KEYSTORE_KEY_PASSWORD=$.keystoreKeyPassword,U.KEYSTORE_STORE_PASSWORD=$.keystoreStorePassword;if(typeof $.androidFlavor==="string"){let A=$.androidFlavor.trim();if(A)U.CAPGO_ANDROID_FLAVOR=A}if($.playConfigJson)U.PLAY_CONFIG_JSON=$.playConfigJson;if($.outputUpload!==void 0)U.BUILD_OUTPUT_UPLOAD_ENABLED=Z7($.outputUpload)?"true":"false";if($.outputRetention)U.BUILD_OUTPUT_RETENTION_SECONDS=String(vw($.outputRetention));if($.skipBuildNumberBump!==void 0)U.SKIP_BUILD_NUMBER_BUMP=Z7($.skipBuildNumberBump)?"true":"false";let q=await Es(D,$.platform,Object.keys(U).length>0?U:void 0);if($.playstoreUpload===!1&&q){if(delete q.PLAY_CONFIG_JSON,!X)H.info("ℹ️ --no-playstore-upload specified, Play Store upload disabled for this build")}let B=L2(F?.config,$.platform);if(q&&B)if($.platform==="ios")q.CAPGO_IOS_SOURCE_DIR=B,q.CAPGO_IOS_APP_DIR=B,q.CAPGO_IOS_PROJECT_DIR=B,q.IOS_PROJECT_DIR=B;else q.CAPGO_ANDROID_SOURCE_DIR=B,q.CAPGO_ANDROID_APP_DIR=B,q.CAPGO_ANDROID_PROJECT_DIR=B,q.ANDROID_PROJECT_DIR=B;if(!q){if(!X)H.error("❌ No credentials found for this app and platform"),H.error(""),H.error("You must provide credentials via:"),H.error(" 1. CLI arguments (--apple-key-id, --p12-password, etc.)"),H.error(" 2. Environment variables (APPLE_KEY_ID, P12_PASSWORD, etc.)"),H.error(" 3. Saved credentials file:"),H.error(` npx @capgo/cli build credentials save --appId ${D} --platform ${$.platform}`),H.error(""),H.error("Documentation:"),H.error(" https://capgo.app/docs/cli/cloud-build/credentials/");throw Error("No credentials found. Please provide credentials before building.")}let W=[];if($.platform==="ios"){let A=q.CAPGO_IOS_DISTRIBUTION,_=["app_store","ad_hoc"];if(A&&!_.includes(A))W.push(`Invalid CAPGO_IOS_DISTRIBUTION value: '${A}'. Must be one of: ${_.join(", ")}`);let v=A&&_.includes(A)?A:"app_store";if(!A&&!X)H.info("ℹ️ --ios-distribution not specified, defaulting to app_store");if(q.CAPGO_IOS_DISTRIBUTION=v,!q.BUILD_CERTIFICATE_BASE64)W.push("BUILD_CERTIFICATE_BASE64 (or --build-certificate-base64)");if(!q.P12_PASSWORD&&!X)H.warn("⚠️ P12_PASSWORD not provided - assuming certificate has no password"),H.warn(" If your certificate requires a password, provide it with --p12-password");if(!!(q.BUILD_PROVISION_PROFILE_BASE64||q.APPLE_PROFILE_NAME)&&!q.CAPGO_IOS_PROVISIONING_MAP){if(!X)H.error("❌ Legacy provisioning profile format detected. Run:"),H.error(" npx @capgo/cli build credentials migrate --platform ios"),H.error(""),H.error(" This will convert your existing provisioning profile to the new multi-target format.");throw Error("Legacy provisioning profile format detected. Run: npx @capgo/cli build credentials migrate --platform ios")}if(!q.CAPGO_IOS_PROVISIONING_MAP)W.push('CAPGO_IOS_PROVISIONING_MAP (use --ios-provisioning-profile or save via "build credentials save")');if(v==="app_store"){let h=!!q.APPLE_KEY_ID,b=!!q.APPLE_ISSUER_ID,l=!!q.APPLE_KEY_CONTENT,f=h||b||l;if(!(h&&b&&l)){if(f){let P=[];if(!h)P.push("APPLE_KEY_ID (or --apple-key-id)");if(!b)P.push("APPLE_ISSUER_ID (or --apple-issuer-id)");if(!l)P.push("APPLE_KEY_CONTENT (or --apple-key-content)");W.push(`Incomplete App Store Connect API key - missing: ${P.join(", ")}`)}else if(q.BUILD_OUTPUT_UPLOAD_ENABLED!=="true")W.push("APPLE_KEY_ID/APPLE_ISSUER_ID/APPLE_KEY_CONTENT or BUILD_OUTPUT_UPLOAD_ENABLED=true (or --output-upload) (build has no output destination - enable either TestFlight upload or Capgo download link)");else if(q.SKIP_BUILD_NUMBER_BUMP!=="true")W.push("APPLE_KEY_ID/APPLE_ISSUER_ID/APPLE_KEY_CONTENT or --skip-build-number-bump (App Store Connect API key not provided - build numbers cannot be auto-incremented without it)");else if(!X)H.warn("⚠️ App Store Connect API key not provided - build will succeed but cannot auto-upload to TestFlight")}}else if(v==="ad_hoc"){if(!X)H.info("\uD83D\uDCE6 Ad-hoc distribution mode: App Store Connect API key not required"),H.info(" Build number will use timestamp-based fallback")}if(!q.APP_STORE_CONNECT_TEAM_ID)W.push("APP_STORE_CONNECT_TEAM_ID (or --app-store-connect-team-id)")}else if($.platform==="android"){if(!q.ANDROID_KEYSTORE_FILE)W.push("ANDROID_KEYSTORE_FILE (or --android-keystore-file)");if(!q.KEYSTORE_KEY_ALIAS)W.push("KEYSTORE_KEY_ALIAS (or --keystore-key-alias)");if(!q.KEYSTORE_KEY_PASSWORD&&!q.KEYSTORE_STORE_PASSWORD)W.push("KEYSTORE_KEY_PASSWORD or KEYSTORE_STORE_PASSWORD (at least one password required)");if(!q.PLAY_CONFIG_JSON){if(q.BUILD_OUTPUT_UPLOAD_ENABLED!=="true")W.push("PLAY_CONFIG_JSON or BUILD_OUTPUT_UPLOAD_ENABLED=true (build has no output destination - enable either Play Store upload or Capgo download link)");else if(!X)H.warn("⚠️ PLAY_CONFIG_JSON not provided - build will succeed but cannot auto-upload to Play Store")}}if(W.length>0){if(!X){H.error(`❌ Missing required credentials for ${$.platform}:`),H.error("");for(let A of W)H.error(` • ${A}`);H.error(""),H.error("Provide credentials via:"),H.error(' 1. CLI arguments: npx @capgo/cli build request --platform ios --apple-id "..." --p12-password "..."'),H.error(' 2. Environment variables: export APPLE_ID="..." P12_PASSWORD="..."'),H.error(" 3. Saved credentials: npx @capgo/cli build credentials save --platform ios ..."),H.error(""),H.error("Documentation:"),H.error(` https://capgo.app/docs/cli/cloud-build/${$.platform}/`)}throw Error(`Missing required credentials for ${$.platform}: ${W.join(", ")}`)}if(!X){if(!$.buildMode)H.info("ℹ️ --build-mode not specified, defaulting to release");if(!q.BUILD_OUTPUT_UPLOAD_ENABLED)H.info("ℹ️ --output-upload not specified, defaulting to false (no Capgo download link)");if(!q.BUILD_OUTPUT_RETENTION_SECONDS)H.info(`ℹ️ --output-retention not specified, defaulting to ${g8}s (1 hour)`);if(!q.SKIP_BUILD_NUMBER_BUMP)H.info("ℹ️ --skip-build-number-bump not specified, build number will be auto-incremented (default)")}let{buildOptions:L,buildCredentials:M}=nPD(q,$.platform,$.buildMode||"release",H$.version),I={app_id:D,platform:$.platform,build_mode:$.buildMode||"release",build_options:L,build_credentials:M};if(!X)H.info("✓ Using credentials (merged from CLI args, env vars, and saved file)");if(J){let A=Object.keys(M);H.info(`Credentials provided: ${A.join(", ")}`),H.info(`Build options: platform=${L.platform}, mode=${L.buildMode}, cliVersion=${L.cliVersion}`)}if(!X)H.info("Requesting build from Capgo...");let K=3,N=await bPD(`${Z}/build/request`,{method:"POST",headers:{"Content-Type":"application/json",authorization:$.apikey},body:JSON.stringify(I)},K,X);if(!N.ok){let A=await N.text();throw Error(`Failed to request build: ${N.status} - ${A}`)}let V=await N.json();if(!X)H.success(`Build job created: ${V.job_id}`),H.info(`Status: ${V.status}`);if(J)H.info(`Upload URL: ${V.upload_url}`),H.info(`Upload expires: ${V.upload_expires_at}`);await AD($.apikey,{channel:"native-builder",event:"Build requested",icon:"\uD83C\uDFD7️",user_id:G,tags:{"app-id":D,platform:$.platform},notify:!1}).catch();let R=s$(fPD(),`capgo-build-${Date.now()}`);await uPD(R,{recursive:!0});let x=s$(R,`${bs(Q)}.zip`);try{if(!X)H.info(`Zipping ${$.platform} project from ${Q}...`);await dPD(Q,x,$.platform,F?.config);let _=((await _PD(x)).size/1024/1024).toFixed(2);if(!X)H.success(`Created zip: ${x} (${_} MB)`);if(!X)H.info("Uploading to builder...");if(J)H.info(`Upload endpoint: ${V.upload_url}`),H.info(`File size: ${_} MB`),H.info(`Job ID: ${V.job_id}`);let v=xPD(x),S=A0();if(!X)S.start("Uploading bundle");if(await new Promise((d,r)=>{let YD=new fw.Upload(v,{endpoint:V.upload_url,chunkSize:5242880,metadata:{filename:bs(x),filetype:"application/zip"},headers:{authorization:$.apikey},onBeforeRequest(C){if(J){H.info(`[TUS] ${C.getMethod()} ${C.getURL()}`);let E=C.getHeader("authorization");H.info(`[TUS] Authorization header present: ${!!E}`)}},onAfterResponse(C,E){if(J){H.info(`[TUS] Response status: ${E.getStatus()}`);let p=E.getHeader("upload-offset"),k=E.getHeader("tus-resumable");H.info(`[TUS] Upload-Offset: ${p}, Tus-Resumable: ${k}`)}},onError(C){if(!X)S.stop("Upload failed"),H.error(`Upload error: ${C.message}`);if(C instanceof fw.DetailedError){let E=C.originalResponse?.getBody(),p=C.originalResponse?.getStatus(),k=C.originalRequest?.getURL();if(J)H.error(`[TUS] Request URL: ${k}`),H.error(`[TUS] Response status: ${p}`),H.error(`[TUS] Response body: ${E}`);let zD="Unknown error";try{let a=JSON.parse(E||'{"error": "unknown error"}');zD=a.status||a.error||a.message||"unknown error"}catch{zD=E||C.message}r(Error(`TUS upload failed: ${zD}`))}else r(Error(`TUS upload failed: ${C.message||C.toString()}`))},onProgress(C,E){let p=(C/E*100).toFixed(2);if(!X)S.message(`Uploading ${p}%`)},onSuccess(){if(!X)S.stop("Upload complete!");if(J)H.success("TUS upload completed successfully");d()}});if(J)H.info("[TUS] Starting upload...");YD.start()}),!X)H.info("Starting build job...");let h=await fetch(`${Z}/build/start/${V.job_id}`,{method:"POST",headers:{"Content-Type":"application/json",authorization:$.apikey},body:JSON.stringify({app_id:D})});if(!h.ok){let d=await h.text();throw Error(`Failed to start build: ${h.status} - ${d}`)}let b=await h.json();if(!X)H.success("Build started!"),H.info("Streaming build logs...");let l=new AbortController,f=!1,j=async()=>{if(f)return;f=!0;let d=new AbortController,r=setTimeout(()=>d.abort(),4000);try{await fetch(`${Z}/build/cancel/${V.job_id}`,{method:"POST",headers:{"Content-Type":"application/json",authorization:$.apikey},body:JSON.stringify({app_id:D}),signal:d.signal})}catch{}finally{clearTimeout(r)}},P=async()=>{try{if(f)BM.exit(1);if(!X)H.warn("Canceling build... (press Ctrl+C again to force quit)");await j(),l.abort()}catch{}};BM.on("SIGINT",P);let u,y=!1,c=async()=>{try{let d=await fetch(`${Z}/build/status?job_id=${encodeURIComponent(V.job_id)}&app_id=${encodeURIComponent(D)}&platform=${$.platform}`,{headers:{authorization:$.apikey}});if(!d.ok)return null;let r=await d.json(),YD=r.status?.toLowerCase?.()??"";if(!X&&y)H.info(`Build status: ${YD||r.status}`);if(kw.has(YD))return YD;return null}catch{return null}},g=null;try{g=await gPD(X,J,b.logs_url,b.logs_token,c,l.signal,()=>{y=!0})}finally{BM.removeListener("SIGINT",P)}if(g){if(u=g,kw.has(g))await c().catch(()=>{})}else u=await mPD(Z,V.job_id,D,$.platform,$.apikey,X,y,l.signal);if(!X)if(u==="succeeded")H.success("Build completed successfully!");else if(u==="failed")H.error("Build failed");else H.warn(`Build finished with status: ${u}`);let e=((Date.now()-Y)/1000).toFixed(2);return await AD($.apikey,{channel:"native-builder",event:u==="succeeded"?"Build succeeded":"Build failed",icon:u==="succeeded"?"✅":"❌",user_id:G,tags:{"app-id":D,platform:$.platform,status:u||"unknown",time:e},notify:!1}).catch(),{success:u==="succeeded",jobId:V.job_id,uploadUrl:V.upload_url,status:u||b.status||V.status}}finally{await vPD(R,{recursive:!0,force:!0})}}catch(Q){let F=Q instanceof Error?Q.message:String(Q);if(!X)H.error(F);return{success:!1,error:F}}}vD();X6();O1();kD();async function iPD(D,$,X,Y){for await(let J of D){if(!Y)H.warn(`Removing ${J.name} created on ${t5(J.created_at)}`);await Kw($,X,J.name)}}function pPD(D,$,X){let Y=[];for(let J of D??[]){let Q=eD(J.name);if(hG(Q,$)&&x4(Q,X))Y.push(J)}return Y}async function is(D,$,X=!1){if(!X)VD("Cleanup versions in Capgo");await Z0(),$.apikey=$.apikey||BD();let{bundle:Y,keep:J=4}=$,Q=$.force||!1,F=$.ignoreChannel||!1,Z=await ID();if(D=mD(D,Z?.config),!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to delete your app");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide a appid, or be in a capacitor project");throw Error("Missing appId")}let w=await jD($.apikey,$.supaHost,$.supaAnon);if(await m0(w,D,X),await xD(w,$.apikey,["write","all"]),await u0(w,$.apikey,D,3,X,!0),!X)H.info("Querying all available versions in Capgo");let G=await Hw(w,D),U=await Xt(w,D);if(!X)H.info(`Total active versions in Capgo: ${G?.length??0}`);if(!G?.length){if(!X)H.error("No versions found, aborting cleanup");throw Error("No versions found")}if(Y){let q=eD(Y),B=E7(q,"major");if(!X)H.info(`Querying available versions in Capgo between ${q$(q)} and ${q$(B)}`);if(G=pPD(G,q,B),!X)H.info(`Active versions in Capgo between ${q$(q)} and ${q$(B)}: ${G?.length??0}`)}let O=[],z=0;for(let q of G){let B=U.find((W)=>W===q.id);if(z<J||B&&!F)q.keep=B?"✅ (Linked to channel)":"✅",z+=1;else q.keep="❌",O.push(q)}if(!O.length){if(!X)H.warn("Nothing to be removed, aborting removal...");return{removed:0,kept:z}}if(!X)$t(G);if(!Q)if(!X){let q=await d0({message:"Do you want to continue removing the versions specified?"});if(bD(q)||!q)throw H.warn("Not confirmed, aborting removal..."),Error("Cleanup cancelled by user")}else throw Error("Cleanup requires force=true in SDK mode to prevent accidental deletions");if(!X)H.success("You have confirmed removal, removing versions now");if(await iPD(O,w,D,X),!X)ND("Done ✅");return{removed:O.length,kept:z}}vD();D6();kD();async function ps(D,$,X=!1){if(!X)VD("Check compatibility");let Y={...$,apikey:$.apikey||BD()},J=D?void 0:await ID(),Q=mD(D,J?.config),F=Y.channel;if(!F){if(!X)H.error("Missing argument, you need to provide a channel");throw Error("Missing channel")}if(!Y.apikey){if(!X)H.error("Missing API key, you need to provide an API key to access Capgo Cloud metadata");throw Error("Missing API key")}if(!Q){if(!X)H.error("Missing argument, you need to provide an appId, or be in a capacitor project");throw Error("Missing appId")}let Z=await jD(Y.apikey,Y.supaHost,Y.supaAnon);await m0(Z,Q,X),await xD(Z,Y.apikey,["write","all","read","upload"]),await u0(Z,Y.apikey,Q,1,X,!0);let w=await Ww(Z,Q,F,Y.packageJson,Y.nodeModules),G=w.finalCompatibility.some((U)=>!L4(U));if(!X){let U=new R0;U.headers=["Package","Local","Remote","Status","Details"],U.theme=R0.roundTheme,U.rows=[];let O=Y.text?"OK":"✅",z=Y.text?"FAIL":"❌";for(let q of w.finalCompatibility){let{name:B,localVersion:W,remoteVersion:L}=q,M=_8(q),I=M.compatible?O:z;U.rows.push([B,W||"-",L||"-",I,M.message])}if(H.success("Compatibility Check Results"),H.info(U.toString()),G){let q=w.finalCompatibility.filter((B)=>!L4(B)).length;H.warn(`
|
|
467
467
|
${q} package(s) are incompatible with channel "${F}"`),H.warn("An app store update may be required for these changes to take effect.")}else H.success(`
|
|
468
|
-
All packages are compatible with channel "${F}"`)}return{finalCompatibility:w.finalCompatibility,hasIncompatible:G,resolvedAppId:Q,channel:F}}vD();X6();import{existsSync as VM,readFileSync as $e,writeFileSync as sPD}from"node:fs";import{cwd as ePD}from"node:process";import{Buffer as C6}from"node:buffer";import{constants as rPD,createCipheriv as oPD,createDecipheriv as aPD,generateKeyPairSync as tPD,privateEncrypt as KM,publicDecrypt as HM,randomBytes as rs}from"node:crypto";var os="aes-128-cbc",P6="base64",yw="hex",w7=rPD.RSA_PKCS1_PADDING;function bw(D){let $=rs(16),X=rs(16),Y=$.toString(P6),J=KM({key:D,padding:w7},X).toString(P6);return{sessionKey:X,ivSessionKey:`${Y}:${J}`}}function G7(D,$,X){let[Y]=X.split(":"),J=C6.from(Y,P6),Q=oPD(os,$,J);return Q.setAutoPadding(!0),C6.concat([Q.update(D),Q.final()])}function as(D,$,X){let[Y,J]=$.split(":"),Q=HM({key:X,padding:w7},C6.from(J,P6)),F=C6.from(Y,P6),Z=aPD(os,Q,F);return Z.setAutoPadding(!0),C6.concat([Z.update(D),Z.final()])}function U7(D,$){return KM({key:$,padding:w7},C6.from(D,P6)).toString(P6)}function O7(D,$){return KM({key:$,padding:w7},C6.from(D,yw)).toString(yw)}function ts(D,$){return HM({key:$,padding:w7},C6.from(D,P6)).toString(P6)}function ss(D,$){return HM({key:$,padding:w7},C6.from(D,yw)).toString(yw)}function es(){let{publicKey:D,privateKey:$}=tPD("rsa",{modulusLength:2048});return{publicKey:D.export({type:"pkcs1",format:"pem"}),privateKey:$.export({type:"pkcs1",format:"pem"})}}function De(D){if(!D)return"";return D.replace(/-----BEGIN RSA PUBLIC KEY-----/g,"").replace(/-----END RSA PUBLIC KEY-----/g,"").replace(/\n/g,"").replace(/\r/g,"").replace(/ /g,"").substring(0,20)}O1();V3();kD();var DxD="5.30.0",$xD="6.30.0",XxD="7.30.0";function JxD(D,$){let X=D.key||R6,Y=$.config.plugins?.CapacitorUpdater?.publicKey;if(VM(X))Y=$e(X,"utf8");else if(!Y&&D.keyData)Y=D.keyData;return{publicKey:Y,fallbackKeyPath:X}}async function Xe(D,$,X,Y=!1){if(!Y)VD("Decrypt zip file");try{if(await Z0(),!VM(D)){let O=`Zip not found at the path ${D}`;if(!Y)H.error(O);throw Error(O)}let J=await ID();if(!X.key&&!VM(R6)&&!J.config.plugins?.CapacitorUpdater?.publicKey){let O=`Public Key not found at the path ${R6} or in ${J.path}`;if(!Y)H.error(O);throw Error(O)}let{publicKey:Q,fallbackKeyPath:F}=JxD(X,J);if(!Q){let O=`Cannot find public key ${F} or as keyData option or in ${J.path}`;if(!Y)H.error(O);throw Error(O)}let Z=$e(D),w=as(Z,$,X.keyData??Q),G=`${D}_decrypted.zip`;if(sPD(G,w),!Y)H.info(`Decrypted zip file at ${G}`);let U;if(X.checksum){let O=await i6(w,"sha256"),z=e0(ePD()),q=await y1("@capgo/capacitor-updater",z,X.packageJson),B=!1,W;try{W=q?eD(q):void 0}catch{W=void 0}if(W)B=!w$(W,DxD,$xD,XxD);if(!Y)H.info(`Decrypting checksum with ${B?"V3":"V2"} (based on updater version ${q||"unknown"})`);let L=B?ss(X.checksum,X.keyData??Q):ts(X.checksum,X.keyData??Q);if(U=O===L,!U){let M=`Checksum does not match ${O} !== ${L}`;if(!Y)H.error(M);throw Error(M)}if(!Y)H.info("Checksum matches")}if(!Y)ND("✅ done");return{outputPath:G,checksumMatches:U}}catch(J){if(!Y)H.error(`Error decrypting zip file ${t(J)}`);throw J instanceof Error?J:Error(String(J))}}vD();kD();async function Je(D,$,X,Y=!1){if(!Y)VD("Delete bundle");X.apikey=X.apikey||BD();let J=await ID();if($=mD($,J?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(!D){if(!Y)H.error("Missing argument, you need to provide a bundleId, or be in a capacitor project");throw Error("Missing bundleId")}let Q=await jD(X.apikey,X.supaHost,X.supaAnon);if(await m0(Q,$,Y),await xD(Q,X.apikey,["write","all"]),await u0(Q,X.apikey,$,3,Y,!0),!Y)H.info(`Deleting bundle ${$}@${D} from Capgo`),H.info("Keep in mind that you will not be able to reuse this bundle version, it's gone forever");await Kw(Q,$,D);let F=await d0(Q,$);if(await AD(X.apikey,{channel:"app",event:"Bundle Deleted",icon:"\uD83D\uDDD1️",user_id:F,tags:{"app-id":$,bundle:D},notify:!1,notifyConsole:!0}).catch(()=>{}),!Y)H.success(`Bundle ${$}@${D} deleted in Capgo`),ND("Done");return!0}vD();X6();import{existsSync as NM,readFileSync as Ye,writeFileSync as YxD}from"node:fs";import{cwd as QxD}from"node:process";O1();kD();var FxD="5.30.0",ZxD="6.30.0",wxD="7.30.0";function I2(D){console.error(t(D))}async function Qe(D,$,X,Y=!1){let{json:J}=X,Q=!J&&!Y;if(Q)VD("Encryption"),await Z0();try{let F=await ID(),Z=!!F.config.plugins?.CapacitorUpdater?.privateKey,w=!!F.config.plugins?.CapacitorUpdater?.publicKey;if(Z&&Q)H.warning("There is still a privateKey in the config");if(!NM(D)){let V=`Zip not found at the path ${D}`;if(!Y)if(J)I2({error:"zip_not_found"});else H.error(`Error: ${V}`);throw Error(V)}if(!w){if(!Y)if(J)I2({error:"missing_public_key"});else H.warning("Warning: Missing Public Key in config");throw Error("Missing public key in config")}let G=X.key||i1,U=X.keyData||"";if(!NM(G)&&!U){if(!Y)if(J)I2({error:"missing_key"});else H.warning(`Cannot find a private key at ${G} or as a keyData option`),H.error("Error: Missing key");throw Error("Missing private key")}else if(NM(G))U=Ye(G,"utf8");if(U&&!U.startsWith("-----BEGIN RSA PRIVATE KEY-----")){if(!Y)if(J)I2({error:"invalid_private_key"});else H.error("The private key provided is not a valid RSA Private key");throw Error("Invalid private key format")}let O=Ye(D),{sessionKey:z,ivSessionKey:q}=bw(U),B=G7(O,z,q),W=e0(QxD()),L=await y1("@capgo/capacitor-updater",W,X.packageJson),M=!1,I;try{I=L?eD(L):void 0}catch{I=void 0}if(I)M=!w$(I,FxD,ZxD,wxD);let K=M?O7($,U):U7($,U);if(Q)H.info(`Encrypting checksum with ${M?"V3":"V2"} (based on updater version ${L||"unknown"})`);let N=`${D}_encrypted.zip`;if(YxD(N,B),!Y)if(J)console.log(JSON.stringify({checksum:K,filename:N,ivSessionKey:q},null,2));else H.success(`Encoded Checksum: ${K}`),H.success(`ivSessionKey: ${q}`),H.success(`Encrypted zip saved at ${N}`),ND("Done ✅");return{checksum:K,filename:N,ivSessionKey:q}}catch(F){if(!Y)if(X.json)I2(F);else H.error(`Error encrypting zip file ${t(F)}`);throw F instanceof Error?F:Error(String(F))}}import{randomUUID as CuD}from"node:crypto";import{existsSync as ew,readFileSync as PuD}from"node:fs";import{cwd as aM,stdin as xuD,stdout as SuD}from"node:process";class LM extends TransformStream{outChunkSize;constructor(D){let $=new Uint8Array(D),X=0;super({transform(Y,J){let Q=0;while(Q<Y.length){let F=D-X,Z=Math.min(F,Y.length-Q);if($.set(Y.subarray(Q,Q+Z),X),Q+=Z,X+=Z,X===D)J.enqueue($),$=new Uint8Array(D),X=0}},flush(Y){if(X>0)Y.enqueue($.subarray(0,X))}}),this.outChunkSize=D}}function j4(D){return D=D.trim(),D=D.replace(/<!--[\s\S]*?-->/g,""),$();function $(){return{declaration:X(),root:Y()}}function X(){if(!w(/^<\?xml\s*/))return;let z={attributes:{}};while(!(G()||U("?>"))){let q=Q();if(!q)return z;z.attributes[q.name]=q.value}return w(/\?>\s*/),z}function Y(){let O=w(/^<([\w-:.]+)\s*/);if(!O)return;let z={name:O[1],attributes:{},children:[]};while(!(G()||U(">")||U("?>")||U("/>"))){let B=Q();if(!B)return z;z.attributes[B.name]=B.value}if(w(/^\s*\/>\s*/))return z;w(/\??>\s*/),z.content=J();let q;while(q=Y())z.children.push(q);return w(/^<\/[\w-:.]+>\s*/),z}function J(){let O=w(/^([^<]*)/);if(O)return Z(O[1]);return""}function Q(){let O=w(/([\w:-]+)\s*=\s*("[^"]*"|'[^']*'|\w+)\s*/);if(!O)return;return{name:O[1],value:Z(F(O[2]))}}function F(O){return O.replace(/^['"]|['"]$/g,"")}function Z(O){return O.replaceAll("<","<").replaceAll(">",">").replaceAll("&","&")}function w(O){let z=D.match(O);if(!z)return;return D=D.slice(z[0].length),z}function G(){return D.length===0}function U(O){return D.startsWith(O)}}class x6 extends Error{}class R1 extends x6{}class hw extends x6{}class MM extends x6{bucketName;constructor(D){super(`Invalid bucket name: ${D}`),this.bucketName=D}}class S6 extends x6{objectName;constructor(D){super(`Invalid object name: ${D}`),this.objectName=D}}class m8 extends x6{constructor(){super("accessKey is required")}}class A2 extends x6{constructor(){super("secretKey is required")}}class gw extends x6{constructor(){super("expirySeconds cannot be less than 1 second or more than 7 days")}}class E4 extends x6{statusCode;code;key;bucketName;resource;region;constructor(D,$,X,Y={}){super(X),this.statusCode=D,this.code=$,this.key=Y.key,this.bucketName=Y.bucketName,this.resource=Y.resource,this.region=Y.region}}async function Fe(D){try{let X=j4(await D.text()).root;if(X?.name!=="Error")throw Error("Invalid root, expected <Error>");let Y=X.children.find((G)=>G.name==="Code")?.content??"UnknownErrorCode",J=X.children.find((G)=>G.name==="Message")?.content??"The error message could not be determined.",Q=X.children.find((G)=>G.name==="Key")?.content,F=X.children.find((G)=>G.name==="BucketName")?.content,Z=X.children.find((G)=>G.name==="Resource")?.content,w=X.children.find((G)=>G.name==="Region")?.content;return new E4(D.status,Y,J,{key:Q,bucketName:F,resource:Z,region:w})}catch{return new E4(D.status,"UnrecognizedError",`Error: Unexpected response code ${D.status} ${D.statusText}. Unable to parse response as XML.`)}}function Ze(D){if(typeof D!=="number"||isNaN(D))return!1;return D>=1&&D<=65535}function we(D){if(typeof D!=="string")return!1;if(D.length<3||D.length>63)return!1;if(D.includes(".."))return!1;if(D.match(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/))return!1;if(D.match(/^[a-z0-9][a-z0-9.-]+[a-z0-9]$/))return!0;return!1}function T4(D){if(!GxD(D))return!1;if(D.length===0)return!1;return!0}function GxD(D){if(typeof D!=="string")return!1;if(D.length>1024)return!1;return!0}function R2(D){return Array.from(D).map(($)=>$.toString(16).padStart(2,"0")).join("")}function c8(D=""){let $={'"':"",""":"",""":"",""":"",""":""};return D.replace(/^("|"|")|("|"|")$/g,(X)=>$[X])}function AM(D){return D.get("x-amz-version-id")??null}function d8(D){let $=D.toISOString();return $.slice(0,4)+$.slice(5,7)+$.slice(8,13)+$.slice(14,16)+$.slice(17,19)+"Z"}function RM(D){return d8(D).slice(0,8)}function jM(D,$){return`${RM($)}/${D}/s3/aws4_request`}async function mw(D){if(!(D instanceof Uint8Array))D=new TextEncoder().encode(D);return R2(new Uint8Array(await crypto.subtle.digest("SHA-256",D)))}var UxD=["x-amz-server-side-encryption-customer-algorithm","x-amz-server-side-encryption-customer-key","x-amz-server-side-encryption-customer-key-MD5"];class EM extends WritableStream{getResult;constructor({client:D,bucketName:$,objectName:X,partSize:Y,metadata:J}){let Q,F=1,Z,w=[],G,U=[];super({start(){},async write(O,z){let B=F++;try{if(B==1&&O.length<Y){let M=await D.makeRequest({method:"PUT",headers:new Headers({...J,"Content-Length":String(O.length)}),bucketName:$,objectName:X,payload:O});Q={etag:c8(M.headers.get("etag")??void 0),versionId:AM(M.headers)};return}if(B===1)Z=(await OxD({client:D,bucketName:$,objectName:X,metadata:J})).uploadId;let W={"Content-Length":String(O.length)};for(let M of UxD){let I=J[M];if(I)W[M]=I}let L=D.makeRequest({method:"PUT",query:{partNumber:B.toString(),uploadId:Z},headers:new Headers(W),bucketName:$,objectName:X,payload:O}).then((M)=>{let I=M.headers.get("etag")??"";if(I)I=I.replace(/^"/,"").replace(/"$/,"");return w.push({part:B,etag:I}),M});U.push(L.catch((M)=>{if(!G)G=M}))}catch(W){throw W}},async close(){if(Q);else if(Z){if(await Promise.all(U),G)throw G;w.sort((O,z)=>O.part>z.part?1:-1),Q=await qxD({client:D,bucketName:$,objectName:X,uploadId:Z,etags:w})}else throw Error("Stream was closed without uploading any data.")}});this.getResult=()=>{if(Q===void 0)throw Error("Result is not ready. await the stream first.");return Q}}}async function OxD(D){let X=new Headers(D.metadata),Y="uploads",Q=await(await D.client.makeRequest({method:"POST",bucketName:D.bucketName,objectName:D.objectName,query:"uploads",headers:X,returnBody:!0})).text(),F=j4(Q).root;if(!F||F.name!=="InitiateMultipartUploadResult")throw Error(`Unexpected response: ${Q}`);let Z=F.children.find((w)=>w.name==="UploadId")?.content;if(!Z)throw Error(`Unable to get UploadId from response: ${Q}`);return{uploadId:Z}}async function qxD({client:D,bucketName:$,objectName:X,uploadId:Y,etags:J}){let Q=`
|
|
468
|
+
All packages are compatible with channel "${F}"`)}return{finalCompatibility:w.finalCompatibility,hasIncompatible:G,resolvedAppId:Q,channel:F}}vD();X6();import{existsSync as VM,readFileSync as $e,writeFileSync as sPD}from"node:fs";import{cwd as ePD}from"node:process";import{Buffer as C6}from"node:buffer";import{constants as rPD,createCipheriv as oPD,createDecipheriv as aPD,generateKeyPairSync as tPD,privateEncrypt as KM,publicDecrypt as HM,randomBytes as rs}from"node:crypto";var os="aes-128-cbc",P6="base64",yw="hex",w7=rPD.RSA_PKCS1_PADDING;function bw(D){let $=rs(16),X=rs(16),Y=$.toString(P6),J=KM({key:D,padding:w7},X).toString(P6);return{sessionKey:X,ivSessionKey:`${Y}:${J}`}}function G7(D,$,X){let[Y]=X.split(":"),J=C6.from(Y,P6),Q=oPD(os,$,J);return Q.setAutoPadding(!0),C6.concat([Q.update(D),Q.final()])}function as(D,$,X){let[Y,J]=$.split(":"),Q=HM({key:X,padding:w7},C6.from(J,P6)),F=C6.from(Y,P6),Z=aPD(os,Q,F);return Z.setAutoPadding(!0),C6.concat([Z.update(D),Z.final()])}function U7(D,$){return KM({key:$,padding:w7},C6.from(D,P6)).toString(P6)}function O7(D,$){return KM({key:$,padding:w7},C6.from(D,yw)).toString(yw)}function ts(D,$){return HM({key:$,padding:w7},C6.from(D,P6)).toString(P6)}function ss(D,$){return HM({key:$,padding:w7},C6.from(D,yw)).toString(yw)}function es(){let{publicKey:D,privateKey:$}=tPD("rsa",{modulusLength:2048});return{publicKey:D.export({type:"pkcs1",format:"pem"}),privateKey:$.export({type:"pkcs1",format:"pem"})}}function De(D){if(!D)return"";return D.replace(/-----BEGIN RSA PUBLIC KEY-----/g,"").replace(/-----END RSA PUBLIC KEY-----/g,"").replace(/\n/g,"").replace(/\r/g,"").replace(/ /g,"").substring(0,20)}O1();V3();kD();var DxD="5.30.0",$xD="6.30.0",XxD="7.30.0";function JxD(D,$){let X=D.key||R6,Y=$.config.plugins?.CapacitorUpdater?.publicKey;if(VM(X))Y=$e(X,"utf8");else if(!Y&&D.keyData)Y=D.keyData;return{publicKey:Y,fallbackKeyPath:X}}async function Xe(D,$,X,Y=!1){if(!Y)VD("Decrypt zip file");try{if(await Z0(),!VM(D)){let O=`Zip not found at the path ${D}`;if(!Y)H.error(O);throw Error(O)}let J=await ID();if(!X.key&&!VM(R6)&&!J.config.plugins?.CapacitorUpdater?.publicKey){let O=`Public Key not found at the path ${R6} or in ${J.path}`;if(!Y)H.error(O);throw Error(O)}let{publicKey:Q,fallbackKeyPath:F}=JxD(X,J);if(!Q){let O=`Cannot find public key ${F} or as keyData option or in ${J.path}`;if(!Y)H.error(O);throw Error(O)}let Z=$e(D),w=as(Z,$,X.keyData??Q),G=`${D}_decrypted.zip`;if(sPD(G,w),!Y)H.info(`Decrypted zip file at ${G}`);let U;if(X.checksum){let O=await i6(w,"sha256"),z=e0(ePD()),q=await y1("@capgo/capacitor-updater",z,X.packageJson),B=!1,W;try{W=q?eD(q):void 0}catch{W=void 0}if(W)B=!w$(W,DxD,$xD,XxD);if(!Y)H.info(`Decrypting checksum with ${B?"V3":"V2"} (based on updater version ${q||"unknown"})`);let L=B?ss(X.checksum,X.keyData??Q):ts(X.checksum,X.keyData??Q);if(U=O===L,!U){let M=`Checksum does not match ${O} !== ${L}`;if(!Y)H.error(M);throw Error(M)}if(!Y)H.info("Checksum matches")}if(!Y)ND("✅ done");return{outputPath:G,checksumMatches:U}}catch(J){if(!Y)H.error(`Error decrypting zip file ${t(J)}`);throw J instanceof Error?J:Error(String(J))}}vD();kD();async function Je(D,$,X,Y=!1){if(!Y)VD("Delete bundle");X.apikey=X.apikey||BD();let J=await ID();if($=mD($,J?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(!D){if(!Y)H.error("Missing argument, you need to provide a bundleId, or be in a capacitor project");throw Error("Missing bundleId")}let Q=await jD(X.apikey,X.supaHost,X.supaAnon);if(await m0(Q,$,Y),await xD(Q,X.apikey,["write","all"]),await u0(Q,X.apikey,$,3,Y,!0),!Y)H.info(`Deleting bundle ${$}@${D} from Capgo`),H.info("Keep in mind that you will not be able to reuse this bundle version, it's gone forever");await Kw(Q,$,D);let F=await l0(Q,$);if(await AD(X.apikey,{channel:"app",event:"Bundle Deleted",icon:"\uD83D\uDDD1️",user_id:F,tags:{"app-id":$,bundle:D},notify:!1,notifyConsole:!0}).catch(()=>{}),!Y)H.success(`Bundle ${$}@${D} deleted in Capgo`),ND("Done");return!0}vD();X6();import{existsSync as NM,readFileSync as Ye,writeFileSync as YxD}from"node:fs";import{cwd as QxD}from"node:process";O1();kD();var FxD="5.30.0",ZxD="6.30.0",wxD="7.30.0";function I2(D){console.error(t(D))}async function Qe(D,$,X,Y=!1){let{json:J}=X,Q=!J&&!Y;if(Q)VD("Encryption"),await Z0();try{let F=await ID(),Z=!!F.config.plugins?.CapacitorUpdater?.privateKey,w=!!F.config.plugins?.CapacitorUpdater?.publicKey;if(Z&&Q)H.warning("There is still a privateKey in the config");if(!NM(D)){let V=`Zip not found at the path ${D}`;if(!Y)if(J)I2({error:"zip_not_found"});else H.error(`Error: ${V}`);throw Error(V)}if(!w){if(!Y)if(J)I2({error:"missing_public_key"});else H.warning("Warning: Missing Public Key in config");throw Error("Missing public key in config")}let G=X.key||i1,U=X.keyData||"";if(!NM(G)&&!U){if(!Y)if(J)I2({error:"missing_key"});else H.warning(`Cannot find a private key at ${G} or as a keyData option`),H.error("Error: Missing key");throw Error("Missing private key")}else if(NM(G))U=Ye(G,"utf8");if(U&&!U.startsWith("-----BEGIN RSA PRIVATE KEY-----")){if(!Y)if(J)I2({error:"invalid_private_key"});else H.error("The private key provided is not a valid RSA Private key");throw Error("Invalid private key format")}let O=Ye(D),{sessionKey:z,ivSessionKey:q}=bw(U),B=G7(O,z,q),W=e0(QxD()),L=await y1("@capgo/capacitor-updater",W,X.packageJson),M=!1,I;try{I=L?eD(L):void 0}catch{I=void 0}if(I)M=!w$(I,FxD,ZxD,wxD);let K=M?O7($,U):U7($,U);if(Q)H.info(`Encrypting checksum with ${M?"V3":"V2"} (based on updater version ${L||"unknown"})`);let N=`${D}_encrypted.zip`;if(YxD(N,B),!Y)if(J)console.log(JSON.stringify({checksum:K,filename:N,ivSessionKey:q},null,2));else H.success(`Encoded Checksum: ${K}`),H.success(`ivSessionKey: ${q}`),H.success(`Encrypted zip saved at ${N}`),ND("Done ✅");return{checksum:K,filename:N,ivSessionKey:q}}catch(F){if(!Y)if(X.json)I2(F);else H.error(`Error encrypting zip file ${t(F)}`);throw F instanceof Error?F:Error(String(F))}}import{randomUUID as CuD}from"node:crypto";import{existsSync as ew,readFileSync as PuD}from"node:fs";import{cwd as aM,stdin as xuD,stdout as SuD}from"node:process";class LM extends TransformStream{outChunkSize;constructor(D){let $=new Uint8Array(D),X=0;super({transform(Y,J){let Q=0;while(Q<Y.length){let F=D-X,Z=Math.min(F,Y.length-Q);if($.set(Y.subarray(Q,Q+Z),X),Q+=Z,X+=Z,X===D)J.enqueue($),$=new Uint8Array(D),X=0}},flush(Y){if(X>0)Y.enqueue($.subarray(0,X))}}),this.outChunkSize=D}}function j4(D){return D=D.trim(),D=D.replace(/<!--[\s\S]*?-->/g,""),$();function $(){return{declaration:X(),root:Y()}}function X(){if(!w(/^<\?xml\s*/))return;let z={attributes:{}};while(!(G()||U("?>"))){let q=Q();if(!q)return z;z.attributes[q.name]=q.value}return w(/\?>\s*/),z}function Y(){let O=w(/^<([\w-:.]+)\s*/);if(!O)return;let z={name:O[1],attributes:{},children:[]};while(!(G()||U(">")||U("?>")||U("/>"))){let B=Q();if(!B)return z;z.attributes[B.name]=B.value}if(w(/^\s*\/>\s*/))return z;w(/\??>\s*/),z.content=J();let q;while(q=Y())z.children.push(q);return w(/^<\/[\w-:.]+>\s*/),z}function J(){let O=w(/^([^<]*)/);if(O)return Z(O[1]);return""}function Q(){let O=w(/([\w:-]+)\s*=\s*("[^"]*"|'[^']*'|\w+)\s*/);if(!O)return;return{name:O[1],value:Z(F(O[2]))}}function F(O){return O.replace(/^['"]|['"]$/g,"")}function Z(O){return O.replaceAll("<","<").replaceAll(">",">").replaceAll("&","&")}function w(O){let z=D.match(O);if(!z)return;return D=D.slice(z[0].length),z}function G(){return D.length===0}function U(O){return D.startsWith(O)}}class x6 extends Error{}class R1 extends x6{}class hw extends x6{}class MM extends x6{bucketName;constructor(D){super(`Invalid bucket name: ${D}`),this.bucketName=D}}class S6 extends x6{objectName;constructor(D){super(`Invalid object name: ${D}`),this.objectName=D}}class m8 extends x6{constructor(){super("accessKey is required")}}class A2 extends x6{constructor(){super("secretKey is required")}}class gw extends x6{constructor(){super("expirySeconds cannot be less than 1 second or more than 7 days")}}class E4 extends x6{statusCode;code;key;bucketName;resource;region;constructor(D,$,X,Y={}){super(X),this.statusCode=D,this.code=$,this.key=Y.key,this.bucketName=Y.bucketName,this.resource=Y.resource,this.region=Y.region}}async function Fe(D){try{let X=j4(await D.text()).root;if(X?.name!=="Error")throw Error("Invalid root, expected <Error>");let Y=X.children.find((G)=>G.name==="Code")?.content??"UnknownErrorCode",J=X.children.find((G)=>G.name==="Message")?.content??"The error message could not be determined.",Q=X.children.find((G)=>G.name==="Key")?.content,F=X.children.find((G)=>G.name==="BucketName")?.content,Z=X.children.find((G)=>G.name==="Resource")?.content,w=X.children.find((G)=>G.name==="Region")?.content;return new E4(D.status,Y,J,{key:Q,bucketName:F,resource:Z,region:w})}catch{return new E4(D.status,"UnrecognizedError",`Error: Unexpected response code ${D.status} ${D.statusText}. Unable to parse response as XML.`)}}function Ze(D){if(typeof D!=="number"||isNaN(D))return!1;return D>=1&&D<=65535}function we(D){if(typeof D!=="string")return!1;if(D.length<3||D.length>63)return!1;if(D.includes(".."))return!1;if(D.match(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/))return!1;if(D.match(/^[a-z0-9][a-z0-9.-]+[a-z0-9]$/))return!0;return!1}function T4(D){if(!GxD(D))return!1;if(D.length===0)return!1;return!0}function GxD(D){if(typeof D!=="string")return!1;if(D.length>1024)return!1;return!0}function R2(D){return Array.from(D).map(($)=>$.toString(16).padStart(2,"0")).join("")}function c8(D=""){let $={'"':"",""":"",""":"",""":"",""":""};return D.replace(/^("|"|")|("|"|")$/g,(X)=>$[X])}function AM(D){return D.get("x-amz-version-id")??null}function d8(D){let $=D.toISOString();return $.slice(0,4)+$.slice(5,7)+$.slice(8,13)+$.slice(14,16)+$.slice(17,19)+"Z"}function RM(D){return d8(D).slice(0,8)}function jM(D,$){return`${RM($)}/${D}/s3/aws4_request`}async function mw(D){if(!(D instanceof Uint8Array))D=new TextEncoder().encode(D);return R2(new Uint8Array(await crypto.subtle.digest("SHA-256",D)))}var UxD=["x-amz-server-side-encryption-customer-algorithm","x-amz-server-side-encryption-customer-key","x-amz-server-side-encryption-customer-key-MD5"];class EM extends WritableStream{getResult;constructor({client:D,bucketName:$,objectName:X,partSize:Y,metadata:J}){let Q,F=1,Z,w=[],G,U=[];super({start(){},async write(O,z){let B=F++;try{if(B==1&&O.length<Y){let M=await D.makeRequest({method:"PUT",headers:new Headers({...J,"Content-Length":String(O.length)}),bucketName:$,objectName:X,payload:O});Q={etag:c8(M.headers.get("etag")??void 0),versionId:AM(M.headers)};return}if(B===1)Z=(await OxD({client:D,bucketName:$,objectName:X,metadata:J})).uploadId;let W={"Content-Length":String(O.length)};for(let M of UxD){let I=J[M];if(I)W[M]=I}let L=D.makeRequest({method:"PUT",query:{partNumber:B.toString(),uploadId:Z},headers:new Headers(W),bucketName:$,objectName:X,payload:O}).then((M)=>{let I=M.headers.get("etag")??"";if(I)I=I.replace(/^"/,"").replace(/"$/,"");return w.push({part:B,etag:I}),M});U.push(L.catch((M)=>{if(!G)G=M}))}catch(W){throw W}},async close(){if(Q);else if(Z){if(await Promise.all(U),G)throw G;w.sort((O,z)=>O.part>z.part?1:-1),Q=await qxD({client:D,bucketName:$,objectName:X,uploadId:Z,etags:w})}else throw Error("Stream was closed without uploading any data.")}});this.getResult=()=>{if(Q===void 0)throw Error("Result is not ready. await the stream first.");return Q}}}async function OxD(D){let X=new Headers(D.metadata),Y="uploads",Q=await(await D.client.makeRequest({method:"POST",bucketName:D.bucketName,objectName:D.objectName,query:"uploads",headers:X,returnBody:!0})).text(),F=j4(Q).root;if(!F||F.name!=="InitiateMultipartUploadResult")throw Error(`Unexpected response: ${Q}`);let Z=F.children.find((w)=>w.name==="UploadId")?.content;if(!Z)throw Error(`Unable to get UploadId from response: ${Q}`);return{uploadId:Z}}async function qxD({client:D,bucketName:$,objectName:X,uploadId:Y,etags:J}){let Q=`
|
|
469
469
|
<CompleteMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
|
|
470
470
|
${J.map((O)=>` <Part><PartNumber>${O.part}</PartNumber><ETag>${O.etag}</ETag></Part>`).join(`
|
|
471
471
|
`)}
|
|
@@ -483,13 +483,13 @@ All packages are compatible with channel "${F}"`)}return{finalCompatibility:w.fi
|
|
|
483
483
|
The bundle size is ${A} Mb, this may take a while to download for users
|
|
484
484
|
`),H.info(`Learn how to optimize your assets https://capgo.app/blog/optimise-your-images-for-updates/
|
|
485
485
|
`),$.verbose)H.info("[Verbose] Bundle size details:"),H.info(` - Actual size: ${A} MB (${O?.byteLength} bytes)`),H.info(` - Alert threshold: ${Math.floor(F/1024/1024)} MB`),H.info(` - Maximum allowed: ${_} MB`),H.info("[Verbose] Sending 'App Too Large' event to analytics...");if(await AD(X,{channel:"app-error",event:"App Too Large",icon:"\uD83D\uDE9B",user_id:Y,tags:{"app-id":J},notify:!1},$.verbose),$.verbose)H.info("[Verbose] Event sent successfully")}else if($.verbose)H.info(`[Verbose] Bundle size OK: ${A} MB (under ${Math.floor(F/1024/1024)} MB alert threshold)`);if($.verbose)H.info("[Verbose] Bundle preparation complete, returning bundle data");return{zipped:O,ivSessionKey:w,sessionKey:G,checksum:U,encryptionMethod:z,finalKeyData:q,keyId:B}}async function guD(D,$,X,Y,J,Q,F,Z){let w=A0();w.start("Uploading Bundle");let G=performance.now(),U=!1;if(F.verbose)H.info("[Verbose] uploadBundleToCapgoCloud called:"),H.info(` - Bundle size: ${Math.floor(Q.byteLength/1024)} KB`),H.info(` - App ID: ${X}`),H.info(` - Bundle version: ${Y}`),H.info(` - Chunk size: ${Math.floor(Z/1024/1024)} MB`);if(F.dryUpload){if(w.stop(`Dry run, bundle not uploaded
|
|
486
|
-
Bundle uploaded \uD83D\uDCAA in 0 seconds`),F.verbose)H.info("[Verbose] Dry upload mode - skipping actual upload");return}try{let q=await v$();if(F.verbose)H.info("[Verbose] Local config retrieved for upload");if(F.multipart!==void 0&&F.multipart||F.tus!==void 0&&F.tus){if(F.multipart)H.info("Uploading bundle with multipart is deprecated, we upload with TUS instead");else H.info("Uploading bundle with TUS protocol");if(F.verbose)H.info("[Verbose] Starting TUS resumable upload..."),H.info(` - Host: ${q.hostWeb}`),H.info(` - Chunk size: ${Math.floor(Z/1024/1024)} MB`);if(await ga(D,Q,J,X,Y,w,q,Z),U=!0,F.verbose)H.info("[Verbose] TUS upload completed, updating database with R2 path...");let B=`orgs/${J}/apps/${X}/${Y}.zip`,{error:W}=await $.from("app_versions").update({r2_path:B}).eq("name",Y).eq("app_id",X);if(W){if(H.error(`Cannot finish TUS upload ${t(W)}`),F.verbose)H.info(`[Verbose] Database update failed: ${t(W)}`);return Promise.reject(Error("Cannot finish TUS upload"))}if(F.verbose)H.info(`[Verbose] Database updated with R2 path: ${B}`)}else{if(F.verbose)H.info("[Verbose] Using standard upload (non-TUS), getting presigned URL...");let B=await ya($,X,Y);if(!B){if(H.error("Cannot get upload url"),F.verbose)H.info("[Verbose] Failed to retrieve presigned upload URL from database");return Promise.reject(Error("Cannot get upload url"))}if(F.verbose)H.info("[Verbose] Presigned URL obtained, uploading via HTTP PUT..."),H.info(` - Timeout: ${F.timeout||gL}ms`),H.info(" - Retry attempts: 5"),H.info(" - Content-Type: application/zip");let W=new AbortController,L=setTimeout(()=>W.abort(),F.timeout||gL);try{let M=await fetch(B,{method:"PUT",body:Q,headers:{"Content-Type":"application/zip"},signal:W.signal});if(!M.ok)throw Error(`HTTP error! status: ${M.status}`)}finally{clearTimeout(L)}if(F.verbose)H.info("[Verbose] HTTP PUT upload completed successfully")}}catch(q){let W=((performance.now()-G)/1000).toFixed(2);if(w.error(`Failed to upload bundle ( after ${W} seconds)`),F.verbose)H.info(`[Verbose] Upload failed after ${W} seconds`),H.info(`[Verbose] Error type: ${q instanceof Error?"Error":typeof q}`);if(q instanceof Error&&q.message.includes("HTTP error"))try{let L=q.message.match(/status: (\d+)/),M=L?L[1]:"unknown";H.error(`Upload failed with status ${M}: ${q.message}`)}catch{H.error(`Upload failed: ${q.message}`)}else{if(F.verbose)H.info(`[Verbose] Non-HTTP error: ${t(q)}`);if(!F.tus)H.error(`Cannot upload bundle ( try again with --tus option) ${t(q)}`);else H.error(`Cannot upload bundle please contact support if the issue persists ${t(q)}`)}if(F.verbose)H.info("[Verbose] Cleaning up failed version from database...");if(await ma($,X,Y),F.verbose)H.info("[Verbose] Failed version cleaned up");throw q instanceof Error?q:Error(String(q))}let z=((performance.now()-G)/1000).toFixed(2);if(w.stop(`Bundle uploaded \uD83D\uDCAA in (${z} seconds)`),F.verbose)H.info("[Verbose] Upload successful:"),H.info(` - Upload time: ${z} seconds`),H.info(` - Upload method: ${U?"TUS (resumable)":"Standard HTTP PUT"}`),H.info(` - Bundle size: ${Math.floor(Q.byteLength/1024)} KB`),H.info("[Verbose] Sending performance event...");if(await AD(D,{channel:"performance",event:U?"TUS upload zip performance":"Upload zip performance",icon:"\uD83D\uDE84",user_id:J,tags:{"app-id":X,time:z},notify:!1},F.verbose),F.verbose)H.info("[Verbose] Performance event sent successfully")}async function muD(D,$,X){let{data:Y,error:J}=await D.from("channels").select("version ( id, name, deleted )").eq("app_id",$).eq("name",X);if(J){H.error(`Cannot delete linked bundle on upload ${t(J)}`);return}if(Y.length===0){H.warn("No linked bundle found in the channel you are trying to upload to");return}let Q=Y[0].version;if(Q.deleted){H.warn("The linked bundle is already deleted");return}let{error:F}=await D.from("app_versions").update({deleted:!0}).eq("id",Q.id);if(F){H.error(`Cannot delete linked bundle on upload ${t(F)}`);return}H.info("Linked bundle deleted")}async function cuD(D,$,X,Y,J,Q,F,Z,w,G){let{data:U}=await D.rpc("get_app_versions",{apikey:$,name_version:Y,appid:Z}).single();if(!U)H0("Cannot get version id, cannot set channel");let{data:O}=await D.rpc("is_allowed_capgkey",{apikey:$,keymode:["write","all"]}).single();if(O){let{error:z,data:q}=await zw(D,{name:J,app_id:Z,created_by:Q,version:U,owner_org:F,...G?{allow_device_self_set:!0}:{}});if(z)H0(`Cannot set channel, the upload key is not allowed to do that, use the "all" for this. ${t(z)}`);let B=`${w.hostWeb}/app/${Z}/channel/${q.id}`;if(q?.public)H.info("Your update is now available in your public channel \uD83C\uDF89");else if(q?.id)H.info(`Link device to this bundle to try it: ${B}`);if(X)H.info(`Bundle url: ${B}`)}else H.warn("The upload key is not allowed to set the version in the channel")}async function duD(D,$,X){let{error:Y,data:J}=await $.from("apps").select("default_upload_channel").eq("app_id",D).single();if(Y)return H.warn("Cannot find default upload channel"),H.info(`You can set it here: ${X}/app/${D}/info`),null;return J.default_upload_channel}async function tM(D,$,X=!1){if(!X)VD(`Uploading with CLI version ${H$.version}`);let Y,J=v8();await Z0();let{s3Region:Q,s3Apikey:F,s3Apisecret:Z,s3BucketName:w,s3Endpoint:G,s3Port:U,s3SSL:O}=$;if($.verbose)H.info("[Verbose] Starting upload process with options:"),H.info(` - API key: ${$.apikey?"provided":"from saved key"}`),H.info(` - Path: ${$.path||"from capacitor config"}`),H.info(` - Channel: ${$.channel||"from default upload channel"}`),H.info(` - Bundle: ${$.bundle||"auto-detected"}`),H.info(` - External: ${$.external||"false"}`),H.info(` - Encryption: ${$.keyV2||$.keyDataV2?"v2":$.key===!1?"disabled":"auto"}`),H.info(` - Upload method: ${$.tus?"TUS":$.zip?"ZIP":"auto"}`),H.info(` - Delta updates: ${$.delta||$.partial?"enabled":"disabled"}`);let z=_uD($);if($.verbose)H.info("[Verbose] API key retrieved successfully");let q=await ID();if($.verbose)H.info("[Verbose] Capacitor config loaded successfully");let B=q?.config?.plugins?.CapacitorUpdater?.directUpdate==="always",W=!X&&!!xuD.isTTY&&!!SuD.isTTY;if(B&&$.delta===void 0){if(W){H.info("\uD83D\uDCA1 Direct Update (instant updates) is enabled in your config"),H.info(" Delta updates send only changed files instead of the full bundle");let YD=await c0({message:"Enable delta updates for this upload? (Recommended with Direct Update)",initialValue:!0});if(!bD(YD)&&YD){if($.delta=!0,$.verbose)H.info("[Verbose] Delta updates auto-enabled due to Direct Update configuration")}}else if(!X){if($.delta!==!1){if($.delta=!0,$.verbose)H.info("[Verbose] Delta updates auto-enabled in CI/CD mode due to Direct Update configuration")}}}let L=await xa();if($.verbose)H.info("[Verbose] Remote file config retrieved:"),H.info(` - Max upload length: ${Math.floor(L.maxUploadLength/1024/1024)} MB`),H.info(` - Alert upload size: ${Math.floor(L.alertUploadSize/1024/1024)} MB`),H.info(` - TUS upload: ${L.TUSUpload?"enabled":"disabled"}`),H.info(` - TUS upload forced: ${L.TUSUploadForced?"yes":"no"}`),H.info(` - Partial upload: ${L.partialUpload?"enabled":"disabled"}`),H.info(` - Max chunk size: ${Math.floor(L.maxChunkSize/1024/1024)} MB`);let{appid:M,path:I}=kuD(D,$,q.config);if($.verbose)H.info(`[Verbose] App ID: ${M}, Build path: ${I}`);let K=await vuD(q.config,$);if($.verbose)H.info(`[Verbose] Bundle version: ${K}`);let N=$.external?"external":"r2-direct",V="none";if($.autoSetBundle){if(await Ca({version:K}),$.verbose)H.info("[Verbose] Auto-set bundle version in capacitor.config.json")}if(fuD($,I),$.verbose)H.info("[Verbose] Code check passed (notifyAppReady found and index.html present)");H.info(`Upload ${M}@${K} started from path "${I}" to Capgo cloud`);let R=await v$();if($.verbose)H.info(`[Verbose] Local config loaded: host=${R.hostWeb}`);if($.supaHost&&$.supaAnon){if(H.info("Using custom supabase instance from provided options"),R.supaHost=$.supaHost,R.supaKey=$.supaAnon,$.verbose)H.info(`[Verbose] Custom Supabase host: ${$.supaHost}`)}let x=await jD(z,$.supaHost,$.supaAnon);if($.verbose)H.info("[Verbose] Supabase client created successfully");await m0(x,M,X);let A=await xD(x,z,["write","all","upload"]);if($.verbose)H.info(`[Verbose] User verified successfully, user_id: ${A}`);let _=$.channel||await duD(M,x,R.hostWeb)||"production";if($.verbose)H.info(`[Verbose] Target channel: ${_}`);let v=await d0(x,M);if($.verbose)H.info(`[Verbose] Organization ID: ${v}`);if(await _a(x,v,H$.version),$.verbose)H.info("[Verbose] Remote CLI messages checked");if(await fa(x,v,z,M,!0),$.verbose)H.info("[Verbose] Plan validation passed");if($.verbose)H.info("[Verbose] Trial check completed");if($.verbose)H.info(`[Verbose] Checking compatibility with channel ${_}...`);let{nativePackages:S,minUpdateVersion:h}=await yuD(x,J,$,_,M,K);if($.verbose)H.info("[Verbose] Compatibility check completed:"),H.info(` - Native packages: ${S?S.length:0}`),H.info(` - Min update version: ${h||"none"}`);if($.verbose)H.info(`[Verbose] Checking if version ${K} already exists...`);let b=await buD(x,M,K,$.versionExistsOk,W);if($.verbose)H.info(`[Verbose] Version exists check: ${b?typeof b==="string"?`retry with ${b}`:"yes (skipping)":"no (continuing)"}`);if(b===!0)return{success:!0,skipped:!0,reason:"VERSION_EXISTS",bundle:K,checksum:null,encryptionMethod:V,storageProvider:N};if(typeof b==="string")return H.info(`Retrying upload with new version: ${b}`),tM(D,{...$,bundle:b},X);if($.external&&!$.external.startsWith("https://"))H0(`External link should should start with "https://" current is "${$.external}"`);if($.deleteLinkedBundleOnUpload)H.warn("Deleting linked bundle on upload is destructive, it will delete the currently linked bundle in the channel you are trying to upload to."),H.warn("Please make sure you want to do this, if you are not sure, please do not use this option.");let l={name:K,app_id:M,session_key:void 0,external_url:$.external,storage_provider:N,min_update_version:h,native_packages:S,owner_org:v,user_id:A,checksum:void 0,link:$.link||null,comment:$.comment||null,key_id:void 0,cli_version:H$.version},f=null,j="";if(!$.external){if($.verbose)H.info(`[Verbose] Preparing bundle file from path: ${I}`);let YD=q.config?.plugins?.CapacitorUpdater?.publicKey,{zipped:C,ivSessionKey:E,checksum:p,sessionKey:k,encryptionMethod:zD,finalKeyData:a,keyId:WD}=await huD(I,$,z,v,M,L.maxUploadLength,L.alertUploadSize,YD);if(l.session_key=E,l.checksum=p,l.key_id=WD||void 0,Y=k,f=C,V=zD,j=a,$.verbose)H.info("[Verbose] Bundle prepared:"),H.info(` - Size: ${Math.floor((C?.byteLength??0)/1024)} KB`),H.info(` - Checksum: ${p}`),H.info(` - Encryption: ${zD}`),H.info(` - IV Session Key: ${E?"present":"none"}`),H.info(` - Key ID: ${WD||"none"}`);if(!$.ignoreChecksumCheck){if($.verbose)H.info("[Verbose] Checking for duplicate checksum...");if(await na(x,M,_,p),$.verbose)H.info("[Verbose] Checksum is unique")}}else{if($.verbose)H.info(`[Verbose] Using external URL: ${$.external}`);if(await AD(z,{channel:"app",event:"App external",icon:"\uD83D\uDCE4",user_id:v,tags:{"app-id":M},notify:!1},$.verbose),l.session_key=$.ivSessionKey,l.checksum=$.encryptedChecksum,$.verbose)H.info("[Verbose] External bundle configured:"),H.info(` - URL: ${$.external}`),H.info(` - IV Session Key: ${$.ivSessionKey?"provided":"none"}`),H.info(` - Encrypted Checksum: ${$.encryptedChecksum?"provided":"none"}`)}if($.zip){if($.tus=!1,$.verbose)H.info("[Verbose] Upload method: ZIP (explicitly set via --zip)")}else if(!L.TUSUpload||$.external){if($.tus=!1,$.verbose)H.info("[Verbose] Upload method: Standard (TUS not available or external URL)")}else if($.tus=$.tus||L.TUSUploadForced,$.verbose)H.info(`[Verbose] Upload method: ${$.tus?"TUS (resumable)":"Standard"}`);if(!L.partialUpload||$.external){if($.delta=!1,$.verbose&&$.external)H.info("[Verbose] Delta updates disabled (not available with external URLs)")}else if($.delta=$.delta||$.partial||$.deltaOnly||$.partialOnly||L.partialUploadForced,$.verbose)H.info(`[Verbose] Delta updates: ${$.delta?"enabled":"disabled"}`);if($.encryptPartial&&V==="v1")H0("You cannot encrypt the partial update if you are not using the v2 encryption method");let P="5.30.0",u="6.30.0",y="7.30.0",c=!1;if($.delta&&V==="v2"&&!$.encryptPartial){let YD=e0(aM()),C=await y1("@capgo/capacitor-updater",YD,$.packageJson),E;try{E=C?eD(C):void 0}catch{E=void 0}if(C&&E&&FA(E,eD("6.14.4"))){if(H.info(`Auto-enabling partial update encryption for updater version ${E} (> 6.14.4)`),$.verbose)H.info("[Verbose] Partial encryption auto-enabled for updater >= 6.14.4");$.encryptPartial=!0}}if($.delta&&($.encryptPartial||V==="v2")){let YD=e0(aM()),C=await y1("@capgo/capacitor-updater",YD,$.packageJson),E;try{E=C?eD(C):void 0}catch{E=void 0}if(C&&E){if(c=!w$(E,P,u,y),$.verbose&&c)H.info(`[Verbose] Using hex checksum format for updater version ${E}`)}}if($.verbose&&$.delta)H.info("[Verbose] Preparing delta/partial update manifest...");let g=$.delta?await bDD(I,z,v,M,$.encryptPartial?V:"none",j,c):[];if($.verbose&&$.delta)H.info(`[Verbose] Delta manifest prepared with ${g.length} files`);if($.verbose)H.info("[Verbose] Creating version record in database...");let{error:e}=await mL(x,l);if(e)H0(`Cannot add bundle ${t(e)}`);if($.verbose)H.info("[Verbose] Version record created successfully");if($.tusChunkSize&&$.tusChunkSize>L.maxChunkSize)H.error(`Chunk size ${$.tusChunkSize} is greater than the maximum chunk size ${L.maxChunkSize}, using the maximum chunk size`),$.tusChunkSize=L.maxChunkSize;else if(!$.tusChunkSize)$.tusChunkSize=L.maxChunkSize;if($.verbose)H.info(`[Verbose] TUS chunk size: ${Math.floor($.tusChunkSize/1024/1024)} MB`);if(f&&(w||G||Q||F||Z||U||O)){if(!w||!G||!Q||!F||!Z||!U)H0("Missing argument, for S3 upload you need to provide a bucket name, endpoint, region, port, API key, and API secret");if(H.info("Uploading to S3"),$.verbose)H.info("[Verbose] S3 configuration:"),H.info(` - Endpoint: ${G}`),H.info(` - Region: ${Q}`),H.info(` - Bucket: ${w}`),H.info(` - Port: ${U}`),H.info(` - SSL: ${O?"enabled":"disabled"}`);let YD=O?`https://${G}`:`http://${G}`,C=new cw({endPoint:G,region:Q,port:U,pathStyle:!0,bucket:w,accessKey:F,secretKey:Z}),E=`${M}-${K}`,p=encodeURIComponent(E);if($.verbose)H.info(`[Verbose] Uploading to S3 as: ${E}`);if(await C.putObject(E,Uint8Array.from(f)),l.external_url=`${YD}/${p}`,l.storage_provider="external",$.verbose)H.info(`[Verbose] S3 upload complete, external URL: ${l.external_url}`)}else if(f){if(!$.partialOnly&&!$.deltaOnly){if($.verbose)H.info("[Verbose] Starting full bundle upload to Capgo Cloud...");await guD(z,x,M,K,v,f,$,$.tusChunkSize)}else if($.verbose)H.info("[Verbose] Skipping full bundle upload (delta-only mode)");let YD=null;try{if($.dryUpload){if($.delta=!1,$.verbose)H.info("[Verbose] Dry upload mode: skipping delta upload")}let E=l.session_key&&$.encryptPartial&&Y?{sessionKey:Y,ivSessionKey:l.session_key}:void 0;if($.verbose&&$.delta)H.info("[Verbose] Starting delta/partial file upload..."),H.info(` - Manifest entries: ${g.length}`),H.info(` - Encryption: ${E?"enabled":"disabled"}`);if(YD=$.delta?await hDD(z,g,I,M,v,E,$):null,$.verbose&&YD)H.info(`[Verbose] Delta upload complete with ${YD.length} files`)}catch(E){if(!!($.partial||$.delta||$.partialOnly||$.deltaOnly))throw E;if(H.info(`Failed to upload partial files to capgo cloud. Error: ${t(E)}. This is not a critical error, the bundle has been uploaded without the partial files`),$.verbose)H.info(`[Verbose] Delta upload error details: ${t(E)}`)}if(l.storage_provider="r2",l.manifest=YD,$.verbose)H.info("[Verbose] Updating version record with storage provider and manifest...");let{error:C}=await mL(x,l);if(C)H0(`Cannot update bundle ${t(C)}`);if($.verbose)H.info("[Verbose] Version record updated successfully")}if($.verbose)H.info("[Verbose] Checking app permissions...");let d=await u0(x,z,M,2,!1,!0);if($.verbose)H.info("[Verbose] Permissions:"),H.info(` - Upload: ${a5(d,2)?"yes":"no"}`),H.info(` - Write: ${a5(d,3)?"yes":"no"}`),H.info(` - Admin: ${a5(d,4)?"yes":"no"}`);if($.deleteLinkedBundleOnUpload&&a5(d,3)){if($.verbose)H.info(`[Verbose] Deleting linked bundle in channel ${_}...`);await muD(x,M,_)}else if($.deleteLinkedBundleOnUpload)H.warn("Cannot delete linked bundle on upload as a upload organization member");if(a5(d,3)){if($.verbose)H.info(`[Verbose] Setting bundle ${K} to channel ${_}...`);if(await cuD(x,z,!!$.bundleUrl,K,_,A,v,M,R,$.selfAssign),$.verbose)H.info("[Verbose] Channel updated successfully")}else H.warn("Cannot set channel as a upload organization member");if($.verbose)H.info("[Verbose] Sending upload event...");await AD(z,{channel:"app",event:"App Uploaded",icon:"⏫",user_id:v,tags:{"app-id":M,bundle:K},notify:!1},$.verbose),await AD(z,{channel:"app",event:"Bundle Uploaded",icon:"⏫",user_id:v,tags:{"app-id":M,bundle:K},notify:!1,notifyConsole:!0}).catch(()=>{});let r={success:!0,bundle:K,checksum:l.checksum??null,encryptionMethod:V,sessionKey:Y?Y.toString("base64"):void 0,ivSessionKey:typeof l.session_key==="string"?l.session_key:void 0,storageProvider:l.storage_provider};if($.verbose)H.info("[Verbose] Upload completed successfully:"),H.info(` - Bundle: ${r.bundle}`),H.info(` - Checksum: ${r.checksum}`),H.info(` - Encryption: ${r.encryptionMethod}`),H.info(` - Storage: ${r.storageProvider}`);if(W&&!r.skipped){let YD=$.showReplicationProgress;if(YD===void 0){let C=await c0({message:"Show Capgo global replication progress for this upload so you can confirm rollout in all regions?",initialValue:!1});YD=!bD(C)&&C}if(YD)await He({title:"Replicating your bundle in all regions to guarantee fast updates.",completeMessage:"Replication complete. Your update is now globally available.",interactive:W})}if(X&&!r.skipped)ND("Time to share your update to the world \uD83C\uDF0D");return r}vD();X6();O1();V3();kD();import{randomUUID as luD}from"node:crypto";import{existsSync as nuD,writeFileSync as iuD}from"node:fs";import{cwd as puD}from"node:process";var ruD=20;function ouD(D){console.log(JSON.stringify(D,null,2))}function S2(D){console.error(t(D))}async function gDD(D,$,X=!1){let{json:Y}=$,{bundle:J,path:Q}=$,F=!Y&&!X;try{if(F)await Z0();let Z=await ID(),w=mD(D,Z?.config),G=luD().split("-")[0],U=V4("",$.packageJson);if(J=J||U||`0.0.1-beta.${G}`,F)VD(`Zipping ${w}@${J}`);if(J&&!o5.test(J)){let R=`Your bundle name ${J}, is not valid it should follow semver convention : https://semver.org/`;if(!X)if(Y)S2({error:"invalid_semver"});else H.error(R);throw Error("Invalid bundle version format")}if(Q=Q||Z?.config?.webDir,!w||!J||!Q){if(!X)if(Y)S2({error:"missing_argument"});else H.error("Missing argument, you need to provide a appId and a bundle and a path, or be in a capacitor project");throw Error("Missing argument, you need to provide a appId and a bundle and a path, or be in a capacitor project")}if(F)H.info(`Started from path "${Q}"`);if(typeof $.codeCheck>"u"?!0:$.codeCheck){if(!E2(Q,"notifyAppReady")){if(!X)if(Y)S2({error:"notifyAppReady_not_in_source_code"});else H.error("notifyAppReady() is missing in the build folder of your app. see: https://capgo.app/docs/plugin/api/#notifyappready");throw Error("notifyAppReady() is missing in build folder")}if(!iw(Q)){if(!X)if(Y)S2({error:"index_html_not_found"});else H.error(`index.html is missing in the root folder of ${Q}`);throw Error("index.html is missing in root folder")}}let z=await qw(Q);if(F)H.info(`Zipped ${z.byteLength} bytes`);let q=F?A0():null;if(q)q.start("Calculating checksum");let B=e0(puD()),W=await y1("@capgo/capacitor-updater",B,$.packageJson);if(!W){if(!X)H.warn("Cannot find @capgo/capacitor-updater in node_modules, please install it first with your package manager");throw Error("Cannot find @capgo/capacitor-updater in node_modules, please install it first with your package manager")}let L=!1,M;try{M=W?eD(W):void 0}catch{M=void 0}if(M)L=!w$(M,void 0,void 0,"7.0.0");else if(W==="link:@capgo/capacitor-updater"){if(!X)H.warn("Using local @capgo/capacitor-updater. Assuming v7");L=!0}let I=await i6(z,$.keyV2||nuD(i1)||L?"sha256":"crc32");if(q)q.stop(`Checksum ${L?"SHA256":"CRC32"}: ${I}`);let K=Math.floor(z.byteLength/1024/1024);if(K>ruD&&F)H.warn(`WARNING !!
|
|
486
|
+
Bundle uploaded \uD83D\uDCAA in 0 seconds`),F.verbose)H.info("[Verbose] Dry upload mode - skipping actual upload");return}try{let q=await v$();if(F.verbose)H.info("[Verbose] Local config retrieved for upload");if(F.multipart!==void 0&&F.multipart||F.tus!==void 0&&F.tus){if(F.multipart)H.info("Uploading bundle with multipart is deprecated, we upload with TUS instead");else H.info("Uploading bundle with TUS protocol");if(F.verbose)H.info("[Verbose] Starting TUS resumable upload..."),H.info(` - Host: ${q.hostWeb}`),H.info(` - Chunk size: ${Math.floor(Z/1024/1024)} MB`);if(await ga(D,Q,J,X,Y,w,q,Z),U=!0,F.verbose)H.info("[Verbose] TUS upload completed, updating database with R2 path...");let B=`orgs/${J}/apps/${X}/${Y}.zip`,{error:W}=await $.from("app_versions").update({r2_path:B}).eq("name",Y).eq("app_id",X);if(W){if(H.error(`Cannot finish TUS upload ${t(W)}`),F.verbose)H.info(`[Verbose] Database update failed: ${t(W)}`);return Promise.reject(Error("Cannot finish TUS upload"))}if(F.verbose)H.info(`[Verbose] Database updated with R2 path: ${B}`)}else{if(F.verbose)H.info("[Verbose] Using standard upload (non-TUS), getting presigned URL...");let B=await ya($,X,Y);if(!B){if(H.error("Cannot get upload url"),F.verbose)H.info("[Verbose] Failed to retrieve presigned upload URL from database");return Promise.reject(Error("Cannot get upload url"))}if(F.verbose)H.info("[Verbose] Presigned URL obtained, uploading via HTTP PUT..."),H.info(` - Timeout: ${F.timeout||gL}ms`),H.info(" - Retry attempts: 5"),H.info(" - Content-Type: application/zip");let W=new AbortController,L=setTimeout(()=>W.abort(),F.timeout||gL);try{let M=await fetch(B,{method:"PUT",body:Q,headers:{"Content-Type":"application/zip"},signal:W.signal});if(!M.ok)throw Error(`HTTP error! status: ${M.status}`)}finally{clearTimeout(L)}if(F.verbose)H.info("[Verbose] HTTP PUT upload completed successfully")}}catch(q){let W=((performance.now()-G)/1000).toFixed(2);if(w.error(`Failed to upload bundle ( after ${W} seconds)`),F.verbose)H.info(`[Verbose] Upload failed after ${W} seconds`),H.info(`[Verbose] Error type: ${q instanceof Error?"Error":typeof q}`);if(q instanceof Error&&q.message.includes("HTTP error"))try{let L=q.message.match(/status: (\d+)/),M=L?L[1]:"unknown";H.error(`Upload failed with status ${M}: ${q.message}`)}catch{H.error(`Upload failed: ${q.message}`)}else{if(F.verbose)H.info(`[Verbose] Non-HTTP error: ${t(q)}`);if(!F.tus)H.error(`Cannot upload bundle ( try again with --tus option) ${t(q)}`);else H.error(`Cannot upload bundle please contact support if the issue persists ${t(q)}`)}if(F.verbose)H.info("[Verbose] Cleaning up failed version from database...");if(await ma($,X,Y),F.verbose)H.info("[Verbose] Failed version cleaned up");throw q instanceof Error?q:Error(String(q))}let z=((performance.now()-G)/1000).toFixed(2);if(w.stop(`Bundle uploaded \uD83D\uDCAA in (${z} seconds)`),F.verbose)H.info("[Verbose] Upload successful:"),H.info(` - Upload time: ${z} seconds`),H.info(` - Upload method: ${U?"TUS (resumable)":"Standard HTTP PUT"}`),H.info(` - Bundle size: ${Math.floor(Q.byteLength/1024)} KB`),H.info("[Verbose] Sending performance event...");if(await AD(D,{channel:"performance",event:U?"TUS upload zip performance":"Upload zip performance",icon:"\uD83D\uDE84",user_id:J,tags:{"app-id":X,time:z},notify:!1},F.verbose),F.verbose)H.info("[Verbose] Performance event sent successfully")}async function muD(D,$,X){let{data:Y,error:J}=await D.from("channels").select("version ( id, name, deleted )").eq("app_id",$).eq("name",X);if(J){H.error(`Cannot delete linked bundle on upload ${t(J)}`);return}if(Y.length===0){H.warn("No linked bundle found in the channel you are trying to upload to");return}let Q=Y[0].version;if(Q.deleted){H.warn("The linked bundle is already deleted");return}let{error:F}=await D.from("app_versions").update({deleted:!0}).eq("id",Q.id);if(F){H.error(`Cannot delete linked bundle on upload ${t(F)}`);return}H.info("Linked bundle deleted")}async function cuD(D,$,X,Y,J,Q,F,Z,w,G){let{data:U}=await D.rpc("get_app_versions",{apikey:$,name_version:Y,appid:Z}).single();if(!U)H0("Cannot get version id, cannot set channel");let{data:O}=await D.rpc("is_allowed_capgkey",{apikey:$,keymode:["write","all"]}).single();if(O){let{error:z,data:q}=await zw(D,{name:J,app_id:Z,created_by:Q,version:U,owner_org:F,...G?{allow_device_self_set:!0}:{}});if(z)H0(`Cannot set channel, the upload key is not allowed to do that, use the "all" for this. ${t(z)}`);let B=`${w.hostWeb}/app/${Z}/channel/${q.id}`;if(q?.public)H.info("Your update is now available in your public channel \uD83C\uDF89");else if(q?.id)H.info(`Link device to this bundle to try it: ${B}`);if(X)H.info(`Bundle url: ${B}`)}else H.warn("The upload key is not allowed to set the version in the channel")}async function duD(D,$,X){let{error:Y,data:J}=await $.from("apps").select("default_upload_channel").eq("app_id",D).single();if(Y)return H.warn("Cannot find default upload channel"),H.info(`You can set it here: ${X}/app/${D}/info`),null;return J.default_upload_channel}async function tM(D,$,X=!1){if(!X)VD(`Uploading with CLI version ${H$.version}`);let Y,J=v8();await Z0();let{s3Region:Q,s3Apikey:F,s3Apisecret:Z,s3BucketName:w,s3Endpoint:G,s3Port:U,s3SSL:O}=$;if($.verbose)H.info("[Verbose] Starting upload process with options:"),H.info(` - API key: ${$.apikey?"provided":"from saved key"}`),H.info(` - Path: ${$.path||"from capacitor config"}`),H.info(` - Channel: ${$.channel||"from default upload channel"}`),H.info(` - Bundle: ${$.bundle||"auto-detected"}`),H.info(` - External: ${$.external||"false"}`),H.info(` - Encryption: ${$.keyV2||$.keyDataV2?"v2":$.key===!1?"disabled":"auto"}`),H.info(` - Upload method: ${$.tus?"TUS":$.zip?"ZIP":"auto"}`),H.info(` - Delta updates: ${$.delta||$.partial?"enabled":"disabled"}`);let z=_uD($);if($.verbose)H.info("[Verbose] API key retrieved successfully");let q=await ID();if($.verbose)H.info("[Verbose] Capacitor config loaded successfully");let B=q?.config?.plugins?.CapacitorUpdater?.directUpdate==="always",W=!X&&!!xuD.isTTY&&!!SuD.isTTY;if(B&&$.delta===void 0){if(W){H.info("\uD83D\uDCA1 Direct Update (instant updates) is enabled in your config"),H.info(" Delta updates send only changed files instead of the full bundle");let YD=await d0({message:"Enable delta updates for this upload? (Recommended with Direct Update)",initialValue:!0});if(!bD(YD)&&YD){if($.delta=!0,$.verbose)H.info("[Verbose] Delta updates auto-enabled due to Direct Update configuration")}}else if(!X){if($.delta!==!1){if($.delta=!0,$.verbose)H.info("[Verbose] Delta updates auto-enabled in CI/CD mode due to Direct Update configuration")}}}let L=await xa();if($.verbose)H.info("[Verbose] Remote file config retrieved:"),H.info(` - Max upload length: ${Math.floor(L.maxUploadLength/1024/1024)} MB`),H.info(` - Alert upload size: ${Math.floor(L.alertUploadSize/1024/1024)} MB`),H.info(` - TUS upload: ${L.TUSUpload?"enabled":"disabled"}`),H.info(` - TUS upload forced: ${L.TUSUploadForced?"yes":"no"}`),H.info(` - Partial upload: ${L.partialUpload?"enabled":"disabled"}`),H.info(` - Max chunk size: ${Math.floor(L.maxChunkSize/1024/1024)} MB`);let{appid:M,path:I}=kuD(D,$,q.config);if($.verbose)H.info(`[Verbose] App ID: ${M}, Build path: ${I}`);let K=await vuD(q.config,$);if($.verbose)H.info(`[Verbose] Bundle version: ${K}`);let N=$.external?"external":"r2-direct",V="none";if($.autoSetBundle){if(await Ca({version:K}),$.verbose)H.info("[Verbose] Auto-set bundle version in capacitor.config.json")}if(fuD($,I),$.verbose)H.info("[Verbose] Code check passed (notifyAppReady found and index.html present)");H.info(`Upload ${M}@${K} started from path "${I}" to Capgo cloud`);let R=await v$();if($.verbose)H.info(`[Verbose] Local config loaded: host=${R.hostWeb}`);if($.supaHost&&$.supaAnon){if(H.info("Using custom supabase instance from provided options"),R.supaHost=$.supaHost,R.supaKey=$.supaAnon,$.verbose)H.info(`[Verbose] Custom Supabase host: ${$.supaHost}`)}let x=await jD(z,$.supaHost,$.supaAnon);if($.verbose)H.info("[Verbose] Supabase client created successfully");await m0(x,M,X);let A=await xD(x,z,["write","all","upload"]);if($.verbose)H.info(`[Verbose] User verified successfully, user_id: ${A}`);let _=$.channel||await duD(M,x,R.hostWeb)||"production";if($.verbose)H.info(`[Verbose] Target channel: ${_}`);let v=await l0(x,M);if($.verbose)H.info(`[Verbose] Organization ID: ${v}`);if(await _a(x,v,H$.version),$.verbose)H.info("[Verbose] Remote CLI messages checked");if(await fa(x,v,z,M,!0),$.verbose)H.info("[Verbose] Plan validation passed");if($.verbose)H.info("[Verbose] Trial check completed");if($.verbose)H.info(`[Verbose] Checking compatibility with channel ${_}...`);let{nativePackages:S,minUpdateVersion:h}=await yuD(x,J,$,_,M,K);if($.verbose)H.info("[Verbose] Compatibility check completed:"),H.info(` - Native packages: ${S?S.length:0}`),H.info(` - Min update version: ${h||"none"}`);if($.verbose)H.info(`[Verbose] Checking if version ${K} already exists...`);let b=await buD(x,M,K,$.versionExistsOk,W);if($.verbose)H.info(`[Verbose] Version exists check: ${b?typeof b==="string"?`retry with ${b}`:"yes (skipping)":"no (continuing)"}`);if(b===!0)return{success:!0,skipped:!0,reason:"VERSION_EXISTS",bundle:K,checksum:null,encryptionMethod:V,storageProvider:N};if(typeof b==="string")return H.info(`Retrying upload with new version: ${b}`),tM(D,{...$,bundle:b},X);if($.external&&!$.external.startsWith("https://"))H0(`External link should should start with "https://" current is "${$.external}"`);if($.deleteLinkedBundleOnUpload)H.warn("Deleting linked bundle on upload is destructive, it will delete the currently linked bundle in the channel you are trying to upload to."),H.warn("Please make sure you want to do this, if you are not sure, please do not use this option.");let l={name:K,app_id:M,session_key:void 0,external_url:$.external,storage_provider:N,min_update_version:h,native_packages:S,owner_org:v,user_id:A,checksum:void 0,link:$.link||null,comment:$.comment||null,key_id:void 0,cli_version:H$.version},f=null,j="";if(!$.external){if($.verbose)H.info(`[Verbose] Preparing bundle file from path: ${I}`);let YD=q.config?.plugins?.CapacitorUpdater?.publicKey,{zipped:C,ivSessionKey:E,checksum:p,sessionKey:k,encryptionMethod:zD,finalKeyData:a,keyId:WD}=await huD(I,$,z,v,M,L.maxUploadLength,L.alertUploadSize,YD);if(l.session_key=E,l.checksum=p,l.key_id=WD||void 0,Y=k,f=C,V=zD,j=a,$.verbose)H.info("[Verbose] Bundle prepared:"),H.info(` - Size: ${Math.floor((C?.byteLength??0)/1024)} KB`),H.info(` - Checksum: ${p}`),H.info(` - Encryption: ${zD}`),H.info(` - IV Session Key: ${E?"present":"none"}`),H.info(` - Key ID: ${WD||"none"}`);if(!$.ignoreChecksumCheck){if($.verbose)H.info("[Verbose] Checking for duplicate checksum...");if(await na(x,M,_,p),$.verbose)H.info("[Verbose] Checksum is unique")}}else{if($.verbose)H.info(`[Verbose] Using external URL: ${$.external}`);if(await AD(z,{channel:"app",event:"App external",icon:"\uD83D\uDCE4",user_id:v,tags:{"app-id":M},notify:!1},$.verbose),l.session_key=$.ivSessionKey,l.checksum=$.encryptedChecksum,$.verbose)H.info("[Verbose] External bundle configured:"),H.info(` - URL: ${$.external}`),H.info(` - IV Session Key: ${$.ivSessionKey?"provided":"none"}`),H.info(` - Encrypted Checksum: ${$.encryptedChecksum?"provided":"none"}`)}if($.zip){if($.tus=!1,$.verbose)H.info("[Verbose] Upload method: ZIP (explicitly set via --zip)")}else if(!L.TUSUpload||$.external){if($.tus=!1,$.verbose)H.info("[Verbose] Upload method: Standard (TUS not available or external URL)")}else if($.tus=$.tus||L.TUSUploadForced,$.verbose)H.info(`[Verbose] Upload method: ${$.tus?"TUS (resumable)":"Standard"}`);if(!L.partialUpload||$.external){if($.delta=!1,$.verbose&&$.external)H.info("[Verbose] Delta updates disabled (not available with external URLs)")}else if($.delta=$.delta||$.partial||$.deltaOnly||$.partialOnly||L.partialUploadForced,$.verbose)H.info(`[Verbose] Delta updates: ${$.delta?"enabled":"disabled"}`);if($.encryptPartial&&V==="v1")H0("You cannot encrypt the partial update if you are not using the v2 encryption method");let P="5.30.0",u="6.30.0",y="7.30.0",c=!1;if($.delta&&V==="v2"&&!$.encryptPartial){let YD=e0(aM()),C=await y1("@capgo/capacitor-updater",YD,$.packageJson),E;try{E=C?eD(C):void 0}catch{E=void 0}if(C&&E&&FA(E,eD("6.14.4"))){if(H.info(`Auto-enabling partial update encryption for updater version ${E} (> 6.14.4)`),$.verbose)H.info("[Verbose] Partial encryption auto-enabled for updater >= 6.14.4");$.encryptPartial=!0}}if($.delta&&($.encryptPartial||V==="v2")){let YD=e0(aM()),C=await y1("@capgo/capacitor-updater",YD,$.packageJson),E;try{E=C?eD(C):void 0}catch{E=void 0}if(C&&E){if(c=!w$(E,P,u,y),$.verbose&&c)H.info(`[Verbose] Using hex checksum format for updater version ${E}`)}}if($.verbose&&$.delta)H.info("[Verbose] Preparing delta/partial update manifest...");let g=$.delta?await bDD(I,z,v,M,$.encryptPartial?V:"none",j,c):[];if($.verbose&&$.delta)H.info(`[Verbose] Delta manifest prepared with ${g.length} files`);if($.verbose)H.info("[Verbose] Creating version record in database...");let{error:e}=await mL(x,l);if(e)H0(`Cannot add bundle ${t(e)}`);if($.verbose)H.info("[Verbose] Version record created successfully");if($.tusChunkSize&&$.tusChunkSize>L.maxChunkSize)H.error(`Chunk size ${$.tusChunkSize} is greater than the maximum chunk size ${L.maxChunkSize}, using the maximum chunk size`),$.tusChunkSize=L.maxChunkSize;else if(!$.tusChunkSize)$.tusChunkSize=L.maxChunkSize;if($.verbose)H.info(`[Verbose] TUS chunk size: ${Math.floor($.tusChunkSize/1024/1024)} MB`);if(f&&(w||G||Q||F||Z||U||O)){if(!w||!G||!Q||!F||!Z||!U)H0("Missing argument, for S3 upload you need to provide a bucket name, endpoint, region, port, API key, and API secret");if(H.info("Uploading to S3"),$.verbose)H.info("[Verbose] S3 configuration:"),H.info(` - Endpoint: ${G}`),H.info(` - Region: ${Q}`),H.info(` - Bucket: ${w}`),H.info(` - Port: ${U}`),H.info(` - SSL: ${O?"enabled":"disabled"}`);let YD=O?`https://${G}`:`http://${G}`,C=new cw({endPoint:G,region:Q,port:U,pathStyle:!0,bucket:w,accessKey:F,secretKey:Z}),E=`${M}-${K}`,p=encodeURIComponent(E);if($.verbose)H.info(`[Verbose] Uploading to S3 as: ${E}`);if(await C.putObject(E,Uint8Array.from(f)),l.external_url=`${YD}/${p}`,l.storage_provider="external",$.verbose)H.info(`[Verbose] S3 upload complete, external URL: ${l.external_url}`)}else if(f){if(!$.partialOnly&&!$.deltaOnly){if($.verbose)H.info("[Verbose] Starting full bundle upload to Capgo Cloud...");await guD(z,x,M,K,v,f,$,$.tusChunkSize)}else if($.verbose)H.info("[Verbose] Skipping full bundle upload (delta-only mode)");let YD=null;try{if($.dryUpload){if($.delta=!1,$.verbose)H.info("[Verbose] Dry upload mode: skipping delta upload")}let E=l.session_key&&$.encryptPartial&&Y?{sessionKey:Y,ivSessionKey:l.session_key}:void 0;if($.verbose&&$.delta)H.info("[Verbose] Starting delta/partial file upload..."),H.info(` - Manifest entries: ${g.length}`),H.info(` - Encryption: ${E?"enabled":"disabled"}`);if(YD=$.delta?await hDD(z,g,I,M,v,E,$):null,$.verbose&&YD)H.info(`[Verbose] Delta upload complete with ${YD.length} files`)}catch(E){if(!!($.partial||$.delta||$.partialOnly||$.deltaOnly))throw E;if(H.info(`Failed to upload partial files to capgo cloud. Error: ${t(E)}. This is not a critical error, the bundle has been uploaded without the partial files`),$.verbose)H.info(`[Verbose] Delta upload error details: ${t(E)}`)}if(l.storage_provider="r2",l.manifest=YD,$.verbose)H.info("[Verbose] Updating version record with storage provider and manifest...");let{error:C}=await mL(x,l);if(C)H0(`Cannot update bundle ${t(C)}`);if($.verbose)H.info("[Verbose] Version record updated successfully")}if($.verbose)H.info("[Verbose] Checking app permissions...");let d=await u0(x,z,M,2,!1,!0);if($.verbose)H.info("[Verbose] Permissions:"),H.info(` - Upload: ${a5(d,2)?"yes":"no"}`),H.info(` - Write: ${a5(d,3)?"yes":"no"}`),H.info(` - Admin: ${a5(d,4)?"yes":"no"}`);if($.deleteLinkedBundleOnUpload&&a5(d,3)){if($.verbose)H.info(`[Verbose] Deleting linked bundle in channel ${_}...`);await muD(x,M,_)}else if($.deleteLinkedBundleOnUpload)H.warn("Cannot delete linked bundle on upload as a upload organization member");if(a5(d,3)){if($.verbose)H.info(`[Verbose] Setting bundle ${K} to channel ${_}...`);if(await cuD(x,z,!!$.bundleUrl,K,_,A,v,M,R,$.selfAssign),$.verbose)H.info("[Verbose] Channel updated successfully")}else H.warn("Cannot set channel as a upload organization member");if($.verbose)H.info("[Verbose] Sending upload event...");await AD(z,{channel:"app",event:"App Uploaded",icon:"⏫",user_id:v,tags:{"app-id":M,bundle:K},notify:!1},$.verbose),await AD(z,{channel:"app",event:"Bundle Uploaded",icon:"⏫",user_id:v,tags:{"app-id":M,bundle:K},notify:!1,notifyConsole:!0}).catch(()=>{});let r={success:!0,bundle:K,checksum:l.checksum??null,encryptionMethod:V,sessionKey:Y?Y.toString("base64"):void 0,ivSessionKey:typeof l.session_key==="string"?l.session_key:void 0,storageProvider:l.storage_provider};if($.verbose)H.info("[Verbose] Upload completed successfully:"),H.info(` - Bundle: ${r.bundle}`),H.info(` - Checksum: ${r.checksum}`),H.info(` - Encryption: ${r.encryptionMethod}`),H.info(` - Storage: ${r.storageProvider}`);if(W&&!r.skipped){let YD=$.showReplicationProgress;if(YD===void 0){let C=await d0({message:"Show Capgo global replication progress for this upload so you can confirm rollout in all regions?",initialValue:!1});YD=!bD(C)&&C}if(YD)await He({title:"Replicating your bundle in all regions to guarantee fast updates.",completeMessage:"Replication complete. Your update is now globally available.",interactive:W})}if(X&&!r.skipped)ND("Time to share your update to the world \uD83C\uDF0D");return r}vD();X6();O1();V3();kD();import{randomUUID as luD}from"node:crypto";import{existsSync as nuD,writeFileSync as iuD}from"node:fs";import{cwd as puD}from"node:process";var ruD=20;function ouD(D){console.log(JSON.stringify(D,null,2))}function S2(D){console.error(t(D))}async function gDD(D,$,X=!1){let{json:Y}=$,{bundle:J,path:Q}=$,F=!Y&&!X;try{if(F)await Z0();let Z=await ID(),w=mD(D,Z?.config),G=luD().split("-")[0],U=V4("",$.packageJson);if(J=J||U||`0.0.1-beta.${G}`,F)VD(`Zipping ${w}@${J}`);if(J&&!o5.test(J)){let R=`Your bundle name ${J}, is not valid it should follow semver convention : https://semver.org/`;if(!X)if(Y)S2({error:"invalid_semver"});else H.error(R);throw Error("Invalid bundle version format")}if(Q=Q||Z?.config?.webDir,!w||!J||!Q){if(!X)if(Y)S2({error:"missing_argument"});else H.error("Missing argument, you need to provide a appId and a bundle and a path, or be in a capacitor project");throw Error("Missing argument, you need to provide a appId and a bundle and a path, or be in a capacitor project")}if(F)H.info(`Started from path "${Q}"`);if(typeof $.codeCheck>"u"?!0:$.codeCheck){if(!E2(Q,"notifyAppReady")){if(!X)if(Y)S2({error:"notifyAppReady_not_in_source_code"});else H.error("notifyAppReady() is missing in the build folder of your app. see: https://capgo.app/docs/plugin/api/#notifyappready");throw Error("notifyAppReady() is missing in build folder")}if(!iw(Q)){if(!X)if(Y)S2({error:"index_html_not_found"});else H.error(`index.html is missing in the root folder of ${Q}`);throw Error("index.html is missing in root folder")}}let z=await qw(Q);if(F)H.info(`Zipped ${z.byteLength} bytes`);let q=F?A0():null;if(q)q.start("Calculating checksum");let B=e0(puD()),W=await y1("@capgo/capacitor-updater",B,$.packageJson);if(!W){if(!X)H.warn("Cannot find @capgo/capacitor-updater in node_modules, please install it first with your package manager");throw Error("Cannot find @capgo/capacitor-updater in node_modules, please install it first with your package manager")}let L=!1,M;try{M=W?eD(W):void 0}catch{M=void 0}if(M)L=!w$(M,void 0,void 0,"7.0.0");else if(W==="link:@capgo/capacitor-updater"){if(!X)H.warn("Using local @capgo/capacitor-updater. Assuming v7");L=!0}let I=await i6(z,$.keyV2||nuD(i1)||L?"sha256":"crc32");if(q)q.stop(`Checksum ${L?"SHA256":"CRC32"}: ${I}`);let K=Math.floor(z.byteLength/1024/1024);if(K>ruD&&F)H.warn(`WARNING !!
|
|
487
487
|
The bundle size is ${K} Mb, this may take a while to download for users
|
|
488
488
|
`),H.warn(`Learn how to optimize your assets https://capgo.app/blog/optimise-your-images-for-updates/
|
|
489
|
-
`);let N=F?A0():null,V=$.name||`${w}_${J}.zip`;if(N)N.start(`Saving to ${V}`);if(iuD(V,z),N)N.stop(`Saved to ${V}`);if(F)ND("Done ✅");if(!X&&Y)ouD({bundle:J,filename:V,checksum:I});return{bundle:J,filename:V,checksum:I}}catch(Z){if(!X)if(Y)S2(Z);else H.error(t(Z));throw Z instanceof Error?Z:Error(String(Z))}}vD();kD();async function mDD(D,$,X,Y=!1){if(!Y)VD("Create channel");X.apikey=X.apikey||BD();let J=await ID().catch(()=>{return});if($=mD($,J?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let Q=await jD(X.apikey,X.supaHost,X.supaAnon);if(await m0(Q,$,Y),await xD(Q,X.apikey,["write","all"]),await u0(Q,X.apikey,$,4,Y,!0),!Y)H.info(`Creating channel ${$}#${D} to Capgo`);let F=await nL(Q,$);if(!F){if(!Y)H.error("Cannot find default version for channel creation, please contact Capgo support \uD83E\uDD28");throw Error("Cannot find default version for channel creation")}let Z=await
|
|
490
|
-
${t(G.error)}`);throw Error(`Cannot create channel: ${t(G.error)}`)}if(await AD(X.apikey,{channel:"channel",event:"Create channel",icon:"✅",user_id:Z,tags:{"app-id":$,channel:D},notify:!1}).catch(()=>{}),!Y)H.success("Channel created ✅"),ND("Done ✅");return G.data??!0}vD();kD();async function cDD(D,$,X,Y=!1){let{quiet:J}=X;if(!J&&!Y)VD("List current bundle");X.apikey=X.apikey||BD(J);let Q=await ID();if($=mD($,Q?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let F=await jD(X.apikey,X.supaHost,X.supaAnon);if(await m0(F,$,Y),await xD(F,X.apikey,["write","all","read"]),await u0(F,X.apikey,$,1,Y,!0),!D){if(!Y)H.error("Please provide a channel to get the bundle from.");throw Error("Channel name missing")}let{data:Z,error:w}=await F.from("channels").select("version ( name )").eq("name",D).eq("app_id",$).limit(1);if(w||!Z?.length){if(!Y)H.error(`Error retrieving channel ${D} for app ${$}. Perhaps the channel does not exist?`);throw Error(`Channel ${D} not found for app ${$}`)}let{version:G}=Z[0];if(!G){if(!Y)H.error(`Error retrieving channel ${D} for app ${$}. Perhaps the channel does not exist?`);throw Error(`Channel ${D} does not have a bundle linked`)}if(!Y)if(!J)H.info(`Current bundle for channel ${D} is ${G.name}`);else H.info(G.name);return G.name}vD();kD();async function dDD(D,$,X,Y=!1){if(!Y)VD("Delete channel");X.apikey=X.apikey||BD();let J=await ID();if($=mD($,J?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let Q=await jD(X.apikey,X.supaHost,X.supaAnon);await m0(Q,$,Y);let F=await xD(Q,X.apikey,["all"]);if(await u0(Q,X.apikey,$,4,Y,!0),X.deleteBundle&&!Y)H.info(`Deleting bundle ${$}#${D} from Capgo`);if(X.deleteBundle){let z=await sa(Q,$,D);if(z?.name&&!Y)H.info(`Deleting bundle ${z.name} from Capgo`);if(z?.name)await iL(Q,$,z.name)}let{data:Z,error:w}=await aa(Q,$,D);if(w||!Z){if(!Y)H.error(`Channel ${D} not found`);if(X.successIfNotFound){if(!Y)H.success(`Channel ${D} not found and successIfNotFound is true`);return!0}throw Error(`Channel ${D} not found`)}let{error:G}=await ta(Q,$,Z.id);if(G){if(!Y)H.error(`Cannot delete channel devices: ${t(G)}`);throw Error(`Cannot delete channel devices: ${t(G)}`)}if(!Y)H.info(`Deleting channel ${$}#${D} from Capgo`);let U=await oa(Q,D,$,F);if(U.error){if(!Y)H.error(`Cannot delete Channel \uD83D\uDE40 ${t(U.error)}`);throw Error(`Cannot delete channel: ${t(U.error)}`)}let O=await d0(Q,$);if(await AD(X.apikey,{channel:"channel",event:"Delete channel",icon:"✅",user_id:O,tags:{"app-id":$,channel:D},notify:!1}).catch(()=>{}),!Y)H.success("Channel deleted"),ND("Done ✅");return!0}vD();kD();async function lDD(D,$,X=!1){if(!X)VD("List channels");$.apikey=$.apikey||BD();let Y=await ID();if(D=mD(D,Y?.config),!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let J=await jD($.apikey,$.supaHost,$.supaAnon);await m0(J,D,X);let Q=await xD(J,$.apikey,["write","all","read","upload"]);if(await u0(J,$.apikey,D,1,X,!0),!X)H.info("Querying available channels in Capgo");let F=await Dt(J,D);if(!X)H.info(`Active channels in Capgo: ${F?.length??0}`),ea(F);if(await AD($.apikey,{channel:"channel",event:"List channel",icon:"✅",user_id:Q,tags:{"app-id":D},notify:!1}).catch(()=>{}),!X)ND("Done ✅");return F}vD();D6();kD();function nDD(D){let $=new R0;$.headers=["Package","Local","Remote","Status","Details"],$.theme=R0.roundTheme,$.rows=[];for(let X of D){let{name:Y,localVersion:J,remoteVersion:Q}=X,F=_8(X),Z=F.compatible?"✅":"❌";$.rows.push([Y,J||"-",Q||"-",Z,F.message])}H.info($.toString())}var iDD=["major","minor","metadata","patch","none"];async function pDD(D,$,X,Y=!1){if(!Y)VD("Set channel");X.apikey=X.apikey||BD();let J=await ID();if($=mD($,J?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(!D){if(!Y)H.error("Missing argument, you need to provide a channel");throw Error("Missing channel id")}let Q=await jD(X.apikey,X.supaHost,X.supaAnon);await m0(Q,$,Y);let F=await xD(Q,X.apikey,["write","all"]);await u0(Q,X.apikey,$,4,Y,!0);let Z=await d0(Q,$),{bundle:w,state:G,downgrade:U,latest:O,latestRemote:z,ios:q,android:B,selfAssign:W,disableAutoUpdate:L,dev:M,emulator:I,device:K,prod:N}=X;if(O&&w){if(!Y)H.error("Cannot set latest and bundle at the same time");throw Error("Cannot set both latest and bundle simultaneously")}if(z&&w){if(!Y)H.error("Cannot set latest remote and bundle at the same time");throw Error("Cannot set both latest remote and bundle simultaneously")}if(z&&O){if(!Y)H.error("Cannot set latest remote and latest at the same time");throw Error("Cannot set both latest remote and latest simultaneously")}if(w==null&&G==null&&O==null&&z==null&&U==null&&q==null&&B==null&&W==null&&M==null&&I==null&&K==null&&N==null&&L==null){if(!Y)H.error("Missing argument, you need to provide a option to set");throw Error("No channel option provided")}await ka(Q,Z,X.apikey,$);let V={created_by:F,app_id:$,name:D,owner_org:Z,version:void 0},{error:R}=await Q.from("channels").select().eq("app_id",$).eq("name",D).single();if(R){if(!Y)H.error(`Cannot find channel ${D}`);throw Error(`Cannot find channel ${D}`)}let x=O?J?.config?.plugins?.CapacitorUpdater?.version||V4("",X.packageJson):w;if(x!=null){let{data:_,error:v}=await Q.from("app_versions").select().eq("app_id",$).eq("name",x).eq("user_id",F).eq("deleted",!1).single();if(v||!_){if(!Y)H.error(`Cannot find version ${x}`);throw Error(`Cannot find version ${x}`)}if(!X.ignoreMetadataCheck){let{finalCompatibility:S,localDependencies:h}=await lL(Q,$,D,_.native_packages??[]),b=S.filter((l)=>!L4(l));if(h.length>0&&b.length>0){if(!Y)H.warn(`Bundle NOT compatible with ${D} channel`),H.warn(""),nDD(S),H.warn(""),H.warn("An app store update may be required for these changes to take effect.");throw Error(`Bundle is not compatible with ${D} channel`)}if(!Y)if(h.length===0&&S.length>0)H.info(`Ignoring check compatibility with ${D} channel because the bundle does not contain any native packages`);else H.info(`Bundle is compatible with ${D} channel`)}if(!Y)H.info(`Set ${$} channel: ${D} to @${x}`);V.version=_.id}if(z){let{data:_,error:v}=await Q.from("app_versions").select().eq("app_id",$).eq("user_id",F).eq("deleted",!1).order("created_at",{ascending:!1}).single();if(v||!_){if(!Y)H.error("Cannot find latest remote version");throw Error("Cannot find latest remote version")}if(!X.ignoreMetadataCheck){let{finalCompatibility:S}=await lL(Q,$,D,_.native_packages??[]);if(S.filter((b)=>!L4(b)).length>0){if(!Y)H.warn(`Bundle NOT compatible with ${D} channel`),H.warn(""),nDD(S),H.warn(""),H.warn("An app store update may be required for these changes to take effect.");throw Error(`Latest remote bundle is not compatible with ${D} channel`)}}if(!Y)H.info(`Set ${$} channel: ${D} to @${_.name}`);V.version=_.id}if(G!=null){if(G!=="normal"&&G!=="default"){if(!Y)H.error(`State ${G} is not known. The possible values are: normal, default.`);throw Error(`Unknown state ${G}. Expected normal or default`)}if(!Y)H.info(`Set ${$} channel: ${D} to ${G}`);V.public=G==="default"}if(U!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${U?"allow":"disallow"} downgrade`);V.disable_auto_update_under_native=!U}if(q!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${q?"allow":"disallow"} ios update`);V.ios=!!q}if(B!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${B?"allow":"disallow"} android update`);V.android=!!B}if(W!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${W?"allow":"disallow"} self assign to this channel`);V.allow_device_self_set=!!W}if(M!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${M?"allow":"disallow"} dev devices`);V.allow_dev=!!M}if(I!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${I?"allow":"disallow"} emulator devices`);V.allow_emulator=!!I}if(K!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${K?"allow":"disallow"} physical devices`);V.allow_device=!!K}if(N!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${N?"allow":"disallow"} prod builds`);V.allow_prod=!!N}if(L!=null){let _=L.toLowerCase();if(!iDD.includes(_)){if(!Y)H.error(`Channel strategy ${_} is not known. The possible values are: ${iDD.join(", ")}.`);throw Error(`Unknown channel strategy ${_}`)}if(_==="metadata")_="version_number";if(V.disable_auto_update=_,!Y)H.info(`Set ${$} channel: ${D} to ${_} disable update strategy to this channel`)}let{error:A}=await zw(Q,V);if(A){if(!Y)H.error('Cannot set channel the upload key is not allowed to do that, use the "all" for this.');throw Error("Upload key is not allowed to set this channel")}if(await AD(X.apikey,{channel:"channel",event:"Set channel",icon:"✅",user_id:Z,tags:{"app-id":$},notify:!1}).catch(()=>{}),!Y)ND("Done ✅");return!0}vD();import{existsSync as W7,readFileSync as auD,unlinkSync as rDD,writeFileSync as oDD}from"node:fs";O1();BF();kD();function aDD(D){return D.plugins??={},D.plugins.extConfig??={},D.plugins.CapacitorUpdater??={},D.plugins.CapacitorUpdater}async function tDD(D,$=!1){if(!$)VD("Save keys \uD83D\uDD11");let X=await ID(),Y=D.key||R6,J=D.keyData||"";if(!W7(Y)&&!J){if(!$)H.error(`Cannot find a public key at ${Y} or as keyData option or in ${X.path}`);throw Error("Missing public key")}if(W7(Y))J=auD(Y,"utf8");if(!J.startsWith("-----BEGIN RSA PUBLIC KEY-----")){if(!$)H.error("The public key provided is not a valid RSA Public key");throw Error("Invalid RSA public key")}if(X?.config){let Q=aDD(X.config);if(Q.privateKey){if(delete Q.privateKey,!$)H.info("Old private key deleted from config file");if($?D.setupChannel??!1:D.setupChannel??await c0({message:"Do you want to setup encryption with the new channel in order to support old apps and facilitate the migration?"}))Q.defaultChannel="encryption_v2"}Q.publicKey=J,await q5(X)}if(!$)H.success(`Public key saved into ${X.path} file in local directory`),H.success("Your app will decode the zip archive with this key");return!0}async function sDD(D,$=!1){if(!$)VD("Deleting old private key \uD83D\uDDD1️");let X=await ID(),Y=X?.config?.plugins?.CapacitorUpdater;if(Y?.privateKey){if(delete Y.privateKey,await q5(X),W7(r5))try{if(rDD(r5),!$)H.success(`Old private key file deleted: ${r5}`)}catch(J){if(!$)H.error(`Failed to delete old private key file: ${r5} (${String(J)})`)}if(W7(Fw))try{if(rDD(Fw),!$)H.success(`Old public key file deleted: ${Fw}`)}catch(J){if(!$)H.error(`Failed to delete old public key file: ${R6} (${String(J)})`)}if(!$)H.success(`Old private key deleted from ${X.path} file`),ND("Done ✅");return!0}if(!$)H.info("No old private key found in config file");return!1}async function eDD(D,$=!1){if(!$)VD("Create keys \uD83D\uDD11");let{publicKey:X,privateKey:Y}=es();if(W7(R6)&&!D.force){if(!$)H.error("Public Key already exists, use --force to overwrite");throw Error("Public key already exists")}if(oDD(R6,X),W7(i1)&&!D.force){if(!$)H.error("Private Key already exists, use --force to overwrite");throw Error("Private key already exists")}oDD(i1,Y);let J=await ID();if(J){let Q=aDD(J.config);if(Q.privateKey){if(delete Q.privateKey,!$)H.info("Old private key deleted from config file");if($?D.setupChannel??!1:D.setupChannel??await c0({message:"Do you want to setup encryption with the new channel in order to support old apps and facilitate the migration?"}))Q.defaultChannel="encryption_v2"}Q.publicKey=X,await q5(J)}if(!$){H.success("Your RSA key has been generated"),H.success(`Private key saved in ${i1}`),H.success("This key will be used to encrypt your bundle before sending it to Capgo"),H.success("Keep it safe"),H.success("Then make it unreadable by Capgo and unmodifiable by anyone"),H.success(`Public key saved in ${J.path}`),H.success("Your app will be the only one having it"),H.success("Only your users can decrypt your update"),H.success("Only you can send them an update");try{await ia(void 0,void 0,void 0,{validateIosUpdater:!0}),ND("Done ✅")}catch(Q){if(Q instanceof Error&&Q.message==="Capacitor sync cancelled")return!0;throw Q}}return!0}vD();O1();kD();import{existsSync as tuD}from"node:fs";import{homedir as suD}from"node:os";async function D0D(D,$,X=!1){if(!X)VD("Login to Capgo");if(!D&&!X){let F=await TI({message:"Enter your API key:",mask:"*"});if(bD(F))throw H.error("Login cancelled"),Error("Login cancelled");D=F}if(!D){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}await Z0();let{local:Y}=$;if(Y&&!tuD(".git")){if(!X)H.error("To use local you should be in a git repository");throw Error("Not in a git repository")}let J=await jD(D,$.supaHost,$.supaAnon),Q=await xD(J,D,["write","all","upload"]);if(Y)await uw(".capgo",`${D}
|
|
489
|
+
`);let N=F?A0():null,V=$.name||`${w}_${J}.zip`;if(N)N.start(`Saving to ${V}`);if(iuD(V,z),N)N.stop(`Saved to ${V}`);if(F)ND("Done ✅");if(!X&&Y)ouD({bundle:J,filename:V,checksum:I});return{bundle:J,filename:V,checksum:I}}catch(Z){if(!X)if(Y)S2(Z);else H.error(t(Z));throw Z instanceof Error?Z:Error(String(Z))}}vD();kD();async function mDD(D,$,X,Y=!1){if(!Y)VD("Create channel");X.apikey=X.apikey||BD();let J=await ID().catch(()=>{return});if($=mD($,J?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let Q=await jD(X.apikey,X.supaHost,X.supaAnon);if(await m0(Q,$,Y),await xD(Q,X.apikey,["write","all"]),await u0(Q,X.apikey,$,4,Y,!0),!Y)H.info(`Creating channel ${$}#${D} to Capgo`);let F=await nL(Q,$);if(!F){if(!Y)H.error("Cannot find default version for channel creation, please contact Capgo support \uD83E\uDD28");throw Error("Cannot find default version for channel creation")}let Z=await l0(Q,$),w=await xD(Q,X.apikey,["write","all"]),G=await ra(Q,{name:D,app_id:$,version:F.id,created_by:w,owner_org:Z,allow_device_self_set:X.selfAssign??!1,public:X.default??!1});if(G.error){if(!Y)H.error(`Cannot create Channel \uD83D\uDE40
|
|
490
|
+
${t(G.error)}`);throw Error(`Cannot create channel: ${t(G.error)}`)}if(await AD(X.apikey,{channel:"channel",event:"Create channel",icon:"✅",user_id:Z,tags:{"app-id":$,channel:D},notify:!1}).catch(()=>{}),!Y)H.success("Channel created ✅"),ND("Done ✅");return G.data??!0}vD();kD();async function cDD(D,$,X,Y=!1){let{quiet:J}=X;if(!J&&!Y)VD("List current bundle");X.apikey=X.apikey||BD(J);let Q=await ID();if($=mD($,Q?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let F=await jD(X.apikey,X.supaHost,X.supaAnon);if(await m0(F,$,Y),await xD(F,X.apikey,["write","all","read"]),await u0(F,X.apikey,$,1,Y,!0),!D){if(!Y)H.error("Please provide a channel to get the bundle from.");throw Error("Channel name missing")}let{data:Z,error:w}=await F.from("channels").select("version ( name )").eq("name",D).eq("app_id",$).limit(1);if(w||!Z?.length){if(!Y)H.error(`Error retrieving channel ${D} for app ${$}. Perhaps the channel does not exist?`);throw Error(`Channel ${D} not found for app ${$}`)}let{version:G}=Z[0];if(!G){if(!Y)H.error(`Error retrieving channel ${D} for app ${$}. Perhaps the channel does not exist?`);throw Error(`Channel ${D} does not have a bundle linked`)}if(!Y)if(!J)H.info(`Current bundle for channel ${D} is ${G.name}`);else H.info(G.name);return G.name}vD();kD();async function dDD(D,$,X,Y=!1){if(!Y)VD("Delete channel");X.apikey=X.apikey||BD();let J=await ID();if($=mD($,J?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let Q=await jD(X.apikey,X.supaHost,X.supaAnon);await m0(Q,$,Y);let F=await xD(Q,X.apikey,["all"]);if(await u0(Q,X.apikey,$,4,Y,!0),X.deleteBundle&&!Y)H.info(`Deleting bundle ${$}#${D} from Capgo`);if(X.deleteBundle){let z=await sa(Q,$,D);if(z?.name&&!Y)H.info(`Deleting bundle ${z.name} from Capgo`);if(z?.name)await iL(Q,$,z.name)}let{data:Z,error:w}=await aa(Q,$,D);if(w||!Z){if(!Y)H.error(`Channel ${D} not found`);if(X.successIfNotFound){if(!Y)H.success(`Channel ${D} not found and successIfNotFound is true`);return!0}throw Error(`Channel ${D} not found`)}let{error:G}=await ta(Q,$,Z.id);if(G){if(!Y)H.error(`Cannot delete channel devices: ${t(G)}`);throw Error(`Cannot delete channel devices: ${t(G)}`)}if(!Y)H.info(`Deleting channel ${$}#${D} from Capgo`);let U=await oa(Q,D,$,F);if(U.error){if(!Y)H.error(`Cannot delete Channel \uD83D\uDE40 ${t(U.error)}`);throw Error(`Cannot delete channel: ${t(U.error)}`)}let O=await l0(Q,$);if(await AD(X.apikey,{channel:"channel",event:"Delete channel",icon:"✅",user_id:O,tags:{"app-id":$,channel:D},notify:!1}).catch(()=>{}),!Y)H.success("Channel deleted"),ND("Done ✅");return!0}vD();kD();async function lDD(D,$,X=!1){if(!X)VD("List channels");$.apikey=$.apikey||BD();let Y=await ID();if(D=mD(D,Y?.config),!$.apikey){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let J=await jD($.apikey,$.supaHost,$.supaAnon);await m0(J,D,X);let Q=await xD(J,$.apikey,["write","all","read","upload"]);if(await u0(J,$.apikey,D,1,X,!0),!X)H.info("Querying available channels in Capgo");let F=await Dt(J,D);if(!X)H.info(`Active channels in Capgo: ${F?.length??0}`),ea(F);if(await AD($.apikey,{channel:"channel",event:"List channel",icon:"✅",user_id:Q,tags:{"app-id":D},notify:!1}).catch(()=>{}),!X)ND("Done ✅");return F}vD();D6();kD();function nDD(D){let $=new R0;$.headers=["Package","Local","Remote","Status","Details"],$.theme=R0.roundTheme,$.rows=[];for(let X of D){let{name:Y,localVersion:J,remoteVersion:Q}=X,F=_8(X),Z=F.compatible?"✅":"❌";$.rows.push([Y,J||"-",Q||"-",Z,F.message])}H.info($.toString())}var iDD=["major","minor","metadata","patch","none"];async function pDD(D,$,X,Y=!1){if(!Y)VD("Set channel");X.apikey=X.apikey||BD();let J=await ID();if($=mD($,J?.config),!X.apikey){if(!Y)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!$){if(!Y)H.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(!D){if(!Y)H.error("Missing argument, you need to provide a channel");throw Error("Missing channel id")}let Q=await jD(X.apikey,X.supaHost,X.supaAnon);await m0(Q,$,Y);let F=await xD(Q,X.apikey,["write","all"]);await u0(Q,X.apikey,$,4,Y,!0);let Z=await l0(Q,$),{bundle:w,state:G,downgrade:U,latest:O,latestRemote:z,ios:q,android:B,selfAssign:W,disableAutoUpdate:L,dev:M,emulator:I,device:K,prod:N}=X;if(O&&w){if(!Y)H.error("Cannot set latest and bundle at the same time");throw Error("Cannot set both latest and bundle simultaneously")}if(z&&w){if(!Y)H.error("Cannot set latest remote and bundle at the same time");throw Error("Cannot set both latest remote and bundle simultaneously")}if(z&&O){if(!Y)H.error("Cannot set latest remote and latest at the same time");throw Error("Cannot set both latest remote and latest simultaneously")}if(w==null&&G==null&&O==null&&z==null&&U==null&&q==null&&B==null&&W==null&&M==null&&I==null&&K==null&&N==null&&L==null){if(!Y)H.error("Missing argument, you need to provide a option to set");throw Error("No channel option provided")}await ka(Q,Z,X.apikey,$);let V={created_by:F,app_id:$,name:D,owner_org:Z,version:void 0},{error:R}=await Q.from("channels").select().eq("app_id",$).eq("name",D).single();if(R){if(!Y)H.error(`Cannot find channel ${D}`);throw Error(`Cannot find channel ${D}`)}let x=O?J?.config?.plugins?.CapacitorUpdater?.version||V4("",X.packageJson):w;if(x!=null){let{data:_,error:v}=await Q.from("app_versions").select().eq("app_id",$).eq("name",x).eq("user_id",F).eq("deleted",!1).single();if(v||!_){if(!Y)H.error(`Cannot find version ${x}`);throw Error(`Cannot find version ${x}`)}if(!X.ignoreMetadataCheck){let{finalCompatibility:S,localDependencies:h}=await lL(Q,$,D,_.native_packages??[]),b=S.filter((l)=>!L4(l));if(h.length>0&&b.length>0){if(!Y)H.warn(`Bundle NOT compatible with ${D} channel`),H.warn(""),nDD(S),H.warn(""),H.warn("An app store update may be required for these changes to take effect.");throw Error(`Bundle is not compatible with ${D} channel`)}if(!Y)if(h.length===0&&S.length>0)H.info(`Ignoring check compatibility with ${D} channel because the bundle does not contain any native packages`);else H.info(`Bundle is compatible with ${D} channel`)}if(!Y)H.info(`Set ${$} channel: ${D} to @${x}`);V.version=_.id}if(z){let{data:_,error:v}=await Q.from("app_versions").select().eq("app_id",$).eq("user_id",F).eq("deleted",!1).order("created_at",{ascending:!1}).single();if(v||!_){if(!Y)H.error("Cannot find latest remote version");throw Error("Cannot find latest remote version")}if(!X.ignoreMetadataCheck){let{finalCompatibility:S}=await lL(Q,$,D,_.native_packages??[]);if(S.filter((b)=>!L4(b)).length>0){if(!Y)H.warn(`Bundle NOT compatible with ${D} channel`),H.warn(""),nDD(S),H.warn(""),H.warn("An app store update may be required for these changes to take effect.");throw Error(`Latest remote bundle is not compatible with ${D} channel`)}}if(!Y)H.info(`Set ${$} channel: ${D} to @${_.name}`);V.version=_.id}if(G!=null){if(G!=="normal"&&G!=="default"){if(!Y)H.error(`State ${G} is not known. The possible values are: normal, default.`);throw Error(`Unknown state ${G}. Expected normal or default`)}if(!Y)H.info(`Set ${$} channel: ${D} to ${G}`);V.public=G==="default"}if(U!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${U?"allow":"disallow"} downgrade`);V.disable_auto_update_under_native=!U}if(q!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${q?"allow":"disallow"} ios update`);V.ios=!!q}if(B!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${B?"allow":"disallow"} android update`);V.android=!!B}if(W!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${W?"allow":"disallow"} self assign to this channel`);V.allow_device_self_set=!!W}if(M!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${M?"allow":"disallow"} dev devices`);V.allow_dev=!!M}if(I!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${I?"allow":"disallow"} emulator devices`);V.allow_emulator=!!I}if(K!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${K?"allow":"disallow"} physical devices`);V.allow_device=!!K}if(N!=null){if(!Y)H.info(`Set ${$} channel: ${D} to ${N?"allow":"disallow"} prod builds`);V.allow_prod=!!N}if(L!=null){let _=L.toLowerCase();if(!iDD.includes(_)){if(!Y)H.error(`Channel strategy ${_} is not known. The possible values are: ${iDD.join(", ")}.`);throw Error(`Unknown channel strategy ${_}`)}if(_==="metadata")_="version_number";if(V.disable_auto_update=_,!Y)H.info(`Set ${$} channel: ${D} to ${_} disable update strategy to this channel`)}let{error:A}=await zw(Q,V);if(A){if(!Y)H.error('Cannot set channel the upload key is not allowed to do that, use the "all" for this.');throw Error("Upload key is not allowed to set this channel")}if(await AD(X.apikey,{channel:"channel",event:"Set channel",icon:"✅",user_id:Z,tags:{"app-id":$},notify:!1}).catch(()=>{}),!Y)ND("Done ✅");return!0}vD();import{existsSync as W7,readFileSync as auD,unlinkSync as rDD,writeFileSync as oDD}from"node:fs";O1();BF();kD();function aDD(D){return D.plugins??={},D.plugins.extConfig??={},D.plugins.CapacitorUpdater??={},D.plugins.CapacitorUpdater}async function tDD(D,$=!1){if(!$)VD("Save keys \uD83D\uDD11");let X=await ID(),Y=D.key||R6,J=D.keyData||"";if(!W7(Y)&&!J){if(!$)H.error(`Cannot find a public key at ${Y} or as keyData option or in ${X.path}`);throw Error("Missing public key")}if(W7(Y))J=auD(Y,"utf8");if(!J.startsWith("-----BEGIN RSA PUBLIC KEY-----")){if(!$)H.error("The public key provided is not a valid RSA Public key");throw Error("Invalid RSA public key")}if(X?.config){let Q=aDD(X.config);if(Q.privateKey){if(delete Q.privateKey,!$)H.info("Old private key deleted from config file");if($?D.setupChannel??!1:D.setupChannel??await d0({message:"Do you want to setup encryption with the new channel in order to support old apps and facilitate the migration?"}))Q.defaultChannel="encryption_v2"}Q.publicKey=J,await q5(X)}if(!$)H.success(`Public key saved into ${X.path} file in local directory`),H.success("Your app will decode the zip archive with this key");return!0}async function sDD(D,$=!1){if(!$)VD("Deleting old private key \uD83D\uDDD1️");let X=await ID(),Y=X?.config?.plugins?.CapacitorUpdater;if(Y?.privateKey){if(delete Y.privateKey,await q5(X),W7(r5))try{if(rDD(r5),!$)H.success(`Old private key file deleted: ${r5}`)}catch(J){if(!$)H.error(`Failed to delete old private key file: ${r5} (${String(J)})`)}if(W7(Fw))try{if(rDD(Fw),!$)H.success(`Old public key file deleted: ${Fw}`)}catch(J){if(!$)H.error(`Failed to delete old public key file: ${R6} (${String(J)})`)}if(!$)H.success(`Old private key deleted from ${X.path} file`),ND("Done ✅");return!0}if(!$)H.info("No old private key found in config file");return!1}async function eDD(D,$=!1){if(!$)VD("Create keys \uD83D\uDD11");let{publicKey:X,privateKey:Y}=es();if(W7(R6)&&!D.force){if(!$)H.error("Public Key already exists, use --force to overwrite");throw Error("Public key already exists")}if(oDD(R6,X),W7(i1)&&!D.force){if(!$)H.error("Private Key already exists, use --force to overwrite");throw Error("Private key already exists")}oDD(i1,Y);let J=await ID();if(J){let Q=aDD(J.config);if(Q.privateKey){if(delete Q.privateKey,!$)H.info("Old private key deleted from config file");if($?D.setupChannel??!1:D.setupChannel??await d0({message:"Do you want to setup encryption with the new channel in order to support old apps and facilitate the migration?"}))Q.defaultChannel="encryption_v2"}Q.publicKey=X,await q5(J)}if(!$){H.success("Your RSA key has been generated"),H.success(`Private key saved in ${i1}`),H.success("This key will be used to encrypt your bundle before sending it to Capgo"),H.success("Keep it safe"),H.success("Then make it unreadable by Capgo and unmodifiable by anyone"),H.success(`Public key saved in ${J.path}`),H.success("Your app will be the only one having it"),H.success("Only your users can decrypt your update"),H.success("Only you can send them an update");try{await ia(void 0,void 0,void 0,{validateIosUpdater:!0}),ND("Done ✅")}catch(Q){if(Q instanceof Error&&Q.message==="Capacitor sync cancelled")return!0;throw Q}}return!0}vD();O1();kD();import{existsSync as tuD}from"node:fs";import{homedir as suD}from"node:os";async function D0D(D,$,X=!1){if(!X)VD("Login to Capgo");if(!D&&!X){let F=await TI({message:"Enter your API key:",mask:"*"});if(bD(F))throw H.error("Login cancelled"),Error("Login cancelled");D=F}if(!D){if(!X)H.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}await Z0();let{local:Y}=$;if(Y&&!tuD(".git")){if(!X)H.error("To use local you should be in a git repository");throw Error("Not in a git repository")}let J=await jD(D,$.supaHost,$.supaAnon),Q=await xD(J,D,["write","all","upload"]);if(Y)await uw(".capgo",`${D}
|
|
491
491
|
`,{mode:384}),await Is(".gitignore",`.capgo
|
|
492
492
|
`,384);else{let F=suD();await uw(`${F}/.capgo`,`${D}
|
|
493
|
-
`,{mode:384})}if(await AD(D,{channel:"user-login",event:"User CLI login",icon:"✅",user_id:Q,notify:!1}).catch(),!X)H.success(`login saved into .capgo file in ${Y?"local":"home"} directory`),ND("Done ✅")}vD();O1();kD();async function $0D(D,$=!1){if(!$)VD("Adding organization");await Z0();let X={...D,apikey:D.apikey||BD()};if(!X.apikey){if(!$)H.error("Missing API key, you need to provide an API key to add an organization");throw Error("Missing API key")}let Y=await jD(X.apikey,X.supaHost,X.supaAnon),J=await xD(Y,X.apikey,["write","all"]),{name:Q,email:F}=X;if(!$&&!Q){let G=await _6({message:"Organization name:",placeholder:"My Organization"});if(bD(G))throw H.error("Canceled adding organization"),Error("Organization creation cancelled");Q=G}if(!$&&!F){let G=await _6({message:"Management email:",placeholder:"admin@example.com"});if(bD(G))throw H.error("Canceled adding organization"),Error("Organization creation cancelled");F=G}if(!Q||!F){if(!$)H.error("Missing arguments, you need to provide an organization name and management email");throw Error("Missing organization name or management email")}if(!$)H.info(`Adding organization "${Q}" to Capgo`);let{data:Z,error:w}=await Y.from("orgs").insert({name:Q,management_email:F,created_by:J}).select().single();if(w){if(!$)H.error(`Could not add organization ${t(w)}`);throw Error(`Could not add organization: ${t(w)}`)}if(await AD(X.apikey,{channel:"organization",event:"Organization Created",icon:"\uD83C\uDFE2",user_id:Z.id,tags:{"org-name":Q},notify:!1}).catch(()=>{}),!$)H.success(`Organization "${Q}" added to Capgo`),ND("Done ✅");return Z}vD();O1();kD();async function X0D(D,$,X=!1){if(!X)VD("Deleting organization");await Z0();let Y={...$,apikey:$.apikey||BD()};if(!Y.apikey){if(!X)H.error("Missing API key, you need to provide an API key to delete an organization");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide an organization ID");throw Error("Missing organization id")}let J=await jD(Y.apikey,Y.supaHost,Y.supaAnon),Q=await xD(J,Y.apikey,["write","all"]);await Zw(J,D,X);let{data:F,error:Z}=await J.from("orgs").select("created_by, name").eq("id",D).single();if(Z||!F){if(!X)H.error(`Cannot get organization details ${t(Z)}`);throw Error(`Cannot get organization details: ${t(Z)}`)}if(F.created_by!==Q){if(X)throw Error("Deleting an organization is restricted to the organization owner");H.warn("Deleting an organization is restricted to the organization owner"),H.warn("You are not the owner of this organization"),H.warn("It's strongly recommended that you do not continue!");let G=await t1({message:"Do you want to continue?",options:[{label:"Yes",value:"yes"},{label:"No",value:"no"}]});if(bD(G)||G==="no")throw H.error("Canceled deleting the organization"),Error("Organization deletion cancelled")}if(!X&&!Y.autoConfirm){let G=await
|
|
493
|
+
`,{mode:384})}if(await AD(D,{channel:"user-login",event:"User CLI login",icon:"✅",user_id:Q,notify:!1}).catch(),!X)H.success(`login saved into .capgo file in ${Y?"local":"home"} directory`),ND("Done ✅")}vD();O1();kD();async function $0D(D,$=!1){if(!$)VD("Adding organization");await Z0();let X={...D,apikey:D.apikey||BD()};if(!X.apikey){if(!$)H.error("Missing API key, you need to provide an API key to add an organization");throw Error("Missing API key")}let Y=await jD(X.apikey,X.supaHost,X.supaAnon),J=await xD(Y,X.apikey,["write","all"]),{name:Q,email:F}=X;if(!$&&!Q){let G=await _6({message:"Organization name:",placeholder:"My Organization"});if(bD(G))throw H.error("Canceled adding organization"),Error("Organization creation cancelled");Q=G}if(!$&&!F){let G=await _6({message:"Management email:",placeholder:"admin@example.com"});if(bD(G))throw H.error("Canceled adding organization"),Error("Organization creation cancelled");F=G}if(!Q||!F){if(!$)H.error("Missing arguments, you need to provide an organization name and management email");throw Error("Missing organization name or management email")}if(!$)H.info(`Adding organization "${Q}" to Capgo`);let{data:Z,error:w}=await Y.from("orgs").insert({name:Q,management_email:F,created_by:J}).select().single();if(w){if(!$)H.error(`Could not add organization ${t(w)}`);throw Error(`Could not add organization: ${t(w)}`)}if(await AD(X.apikey,{channel:"organization",event:"Organization Created",icon:"\uD83C\uDFE2",user_id:Z.id,tags:{"org-name":Q},notify:!1}).catch(()=>{}),!$)H.success(`Organization "${Q}" added to Capgo`),ND("Done ✅");return Z}vD();O1();kD();async function X0D(D,$,X=!1){if(!X)VD("Deleting organization");await Z0();let Y={...$,apikey:$.apikey||BD()};if(!Y.apikey){if(!X)H.error("Missing API key, you need to provide an API key to delete an organization");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide an organization ID");throw Error("Missing organization id")}let J=await jD(Y.apikey,Y.supaHost,Y.supaAnon),Q=await xD(J,Y.apikey,["write","all"]);await Zw(J,D,X);let{data:F,error:Z}=await J.from("orgs").select("created_by, name").eq("id",D).single();if(Z||!F){if(!X)H.error(`Cannot get organization details ${t(Z)}`);throw Error(`Cannot get organization details: ${t(Z)}`)}if(F.created_by!==Q){if(X)throw Error("Deleting an organization is restricted to the organization owner");H.warn("Deleting an organization is restricted to the organization owner"),H.warn("You are not the owner of this organization"),H.warn("It's strongly recommended that you do not continue!");let G=await t1({message:"Do you want to continue?",options:[{label:"Yes",value:"yes"},{label:"No",value:"no"}]});if(bD(G)||G==="no")throw H.error("Canceled deleting the organization"),Error("Organization deletion cancelled")}if(!X&&!Y.autoConfirm){let G=await d0({message:`Are you sure you want to delete organization "${F.name}"? This action cannot be undone.`});if(bD(G)||!G)throw H.error("Canceled deleting the organization"),Error("Organization deletion cancelled")}if(!X)H.info(`Deleting organization "${F.name}"`);let{error:w}=await J.from("orgs").delete().eq("id",D);if(w){if(!X)H.error(`Could not delete organization ${t(w)}`);throw Error(`Could not delete organization: ${t(w)}`)}if(await AD(Y.apikey,{channel:"organization",event:"Organization Deleted",icon:"\uD83D\uDDD1️",user_id:D,tags:{"org-name":F.name},notify:!1}).catch(()=>{}),!X)H.success(`Organization "${F.name}" deleted from Capgo`),ND("Done ✅");return!0}vD();D6();O1();kD();function euD(D,$){if($)return;if(!D.length){H.error("No organizations found");return}let X=new R0;X.headers=["Name","ID","Role","Apps","2FA Required","2FA Access"],X.rows=[];for(let J of D.toReversed()){let Q=J.enforcing_2fa?"✓ Yes":"✗ No",F=J["2fa_has_access"]?"✓ Yes":"✗ No";X.rows.push([J.name??"Unknown",J.gid,J.role,J.app_count?.toString()||"0",Q,F])}H.success("Organizations"),H.success(X.toString());let Y=D.filter((J)=>J.enforcing_2fa&&!J["2fa_has_access"]);if(Y.length>0){H.warn(`
|
|
494
494
|
⚠️ You don't have access to ${Y.length} organization(s) due to 2FA enforcement:`);for(let J of Y)H.warn(` - ${J.name} (${J.gid})`);H.warn(`
|
|
495
|
-
To regain access, enable 2FA on your account at https://web.capgo.app/settings/account`)}}async function J0D(D,$=!1){if(!$)VD("List organizations");await Z0();let X={...D,apikey:D.apikey||BD()};if(!X.apikey){if(!$)H.error("Missing API key, you need to provide an API key to list organizations");throw Error("Missing API key")}let Y=await jD(X.apikey,X.supaHost,X.supaAnon);if(await xD(Y,X.apikey,["read","write","all"]),!$)H.info("Getting organizations from Capgo");let{error:J,data:Q}=await Y.rpc("get_orgs_v7");if(J){if(!$)H.error(`Cannot get organizations ${t(J)}`);throw Error(`Cannot get organizations: ${t(J)}`)}let F=Q||[];if(!$)H.info(`Organizations found: ${F.length}`),euD(F,$),ND("Done ✅");return F}vD();O1();kD();async function Y0D(D,$,X=!1){if(!X)VD("Updating organization");await Z0();let Y={...$,apikey:$.apikey||BD()};if(!Y.apikey){if(!X)H.error("Missing API key, you need to provide an API key to update an organization");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide an organization ID");throw Error("Missing organization id")}let J=await jD(Y.apikey,Y.supaHost,Y.supaAnon);await xD(J,Y.apikey,["write","all"]),await Zw(J,D,X);let{data:Q,error:F}=await J.from("orgs").select("name, management_email, created_by, enforcing_2fa, password_policy_config, require_apikey_expiration, max_apikey_expiration_days, enforce_hashed_api_keys").eq("id",D).single();if(F||!Q){if(!X)H.error(`Cannot get organization details ${t(F)}`);throw Error(`Cannot get organization details: ${t(F)}`)}let{name:Z,email:w,enforce2fa:G}=Y,{passwordPolicy:U,minLength:O,requireUppercase:z,requireNumber:q,requireSpecial:B}=Y,{requireApikeyExpiration:W,maxApikeyExpirationDays:L,enforceHashedApiKeys:M}=Y;if(G!==void 0){if(!X){if(G&&!Q.enforcing_2fa){H.info("Checking organization members 2FA status...");let{data:R,error:x}=await J.rpc("check_org_members_2fa_enabled",{org_id:D});if(x)throw H.error(`Cannot check members 2FA status: ${t(x)}`),Error("Cannot check members 2FA status");let{data:A,error:_}=await J.rpc("has_2fa_enabled");if(_)throw H.error(`Cannot check your 2FA status: ${t(_)}`),Error("Cannot check your 2FA status");let{data:v,error:S}=await J.rpc("get_identity_apikey_only",{keymode:["read","upload","write","all"]});if(S||!v)throw H.error(`Cannot get current user identity: ${S?t(S):"No user ID returned"}`),Error("Cannot get current user identity");let h=R?.filter((b)=>!b["2fa_enabled"]&&b.user_id!==v)||[];if(h.length>0||!A){if(H.warn("⚠️ Warning: Enabling 2FA enforcement will affect access"),H.message("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"),!A)H.warn("\uD83D\uDD10 YOU do not have 2FA enabled! By enabling 2FA enforcement, you will LOSE ACCESS to this organization until you enable 2FA on your account.");if(h.length>0){let{data:l,error:f}=await J.rpc("get_org_members",{guild_id:D});if(f)throw H.error(`Cannot get organization members: ${t(f)}`),Error("Cannot get organization members");let j=new Map(l?.map((c)=>[c.uid,c])||[]),P=h.map((c)=>{return j.get(c.user_id)?.email||c.user_id}),u=h.length===1?"member does":"members do",y=h.length===1?"This member will":"These members will";H.warn(`${h.length} ${u} not have 2FA enabled: ${P.join(", ")}`),H.warn(`${y} lose access until they enable 2FA.`)}let b=await c0({message:"Are you sure you want to enable 2FA enforcement?"});if(bD(b)||!b)throw H.error("Canceled enabling 2FA enforcement"),Error("2FA enforcement cancelled")}H.info("Enabling 2FA enforcement for organization...")}else if(!G&&Q.enforcing_2fa)H.info("Disabling 2FA enforcement for organization...")}let{error:N}=await J.from("orgs").update({enforcing_2fa:G}).eq("id",D);if(N){if(!X)H.error(`Could not update 2FA enforcement: ${t(N)}`);throw Error(`Could not update 2FA enforcement: ${t(N)}`)}if(!X)if(G)H.success("✓ 2FA enforcement enabled for this organization");else H.success("✓ 2FA enforcement disabled for this organization");if(Z===void 0&&w===void 0&&!(U!==void 0||W!==void 0||L!==void 0||M!==void 0)){if(await AD(Y.apikey,{channel:"organization",event:G?"Organization 2FA Enabled":"Organization 2FA Disabled",icon:"\uD83D\uDD10",user_id:D,tags:{"org-name":Q.name,"enforce-2fa":G.toString()},notify:!1}).catch(()=>{}),!X)ND("Done ✅");return{orgId:D,name:Q.name,email:Q.management_email,enforce2fa:G}}}if(U!==void 0){if(!X)if(U){H.info("Configuring password policy for organization...");let{data:R,error:x}=await J.rpc("check_org_members_password_policy",{org_id:D});if(x){if(!x.message?.includes("NO_RIGHTS"))H.warn(`Cannot check members password policy status: ${t(x)}`)}else if(R){let A=R.filter((_)=>!_.password_policy_compliant);if(A.length>0){H.warn(`⚠️ Warning: ${A.length} member(s) do not meet the password policy requirements`),H.warn("These members will need to update their passwords to regain access.");let _=await c0({message:"Are you sure you want to enable the password policy?"});if(bD(_)||!_)throw H.error("Canceled enabling password policy"),Error("Password policy configuration cancelled")}}}else H.info("Disabling password policy for organization...");let N={enabled:U,min_length:O??10,require_uppercase:z??!0,require_number:q??!0,require_special:B??!0},{error:V}=await J.from("orgs").update({password_policy_config:N}).eq("id",D);if(V){if(!X)H.error(`Could not update password policy: ${t(V)}`);throw Error(`Could not update password policy: ${t(V)}`)}if(!X)if(U)H.success("✓ Password policy enabled for this organization"),H.info(` - Minimum length: ${N.min_length} characters`),H.info(` - Require uppercase: ${N.require_uppercase?"Yes":"No"}`),H.info(` - Require number: ${N.require_number?"Yes":"No"}`),H.info(` - Require special character: ${N.require_special?"Yes":"No"}`);else H.success("✓ Password policy disabled for this organization");if(Z===void 0&&w===void 0&&G===void 0&&W===void 0&&L===void 0&&M===void 0){if(await AD(Y.apikey,{channel:"organization",event:U?"Password Policy Enabled":"Password Policy Disabled",icon:"\uD83D\uDD11",user_id:D,tags:{"org-name":Q.name},notify:!1}).catch(()=>{}),!X)ND("Done ✅");return{orgId:D,name:Q.name,email:Q.management_email,passwordPolicy:U}}}if(W!==void 0||L!==void 0||M!==void 0){if(!X)H.info("Updating API key security settings...");if(L!==void 0&&L!==null){if(L<1||L>365){if(!X)H.error("Maximum API key expiration days must be between 1 and 365");throw Error("Maximum API key expiration days must be between 1 and 365")}}let N={};if(W!==void 0)N.require_apikey_expiration=W;if(L!==void 0)N.max_apikey_expiration_days=L;if(M!==void 0)N.enforce_hashed_api_keys=M;let{error:V}=await J.from("orgs").update(N).eq("id",D);if(V){if(!X)H.error(`Could not update API key settings: ${t(V)}`);throw Error(`Could not update API key settings: ${t(V)}`)}if(!X){if(W!==void 0)H.success(`✓ API key expiration requirement: ${W?"Enabled":"Disabled"}`);if(L!==void 0)if(L===null)H.success("✓ Maximum API key expiration days: No limit");else H.success(`✓ Maximum API key expiration days: ${L}`);if(M!==void 0)H.success(`✓ Hashed API keys enforcement: ${M?"Enabled":"Disabled"}`)}if(Z===void 0&&w===void 0&&G===void 0&&U===void 0){if(await AD(Y.apikey,{channel:"organization",event:"API Key Settings Updated",icon:"\uD83D\uDD10",user_id:D,tags:{"org-name":Q.name},notify:!1}).catch(()=>{}),!X)ND("Done ✅");return{orgId:D,name:Q.name,email:Q.management_email}}}if(!X&&!Z){let N=await _6({message:"New organization name:",placeholder:Q.name||"My Organization"});if(bD(N))throw H.error("Canceled updating organization"),Error("Organization update cancelled");Z=N}if(!X&&!w){let N=await _6({message:"Management email:",placeholder:Q.management_email||"admin@example.com"});if(bD(N))throw H.error("Canceled updating organization"),Error("Organization update cancelled");w=N}if(!Z||!w){if(!X)H.error("Missing arguments, you need to provide an organization name and management email");throw Error("Missing organization name or management email")}if(!X)H.info(`Updating organization "${D}"`);let{error:K}=await J.from("orgs").update({name:Z,management_email:w}).eq("id",D);if(K){if(!X)H.error(`Could not update organization ${t(K)}`);throw Error(`Could not update organization: ${t(K)}`)}if(await AD(Y.apikey,{channel:"organization",event:"Organization Updated",icon:"✏️",user_id:D,tags:{"org-name":Z},notify:!1}).catch(()=>{}),!X)H.success("Organization updated"),ND("Done ✅");return{orgId:D,name:Z,email:w,enforce2fa:G??Q.enforcing_2fa}}vD();kD();async function Q0D(D,$=!1){if(!$)VD("Getting user id");let X={...D,apikey:D.apikey||BD()};if(!X.apikey){if(!$)H.error("Missing API key, you need to provide an API key to fetch the user id");throw Error("Missing API key")}try{let Y=await jD(X.apikey,X.supaHost,X.supaAnon),J=await xD(Y,X.apikey,["read","all","write"]);if(!$)ND(`Done ✅: ${J}`);return J}catch(Y){if(!$)H.error(`Error getting user id ${t(Y)}`);throw Y instanceof Error?Y:Error(String(Y))}}kD();eZ();kD();eZ();function yD(D){let $=D instanceof Error?D.message:String(D),X=l5(D);return{success:!1,error:$,isSecurityPolicyError:X.isSecurityPolicyError,securityPolicyMessage:X.isSecurityPolicyError?X.message:void 0}}class U0{apikey;supaHost;supaAnon;constructor(D){this.apikey=D?.apikey,this.supaHost=D?.supaHost,this.supaAnon=D?.supaAnon}async login(D){try{return await D0D(D.apikey,{local:D.local??!1,supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon},!0),{success:!0}}catch($){return yD($)}}async doctor(D){try{return{success:!0,data:await Gt({packageJson:D?.packageJson},!0)}}catch($){return yD($)}}async addApp(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,icon:D.icon};return await Ft(D.appId,$,void 0,!0),{success:!0}}catch($){return yD($)}}async updateApp(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,icon:D.icon,retention:D.retention};return await zt(D.appId,$,!0),{success:!0}}catch($){return yD($)}}async deleteApp(D,$=!1){try{let X={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return await Zt(D,X,!1,$),{success:!0}}catch(X){return yD(X)}}async listApps(){try{let D={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return{success:!0,data:(await Ut(D,!1)).map((Y)=>({appId:Y.app_id,name:Y.name||"Unknown",iconUrl:Y.icon_url||void 0,createdAt:new Date(Y.created_at||"")}))}}catch(D){return yD(D)}}async getAccountId(D){try{let $={apikey:D?.apikey||this.apikey||BD(!0),supaHost:D?.supaHost||this.supaHost,supaAnon:D?.supaAnon||this.supaAnon};return{success:!0,data:await Q0D($,!0)}}catch($){return yD($)}}async starRepo(D){try{let{repository:$,alreadyStarred:X}=nw(D?.repository);return{success:!0,data:{repository:$,alreadyStarred:X}}}catch($){return yD($)}}async starAllRepositories(D){try{return{success:!0,data:await je(D)}}catch($){return yD($)}}async checkBundleCompatibility(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),channel:D.channel,text:D.textOutput??!1,packageJson:D.packageJson,nodeModules:D.nodeModules,supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon};return{success:!0,data:(await ps(D.appId,$,!0)).finalCompatibility}}catch($){return yD($)}}async encryptBundle(D){try{return{success:!0,data:await Qe(D.zipPath,D.checksum,{key:D.keyPath,keyData:D.keyData,json:D.json,packageJson:D.packageJson},!0)}}catch($){return yD($)}}async decryptBundle(D){try{return{success:!0,data:await Xe(D.zipPath,D.ivSessionKey,{key:D.keyPath,keyData:D.keyData,checksum:D.checksum,packageJson:D.packageJson},!0)}}catch($){return yD($)}}async zipBundle(D){try{return{success:!0,data:await gDD(D.appId,{apikey:this.apikey||BD(!0),path:D.path,bundle:D.bundle,name:D.name,codeCheck:D.codeCheck,json:D.json,keyV2:D.keyV2,packageJson:D.packageJson},!0)}}catch($){return yD($)}}async uploadBundle(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,path:D.path,bundle:D.bundle,channel:D.channel,external:D.external,key:D.encrypt!==!1,keyV2:D.encryptionKey,timeout:D.timeout,tus:D.useTus,comment:D.comment,minUpdateVersion:D.minUpdateVersion,autoMinUpdateVersion:D.autoMinUpdateVersion,selfAssign:D.selfAssign,packageJson:D.packageJsonPaths,ignoreMetadataCheck:D.ignoreCompatibilityCheck,codeCheck:!D.disableCodeCheck,zip:D.useZip},X=await tM(D.appId,$,!0);return{success:X.success,bundleId:X.bundle,checksum:X.checksum??null,encryptionMethod:X.encryptionMethod,sessionKey:X.sessionKey,ivSessionKey:X.ivSessionKey,storageProvider:X.storageProvider,skipped:X.skipped,reason:X.reason}}catch($){return yD($)}}async listBundles(D){try{let $=this.apikey||BD(!0),X=await jD($,this.supaHost,this.supaAnon);return{success:!0,data:(await Hw(X,D)).map((Q)=>({id:Q.id.toString(),version:Q.name,uploadedAt:new Date(Q.created_at||""),size:0,encrypted:Q.session_key!==null}))}}catch($){return yD($)}}async deleteBundle(D,$){try{let X={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon,bundle:$};return await Je($,D,X,!0),{success:!0}}catch(X){return yD(X)}}async cleanupBundles(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,bundle:D.bundle||"",version:"",keep:D.keep||4,force:D.force||!1,ignoreChannel:D.ignoreChannel||!1};return{success:!0,data:await is(D.appId,$,!0)}}catch($){return yD($)}}async requestBuild(D){try{let $=D.credentials,X={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,path:D.path,platform:D.platform,userId:D.userId,buildCertificateBase64:$?.BUILD_CERTIFICATE_BASE64,p12Password:$?.P12_PASSWORD,appleKeyId:$?.APPLE_KEY_ID,appleIssuerId:$?.APPLE_ISSUER_ID,appleKeyContent:$?.APPLE_KEY_CONTENT,appStoreConnectTeamId:$?.APP_STORE_CONNECT_TEAM_ID,iosScheme:$?.CAPGO_IOS_SCHEME,iosTarget:$?.CAPGO_IOS_TARGET,iosDistribution:$?.CAPGO_IOS_DISTRIBUTION,iosProvisioningMap:$?.CAPGO_IOS_PROVISIONING_MAP,androidKeystoreFile:$?.ANDROID_KEYSTORE_FILE,keystoreKeyAlias:$?.KEYSTORE_KEY_ALIAS,keystoreKeyPassword:$?.KEYSTORE_KEY_PASSWORD,keystoreStorePassword:$?.KEYSTORE_STORE_PASSWORD,playConfigJson:$?.PLAY_CONFIG_JSON},Y=await ns(D.appId,X,!0);if(Y.success&&Y.jobId)return{success:!0,data:{jobId:Y.jobId,uploadUrl:Y.uploadUrl||"",status:Y.status||"unknown"}};return{success:!1,error:Y.error||"Unknown error during build request"}}catch($){return yD($)}}async getCurrentBundle(D,$,X){try{let Y={apikey:X?.apikey||this.apikey||BD(!0),quiet:!0,supaHost:X?.supaHost||this.supaHost,supaAnon:X?.supaAnon||this.supaAnon};return{success:!0,data:await cDD($,D,Y,!0)}}catch(Y){return yD(Y)}}async addChannel(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,default:D.default,selfAssign:D.selfAssign};return await mDD(D.channelId,D.appId,$,!0),{success:!0}}catch($){return yD($)}}async updateChannel(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,bundle:D.bundle??void 0,state:D.state,downgrade:D.downgrade,ios:D.ios,android:D.android,selfAssign:D.selfAssign,disableAutoUpdate:D.disableAutoUpdate??void 0,dev:D.dev,emulator:D.emulator,device:D.device,prod:D.prod,latest:!1,latestRemote:!1,packageJson:void 0,ignoreMetadataCheck:!1};return await pDD(D.channelId,D.appId,$,!0),{success:!0}}catch($){return yD($)}}async deleteChannel(D,$,X=!1){try{let Y={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon,deleteBundle:X,successIfNotFound:!1};return await dDD(D,$,Y,!0),{success:!0}}catch(Y){return yD(Y)}}async listChannels(D){try{let $={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return{success:!0,data:await lDD(D,$,!0)}}catch($){return yD($)}}async generateEncryptionKeys(D){try{return await eDD({force:D?.force,setupChannel:D?.setupChannel},!0),{success:!0}}catch($){return yD($)}}async saveEncryptionKey(D){try{return await tDD({key:D?.keyPath,keyData:D?.keyData,setupChannel:D?.setupChannel},!0),{success:!0}}catch($){return yD($)}}async deleteLegacyEncryptionKey(D){try{return{success:!0,data:{deleted:await sDD({force:D?.force,setupChannel:D?.setupChannel},!0)}}}catch($){return yD($)}}async listOrganizations(D){try{let $={apikey:D?.apikey||this.apikey||BD(!0),supaHost:D?.supaHost||this.supaHost,supaAnon:D?.supaAnon||this.supaAnon};return{success:!0,data:(await J0D($,!0)).map((J)=>({id:String(J.id??J.gid??""),name:J.name??"Unknown",role:J.role??void 0,appCount:typeof J.app_count==="number"?J.app_count:void 0,email:J.management_email??void 0,createdAt:J.created_at?new Date(J.created_at):void 0}))}}catch($){return yD($)}}async addOrganization(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,email:D.email},X=await $0D($,!0);return{success:!0,data:{id:String(X.id??X.gid??""),name:X.name??D.name,role:"owner",appCount:0,email:X.management_email??D.email,createdAt:X.created_at?new Date(X.created_at):void 0}}}catch($){return yD($)}}async updateOrganization(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,email:D.email},X=await Y0D(D.orgId,$,!0);return{success:!0,data:{id:X.orgId,name:X.name,email:X.email}}}catch($){return yD($)}}async deleteOrganization(D,$){try{let X={apikey:$?.apikey||this.apikey||BD(!0),supaHost:$?.supaHost||this.supaHost,supaAnon:$?.supaAnon||this.supaAnon,autoConfirm:$?.autoConfirm??!0};return{success:!0,data:{deleted:await X0D(D,X,!0)}}}catch(X){return yD(X)}}async getStats(D){try{let $=D.apikey||this.apikey||BD(!0),X=await v$(),Y={appId:D.appId,devicesId:D.deviceIds,search:D.search,order:D.order,rangeStart:D.after||D.rangeStart,rangeEnd:D.rangeEnd,limit:D.limit},J=await fetch(`${X.hostApi}/private/stats`,{method:"POST",headers:{"Content-Type":"application/json",capgkey:$},body:JSON.stringify(Y)});if(!J.ok)throw Error(`HTTP error! status: ${J.status}`);return{success:!0,data:(await J.json()).map((Z)=>({appId:Z.app_id,deviceId:Z.device_id,action:Z.action,versionId:Z.version_id,version:Z.version,createdAt:Z.created_at}))}}catch($){return yD($)}}async setAppSetting(D,$){try{return await Bt(D,{apikey:$.apikey||this.apikey||BD(!0),bool:$.bool,string:$.string},!0),{success:!0}}catch(X){return yD(X)}}async probe(D){try{let{probeInternal:$}=await Promise.resolve().then(() => (H0D(),K0D)),X=await $({platform:D.platform});if(X.error)return{success:!1,error:X.error};return{success:!0,data:X}}catch($){return yD($)}}}async function aD0(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).uploadBundle(D)}async function tD0(D){return new U0({supaHost:D.supaHost,supaAnon:D.supaAnon}).login(D)}async function sD0(D){return new U0().doctor(D)}async function eD0(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).checkBundleCompatibility(D)}async function D00(D){return new U0().encryptBundle(D)}async function $00(D){return new U0().decryptBundle(D)}async function X00(D){return new U0().zipBundle(D)}async function J00(D){return new U0().starRepo(D)}async function Y00(D){return new U0().starAllRepositories(D)}async function Q00(D){return new U0().generateEncryptionKeys(D)}async function F00(D){return new U0().saveEncryptionKey(D)}async function Z00(D){return new U0().deleteLegacyEncryptionKey(D)}async function w00(D,$,X){return new U0({apikey:X?.apikey,supaHost:X?.supaHost,supaAnon:X?.supaAnon}).getCurrentBundle(D,$,X)}async function G00(D,$){return new U0({apikey:$.apikey}).setAppSetting(D,$)}async function U00(D){return new U0({apikey:D?.apikey,supaHost:D?.supaHost,supaAnon:D?.supaAnon}).getAccountId(D)}async function O00(D){return new U0({apikey:D?.apikey,supaHost:D?.supaHost,supaAnon:D?.supaAnon}).listOrganizations(D)}async function q00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).addOrganization(D)}async function z00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).updateOrganization(D)}async function B00(D,$){return new U0({apikey:$?.apikey,supaHost:$?.supaHost,supaAnon:$?.supaAnon}).deleteOrganization(D,$)}async function W00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).addApp(D)}async function K00(D,$){return new U0($).listBundles(D)}async function H00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).addChannel(D)}async function V00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).requestBuild(D)}async function N00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).getStats(D)}async function L00(D){return new U0().probe(D)}async function M00(){try{return await ID()}catch{return null}}export{X00 as zipBundle,aD0 as uploadBundle,z00 as updateOrganization,G00 as updateAppSetting,J00 as starRepo,Y00 as starAllRepositories,F00 as saveEncryptionKey,V00 as requestBuild,L00 as probeUpdates,l5 as parseSecurityPolicyError,tD0 as login,O00 as listOrganizations,K00 as listBundles,ro as isSecurityPolicyError,N00 as getStats,qED as getSecurityPolicyMessage,w00 as getCurrentBundle,M00 as getCapacitorConfig,U00 as getAccountId,Q00 as generateEncryptionKeys,HL as formatApiErrorForCli,D00 as encryptBundle,sD0 as doctor,B00 as deleteOrganization,Z00 as deleteLegacyEncryptionKey,$00 as decryptBundle,jD as createSupabaseClient,eD0 as checkBundleCompatibility,q00 as addOrganization,H00 as addChannel,W00 as addApp,sZ as SECURITY_POLICY_MESSAGES,J2 as SECURITY_POLICY_ERRORS,U0 as CapgoSDK};
|
|
495
|
+
To regain access, enable 2FA on your account at https://web.capgo.app/settings/account`)}}async function J0D(D,$=!1){if(!$)VD("List organizations");await Z0();let X={...D,apikey:D.apikey||BD()};if(!X.apikey){if(!$)H.error("Missing API key, you need to provide an API key to list organizations");throw Error("Missing API key")}let Y=await jD(X.apikey,X.supaHost,X.supaAnon);if(await xD(Y,X.apikey,["read","write","all"]),!$)H.info("Getting organizations from Capgo");let{error:J,data:Q}=await Y.rpc("get_orgs_v7");if(J){if(!$)H.error(`Cannot get organizations ${t(J)}`);throw Error(`Cannot get organizations: ${t(J)}`)}let F=Q||[];if(!$)H.info(`Organizations found: ${F.length}`),euD(F,$),ND("Done ✅");return F}vD();O1();kD();async function Y0D(D,$,X=!1){if(!X)VD("Updating organization");await Z0();let Y={...$,apikey:$.apikey||BD()};if(!Y.apikey){if(!X)H.error("Missing API key, you need to provide an API key to update an organization");throw Error("Missing API key")}if(!D){if(!X)H.error("Missing argument, you need to provide an organization ID");throw Error("Missing organization id")}let J=await jD(Y.apikey,Y.supaHost,Y.supaAnon);await xD(J,Y.apikey,["write","all"]),await Zw(J,D,X);let{data:Q,error:F}=await J.from("orgs").select("name, management_email, created_by, enforcing_2fa, password_policy_config, require_apikey_expiration, max_apikey_expiration_days, enforce_hashed_api_keys").eq("id",D).single();if(F||!Q){if(!X)H.error(`Cannot get organization details ${t(F)}`);throw Error(`Cannot get organization details: ${t(F)}`)}let{name:Z,email:w,enforce2fa:G}=Y,{passwordPolicy:U,minLength:O,requireUppercase:z,requireNumber:q,requireSpecial:B}=Y,{requireApikeyExpiration:W,maxApikeyExpirationDays:L,enforceHashedApiKeys:M}=Y;if(G!==void 0){if(!X){if(G&&!Q.enforcing_2fa){H.info("Checking organization members 2FA status...");let{data:R,error:x}=await J.rpc("check_org_members_2fa_enabled",{org_id:D});if(x)throw H.error(`Cannot check members 2FA status: ${t(x)}`),Error("Cannot check members 2FA status");let{data:A,error:_}=await J.rpc("has_2fa_enabled");if(_)throw H.error(`Cannot check your 2FA status: ${t(_)}`),Error("Cannot check your 2FA status");let{data:v,error:S}=await J.rpc("get_identity_apikey_only",{keymode:["read","upload","write","all"]});if(S||!v)throw H.error(`Cannot get current user identity: ${S?t(S):"No user ID returned"}`),Error("Cannot get current user identity");let h=R?.filter((b)=>!b["2fa_enabled"]&&b.user_id!==v)||[];if(h.length>0||!A){if(H.warn("⚠️ Warning: Enabling 2FA enforcement will affect access"),H.message("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"),!A)H.warn("\uD83D\uDD10 YOU do not have 2FA enabled! By enabling 2FA enforcement, you will LOSE ACCESS to this organization until you enable 2FA on your account.");if(h.length>0){let{data:l,error:f}=await J.rpc("get_org_members",{guild_id:D});if(f)throw H.error(`Cannot get organization members: ${t(f)}`),Error("Cannot get organization members");let j=new Map(l?.map((c)=>[c.uid,c])||[]),P=h.map((c)=>{return j.get(c.user_id)?.email||c.user_id}),u=h.length===1?"member does":"members do",y=h.length===1?"This member will":"These members will";H.warn(`${h.length} ${u} not have 2FA enabled: ${P.join(", ")}`),H.warn(`${y} lose access until they enable 2FA.`)}let b=await d0({message:"Are you sure you want to enable 2FA enforcement?"});if(bD(b)||!b)throw H.error("Canceled enabling 2FA enforcement"),Error("2FA enforcement cancelled")}H.info("Enabling 2FA enforcement for organization...")}else if(!G&&Q.enforcing_2fa)H.info("Disabling 2FA enforcement for organization...")}let{error:N}=await J.from("orgs").update({enforcing_2fa:G}).eq("id",D);if(N){if(!X)H.error(`Could not update 2FA enforcement: ${t(N)}`);throw Error(`Could not update 2FA enforcement: ${t(N)}`)}if(!X)if(G)H.success("✓ 2FA enforcement enabled for this organization");else H.success("✓ 2FA enforcement disabled for this organization");if(Z===void 0&&w===void 0&&!(U!==void 0||W!==void 0||L!==void 0||M!==void 0)){if(await AD(Y.apikey,{channel:"organization",event:G?"Organization 2FA Enabled":"Organization 2FA Disabled",icon:"\uD83D\uDD10",user_id:D,tags:{"org-name":Q.name,"enforce-2fa":G.toString()},notify:!1}).catch(()=>{}),!X)ND("Done ✅");return{orgId:D,name:Q.name,email:Q.management_email,enforce2fa:G}}}if(U!==void 0){if(!X)if(U){H.info("Configuring password policy for organization...");let{data:R,error:x}=await J.rpc("check_org_members_password_policy",{org_id:D});if(x){if(!x.message?.includes("NO_RIGHTS"))H.warn(`Cannot check members password policy status: ${t(x)}`)}else if(R){let A=R.filter((_)=>!_.password_policy_compliant);if(A.length>0){H.warn(`⚠️ Warning: ${A.length} member(s) do not meet the password policy requirements`),H.warn("These members will need to update their passwords to regain access.");let _=await d0({message:"Are you sure you want to enable the password policy?"});if(bD(_)||!_)throw H.error("Canceled enabling password policy"),Error("Password policy configuration cancelled")}}}else H.info("Disabling password policy for organization...");let N={enabled:U,min_length:O??10,require_uppercase:z??!0,require_number:q??!0,require_special:B??!0},{error:V}=await J.from("orgs").update({password_policy_config:N}).eq("id",D);if(V){if(!X)H.error(`Could not update password policy: ${t(V)}`);throw Error(`Could not update password policy: ${t(V)}`)}if(!X)if(U)H.success("✓ Password policy enabled for this organization"),H.info(` - Minimum length: ${N.min_length} characters`),H.info(` - Require uppercase: ${N.require_uppercase?"Yes":"No"}`),H.info(` - Require number: ${N.require_number?"Yes":"No"}`),H.info(` - Require special character: ${N.require_special?"Yes":"No"}`);else H.success("✓ Password policy disabled for this organization");if(Z===void 0&&w===void 0&&G===void 0&&W===void 0&&L===void 0&&M===void 0){if(await AD(Y.apikey,{channel:"organization",event:U?"Password Policy Enabled":"Password Policy Disabled",icon:"\uD83D\uDD11",user_id:D,tags:{"org-name":Q.name},notify:!1}).catch(()=>{}),!X)ND("Done ✅");return{orgId:D,name:Q.name,email:Q.management_email,passwordPolicy:U}}}if(W!==void 0||L!==void 0||M!==void 0){if(!X)H.info("Updating API key security settings...");if(L!==void 0&&L!==null){if(L<1||L>365){if(!X)H.error("Maximum API key expiration days must be between 1 and 365");throw Error("Maximum API key expiration days must be between 1 and 365")}}let N={};if(W!==void 0)N.require_apikey_expiration=W;if(L!==void 0)N.max_apikey_expiration_days=L;if(M!==void 0)N.enforce_hashed_api_keys=M;let{error:V}=await J.from("orgs").update(N).eq("id",D);if(V){if(!X)H.error(`Could not update API key settings: ${t(V)}`);throw Error(`Could not update API key settings: ${t(V)}`)}if(!X){if(W!==void 0)H.success(`✓ API key expiration requirement: ${W?"Enabled":"Disabled"}`);if(L!==void 0)if(L===null)H.success("✓ Maximum API key expiration days: No limit");else H.success(`✓ Maximum API key expiration days: ${L}`);if(M!==void 0)H.success(`✓ Hashed API keys enforcement: ${M?"Enabled":"Disabled"}`)}if(Z===void 0&&w===void 0&&G===void 0&&U===void 0){if(await AD(Y.apikey,{channel:"organization",event:"API Key Settings Updated",icon:"\uD83D\uDD10",user_id:D,tags:{"org-name":Q.name},notify:!1}).catch(()=>{}),!X)ND("Done ✅");return{orgId:D,name:Q.name,email:Q.management_email}}}if(!X&&!Z){let N=await _6({message:"New organization name:",placeholder:Q.name||"My Organization"});if(bD(N))throw H.error("Canceled updating organization"),Error("Organization update cancelled");Z=N}if(!X&&!w){let N=await _6({message:"Management email:",placeholder:Q.management_email||"admin@example.com"});if(bD(N))throw H.error("Canceled updating organization"),Error("Organization update cancelled");w=N}if(!Z||!w){if(!X)H.error("Missing arguments, you need to provide an organization name and management email");throw Error("Missing organization name or management email")}if(!X)H.info(`Updating organization "${D}"`);let{error:K}=await J.from("orgs").update({name:Z,management_email:w}).eq("id",D);if(K){if(!X)H.error(`Could not update organization ${t(K)}`);throw Error(`Could not update organization: ${t(K)}`)}if(await AD(Y.apikey,{channel:"organization",event:"Organization Updated",icon:"✏️",user_id:D,tags:{"org-name":Z},notify:!1}).catch(()=>{}),!X)H.success("Organization updated"),ND("Done ✅");return{orgId:D,name:Z,email:w,enforce2fa:G??Q.enforcing_2fa}}vD();kD();async function Q0D(D,$=!1){if(!$)VD("Getting user id");let X={...D,apikey:D.apikey||BD()};if(!X.apikey){if(!$)H.error("Missing API key, you need to provide an API key to fetch the user id");throw Error("Missing API key")}try{let Y=await jD(X.apikey,X.supaHost,X.supaAnon),J=await xD(Y,X.apikey,["read","all","write"]);if(!$)ND(`Done ✅: ${J}`);return J}catch(Y){if(!$)H.error(`Error getting user id ${t(Y)}`);throw Y instanceof Error?Y:Error(String(Y))}}kD();eZ();kD();eZ();function yD(D){let $=D instanceof Error?D.message:String(D),X=l5(D);return{success:!1,error:$,isSecurityPolicyError:X.isSecurityPolicyError,securityPolicyMessage:X.isSecurityPolicyError?X.message:void 0}}class U0{apikey;supaHost;supaAnon;constructor(D){this.apikey=D?.apikey,this.supaHost=D?.supaHost,this.supaAnon=D?.supaAnon}async login(D){try{return await D0D(D.apikey,{local:D.local??!1,supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon},!0),{success:!0}}catch($){return yD($)}}async doctor(D){try{return{success:!0,data:await Gt({packageJson:D?.packageJson},!0)}}catch($){return yD($)}}async addApp(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,icon:D.icon};return await Ft(D.appId,$,void 0,!0),{success:!0}}catch($){return yD($)}}async updateApp(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,icon:D.icon,retention:D.retention};return await zt(D.appId,$,!0),{success:!0}}catch($){return yD($)}}async deleteApp(D,$=!1){try{let X={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return await Zt(D,X,!1,$),{success:!0}}catch(X){return yD(X)}}async listApps(){try{let D={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return{success:!0,data:(await Ut(D,!1)).map((Y)=>({appId:Y.app_id,name:Y.name||"Unknown",iconUrl:Y.icon_url||void 0,createdAt:new Date(Y.created_at||"")}))}}catch(D){return yD(D)}}async getAccountId(D){try{let $={apikey:D?.apikey||this.apikey||BD(!0),supaHost:D?.supaHost||this.supaHost,supaAnon:D?.supaAnon||this.supaAnon};return{success:!0,data:await Q0D($,!0)}}catch($){return yD($)}}async starRepo(D){try{let{repository:$,alreadyStarred:X}=nw(D?.repository);return{success:!0,data:{repository:$,alreadyStarred:X}}}catch($){return yD($)}}async starAllRepositories(D){try{return{success:!0,data:await je(D)}}catch($){return yD($)}}async checkBundleCompatibility(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),channel:D.channel,text:D.textOutput??!1,packageJson:D.packageJson,nodeModules:D.nodeModules,supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon};return{success:!0,data:(await ps(D.appId,$,!0)).finalCompatibility}}catch($){return yD($)}}async encryptBundle(D){try{return{success:!0,data:await Qe(D.zipPath,D.checksum,{key:D.keyPath,keyData:D.keyData,json:D.json,packageJson:D.packageJson},!0)}}catch($){return yD($)}}async decryptBundle(D){try{return{success:!0,data:await Xe(D.zipPath,D.ivSessionKey,{key:D.keyPath,keyData:D.keyData,checksum:D.checksum,packageJson:D.packageJson},!0)}}catch($){return yD($)}}async zipBundle(D){try{return{success:!0,data:await gDD(D.appId,{apikey:this.apikey||BD(!0),path:D.path,bundle:D.bundle,name:D.name,codeCheck:D.codeCheck,json:D.json,keyV2:D.keyV2,packageJson:D.packageJson},!0)}}catch($){return yD($)}}async uploadBundle(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,path:D.path,bundle:D.bundle,channel:D.channel,external:D.external,key:D.encrypt!==!1,keyV2:D.encryptionKey,timeout:D.timeout,tus:D.useTus,comment:D.comment,minUpdateVersion:D.minUpdateVersion,autoMinUpdateVersion:D.autoMinUpdateVersion,selfAssign:D.selfAssign,packageJson:D.packageJsonPaths,ignoreMetadataCheck:D.ignoreCompatibilityCheck,codeCheck:!D.disableCodeCheck,zip:D.useZip},X=await tM(D.appId,$,!0);return{success:X.success,bundleId:X.bundle,checksum:X.checksum??null,encryptionMethod:X.encryptionMethod,sessionKey:X.sessionKey,ivSessionKey:X.ivSessionKey,storageProvider:X.storageProvider,skipped:X.skipped,reason:X.reason}}catch($){return yD($)}}async listBundles(D){try{let $=this.apikey||BD(!0),X=await jD($,this.supaHost,this.supaAnon);return{success:!0,data:(await Hw(X,D)).map((Q)=>({id:Q.id.toString(),version:Q.name,uploadedAt:new Date(Q.created_at||""),size:0,encrypted:Q.session_key!==null}))}}catch($){return yD($)}}async deleteBundle(D,$){try{let X={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon,bundle:$};return await Je($,D,X,!0),{success:!0}}catch(X){return yD(X)}}async cleanupBundles(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,bundle:D.bundle||"",version:"",keep:D.keep||4,force:D.force||!1,ignoreChannel:D.ignoreChannel||!1};return{success:!0,data:await is(D.appId,$,!0)}}catch($){return yD($)}}async requestBuild(D){try{let $=D.credentials,X={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,path:D.path,platform:D.platform,userId:D.userId,buildCertificateBase64:$?.BUILD_CERTIFICATE_BASE64,p12Password:$?.P12_PASSWORD,appleKeyId:$?.APPLE_KEY_ID,appleIssuerId:$?.APPLE_ISSUER_ID,appleKeyContent:$?.APPLE_KEY_CONTENT,appStoreConnectTeamId:$?.APP_STORE_CONNECT_TEAM_ID,iosScheme:$?.CAPGO_IOS_SCHEME,iosTarget:$?.CAPGO_IOS_TARGET,iosDistribution:$?.CAPGO_IOS_DISTRIBUTION,iosProvisioningMap:$?.CAPGO_IOS_PROVISIONING_MAP,androidKeystoreFile:$?.ANDROID_KEYSTORE_FILE,keystoreKeyAlias:$?.KEYSTORE_KEY_ALIAS,keystoreKeyPassword:$?.KEYSTORE_KEY_PASSWORD,keystoreStorePassword:$?.KEYSTORE_STORE_PASSWORD,playConfigJson:$?.PLAY_CONFIG_JSON},Y=await ns(D.appId,X,!0);if(Y.success&&Y.jobId)return{success:!0,data:{jobId:Y.jobId,uploadUrl:Y.uploadUrl||"",status:Y.status||"unknown"}};return{success:!1,error:Y.error||"Unknown error during build request"}}catch($){return yD($)}}async getCurrentBundle(D,$,X){try{let Y={apikey:X?.apikey||this.apikey||BD(!0),quiet:!0,supaHost:X?.supaHost||this.supaHost,supaAnon:X?.supaAnon||this.supaAnon};return{success:!0,data:await cDD($,D,Y,!0)}}catch(Y){return yD(Y)}}async addChannel(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,default:D.default,selfAssign:D.selfAssign};return await mDD(D.channelId,D.appId,$,!0),{success:!0}}catch($){return yD($)}}async updateChannel(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,bundle:D.bundle??void 0,state:D.state,downgrade:D.downgrade,ios:D.ios,android:D.android,selfAssign:D.selfAssign,disableAutoUpdate:D.disableAutoUpdate??void 0,dev:D.dev,emulator:D.emulator,device:D.device,prod:D.prod,latest:!1,latestRemote:!1,packageJson:void 0,ignoreMetadataCheck:!1};return await pDD(D.channelId,D.appId,$,!0),{success:!0}}catch($){return yD($)}}async deleteChannel(D,$,X=!1){try{let Y={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon,deleteBundle:X,successIfNotFound:!1};return await dDD(D,$,Y,!0),{success:!0}}catch(Y){return yD(Y)}}async listChannels(D){try{let $={apikey:this.apikey||BD(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return{success:!0,data:await lDD(D,$,!0)}}catch($){return yD($)}}async generateEncryptionKeys(D){try{return await eDD({force:D?.force,setupChannel:D?.setupChannel},!0),{success:!0}}catch($){return yD($)}}async saveEncryptionKey(D){try{return await tDD({key:D?.keyPath,keyData:D?.keyData,setupChannel:D?.setupChannel},!0),{success:!0}}catch($){return yD($)}}async deleteLegacyEncryptionKey(D){try{return{success:!0,data:{deleted:await sDD({force:D?.force,setupChannel:D?.setupChannel},!0)}}}catch($){return yD($)}}async listOrganizations(D){try{let $={apikey:D?.apikey||this.apikey||BD(!0),supaHost:D?.supaHost||this.supaHost,supaAnon:D?.supaAnon||this.supaAnon};return{success:!0,data:(await J0D($,!0)).map((J)=>({id:String(J.id??J.gid??""),name:J.name??"Unknown",role:J.role??void 0,appCount:typeof J.app_count==="number"?J.app_count:void 0,email:J.management_email??void 0,createdAt:J.created_at?new Date(J.created_at):void 0}))}}catch($){return yD($)}}async addOrganization(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,email:D.email},X=await $0D($,!0);return{success:!0,data:{id:String(X.id??X.gid??""),name:X.name??D.name,role:"owner",appCount:0,email:X.management_email??D.email,createdAt:X.created_at?new Date(X.created_at):void 0}}}catch($){return yD($)}}async updateOrganization(D){try{let $={apikey:D.apikey||this.apikey||BD(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,email:D.email},X=await Y0D(D.orgId,$,!0);return{success:!0,data:{id:X.orgId,name:X.name,email:X.email}}}catch($){return yD($)}}async deleteOrganization(D,$){try{let X={apikey:$?.apikey||this.apikey||BD(!0),supaHost:$?.supaHost||this.supaHost,supaAnon:$?.supaAnon||this.supaAnon,autoConfirm:$?.autoConfirm??!0};return{success:!0,data:{deleted:await X0D(D,X,!0)}}}catch(X){return yD(X)}}async getStats(D){try{let $=D.apikey||this.apikey||BD(!0),X=await v$(),Y={appId:D.appId,devicesId:D.deviceIds,search:D.search,order:D.order,rangeStart:D.after||D.rangeStart,rangeEnd:D.rangeEnd,limit:D.limit},J=await fetch(`${X.hostApi}/private/stats`,{method:"POST",headers:{"Content-Type":"application/json",capgkey:$},body:JSON.stringify(Y)});if(!J.ok)throw Error(`HTTP error! status: ${J.status}`);return{success:!0,data:(await J.json()).map((Z)=>({appId:Z.app_id,deviceId:Z.device_id,action:Z.action,versionId:Z.version_id,version:Z.version,createdAt:Z.created_at}))}}catch($){return yD($)}}async setAppSetting(D,$){try{return await Bt(D,{apikey:$.apikey||this.apikey||BD(!0),bool:$.bool,string:$.string},!0),{success:!0}}catch(X){return yD(X)}}async probe(D){try{let{probeInternal:$}=await Promise.resolve().then(() => (H0D(),K0D)),X=await $({platform:D.platform});if(X.error)return{success:!1,error:X.error};return{success:!0,data:X}}catch($){return yD($)}}}async function aD0(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).uploadBundle(D)}async function tD0(D){return new U0({supaHost:D.supaHost,supaAnon:D.supaAnon}).login(D)}async function sD0(D){return new U0().doctor(D)}async function eD0(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).checkBundleCompatibility(D)}async function D00(D){return new U0().encryptBundle(D)}async function $00(D){return new U0().decryptBundle(D)}async function X00(D){return new U0().zipBundle(D)}async function J00(D){return new U0().starRepo(D)}async function Y00(D){return new U0().starAllRepositories(D)}async function Q00(D){return new U0().generateEncryptionKeys(D)}async function F00(D){return new U0().saveEncryptionKey(D)}async function Z00(D){return new U0().deleteLegacyEncryptionKey(D)}async function w00(D,$,X){return new U0({apikey:X?.apikey,supaHost:X?.supaHost,supaAnon:X?.supaAnon}).getCurrentBundle(D,$,X)}async function G00(D,$){return new U0({apikey:$.apikey}).setAppSetting(D,$)}async function U00(D){return new U0({apikey:D?.apikey,supaHost:D?.supaHost,supaAnon:D?.supaAnon}).getAccountId(D)}async function O00(D){return new U0({apikey:D?.apikey,supaHost:D?.supaHost,supaAnon:D?.supaAnon}).listOrganizations(D)}async function q00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).addOrganization(D)}async function z00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).updateOrganization(D)}async function B00(D,$){return new U0({apikey:$?.apikey,supaHost:$?.supaHost,supaAnon:$?.supaAnon}).deleteOrganization(D,$)}async function W00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).addApp(D)}async function K00(D,$){return new U0($).listBundles(D)}async function H00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).addChannel(D)}async function V00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).requestBuild(D)}async function N00(D){return new U0({apikey:D.apikey,supaHost:D.supaHost,supaAnon:D.supaAnon}).getStats(D)}async function L00(D){return new U0().probe(D)}async function M00(){try{return await ID()}catch{return null}}export{X00 as zipBundle,aD0 as uploadBundle,z00 as updateOrganization,G00 as updateAppSetting,J00 as starRepo,Y00 as starAllRepositories,F00 as saveEncryptionKey,V00 as requestBuild,L00 as probeUpdates,l5 as parseSecurityPolicyError,tD0 as login,O00 as listOrganizations,K00 as listBundles,ro as isSecurityPolicyError,N00 as getStats,qED as getSecurityPolicyMessage,w00 as getCurrentBundle,M00 as getCapacitorConfig,U00 as getAccountId,Q00 as generateEncryptionKeys,HL as formatApiErrorForCli,D00 as encryptBundle,sD0 as doctor,B00 as deleteOrganization,Z00 as deleteLegacyEncryptionKey,$00 as decryptBundle,jD as createSupabaseClient,eD0 as checkBundleCompatibility,q00 as addOrganization,H00 as addChannel,W00 as addApp,sZ as SECURITY_POLICY_MESSAGES,J2 as SECURITY_POLICY_ERRORS,U0 as CapgoSDK};
|