@capgo/cli 7.71.10 → 7.71.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +42 -42
- package/dist/package.json +1 -1
- package/dist/src/sdk.js +29 -29
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -121,7 +121,7 @@ tell application "System Events" to get value of property list item "CFBundleNam
|
|
|
121
121
|
* Copyright (c) 2014-present, Jon Schlinkert.
|
|
122
122
|
* Licensed under the MIT License.
|
|
123
123
|
*/var LD0=a("util"),_P=CP(),xP=(D)=>D!==null&&typeof D==="object"&&!Array.isArray(D),MD0=(D)=>{return(Y)=>D===!0?Number(Y):String(Y)},HF=(D)=>{return typeof D==="number"||typeof D==="string"&&D!==""},JY=(D)=>Number.isInteger(+D),FF=(D)=>{let Y=`${D}`,X=-1;if(Y[0]==="-")Y=Y.slice(1);if(Y==="0")return!1;while(Y[++X]==="0");return X>0},OD0=(D,Y,X)=>{if(typeof D==="string"||typeof Y==="string")return!0;return X.stringify===!0},ND0=(D,Y,X)=>{if(Y>0){let Q=D[0]==="-"?"-":"";if(Q)D=D.slice(1);D=Q+D.padStart(Q?Y-1:Y,"0")}if(X===!1)return String(D);return D},pJ=(D,Y)=>{let X=D[0]==="-"?"-":"";if(X)D=D.slice(1),Y--;while(D.length<Y)D="0"+D;return X?"-"+D:D},ZD0=(D,Y,X)=>{D.negatives.sort((G,B)=>G<B?-1:G>B?1:0),D.positives.sort((G,B)=>G<B?-1:G>B?1:0);let Q=Y.capture?"":"?:",J="",W="",$;if(D.positives.length)J=D.positives.map((G)=>pJ(String(G),X)).join("|");if(D.negatives.length)W=`-(${Q}${D.negatives.map((G)=>pJ(String(G),X)).join("|")})`;if(J&&W)$=`${J}|${W}`;else $=J||W;if(Y.wrap)return`(${Q}${$})`;return $},bP=(D,Y,X,Q)=>{if(X)return _P(D,Y,{wrap:!1,...Q});let J=String.fromCharCode(D);if(D===Y)return J;let W=String.fromCharCode(Y);return`[${J}-${W}]`},kP=(D,Y,X)=>{if(Array.isArray(D)){let Q=X.wrap===!0,J=X.capture?"":"?:";return Q?`(${J}${D.join("|")})`:D.join("|")}return _P(D,Y,X)},vP=(...D)=>{return RangeError("Invalid range arguments: "+LD0.inspect(...D))},yP=(D,Y,X)=>{if(X.strictRanges===!0)throw vP([D,Y]);return[]},AD0=(D,Y)=>{if(Y.strictRanges===!0)throw TypeError(`Expected step "${D}" to be a number`);return[]},ED0=(D,Y,X=1,Q={})=>{let J=Number(D),W=Number(Y);if(!Number.isInteger(J)||!Number.isInteger(W)){if(Q.strictRanges===!0)throw vP([D,Y]);return[]}if(J===0)J=0;if(W===0)W=0;let $=J>W,G=String(D),B=String(Y),H=String(X);X=Math.max(Math.abs(X),1);let F=FF(G)||FF(B)||FF(H),K=F?Math.max(G.length,B.length,H.length):0,U=F===!1&&OD0(D,Y,Q)===!1,z=Q.transform||MD0(U);if(Q.toRegex&&X===1)return bP(pJ(D,K),pJ(Y,K),!0,Q);let V={negatives:[],positives:[]},w=(Z)=>V[Z<0?"negatives":"positives"].push(Math.abs(Z)),L=[],O=0;while($?J>=W:J<=W){if(Q.toRegex===!0&&X>1)w(J);else L.push(ND0(z(J,O),K,U));J=$?J-X:J+X,O++}if(Q.toRegex===!0)return X>1?ZD0(V,Q,K):kP(L,null,{wrap:!1,...Q});return L},RD0=(D,Y,X=1,Q={})=>{if(!JY(D)&&D.length>1||!JY(Y)&&Y.length>1)return yP(D,Y,Q);let J=Q.transform||((U)=>String.fromCharCode(U)),W=`${D}`.charCodeAt(0),$=`${Y}`.charCodeAt(0),G=W>$,B=Math.min(W,$),H=Math.max(W,$);if(Q.toRegex&&X===1)return bP(B,H,!1,Q);let F=[],K=0;while(G?W>=$:W<=$)F.push(J(W,K)),W=G?W-X:W+X,K++;if(Q.toRegex===!0)return kP(F,null,{wrap:!1,options:Q});return F},dJ=(D,Y,X,Q={})=>{if(Y==null&&HF(D))return[D];if(!HF(D)||!HF(Y))return yP(D,Y,Q);if(typeof X==="function")return dJ(D,Y,1,{transform:X});if(xP(X))return dJ(D,Y,0,X);let J={...Q};if(J.capture===!0)J.wrap=!0;if(X=X||J.step||1,!JY(X)){if(X!=null&&!xP(X))return AD0(X,J);return dJ(D,Y,1,X)}if(JY(D)&&JY(Y))return ED0(D,Y,X,J);return RD0(D,Y,Math.max(Math.abs(X),1),J)};fP.exports=dJ});var uP=T((KA0,gP)=>{var jD0=qF(),hP=cJ(),TD0=(D,Y={})=>{let X=(Q,J={})=>{let W=hP.isInvalidBrace(J),$=Q.invalid===!0&&Y.escapeInvalid===!0,G=W===!0||$===!0,B=Y.escapeInvalid===!0?"\\":"",H="";if(Q.isOpen===!0)return B+Q.value;if(Q.isClose===!0)return console.log("node.isClose",B,Q.value),B+Q.value;if(Q.type==="open")return G?B+Q.value:"(";if(Q.type==="close")return G?B+Q.value:")";if(Q.type==="comma")return Q.prev.type==="comma"?"":G?Q.value:"|";if(Q.value)return Q.value;if(Q.nodes&&Q.ranges>0){let F=hP.reduce(Q.nodes),K=jD0(...F,{...Y,wrap:!1,toRegex:!0,strictZeros:!0});if(K.length!==0)return F.length>1&&K.length>1?`(${K})`:K}if(Q.nodes)for(let F of Q.nodes)H+=X(F,Q);return H};return X(D)};gP.exports=TD0});var lP=T((zA0,cP)=>{var SD0=qF(),mP=lJ(),r4=cJ(),K5=(D="",Y="",X=!1)=>{let Q=[];if(D=[].concat(D),Y=[].concat(Y),!Y.length)return D;if(!D.length)return X?r4.flatten(Y).map((J)=>`{${J}}`):Y;for(let J of D)if(Array.isArray(J))for(let W of J)Q.push(K5(W,Y,X));else for(let W of Y){if(X===!0&&typeof W==="string")W=`{${W}}`;Q.push(Array.isArray(W)?K5(J,W,X):J+W)}return r4.flatten(Q)},PD0=(D,Y={})=>{let X=Y.rangeLimit===void 0?1000:Y.rangeLimit,Q=(J,W={})=>{J.queue=[];let $=W,G=W.queue;while($.type!=="brace"&&$.type!=="root"&&$.parent)$=$.parent,G=$.queue;if(J.invalid||J.dollar){G.push(K5(G.pop(),mP(J,Y)));return}if(J.type==="brace"&&J.invalid!==!0&&J.nodes.length===2){G.push(K5(G.pop(),["{}"]));return}if(J.nodes&&J.ranges>0){let K=r4.reduce(J.nodes);if(r4.exceedsLimit(...K,Y.step,X))throw RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let U=SD0(...K,Y);if(U.length===0)U=mP(J,Y);G.push(K5(G.pop(),U)),J.nodes=[];return}let B=r4.encloseBrace(J),H=J.queue,F=J;while(F.type!=="brace"&&F.type!=="root"&&F.parent)F=F.parent,H=F.queue;for(let K=0;K<J.nodes.length;K++){let U=J.nodes[K];if(U.type==="comma"&&J.type==="brace"){if(K===1)H.push("");H.push("");continue}if(U.type==="close"){G.push(K5(G.pop(),H,B));continue}if(U.value&&U.type!=="open"){H.push(K5(H.pop(),U.value));continue}if(U.nodes)Q(U,J)}return H};return r4.flatten(Q(D))};cP.exports=PD0});var pP=T((UA0,dP)=>{dP.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:`
|
|
124
|
-
`,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 oP=T((VA0,aP)=>{var ID0=lJ(),{MAX_LENGTH:nP,CHAR_BACKSLASH:KF,CHAR_BACKTICK:CD0,CHAR_COMMA:xD0,CHAR_DOT:_D0,CHAR_LEFT_PARENTHESES:bD0,CHAR_RIGHT_PARENTHESES:kD0,CHAR_LEFT_CURLY_BRACE:vD0,CHAR_RIGHT_CURLY_BRACE:yD0,CHAR_LEFT_SQUARE_BRACKET:iP,CHAR_RIGHT_SQUARE_BRACKET:rP,CHAR_DOUBLE_QUOTE:fD0,CHAR_SINGLE_QUOTE:hD0,CHAR_NO_BREAK_SPACE:gD0,CHAR_ZERO_WIDTH_NOBREAK_SPACE:uD0}=pP(),mD0=(D,Y={})=>{if(typeof D!=="string")throw TypeError("Expected a string");let X=Y||{},Q=typeof X.maxLength==="number"?Math.min(nP,X.maxLength):nP;if(D.length>Q)throw SyntaxError(`Input length (${D.length}), exceeds max characters (${Q})`);let J={type:"root",input:D,nodes:[]},W=[J],$=J,G=J,B=0,H=D.length,F=0,K=0,U,z=()=>D[F++],V=(w)=>{if(w.type==="text"&&G.type==="dot")G.type="text";if(G&&G.type==="text"&&w.type==="text"){G.value+=w.value;return}return $.nodes.push(w),w.parent=$,w.prev=G,G=w,w};V({type:"bos"});while(F<H){if($=W[W.length-1],U=z(),U===uD0||U===gD0)continue;if(U===KF){V({type:"text",value:(Y.keepEscaping?U:"")+z()});continue}if(U===rP){V({type:"text",value:"\\"+U});continue}if(U===iP){B++;let w;while(F<H&&(w=z())){if(U+=w,w===iP){B++;continue}if(w===KF){U+=z();continue}if(w===rP){if(B--,B===0)break}}V({type:"text",value:U});continue}if(U===bD0){$=V({type:"paren",nodes:[]}),W.push($),V({type:"text",value:U});continue}if(U===kD0){if($.type!=="paren"){V({type:"text",value:U});continue}$=W.pop(),V({type:"text",value:U}),$=W[W.length-1];continue}if(U===fD0||U===hD0||U===CD0){let w=U,L;if(Y.keepQuotes!==!0)U="";while(F<H&&(L=z())){if(L===KF){U+=L+z();continue}if(L===w){if(Y.keepQuotes===!0)U+=L;break}U+=L}V({type:"text",value:U});continue}if(U===vD0){K++;let L={type:"brace",open:!0,close:!1,dollar:G.value&&G.value.slice(-1)==="$"||$.dollar===!0,depth:K,commas:0,ranges:0,nodes:[]};$=V(L),W.push($),V({type:"open",value:U});continue}if(U===yD0){if($.type!=="brace"){V({type:"text",value:U});continue}let w="close";$=W.pop(),$.close=!0,V({type:w,value:U}),K--,$=W[W.length-1];continue}if(U===xD0&&K>0){if($.ranges>0){$.ranges=0;let w=$.nodes.shift();$.nodes=[w,{type:"text",value:ID0($)}]}V({type:"comma",value:U}),$.commas++;continue}if(U===_D0&&K>0&&$.commas===0){let w=$.nodes;if(K===0||w.length===0){V({type:"text",value:U});continue}if(G.type==="dot"){if($.range=[],G.value+=U,G.type="range",$.nodes.length!==3&&$.nodes.length!==5){$.invalid=!0,$.ranges=0,G.type="text";continue}$.ranges++,$.args=[];continue}if(G.type==="range"){w.pop();let L=w[w.length-1];L.value+=G.value+U,G=L,$.ranges--;continue}V({type:"dot",value:U});continue}V({type:"text",value:U})}do if($=W.pop(),$.type!=="root"){$.nodes.forEach((O)=>{if(!O.nodes){if(O.type==="open")O.isOpen=!0;if(O.type==="close")O.isClose=!0;if(!O.nodes)O.type="text";O.invalid=!0}});let w=W[W.length-1],L=w.nodes.indexOf($);w.nodes.splice(L,1,...$.nodes)}while(W.length>0);return V({type:"eos"}),J};aP.exports=mD0});var eP=T((wA0,tP)=>{var sP=lJ(),cD0=uP(),lD0=lP(),dD0=oP(),J6=(D,Y={})=>{let X=[];if(Array.isArray(D))for(let Q of D){let J=J6.create(Q,Y);if(Array.isArray(J))X.push(...J);else X.push(J)}else X=[].concat(J6.create(D,Y));if(Y&&Y.expand===!0&&Y.nodupes===!0)X=[...new Set(X)];return X};J6.parse=(D,Y={})=>dD0(D,Y);J6.stringify=(D,Y={})=>{if(typeof D==="string")return sP(J6.parse(D,Y),Y);return sP(D,Y)};J6.compile=(D,Y={})=>{if(typeof D==="string")D=J6.parse(D,Y);return cD0(D,Y)};J6.expand=(D,Y={})=>{if(typeof D==="string")D=J6.parse(D,Y);let X=lD0(D,Y);if(Y.noempty===!0)X=X.filter(Boolean);if(Y.nodupes===!0)X=[...new Set(X)];return X};J6.create=(D,Y={})=>{if(D===""||D.length<3)return[D];return Y.expand!==!0?J6.compile(D,Y):J6.expand(D,Y)};tP.exports=J6});var WY=T((LA0,YI)=>{var pD0=a("path"),DI={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:"(?:^|\\/)"},nD0={...DI,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:"(?:[\\\\/]|$)"},iD0={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"};YI.exports={MAX_LENGTH:65536,POSIX_REGEX_SOURCE:iD0,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:pD0.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?nD0:DI}}});var $Y=T((D50)=>{var rD0=a("path"),aD0=process.platform==="win32",{REGEX_BACKSLASH:oD0,REGEX_REMOVE_BACKSLASH:sD0,REGEX_SPECIAL_CHARS:tD0,REGEX_SPECIAL_CHARS_GLOBAL:eD0}=WY();D50.isObject=(D)=>D!==null&&typeof D==="object"&&!Array.isArray(D);D50.hasRegexChars=(D)=>tD0.test(D);D50.isRegexChar=(D)=>D.length===1&&D50.hasRegexChars(D);D50.escapeRegex=(D)=>D.replace(eD0,"\\$1");D50.toPosixSlashes=(D)=>D.replace(oD0,"/");D50.removeBackslashes=(D)=>{return D.replace(sD0,(Y)=>{return Y==="\\"?"":Y})};D50.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};D50.isWindows=(D)=>{if(D&&typeof D.windows==="boolean")return D.windows;return aD0===!0||rD0.sep==="\\"};D50.escapeLast=(D,Y,X)=>{let Q=D.lastIndexOf(Y,X);if(Q===-1)return D;if(D[Q-1]==="\\")return D50.escapeLast(D,Y,Q-1);return`${D.slice(0,Q)}\\${D.slice(Q)}`};D50.removePrefix=(D,Y={})=>{let X=D;if(X.startsWith("./"))X=X.slice(2),Y.prefix="./";return X};D50.wrapOutput=(D,Y={},X={})=>{let Q=X.contains?"":"^",J=X.contains?"":"$",W=`${Q}(?:${D})${J}`;if(Y.negated===!0)W=`(?:^(?!${W}).*$)`;return W}});var qI=T((OA0,FI)=>{var JI=$Y(),{CHAR_ASTERISK:zF,CHAR_AT:F50,CHAR_BACKWARD_SLASH:GY,CHAR_COMMA:q50,CHAR_DOT:UF,CHAR_EXCLAMATION_MARK:VF,CHAR_FORWARD_SLASH:HI,CHAR_LEFT_CURLY_BRACE:wF,CHAR_LEFT_PARENTHESES:LF,CHAR_LEFT_SQUARE_BRACKET:K50,CHAR_PLUS:z50,CHAR_QUESTION_MARK:WI,CHAR_RIGHT_CURLY_BRACE:U50,CHAR_RIGHT_PARENTHESES:$I,CHAR_RIGHT_SQUARE_BRACKET:V50}=WY(),GI=(D)=>{return D===HI||D===GY},BI=(D)=>{if(D.isPrefix!==!0)D.depth=D.isGlobstar?1/0:1},w50=(D,Y)=>{let X=Y||{},Q=D.length-1,J=X.parts===!0||X.scanToEnd===!0,W=[],$=[],G=[],B=D,H=-1,F=0,K=0,U=!1,z=!1,V=!1,w=!1,L=!1,O=!1,Z=!1,M=!1,E=!1,j=!1,I=0,_,y,C={value:"",depth:0,isGlob:!1},c=()=>H>=Q,S=()=>B.charCodeAt(H+1),p=()=>{return _=y,B.charCodeAt(++H)};while(H<Q){y=p();let A;if(y===GY){if(Z=C.backslashes=!0,y=p(),y===wF)O=!0;continue}if(O===!0||y===wF){I++;while(c()!==!0&&(y=p())){if(y===GY){Z=C.backslashes=!0,p();continue}if(y===wF){I++;continue}if(O!==!0&&y===UF&&(y=p())===UF){if(U=C.isBrace=!0,V=C.isGlob=!0,j=!0,J===!0)continue;break}if(O!==!0&&y===q50){if(U=C.isBrace=!0,V=C.isGlob=!0,j=!0,J===!0)continue;break}if(y===U50){if(I--,I===0){O=!1,U=C.isBrace=!0,j=!0;break}}}if(J===!0)continue;break}if(y===HI){if(W.push(H),$.push(C),C={value:"",depth:0,isGlob:!1},j===!0)continue;if(_===UF&&H===F+1){F+=2;continue}K=H+1;continue}if(X.noext!==!0){if((y===z50||y===F50||y===zF||y===WI||y===VF)===!0&&S()===LF){if(V=C.isGlob=!0,w=C.isExtglob=!0,j=!0,y===VF&&H===F)E=!0;if(J===!0){while(c()!==!0&&(y=p())){if(y===GY){Z=C.backslashes=!0,y=p();continue}if(y===$I){V=C.isGlob=!0,j=!0;break}}continue}break}}if(y===zF){if(_===zF)L=C.isGlobstar=!0;if(V=C.isGlob=!0,j=!0,J===!0)continue;break}if(y===WI){if(V=C.isGlob=!0,j=!0,J===!0)continue;break}if(y===K50){while(c()!==!0&&(A=p())){if(A===GY){Z=C.backslashes=!0,p();continue}if(A===V50){z=C.isBracket=!0,V=C.isGlob=!0,j=!0;break}}if(J===!0)continue;break}if(X.nonegate!==!0&&y===VF&&H===F){M=C.negated=!0,F++;continue}if(X.noparen!==!0&&y===LF){if(V=C.isGlob=!0,J===!0){while(c()!==!0&&(y=p())){if(y===LF){Z=C.backslashes=!0,y=p();continue}if(y===$I){j=!0;break}}continue}break}if(V===!0){if(j=!0,J===!0)continue;break}}if(X.noext===!0)w=!1,V=!1;let u=B,Q0="",x="";if(F>0)Q0=B.slice(0,F),B=B.slice(F),K-=F;if(u&&V===!0&&K>0)u=B.slice(0,K),x=B.slice(K);else if(V===!0)u="",x=B;else u=B;if(u&&u!==""&&u!=="/"&&u!==B){if(GI(u.charCodeAt(u.length-1)))u=u.slice(0,-1)}if(X.unescape===!0){if(x)x=JI.removeBackslashes(x);if(u&&Z===!0)u=JI.removeBackslashes(u)}let N={prefix:Q0,input:D,start:F,base:u,glob:x,isBrace:U,isBracket:z,isGlob:V,isExtglob:w,isGlobstar:L,negated:M,negatedExtglob:E};if(X.tokens===!0){if(N.maxDepth=0,!GI(y))$.push(C);N.tokens=$}if(X.parts===!0||X.tokens===!0){let A;for(let R=0;R<W.length;R++){let P=A?A+1:F,v=W[R],b=D.slice(P,v);if(X.tokens){if(R===0&&F!==0)$[R].isPrefix=!0,$[R].value=Q0;else $[R].value=b;BI($[R]),N.maxDepth+=$[R].depth}if(R!==0||b!=="")G.push(b);A=v}if(A&&A+1<D.length){let R=D.slice(A+1);if(G.push(R),X.tokens)$[$.length-1].value=R,BI($[$.length-1]),N.maxDepth+=$[$.length-1].depth}N.slashes=W,N.parts=G}return N};FI.exports=w50});var UI=T((NA0,zI)=>{var nJ=WY(),W6=$Y(),{MAX_LENGTH:iJ,POSIX_REGEX_SOURCE:L50,REGEX_NON_SPECIAL_CHARS:M50,REGEX_SPECIAL_CHARS_BACKREF:O50,REPLACEMENTS:KI}=nJ,N50=(D,Y)=>{if(typeof Y.expandRange==="function")return Y.expandRange(...D,Y);D.sort();let X=`[${D.join("-")}]`;try{new RegExp(X)}catch(Q){return D.map((J)=>W6.escapeRegex(J)).join("..")}return X},a4=(D,Y)=>{return`Missing ${D}: "${Y}" - use "\\\\${Y}" to match literal characters`},MF=(D,Y)=>{if(typeof D!=="string")throw TypeError("Expected a string");D=KI[D]||D;let X={...Y},Q=typeof X.maxLength==="number"?Math.min(iJ,X.maxLength):iJ,J=D.length;if(J>Q)throw SyntaxError(`Input length: ${J}, exceeds maximum allowed length: ${Q}`);let W={type:"bos",value:"",output:X.prepend||""},$=[W],G=X.capture?"":"?:",B=W6.isWindows(Y),H=nJ.globChars(B),F=nJ.extglobChars(H),{DOT_LITERAL:K,PLUS_LITERAL:U,SLASH_LITERAL:z,ONE_CHAR:V,DOTS_SLASH:w,NO_DOT:L,NO_DOT_SLASH:O,NO_DOTS_SLASH:Z,QMARK:M,QMARK_NO_DOT:E,STAR:j,START_ANCHOR:I}=H,_=(Y0)=>{return`(${G}(?:(?!${I}${Y0.dot?w:K}).)*?)`},y=X.dot?"":L,C=X.dot?M:E,c=X.bash===!0?_(X):j;if(X.capture)c=`(${c})`;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:$};D=W6.removePrefix(D,S),J=D.length;let p=[],u=[],Q0=[],x=W,N,A=()=>S.index===J-1,R=S.peek=(Y0=1)=>D[S.index+Y0],P=S.advance=()=>D[++S.index]||"",v=()=>D.slice(S.index+1),b=(Y0="",n0=0)=>{S.consumed+=Y0,S.index+=n0},r=(Y0)=>{S.output+=Y0.output!=null?Y0.output:Y0.value,b(Y0.value)},k=()=>{let Y0=1;while(R()==="!"&&(R(2)!=="("||R(3)==="?"))P(),S.start++,Y0++;if(Y0%2===0)return!1;return S.negated=!0,S.start++,!0},g=(Y0)=>{S[Y0]++,Q0.push(Y0)},$0=(Y0)=>{S[Y0]--,Q0.pop()},l=(Y0)=>{if(x.type==="globstar"){let n0=S.braces>0&&(Y0.type==="comma"||Y0.type==="brace"),t=Y0.extglob===!0||p.length&&(Y0.type==="pipe"||Y0.type==="paren");if(Y0.type!=="slash"&&Y0.type!=="paren"&&!n0&&!t)S.output=S.output.slice(0,-x.output.length),x.type="star",x.value="*",x.output=c,S.output+=x.output}if(p.length&&Y0.type!=="paren")p[p.length-1].inner+=Y0.value;if(Y0.value||Y0.output)r(Y0);if(x&&x.type==="text"&&Y0.type==="text"){x.value+=Y0.value,x.output=(x.output||"")+Y0.value;return}Y0.prev=x,$.push(Y0),x=Y0},T0=(Y0,n0)=>{let t={...F[n0],conditions:1,inner:""};t.prev=x,t.parens=S.parens,t.output=S.output;let k0=(X.capture?"(":"")+t.open;g("parens"),l({type:Y0,value:n0,output:S.output?"":V}),l({type:"paren",extglob:!0,value:P(),output:k0}),p.push(t)},s8=(Y0)=>{let n0=Y0.close+(X.capture?")":""),t;if(Y0.type==="negate"){let k0=c;if(Y0.inner&&Y0.inner.length>1&&Y0.inner.includes("/"))k0=_(X);if(k0!==c||A()||/^\)+$/.test(v()))n0=Y0.close=`)$))${k0}`;if(Y0.inner.includes("*")&&(t=v())&&/^\.[^\\/.]+$/.test(t)){let A1=MF(t,{...Y,fastpaths:!1}).output;n0=Y0.close=`)${A1})${k0})`}if(Y0.prev.type==="bos")S.negatedExtglob=!0}l({type:"paren",extglob:!0,value:N,output:n0}),$0("parens")};if(X.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(D)){let Y0=!1,n0=D.replace(O50,(t,k0,A1,N8,d1,c$)=>{if(N8==="\\")return Y0=!0,t;if(N8==="?"){if(k0)return k0+N8+(d1?M.repeat(d1.length):"");if(c$===0)return C+(d1?M.repeat(d1.length):"");return M.repeat(A1.length)}if(N8===".")return K.repeat(A1.length);if(N8==="*"){if(k0)return k0+N8+(d1?c:"");return c}return k0?t:`\\${t}`});if(Y0===!0)if(X.unescape===!0)n0=n0.replace(/\\/g,"");else n0=n0.replace(/\\+/g,(t)=>{return t.length%2===0?"\\\\":t?"\\":""});if(n0===D&&X.contains===!0)return S.output=D,S;return S.output=W6.wrapOutput(n0,S,Y),S}while(!A()){if(N=P(),N==="\x00")continue;if(N==="\\"){let t=R();if(t==="/"&&X.bash!==!0)continue;if(t==="."||t===";")continue;if(!t){N+="\\",l({type:"text",value:N});continue}let k0=/^\\+/.exec(v()),A1=0;if(k0&&k0[0].length>2){if(A1=k0[0].length,S.index+=A1,A1%2!==0)N+="\\"}if(X.unescape===!0)N=P();else N+=P();if(S.brackets===0){l({type:"text",value:N});continue}}if(S.brackets>0&&(N!=="]"||x.value==="["||x.value==="[^")){if(X.posix!==!1&&N===":"){let t=x.value.slice(1);if(t.includes("[")){if(x.posix=!0,t.includes(":")){let k0=x.value.lastIndexOf("["),A1=x.value.slice(0,k0),N8=x.value.slice(k0+2),d1=L50[N8];if(d1){if(x.value=A1+d1,S.backtrack=!0,P(),!W.output&&$.indexOf(x)===1)W.output=V;continue}}}}if(N==="["&&R()!==":"||N==="-"&&R()==="]")N=`\\${N}`;if(N==="]"&&(x.value==="["||x.value==="[^"))N=`\\${N}`;if(X.posix===!0&&N==="!"&&x.value==="[")N="^";x.value+=N,r({value:N});continue}if(S.quotes===1&&N!=='"'){N=W6.escapeRegex(N),x.value+=N,r({value:N});continue}if(N==='"'){if(S.quotes=S.quotes===1?0:1,X.keepQuotes===!0)l({type:"text",value:N});continue}if(N==="("){g("parens"),l({type:"paren",value:N});continue}if(N===")"){if(S.parens===0&&X.strictBrackets===!0)throw SyntaxError(a4("opening","("));let t=p[p.length-1];if(t&&S.parens===t.parens+1){s8(p.pop());continue}l({type:"paren",value:N,output:S.parens?")":"\\)"}),$0("parens");continue}if(N==="["){if(X.nobracket===!0||!v().includes("]")){if(X.nobracket!==!0&&X.strictBrackets===!0)throw SyntaxError(a4("closing","]"));N=`\\${N}`}else g("brackets");l({type:"bracket",value:N});continue}if(N==="]"){if(X.nobracket===!0||x&&x.type==="bracket"&&x.value.length===1){l({type:"text",value:N,output:`\\${N}`});continue}if(S.brackets===0){if(X.strictBrackets===!0)throw SyntaxError(a4("opening","["));l({type:"text",value:N,output:`\\${N}`});continue}$0("brackets");let t=x.value.slice(1);if(x.posix!==!0&&t[0]==="^"&&!t.includes("/"))N=`/${N}`;if(x.value+=N,r({value:N}),X.literalBrackets===!1||W6.hasRegexChars(t))continue;let k0=W6.escapeRegex(x.value);if(S.output=S.output.slice(0,-x.value.length),X.literalBrackets===!0){S.output+=k0,x.value=k0;continue}x.value=`(${G}${k0}|${x.value})`,S.output+=x.value;continue}if(N==="{"&&X.nobrace!==!0){g("braces");let t={type:"brace",value:N,output:"(",outputIndex:S.output.length,tokensIndex:S.tokens.length};u.push(t),l(t);continue}if(N==="}"){let t=u[u.length-1];if(X.nobrace===!0||!t){l({type:"text",value:N,output:N});continue}let k0=")";if(t.dots===!0){let A1=$.slice(),N8=[];for(let d1=A1.length-1;d1>=0;d1--){if($.pop(),A1[d1].type==="brace")break;if(A1[d1].type!=="dots")N8.unshift(A1[d1].value)}k0=N50(N8,X),S.backtrack=!0}if(t.comma!==!0&&t.dots!==!0){let A1=S.output.slice(0,t.outputIndex),N8=S.tokens.slice(t.tokensIndex);t.value=t.output="\\{",N=k0="\\}",S.output=A1;for(let d1 of N8)S.output+=d1.output||d1.value}l({type:"brace",value:N,output:k0}),$0("braces"),u.pop();continue}if(N==="|"){if(p.length>0)p[p.length-1].conditions++;l({type:"text",value:N});continue}if(N===","){let t=N,k0=u[u.length-1];if(k0&&Q0[Q0.length-1]==="braces")k0.comma=!0,t="|";l({type:"comma",value:N,output:t});continue}if(N==="/"){if(x.type==="dot"&&S.index===S.start+1){S.start=S.index+1,S.consumed="",S.output="",$.pop(),x=W;continue}l({type:"slash",value:N,output:z});continue}if(N==="."){if(S.braces>0&&x.type==="dot"){if(x.value===".")x.output=K;let t=u[u.length-1];x.type="dots",x.output+=N,x.value+=N,t.dots=!0;continue}if(S.braces+S.parens===0&&x.type!=="bos"&&x.type!=="slash"){l({type:"text",value:N,output:K});continue}l({type:"dot",value:N,output:K});continue}if(N==="?"){if(!(x&&x.value==="(")&&X.noextglob!==!0&&R()==="("&&R(2)!=="?"){T0("qmark",N);continue}if(x&&x.type==="paren"){let k0=R(),A1=N;if(k0==="<"&&!W6.supportsLookbehinds())throw Error("Node.js v10 or higher is required for regex lookbehinds");if(x.value==="("&&!/[!=<:]/.test(k0)||k0==="<"&&!/<([!=]|\w+>)/.test(v()))A1=`\\${N}`;l({type:"text",value:N,output:A1});continue}if(X.dot!==!0&&(x.type==="slash"||x.type==="bos")){l({type:"qmark",value:N,output:E});continue}l({type:"qmark",value:N,output:M});continue}if(N==="!"){if(X.noextglob!==!0&&R()==="("){if(R(2)!=="?"||!/[!=<:]/.test(R(3))){T0("negate",N);continue}}if(X.nonegate!==!0&&S.index===0){k();continue}}if(N==="+"){if(X.noextglob!==!0&&R()==="("&&R(2)!=="?"){T0("plus",N);continue}if(x&&x.value==="("||X.regex===!1){l({type:"plus",value:N,output:U});continue}if(x&&(x.type==="bracket"||x.type==="paren"||x.type==="brace")||S.parens>0){l({type:"plus",value:N});continue}l({type:"plus",value:U});continue}if(N==="@"){if(X.noextglob!==!0&&R()==="("&&R(2)!=="?"){l({type:"at",extglob:!0,value:N,output:""});continue}l({type:"text",value:N});continue}if(N!=="*"){if(N==="$"||N==="^")N=`\\${N}`;let t=M50.exec(v());if(t)N+=t[0],S.index+=t[0].length;l({type:"text",value:N});continue}if(x&&(x.type==="globstar"||x.star===!0)){x.type="star",x.star=!0,x.value+=N,x.output=c,S.backtrack=!0,S.globstar=!0,b(N);continue}let Y0=v();if(X.noextglob!==!0&&/^\([^?]/.test(Y0)){T0("star",N);continue}if(x.type==="star"){if(X.noglobstar===!0){b(N);continue}let t=x.prev,k0=t.prev,A1=t.type==="slash"||t.type==="bos",N8=k0&&(k0.type==="star"||k0.type==="globstar");if(X.bash===!0&&(!A1||Y0[0]&&Y0[0]!=="/")){l({type:"star",value:N,output:""});continue}let d1=S.braces>0&&(t.type==="comma"||t.type==="brace"),c$=p.length&&(t.type==="pipe"||t.type==="paren");if(!A1&&t.type!=="paren"&&!d1&&!c$){l({type:"star",value:N,output:""});continue}while(Y0.slice(0,3)==="/**"){let NX=D[S.index+4];if(NX&&NX!=="/")break;Y0=Y0.slice(3),b("/**",3)}if(t.type==="bos"&&A()){x.type="globstar",x.value+=N,x.output=_(X),S.output=x.output,S.globstar=!0,b(N);continue}if(t.type==="slash"&&t.prev.type!=="bos"&&!N8&&A()){S.output=S.output.slice(0,-(t.output+x.output).length),t.output=`(?:${t.output}`,x.type="globstar",x.output=_(X)+(X.strictSlashes?")":"|$)"),x.value+=N,S.globstar=!0,S.output+=t.output+x.output,b(N);continue}if(t.type==="slash"&&t.prev.type!=="bos"&&Y0[0]==="/"){let NX=Y0[1]!==void 0?"|$":"";S.output=S.output.slice(0,-(t.output+x.output).length),t.output=`(?:${t.output}`,x.type="globstar",x.output=`${_(X)}${z}|${z}${NX})`,x.value+=N,S.output+=t.output+x.output,S.globstar=!0,b(N+P()),l({type:"slash",value:"/",output:""});continue}if(t.type==="bos"&&Y0[0]==="/"){x.type="globstar",x.value+=N,x.output=`(?:^|${z}|${_(X)}${z})`,S.output=x.output,S.globstar=!0,b(N+P()),l({type:"slash",value:"/",output:""});continue}S.output=S.output.slice(0,-x.output.length),x.type="globstar",x.output=_(X),x.value+=N,S.output+=x.output,S.globstar=!0,b(N);continue}let n0={type:"star",value:N,output:c};if(X.bash===!0){if(n0.output=".*?",x.type==="bos"||x.type==="slash")n0.output=y+n0.output;l(n0);continue}if(x&&(x.type==="bracket"||x.type==="paren")&&X.regex===!0){n0.output=N,l(n0);continue}if(S.index===S.start||x.type==="slash"||x.type==="dot"){if(x.type==="dot")S.output+=O,x.output+=O;else if(X.dot===!0)S.output+=Z,x.output+=Z;else S.output+=y,x.output+=y;if(R()!=="*")S.output+=V,x.output+=V}l(n0)}while(S.brackets>0){if(X.strictBrackets===!0)throw SyntaxError(a4("closing","]"));S.output=W6.escapeLast(S.output,"["),$0("brackets")}while(S.parens>0){if(X.strictBrackets===!0)throw SyntaxError(a4("closing",")"));S.output=W6.escapeLast(S.output,"("),$0("parens")}while(S.braces>0){if(X.strictBrackets===!0)throw SyntaxError(a4("closing","}"));S.output=W6.escapeLast(S.output,"{"),$0("braces")}if(X.strictSlashes!==!0&&(x.type==="star"||x.type==="bracket"))l({type:"maybe_slash",value:"",output:`${z}?`});if(S.backtrack===!0){S.output="";for(let Y0 of S.tokens)if(S.output+=Y0.output!=null?Y0.output:Y0.value,Y0.suffix)S.output+=Y0.suffix}return S};MF.fastpaths=(D,Y)=>{let X={...Y},Q=typeof X.maxLength==="number"?Math.min(iJ,X.maxLength):iJ,J=D.length;if(J>Q)throw SyntaxError(`Input length: ${J}, exceeds maximum allowed length: ${Q}`);D=KI[D]||D;let W=W6.isWindows(Y),{DOT_LITERAL:$,SLASH_LITERAL:G,ONE_CHAR:B,DOTS_SLASH:H,NO_DOT:F,NO_DOTS:K,NO_DOTS_SLASH:U,STAR:z,START_ANCHOR:V}=nJ.globChars(W),w=X.dot?K:F,L=X.dot?U:F,O=X.capture?"":"?:",Z={negated:!1,prefix:""},M=X.bash===!0?".*?":z;if(X.capture)M=`(${M})`;let E=(y)=>{if(y.noglobstar===!0)return M;return`(${O}(?:(?!${V}${y.dot?H:$}).)*?)`},j=(y)=>{switch(y){case"*":return`${w}${B}${M}`;case".*":return`${$}${B}${M}`;case"*.*":return`${w}${M}${$}${B}${M}`;case"*/*":return`${w}${M}${G}${B}${L}${M}`;case"**":return w+E(X);case"**/*":return`(?:${w}${E(X)}${G})?${L}${B}${M}`;case"**/*.*":return`(?:${w}${E(X)}${G})?${L}${M}${$}${B}${M}`;case"**/.*":return`(?:${w}${E(X)}${G})?${$}${B}${M}`;default:{let C=/^(.*?)\.(\w+)$/.exec(y);if(!C)return;let c=j(C[1]);if(!c)return;return c+$+C[2]}}},I=W6.removePrefix(D,Z),_=j(I);if(_&&X.strictSlashes!==!0)_+=`${G}?`;return _};zI.exports=MF});var wI=T((ZA0,VI)=>{var Z50=a("path"),A50=qI(),OF=UI(),NF=$Y(),E50=WY(),R50=(D)=>D&&typeof D==="object"&&!Array.isArray(D),u1=(D,Y,X=!1)=>{if(Array.isArray(D)){let F=D.map((U)=>u1(U,Y,X));return(U)=>{for(let z of F){let V=z(U);if(V)return V}return!1}}let Q=R50(D)&&D.tokens&&D.input;if(D===""||typeof D!=="string"&&!Q)throw TypeError("Expected pattern to be a non-empty string");let J=Y||{},W=NF.isWindows(Y),$=Q?u1.compileRe(D,Y):u1.makeRe(D,Y,!1,!0),G=$.state;delete $.state;let B=()=>!1;if(J.ignore){let F={...Y,ignore:null,onMatch:null,onResult:null};B=u1(J.ignore,F,X)}let H=(F,K=!1)=>{let{isMatch:U,match:z,output:V}=u1.test(F,$,Y,{glob:D,posix:W}),w={glob:D,state:G,regex:$,posix:W,input:F,output:V,match:z,isMatch:U};if(typeof J.onResult==="function")J.onResult(w);if(U===!1)return w.isMatch=!1,K?w:!1;if(B(F)){if(typeof J.onIgnore==="function")J.onIgnore(w);return w.isMatch=!1,K?w:!1}if(typeof J.onMatch==="function")J.onMatch(w);return K?w:!0};if(X)H.state=G;return H};u1.test=(D,Y,X,{glob:Q,posix:J}={})=>{if(typeof D!=="string")throw TypeError("Expected input to be a string");if(D==="")return{isMatch:!1,output:""};let W=X||{},$=W.format||(J?NF.toPosixSlashes:null),G=D===Q,B=G&&$?$(D):D;if(G===!1)B=$?$(D):D,G=B===Q;if(G===!1||W.capture===!0)if(W.matchBase===!0||W.basename===!0)G=u1.matchBase(D,Y,X,J);else G=Y.exec(B);return{isMatch:Boolean(G),match:G,output:B}};u1.matchBase=(D,Y,X,Q=NF.isWindows(X))=>{return(Y instanceof RegExp?Y:u1.makeRe(Y,X)).test(Z50.basename(D))};u1.isMatch=(D,Y,X)=>u1(Y,X)(D);u1.parse=(D,Y)=>{if(Array.isArray(D))return D.map((X)=>u1.parse(X,Y));return OF(D,{...Y,fastpaths:!1})};u1.scan=(D,Y)=>A50(D,Y);u1.compileRe=(D,Y,X=!1,Q=!1)=>{if(X===!0)return D.output;let J=Y||{},W=J.contains?"":"^",$=J.contains?"":"$",G=`${W}(?:${D.output})${$}`;if(D&&D.negated===!0)G=`^(?!${G}).*$`;let B=u1.toRegex(G,Y);if(Q===!0)B.state=D;return B};u1.makeRe=(D,Y={},X=!1,Q=!1)=>{if(!D||typeof D!=="string")throw TypeError("Expected a non-empty string");let J={negated:!1,fastpaths:!0};if(Y.fastpaths!==!1&&(D[0]==="."||D[0]==="*"))J.output=OF.fastpaths(D,Y);if(!J.output)J=OF(D,Y);return u1.compileRe(J,Y,X,Q)};u1.toRegex=(D,Y)=>{try{let X=Y||{};return new RegExp(D,X.flags||(X.nocase?"i":""))}catch(X){if(Y&&Y.debug===!0)throw X;return/$^/}};u1.constants=E50;VI.exports=u1});var AI=T((AA0,ZI)=>{var MI=a("util"),OI=eP(),D9=wI(),ZF=$Y(),LI=(D)=>D===""||D==="./",NI=(D)=>{let Y=D.indexOf("{");return Y>-1&&D.indexOf("}",Y)>-1},z1=(D,Y,X)=>{Y=[].concat(Y),D=[].concat(D);let Q=new Set,J=new Set,W=new Set,$=0,G=(F)=>{if(W.add(F.output),X&&X.onResult)X.onResult(F)};for(let F=0;F<Y.length;F++){let K=D9(String(Y[F]),{...X,onResult:G},!0),U=K.state.negated||K.state.negatedExtglob;if(U)$++;for(let z of D){let V=K(z,!0);if(!(U?!V.isMatch:V.isMatch))continue;if(U)Q.add(V.output);else Q.delete(V.output),J.add(V.output)}}let H=($===Y.length?[...W]:[...J]).filter((F)=>!Q.has(F));if(X&&H.length===0){if(X.failglob===!0)throw Error(`No matches found for "${Y.join(", ")}"`);if(X.nonull===!0||X.nullglob===!0)return X.unescape?Y.map((F)=>F.replace(/\\/g,"")):Y}return H};z1.match=z1;z1.matcher=(D,Y)=>D9(D,Y);z1.isMatch=(D,Y,X)=>D9(Y,X)(D);z1.any=z1.isMatch;z1.not=(D,Y,X={})=>{Y=[].concat(Y).map(String);let Q=new Set,J=[],$=new Set(z1(D,Y,{...X,onResult:(G)=>{if(X.onResult)X.onResult(G);J.push(G.output)}}));for(let G of J)if(!$.has(G))Q.add(G);return[...Q]};z1.contains=(D,Y,X)=>{if(typeof D!=="string")throw TypeError(`Expected a string: "${MI.inspect(D)}"`);if(Array.isArray(Y))return Y.some((Q)=>z1.contains(D,Q,X));if(typeof Y==="string"){if(LI(D)||LI(Y))return!1;if(D.includes(Y)||D.startsWith("./")&&D.slice(2).includes(Y))return!0}return z1.isMatch(D,Y,{...X,contains:!0})};z1.matchKeys=(D,Y,X)=>{if(!ZF.isObject(D))throw TypeError("Expected the first argument to be an object");let Q=z1(Object.keys(D),Y,X),J={};for(let W of Q)J[W]=D[W];return J};z1.some=(D,Y,X)=>{let Q=[].concat(D);for(let J of[].concat(Y)){let W=D9(String(J),X);if(Q.some(($)=>W($)))return!0}return!1};z1.every=(D,Y,X)=>{let Q=[].concat(D);for(let J of[].concat(Y)){let W=D9(String(J),X);if(!Q.every(($)=>W($)))return!1}return!0};z1.all=(D,Y,X)=>{if(typeof D!=="string")throw TypeError(`Expected a string: "${MI.inspect(D)}"`);return[].concat(Y).every((Q)=>D9(Q,X)(D))};z1.capture=(D,Y,X)=>{let Q=ZF.isWindows(X),W=D9.makeRe(String(D),{...X,capture:!0}).exec(Q?ZF.toPosixSlashes(Y):Y);if(W)return W.slice(1).map(($)=>$===void 0?"":$)};z1.makeRe=(...D)=>D9.makeRe(...D);z1.scan=(...D)=>D9.scan(...D);z1.parse=(D,Y)=>{let X=[];for(let Q of[].concat(D||[]))for(let J of OI(String(Q),Y))X.push(D9.parse(J,Y));return X};z1.braces=(D,Y)=>{if(typeof D!=="string")throw TypeError("Expected a string");if(Y&&Y.nobrace===!0||!NI(D))return[D];return OI(D,Y)};z1.braceExpand=(D,Y)=>{if(typeof D!=="string")throw TypeError("Expected a string");return z1.braces(D,{...Y,expand:!0})};z1.hasBraces=NI;ZI.exports=z1});var eI=T((P40,R9)=>{/*!
|
|
124
|
+
`,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 oP=T((VA0,aP)=>{var ID0=lJ(),{MAX_LENGTH:nP,CHAR_BACKSLASH:KF,CHAR_BACKTICK:CD0,CHAR_COMMA:xD0,CHAR_DOT:_D0,CHAR_LEFT_PARENTHESES:bD0,CHAR_RIGHT_PARENTHESES:kD0,CHAR_LEFT_CURLY_BRACE:vD0,CHAR_RIGHT_CURLY_BRACE:yD0,CHAR_LEFT_SQUARE_BRACKET:iP,CHAR_RIGHT_SQUARE_BRACKET:rP,CHAR_DOUBLE_QUOTE:fD0,CHAR_SINGLE_QUOTE:hD0,CHAR_NO_BREAK_SPACE:gD0,CHAR_ZERO_WIDTH_NOBREAK_SPACE:uD0}=pP(),mD0=(D,Y={})=>{if(typeof D!=="string")throw TypeError("Expected a string");let X=Y||{},Q=typeof X.maxLength==="number"?Math.min(nP,X.maxLength):nP;if(D.length>Q)throw SyntaxError(`Input length (${D.length}), exceeds max characters (${Q})`);let J={type:"root",input:D,nodes:[]},W=[J],$=J,G=J,B=0,H=D.length,F=0,K=0,U,z=()=>D[F++],V=(w)=>{if(w.type==="text"&&G.type==="dot")G.type="text";if(G&&G.type==="text"&&w.type==="text"){G.value+=w.value;return}return $.nodes.push(w),w.parent=$,w.prev=G,G=w,w};V({type:"bos"});while(F<H){if($=W[W.length-1],U=z(),U===uD0||U===gD0)continue;if(U===KF){V({type:"text",value:(Y.keepEscaping?U:"")+z()});continue}if(U===rP){V({type:"text",value:"\\"+U});continue}if(U===iP){B++;let w;while(F<H&&(w=z())){if(U+=w,w===iP){B++;continue}if(w===KF){U+=z();continue}if(w===rP){if(B--,B===0)break}}V({type:"text",value:U});continue}if(U===bD0){$=V({type:"paren",nodes:[]}),W.push($),V({type:"text",value:U});continue}if(U===kD0){if($.type!=="paren"){V({type:"text",value:U});continue}$=W.pop(),V({type:"text",value:U}),$=W[W.length-1];continue}if(U===fD0||U===hD0||U===CD0){let w=U,L;if(Y.keepQuotes!==!0)U="";while(F<H&&(L=z())){if(L===KF){U+=L+z();continue}if(L===w){if(Y.keepQuotes===!0)U+=L;break}U+=L}V({type:"text",value:U});continue}if(U===vD0){K++;let L={type:"brace",open:!0,close:!1,dollar:G.value&&G.value.slice(-1)==="$"||$.dollar===!0,depth:K,commas:0,ranges:0,nodes:[]};$=V(L),W.push($),V({type:"open",value:U});continue}if(U===yD0){if($.type!=="brace"){V({type:"text",value:U});continue}let w="close";$=W.pop(),$.close=!0,V({type:w,value:U}),K--,$=W[W.length-1];continue}if(U===xD0&&K>0){if($.ranges>0){$.ranges=0;let w=$.nodes.shift();$.nodes=[w,{type:"text",value:ID0($)}]}V({type:"comma",value:U}),$.commas++;continue}if(U===_D0&&K>0&&$.commas===0){let w=$.nodes;if(K===0||w.length===0){V({type:"text",value:U});continue}if(G.type==="dot"){if($.range=[],G.value+=U,G.type="range",$.nodes.length!==3&&$.nodes.length!==5){$.invalid=!0,$.ranges=0,G.type="text";continue}$.ranges++,$.args=[];continue}if(G.type==="range"){w.pop();let L=w[w.length-1];L.value+=G.value+U,G=L,$.ranges--;continue}V({type:"dot",value:U});continue}V({type:"text",value:U})}do if($=W.pop(),$.type!=="root"){$.nodes.forEach((O)=>{if(!O.nodes){if(O.type==="open")O.isOpen=!0;if(O.type==="close")O.isClose=!0;if(!O.nodes)O.type="text";O.invalid=!0}});let w=W[W.length-1],L=w.nodes.indexOf($);w.nodes.splice(L,1,...$.nodes)}while(W.length>0);return V({type:"eos"}),J};aP.exports=mD0});var eP=T((wA0,tP)=>{var sP=lJ(),cD0=uP(),lD0=lP(),dD0=oP(),J6=(D,Y={})=>{let X=[];if(Array.isArray(D))for(let Q of D){let J=J6.create(Q,Y);if(Array.isArray(J))X.push(...J);else X.push(J)}else X=[].concat(J6.create(D,Y));if(Y&&Y.expand===!0&&Y.nodupes===!0)X=[...new Set(X)];return X};J6.parse=(D,Y={})=>dD0(D,Y);J6.stringify=(D,Y={})=>{if(typeof D==="string")return sP(J6.parse(D,Y),Y);return sP(D,Y)};J6.compile=(D,Y={})=>{if(typeof D==="string")D=J6.parse(D,Y);return cD0(D,Y)};J6.expand=(D,Y={})=>{if(typeof D==="string")D=J6.parse(D,Y);let X=lD0(D,Y);if(Y.noempty===!0)X=X.filter(Boolean);if(Y.nodupes===!0)X=[...new Set(X)];return X};J6.create=(D,Y={})=>{if(D===""||D.length<3)return[D];return Y.expand!==!0?J6.compile(D,Y):J6.expand(D,Y)};tP.exports=J6});var WY=T((LA0,YI)=>{var pD0=a("path"),DI={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:"(?:^|\\/)"},nD0={...DI,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:"(?:[\\\\/]|$)"},iD0={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"};YI.exports={MAX_LENGTH:65536,POSIX_REGEX_SOURCE:iD0,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:pD0.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?nD0:DI}}});var $Y=T((D50)=>{var rD0=a("path"),aD0=process.platform==="win32",{REGEX_BACKSLASH:oD0,REGEX_REMOVE_BACKSLASH:sD0,REGEX_SPECIAL_CHARS:tD0,REGEX_SPECIAL_CHARS_GLOBAL:eD0}=WY();D50.isObject=(D)=>D!==null&&typeof D==="object"&&!Array.isArray(D);D50.hasRegexChars=(D)=>tD0.test(D);D50.isRegexChar=(D)=>D.length===1&&D50.hasRegexChars(D);D50.escapeRegex=(D)=>D.replace(eD0,"\\$1");D50.toPosixSlashes=(D)=>D.replace(oD0,"/");D50.removeBackslashes=(D)=>{return D.replace(sD0,(Y)=>{return Y==="\\"?"":Y})};D50.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};D50.isWindows=(D)=>{if(D&&typeof D.windows==="boolean")return D.windows;return aD0===!0||rD0.sep==="\\"};D50.escapeLast=(D,Y,X)=>{let Q=D.lastIndexOf(Y,X);if(Q===-1)return D;if(D[Q-1]==="\\")return D50.escapeLast(D,Y,Q-1);return`${D.slice(0,Q)}\\${D.slice(Q)}`};D50.removePrefix=(D,Y={})=>{let X=D;if(X.startsWith("./"))X=X.slice(2),Y.prefix="./";return X};D50.wrapOutput=(D,Y={},X={})=>{let Q=X.contains?"":"^",J=X.contains?"":"$",W=`${Q}(?:${D})${J}`;if(Y.negated===!0)W=`(?:^(?!${W}).*$)`;return W}});var qI=T((OA0,FI)=>{var JI=$Y(),{CHAR_ASTERISK:zF,CHAR_AT:F50,CHAR_BACKWARD_SLASH:GY,CHAR_COMMA:q50,CHAR_DOT:UF,CHAR_EXCLAMATION_MARK:VF,CHAR_FORWARD_SLASH:HI,CHAR_LEFT_CURLY_BRACE:wF,CHAR_LEFT_PARENTHESES:LF,CHAR_LEFT_SQUARE_BRACKET:K50,CHAR_PLUS:z50,CHAR_QUESTION_MARK:WI,CHAR_RIGHT_CURLY_BRACE:U50,CHAR_RIGHT_PARENTHESES:$I,CHAR_RIGHT_SQUARE_BRACKET:V50}=WY(),GI=(D)=>{return D===HI||D===GY},BI=(D)=>{if(D.isPrefix!==!0)D.depth=D.isGlobstar?1/0:1},w50=(D,Y)=>{let X=Y||{},Q=D.length-1,J=X.parts===!0||X.scanToEnd===!0,W=[],$=[],G=[],B=D,H=-1,F=0,K=0,U=!1,z=!1,V=!1,w=!1,L=!1,O=!1,Z=!1,M=!1,E=!1,j=!1,I=0,_,y,C={value:"",depth:0,isGlob:!1},c=()=>H>=Q,S=()=>B.charCodeAt(H+1),p=()=>{return _=y,B.charCodeAt(++H)};while(H<Q){y=p();let A;if(y===GY){if(Z=C.backslashes=!0,y=p(),y===wF)O=!0;continue}if(O===!0||y===wF){I++;while(c()!==!0&&(y=p())){if(y===GY){Z=C.backslashes=!0,p();continue}if(y===wF){I++;continue}if(O!==!0&&y===UF&&(y=p())===UF){if(U=C.isBrace=!0,V=C.isGlob=!0,j=!0,J===!0)continue;break}if(O!==!0&&y===q50){if(U=C.isBrace=!0,V=C.isGlob=!0,j=!0,J===!0)continue;break}if(y===U50){if(I--,I===0){O=!1,U=C.isBrace=!0,j=!0;break}}}if(J===!0)continue;break}if(y===HI){if(W.push(H),$.push(C),C={value:"",depth:0,isGlob:!1},j===!0)continue;if(_===UF&&H===F+1){F+=2;continue}K=H+1;continue}if(X.noext!==!0){if((y===z50||y===F50||y===zF||y===WI||y===VF)===!0&&S()===LF){if(V=C.isGlob=!0,w=C.isExtglob=!0,j=!0,y===VF&&H===F)E=!0;if(J===!0){while(c()!==!0&&(y=p())){if(y===GY){Z=C.backslashes=!0,y=p();continue}if(y===$I){V=C.isGlob=!0,j=!0;break}}continue}break}}if(y===zF){if(_===zF)L=C.isGlobstar=!0;if(V=C.isGlob=!0,j=!0,J===!0)continue;break}if(y===WI){if(V=C.isGlob=!0,j=!0,J===!0)continue;break}if(y===K50){while(c()!==!0&&(A=p())){if(A===GY){Z=C.backslashes=!0,p();continue}if(A===V50){z=C.isBracket=!0,V=C.isGlob=!0,j=!0;break}}if(J===!0)continue;break}if(X.nonegate!==!0&&y===VF&&H===F){M=C.negated=!0,F++;continue}if(X.noparen!==!0&&y===LF){if(V=C.isGlob=!0,J===!0){while(c()!==!0&&(y=p())){if(y===LF){Z=C.backslashes=!0,y=p();continue}if(y===$I){j=!0;break}}continue}break}if(V===!0){if(j=!0,J===!0)continue;break}}if(X.noext===!0)w=!1,V=!1;let u=B,Q0="",x="";if(F>0)Q0=B.slice(0,F),B=B.slice(F),K-=F;if(u&&V===!0&&K>0)u=B.slice(0,K),x=B.slice(K);else if(V===!0)u="",x=B;else u=B;if(u&&u!==""&&u!=="/"&&u!==B){if(GI(u.charCodeAt(u.length-1)))u=u.slice(0,-1)}if(X.unescape===!0){if(x)x=JI.removeBackslashes(x);if(u&&Z===!0)u=JI.removeBackslashes(u)}let N={prefix:Q0,input:D,start:F,base:u,glob:x,isBrace:U,isBracket:z,isGlob:V,isExtglob:w,isGlobstar:L,negated:M,negatedExtglob:E};if(X.tokens===!0){if(N.maxDepth=0,!GI(y))$.push(C);N.tokens=$}if(X.parts===!0||X.tokens===!0){let A;for(let R=0;R<W.length;R++){let P=A?A+1:F,v=W[R],b=D.slice(P,v);if(X.tokens){if(R===0&&F!==0)$[R].isPrefix=!0,$[R].value=Q0;else $[R].value=b;BI($[R]),N.maxDepth+=$[R].depth}if(R!==0||b!=="")G.push(b);A=v}if(A&&A+1<D.length){let R=D.slice(A+1);if(G.push(R),X.tokens)$[$.length-1].value=R,BI($[$.length-1]),N.maxDepth+=$[$.length-1].depth}N.slashes=W,N.parts=G}return N};FI.exports=w50});var UI=T((NA0,zI)=>{var nJ=WY(),W6=$Y(),{MAX_LENGTH:iJ,POSIX_REGEX_SOURCE:L50,REGEX_NON_SPECIAL_CHARS:M50,REGEX_SPECIAL_CHARS_BACKREF:O50,REPLACEMENTS:KI}=nJ,N50=(D,Y)=>{if(typeof Y.expandRange==="function")return Y.expandRange(...D,Y);D.sort();let X=`[${D.join("-")}]`;try{new RegExp(X)}catch(Q){return D.map((J)=>W6.escapeRegex(J)).join("..")}return X},a4=(D,Y)=>{return`Missing ${D}: "${Y}" - use "\\\\${Y}" to match literal characters`},MF=(D,Y)=>{if(typeof D!=="string")throw TypeError("Expected a string");D=KI[D]||D;let X={...Y},Q=typeof X.maxLength==="number"?Math.min(iJ,X.maxLength):iJ,J=D.length;if(J>Q)throw SyntaxError(`Input length: ${J}, exceeds maximum allowed length: ${Q}`);let W={type:"bos",value:"",output:X.prepend||""},$=[W],G=X.capture?"":"?:",B=W6.isWindows(Y),H=nJ.globChars(B),F=nJ.extglobChars(H),{DOT_LITERAL:K,PLUS_LITERAL:U,SLASH_LITERAL:z,ONE_CHAR:V,DOTS_SLASH:w,NO_DOT:L,NO_DOT_SLASH:O,NO_DOTS_SLASH:Z,QMARK:M,QMARK_NO_DOT:E,STAR:j,START_ANCHOR:I}=H,_=(Y0)=>{return`(${G}(?:(?!${I}${Y0.dot?w:K}).)*?)`},y=X.dot?"":L,C=X.dot?M:E,c=X.bash===!0?_(X):j;if(X.capture)c=`(${c})`;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:$};D=W6.removePrefix(D,S),J=D.length;let p=[],u=[],Q0=[],x=W,N,A=()=>S.index===J-1,R=S.peek=(Y0=1)=>D[S.index+Y0],P=S.advance=()=>D[++S.index]||"",v=()=>D.slice(S.index+1),b=(Y0="",n0=0)=>{S.consumed+=Y0,S.index+=n0},r=(Y0)=>{S.output+=Y0.output!=null?Y0.output:Y0.value,b(Y0.value)},k=()=>{let Y0=1;while(R()==="!"&&(R(2)!=="("||R(3)==="?"))P(),S.start++,Y0++;if(Y0%2===0)return!1;return S.negated=!0,S.start++,!0},g=(Y0)=>{S[Y0]++,Q0.push(Y0)},$0=(Y0)=>{S[Y0]--,Q0.pop()},l=(Y0)=>{if(x.type==="globstar"){let n0=S.braces>0&&(Y0.type==="comma"||Y0.type==="brace"),t=Y0.extglob===!0||p.length&&(Y0.type==="pipe"||Y0.type==="paren");if(Y0.type!=="slash"&&Y0.type!=="paren"&&!n0&&!t)S.output=S.output.slice(0,-x.output.length),x.type="star",x.value="*",x.output=c,S.output+=x.output}if(p.length&&Y0.type!=="paren")p[p.length-1].inner+=Y0.value;if(Y0.value||Y0.output)r(Y0);if(x&&x.type==="text"&&Y0.type==="text"){x.value+=Y0.value,x.output=(x.output||"")+Y0.value;return}Y0.prev=x,$.push(Y0),x=Y0},T0=(Y0,n0)=>{let t={...F[n0],conditions:1,inner:""};t.prev=x,t.parens=S.parens,t.output=S.output;let k0=(X.capture?"(":"")+t.open;g("parens"),l({type:Y0,value:n0,output:S.output?"":V}),l({type:"paren",extglob:!0,value:P(),output:k0}),p.push(t)},s8=(Y0)=>{let n0=Y0.close+(X.capture?")":""),t;if(Y0.type==="negate"){let k0=c;if(Y0.inner&&Y0.inner.length>1&&Y0.inner.includes("/"))k0=_(X);if(k0!==c||A()||/^\)+$/.test(v()))n0=Y0.close=`)$))${k0}`;if(Y0.inner.includes("*")&&(t=v())&&/^\.[^\\/.]+$/.test(t)){let A1=MF(t,{...Y,fastpaths:!1}).output;n0=Y0.close=`)${A1})${k0})`}if(Y0.prev.type==="bos")S.negatedExtglob=!0}l({type:"paren",extglob:!0,value:N,output:n0}),$0("parens")};if(X.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(D)){let Y0=!1,n0=D.replace(O50,(t,k0,A1,N8,d1,c$)=>{if(N8==="\\")return Y0=!0,t;if(N8==="?"){if(k0)return k0+N8+(d1?M.repeat(d1.length):"");if(c$===0)return C+(d1?M.repeat(d1.length):"");return M.repeat(A1.length)}if(N8===".")return K.repeat(A1.length);if(N8==="*"){if(k0)return k0+N8+(d1?c:"");return c}return k0?t:`\\${t}`});if(Y0===!0)if(X.unescape===!0)n0=n0.replace(/\\/g,"");else n0=n0.replace(/\\+/g,(t)=>{return t.length%2===0?"\\\\":t?"\\":""});if(n0===D&&X.contains===!0)return S.output=D,S;return S.output=W6.wrapOutput(n0,S,Y),S}while(!A()){if(N=P(),N==="\x00")continue;if(N==="\\"){let t=R();if(t==="/"&&X.bash!==!0)continue;if(t==="."||t===";")continue;if(!t){N+="\\",l({type:"text",value:N});continue}let k0=/^\\+/.exec(v()),A1=0;if(k0&&k0[0].length>2){if(A1=k0[0].length,S.index+=A1,A1%2!==0)N+="\\"}if(X.unescape===!0)N=P();else N+=P();if(S.brackets===0){l({type:"text",value:N});continue}}if(S.brackets>0&&(N!=="]"||x.value==="["||x.value==="[^")){if(X.posix!==!1&&N===":"){let t=x.value.slice(1);if(t.includes("[")){if(x.posix=!0,t.includes(":")){let k0=x.value.lastIndexOf("["),A1=x.value.slice(0,k0),N8=x.value.slice(k0+2),d1=L50[N8];if(d1){if(x.value=A1+d1,S.backtrack=!0,P(),!W.output&&$.indexOf(x)===1)W.output=V;continue}}}}if(N==="["&&R()!==":"||N==="-"&&R()==="]")N=`\\${N}`;if(N==="]"&&(x.value==="["||x.value==="[^"))N=`\\${N}`;if(X.posix===!0&&N==="!"&&x.value==="[")N="^";x.value+=N,r({value:N});continue}if(S.quotes===1&&N!=='"'){N=W6.escapeRegex(N),x.value+=N,r({value:N});continue}if(N==='"'){if(S.quotes=S.quotes===1?0:1,X.keepQuotes===!0)l({type:"text",value:N});continue}if(N==="("){g("parens"),l({type:"paren",value:N});continue}if(N===")"){if(S.parens===0&&X.strictBrackets===!0)throw SyntaxError(a4("opening","("));let t=p[p.length-1];if(t&&S.parens===t.parens+1){s8(p.pop());continue}l({type:"paren",value:N,output:S.parens?")":"\\)"}),$0("parens");continue}if(N==="["){if(X.nobracket===!0||!v().includes("]")){if(X.nobracket!==!0&&X.strictBrackets===!0)throw SyntaxError(a4("closing","]"));N=`\\${N}`}else g("brackets");l({type:"bracket",value:N});continue}if(N==="]"){if(X.nobracket===!0||x&&x.type==="bracket"&&x.value.length===1){l({type:"text",value:N,output:`\\${N}`});continue}if(S.brackets===0){if(X.strictBrackets===!0)throw SyntaxError(a4("opening","["));l({type:"text",value:N,output:`\\${N}`});continue}$0("brackets");let t=x.value.slice(1);if(x.posix!==!0&&t[0]==="^"&&!t.includes("/"))N=`/${N}`;if(x.value+=N,r({value:N}),X.literalBrackets===!1||W6.hasRegexChars(t))continue;let k0=W6.escapeRegex(x.value);if(S.output=S.output.slice(0,-x.value.length),X.literalBrackets===!0){S.output+=k0,x.value=k0;continue}x.value=`(${G}${k0}|${x.value})`,S.output+=x.value;continue}if(N==="{"&&X.nobrace!==!0){g("braces");let t={type:"brace",value:N,output:"(",outputIndex:S.output.length,tokensIndex:S.tokens.length};u.push(t),l(t);continue}if(N==="}"){let t=u[u.length-1];if(X.nobrace===!0||!t){l({type:"text",value:N,output:N});continue}let k0=")";if(t.dots===!0){let A1=$.slice(),N8=[];for(let d1=A1.length-1;d1>=0;d1--){if($.pop(),A1[d1].type==="brace")break;if(A1[d1].type!=="dots")N8.unshift(A1[d1].value)}k0=N50(N8,X),S.backtrack=!0}if(t.comma!==!0&&t.dots!==!0){let A1=S.output.slice(0,t.outputIndex),N8=S.tokens.slice(t.tokensIndex);t.value=t.output="\\{",N=k0="\\}",S.output=A1;for(let d1 of N8)S.output+=d1.output||d1.value}l({type:"brace",value:N,output:k0}),$0("braces"),u.pop();continue}if(N==="|"){if(p.length>0)p[p.length-1].conditions++;l({type:"text",value:N});continue}if(N===","){let t=N,k0=u[u.length-1];if(k0&&Q0[Q0.length-1]==="braces")k0.comma=!0,t="|";l({type:"comma",value:N,output:t});continue}if(N==="/"){if(x.type==="dot"&&S.index===S.start+1){S.start=S.index+1,S.consumed="",S.output="",$.pop(),x=W;continue}l({type:"slash",value:N,output:z});continue}if(N==="."){if(S.braces>0&&x.type==="dot"){if(x.value===".")x.output=K;let t=u[u.length-1];x.type="dots",x.output+=N,x.value+=N,t.dots=!0;continue}if(S.braces+S.parens===0&&x.type!=="bos"&&x.type!=="slash"){l({type:"text",value:N,output:K});continue}l({type:"dot",value:N,output:K});continue}if(N==="?"){if(!(x&&x.value==="(")&&X.noextglob!==!0&&R()==="("&&R(2)!=="?"){T0("qmark",N);continue}if(x&&x.type==="paren"){let k0=R(),A1=N;if(k0==="<"&&!W6.supportsLookbehinds())throw Error("Node.js v10 or higher is required for regex lookbehinds");if(x.value==="("&&!/[!=<:]/.test(k0)||k0==="<"&&!/<([!=]|\w+>)/.test(v()))A1=`\\${N}`;l({type:"text",value:N,output:A1});continue}if(X.dot!==!0&&(x.type==="slash"||x.type==="bos")){l({type:"qmark",value:N,output:E});continue}l({type:"qmark",value:N,output:M});continue}if(N==="!"){if(X.noextglob!==!0&&R()==="("){if(R(2)!=="?"||!/[!=<:]/.test(R(3))){T0("negate",N);continue}}if(X.nonegate!==!0&&S.index===0){k();continue}}if(N==="+"){if(X.noextglob!==!0&&R()==="("&&R(2)!=="?"){T0("plus",N);continue}if(x&&x.value==="("||X.regex===!1){l({type:"plus",value:N,output:U});continue}if(x&&(x.type==="bracket"||x.type==="paren"||x.type==="brace")||S.parens>0){l({type:"plus",value:N});continue}l({type:"plus",value:U});continue}if(N==="@"){if(X.noextglob!==!0&&R()==="("&&R(2)!=="?"){l({type:"at",extglob:!0,value:N,output:""});continue}l({type:"text",value:N});continue}if(N!=="*"){if(N==="$"||N==="^")N=`\\${N}`;let t=M50.exec(v());if(t)N+=t[0],S.index+=t[0].length;l({type:"text",value:N});continue}if(x&&(x.type==="globstar"||x.star===!0)){x.type="star",x.star=!0,x.value+=N,x.output=c,S.backtrack=!0,S.globstar=!0,b(N);continue}let Y0=v();if(X.noextglob!==!0&&/^\([^?]/.test(Y0)){T0("star",N);continue}if(x.type==="star"){if(X.noglobstar===!0){b(N);continue}let t=x.prev,k0=t.prev,A1=t.type==="slash"||t.type==="bos",N8=k0&&(k0.type==="star"||k0.type==="globstar");if(X.bash===!0&&(!A1||Y0[0]&&Y0[0]!=="/")){l({type:"star",value:N,output:""});continue}let d1=S.braces>0&&(t.type==="comma"||t.type==="brace"),c$=p.length&&(t.type==="pipe"||t.type==="paren");if(!A1&&t.type!=="paren"&&!d1&&!c$){l({type:"star",value:N,output:""});continue}while(Y0.slice(0,3)==="/**"){let NX=D[S.index+4];if(NX&&NX!=="/")break;Y0=Y0.slice(3),b("/**",3)}if(t.type==="bos"&&A()){x.type="globstar",x.value+=N,x.output=_(X),S.output=x.output,S.globstar=!0,b(N);continue}if(t.type==="slash"&&t.prev.type!=="bos"&&!N8&&A()){S.output=S.output.slice(0,-(t.output+x.output).length),t.output=`(?:${t.output}`,x.type="globstar",x.output=_(X)+(X.strictSlashes?")":"|$)"),x.value+=N,S.globstar=!0,S.output+=t.output+x.output,b(N);continue}if(t.type==="slash"&&t.prev.type!=="bos"&&Y0[0]==="/"){let NX=Y0[1]!==void 0?"|$":"";S.output=S.output.slice(0,-(t.output+x.output).length),t.output=`(?:${t.output}`,x.type="globstar",x.output=`${_(X)}${z}|${z}${NX})`,x.value+=N,S.output+=t.output+x.output,S.globstar=!0,b(N+P()),l({type:"slash",value:"/",output:""});continue}if(t.type==="bos"&&Y0[0]==="/"){x.type="globstar",x.value+=N,x.output=`(?:^|${z}|${_(X)}${z})`,S.output=x.output,S.globstar=!0,b(N+P()),l({type:"slash",value:"/",output:""});continue}S.output=S.output.slice(0,-x.output.length),x.type="globstar",x.output=_(X),x.value+=N,S.output+=x.output,S.globstar=!0,b(N);continue}let n0={type:"star",value:N,output:c};if(X.bash===!0){if(n0.output=".*?",x.type==="bos"||x.type==="slash")n0.output=y+n0.output;l(n0);continue}if(x&&(x.type==="bracket"||x.type==="paren")&&X.regex===!0){n0.output=N,l(n0);continue}if(S.index===S.start||x.type==="slash"||x.type==="dot"){if(x.type==="dot")S.output+=O,x.output+=O;else if(X.dot===!0)S.output+=Z,x.output+=Z;else S.output+=y,x.output+=y;if(R()!=="*")S.output+=V,x.output+=V}l(n0)}while(S.brackets>0){if(X.strictBrackets===!0)throw SyntaxError(a4("closing","]"));S.output=W6.escapeLast(S.output,"["),$0("brackets")}while(S.parens>0){if(X.strictBrackets===!0)throw SyntaxError(a4("closing",")"));S.output=W6.escapeLast(S.output,"("),$0("parens")}while(S.braces>0){if(X.strictBrackets===!0)throw SyntaxError(a4("closing","}"));S.output=W6.escapeLast(S.output,"{"),$0("braces")}if(X.strictSlashes!==!0&&(x.type==="star"||x.type==="bracket"))l({type:"maybe_slash",value:"",output:`${z}?`});if(S.backtrack===!0){S.output="";for(let Y0 of S.tokens)if(S.output+=Y0.output!=null?Y0.output:Y0.value,Y0.suffix)S.output+=Y0.suffix}return S};MF.fastpaths=(D,Y)=>{let X={...Y},Q=typeof X.maxLength==="number"?Math.min(iJ,X.maxLength):iJ,J=D.length;if(J>Q)throw SyntaxError(`Input length: ${J}, exceeds maximum allowed length: ${Q}`);D=KI[D]||D;let W=W6.isWindows(Y),{DOT_LITERAL:$,SLASH_LITERAL:G,ONE_CHAR:B,DOTS_SLASH:H,NO_DOT:F,NO_DOTS:K,NO_DOTS_SLASH:U,STAR:z,START_ANCHOR:V}=nJ.globChars(W),w=X.dot?K:F,L=X.dot?U:F,O=X.capture?"":"?:",Z={negated:!1,prefix:""},M=X.bash===!0?".*?":z;if(X.capture)M=`(${M})`;let E=(y)=>{if(y.noglobstar===!0)return M;return`(${O}(?:(?!${V}${y.dot?H:$}).)*?)`},j=(y)=>{switch(y){case"*":return`${w}${B}${M}`;case".*":return`${$}${B}${M}`;case"*.*":return`${w}${M}${$}${B}${M}`;case"*/*":return`${w}${M}${G}${B}${L}${M}`;case"**":return w+E(X);case"**/*":return`(?:${w}${E(X)}${G})?${L}${B}${M}`;case"**/*.*":return`(?:${w}${E(X)}${G})?${L}${M}${$}${B}${M}`;case"**/.*":return`(?:${w}${E(X)}${G})?${$}${B}${M}`;default:{let C=/^(.*?)\.(\w+)$/.exec(y);if(!C)return;let c=j(C[1]);if(!c)return;return c+$+C[2]}}},I=W6.removePrefix(D,Z),_=j(I);if(_&&X.strictSlashes!==!0)_+=`${G}?`;return _};zI.exports=MF});var wI=T((ZA0,VI)=>{var Z50=a("path"),A50=qI(),OF=UI(),NF=$Y(),E50=WY(),R50=(D)=>D&&typeof D==="object"&&!Array.isArray(D),g1=(D,Y,X=!1)=>{if(Array.isArray(D)){let F=D.map((U)=>g1(U,Y,X));return(U)=>{for(let z of F){let V=z(U);if(V)return V}return!1}}let Q=R50(D)&&D.tokens&&D.input;if(D===""||typeof D!=="string"&&!Q)throw TypeError("Expected pattern to be a non-empty string");let J=Y||{},W=NF.isWindows(Y),$=Q?g1.compileRe(D,Y):g1.makeRe(D,Y,!1,!0),G=$.state;delete $.state;let B=()=>!1;if(J.ignore){let F={...Y,ignore:null,onMatch:null,onResult:null};B=g1(J.ignore,F,X)}let H=(F,K=!1)=>{let{isMatch:U,match:z,output:V}=g1.test(F,$,Y,{glob:D,posix:W}),w={glob:D,state:G,regex:$,posix:W,input:F,output:V,match:z,isMatch:U};if(typeof J.onResult==="function")J.onResult(w);if(U===!1)return w.isMatch=!1,K?w:!1;if(B(F)){if(typeof J.onIgnore==="function")J.onIgnore(w);return w.isMatch=!1,K?w:!1}if(typeof J.onMatch==="function")J.onMatch(w);return K?w:!0};if(X)H.state=G;return H};g1.test=(D,Y,X,{glob:Q,posix:J}={})=>{if(typeof D!=="string")throw TypeError("Expected input to be a string");if(D==="")return{isMatch:!1,output:""};let W=X||{},$=W.format||(J?NF.toPosixSlashes:null),G=D===Q,B=G&&$?$(D):D;if(G===!1)B=$?$(D):D,G=B===Q;if(G===!1||W.capture===!0)if(W.matchBase===!0||W.basename===!0)G=g1.matchBase(D,Y,X,J);else G=Y.exec(B);return{isMatch:Boolean(G),match:G,output:B}};g1.matchBase=(D,Y,X,Q=NF.isWindows(X))=>{return(Y instanceof RegExp?Y:g1.makeRe(Y,X)).test(Z50.basename(D))};g1.isMatch=(D,Y,X)=>g1(Y,X)(D);g1.parse=(D,Y)=>{if(Array.isArray(D))return D.map((X)=>g1.parse(X,Y));return OF(D,{...Y,fastpaths:!1})};g1.scan=(D,Y)=>A50(D,Y);g1.compileRe=(D,Y,X=!1,Q=!1)=>{if(X===!0)return D.output;let J=Y||{},W=J.contains?"":"^",$=J.contains?"":"$",G=`${W}(?:${D.output})${$}`;if(D&&D.negated===!0)G=`^(?!${G}).*$`;let B=g1.toRegex(G,Y);if(Q===!0)B.state=D;return B};g1.makeRe=(D,Y={},X=!1,Q=!1)=>{if(!D||typeof D!=="string")throw TypeError("Expected a non-empty string");let J={negated:!1,fastpaths:!0};if(Y.fastpaths!==!1&&(D[0]==="."||D[0]==="*"))J.output=OF.fastpaths(D,Y);if(!J.output)J=OF(D,Y);return g1.compileRe(J,Y,X,Q)};g1.toRegex=(D,Y)=>{try{let X=Y||{};return new RegExp(D,X.flags||(X.nocase?"i":""))}catch(X){if(Y&&Y.debug===!0)throw X;return/$^/}};g1.constants=E50;VI.exports=g1});var AI=T((AA0,ZI)=>{var MI=a("util"),OI=eP(),D9=wI(),ZF=$Y(),LI=(D)=>D===""||D==="./",NI=(D)=>{let Y=D.indexOf("{");return Y>-1&&D.indexOf("}",Y)>-1},z1=(D,Y,X)=>{Y=[].concat(Y),D=[].concat(D);let Q=new Set,J=new Set,W=new Set,$=0,G=(F)=>{if(W.add(F.output),X&&X.onResult)X.onResult(F)};for(let F=0;F<Y.length;F++){let K=D9(String(Y[F]),{...X,onResult:G},!0),U=K.state.negated||K.state.negatedExtglob;if(U)$++;for(let z of D){let V=K(z,!0);if(!(U?!V.isMatch:V.isMatch))continue;if(U)Q.add(V.output);else Q.delete(V.output),J.add(V.output)}}let H=($===Y.length?[...W]:[...J]).filter((F)=>!Q.has(F));if(X&&H.length===0){if(X.failglob===!0)throw Error(`No matches found for "${Y.join(", ")}"`);if(X.nonull===!0||X.nullglob===!0)return X.unescape?Y.map((F)=>F.replace(/\\/g,"")):Y}return H};z1.match=z1;z1.matcher=(D,Y)=>D9(D,Y);z1.isMatch=(D,Y,X)=>D9(Y,X)(D);z1.any=z1.isMatch;z1.not=(D,Y,X={})=>{Y=[].concat(Y).map(String);let Q=new Set,J=[],$=new Set(z1(D,Y,{...X,onResult:(G)=>{if(X.onResult)X.onResult(G);J.push(G.output)}}));for(let G of J)if(!$.has(G))Q.add(G);return[...Q]};z1.contains=(D,Y,X)=>{if(typeof D!=="string")throw TypeError(`Expected a string: "${MI.inspect(D)}"`);if(Array.isArray(Y))return Y.some((Q)=>z1.contains(D,Q,X));if(typeof Y==="string"){if(LI(D)||LI(Y))return!1;if(D.includes(Y)||D.startsWith("./")&&D.slice(2).includes(Y))return!0}return z1.isMatch(D,Y,{...X,contains:!0})};z1.matchKeys=(D,Y,X)=>{if(!ZF.isObject(D))throw TypeError("Expected the first argument to be an object");let Q=z1(Object.keys(D),Y,X),J={};for(let W of Q)J[W]=D[W];return J};z1.some=(D,Y,X)=>{let Q=[].concat(D);for(let J of[].concat(Y)){let W=D9(String(J),X);if(Q.some(($)=>W($)))return!0}return!1};z1.every=(D,Y,X)=>{let Q=[].concat(D);for(let J of[].concat(Y)){let W=D9(String(J),X);if(!Q.every(($)=>W($)))return!1}return!0};z1.all=(D,Y,X)=>{if(typeof D!=="string")throw TypeError(`Expected a string: "${MI.inspect(D)}"`);return[].concat(Y).every((Q)=>D9(Q,X)(D))};z1.capture=(D,Y,X)=>{let Q=ZF.isWindows(X),W=D9.makeRe(String(D),{...X,capture:!0}).exec(Q?ZF.toPosixSlashes(Y):Y);if(W)return W.slice(1).map(($)=>$===void 0?"":$)};z1.makeRe=(...D)=>D9.makeRe(...D);z1.scan=(...D)=>D9.scan(...D);z1.parse=(D,Y)=>{let X=[];for(let Q of[].concat(D||[]))for(let J of OI(String(Q),Y))X.push(D9.parse(J,Y));return X};z1.braces=(D,Y)=>{if(typeof D!=="string")throw TypeError("Expected a string");if(Y&&Y.nobrace===!0||!NI(D))return[D];return OI(D,Y)};z1.braceExpand=(D,Y)=>{if(typeof D!=="string")throw TypeError("Expected a string");return z1.braces(D,{...Y,expand:!0})};z1.hasBraces=NI;ZI.exports=z1});var eI=T((P40,R9)=>{/*!
|
|
125
125
|
* Tmp
|
|
126
126
|
*
|
|
127
127
|
* Copyright (c) 2011-2017 KARASZI Istvan <github@spam.raszi.hu>
|
|
@@ -134,7 +134,7 @@ tell application "System Events" to get value of property list item "CFBundleNam
|
|
|
134
134
|
|| ${$} === "boolean" || ${J} === null`).assign(G,I0._`[${J}]`)}}}function oW0({gen:D,parentData:Y,parentDataProperty:X},Q){D.if(I0._`${Y} !== undefined`,()=>D.assign(I0._`${Y}[${X}]`,Q))}function cz(D,Y,X,Q=T3.Correct){let J=Q===T3.Correct?I0.operators.EQ:I0.operators.NEQ,W;switch(D){case"null":return I0._`${Y} ${J} null`;case"array":W=I0._`Array.isArray(${Y})`;break;case"object":W=I0._`${Y} && typeof ${Y} == "object" && !Array.isArray(${Y})`;break;case"integer":W=$(I0._`!(${Y} % 1) && !isNaN(${Y})`);break;case"number":W=$();break;default:return I0._`typeof ${Y} ${J} ${D}`}return Q===T3.Correct?W:(0,I0.not)(W);function $(G=I0.nil){return(0,I0.and)(I0._`typeof ${Y} == "number"`,G,X?I0._`isFinite(${Y})`:I0.nil)}}$k.checkDataType=cz;function lz(D,Y,X,Q){if(D.length===1)return cz(D[0],Y,X,Q);let J,W=(0,Qk.toHash)(D);if(W.array&&W.object){let $=I0._`typeof ${Y} != "object"`;J=W.null?$:I0._`!${Y} || ${$}`,delete W.null,delete W.array,delete W.object}else J=I0.nil;if(W.number)delete W.integer;for(let $ in W)J=(0,I0.and)(J,cz($,Y,X,Q));return J}$k.checkDataTypes=lz;var sW0={message:({schema:D})=>`must be ${D}`,params:({schema:D,schemaValue:Y})=>typeof D=="string"?I0._`{type: ${D}}`:I0._`{type: ${Y}}`};function dz(D){let Y=tW0(D);(0,pW0.reportError)(Y,sW0)}$k.reportTypeError=dz;function tW0(D){let{gen:Y,data:X,schema:Q}=D,J=(0,Qk.schemaRefOrVal)(D,Q,"type");return{gen:Y,keyword:"type",data:X,schema:Q.type,schemaCode:J,schemaValue:J,parentSchema:Q,params:{},it:D}}});var qk=T((Hk)=>{Object.defineProperty(Hk,"__esModule",{value:!0});Hk.assignDefaults=void 0;var S3=x0(),W$0=p0();function $$0(D,Y){let{properties:X,items:Q}=D.schema;if(Y==="object"&&X)for(let J in X)Bk(D,J,X[J].default);else if(Y==="array"&&Array.isArray(Q))Q.forEach((J,W)=>Bk(D,W,J.default))}Hk.assignDefaults=$$0;function Bk(D,Y,X){let{gen:Q,compositeRule:J,data:W,opts:$}=D;if(X===void 0)return;let G=S3._`${W}${(0,S3.getProperty)(Y)}`;if(J){(0,W$0.checkStrictMode)(D,`default is ignored for: ${G}`);return}let B=S3._`${G} === undefined`;if($.useDefaults==="empty")B=S3._`${B} || ${G} === null || ${G} === ""`;Q.if(B,S3._`${G} = ${(0,S3.stringify)(X)}`)}});var A6=T((Uk)=>{Object.defineProperty(Uk,"__esModule",{value:!0});Uk.validateUnion=Uk.validateArray=Uk.usePattern=Uk.callValidateCode=Uk.schemaProperties=Uk.allSchemaProperties=Uk.noPropertyInData=Uk.propertyInData=Uk.isOwnProperty=Uk.hasPropFunc=Uk.reportMissingProp=Uk.checkMissingProp=Uk.checkReportMissingProp=void 0;var U1=x0(),pz=p0(),ED=I9(),G$0=p0();function B$0(D,Y){let{gen:X,data:Q,it:J}=D;X.if(iz(X,Q,Y,J.opts.ownProperties),()=>{D.setParams({missingProperty:U1._`${Y}`},!0),D.error()})}Uk.checkReportMissingProp=B$0;function H$0({gen:D,data:Y,it:{opts:X}},Q,J){return(0,U1.or)(...Q.map((W)=>(0,U1.and)(iz(D,Y,W,X.ownProperties),U1._`${J} = ${W}`)))}Uk.checkMissingProp=H$0;function F$0(D,Y){D.setParams({missingProperty:Y},!0),D.error()}Uk.reportMissingProp=F$0;function Kk(D){return D.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:U1._`Object.prototype.hasOwnProperty`})}Uk.hasPropFunc=Kk;function nz(D,Y,X){return U1._`${Kk(D)}.call(${Y}, ${X})`}Uk.isOwnProperty=nz;function q$0(D,Y,X,Q){let J=U1._`${Y}${(0,U1.getProperty)(X)} !== undefined`;return Q?U1._`${J} && ${nz(D,Y,X)}`:J}Uk.propertyInData=q$0;function iz(D,Y,X,Q){let J=U1._`${Y}${(0,U1.getProperty)(X)} === undefined`;return Q?(0,U1.or)(J,(0,U1.not)(nz(D,Y,X))):J}Uk.noPropertyInData=iz;function zk(D){return D?Object.keys(D).filter((Y)=>Y!=="__proto__"):[]}Uk.allSchemaProperties=zk;function K$0(D,Y){return zk(Y).filter((X)=>!(0,pz.alwaysValidSchema)(D,Y[X]))}Uk.schemaProperties=K$0;function z$0({schemaCode:D,data:Y,it:{gen:X,topSchemaRef:Q,schemaPath:J,errorPath:W},it:$},G,B,H){let F=H?U1._`${D}, ${Y}, ${Q}${J}`:Y,K=[[ED.default.instancePath,(0,U1.strConcat)(ED.default.instancePath,W)],[ED.default.parentData,$.parentData],[ED.default.parentDataProperty,$.parentDataProperty],[ED.default.rootData,ED.default.rootData]];if($.opts.dynamicRef)K.push([ED.default.dynamicAnchors,ED.default.dynamicAnchors]);let U=U1._`${F}, ${X.object(...K)}`;return B!==U1.nil?U1._`${G}.call(${B}, ${U})`:U1._`${G}(${U})`}Uk.callValidateCode=z$0;var U$0=U1._`new RegExp`;function V$0({gen:D,it:{opts:Y}},X){let Q=Y.unicodeRegExp?"u":"",{regExp:J}=Y.code,W=J(X,Q);return D.scopeValue("pattern",{key:W.toString(),ref:W,code:U1._`${J.code==="new RegExp"?U$0:(0,G$0.useFunc)(D,J)}(${X}, ${Q})`})}Uk.usePattern=V$0;function w$0(D){let{gen:Y,data:X,keyword:Q,it:J}=D,W=Y.name("valid");if(J.allErrors){let G=Y.let("valid",!0);return $(()=>Y.assign(G,!1)),G}return Y.var(W,!0),$(()=>Y.break()),W;function $(G){let B=Y.const("len",U1._`${X}.length`);Y.forRange("i",0,B,(H)=>{D.subschema({keyword:Q,dataProp:H,dataPropType:pz.Type.Num},W),Y.if((0,U1.not)(W),G)})}}Uk.validateArray=w$0;function L$0(D){let{gen:Y,schema:X,keyword:Q,it:J}=D;if(!Array.isArray(X))throw Error("ajv implementation error");if(X.some((B)=>(0,pz.alwaysValidSchema)(J,B))&&!J.opts.unevaluated)return;let $=Y.let("valid",!1),G=Y.name("_valid");Y.block(()=>X.forEach((B,H)=>{let F=D.subschema({keyword:Q,schemaProp:H,compositeRule:!0},G);if(Y.assign($,U1._`${$} || ${G}`),!D.mergeValidEvaluated(F,G))Y.if((0,U1.not)($))})),D.result($,()=>D.reset(),()=>D.error(!0))}Uk.validateUnion=L$0});var Nk=T((Mk)=>{Object.defineProperty(Mk,"__esModule",{value:!0});Mk.validateKeywordUsage=Mk.validSchemaType=Mk.funcKeywordCode=Mk.macroKeywordCode=void 0;var y8=x0(),S5=I9(),C$0=A6(),x$0=sY();function _$0(D,Y){let{gen:X,keyword:Q,schema:J,parentSchema:W,it:$}=D,G=Y.macro.call($.self,J,W,$),B=Lk(X,Q,G);if($.opts.validateSchema!==!1)$.self.validateSchema(G,!0);let H=X.name("valid");D.subschema({schema:G,schemaPath:y8.nil,errSchemaPath:`${$.errSchemaPath}/${Q}`,topSchemaRef:B,compositeRule:!0},H),D.pass(H,()=>D.error(!0))}Mk.macroKeywordCode=_$0;function b$0(D,Y){var X;let{gen:Q,keyword:J,schema:W,parentSchema:$,$data:G,it:B}=D;v$0(B,Y);let H=!G&&Y.compile?Y.compile.call(B.self,W,$,B):Y.validate,F=Lk(Q,J,H),K=Q.let("valid");D.block$data(K,U),D.ok((X=Y.valid)!==null&&X!==void 0?X:K);function U(){if(Y.errors===!1){if(w(),Y.modifying)wk(D);L(()=>D.error())}else{let O=Y.async?z():V();if(Y.modifying)wk(D);L(()=>k$0(D,O))}}function z(){let O=Q.let("ruleErrs",null);return Q.try(()=>w(y8._`await `),(Z)=>Q.assign(K,!1).if(y8._`${Z} instanceof ${B.ValidationError}`,()=>Q.assign(O,y8._`${Z}.errors`),()=>Q.throw(Z))),O}function V(){let O=y8._`${F}.errors`;return Q.assign(O,null),w(y8.nil),O}function w(O=Y.async?y8._`await `:y8.nil){let Z=B.opts.passContext?S5.default.this:S5.default.self,M=!(("compile"in Y)&&!G||Y.schema===!1);Q.assign(K,y8._`${O}${(0,C$0.callValidateCode)(D,F,Z,M)}`,Y.modifying)}function L(O){var Z;Q.if((0,y8.not)((Z=Y.valid)!==null&&Z!==void 0?Z:K),O)}}Mk.funcKeywordCode=b$0;function wk(D){let{gen:Y,data:X,it:Q}=D;Y.if(Q.parentData,()=>Y.assign(X,y8._`${Q.parentData}[${Q.parentDataProperty}]`))}function k$0(D,Y){let{gen:X}=D;X.if(y8._`Array.isArray(${Y})`,()=>{X.assign(S5.default.vErrors,y8._`${S5.default.vErrors} === null ? ${Y} : ${S5.default.vErrors}.concat(${Y})`).assign(S5.default.errors,y8._`${S5.default.vErrors}.length`),(0,x$0.extendErrors)(D)},()=>D.error())}function v$0({schemaEnv:D},Y){if(Y.async&&!D.$async)throw Error("async keyword in sync schema")}function Lk(D,Y,X){if(X===void 0)throw Error(`keyword "${Y}" failed to compile`);return D.scopeValue("keyword",typeof X=="function"?{ref:X}:{ref:X,code:(0,y8.stringify)(X)})}function y$0(D,Y,X=!1){return!Y.length||Y.some((Q)=>Q==="array"?Array.isArray(D):Q==="object"?D&&typeof D=="object"&&!Array.isArray(D):typeof D==Q||X&&typeof D>"u")}Mk.validSchemaType=y$0;function f$0({schema:D,opts:Y,self:X,errSchemaPath:Q},J,W){if(Array.isArray(J.keyword)?!J.keyword.includes(W):J.keyword!==W)throw Error("ajv implementation error");let $=J.dependencies;if($===null||$===void 0?void 0:$.some((G)=>!Object.prototype.hasOwnProperty.call(D,G)))throw Error(`parent schema must have dependencies of ${W}: ${$.join(",")}`);if(J.validateSchema){if(!J.validateSchema(D[W])){let B=`keyword "${W}" value is invalid at path "${Q}": `+X.errorsText(J.validateSchema.errors);if(Y.validateSchema==="log")X.logger.error(B);else throw Error(B)}}}Mk.validateKeywordUsage=f$0});var Rk=T((Ak)=>{Object.defineProperty(Ak,"__esModule",{value:!0});Ak.extendSubschemaMode=Ak.extendSubschemaData=Ak.getSubschema=void 0;var $9=x0(),Zk=p0();function m$0(D,{keyword:Y,schemaProp:X,schema:Q,schemaPath:J,errSchemaPath:W,topSchemaRef:$}){if(Y!==void 0&&Q!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(Y!==void 0){let G=D.schema[Y];return X===void 0?{schema:G,schemaPath:$9._`${D.schemaPath}${(0,$9.getProperty)(Y)}`,errSchemaPath:`${D.errSchemaPath}/${Y}`}:{schema:G[X],schemaPath:$9._`${D.schemaPath}${(0,$9.getProperty)(Y)}${(0,$9.getProperty)(X)}`,errSchemaPath:`${D.errSchemaPath}/${Y}/${(0,Zk.escapeFragment)(X)}`}}if(Q!==void 0){if(J===void 0||W===void 0||$===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:Q,schemaPath:J,topSchemaRef:$,errSchemaPath:W}}throw Error('either "keyword" or "schema" must be passed')}Ak.getSubschema=m$0;function c$0(D,Y,{dataProp:X,dataPropType:Q,data:J,dataTypes:W,propertyName:$}){if(J!==void 0&&X!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:G}=Y;if(X!==void 0){let{errorPath:H,dataPathArr:F,opts:K}=Y,U=G.let("data",$9._`${Y.data}${(0,$9.getProperty)(X)}`,!0);B(U),D.errorPath=$9.str`${H}${(0,Zk.getErrorPath)(X,Q,K.jsPropertySyntax)}`,D.parentDataProperty=$9._`${X}`,D.dataPathArr=[...F,D.parentDataProperty]}if(J!==void 0){let H=J instanceof $9.Name?J:G.let("data",J,!0);if(B(H),$!==void 0)D.propertyName=$}if(W)D.dataTypes=W;function B(H){D.data=H,D.dataLevel=Y.dataLevel+1,D.dataTypes=[],Y.definedProperties=new Set,D.parentData=Y.data,D.dataNames=[...Y.dataNames,H]}}Ak.extendSubschemaData=c$0;function l$0(D,{jtdDiscriminator:Y,jtdMetadata:X,compositeRule:Q,createErrors:J,allErrors:W}){if(Q!==void 0)D.compositeRule=Q;if(J!==void 0)D.createErrors=J;if(W!==void 0)D.allErrors=W;D.jtdDiscriminator=Y,D.jtdMetadata=X}Ak.extendSubschemaMode=l$0});var rz=T((hI0,jk)=>{jk.exports=function D(Y,X){if(Y===X)return!0;if(Y&&X&&typeof Y=="object"&&typeof X=="object"){if(Y.constructor!==X.constructor)return!1;var Q,J,W;if(Array.isArray(Y)){if(Q=Y.length,Q!=X.length)return!1;for(J=Q;J--!==0;)if(!D(Y[J],X[J]))return!1;return!0}if(Y.constructor===RegExp)return Y.source===X.source&&Y.flags===X.flags;if(Y.valueOf!==Object.prototype.valueOf)return Y.valueOf()===X.valueOf();if(Y.toString!==Object.prototype.toString)return Y.toString()===X.toString();if(W=Object.keys(Y),Q=W.length,Q!==Object.keys(X).length)return!1;for(J=Q;J--!==0;)if(!Object.prototype.hasOwnProperty.call(X,W[J]))return!1;for(J=Q;J--!==0;){var $=W[J];if(!D(Y[$],X[$]))return!1}return!0}return Y!==Y&&X!==X}});var Sk=T((gI0,Tk)=>{var RD=Tk.exports=function(D,Y,X){if(typeof Y=="function")X=Y,Y={};X=Y.cb||X;var Q=typeof X=="function"?X:X.pre||function(){},J=X.post||function(){};F$(Y,Q,J,D,"",D)};RD.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};RD.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};RD.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};RD.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function F$(D,Y,X,Q,J,W,$,G,B,H){if(Q&&typeof Q=="object"&&!Array.isArray(Q)){Y(Q,J,W,$,G,B,H);for(var F in Q){var K=Q[F];if(Array.isArray(K)){if(F in RD.arrayKeywords)for(var U=0;U<K.length;U++)F$(D,Y,X,K[U],J+"/"+F+"/"+U,W,J,F,Q,U)}else if(F in RD.propsKeywords){if(K&&typeof K=="object")for(var z in K)F$(D,Y,X,K[z],J+"/"+F+"/"+n$0(z),W,J,F,Q,z)}else if(F in RD.keywords||D.allKeys&&!(F in RD.skipKeywords))F$(D,Y,X,K,J+"/"+F,W,J,F,Q)}X(Q,J,W,$,G,B,H)}}function n$0(D){return D.replace(/~/g,"~0").replace(/\//g,"~1")}});var eY=T((xk)=>{Object.defineProperty(xk,"__esModule",{value:!0});xk.getSchemaRefs=xk.resolveUrl=xk.normalizeId=xk._getFullPath=xk.getFullPath=xk.inlineRef=void 0;var i$0=p0(),r$0=rz(),a$0=Sk(),o$0=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function s$0(D,Y=!0){if(typeof D=="boolean")return!0;if(Y===!0)return!az(D);if(!Y)return!1;return Pk(D)<=Y}xk.inlineRef=s$0;var t$0=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function az(D){for(let Y in D){if(t$0.has(Y))return!0;let X=D[Y];if(Array.isArray(X)&&X.some(az))return!0;if(typeof X=="object"&&az(X))return!0}return!1}function Pk(D){let Y=0;for(let X in D){if(X==="$ref")return 1/0;if(Y++,o$0.has(X))continue;if(typeof D[X]=="object")(0,i$0.eachItem)(D[X],(Q)=>Y+=Pk(Q));if(Y===1/0)return 1/0}return Y}function Ik(D,Y="",X){if(X!==!1)Y=P3(Y);let Q=D.parse(Y);return Ck(D,Q)}xk.getFullPath=Ik;function Ck(D,Y){return D.serialize(Y).split("#")[0]+"#"}xk._getFullPath=Ck;var e$0=/#\/?$/;function P3(D){return D?D.replace(e$0,""):""}xk.normalizeId=P3;function DG0(D,Y,X){return X=P3(X),D.resolve(Y,X)}xk.resolveUrl=DG0;var YG0=/^[a-z_][-a-z0-9._]*$/i;function XG0(D,Y){if(typeof D=="boolean")return{};let{schemaId:X,uriResolver:Q}=this.opts,J=P3(D[X]||Y),W={"":J},$=Ik(Q,J,!1),G={},B=new Set;return a$0(D,{allKeys:!0},(K,U,z,V)=>{if(V===void 0)return;let w=$+U,L=W[V];if(typeof K[X]=="string")L=O.call(this,K[X]);Z.call(this,K.$anchor),Z.call(this,K.$dynamicAnchor),W[U]=L;function O(M){let E=this.opts.uriResolver.resolve;if(M=P3(L?E(L,M):M),B.has(M))throw F(M);B.add(M);let j=this.refs[M];if(typeof j=="string")j=this.refs[j];if(typeof j=="object")H(K,j.schema,M);else if(M!==P3(w))if(M[0]==="#")H(K,G[M],M),G[M]=K;else this.refs[M]=w;return M}function Z(M){if(typeof M=="string"){if(!YG0.test(M))throw Error(`invalid anchor "${M}"`);O.call(this,`#${M}`)}}}),G;function H(K,U,z){if(U!==void 0&&!r$0(K,U))throw F(z)}function F(K){return Error(`reference "${K}" resolves to more than one schema`)}}xk.getSchemaRefs=XG0});var XX=T((ik)=>{Object.defineProperty(ik,"__esModule",{value:!0});ik.getData=ik.KeywordCxt=ik.validateFunctionCode=void 0;var fk=ob(),bk=tY(),sz=mz(),q$=tY(),BG0=qk(),YX=Nk(),oz=Rk(),z0=x0(),j0=I9(),HG0=eY(),C9=p0(),DX=sY();function FG0(D){if(uk(D)){if(mk(D),gk(D)){zG0(D);return}}hk(D,()=>(0,fk.topBoolOrEmptySchema)(D))}ik.validateFunctionCode=FG0;function hk({gen:D,validateName:Y,schema:X,schemaEnv:Q,opts:J},W){if(J.code.es5)D.func(Y,z0._`${j0.default.data}, ${j0.default.valCxt}`,Q.$async,()=>{D.code(z0._`"use strict"; ${kk(X,J)}`),KG0(D,J),D.code(W)});else D.func(Y,z0._`${j0.default.data}, ${qG0(J)}`,Q.$async,()=>D.code(kk(X,J)).code(W))}function qG0(D){return z0._`{${j0.default.instancePath}="", ${j0.default.parentData}, ${j0.default.parentDataProperty}, ${j0.default.rootData}=${j0.default.data}${D.dynamicRef?z0._`, ${j0.default.dynamicAnchors}={}`:z0.nil}}={}`}function KG0(D,Y){D.if(j0.default.valCxt,()=>{if(D.var(j0.default.instancePath,z0._`${j0.default.valCxt}.${j0.default.instancePath}`),D.var(j0.default.parentData,z0._`${j0.default.valCxt}.${j0.default.parentData}`),D.var(j0.default.parentDataProperty,z0._`${j0.default.valCxt}.${j0.default.parentDataProperty}`),D.var(j0.default.rootData,z0._`${j0.default.valCxt}.${j0.default.rootData}`),Y.dynamicRef)D.var(j0.default.dynamicAnchors,z0._`${j0.default.valCxt}.${j0.default.dynamicAnchors}`)},()=>{if(D.var(j0.default.instancePath,z0._`""`),D.var(j0.default.parentData,z0._`undefined`),D.var(j0.default.parentDataProperty,z0._`undefined`),D.var(j0.default.rootData,j0.default.data),Y.dynamicRef)D.var(j0.default.dynamicAnchors,z0._`{}`)})}function zG0(D){let{schema:Y,opts:X,gen:Q}=D;hk(D,()=>{if(X.$comment&&Y.$comment)lk(D);if(MG0(D),Q.let(j0.default.vErrors,null),Q.let(j0.default.errors,0),X.unevaluated)UG0(D);ck(D),ZG0(D)});return}function UG0(D){let{gen:Y,validateName:X}=D;D.evaluated=Y.const("evaluated",z0._`${X}.evaluated`),Y.if(z0._`${D.evaluated}.dynamicProps`,()=>Y.assign(z0._`${D.evaluated}.props`,z0._`undefined`)),Y.if(z0._`${D.evaluated}.dynamicItems`,()=>Y.assign(z0._`${D.evaluated}.items`,z0._`undefined`))}function kk(D,Y){let X=typeof D=="object"&&D[Y.schemaId];return X&&(Y.code.source||Y.code.process)?z0._`/*# sourceURL=${X} */`:z0.nil}function VG0(D,Y){if(uk(D)){if(mk(D),gk(D)){wG0(D,Y);return}}(0,fk.boolOrEmptySchema)(D,Y)}function gk({schema:D,self:Y}){if(typeof D=="boolean")return!D;for(let X in D)if(Y.RULES.all[X])return!0;return!1}function uk(D){return typeof D.schema!="boolean"}function wG0(D,Y){let{schema:X,gen:Q,opts:J}=D;if(J.$comment&&X.$comment)lk(D);OG0(D),NG0(D);let W=Q.const("_errs",j0.default.errors);ck(D,W),Q.var(Y,z0._`${W} === ${j0.default.errors}`)}function mk(D){(0,C9.checkUnknownRules)(D),LG0(D)}function ck(D,Y){if(D.opts.jtd)return vk(D,[],!1,Y);let X=(0,bk.getSchemaTypes)(D.schema),Q=(0,bk.coerceAndCheckDataType)(D,X);vk(D,X,!Q,Y)}function LG0(D){let{schema:Y,errSchemaPath:X,opts:Q,self:J}=D;if(Y.$ref&&Q.ignoreKeywordsWithRef&&(0,C9.schemaHasRulesButRef)(Y,J.RULES))J.logger.warn(`$ref: keywords ignored in schema at path "${X}"`)}function MG0(D){let{schema:Y,opts:X}=D;if(Y.default!==void 0&&X.useDefaults&&X.strictSchema)(0,C9.checkStrictMode)(D,"default is ignored in the schema root")}function OG0(D){let Y=D.schema[D.opts.schemaId];if(Y)D.baseId=(0,HG0.resolveUrl)(D.opts.uriResolver,D.baseId,Y)}function NG0(D){if(D.schema.$async&&!D.schemaEnv.$async)throw Error("async schema in sync schema")}function lk({gen:D,schemaEnv:Y,schema:X,errSchemaPath:Q,opts:J}){let W=X.$comment;if(J.$comment===!0)D.code(z0._`${j0.default.self}.logger.log(${W})`);else if(typeof J.$comment=="function"){let $=z0.str`${Q}/$comment`,G=D.scopeValue("root",{ref:Y.root});D.code(z0._`${j0.default.self}.opts.$comment(${W}, ${$}, ${G}.schema)`)}}function ZG0(D){let{gen:Y,schemaEnv:X,validateName:Q,ValidationError:J,opts:W}=D;if(X.$async)Y.if(z0._`${j0.default.errors} === 0`,()=>Y.return(j0.default.data),()=>Y.throw(z0._`new ${J}(${j0.default.vErrors})`));else{if(Y.assign(z0._`${Q}.errors`,j0.default.vErrors),W.unevaluated)AG0(D);Y.return(z0._`${j0.default.errors} === 0`)}}function AG0({gen:D,evaluated:Y,props:X,items:Q}){if(X instanceof z0.Name)D.assign(z0._`${Y}.props`,X);if(Q instanceof z0.Name)D.assign(z0._`${Y}.items`,Q)}function vk(D,Y,X,Q){let{gen:J,schema:W,data:$,allErrors:G,opts:B,self:H}=D,{RULES:F}=H;if(W.$ref&&(B.ignoreKeywordsWithRef||!(0,C9.schemaHasRulesButRef)(W,F))){J.block(()=>pk(D,"$ref",F.all.$ref.definition));return}if(!B.jtd)EG0(D,Y);J.block(()=>{for(let U of F.rules)K(U);K(F.post)});function K(U){if(!(0,sz.shouldUseGroup)(W,U))return;if(U.type){if(J.if((0,q$.checkDataType)(U.type,$,B.strictNumbers)),yk(D,U),Y.length===1&&Y[0]===U.type&&X)J.else(),(0,q$.reportTypeError)(D);J.endIf()}else yk(D,U);if(!G)J.if(z0._`${j0.default.errors} === ${Q||0}`)}}function yk(D,Y){let{gen:X,schema:Q,opts:{useDefaults:J}}=D;if(J)(0,BG0.assignDefaults)(D,Y.type);X.block(()=>{for(let W of Y.rules)if((0,sz.shouldUseRule)(Q,W))pk(D,W.keyword,W.definition,Y.type)})}function EG0(D,Y){if(D.schemaEnv.meta||!D.opts.strictTypes)return;if(RG0(D,Y),!D.opts.allowUnionTypes)jG0(D,Y);TG0(D,D.dataTypes)}function RG0(D,Y){if(!Y.length)return;if(!D.dataTypes.length){D.dataTypes=Y;return}Y.forEach((X)=>{if(!dk(D.dataTypes,X))tz(D,`type "${X}" not allowed by context "${D.dataTypes.join(",")}"`)}),PG0(D,Y)}function jG0(D,Y){if(Y.length>1&&!(Y.length===2&&Y.includes("null")))tz(D,"use allowUnionTypes to allow union type keyword")}function TG0(D,Y){let X=D.self.RULES.all;for(let Q in X){let J=X[Q];if(typeof J=="object"&&(0,sz.shouldUseRule)(D.schema,J)){let{type:W}=J.definition;if(W.length&&!W.some(($)=>SG0(Y,$)))tz(D,`missing type "${W.join(",")}" for keyword "${Q}"`)}}}function SG0(D,Y){return D.includes(Y)||Y==="number"&&D.includes("integer")}function dk(D,Y){return D.includes(Y)||Y==="integer"&&D.includes("number")}function PG0(D,Y){let X=[];for(let Q of D.dataTypes)if(dk(Y,Q))X.push(Q);else if(Y.includes("integer")&&Q==="number")X.push("integer");D.dataTypes=X}function tz(D,Y){let X=D.schemaEnv.baseId+D.errSchemaPath;Y+=` at "${X}" (strictTypes)`,(0,C9.checkStrictMode)(D,Y,D.opts.strictTypes)}class ez{constructor(D,Y,X){if((0,YX.validateKeywordUsage)(D,Y,X),this.gen=D.gen,this.allErrors=D.allErrors,this.keyword=X,this.data=D.data,this.schema=D.schema[X],this.$data=Y.$data&&D.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,C9.schemaRefOrVal)(D,this.schema,X,this.$data),this.schemaType=Y.schemaType,this.parentSchema=D.schema,this.params={},this.it=D,this.def=Y,this.$data)this.schemaCode=D.gen.const("vSchema",nk(this.$data,D));else if(this.schemaCode=this.schemaValue,!(0,YX.validSchemaType)(this.schema,Y.schemaType,Y.allowUndefined))throw Error(`${X} value must be ${JSON.stringify(Y.schemaType)}`);if("code"in Y?Y.trackErrors:Y.errors!==!1)this.errsCount=D.gen.const("_errs",j0.default.errors)}result(D,Y,X){this.failResult((0,z0.not)(D),Y,X)}failResult(D,Y,X){if(this.gen.if(D),X)X();else this.error();if(Y){if(this.gen.else(),Y(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(D,Y){this.failResult((0,z0.not)(D),void 0,Y)}fail(D){if(D===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(D),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(D){if(!this.$data)return this.fail(D);let{schemaCode:Y}=this;this.fail(z0._`${Y} !== undefined && (${(0,z0.or)(this.invalid$data(),D)})`)}error(D,Y,X){if(Y){this.setParams(Y),this._error(D,X),this.setParams({});return}this._error(D,X)}_error(D,Y){(D?DX.reportExtraError:DX.reportError)(this,this.def.error,Y)}$dataError(){(0,DX.reportError)(this,this.def.$dataError||DX.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');(0,DX.resetErrorsCount)(this.gen,this.errsCount)}ok(D){if(!this.allErrors)this.gen.if(D)}setParams(D,Y){if(Y)Object.assign(this.params,D);else this.params=D}block$data(D,Y,X=z0.nil){this.gen.block(()=>{this.check$data(D,X),Y()})}check$data(D=z0.nil,Y=z0.nil){if(!this.$data)return;let{gen:X,schemaCode:Q,schemaType:J,def:W}=this;if(X.if((0,z0.or)(z0._`${Q} === undefined`,Y)),D!==z0.nil)X.assign(D,!0);if(J.length||W.validateSchema){if(X.elseIf(this.invalid$data()),this.$dataError(),D!==z0.nil)X.assign(D,!1)}X.else()}invalid$data(){let{gen:D,schemaCode:Y,schemaType:X,def:Q,it:J}=this;return(0,z0.or)(W(),$());function W(){if(X.length){if(!(Y instanceof z0.Name))throw Error("ajv implementation error");let G=Array.isArray(X)?X:[X];return z0._`${(0,q$.checkDataTypes)(G,Y,J.opts.strictNumbers,q$.DataType.Wrong)}`}return z0.nil}function $(){if(Q.validateSchema){let G=D.scopeValue("validate$data",{ref:Q.validateSchema});return z0._`!${G}(${Y})`}return z0.nil}}subschema(D,Y){let X=(0,oz.getSubschema)(this.it,D);(0,oz.extendSubschemaData)(X,this.it,D),(0,oz.extendSubschemaMode)(X,D);let Q={...this.it,...X,items:void 0,props:void 0};return VG0(Q,Y),Q}mergeEvaluated(D,Y){let{it:X,gen:Q}=this;if(!X.opts.unevaluated)return;if(X.props!==!0&&D.props!==void 0)X.props=C9.mergeEvaluated.props(Q,D.props,X.props,Y);if(X.items!==!0&&D.items!==void 0)X.items=C9.mergeEvaluated.items(Q,D.items,X.items,Y)}mergeValidEvaluated(D,Y){let{it:X,gen:Q}=this;if(X.opts.unevaluated&&(X.props!==!0||X.items!==!0))return Q.if(Y,()=>this.mergeEvaluated(D,z0.Name)),!0}}ik.KeywordCxt=ez;function pk(D,Y,X,Q){let J=new ez(D,X,Y);if("code"in X)X.code(J,Q);else if(J.$data&&X.validate)(0,YX.funcKeywordCode)(J,X);else if("macro"in X)(0,YX.macroKeywordCode)(J,X);else if(X.compile||X.validate)(0,YX.funcKeywordCode)(J,X)}var IG0=/^\/(?:[^~]|~0|~1)*$/,CG0=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function nk(D,{dataLevel:Y,dataNames:X,dataPathArr:Q}){let J,W;if(D==="")return j0.default.rootData;if(D[0]==="/"){if(!IG0.test(D))throw Error(`Invalid JSON-pointer: ${D}`);J=D,W=j0.default.rootData}else{let H=CG0.exec(D);if(!H)throw Error(`Invalid JSON-pointer: ${D}`);let F=+H[1];if(J=H[2],J==="#"){if(F>=Y)throw Error(B("property/index",F));return Q[Y-F]}if(F>Y)throw Error(B("data",F));if(W=X[Y-F],!J)return W}let $=W,G=J.split("/");for(let H of G)if(H)W=z0._`${W}${(0,z0.getProperty)((0,C9.unescapeJsonPointer)(H))}`,$=z0._`${$} && ${W}`;return $;function B(H,F){return`Cannot access ${H} ${F} levels up, current level is ${Y}`}}ik.getData=nk});var K$=T((ok)=>{Object.defineProperty(ok,"__esModule",{value:!0});class ak extends Error{constructor(D){super("validation failed");this.errors=D,this.ajv=this.validation=!0}}ok.default=ak});var QX=T((tk)=>{Object.defineProperty(tk,"__esModule",{value:!0});var DU=eY();class sk extends Error{constructor(D,Y,X,Q){super(Q||`can't resolve reference ${X} from id ${Y}`);this.missingRef=(0,DU.resolveUrl)(D,Y,X),this.missingSchema=(0,DU.normalizeId)((0,DU.getFullPath)(D,this.missingRef))}}tk.default=sk});var U$=T((Yv)=>{Object.defineProperty(Yv,"__esModule",{value:!0});Yv.resolveSchema=Yv.getCompilingSchema=Yv.resolveRef=Yv.compileSchema=Yv.SchemaEnv=void 0;var c6=x0(),vG0=K$(),P5=I9(),l6=eY(),ek=p0(),yG0=XX();class JX{constructor(D){var Y;this.refs={},this.dynamicAnchors={};let X;if(typeof D.schema=="object")X=D.schema;this.schema=D.schema,this.schemaId=D.schemaId,this.root=D.root||this,this.baseId=(Y=D.baseId)!==null&&Y!==void 0?Y:(0,l6.normalizeId)(X===null||X===void 0?void 0:X[D.schemaId||"$id"]),this.schemaPath=D.schemaPath,this.localRefs=D.localRefs,this.meta=D.meta,this.$async=X===null||X===void 0?void 0:X.$async,this.refs={}}}Yv.SchemaEnv=JX;function XU(D){let Y=Dv.call(this,D);if(Y)return Y;let X=(0,l6.getFullPath)(this.opts.uriResolver,D.root.baseId),{es5:Q,lines:J}=this.opts.code,{ownProperties:W}=this.opts,$=new c6.CodeGen(this.scope,{es5:Q,lines:J,ownProperties:W}),G;if(D.$async)G=$.scopeValue("Error",{ref:vG0.default,code:c6._`require("ajv/dist/runtime/validation_error").default`});let B=$.scopeName("validate");D.validateName=B;let H={gen:$,allErrors:this.opts.allErrors,data:P5.default.data,parentData:P5.default.parentData,parentDataProperty:P5.default.parentDataProperty,dataNames:[P5.default.data],dataPathArr:[c6.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:$.scopeValue("schema",this.opts.code.source===!0?{ref:D.schema,code:(0,c6.stringify)(D.schema)}:{ref:D.schema}),validateName:B,ValidationError:G,schema:D.schema,schemaEnv:D,rootId:X,baseId:D.baseId||X,schemaPath:c6.nil,errSchemaPath:D.schemaPath||(this.opts.jtd?"":"#"),errorPath:c6._`""`,opts:this.opts,self:this},F;try{this._compilations.add(D),(0,yG0.validateFunctionCode)(H),$.optimize(this.opts.code.optimize);let K=$.toString();if(F=`${$.scopeRefs(P5.default.scope)}return ${K}`,this.opts.code.process)F=this.opts.code.process(F,D);let z=Function(`${P5.default.self}`,`${P5.default.scope}`,F)(this,this.scope.get());if(this.scope.value(B,{ref:z}),z.errors=null,z.schema=D.schema,z.schemaEnv=D,D.$async)z.$async=!0;if(this.opts.code.source===!0)z.source={validateName:B,validateCode:K,scopeValues:$._values};if(this.opts.unevaluated){let{props:V,items:w}=H;if(z.evaluated={props:V instanceof c6.Name?void 0:V,items:w instanceof c6.Name?void 0:w,dynamicProps:V instanceof c6.Name,dynamicItems:w instanceof c6.Name},z.source)z.source.evaluated=(0,c6.stringify)(z.evaluated)}return D.validate=z,D}catch(K){if(delete D.validate,delete D.validateName,F)this.logger.error("Error compiling schema, function code:",F);throw K}finally{this._compilations.delete(D)}}Yv.compileSchema=XU;function fG0(D,Y,X){var Q;X=(0,l6.resolveUrl)(this.opts.uriResolver,Y,X);let J=D.refs[X];if(J)return J;let W=uG0.call(this,D,X);if(W===void 0){let $=(Q=D.localRefs)===null||Q===void 0?void 0:Q[X],{schemaId:G}=this.opts;if($)W=new JX({schema:$,schemaId:G,root:D,baseId:Y})}if(W===void 0)return;return D.refs[X]=hG0.call(this,W)}Yv.resolveRef=fG0;function hG0(D){if((0,l6.inlineRef)(D.schema,this.opts.inlineRefs))return D.schema;return D.validate?D:XU.call(this,D)}function Dv(D){for(let Y of this._compilations)if(gG0(Y,D))return Y}Yv.getCompilingSchema=Dv;function gG0(D,Y){return D.schema===Y.schema&&D.root===Y.root&&D.baseId===Y.baseId}function uG0(D,Y){let X;while(typeof(X=this.refs[Y])=="string")Y=X;return X||this.schemas[Y]||z$.call(this,D,Y)}function z$(D,Y){let X=this.opts.uriResolver.parse(Y),Q=(0,l6._getFullPath)(this.opts.uriResolver,X),J=(0,l6.getFullPath)(this.opts.uriResolver,D.baseId,void 0);if(Object.keys(D.schema).length>0&&Q===J)return YU.call(this,X,D);let W=(0,l6.normalizeId)(Q),$=this.refs[W]||this.schemas[W];if(typeof $=="string"){let G=z$.call(this,D,$);if(typeof(G===null||G===void 0?void 0:G.schema)!=="object")return;return YU.call(this,X,G)}if(typeof($===null||$===void 0?void 0:$.schema)!=="object")return;if(!$.validate)XU.call(this,$);if(W===(0,l6.normalizeId)(Y)){let{schema:G}=$,{schemaId:B}=this.opts,H=G[B];if(H)J=(0,l6.resolveUrl)(this.opts.uriResolver,J,H);return new JX({schema:G,schemaId:B,root:D,baseId:J})}return YU.call(this,X,$)}Yv.resolveSchema=z$;var mG0=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function YU(D,{baseId:Y,schema:X,root:Q}){var J;if(((J=D.fragment)===null||J===void 0?void 0:J[0])!=="/")return;for(let G of D.fragment.slice(1).split("/")){if(typeof X==="boolean")return;let B=X[(0,ek.unescapeFragment)(G)];if(B===void 0)return;X=B;let H=typeof X==="object"&&X[this.opts.schemaId];if(!mG0.has(G)&&H)Y=(0,l6.resolveUrl)(this.opts.uriResolver,Y,H)}let W;if(typeof X!="boolean"&&X.$ref&&!(0,ek.schemaHasRulesButRef)(X,this.RULES)){let G=(0,l6.resolveUrl)(this.opts.uriResolver,Y,X.$ref);W=z$.call(this,Q,G)}let{schemaId:$}=this.opts;if(W=W||new JX({schema:X,schemaId:$,root:Q,baseId:Y}),W.schema!==W.root.schema)return W;return}});var Qv=T((pI0,nG0)=>{nG0.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var JU=T((nI0,Gv)=>{var iG0=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),Wv=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function QU(D){let Y="",X=0,Q=0;for(Q=0;Q<D.length;Q++){if(X=D[Q].charCodeAt(0),X===48)continue;if(!(X>=48&&X<=57||X>=65&&X<=70||X>=97&&X<=102))return"";Y+=D[Q];break}for(Q+=1;Q<D.length;Q++){if(X=D[Q].charCodeAt(0),!(X>=48&&X<=57||X>=65&&X<=70||X>=97&&X<=102))return"";Y+=D[Q]}return Y}var rG0=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function Jv(D){return D.length=0,!0}function aG0(D,Y,X){if(D.length){let Q=QU(D);if(Q!=="")Y.push(Q);else return X.error=!0,!1;D.length=0}return!0}function oG0(D){let Y=0,X={error:!1,address:"",zone:""},Q=[],J=[],W=!1,$=!1,G=aG0;for(let B=0;B<D.length;B++){let H=D[B];if(H==="["||H==="]")continue;if(H===":"){if(W===!0)$=!0;if(!G(J,Q,X))break;if(++Y>7){X.error=!0;break}if(B>0&&D[B-1]===":")W=!0;Q.push(":");continue}else if(H==="%"){if(!G(J,Q,X))break;G=Jv}else{J.push(H);continue}}if(J.length)if(G===Jv)X.zone=J.join("");else if($)Q.push(J.join(""));else Q.push(QU(J));return X.address=Q.join(""),X}function $v(D){if(sG0(D,":")<2)return{host:D,isIPV6:!1};let Y=oG0(D);if(!Y.error){let{address:X,address:Q}=Y;if(Y.zone)X+="%"+Y.zone,Q+="%25"+Y.zone;return{host:X,isIPV6:!0,escapedHost:Q}}else return{host:D,isIPV6:!1}}function sG0(D,Y){let X=0;for(let Q=0;Q<D.length;Q++)if(D[Q]===Y)X++;return X}function tG0(D){let Y=D,X=[],Q=-1,J=0;while(J=Y.length){if(J===1)if(Y===".")break;else if(Y==="/"){X.push("/");break}else{X.push(Y);break}else if(J===2){if(Y[0]==="."){if(Y[1]===".")break;else if(Y[1]==="/"){Y=Y.slice(2);continue}}else if(Y[0]==="/"){if(Y[1]==="."||Y[1]==="/"){X.push("/");break}}}else if(J===3){if(Y==="/.."){if(X.length!==0)X.pop();X.push("/");break}}if(Y[0]==="."){if(Y[1]==="."){if(Y[2]==="/"){Y=Y.slice(3);continue}}else if(Y[1]==="/"){Y=Y.slice(2);continue}}else if(Y[0]==="/"){if(Y[1]==="."){if(Y[2]==="/"){Y=Y.slice(2);continue}else if(Y[2]==="."){if(Y[3]==="/"){if(Y=Y.slice(3),X.length!==0)X.pop();continue}}}}if((Q=Y.indexOf("/",1))===-1){X.push(Y);break}else X.push(Y.slice(0,Q)),Y=Y.slice(Q)}return X.join("")}function eG0(D,Y){let X=Y!==!0?escape:unescape;if(D.scheme!==void 0)D.scheme=X(D.scheme);if(D.userinfo!==void 0)D.userinfo=X(D.userinfo);if(D.host!==void 0)D.host=X(D.host);if(D.path!==void 0)D.path=X(D.path);if(D.query!==void 0)D.query=X(D.query);if(D.fragment!==void 0)D.fragment=X(D.fragment);return D}function DB0(D){let Y=[];if(D.userinfo!==void 0)Y.push(D.userinfo),Y.push("@");if(D.host!==void 0){let X=unescape(D.host);if(!Wv(X)){let Q=$v(X);if(Q.isIPV6===!0)X=`[${Q.escapedHost}]`;else X=D.host}Y.push(X)}if(typeof D.port==="number"||typeof D.port==="string")Y.push(":"),Y.push(String(D.port));return Y.length?Y.join(""):void 0}Gv.exports={nonSimpleDomain:rG0,recomposeAuthority:DB0,normalizeComponentEncoding:eG0,removeDotSegments:tG0,isIPv4:Wv,isUUID:iG0,normalizeIPv6:$v,stringArrayToHexStripped:QU}});var Kv=T((iI0,qv)=>{var{isUUID:YB0}=JU(),XB0=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,QB0=["http","https","ws","wss","urn","urn:uuid"];function JB0(D){return QB0.indexOf(D)!==-1}function WU(D){if(D.secure===!0)return!0;else if(D.secure===!1)return!1;else if(D.scheme)return D.scheme.length===3&&(D.scheme[0]==="w"||D.scheme[0]==="W")&&(D.scheme[1]==="s"||D.scheme[1]==="S")&&(D.scheme[2]==="s"||D.scheme[2]==="S");else return!1}function Bv(D){if(!D.host)D.error=D.error||"HTTP URIs must have a host.";return D}function Hv(D){let Y=String(D.scheme).toLowerCase()==="https";if(D.port===(Y?443:80)||D.port==="")D.port=void 0;if(!D.path)D.path="/";return D}function WB0(D){return D.secure=WU(D),D.resourceName=(D.path||"/")+(D.query?"?"+D.query:""),D.path=void 0,D.query=void 0,D}function $B0(D){if(D.port===(WU(D)?443:80)||D.port==="")D.port=void 0;if(typeof D.secure==="boolean")D.scheme=D.secure?"wss":"ws",D.secure=void 0;if(D.resourceName){let[Y,X]=D.resourceName.split("?");D.path=Y&&Y!=="/"?Y:void 0,D.query=X,D.resourceName=void 0}return D.fragment=void 0,D}function GB0(D,Y){if(!D.path)return D.error="URN can not be parsed",D;let X=D.path.match(XB0);if(X){let Q=Y.scheme||D.scheme||"urn";D.nid=X[1].toLowerCase(),D.nss=X[2];let J=`${Q}:${Y.nid||D.nid}`,W=$U(J);if(D.path=void 0,W)D=W.parse(D,Y)}else D.error=D.error||"URN can not be parsed.";return D}function BB0(D,Y){if(D.nid===void 0)throw Error("URN without nid cannot be serialized");let X=Y.scheme||D.scheme||"urn",Q=D.nid.toLowerCase(),J=`${X}:${Y.nid||Q}`,W=$U(J);if(W)D=W.serialize(D,Y);let $=D,G=D.nss;return $.path=`${Q||Y.nid}:${G}`,Y.skipEscape=!0,$}function HB0(D,Y){let X=D;if(X.uuid=X.nss,X.nss=void 0,!Y.tolerant&&(!X.uuid||!YB0(X.uuid)))X.error=X.error||"UUID is not valid.";return X}function FB0(D){let Y=D;return Y.nss=(D.uuid||"").toLowerCase(),Y}var Fv={scheme:"http",domainHost:!0,parse:Bv,serialize:Hv},qB0={scheme:"https",domainHost:Fv.domainHost,parse:Bv,serialize:Hv},V$={scheme:"ws",domainHost:!0,parse:WB0,serialize:$B0},KB0={scheme:"wss",domainHost:V$.domainHost,parse:V$.parse,serialize:V$.serialize},zB0={scheme:"urn",parse:GB0,serialize:BB0,skipNormalize:!0},UB0={scheme:"urn:uuid",parse:HB0,serialize:FB0,skipNormalize:!0},w$={http:Fv,https:qB0,ws:V$,wss:KB0,urn:zB0,"urn:uuid":UB0};Object.setPrototypeOf(w$,null);function $U(D){return D&&(w$[D]||w$[D.toLowerCase()])||void 0}qv.exports={wsIsSecure:WU,SCHEMES:w$,isValidSchemeName:JB0,getSchemeHandler:$U}});var Vv=T((rI0,M$)=>{var{normalizeIPv6:VB0,removeDotSegments:WX,recomposeAuthority:wB0,normalizeComponentEncoding:L$,isIPv4:LB0,nonSimpleDomain:MB0}=JU(),{SCHEMES:OB0,getSchemeHandler:zv}=Kv();function NB0(D,Y){if(typeof D==="string")D=G9(x9(D,Y),Y);else if(typeof D==="object")D=x9(G9(D,Y),Y);return D}function ZB0(D,Y,X){let Q=X?Object.assign({scheme:"null"},X):{scheme:"null"},J=Uv(x9(D,Q),x9(Y,Q),Q,!0);return Q.skipEscape=!0,G9(J,Q)}function Uv(D,Y,X,Q){let J={};if(!Q)D=x9(G9(D,X),X),Y=x9(G9(Y,X),X);if(X=X||{},!X.tolerant&&Y.scheme)J.scheme=Y.scheme,J.userinfo=Y.userinfo,J.host=Y.host,J.port=Y.port,J.path=WX(Y.path||""),J.query=Y.query;else{if(Y.userinfo!==void 0||Y.host!==void 0||Y.port!==void 0)J.userinfo=Y.userinfo,J.host=Y.host,J.port=Y.port,J.path=WX(Y.path||""),J.query=Y.query;else{if(!Y.path)if(J.path=D.path,Y.query!==void 0)J.query=Y.query;else J.query=D.query;else{if(Y.path[0]==="/")J.path=WX(Y.path);else{if((D.userinfo!==void 0||D.host!==void 0||D.port!==void 0)&&!D.path)J.path="/"+Y.path;else if(!D.path)J.path=Y.path;else J.path=D.path.slice(0,D.path.lastIndexOf("/")+1)+Y.path;J.path=WX(J.path)}J.query=Y.query}J.userinfo=D.userinfo,J.host=D.host,J.port=D.port}J.scheme=D.scheme}return J.fragment=Y.fragment,J}function AB0(D,Y,X){if(typeof D==="string")D=unescape(D),D=G9(L$(x9(D,X),!0),{...X,skipEscape:!0});else if(typeof D==="object")D=G9(L$(D,!0),{...X,skipEscape:!0});if(typeof Y==="string")Y=unescape(Y),Y=G9(L$(x9(Y,X),!0),{...X,skipEscape:!0});else if(typeof Y==="object")Y=G9(L$(Y,!0),{...X,skipEscape:!0});return D.toLowerCase()===Y.toLowerCase()}function G9(D,Y){let X={host:D.host,scheme:D.scheme,userinfo:D.userinfo,port:D.port,path:D.path,query:D.query,nid:D.nid,nss:D.nss,uuid:D.uuid,fragment:D.fragment,reference:D.reference,resourceName:D.resourceName,secure:D.secure,error:""},Q=Object.assign({},Y),J=[],W=zv(Q.scheme||X.scheme);if(W&&W.serialize)W.serialize(X,Q);if(X.path!==void 0)if(!Q.skipEscape){if(X.path=escape(X.path),X.scheme!==void 0)X.path=X.path.split("%3A").join(":")}else X.path=unescape(X.path);if(Q.reference!=="suffix"&&X.scheme)J.push(X.scheme,":");let $=wB0(X);if($!==void 0){if(Q.reference!=="suffix")J.push("//");if(J.push($),X.path&&X.path[0]!=="/")J.push("/")}if(X.path!==void 0){let G=X.path;if(!Q.absolutePath&&(!W||!W.absolutePath))G=WX(G);if($===void 0&&G[0]==="/"&&G[1]==="/")G="/%2F"+G.slice(2);J.push(G)}if(X.query!==void 0)J.push("?",X.query);if(X.fragment!==void 0)J.push("#",X.fragment);return J.join("")}var EB0=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function x9(D,Y){let X=Object.assign({},Y),Q={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},J=!1;if(X.reference==="suffix")if(X.scheme)D=X.scheme+":"+D;else D="//"+D;let W=D.match(EB0);if(W){if(Q.scheme=W[1],Q.userinfo=W[3],Q.host=W[4],Q.port=parseInt(W[5],10),Q.path=W[6]||"",Q.query=W[7],Q.fragment=W[8],isNaN(Q.port))Q.port=W[5];if(Q.host)if(LB0(Q.host)===!1){let B=VB0(Q.host);Q.host=B.host.toLowerCase(),J=B.isIPV6}else J=!0;if(Q.scheme===void 0&&Q.userinfo===void 0&&Q.host===void 0&&Q.port===void 0&&Q.query===void 0&&!Q.path)Q.reference="same-document";else if(Q.scheme===void 0)Q.reference="relative";else if(Q.fragment===void 0)Q.reference="absolute";else Q.reference="uri";if(X.reference&&X.reference!=="suffix"&&X.reference!==Q.reference)Q.error=Q.error||"URI is not a "+X.reference+" reference.";let $=zv(X.scheme||Q.scheme);if(!X.unicodeSupport&&(!$||!$.unicodeSupport)){if(Q.host&&(X.domainHost||$&&$.domainHost)&&J===!1&&MB0(Q.host))try{Q.host=URL.domainToASCII(Q.host.toLowerCase())}catch(G){Q.error=Q.error||"Host's domain name can not be converted to ASCII: "+G}}if(!$||$&&!$.skipNormalize){if(D.indexOf("%")!==-1){if(Q.scheme!==void 0)Q.scheme=unescape(Q.scheme);if(Q.host!==void 0)Q.host=unescape(Q.host)}if(Q.path)Q.path=escape(unescape(Q.path));if(Q.fragment)Q.fragment=encodeURI(decodeURIComponent(Q.fragment))}if($&&$.parse)$.parse(Q,X)}else Q.error=Q.error||"URI can not be parsed.";return Q}var GU={SCHEMES:OB0,normalize:NB0,resolve:ZB0,resolveComponent:Uv,equal:AB0,serialize:G9,parse:x9};M$.exports=GU;M$.exports.default=GU;M$.exports.fastUri=GU});var Mv=T((Lv)=>{Object.defineProperty(Lv,"__esModule",{value:!0});var wv=Vv();wv.code='require("ajv/dist/runtime/uri").default';Lv.default=wv});var Tv=T((_9)=>{Object.defineProperty(_9,"__esModule",{value:!0});_9.CodeGen=_9.Name=_9.nil=_9.stringify=_9.str=_9._=_9.KeywordCxt=void 0;var jB0=XX();Object.defineProperty(_9,"KeywordCxt",{enumerable:!0,get:function(){return jB0.KeywordCxt}});var I3=x0();Object.defineProperty(_9,"_",{enumerable:!0,get:function(){return I3._}});Object.defineProperty(_9,"str",{enumerable:!0,get:function(){return I3.str}});Object.defineProperty(_9,"stringify",{enumerable:!0,get:function(){return I3.stringify}});Object.defineProperty(_9,"nil",{enumerable:!0,get:function(){return I3.nil}});Object.defineProperty(_9,"Name",{enumerable:!0,get:function(){return I3.Name}});Object.defineProperty(_9,"CodeGen",{enumerable:!0,get:function(){return I3.CodeGen}});var TB0=K$(),Ev=QX(),SB0=uz(),$X=U$(),PB0=x0(),GX=eY(),O$=tY(),HU=p0(),Ov=Qv(),IB0=Mv(),Rv=(D,Y)=>new RegExp(D,Y);Rv.code="new RegExp";var CB0=["removeAdditional","useDefaults","coerceTypes"],xB0=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),_B0={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},bB0={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},Nv=200;function kB0(D){var Y,X,Q,J,W,$,G,B,H,F,K,U,z,V,w,L,O,Z,M,E,j,I,_,y,C;let c=D.strict,S=(Y=D.code)===null||Y===void 0?void 0:Y.optimize,p=S===!0||S===void 0?1:S||0,u=(Q=(X=D.code)===null||X===void 0?void 0:X.regExp)!==null&&Q!==void 0?Q:Rv,Q0=(J=D.uriResolver)!==null&&J!==void 0?J:IB0.default;return{strictSchema:($=(W=D.strictSchema)!==null&&W!==void 0?W:c)!==null&&$!==void 0?$:!0,strictNumbers:(B=(G=D.strictNumbers)!==null&&G!==void 0?G:c)!==null&&B!==void 0?B:!0,strictTypes:(F=(H=D.strictTypes)!==null&&H!==void 0?H:c)!==null&&F!==void 0?F:"log",strictTuples:(U=(K=D.strictTuples)!==null&&K!==void 0?K:c)!==null&&U!==void 0?U:"log",strictRequired:(V=(z=D.strictRequired)!==null&&z!==void 0?z:c)!==null&&V!==void 0?V:!1,code:D.code?{...D.code,optimize:p,regExp:u}:{optimize:p,regExp:u},loopRequired:(w=D.loopRequired)!==null&&w!==void 0?w:Nv,loopEnum:(L=D.loopEnum)!==null&&L!==void 0?L:Nv,meta:(O=D.meta)!==null&&O!==void 0?O:!0,messages:(Z=D.messages)!==null&&Z!==void 0?Z:!0,inlineRefs:(M=D.inlineRefs)!==null&&M!==void 0?M:!0,schemaId:(E=D.schemaId)!==null&&E!==void 0?E:"$id",addUsedSchema:(j=D.addUsedSchema)!==null&&j!==void 0?j:!0,validateSchema:(I=D.validateSchema)!==null&&I!==void 0?I:!0,validateFormats:(_=D.validateFormats)!==null&&_!==void 0?_:!0,unicodeRegExp:(y=D.unicodeRegExp)!==null&&y!==void 0?y:!0,int32range:(C=D.int32range)!==null&&C!==void 0?C:!0,uriResolver:Q0}}class N${constructor(D={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,D=this.opts={...D,...kB0(D)};let{es5:Y,lines:X}=this.opts.code;this.scope=new PB0.ValueScope({scope:{},prefixes:xB0,es5:Y,lines:X}),this.logger=uB0(D.logger);let Q=D.validateFormats;if(D.validateFormats=!1,this.RULES=(0,SB0.getRules)(),Zv.call(this,_B0,D,"NOT SUPPORTED"),Zv.call(this,bB0,D,"DEPRECATED","warn"),this._metaOpts=hB0.call(this),D.formats)yB0.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),D.keywords)fB0.call(this,D.keywords);if(typeof D.meta=="object")this.addMetaSchema(D.meta);vB0.call(this),D.validateFormats=Q}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:D,meta:Y,schemaId:X}=this.opts,Q=Ov;if(X==="id")Q={...Ov},Q.id=Q.$id,delete Q.$id;if(Y&&D)this.addMetaSchema(Q,Q[X],!1)}defaultMeta(){let{meta:D,schemaId:Y}=this.opts;return this.opts.defaultMeta=typeof D=="object"?D[Y]||D:void 0}validate(D,Y){let X;if(typeof D=="string"){if(X=this.getSchema(D),!X)throw Error(`no schema with key or ref "${D}"`)}else X=this.compile(D);let Q=X(Y);if(!("$async"in X))this.errors=X.errors;return Q}compile(D,Y){let X=this._addSchema(D,Y);return X.validate||this._compileSchemaEnv(X)}compileAsync(D,Y){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:X}=this.opts;return Q.call(this,D,Y);async function Q(H,F){await J.call(this,H.$schema);let K=this._addSchema(H,F);return K.validate||W.call(this,K)}async function J(H){if(H&&!this.getSchema(H))await Q.call(this,{$ref:H},!0)}async function W(H){try{return this._compileSchemaEnv(H)}catch(F){if(!(F instanceof Ev.default))throw F;return $.call(this,F),await G.call(this,F.missingSchema),W.call(this,H)}}function $({missingSchema:H,missingRef:F}){if(this.refs[H])throw Error(`AnySchema ${H} is loaded but ${F} cannot be resolved`)}async function G(H){let F=await B.call(this,H);if(!this.refs[H])await J.call(this,F.$schema);if(!this.refs[H])this.addSchema(F,H,Y)}async function B(H){let F=this._loading[H];if(F)return F;try{return await(this._loading[H]=X(H))}finally{delete this._loading[H]}}}addSchema(D,Y,X,Q=this.opts.validateSchema){if(Array.isArray(D)){for(let W of D)this.addSchema(W,void 0,X,Q);return this}let J;if(typeof D==="object"){let{schemaId:W}=this.opts;if(J=D[W],J!==void 0&&typeof J!="string")throw Error(`schema ${W} must be string`)}return Y=(0,GX.normalizeId)(Y||J),this._checkUnique(Y),this.schemas[Y]=this._addSchema(D,X,Y,Q,!0),this}addMetaSchema(D,Y,X=this.opts.validateSchema){return this.addSchema(D,Y,!0,X),this}validateSchema(D,Y){if(typeof D=="boolean")return!0;let X;if(X=D.$schema,X!==void 0&&typeof X!="string")throw Error("$schema must be a string");if(X=X||this.opts.defaultMeta||this.defaultMeta(),!X)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let Q=this.validate(X,D);if(!Q&&Y){let J="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(J);else throw Error(J)}return Q}getSchema(D){let Y;while(typeof(Y=Av.call(this,D))=="string")D=Y;if(Y===void 0){let{schemaId:X}=this.opts,Q=new $X.SchemaEnv({schema:{},schemaId:X});if(Y=$X.resolveSchema.call(this,Q,D),!Y)return;this.refs[D]=Y}return Y.validate||this._compileSchemaEnv(Y)}removeSchema(D){if(D instanceof RegExp)return this._removeAllSchemas(this.schemas,D),this._removeAllSchemas(this.refs,D),this;switch(typeof D){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let Y=Av.call(this,D);if(typeof Y=="object")this._cache.delete(Y.schema);return delete this.schemas[D],delete this.refs[D],this}case"object":{let Y=D;this._cache.delete(Y);let X=D[this.opts.schemaId];if(X)X=(0,GX.normalizeId)(X),delete this.schemas[X],delete this.refs[X];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(D){for(let Y of D)this.addKeyword(Y);return this}addKeyword(D,Y){let X;if(typeof D=="string"){if(X=D,typeof Y=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),Y.keyword=X}else if(typeof D=="object"&&Y===void 0){if(Y=D,X=Y.keyword,Array.isArray(X)&&!X.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(cB0.call(this,X,Y),!Y)return(0,HU.eachItem)(X,(J)=>BU.call(this,J)),this;dB0.call(this,Y);let Q={...Y,type:(0,O$.getJSONTypes)(Y.type),schemaType:(0,O$.getJSONTypes)(Y.schemaType)};return(0,HU.eachItem)(X,Q.type.length===0?(J)=>BU.call(this,J,Q):(J)=>Q.type.forEach((W)=>BU.call(this,J,Q,W))),this}getKeyword(D){let Y=this.RULES.all[D];return typeof Y=="object"?Y.definition:!!Y}removeKeyword(D){let{RULES:Y}=this;delete Y.keywords[D],delete Y.all[D];for(let X of Y.rules){let Q=X.rules.findIndex((J)=>J.keyword===D);if(Q>=0)X.rules.splice(Q,1)}return this}addFormat(D,Y){if(typeof Y=="string")Y=new RegExp(Y);return this.formats[D]=Y,this}errorsText(D=this.errors,{separator:Y=", ",dataVar:X="data"}={}){if(!D||D.length===0)return"No errors";return D.map((Q)=>`${X}${Q.instancePath} ${Q.message}`).reduce((Q,J)=>Q+Y+J)}$dataMetaSchema(D,Y){let X=this.RULES.all;D=JSON.parse(JSON.stringify(D));for(let Q of Y){let J=Q.split("/").slice(1),W=D;for(let $ of J)W=W[$];for(let $ in X){let G=X[$];if(typeof G!="object")continue;let{$data:B}=G.definition,H=W[$];if(B&&H)W[$]=jv(H)}}return D}_removeAllSchemas(D,Y){for(let X in D){let Q=D[X];if(!Y||Y.test(X)){if(typeof Q=="string")delete D[X];else if(Q&&!Q.meta)this._cache.delete(Q.schema),delete D[X]}}}_addSchema(D,Y,X,Q=this.opts.validateSchema,J=this.opts.addUsedSchema){let W,{schemaId:$}=this.opts;if(typeof D=="object")W=D[$];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof D!="boolean")throw Error("schema must be object or boolean");let G=this._cache.get(D);if(G!==void 0)return G;X=(0,GX.normalizeId)(W||X);let B=GX.getSchemaRefs.call(this,D,X);if(G=new $X.SchemaEnv({schema:D,schemaId:$,meta:Y,baseId:X,localRefs:B}),this._cache.set(G.schema,G),J&&!X.startsWith("#")){if(X)this._checkUnique(X);this.refs[X]=G}if(Q)this.validateSchema(D,!0);return G}_checkUnique(D){if(this.schemas[D]||this.refs[D])throw Error(`schema with key or id "${D}" already exists`)}_compileSchemaEnv(D){if(D.meta)this._compileMetaSchema(D);else $X.compileSchema.call(this,D);if(!D.validate)throw Error("ajv implementation error");return D.validate}_compileMetaSchema(D){let Y=this.opts;this.opts=this._metaOpts;try{$X.compileSchema.call(this,D)}finally{this.opts=Y}}}N$.ValidationError=TB0.default;N$.MissingRefError=Ev.default;_9.default=N$;function Zv(D,Y,X,Q="error"){for(let J in D){let W=J;if(W in Y)this.logger[Q](`${X}: option ${J}. ${D[W]}`)}}function Av(D){return D=(0,GX.normalizeId)(D),this.schemas[D]||this.refs[D]}function vB0(){let D=this.opts.schemas;if(!D)return;if(Array.isArray(D))this.addSchema(D);else for(let Y in D)this.addSchema(D[Y],Y)}function yB0(){for(let D in this.opts.formats){let Y=this.opts.formats[D];if(Y)this.addFormat(D,Y)}}function fB0(D){if(Array.isArray(D)){this.addVocabulary(D);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let Y in D){let X=D[Y];if(!X.keyword)X.keyword=Y;this.addKeyword(X)}}function hB0(){let D={...this.opts};for(let Y of CB0)delete D[Y];return D}var gB0={log(){},warn(){},error(){}};function uB0(D){if(D===!1)return gB0;if(D===void 0)return console;if(D.log&&D.warn&&D.error)return D;throw Error("logger must implement log, warn and error methods")}var mB0=/^[a-z_$][a-z0-9_$:-]*$/i;function cB0(D,Y){let{RULES:X}=this;if((0,HU.eachItem)(D,(Q)=>{if(X.keywords[Q])throw Error(`Keyword ${Q} is already defined`);if(!mB0.test(Q))throw Error(`Keyword ${Q} has invalid name`)}),!Y)return;if(Y.$data&&!(("code"in Y)||("validate"in Y)))throw Error('$data keyword must have "code" or "validate" function')}function BU(D,Y,X){var Q;let J=Y===null||Y===void 0?void 0:Y.post;if(X&&J)throw Error('keyword with "post" flag cannot have "type"');let{RULES:W}=this,$=J?W.post:W.rules.find(({type:B})=>B===X);if(!$)$={type:X,rules:[]},W.rules.push($);if(W.keywords[D]=!0,!Y)return;let G={keyword:D,definition:{...Y,type:(0,O$.getJSONTypes)(Y.type),schemaType:(0,O$.getJSONTypes)(Y.schemaType)}};if(Y.before)lB0.call(this,$,G,Y.before);else $.rules.push(G);W.all[D]=G,(Q=Y.implements)===null||Q===void 0||Q.forEach((B)=>this.addKeyword(B))}function lB0(D,Y,X){let Q=D.rules.findIndex((J)=>J.keyword===X);if(Q>=0)D.rules.splice(Q,0,Y);else D.rules.push(Y),this.logger.warn(`rule ${X} is not defined`)}function dB0(D){let{metaSchema:Y}=D;if(Y===void 0)return;if(D.$data&&this.opts.$data)Y=jv(Y);D.validateSchema=this.compile(Y,!0)}var pB0={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function jv(D){return{anyOf:[D,pB0]}}});var Pv=T((Sv)=>{Object.defineProperty(Sv,"__esModule",{value:!0});var rB0={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};Sv.default=rB0});var kv=T((_v)=>{Object.defineProperty(_v,"__esModule",{value:!0});_v.callRef=_v.getValidate=void 0;var oB0=QX(),Iv=A6(),a8=x0(),C3=I9(),Cv=U$(),Z$=p0(),sB0={keyword:"$ref",schemaType:"string",code(D){let{gen:Y,schema:X,it:Q}=D,{baseId:J,schemaEnv:W,validateName:$,opts:G,self:B}=Q,{root:H}=W;if((X==="#"||X==="#/")&&J===H.baseId)return K();let F=Cv.resolveRef.call(B,H,J,X);if(F===void 0)throw new oB0.default(Q.opts.uriResolver,J,X);if(F instanceof Cv.SchemaEnv)return U(F);return z(F);function K(){if(W===H)return A$(D,$,W,W.$async);let V=Y.scopeValue("root",{ref:H});return A$(D,a8._`${V}.validate`,H,H.$async)}function U(V){let w=xv(D,V);A$(D,w,V,V.$async)}function z(V){let w=Y.scopeValue("schema",G.code.source===!0?{ref:V,code:(0,a8.stringify)(V)}:{ref:V}),L=Y.name("valid"),O=D.subschema({schema:V,dataTypes:[],schemaPath:a8.nil,topSchemaRef:w,errSchemaPath:X},L);D.mergeEvaluated(O),D.ok(L)}}};function xv(D,Y){let{gen:X}=D;return Y.validate?X.scopeValue("validate",{ref:Y.validate}):a8._`${X.scopeValue("wrapper",{ref:Y})}.validate`}_v.getValidate=xv;function A$(D,Y,X,Q){let{gen:J,it:W}=D,{allErrors:$,schemaEnv:G,opts:B}=W,H=B.passContext?C3.default.this:a8.nil;if(Q)F();else K();function F(){if(!G.$async)throw Error("async schema referenced by sync schema");let V=J.let("valid");J.try(()=>{if(J.code(a8._`await ${(0,Iv.callValidateCode)(D,Y,H)}`),z(Y),!$)J.assign(V,!0)},(w)=>{if(J.if(a8._`!(${w} instanceof ${W.ValidationError})`,()=>J.throw(w)),U(w),!$)J.assign(V,!1)}),D.ok(V)}function K(){D.result((0,Iv.callValidateCode)(D,Y,H),()=>z(Y),()=>U(Y))}function U(V){let w=a8._`${V}.errors`;J.assign(C3.default.vErrors,a8._`${C3.default.vErrors} === null ? ${w} : ${C3.default.vErrors}.concat(${w})`),J.assign(C3.default.errors,a8._`${C3.default.vErrors}.length`)}function z(V){var w;if(!W.opts.unevaluated)return;let L=(w=X===null||X===void 0?void 0:X.validate)===null||w===void 0?void 0:w.evaluated;if(W.props!==!0)if(L&&!L.dynamicProps){if(L.props!==void 0)W.props=Z$.mergeEvaluated.props(J,L.props,W.props)}else{let O=J.var("props",a8._`${V}.evaluated.props`);W.props=Z$.mergeEvaluated.props(J,O,W.props,a8.Name)}if(W.items!==!0)if(L&&!L.dynamicItems){if(L.items!==void 0)W.items=Z$.mergeEvaluated.items(J,L.items,W.items)}else{let O=J.var("items",a8._`${V}.evaluated.items`);W.items=Z$.mergeEvaluated.items(J,O,W.items,a8.Name)}}}_v.callRef=A$;_v.default=sB0});var yv=T((vv)=>{Object.defineProperty(vv,"__esModule",{value:!0});var DH0=Pv(),YH0=kv(),XH0=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",DH0.default,YH0.default];vv.default=XH0});var hv=T((fv)=>{Object.defineProperty(fv,"__esModule",{value:!0});var E$=x0(),jD=E$.operators,R$={maximum:{okStr:"<=",ok:jD.LTE,fail:jD.GT},minimum:{okStr:">=",ok:jD.GTE,fail:jD.LT},exclusiveMaximum:{okStr:"<",ok:jD.LT,fail:jD.GTE},exclusiveMinimum:{okStr:">",ok:jD.GT,fail:jD.LTE}},JH0={message:({keyword:D,schemaCode:Y})=>E$.str`must be ${R$[D].okStr} ${Y}`,params:({keyword:D,schemaCode:Y})=>E$._`{comparison: ${R$[D].okStr}, limit: ${Y}}`},WH0={keyword:Object.keys(R$),type:"number",schemaType:"number",$data:!0,error:JH0,code(D){let{keyword:Y,data:X,schemaCode:Q}=D;D.fail$data(E$._`${X} ${R$[Y].fail} ${Q} || isNaN(${X})`)}};fv.default=WH0});var uv=T((gv)=>{Object.defineProperty(gv,"__esModule",{value:!0});var BX=x0(),GH0={message:({schemaCode:D})=>BX.str`must be multiple of ${D}`,params:({schemaCode:D})=>BX._`{multipleOf: ${D}}`},BH0={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:GH0,code(D){let{gen:Y,data:X,schemaCode:Q,it:J}=D,W=J.opts.multipleOfPrecision,$=Y.let("res"),G=W?BX._`Math.abs(Math.round(${$}) - ${$}) > 1e-${W}`:BX._`${$} !== parseInt(${$})`;D.fail$data(BX._`(${Q} === 0 || (${$} = ${X}/${Q}, ${G}))`)}};gv.default=BH0});var lv=T((cv)=>{Object.defineProperty(cv,"__esModule",{value:!0});function mv(D){let Y=D.length,X=0,Q=0,J;while(Q<Y)if(X++,J=D.charCodeAt(Q++),J>=55296&&J<=56319&&Q<Y){if(J=D.charCodeAt(Q),(J&64512)===56320)Q++}return X}cv.default=mv;mv.code='require("ajv/dist/runtime/ucs2length").default'});var pv=T((dv)=>{Object.defineProperty(dv,"__esModule",{value:!0});var I5=x0(),qH0=p0(),KH0=lv(),zH0={message({keyword:D,schemaCode:Y}){let X=D==="maxLength"?"more":"fewer";return I5.str`must NOT have ${X} than ${Y} characters`},params:({schemaCode:D})=>I5._`{limit: ${D}}`},UH0={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:zH0,code(D){let{keyword:Y,data:X,schemaCode:Q,it:J}=D,W=Y==="maxLength"?I5.operators.GT:I5.operators.LT,$=J.opts.unicode===!1?I5._`${X}.length`:I5._`${(0,qH0.useFunc)(D.gen,KH0.default)}(${X})`;D.fail$data(I5._`${$} ${W} ${Q}`)}};dv.default=UH0});var iv=T((nv)=>{Object.defineProperty(nv,"__esModule",{value:!0});var wH0=A6(),j$=x0(),LH0={message:({schemaCode:D})=>j$.str`must match pattern "${D}"`,params:({schemaCode:D})=>j$._`{pattern: ${D}}`},MH0={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:LH0,code(D){let{data:Y,$data:X,schema:Q,schemaCode:J,it:W}=D,$=W.opts.unicodeRegExp?"u":"",G=X?j$._`(new RegExp(${J}, ${$}))`:(0,wH0.usePattern)(D,Q);D.fail$data(j$._`!${G}.test(${Y})`)}};nv.default=MH0});var av=T((rv)=>{Object.defineProperty(rv,"__esModule",{value:!0});var HX=x0(),NH0={message({keyword:D,schemaCode:Y}){let X=D==="maxProperties"?"more":"fewer";return HX.str`must NOT have ${X} than ${Y} properties`},params:({schemaCode:D})=>HX._`{limit: ${D}}`},ZH0={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:NH0,code(D){let{keyword:Y,data:X,schemaCode:Q}=D,J=Y==="maxProperties"?HX.operators.GT:HX.operators.LT;D.fail$data(HX._`Object.keys(${X}).length ${J} ${Q}`)}};rv.default=ZH0});var sv=T((ov)=>{Object.defineProperty(ov,"__esModule",{value:!0});var FX=A6(),qX=x0(),EH0=p0(),RH0={message:({params:{missingProperty:D}})=>qX.str`must have required property '${D}'`,params:({params:{missingProperty:D}})=>qX._`{missingProperty: ${D}}`},jH0={keyword:"required",type:"object",schemaType:"array",$data:!0,error:RH0,code(D){let{gen:Y,schema:X,schemaCode:Q,data:J,$data:W,it:$}=D,{opts:G}=$;if(!W&&X.length===0)return;let B=X.length>=G.loopRequired;if($.allErrors)H();else F();if(G.strictRequired){let z=D.parentSchema.properties,{definedProperties:V}=D.it;for(let w of X)if((z===null||z===void 0?void 0:z[w])===void 0&&!V.has(w)){let L=$.schemaEnv.baseId+$.errSchemaPath,O=`required property "${w}" is not defined at "${L}" (strictRequired)`;(0,EH0.checkStrictMode)($,O,$.opts.strictRequired)}}function H(){if(B||W)D.block$data(qX.nil,K);else for(let z of X)(0,FX.checkReportMissingProp)(D,z)}function F(){let z=Y.let("missing");if(B||W){let V=Y.let("valid",!0);D.block$data(V,()=>U(z,V)),D.ok(V)}else Y.if((0,FX.checkMissingProp)(D,X,z)),(0,FX.reportMissingProp)(D,z),Y.else()}function K(){Y.forOf("prop",Q,(z)=>{D.setParams({missingProperty:z}),Y.if((0,FX.noPropertyInData)(Y,J,z,G.ownProperties),()=>D.error())})}function U(z,V){D.setParams({missingProperty:z}),Y.forOf(z,Q,()=>{Y.assign(V,(0,FX.propertyInData)(Y,J,z,G.ownProperties)),Y.if((0,qX.not)(V),()=>{D.error(),Y.break()})},qX.nil)}}};ov.default=jH0});var ev=T((tv)=>{Object.defineProperty(tv,"__esModule",{value:!0});var KX=x0(),SH0={message({keyword:D,schemaCode:Y}){let X=D==="maxItems"?"more":"fewer";return KX.str`must NOT have ${X} than ${Y} items`},params:({schemaCode:D})=>KX._`{limit: ${D}}`},PH0={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:SH0,code(D){let{keyword:Y,data:X,schemaCode:Q}=D,J=Y==="maxItems"?KX.operators.GT:KX.operators.LT;D.fail$data(KX._`${X}.length ${J} ${Q}`)}};tv.default=PH0});var T$=T((Yy)=>{Object.defineProperty(Yy,"__esModule",{value:!0});var Dy=rz();Dy.code='require("ajv/dist/runtime/equal").default';Yy.default=Dy});var Qy=T((Xy)=>{Object.defineProperty(Xy,"__esModule",{value:!0});var FU=tY(),K8=x0(),xH0=p0(),_H0=T$(),bH0={message:({params:{i:D,j:Y}})=>K8.str`must NOT have duplicate items (items ## ${Y} and ${D} are identical)`,params:({params:{i:D,j:Y}})=>K8._`{i: ${D}, j: ${Y}}`},kH0={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:bH0,code(D){let{gen:Y,data:X,$data:Q,schema:J,parentSchema:W,schemaCode:$,it:G}=D;if(!Q&&!J)return;let B=Y.let("valid"),H=W.items?(0,FU.getSchemaTypes)(W.items):[];D.block$data(B,F,K8._`${$} === false`),D.ok(B);function F(){let V=Y.let("i",K8._`${X}.length`),w=Y.let("j");D.setParams({i:V,j:w}),Y.assign(B,!0),Y.if(K8._`${V} > 1`,()=>(K()?U:z)(V,w))}function K(){return H.length>0&&!H.some((V)=>V==="object"||V==="array")}function U(V,w){let L=Y.name("item"),O=(0,FU.checkDataTypes)(H,L,G.opts.strictNumbers,FU.DataType.Wrong),Z=Y.const("indices",K8._`{}`);Y.for(K8._`;${V}--;`,()=>{if(Y.let(L,K8._`${X}[${V}]`),Y.if(O,K8._`continue`),H.length>1)Y.if(K8._`typeof ${L} == "string"`,K8._`${L} += "_"`);Y.if(K8._`typeof ${Z}[${L}] == "number"`,()=>{Y.assign(w,K8._`${Z}[${L}]`),D.error(),Y.assign(B,!1).break()}).code(K8._`${Z}[${L}] = ${V}`)})}function z(V,w){let L=(0,xH0.useFunc)(Y,_H0.default),O=Y.name("outer");Y.label(O).for(K8._`;${V}--;`,()=>Y.for(K8._`${w} = ${V}; ${w}--;`,()=>Y.if(K8._`${L}(${X}[${V}], ${X}[${w}])`,()=>{D.error(),Y.assign(B,!1).break(O)})))}}};Xy.default=kH0});var Wy=T((Jy)=>{Object.defineProperty(Jy,"__esModule",{value:!0});var qU=x0(),yH0=p0(),fH0=T$(),hH0={message:"must be equal to constant",params:({schemaCode:D})=>qU._`{allowedValue: ${D}}`},gH0={keyword:"const",$data:!0,error:hH0,code(D){let{gen:Y,data:X,$data:Q,schemaCode:J,schema:W}=D;if(Q||W&&typeof W=="object")D.fail$data(qU._`!${(0,yH0.useFunc)(Y,fH0.default)}(${X}, ${J})`);else D.fail(qU._`${W} !== ${X}`)}};Jy.default=gH0});var Gy=T(($y)=>{Object.defineProperty($y,"__esModule",{value:!0});var zX=x0(),mH0=p0(),cH0=T$(),lH0={message:"must be equal to one of the allowed values",params:({schemaCode:D})=>zX._`{allowedValues: ${D}}`},dH0={keyword:"enum",schemaType:"array",$data:!0,error:lH0,code(D){let{gen:Y,data:X,$data:Q,schema:J,schemaCode:W,it:$}=D;if(!Q&&J.length===0)throw Error("enum must have non-empty array");let G=J.length>=$.opts.loopEnum,B,H=()=>B!==null&&B!==void 0?B:B=(0,mH0.useFunc)(Y,cH0.default),F;if(G||Q)F=Y.let("valid"),D.block$data(F,K);else{if(!Array.isArray(J))throw Error("ajv implementation error");let z=Y.const("vSchema",W);F=(0,zX.or)(...J.map((V,w)=>U(z,w)))}D.pass(F);function K(){Y.assign(F,!1),Y.forOf("v",W,(z)=>Y.if(zX._`${H()}(${X}, ${z})`,()=>Y.assign(F,!0).break()))}function U(z,V){let w=J[V];return typeof w==="object"&&w!==null?zX._`${H()}(${X}, ${z}[${V}])`:zX._`${X} === ${w}`}}};$y.default=dH0});var Hy=T((By)=>{Object.defineProperty(By,"__esModule",{value:!0});var nH0=hv(),iH0=uv(),rH0=pv(),aH0=iv(),oH0=av(),sH0=sv(),tH0=ev(),eH0=Qy(),D20=Wy(),Y20=Gy(),X20=[nH0.default,iH0.default,rH0.default,aH0.default,oH0.default,sH0.default,tH0.default,eH0.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},D20.default,Y20.default];By.default=X20});var zU=T((qy)=>{Object.defineProperty(qy,"__esModule",{value:!0});qy.validateAdditionalItems=void 0;var C5=x0(),KU=p0(),J20={message:({params:{len:D}})=>C5.str`must NOT have more than ${D} items`,params:({params:{len:D}})=>C5._`{limit: ${D}}`},W20={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:J20,code(D){let{parentSchema:Y,it:X}=D,{items:Q}=Y;if(!Array.isArray(Q)){(0,KU.checkStrictMode)(X,'"additionalItems" is ignored when "items" is not an array of schemas');return}Fy(D,Q)}};function Fy(D,Y){let{gen:X,schema:Q,data:J,keyword:W,it:$}=D;$.items=!0;let G=X.const("len",C5._`${J}.length`);if(Q===!1)D.setParams({len:Y.length}),D.pass(C5._`${G} <= ${Y.length}`);else if(typeof Q=="object"&&!(0,KU.alwaysValidSchema)($,Q)){let H=X.var("valid",C5._`${G} <= ${Y.length}`);X.if((0,C5.not)(H),()=>B(H)),D.ok(H)}function B(H){X.forRange("i",Y.length,G,(F)=>{if(D.subschema({keyword:W,dataProp:F,dataPropType:KU.Type.Num},H),!$.allErrors)X.if((0,C5.not)(H),()=>X.break())})}}qy.validateAdditionalItems=Fy;qy.default=W20});var UU=T((Vy)=>{Object.defineProperty(Vy,"__esModule",{value:!0});Vy.validateTuple=void 0;var zy=x0(),S$=p0(),G20=A6(),B20={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(D){let{schema:Y,it:X}=D;if(Array.isArray(Y))return Uy(D,"additionalItems",Y);if(X.items=!0,(0,S$.alwaysValidSchema)(X,Y))return;D.ok((0,G20.validateArray)(D))}};function Uy(D,Y,X=D.schema){let{gen:Q,parentSchema:J,data:W,keyword:$,it:G}=D;if(F(J),G.opts.unevaluated&&X.length&&G.items!==!0)G.items=S$.mergeEvaluated.items(Q,X.length,G.items);let B=Q.name("valid"),H=Q.const("len",zy._`${W}.length`);X.forEach((K,U)=>{if((0,S$.alwaysValidSchema)(G,K))return;Q.if(zy._`${H} > ${U}`,()=>D.subschema({keyword:$,schemaProp:U,dataProp:U},B)),D.ok(B)});function F(K){let{opts:U,errSchemaPath:z}=G,V=X.length,w=V===K.minItems&&(V===K.maxItems||K[Y]===!1);if(U.strictTuples&&!w){let L=`"${$}" is ${V}-tuple, but minItems or maxItems/${Y} are not specified or different at path "${z}"`;(0,S$.checkStrictMode)(G,L,U.strictTuples)}}}Vy.validateTuple=Uy;Vy.default=B20});var My=T((Ly)=>{Object.defineProperty(Ly,"__esModule",{value:!0});var F20=UU(),q20={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(D)=>(0,F20.validateTuple)(D,"items")};Ly.default=q20});var Zy=T((Ny)=>{Object.defineProperty(Ny,"__esModule",{value:!0});var Oy=x0(),z20=p0(),U20=A6(),V20=zU(),w20={message:({params:{len:D}})=>Oy.str`must NOT have more than ${D} items`,params:({params:{len:D}})=>Oy._`{limit: ${D}}`},L20={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:w20,code(D){let{schema:Y,parentSchema:X,it:Q}=D,{prefixItems:J}=X;if(Q.items=!0,(0,z20.alwaysValidSchema)(Q,Y))return;if(J)(0,V20.validateAdditionalItems)(D,J);else D.ok((0,U20.validateArray)(D))}};Ny.default=L20});var Ey=T((Ay)=>{Object.defineProperty(Ay,"__esModule",{value:!0});var E6=x0(),P$=p0(),O20={message:({params:{min:D,max:Y}})=>Y===void 0?E6.str`must contain at least ${D} valid item(s)`:E6.str`must contain at least ${D} and no more than ${Y} valid item(s)`,params:({params:{min:D,max:Y}})=>Y===void 0?E6._`{minContains: ${D}}`:E6._`{minContains: ${D}, maxContains: ${Y}}`},N20={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:O20,code(D){let{gen:Y,schema:X,parentSchema:Q,data:J,it:W}=D,$,G,{minContains:B,maxContains:H}=Q;if(W.opts.next)$=B===void 0?1:B,G=H;else $=1;let F=Y.const("len",E6._`${J}.length`);if(D.setParams({min:$,max:G}),G===void 0&&$===0){(0,P$.checkStrictMode)(W,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(G!==void 0&&$>G){(0,P$.checkStrictMode)(W,'"minContains" > "maxContains" is always invalid'),D.fail();return}if((0,P$.alwaysValidSchema)(W,X)){let w=E6._`${F} >= ${$}`;if(G!==void 0)w=E6._`${w} && ${F} <= ${G}`;D.pass(w);return}W.items=!0;let K=Y.name("valid");if(G===void 0&&$===1)z(K,()=>Y.if(K,()=>Y.break()));else if($===0){if(Y.let(K,!0),G!==void 0)Y.if(E6._`${J}.length > 0`,U)}else Y.let(K,!1),U();D.result(K,()=>D.reset());function U(){let w=Y.name("_valid"),L=Y.let("count",0);z(w,()=>Y.if(w,()=>V(L)))}function z(w,L){Y.forRange("i",0,F,(O)=>{D.subschema({keyword:"contains",dataProp:O,dataPropType:P$.Type.Num,compositeRule:!0},w),L()})}function V(w){if(Y.code(E6._`${w}++`),G===void 0)Y.if(E6._`${w} >= ${$}`,()=>Y.assign(K,!0).break());else if(Y.if(E6._`${w} > ${G}`,()=>Y.assign(K,!1).break()),$===1)Y.assign(K,!0);else Y.if(E6._`${w} >= ${$}`,()=>Y.assign(K,!0))}}};Ay.default=N20});var Iy=T((Ty)=>{Object.defineProperty(Ty,"__esModule",{value:!0});Ty.validateSchemaDeps=Ty.validatePropertyDeps=Ty.error=void 0;var VU=x0(),A20=p0(),UX=A6();Ty.error={message:({params:{property:D,depsCount:Y,deps:X}})=>{let Q=Y===1?"property":"properties";return VU.str`must have ${Q} ${X} when property ${D} is present`},params:({params:{property:D,depsCount:Y,deps:X,missingProperty:Q}})=>VU._`{property: ${D},
|
|
135
135
|
missingProperty: ${Q},
|
|
136
136
|
depsCount: ${Y},
|
|
137
|
-
deps: ${X}}`};var E20={keyword:"dependencies",type:"object",schemaType:"object",error:Ty.error,code(D){let[Y,X]=R20(D);Ry(D,Y),jy(D,X)}};function R20({schema:D}){let Y={},X={};for(let Q in D){if(Q==="__proto__")continue;let J=Array.isArray(D[Q])?Y:X;J[Q]=D[Q]}return[Y,X]}function Ry(D,Y=D.schema){let{gen:X,data:Q,it:J}=D;if(Object.keys(Y).length===0)return;let W=X.let("missing");for(let $ in Y){let G=Y[$];if(G.length===0)continue;let B=(0,UX.propertyInData)(X,Q,$,J.opts.ownProperties);if(D.setParams({property:$,depsCount:G.length,deps:G.join(", ")}),J.allErrors)X.if(B,()=>{for(let H of G)(0,UX.checkReportMissingProp)(D,H)});else X.if(VU._`${B} && (${(0,UX.checkMissingProp)(D,G,W)})`),(0,UX.reportMissingProp)(D,W),X.else()}}Ty.validatePropertyDeps=Ry;function jy(D,Y=D.schema){let{gen:X,data:Q,keyword:J,it:W}=D,$=X.name("valid");for(let G in Y){if((0,A20.alwaysValidSchema)(W,Y[G]))continue;X.if((0,UX.propertyInData)(X,Q,G,W.opts.ownProperties),()=>{let B=D.subschema({keyword:J,schemaProp:G},$);D.mergeValidEvaluated(B,$)},()=>X.var($,!0)),D.ok($)}}Ty.validateSchemaDeps=jy;Ty.default=E20});var _y=T((xy)=>{Object.defineProperty(xy,"__esModule",{value:!0});var Cy=x0(),S20=p0(),P20={message:"property name must be valid",params:({params:D})=>Cy._`{propertyName: ${D.propertyName}}`},I20={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:P20,code(D){let{gen:Y,schema:X,data:Q,it:J}=D;if((0,S20.alwaysValidSchema)(J,X))return;let W=Y.name("valid");Y.forIn("key",Q,($)=>{D.setParams({propertyName:$}),D.subschema({keyword:"propertyNames",data:$,dataTypes:["string"],propertyName:$,compositeRule:!0},W),Y.if((0,Cy.not)(W),()=>{if(D.error(!0),!J.allErrors)Y.break()})}),D.ok(W)}};xy.default=I20});var wU=T((by)=>{Object.defineProperty(by,"__esModule",{value:!0});var I$=A6(),d6=x0(),x20=I9(),C$=p0(),_20={message:"must NOT have additional properties",params:({params:D})=>d6._`{additionalProperty: ${D.additionalProperty}}`},b20={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:_20,code(D){let{gen:Y,schema:X,parentSchema:Q,data:J,errsCount:W,it:$}=D;if(!W)throw Error("ajv implementation error");let{allErrors:G,opts:B}=$;if($.props=!0,B.removeAdditional!=="all"&&(0,C$.alwaysValidSchema)($,X))return;let H=(0,I$.allSchemaProperties)(Q.properties),F=(0,I$.allSchemaProperties)(Q.patternProperties);K(),D.ok(d6._`${W} === ${x20.default.errors}`);function K(){Y.forIn("key",J,(L)=>{if(!H.length&&!F.length)V(L);else Y.if(U(L),()=>V(L))})}function U(L){let O;if(H.length>8){let Z=(0,C$.schemaRefOrVal)($,Q.properties,"properties");O=(0,I$.isOwnProperty)(Y,Z,L)}else if(H.length)O=(0,d6.or)(...H.map((Z)=>d6._`${L} === ${Z}`));else O=d6.nil;if(F.length)O=(0,d6.or)(O,...F.map((Z)=>d6._`${(0,I$.usePattern)(D,Z)}.test(${L})`));return(0,d6.not)(O)}function z(L){Y.code(d6._`delete ${J}[${L}]`)}function V(L){if(B.removeAdditional==="all"||B.removeAdditional&&X===!1){z(L);return}if(X===!1){if(D.setParams({additionalProperty:L}),D.error(),!G)Y.break();return}if(typeof X=="object"&&!(0,C$.alwaysValidSchema)($,X)){let O=Y.name("valid");if(B.removeAdditional==="failing")w(L,O,!1),Y.if((0,d6.not)(O),()=>{D.reset(),z(L)});else if(w(L,O),!G)Y.if((0,d6.not)(O),()=>Y.break())}}function w(L,O,Z){let M={keyword:"additionalProperties",dataProp:L,dataPropType:C$.Type.Str};if(Z===!1)Object.assign(M,{compositeRule:!0,createErrors:!1,allErrors:!1});D.subschema(M,O)}}};by.default=b20});var fy=T((yy)=>{Object.defineProperty(yy,"__esModule",{value:!0});var v20=XX(),ky=A6(),LU=p0(),vy=wU(),y20={keyword:"properties",type:"object",schemaType:"object",code(D){let{gen:Y,schema:X,parentSchema:Q,data:J,it:W}=D;if(W.opts.removeAdditional==="all"&&Q.additionalProperties===void 0)vy.default.code(new v20.KeywordCxt(W,vy.default,"additionalProperties"));let $=(0,ky.allSchemaProperties)(X);for(let K of $)W.definedProperties.add(K);if(W.opts.unevaluated&&$.length&&W.props!==!0)W.props=LU.mergeEvaluated.props(Y,(0,LU.toHash)($),W.props);let G=$.filter((K)=>!(0,LU.alwaysValidSchema)(W,X[K]));if(G.length===0)return;let B=Y.name("valid");for(let K of G){if(H(K))F(K);else{if(Y.if((0,ky.propertyInData)(Y,J,K,W.opts.ownProperties)),F(K),!W.allErrors)Y.else().var(B,!0);Y.endIf()}D.it.definedProperties.add(K),D.ok(B)}function H(K){return W.opts.useDefaults&&!W.compositeRule&&X[K].default!==void 0}function F(K){D.subschema({keyword:"properties",schemaProp:K,dataProp:K},B)}}};yy.default=y20});var cy=T((my)=>{Object.defineProperty(my,"__esModule",{value:!0});var hy=A6(),x$=x0(),gy=p0(),uy=p0(),h20={keyword:"patternProperties",type:"object",schemaType:"object",code(D){let{gen:Y,schema:X,data:Q,parentSchema:J,it:W}=D,{opts:$}=W,G=(0,hy.allSchemaProperties)(X),B=G.filter((w)=>(0,gy.alwaysValidSchema)(W,X[w]));if(G.length===0||B.length===G.length&&(!W.opts.unevaluated||W.props===!0))return;let H=$.strictSchema&&!$.allowMatchingProperties&&J.properties,F=Y.name("valid");if(W.props!==!0&&!(W.props instanceof x$.Name))W.props=(0,uy.evaluatedPropsToName)(Y,W.props);let{props:K}=W;U();function U(){for(let w of G){if(H)z(w);if(W.allErrors)V(w);else Y.var(F,!0),V(w),Y.if(F)}}function z(w){for(let L in H)if(new RegExp(w).test(L))(0,gy.checkStrictMode)(W,`property ${L} matches pattern ${w} (use allowMatchingProperties)`)}function V(w){Y.forIn("key",Q,(L)=>{Y.if(x$._`${(0,hy.usePattern)(D,w)}.test(${L})`,()=>{let O=B.includes(w);if(!O)D.subschema({keyword:"patternProperties",schemaProp:w,dataProp:L,dataPropType:uy.Type.Str},F);if(W.opts.unevaluated&&K!==!0)Y.assign(x$._`${K}[${L}]`,!0);else if(!O&&!W.allErrors)Y.if((0,x$.not)(F),()=>Y.break())})})}}};my.default=h20});var dy=T((ly)=>{Object.defineProperty(ly,"__esModule",{value:!0});var u20=p0(),m20={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(D){let{gen:Y,schema:X,it:Q}=D;if((0,u20.alwaysValidSchema)(Q,X)){D.fail();return}let J=Y.name("valid");D.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},J),D.failResult(J,()=>D.reset(),()=>D.error())},error:{message:"must NOT be valid"}};ly.default=m20});var ny=T((py)=>{Object.defineProperty(py,"__esModule",{value:!0});var l20=A6(),d20={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:l20.validateUnion,error:{message:"must match a schema in anyOf"}};py.default=d20});var ry=T((iy)=>{Object.defineProperty(iy,"__esModule",{value:!0});var _$=x0(),n20=p0(),i20={message:"must match exactly one schema in oneOf",params:({params:D})=>_$._`{passingSchemas: ${D.passing}}`},r20={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:i20,code(D){let{gen:Y,schema:X,parentSchema:Q,it:J}=D;if(!Array.isArray(X))throw Error("ajv implementation error");if(J.opts.discriminator&&Q.discriminator)return;let W=X,$=Y.let("valid",!1),G=Y.let("passing",null),B=Y.name("_valid");D.setParams({passing:G}),Y.block(H),D.result($,()=>D.reset(),()=>D.error(!0));function H(){W.forEach((F,K)=>{let U;if((0,n20.alwaysValidSchema)(J,F))Y.var(B,!0);else U=D.subschema({keyword:"oneOf",schemaProp:K,compositeRule:!0},B);if(K>0)Y.if(_$._`${B} && ${$}`).assign($,!1).assign(G,_$._`[${G}, ${K}]`).else();Y.if(B,()=>{if(Y.assign($,!0),Y.assign(G,K),U)D.mergeEvaluated(U,_$.Name)})})}}};iy.default=r20});var oy=T((ay)=>{Object.defineProperty(ay,"__esModule",{value:!0});var o20=p0(),s20={keyword:"allOf",schemaType:"array",code(D){let{gen:Y,schema:X,it:Q}=D;if(!Array.isArray(X))throw Error("ajv implementation error");let J=Y.name("valid");X.forEach((W,$)=>{if((0,o20.alwaysValidSchema)(Q,W))return;let G=D.subschema({keyword:"allOf",schemaProp:$},J);D.ok(J),D.mergeEvaluated(G)})}};ay.default=s20});var Df=T((ey)=>{Object.defineProperty(ey,"__esModule",{value:!0});var b$=x0(),ty=p0(),e20={message:({params:D})=>b$.str`must match "${D.ifClause}" schema`,params:({params:D})=>b$._`{failingKeyword: ${D.ifClause}}`},DF0={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:e20,code(D){let{gen:Y,parentSchema:X,it:Q}=D;if(X.then===void 0&&X.else===void 0)(0,ty.checkStrictMode)(Q,'"if" without "then" and "else" is ignored');let J=sy(Q,"then"),W=sy(Q,"else");if(!J&&!W)return;let $=Y.let("valid",!0),G=Y.name("_valid");if(B(),D.reset(),J&&W){let F=Y.let("ifClause");D.setParams({ifClause:F}),Y.if(G,H("then",F),H("else",F))}else if(J)Y.if(G,H("then"));else Y.if((0,b$.not)(G),H("else"));D.pass($,()=>D.error(!0));function B(){let F=D.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},G);D.mergeEvaluated(F)}function H(F,K){return()=>{let U=D.subschema({keyword:F},G);if(Y.assign($,G),D.mergeValidEvaluated(U,$),K)Y.assign(K,b$._`${F}`);else D.setParams({ifClause:F})}}}};function sy(D,Y){let X=D.schema[Y];return X!==void 0&&!(0,ty.alwaysValidSchema)(D,X)}ey.default=DF0});var Xf=T((Yf)=>{Object.defineProperty(Yf,"__esModule",{value:!0});var XF0=p0(),QF0={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:D,parentSchema:Y,it:X}){if(Y.if===void 0)(0,XF0.checkStrictMode)(X,`"${D}" without "if" is ignored`)}};Yf.default=QF0});var Jf=T((Qf)=>{Object.defineProperty(Qf,"__esModule",{value:!0});var WF0=zU(),$F0=My(),GF0=UU(),BF0=Zy(),HF0=Ey(),FF0=Iy(),qF0=_y(),KF0=wU(),zF0=fy(),UF0=cy(),VF0=dy(),wF0=ny(),LF0=ry(),MF0=oy(),OF0=Df(),NF0=Xf();function ZF0(D=!1){let Y=[VF0.default,wF0.default,LF0.default,MF0.default,OF0.default,NF0.default,qF0.default,KF0.default,FF0.default,zF0.default,UF0.default];if(D)Y.push($F0.default,BF0.default);else Y.push(WF0.default,GF0.default);return Y.push(HF0.default),Y}Qf.default=ZF0});var $f=T((Wf)=>{Object.defineProperty(Wf,"__esModule",{value:!0});var m1=x0(),EF0={message:({schemaCode:D})=>m1.str`must match format "${D}"`,params:({schemaCode:D})=>m1._`{format: ${D}}`},RF0={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:EF0,code(D,Y){let{gen:X,data:Q,$data:J,schema:W,schemaCode:$,it:G}=D,{opts:B,errSchemaPath:H,schemaEnv:F,self:K}=G;if(!B.validateFormats)return;if(J)U();else z();function U(){let V=X.scopeValue("formats",{ref:K.formats,code:B.code.formats}),w=X.const("fDef",m1._`${V}[${$}]`),L=X.let("fType"),O=X.let("format");X.if(m1._`typeof ${w} == "object" && !(${w} instanceof RegExp)`,()=>X.assign(L,m1._`${w}.type || "string"`).assign(O,m1._`${w}.validate`),()=>X.assign(L,m1._`"string"`).assign(O,w)),D.fail$data((0,m1.or)(Z(),M()));function Z(){if(B.strictSchema===!1)return m1.nil;return m1._`${$} && !${O}`}function M(){let E=F.$async?m1._`(${w}.async ? await ${O}(${Q}) : ${O}(${Q}))`:m1._`${O}(${Q})`,j=m1._`(typeof ${O} == "function" ? ${E} : ${O}.test(${Q}))`;return m1._`${O} && ${O} !== true && ${L} === ${Y} && !${j}`}}function z(){let V=K.formats[W];if(!V){Z();return}if(V===!0)return;let[w,L,O]=M(V);if(w===Y)D.pass(E());function Z(){if(B.strictSchema===!1){K.logger.warn(j());return}throw Error(j());function j(){return`unknown format "${W}" ignored in schema at path "${H}"`}}function M(j){let I=j instanceof RegExp?(0,m1.regexpCode)(j):B.code.formats?m1._`${B.code.formats}${(0,m1.getProperty)(W)}`:void 0,_=X.scopeValue("formats",{key:W,ref:j,code:I});if(typeof j=="object"&&!(j instanceof RegExp))return[j.type||"string",j.validate,m1._`${_}.validate`];return["string",j,_]}function E(){if(typeof V=="object"&&!(V instanceof RegExp)&&V.async){if(!F.$async)throw Error("async format in sync schema");return m1._`await ${O}(${Q})`}return typeof L=="function"?m1._`${O}(${Q})`:m1._`${O}.test(${Q})`}}}};Wf.default=RF0});var Bf=T((Gf)=>{Object.defineProperty(Gf,"__esModule",{value:!0});var TF0=$f(),SF0=[TF0.default];Gf.default=SF0});var qf=T((Hf)=>{Object.defineProperty(Hf,"__esModule",{value:!0});Hf.contentVocabulary=Hf.metadataVocabulary=void 0;Hf.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];Hf.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var Uf=T((zf)=>{Object.defineProperty(zf,"__esModule",{value:!0});var CF0=yv(),xF0=Hy(),_F0=Jf(),bF0=Bf(),Kf=qf(),kF0=[CF0.default,xF0.default,(0,_F0.default)(),bF0.default,Kf.metadataVocabulary,Kf.contentVocabulary];zf.default=kF0});var Mf=T((wf)=>{Object.defineProperty(wf,"__esModule",{value:!0});wf.DiscrError=void 0;var Vf;(function(D){D.Tag="tag",D.Mapping="mapping"})(Vf||(wf.DiscrError=Vf={}))});var Zf=T((Nf)=>{Object.defineProperty(Nf,"__esModule",{value:!0});var x3=x0(),MU=Mf(),Of=U$(),yF0=QX(),fF0=p0(),hF0={message:({params:{discrError:D,tagName:Y}})=>D===MU.DiscrError.Tag?`tag "${Y}" must be string`:`value of tag "${Y}" must be in oneOf`,params:({params:{discrError:D,tag:Y,tagName:X}})=>x3._`{error: ${D}, tag: ${X}, tagValue: ${Y}}`},gF0={keyword:"discriminator",type:"object",schemaType:"object",error:hF0,code(D){let{gen:Y,data:X,schema:Q,parentSchema:J,it:W}=D,{oneOf:$}=J;if(!W.opts.discriminator)throw Error("discriminator: requires discriminator option");let G=Q.propertyName;if(typeof G!="string")throw Error("discriminator: requires propertyName");if(Q.mapping)throw Error("discriminator: mapping is not supported");if(!$)throw Error("discriminator: requires oneOf keyword");let B=Y.let("valid",!1),H=Y.const("tag",x3._`${X}${(0,x3.getProperty)(G)}`);Y.if(x3._`typeof ${H} == "string"`,()=>F(),()=>D.error(!1,{discrError:MU.DiscrError.Tag,tag:H,tagName:G})),D.ok(B);function F(){let z=U();Y.if(!1);for(let V in z)Y.elseIf(x3._`${H} === ${V}`),Y.assign(B,K(z[V]));Y.else(),D.error(!1,{discrError:MU.DiscrError.Mapping,tag:H,tagName:G}),Y.endIf()}function K(z){let V=Y.name("valid"),w=D.subschema({keyword:"oneOf",schemaProp:z},V);return D.mergeEvaluated(w,x3.Name),V}function U(){var z;let V={},w=O(J),L=!0;for(let E=0;E<$.length;E++){let j=$[E];if((j===null||j===void 0?void 0:j.$ref)&&!(0,fF0.schemaHasRulesButRef)(j,W.self.RULES)){let _=j.$ref;if(j=Of.resolveRef.call(W.self,W.schemaEnv.root,W.baseId,_),j instanceof Of.SchemaEnv)j=j.schema;if(j===void 0)throw new yF0.default(W.opts.uriResolver,W.baseId,_)}let I=(z=j===null||j===void 0?void 0:j.properties)===null||z===void 0?void 0:z[G];if(typeof I!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${G}"`);L=L&&(w||O(j)),Z(I,E)}if(!L)throw Error(`discriminator: "${G}" must be required`);return V;function O({required:E}){return Array.isArray(E)&&E.includes(G)}function Z(E,j){if(E.const)M(E.const,j);else if(E.enum)for(let I of E.enum)M(I,j);else throw Error(`discriminator: "properties/${G}" must have "const" or "enum"`)}function M(E,j){if(typeof E!="string"||E in V)throw Error(`discriminator: "${G}" values must be unique strings`);V[E]=j}}}};Nf.default=gF0});var Af=T((cC0,mF0)=>{mF0.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var NU=T((o8,OU)=>{Object.defineProperty(o8,"__esModule",{value:!0});o8.MissingRefError=o8.ValidationError=o8.CodeGen=o8.Name=o8.nil=o8.stringify=o8.str=o8._=o8.KeywordCxt=o8.Ajv=void 0;var cF0=Tv(),lF0=Uf(),dF0=Zf(),Ef=Af(),pF0=["/properties"],k$="http://json-schema.org/draft-07/schema";class VX extends cF0.default{_addVocabularies(){if(super._addVocabularies(),lF0.default.forEach((D)=>this.addVocabulary(D)),this.opts.discriminator)this.addKeyword(dF0.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let D=this.opts.$data?this.$dataMetaSchema(Ef,pF0):Ef;this.addMetaSchema(D,k$,!1),this.refs["http://json-schema.org/schema"]=k$}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(k$)?k$:void 0)}}o8.Ajv=VX;OU.exports=o8=VX;OU.exports.Ajv=VX;Object.defineProperty(o8,"__esModule",{value:!0});o8.default=VX;var nF0=XX();Object.defineProperty(o8,"KeywordCxt",{enumerable:!0,get:function(){return nF0.KeywordCxt}});var _3=x0();Object.defineProperty(o8,"_",{enumerable:!0,get:function(){return _3._}});Object.defineProperty(o8,"str",{enumerable:!0,get:function(){return _3.str}});Object.defineProperty(o8,"stringify",{enumerable:!0,get:function(){return _3.stringify}});Object.defineProperty(o8,"nil",{enumerable:!0,get:function(){return _3.nil}});Object.defineProperty(o8,"Name",{enumerable:!0,get:function(){return _3.Name}});Object.defineProperty(o8,"CodeGen",{enumerable:!0,get:function(){return _3.CodeGen}});var iF0=K$();Object.defineProperty(o8,"ValidationError",{enumerable:!0,get:function(){return iF0.default}});var rF0=QX();Object.defineProperty(o8,"MissingRefError",{enumerable:!0,get:function(){return rF0.default}})});var bf=T((xf)=>{Object.defineProperty(xf,"__esModule",{value:!0});xf.formatNames=xf.fastFormats=xf.fullFormats=void 0;function B9(D,Y){return{validate:D,compare:Y}}xf.fullFormats={date:B9(Sf,RU),time:B9(AU(!0),jU),"date-time":B9(Rf(!0),If),"iso-time":B9(AU(),Pf),"iso-date-time":B9(Rf(),Cf),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:Xq0,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:Hq0,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:Qq0,int32:{type:"number",validate:$q0},int64:{type:"number",validate:Gq0},float:{type:"number",validate:Tf},double:{type:"number",validate:Tf},password:!0,binary:!0};xf.fastFormats={...xf.fullFormats,date:B9(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,RU),time:B9(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,jU),"date-time":B9(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,If),"iso-time":B9(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,Pf),"iso-date-time":B9(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,Cf),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};xf.formatNames=Object.keys(xf.fullFormats);function sF0(D){return D%4===0&&(D%100!==0||D%400===0)}var tF0=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,eF0=[0,31,28,31,30,31,30,31,31,30,31,30,31];function Sf(D){let Y=tF0.exec(D);if(!Y)return!1;let X=+Y[1],Q=+Y[2],J=+Y[3];return Q>=1&&Q<=12&&J>=1&&J<=(Q===2&&sF0(X)?29:eF0[Q])}function RU(D,Y){if(!(D&&Y))return;if(D>Y)return 1;if(D<Y)return-1;return 0}var ZU=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function AU(D){return function(X){let Q=ZU.exec(X);if(!Q)return!1;let J=+Q[1],W=+Q[2],$=+Q[3],G=Q[4],B=Q[5]==="-"?-1:1,H=+(Q[6]||0),F=+(Q[7]||0);if(H>23||F>59||D&&!G)return!1;if(J<=23&&W<=59&&$<60)return!0;let K=W-F*B,U=J-H*B-(K<0?1:0);return(U===23||U===-1)&&(K===59||K===-1)&&$<61}}function jU(D,Y){if(!(D&&Y))return;let X=new Date("2020-01-01T"+D).valueOf(),Q=new Date("2020-01-01T"+Y).valueOf();if(!(X&&Q))return;return X-Q}function Pf(D,Y){if(!(D&&Y))return;let X=ZU.exec(D),Q=ZU.exec(Y);if(!(X&&Q))return;if(D=X[1]+X[2]+X[3],Y=Q[1]+Q[2]+Q[3],D>Y)return 1;if(D<Y)return-1;return 0}var EU=/t|\s/i;function Rf(D){let Y=AU(D);return function(Q){let J=Q.split(EU);return J.length===2&&Sf(J[0])&&Y(J[1])}}function If(D,Y){if(!(D&&Y))return;let X=new Date(D).valueOf(),Q=new Date(Y).valueOf();if(!(X&&Q))return;return X-Q}function Cf(D,Y){if(!(D&&Y))return;let[X,Q]=D.split(EU),[J,W]=Y.split(EU),$=RU(X,J);if($===void 0)return;return $||jU(Q,W)}var Dq0=/\/|:/,Yq0=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function Xq0(D){return Dq0.test(D)&&Yq0.test(D)}var jf=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function Qq0(D){return jf.lastIndex=0,jf.test(D)}var Jq0=-2147483648,Wq0=2147483647;function $q0(D){return Number.isInteger(D)&&D<=Wq0&&D>=Jq0}function Gq0(D){return Number.isInteger(D)}function Tf(){return!0}var Bq0=/[^\\]\\Z/;function Hq0(D){if(Bq0.test(D))return!1;try{return new RegExp(D),!0}catch(Y){return!1}}});var vf=T((kf)=>{Object.defineProperty(kf,"__esModule",{value:!0});kf.formatLimitDefinition=void 0;var qq0=NU(),p6=x0(),TD=p6.operators,v$={formatMaximum:{okStr:"<=",ok:TD.LTE,fail:TD.GT},formatMinimum:{okStr:">=",ok:TD.GTE,fail:TD.LT},formatExclusiveMaximum:{okStr:"<",ok:TD.LT,fail:TD.GTE},formatExclusiveMinimum:{okStr:">",ok:TD.GT,fail:TD.LTE}},Kq0={message:({keyword:D,schemaCode:Y})=>p6.str`should be ${v$[D].okStr} ${Y}`,params:({keyword:D,schemaCode:Y})=>p6._`{comparison: ${v$[D].okStr}, limit: ${Y}}`};kf.formatLimitDefinition={keyword:Object.keys(v$),type:"string",schemaType:"string",$data:!0,error:Kq0,code(D){let{gen:Y,data:X,schemaCode:Q,keyword:J,it:W}=D,{opts:$,self:G}=W;if(!$.validateFormats)return;let B=new qq0.KeywordCxt(W,G.RULES.all.format.definition,"format");if(B.$data)H();else F();function H(){let U=Y.scopeValue("formats",{ref:G.formats,code:$.code.formats}),z=Y.const("fmt",p6._`${U}[${B.schemaCode}]`);D.fail$data((0,p6.or)(p6._`typeof ${z} != "object"`,p6._`${z} instanceof RegExp`,p6._`typeof ${z}.compare != "function"`,K(z)))}function F(){let U=B.schema,z=G.formats[U];if(!z||z===!0)return;if(typeof z!="object"||z instanceof RegExp||typeof z.compare!="function")throw Error(`"${J}": format "${U}" does not define "compare" function`);let V=Y.scopeValue("formats",{key:U,ref:z,code:$.code.formats?p6._`${$.code.formats}${(0,p6.getProperty)(U)}`:void 0});D.fail$data(K(V))}function K(U){return p6._`${U}.compare(${X}, ${Q}) ${v$[J].fail} 0`}},dependencies:["format"]};var zq0=(D)=>{return D.addKeyword(kf.formatLimitDefinition),D};kf.default=zq0});var gf=T((wX,hf)=>{Object.defineProperty(wX,"__esModule",{value:!0});var b3=bf(),Vq0=vf(),PU=x0(),yf=new PU.Name("fullFormats"),wq0=new PU.Name("fastFormats"),IU=(D,Y={keywords:!0})=>{if(Array.isArray(Y))return ff(D,Y,b3.fullFormats,yf),D;let[X,Q]=Y.mode==="fast"?[b3.fastFormats,wq0]:[b3.fullFormats,yf],J=Y.formats||b3.formatNames;if(ff(D,J,X,Q),Y.keywords)(0,Vq0.default)(D);return D};IU.get=(D,Y="full")=>{let Q=(Y==="fast"?b3.fastFormats:b3.fullFormats)[D];if(!Q)throw Error(`Unknown format "${D}"`);return Q};function ff(D,Y,X,Q){var J,W;(J=(W=D.opts.code).formats)!==null&&J!==void 0||(W.formats=PU._`require("ajv-formats/dist/formats").${Q}`);for(let $ of Y)D.addFormat($,X[$])}hf.exports=wX=IU;Object.defineProperty(wX,"__esModule",{value:!0});wX.default=IU});import{exit as iU}from"node:process";var UV=a1(zV(),1),{program:l1,createCommand:gq0,createArgument:uq0,createOption:mq0,CommanderError:cq0,InvalidArgumentError:lq0,InvalidOptionArgumentError:dq0,Command:pq0,Argument:nq0,Option:iq0,Help:rq0}=UV.default;var f8={name:"@capgo/cli",type:"module",version:"7.71.10",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",require:"./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:checksum":"bun test/test-checksum-algorithm.mjs","test:version-detection":"node test/test-get-installed-version.mjs","test:version-detection:setup":"./test/fixtures/setup-test-projects.sh",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:checksum && bun run test:version-detection"},devDependencies:{"@antfu/eslint-config":"^6.1.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":"^0.11.0","@modelcontextprotocol/sdk":"^1.0.0","@sauber/table":"npm:@jsr/sauber__table","@std/semver":"npm:@jsr/std__semver@1.0.6","@supabase/supabase-js":"^2.79.0","@types/adm-zip":"^0.5.7","@types/node":"^24","@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":"3.1.3",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",zod:"^3.24.0"}};import{existsSync as BS,readFileSync as HS}from"node:fs";var z8=a1(t$(),1),f3=a1(DG(),1);import{stdin as SV,stdout as PV}from"node:process";import*as v9 from"node:readline";import MV from"node:readline";import{Writable as Xg}from"node:stream";function Qg({onlyFirst:D=!1}={}){let Y=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(Y,D?void 0:"g")}var Jg=Qg();function IV(D){if(typeof D!="string")throw TypeError(`Expected a \`string\`, got \`${typeof D}\``);return D.replace(Jg,"")}function CV(D){return D&&D.__esModule&&Object.prototype.hasOwnProperty.call(D,"default")?D.default:D}var xV={exports:{}};(function(D){var Y={};D.exports=Y,Y.eastAsianWidth=function(Q){var J=Q.charCodeAt(0),W=Q.length==2?Q.charCodeAt(1):0,$=J;return 55296<=J&&J<=56319&&56320<=W&&W<=57343&&(J&=1023,W&=1023,$=J<<10|W,$+=65536),$==12288||65281<=$&&$<=65376||65504<=$&&$<=65510?"F":$==8361||65377<=$&&$<=65470||65474<=$&&$<=65479||65482<=$&&$<=65487||65490<=$&&$<=65495||65498<=$&&$<=65500||65512<=$&&$<=65518?"H":4352<=$&&$<=4447||4515<=$&&$<=4519||4602<=$&&$<=4607||9001<=$&&$<=9002||11904<=$&&$<=11929||11931<=$&&$<=12019||12032<=$&&$<=12245||12272<=$&&$<=12283||12289<=$&&$<=12350||12353<=$&&$<=12438||12441<=$&&$<=12543||12549<=$&&$<=12589||12593<=$&&$<=12686||12688<=$&&$<=12730||12736<=$&&$<=12771||12784<=$&&$<=12830||12832<=$&&$<=12871||12880<=$&&$<=13054||13056<=$&&$<=19903||19968<=$&&$<=42124||42128<=$&&$<=42182||43360<=$&&$<=43388||44032<=$&&$<=55203||55216<=$&&$<=55238||55243<=$&&$<=55291||63744<=$&&$<=64255||65040<=$&&$<=65049||65072<=$&&$<=65106||65108<=$&&$<=65126||65128<=$&&$<=65131||110592<=$&&$<=110593||127488<=$&&$<=127490||127504<=$&&$<=127546||127552<=$&&$<=127560||127568<=$&&$<=127569||131072<=$&&$<=194367||177984<=$&&$<=196605||196608<=$&&$<=262141?"W":32<=$&&$<=126||162<=$&&$<=163||165<=$&&$<=166||$==172||$==175||10214<=$&&$<=10221||10629<=$&&$<=10630?"Na":$==161||$==164||167<=$&&$<=168||$==170||173<=$&&$<=174||176<=$&&$<=180||182<=$&&$<=186||188<=$&&$<=191||$==198||$==208||215<=$&&$<=216||222<=$&&$<=225||$==230||232<=$&&$<=234||236<=$&&$<=237||$==240||242<=$&&$<=243||247<=$&&$<=250||$==252||$==254||$==257||$==273||$==275||$==283||294<=$&&$<=295||$==299||305<=$&&$<=307||$==312||319<=$&&$<=322||$==324||328<=$&&$<=331||$==333||338<=$&&$<=339||358<=$&&$<=359||$==363||$==462||$==464||$==466||$==468||$==470||$==472||$==474||$==476||$==593||$==609||$==708||$==711||713<=$&&$<=715||$==717||$==720||728<=$&&$<=731||$==733||$==735||768<=$&&$<=879||913<=$&&$<=929||931<=$&&$<=937||945<=$&&$<=961||963<=$&&$<=969||$==1025||1040<=$&&$<=1103||$==1105||$==8208||8211<=$&&$<=8214||8216<=$&&$<=8217||8220<=$&&$<=8221||8224<=$&&$<=8226||8228<=$&&$<=8231||$==8240||8242<=$&&$<=8243||$==8245||$==8251||$==8254||$==8308||$==8319||8321<=$&&$<=8324||$==8364||$==8451||$==8453||$==8457||$==8467||$==8470||8481<=$&&$<=8482||$==8486||$==8491||8531<=$&&$<=8532||8539<=$&&$<=8542||8544<=$&&$<=8555||8560<=$&&$<=8569||$==8585||8592<=$&&$<=8601||8632<=$&&$<=8633||$==8658||$==8660||$==8679||$==8704||8706<=$&&$<=8707||8711<=$&&$<=8712||$==8715||$==8719||$==8721||$==8725||$==8730||8733<=$&&$<=8736||$==8739||$==8741||8743<=$&&$<=8748||$==8750||8756<=$&&$<=8759||8764<=$&&$<=8765||$==8776||$==8780||$==8786||8800<=$&&$<=8801||8804<=$&&$<=8807||8810<=$&&$<=8811||8814<=$&&$<=8815||8834<=$&&$<=8835||8838<=$&&$<=8839||$==8853||$==8857||$==8869||$==8895||$==8978||9312<=$&&$<=9449||9451<=$&&$<=9547||9552<=$&&$<=9587||9600<=$&&$<=9615||9618<=$&&$<=9621||9632<=$&&$<=9633||9635<=$&&$<=9641||9650<=$&&$<=9651||9654<=$&&$<=9655||9660<=$&&$<=9661||9664<=$&&$<=9665||9670<=$&&$<=9672||$==9675||9678<=$&&$<=9681||9698<=$&&$<=9701||$==9711||9733<=$&&$<=9734||$==9737||9742<=$&&$<=9743||9748<=$&&$<=9749||$==9756||$==9758||$==9792||$==9794||9824<=$&&$<=9825||9827<=$&&$<=9829||9831<=$&&$<=9834||9836<=$&&$<=9837||$==9839||9886<=$&&$<=9887||9918<=$&&$<=9919||9924<=$&&$<=9933||9935<=$&&$<=9953||$==9955||9960<=$&&$<=9983||$==10045||$==10071||10102<=$&&$<=10111||11093<=$&&$<=11097||12872<=$&&$<=12879||57344<=$&&$<=63743||65024<=$&&$<=65039||$==65533||127232<=$&&$<=127242||127248<=$&&$<=127277||127280<=$&&$<=127337||127344<=$&&$<=127386||917760<=$&&$<=917999||983040<=$&&$<=1048573||1048576<=$&&$<=1114109?"A":"N"},Y.characterLength=function(Q){var J=this.eastAsianWidth(Q);return J=="F"||J=="W"||J=="A"?2:1};function X(Q){return Q.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}Y.length=function(Q){for(var J=X(Q),W=0,$=0;$<J.length;$++)W=W+this.characterLength(J[$]);return W},Y.slice=function(Q,J,W){textLen=Y.length(Q),J=J||0,W=W||1,J<0&&(J=textLen+J),W<0&&(W=textLen+W);for(var $="",G=0,B=X(Q),H=0;H<B.length;H++){var F=B[H],K=Y.length(F);if(G>=J-(K==2?1:0))if(G+K<=W)$+=F;else break;G+=K}return $}})(xV);var Wg=xV.exports,$g=CV(Wg),Gg=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},Bg=CV(Gg);function h3(D,Y={}){if(typeof D!="string"||D.length===0||(Y={ambiguousIsNarrow:!0,...Y},D=IV(D),D.length===0))return 0;D=D.replace(Bg()," ");let X=Y.ambiguousIsNarrow?1:2,Q=0;for(let J of D){let W=J.codePointAt(0);if(W<=31||W>=127&&W<=159||W>=768&&W<=879)continue;switch($g.eastAsianWidth(J)){case"F":case"W":Q+=2;break;case"A":Q+=X;break;default:Q+=1}}return Q}var YG=10,OV=(D=0)=>(Y)=>`\x1B[${Y+D}m`,NV=(D=0)=>(Y)=>`\x1B[${38+D};5;${Y}m`,ZV=(D=0)=>(Y,X,Q)=>`\x1B[${38+D};2;${Y};${X};${Q}m`,V1={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(V1.modifier);var Hg=Object.keys(V1.color),Fg=Object.keys(V1.bgColor);[...Hg,...Fg];function qg(){let D=new Map;for(let[Y,X]of Object.entries(V1)){for(let[Q,J]of Object.entries(X))V1[Q]={open:`\x1B[${J[0]}m`,close:`\x1B[${J[1]}m`},X[Q]=V1[Q],D.set(J[0],J[1]);Object.defineProperty(V1,Y,{value:X,enumerable:!1})}return Object.defineProperty(V1,"codes",{value:D,enumerable:!1}),V1.color.close="\x1B[39m",V1.bgColor.close="\x1B[49m",V1.color.ansi=OV(),V1.color.ansi256=NV(),V1.color.ansi16m=ZV(),V1.bgColor.ansi=OV(YG),V1.bgColor.ansi256=NV(YG),V1.bgColor.ansi16m=ZV(YG),Object.defineProperties(V1,{rgbToAnsi256:{value:(Y,X,Q)=>Y===X&&X===Q?Y<8?16:Y>248?231:Math.round((Y-8)/247*24)+232:16+36*Math.round(Y/255*5)+6*Math.round(X/255*5)+Math.round(Q/255*5),enumerable:!1},hexToRgb:{value:(Y)=>{let X=/[a-f\d]{6}|[a-f\d]{3}/i.exec(Y.toString(16));if(!X)return[0,0,0];let[Q]=X;Q.length===3&&(Q=[...Q].map((W)=>W+W).join(""));let J=Number.parseInt(Q,16);return[J>>16&255,J>>8&255,J&255]},enumerable:!1},hexToAnsi256:{value:(Y)=>V1.rgbToAnsi256(...V1.hexToRgb(Y)),enumerable:!1},ansi256ToAnsi:{value:(Y)=>{if(Y<8)return 30+Y;if(Y<16)return 90+(Y-8);let X,Q,J;if(Y>=232)X=((Y-232)*10+8)/255,Q=X,J=X;else{Y-=16;let G=Y%36;X=Math.floor(Y/36)/5,Q=Math.floor(G/6)/5,J=G%6/5}let W=Math.max(X,Q,J)*2;if(W===0)return 30;let $=30+(Math.round(J)<<2|Math.round(Q)<<1|Math.round(X));return W===2&&($+=60),$},enumerable:!1},rgbToAnsi:{value:(Y,X,Q)=>V1.ansi256ToAnsi(V1.rgbToAnsi256(Y,X,Q)),enumerable:!1},hexToAnsi:{value:(Y)=>V1.ansi256ToAnsi(V1.hexToAnsi256(Y)),enumerable:!1}}),V1}var Kg=qg(),SX=new Set(["\x1B",""]),zg=39,JG="\x07",_V="[",Ug="]",bV="m",WG=`${Ug}8;;`,AV=(D)=>`${SX.values().next().value}${_V}${D}${bV}`,EV=(D)=>`${SX.values().next().value}${WG}${D}${JG}`,Vg=(D)=>D.split(" ").map((Y)=>h3(Y)),XG=(D,Y,X)=>{let Q=[...Y],J=!1,W=!1,$=h3(IV(D[D.length-1]));for(let[G,B]of Q.entries()){let H=h3(B);if($+H<=X?D[D.length-1]+=B:(D.push(B),$=0),SX.has(B)&&(J=!0,W=Q.slice(G+1).join("").startsWith(WG)),J){W?B===JG&&(J=!1,W=!1):B===bV&&(J=!1);continue}$+=H,$===X&&G<Q.length-1&&(D.push(""),$=0)}!$&&D[D.length-1].length>0&&D.length>1&&(D[D.length-2]+=D.pop())},wg=(D)=>{let Y=D.split(" "),X=Y.length;for(;X>0&&!(h3(Y[X-1])>0);)X--;return X===Y.length?D:Y.slice(0,X).join(" ")+Y.slice(X).join("")},Lg=(D,Y,X={})=>{if(X.trim!==!1&&D.trim()==="")return"";let Q="",J,W,$=Vg(D),G=[""];for(let[H,F]of D.split(" ").entries()){X.trim!==!1&&(G[G.length-1]=G[G.length-1].trimStart());let K=h3(G[G.length-1]);if(H!==0&&(K>=Y&&(X.wordWrap===!1||X.trim===!1)&&(G.push(""),K=0),(K>0||X.trim===!1)&&(G[G.length-1]+=" ",K++)),X.hard&&$[H]>Y){let U=Y-K,z=1+Math.floor(($[H]-U-1)/Y);Math.floor(($[H]-1)/Y)<z&&G.push(""),XG(G,F,Y);continue}if(K+$[H]>Y&&K>0&&$[H]>0){if(X.wordWrap===!1&&K<Y){XG(G,F,Y);continue}G.push("")}if(K+$[H]>Y&&X.wordWrap===!1){XG(G,F,Y);continue}G[G.length-1]+=F}X.trim!==!1&&(G=G.map((H)=>wg(H)));let B=[...G.join(`
|
|
137
|
+
deps: ${X}}`};var E20={keyword:"dependencies",type:"object",schemaType:"object",error:Ty.error,code(D){let[Y,X]=R20(D);Ry(D,Y),jy(D,X)}};function R20({schema:D}){let Y={},X={};for(let Q in D){if(Q==="__proto__")continue;let J=Array.isArray(D[Q])?Y:X;J[Q]=D[Q]}return[Y,X]}function Ry(D,Y=D.schema){let{gen:X,data:Q,it:J}=D;if(Object.keys(Y).length===0)return;let W=X.let("missing");for(let $ in Y){let G=Y[$];if(G.length===0)continue;let B=(0,UX.propertyInData)(X,Q,$,J.opts.ownProperties);if(D.setParams({property:$,depsCount:G.length,deps:G.join(", ")}),J.allErrors)X.if(B,()=>{for(let H of G)(0,UX.checkReportMissingProp)(D,H)});else X.if(VU._`${B} && (${(0,UX.checkMissingProp)(D,G,W)})`),(0,UX.reportMissingProp)(D,W),X.else()}}Ty.validatePropertyDeps=Ry;function jy(D,Y=D.schema){let{gen:X,data:Q,keyword:J,it:W}=D,$=X.name("valid");for(let G in Y){if((0,A20.alwaysValidSchema)(W,Y[G]))continue;X.if((0,UX.propertyInData)(X,Q,G,W.opts.ownProperties),()=>{let B=D.subschema({keyword:J,schemaProp:G},$);D.mergeValidEvaluated(B,$)},()=>X.var($,!0)),D.ok($)}}Ty.validateSchemaDeps=jy;Ty.default=E20});var _y=T((xy)=>{Object.defineProperty(xy,"__esModule",{value:!0});var Cy=x0(),S20=p0(),P20={message:"property name must be valid",params:({params:D})=>Cy._`{propertyName: ${D.propertyName}}`},I20={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:P20,code(D){let{gen:Y,schema:X,data:Q,it:J}=D;if((0,S20.alwaysValidSchema)(J,X))return;let W=Y.name("valid");Y.forIn("key",Q,($)=>{D.setParams({propertyName:$}),D.subschema({keyword:"propertyNames",data:$,dataTypes:["string"],propertyName:$,compositeRule:!0},W),Y.if((0,Cy.not)(W),()=>{if(D.error(!0),!J.allErrors)Y.break()})}),D.ok(W)}};xy.default=I20});var wU=T((by)=>{Object.defineProperty(by,"__esModule",{value:!0});var I$=A6(),d6=x0(),x20=I9(),C$=p0(),_20={message:"must NOT have additional properties",params:({params:D})=>d6._`{additionalProperty: ${D.additionalProperty}}`},b20={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:_20,code(D){let{gen:Y,schema:X,parentSchema:Q,data:J,errsCount:W,it:$}=D;if(!W)throw Error("ajv implementation error");let{allErrors:G,opts:B}=$;if($.props=!0,B.removeAdditional!=="all"&&(0,C$.alwaysValidSchema)($,X))return;let H=(0,I$.allSchemaProperties)(Q.properties),F=(0,I$.allSchemaProperties)(Q.patternProperties);K(),D.ok(d6._`${W} === ${x20.default.errors}`);function K(){Y.forIn("key",J,(L)=>{if(!H.length&&!F.length)V(L);else Y.if(U(L),()=>V(L))})}function U(L){let O;if(H.length>8){let Z=(0,C$.schemaRefOrVal)($,Q.properties,"properties");O=(0,I$.isOwnProperty)(Y,Z,L)}else if(H.length)O=(0,d6.or)(...H.map((Z)=>d6._`${L} === ${Z}`));else O=d6.nil;if(F.length)O=(0,d6.or)(O,...F.map((Z)=>d6._`${(0,I$.usePattern)(D,Z)}.test(${L})`));return(0,d6.not)(O)}function z(L){Y.code(d6._`delete ${J}[${L}]`)}function V(L){if(B.removeAdditional==="all"||B.removeAdditional&&X===!1){z(L);return}if(X===!1){if(D.setParams({additionalProperty:L}),D.error(),!G)Y.break();return}if(typeof X=="object"&&!(0,C$.alwaysValidSchema)($,X)){let O=Y.name("valid");if(B.removeAdditional==="failing")w(L,O,!1),Y.if((0,d6.not)(O),()=>{D.reset(),z(L)});else if(w(L,O),!G)Y.if((0,d6.not)(O),()=>Y.break())}}function w(L,O,Z){let M={keyword:"additionalProperties",dataProp:L,dataPropType:C$.Type.Str};if(Z===!1)Object.assign(M,{compositeRule:!0,createErrors:!1,allErrors:!1});D.subschema(M,O)}}};by.default=b20});var fy=T((yy)=>{Object.defineProperty(yy,"__esModule",{value:!0});var v20=XX(),ky=A6(),LU=p0(),vy=wU(),y20={keyword:"properties",type:"object",schemaType:"object",code(D){let{gen:Y,schema:X,parentSchema:Q,data:J,it:W}=D;if(W.opts.removeAdditional==="all"&&Q.additionalProperties===void 0)vy.default.code(new v20.KeywordCxt(W,vy.default,"additionalProperties"));let $=(0,ky.allSchemaProperties)(X);for(let K of $)W.definedProperties.add(K);if(W.opts.unevaluated&&$.length&&W.props!==!0)W.props=LU.mergeEvaluated.props(Y,(0,LU.toHash)($),W.props);let G=$.filter((K)=>!(0,LU.alwaysValidSchema)(W,X[K]));if(G.length===0)return;let B=Y.name("valid");for(let K of G){if(H(K))F(K);else{if(Y.if((0,ky.propertyInData)(Y,J,K,W.opts.ownProperties)),F(K),!W.allErrors)Y.else().var(B,!0);Y.endIf()}D.it.definedProperties.add(K),D.ok(B)}function H(K){return W.opts.useDefaults&&!W.compositeRule&&X[K].default!==void 0}function F(K){D.subschema({keyword:"properties",schemaProp:K,dataProp:K},B)}}};yy.default=y20});var cy=T((my)=>{Object.defineProperty(my,"__esModule",{value:!0});var hy=A6(),x$=x0(),gy=p0(),uy=p0(),h20={keyword:"patternProperties",type:"object",schemaType:"object",code(D){let{gen:Y,schema:X,data:Q,parentSchema:J,it:W}=D,{opts:$}=W,G=(0,hy.allSchemaProperties)(X),B=G.filter((w)=>(0,gy.alwaysValidSchema)(W,X[w]));if(G.length===0||B.length===G.length&&(!W.opts.unevaluated||W.props===!0))return;let H=$.strictSchema&&!$.allowMatchingProperties&&J.properties,F=Y.name("valid");if(W.props!==!0&&!(W.props instanceof x$.Name))W.props=(0,uy.evaluatedPropsToName)(Y,W.props);let{props:K}=W;U();function U(){for(let w of G){if(H)z(w);if(W.allErrors)V(w);else Y.var(F,!0),V(w),Y.if(F)}}function z(w){for(let L in H)if(new RegExp(w).test(L))(0,gy.checkStrictMode)(W,`property ${L} matches pattern ${w} (use allowMatchingProperties)`)}function V(w){Y.forIn("key",Q,(L)=>{Y.if(x$._`${(0,hy.usePattern)(D,w)}.test(${L})`,()=>{let O=B.includes(w);if(!O)D.subschema({keyword:"patternProperties",schemaProp:w,dataProp:L,dataPropType:uy.Type.Str},F);if(W.opts.unevaluated&&K!==!0)Y.assign(x$._`${K}[${L}]`,!0);else if(!O&&!W.allErrors)Y.if((0,x$.not)(F),()=>Y.break())})})}}};my.default=h20});var dy=T((ly)=>{Object.defineProperty(ly,"__esModule",{value:!0});var u20=p0(),m20={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(D){let{gen:Y,schema:X,it:Q}=D;if((0,u20.alwaysValidSchema)(Q,X)){D.fail();return}let J=Y.name("valid");D.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},J),D.failResult(J,()=>D.reset(),()=>D.error())},error:{message:"must NOT be valid"}};ly.default=m20});var ny=T((py)=>{Object.defineProperty(py,"__esModule",{value:!0});var l20=A6(),d20={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:l20.validateUnion,error:{message:"must match a schema in anyOf"}};py.default=d20});var ry=T((iy)=>{Object.defineProperty(iy,"__esModule",{value:!0});var _$=x0(),n20=p0(),i20={message:"must match exactly one schema in oneOf",params:({params:D})=>_$._`{passingSchemas: ${D.passing}}`},r20={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:i20,code(D){let{gen:Y,schema:X,parentSchema:Q,it:J}=D;if(!Array.isArray(X))throw Error("ajv implementation error");if(J.opts.discriminator&&Q.discriminator)return;let W=X,$=Y.let("valid",!1),G=Y.let("passing",null),B=Y.name("_valid");D.setParams({passing:G}),Y.block(H),D.result($,()=>D.reset(),()=>D.error(!0));function H(){W.forEach((F,K)=>{let U;if((0,n20.alwaysValidSchema)(J,F))Y.var(B,!0);else U=D.subschema({keyword:"oneOf",schemaProp:K,compositeRule:!0},B);if(K>0)Y.if(_$._`${B} && ${$}`).assign($,!1).assign(G,_$._`[${G}, ${K}]`).else();Y.if(B,()=>{if(Y.assign($,!0),Y.assign(G,K),U)D.mergeEvaluated(U,_$.Name)})})}}};iy.default=r20});var oy=T((ay)=>{Object.defineProperty(ay,"__esModule",{value:!0});var o20=p0(),s20={keyword:"allOf",schemaType:"array",code(D){let{gen:Y,schema:X,it:Q}=D;if(!Array.isArray(X))throw Error("ajv implementation error");let J=Y.name("valid");X.forEach((W,$)=>{if((0,o20.alwaysValidSchema)(Q,W))return;let G=D.subschema({keyword:"allOf",schemaProp:$},J);D.ok(J),D.mergeEvaluated(G)})}};ay.default=s20});var Df=T((ey)=>{Object.defineProperty(ey,"__esModule",{value:!0});var b$=x0(),ty=p0(),e20={message:({params:D})=>b$.str`must match "${D.ifClause}" schema`,params:({params:D})=>b$._`{failingKeyword: ${D.ifClause}}`},DF0={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:e20,code(D){let{gen:Y,parentSchema:X,it:Q}=D;if(X.then===void 0&&X.else===void 0)(0,ty.checkStrictMode)(Q,'"if" without "then" and "else" is ignored');let J=sy(Q,"then"),W=sy(Q,"else");if(!J&&!W)return;let $=Y.let("valid",!0),G=Y.name("_valid");if(B(),D.reset(),J&&W){let F=Y.let("ifClause");D.setParams({ifClause:F}),Y.if(G,H("then",F),H("else",F))}else if(J)Y.if(G,H("then"));else Y.if((0,b$.not)(G),H("else"));D.pass($,()=>D.error(!0));function B(){let F=D.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},G);D.mergeEvaluated(F)}function H(F,K){return()=>{let U=D.subschema({keyword:F},G);if(Y.assign($,G),D.mergeValidEvaluated(U,$),K)Y.assign(K,b$._`${F}`);else D.setParams({ifClause:F})}}}};function sy(D,Y){let X=D.schema[Y];return X!==void 0&&!(0,ty.alwaysValidSchema)(D,X)}ey.default=DF0});var Xf=T((Yf)=>{Object.defineProperty(Yf,"__esModule",{value:!0});var XF0=p0(),QF0={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:D,parentSchema:Y,it:X}){if(Y.if===void 0)(0,XF0.checkStrictMode)(X,`"${D}" without "if" is ignored`)}};Yf.default=QF0});var Jf=T((Qf)=>{Object.defineProperty(Qf,"__esModule",{value:!0});var WF0=zU(),$F0=My(),GF0=UU(),BF0=Zy(),HF0=Ey(),FF0=Iy(),qF0=_y(),KF0=wU(),zF0=fy(),UF0=cy(),VF0=dy(),wF0=ny(),LF0=ry(),MF0=oy(),OF0=Df(),NF0=Xf();function ZF0(D=!1){let Y=[VF0.default,wF0.default,LF0.default,MF0.default,OF0.default,NF0.default,qF0.default,KF0.default,FF0.default,zF0.default,UF0.default];if(D)Y.push($F0.default,BF0.default);else Y.push(WF0.default,GF0.default);return Y.push(HF0.default),Y}Qf.default=ZF0});var $f=T((Wf)=>{Object.defineProperty(Wf,"__esModule",{value:!0});var u1=x0(),EF0={message:({schemaCode:D})=>u1.str`must match format "${D}"`,params:({schemaCode:D})=>u1._`{format: ${D}}`},RF0={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:EF0,code(D,Y){let{gen:X,data:Q,$data:J,schema:W,schemaCode:$,it:G}=D,{opts:B,errSchemaPath:H,schemaEnv:F,self:K}=G;if(!B.validateFormats)return;if(J)U();else z();function U(){let V=X.scopeValue("formats",{ref:K.formats,code:B.code.formats}),w=X.const("fDef",u1._`${V}[${$}]`),L=X.let("fType"),O=X.let("format");X.if(u1._`typeof ${w} == "object" && !(${w} instanceof RegExp)`,()=>X.assign(L,u1._`${w}.type || "string"`).assign(O,u1._`${w}.validate`),()=>X.assign(L,u1._`"string"`).assign(O,w)),D.fail$data((0,u1.or)(Z(),M()));function Z(){if(B.strictSchema===!1)return u1.nil;return u1._`${$} && !${O}`}function M(){let E=F.$async?u1._`(${w}.async ? await ${O}(${Q}) : ${O}(${Q}))`:u1._`${O}(${Q})`,j=u1._`(typeof ${O} == "function" ? ${E} : ${O}.test(${Q}))`;return u1._`${O} && ${O} !== true && ${L} === ${Y} && !${j}`}}function z(){let V=K.formats[W];if(!V){Z();return}if(V===!0)return;let[w,L,O]=M(V);if(w===Y)D.pass(E());function Z(){if(B.strictSchema===!1){K.logger.warn(j());return}throw Error(j());function j(){return`unknown format "${W}" ignored in schema at path "${H}"`}}function M(j){let I=j instanceof RegExp?(0,u1.regexpCode)(j):B.code.formats?u1._`${B.code.formats}${(0,u1.getProperty)(W)}`:void 0,_=X.scopeValue("formats",{key:W,ref:j,code:I});if(typeof j=="object"&&!(j instanceof RegExp))return[j.type||"string",j.validate,u1._`${_}.validate`];return["string",j,_]}function E(){if(typeof V=="object"&&!(V instanceof RegExp)&&V.async){if(!F.$async)throw Error("async format in sync schema");return u1._`await ${O}(${Q})`}return typeof L=="function"?u1._`${O}(${Q})`:u1._`${O}.test(${Q})`}}}};Wf.default=RF0});var Bf=T((Gf)=>{Object.defineProperty(Gf,"__esModule",{value:!0});var TF0=$f(),SF0=[TF0.default];Gf.default=SF0});var qf=T((Hf)=>{Object.defineProperty(Hf,"__esModule",{value:!0});Hf.contentVocabulary=Hf.metadataVocabulary=void 0;Hf.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];Hf.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var Uf=T((zf)=>{Object.defineProperty(zf,"__esModule",{value:!0});var CF0=yv(),xF0=Hy(),_F0=Jf(),bF0=Bf(),Kf=qf(),kF0=[CF0.default,xF0.default,(0,_F0.default)(),bF0.default,Kf.metadataVocabulary,Kf.contentVocabulary];zf.default=kF0});var Mf=T((wf)=>{Object.defineProperty(wf,"__esModule",{value:!0});wf.DiscrError=void 0;var Vf;(function(D){D.Tag="tag",D.Mapping="mapping"})(Vf||(wf.DiscrError=Vf={}))});var Zf=T((Nf)=>{Object.defineProperty(Nf,"__esModule",{value:!0});var x3=x0(),MU=Mf(),Of=U$(),yF0=QX(),fF0=p0(),hF0={message:({params:{discrError:D,tagName:Y}})=>D===MU.DiscrError.Tag?`tag "${Y}" must be string`:`value of tag "${Y}" must be in oneOf`,params:({params:{discrError:D,tag:Y,tagName:X}})=>x3._`{error: ${D}, tag: ${X}, tagValue: ${Y}}`},gF0={keyword:"discriminator",type:"object",schemaType:"object",error:hF0,code(D){let{gen:Y,data:X,schema:Q,parentSchema:J,it:W}=D,{oneOf:$}=J;if(!W.opts.discriminator)throw Error("discriminator: requires discriminator option");let G=Q.propertyName;if(typeof G!="string")throw Error("discriminator: requires propertyName");if(Q.mapping)throw Error("discriminator: mapping is not supported");if(!$)throw Error("discriminator: requires oneOf keyword");let B=Y.let("valid",!1),H=Y.const("tag",x3._`${X}${(0,x3.getProperty)(G)}`);Y.if(x3._`typeof ${H} == "string"`,()=>F(),()=>D.error(!1,{discrError:MU.DiscrError.Tag,tag:H,tagName:G})),D.ok(B);function F(){let z=U();Y.if(!1);for(let V in z)Y.elseIf(x3._`${H} === ${V}`),Y.assign(B,K(z[V]));Y.else(),D.error(!1,{discrError:MU.DiscrError.Mapping,tag:H,tagName:G}),Y.endIf()}function K(z){let V=Y.name("valid"),w=D.subschema({keyword:"oneOf",schemaProp:z},V);return D.mergeEvaluated(w,x3.Name),V}function U(){var z;let V={},w=O(J),L=!0;for(let E=0;E<$.length;E++){let j=$[E];if((j===null||j===void 0?void 0:j.$ref)&&!(0,fF0.schemaHasRulesButRef)(j,W.self.RULES)){let _=j.$ref;if(j=Of.resolveRef.call(W.self,W.schemaEnv.root,W.baseId,_),j instanceof Of.SchemaEnv)j=j.schema;if(j===void 0)throw new yF0.default(W.opts.uriResolver,W.baseId,_)}let I=(z=j===null||j===void 0?void 0:j.properties)===null||z===void 0?void 0:z[G];if(typeof I!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${G}"`);L=L&&(w||O(j)),Z(I,E)}if(!L)throw Error(`discriminator: "${G}" must be required`);return V;function O({required:E}){return Array.isArray(E)&&E.includes(G)}function Z(E,j){if(E.const)M(E.const,j);else if(E.enum)for(let I of E.enum)M(I,j);else throw Error(`discriminator: "properties/${G}" must have "const" or "enum"`)}function M(E,j){if(typeof E!="string"||E in V)throw Error(`discriminator: "${G}" values must be unique strings`);V[E]=j}}}};Nf.default=gF0});var Af=T((cC0,mF0)=>{mF0.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var NU=T((o8,OU)=>{Object.defineProperty(o8,"__esModule",{value:!0});o8.MissingRefError=o8.ValidationError=o8.CodeGen=o8.Name=o8.nil=o8.stringify=o8.str=o8._=o8.KeywordCxt=o8.Ajv=void 0;var cF0=Tv(),lF0=Uf(),dF0=Zf(),Ef=Af(),pF0=["/properties"],k$="http://json-schema.org/draft-07/schema";class VX extends cF0.default{_addVocabularies(){if(super._addVocabularies(),lF0.default.forEach((D)=>this.addVocabulary(D)),this.opts.discriminator)this.addKeyword(dF0.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let D=this.opts.$data?this.$dataMetaSchema(Ef,pF0):Ef;this.addMetaSchema(D,k$,!1),this.refs["http://json-schema.org/schema"]=k$}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(k$)?k$:void 0)}}o8.Ajv=VX;OU.exports=o8=VX;OU.exports.Ajv=VX;Object.defineProperty(o8,"__esModule",{value:!0});o8.default=VX;var nF0=XX();Object.defineProperty(o8,"KeywordCxt",{enumerable:!0,get:function(){return nF0.KeywordCxt}});var _3=x0();Object.defineProperty(o8,"_",{enumerable:!0,get:function(){return _3._}});Object.defineProperty(o8,"str",{enumerable:!0,get:function(){return _3.str}});Object.defineProperty(o8,"stringify",{enumerable:!0,get:function(){return _3.stringify}});Object.defineProperty(o8,"nil",{enumerable:!0,get:function(){return _3.nil}});Object.defineProperty(o8,"Name",{enumerable:!0,get:function(){return _3.Name}});Object.defineProperty(o8,"CodeGen",{enumerable:!0,get:function(){return _3.CodeGen}});var iF0=K$();Object.defineProperty(o8,"ValidationError",{enumerable:!0,get:function(){return iF0.default}});var rF0=QX();Object.defineProperty(o8,"MissingRefError",{enumerable:!0,get:function(){return rF0.default}})});var bf=T((xf)=>{Object.defineProperty(xf,"__esModule",{value:!0});xf.formatNames=xf.fastFormats=xf.fullFormats=void 0;function B9(D,Y){return{validate:D,compare:Y}}xf.fullFormats={date:B9(Sf,RU),time:B9(AU(!0),jU),"date-time":B9(Rf(!0),If),"iso-time":B9(AU(),Pf),"iso-date-time":B9(Rf(),Cf),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:Xq0,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:Hq0,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:Qq0,int32:{type:"number",validate:$q0},int64:{type:"number",validate:Gq0},float:{type:"number",validate:Tf},double:{type:"number",validate:Tf},password:!0,binary:!0};xf.fastFormats={...xf.fullFormats,date:B9(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,RU),time:B9(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,jU),"date-time":B9(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,If),"iso-time":B9(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,Pf),"iso-date-time":B9(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,Cf),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};xf.formatNames=Object.keys(xf.fullFormats);function sF0(D){return D%4===0&&(D%100!==0||D%400===0)}var tF0=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,eF0=[0,31,28,31,30,31,30,31,31,30,31,30,31];function Sf(D){let Y=tF0.exec(D);if(!Y)return!1;let X=+Y[1],Q=+Y[2],J=+Y[3];return Q>=1&&Q<=12&&J>=1&&J<=(Q===2&&sF0(X)?29:eF0[Q])}function RU(D,Y){if(!(D&&Y))return;if(D>Y)return 1;if(D<Y)return-1;return 0}var ZU=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function AU(D){return function(X){let Q=ZU.exec(X);if(!Q)return!1;let J=+Q[1],W=+Q[2],$=+Q[3],G=Q[4],B=Q[5]==="-"?-1:1,H=+(Q[6]||0),F=+(Q[7]||0);if(H>23||F>59||D&&!G)return!1;if(J<=23&&W<=59&&$<60)return!0;let K=W-F*B,U=J-H*B-(K<0?1:0);return(U===23||U===-1)&&(K===59||K===-1)&&$<61}}function jU(D,Y){if(!(D&&Y))return;let X=new Date("2020-01-01T"+D).valueOf(),Q=new Date("2020-01-01T"+Y).valueOf();if(!(X&&Q))return;return X-Q}function Pf(D,Y){if(!(D&&Y))return;let X=ZU.exec(D),Q=ZU.exec(Y);if(!(X&&Q))return;if(D=X[1]+X[2]+X[3],Y=Q[1]+Q[2]+Q[3],D>Y)return 1;if(D<Y)return-1;return 0}var EU=/t|\s/i;function Rf(D){let Y=AU(D);return function(Q){let J=Q.split(EU);return J.length===2&&Sf(J[0])&&Y(J[1])}}function If(D,Y){if(!(D&&Y))return;let X=new Date(D).valueOf(),Q=new Date(Y).valueOf();if(!(X&&Q))return;return X-Q}function Cf(D,Y){if(!(D&&Y))return;let[X,Q]=D.split(EU),[J,W]=Y.split(EU),$=RU(X,J);if($===void 0)return;return $||jU(Q,W)}var Dq0=/\/|:/,Yq0=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function Xq0(D){return Dq0.test(D)&&Yq0.test(D)}var jf=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function Qq0(D){return jf.lastIndex=0,jf.test(D)}var Jq0=-2147483648,Wq0=2147483647;function $q0(D){return Number.isInteger(D)&&D<=Wq0&&D>=Jq0}function Gq0(D){return Number.isInteger(D)}function Tf(){return!0}var Bq0=/[^\\]\\Z/;function Hq0(D){if(Bq0.test(D))return!1;try{return new RegExp(D),!0}catch(Y){return!1}}});var vf=T((kf)=>{Object.defineProperty(kf,"__esModule",{value:!0});kf.formatLimitDefinition=void 0;var qq0=NU(),p6=x0(),TD=p6.operators,v$={formatMaximum:{okStr:"<=",ok:TD.LTE,fail:TD.GT},formatMinimum:{okStr:">=",ok:TD.GTE,fail:TD.LT},formatExclusiveMaximum:{okStr:"<",ok:TD.LT,fail:TD.GTE},formatExclusiveMinimum:{okStr:">",ok:TD.GT,fail:TD.LTE}},Kq0={message:({keyword:D,schemaCode:Y})=>p6.str`should be ${v$[D].okStr} ${Y}`,params:({keyword:D,schemaCode:Y})=>p6._`{comparison: ${v$[D].okStr}, limit: ${Y}}`};kf.formatLimitDefinition={keyword:Object.keys(v$),type:"string",schemaType:"string",$data:!0,error:Kq0,code(D){let{gen:Y,data:X,schemaCode:Q,keyword:J,it:W}=D,{opts:$,self:G}=W;if(!$.validateFormats)return;let B=new qq0.KeywordCxt(W,G.RULES.all.format.definition,"format");if(B.$data)H();else F();function H(){let U=Y.scopeValue("formats",{ref:G.formats,code:$.code.formats}),z=Y.const("fmt",p6._`${U}[${B.schemaCode}]`);D.fail$data((0,p6.or)(p6._`typeof ${z} != "object"`,p6._`${z} instanceof RegExp`,p6._`typeof ${z}.compare != "function"`,K(z)))}function F(){let U=B.schema,z=G.formats[U];if(!z||z===!0)return;if(typeof z!="object"||z instanceof RegExp||typeof z.compare!="function")throw Error(`"${J}": format "${U}" does not define "compare" function`);let V=Y.scopeValue("formats",{key:U,ref:z,code:$.code.formats?p6._`${$.code.formats}${(0,p6.getProperty)(U)}`:void 0});D.fail$data(K(V))}function K(U){return p6._`${U}.compare(${X}, ${Q}) ${v$[J].fail} 0`}},dependencies:["format"]};var zq0=(D)=>{return D.addKeyword(kf.formatLimitDefinition),D};kf.default=zq0});var gf=T((wX,hf)=>{Object.defineProperty(wX,"__esModule",{value:!0});var b3=bf(),Vq0=vf(),PU=x0(),yf=new PU.Name("fullFormats"),wq0=new PU.Name("fastFormats"),IU=(D,Y={keywords:!0})=>{if(Array.isArray(Y))return ff(D,Y,b3.fullFormats,yf),D;let[X,Q]=Y.mode==="fast"?[b3.fastFormats,wq0]:[b3.fullFormats,yf],J=Y.formats||b3.formatNames;if(ff(D,J,X,Q),Y.keywords)(0,Vq0.default)(D);return D};IU.get=(D,Y="full")=>{let Q=(Y==="fast"?b3.fastFormats:b3.fullFormats)[D];if(!Q)throw Error(`Unknown format "${D}"`);return Q};function ff(D,Y,X,Q){var J,W;(J=(W=D.opts.code).formats)!==null&&J!==void 0||(W.formats=PU._`require("ajv-formats/dist/formats").${Q}`);for(let $ of Y)D.addFormat($,X[$])}hf.exports=wX=IU;Object.defineProperty(wX,"__esModule",{value:!0});wX.default=IU});import{exit as iU}from"node:process";var UV=a1(zV(),1),{program:c1,createCommand:gq0,createArgument:uq0,createOption:mq0,CommanderError:cq0,InvalidArgumentError:lq0,InvalidOptionArgumentError:dq0,Command:pq0,Argument:nq0,Option:iq0,Help:rq0}=UV.default;var f8={name:"@capgo/cli",type:"module",version:"7.71.12",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",require:"./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:checksum":"bun test/test-checksum-algorithm.mjs","test:version-detection":"node test/test-get-installed-version.mjs","test:version-detection:setup":"./test/fixtures/setup-test-projects.sh",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:checksum && bun run test:version-detection"},devDependencies:{"@antfu/eslint-config":"^6.1.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":"^0.11.0","@modelcontextprotocol/sdk":"^1.0.0","@sauber/table":"npm:@jsr/sauber__table","@std/semver":"npm:@jsr/std__semver@1.0.6","@supabase/supabase-js":"^2.79.0","@types/adm-zip":"^0.5.7","@types/node":"^24","@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":"3.1.3",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",zod:"^3.24.0"}};import{existsSync as BS,readFileSync as HS}from"node:fs";var z8=a1(t$(),1),f3=a1(DG(),1);import{stdin as SV,stdout as PV}from"node:process";import*as v9 from"node:readline";import MV from"node:readline";import{Writable as Xg}from"node:stream";function Qg({onlyFirst:D=!1}={}){let Y=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(Y,D?void 0:"g")}var Jg=Qg();function IV(D){if(typeof D!="string")throw TypeError(`Expected a \`string\`, got \`${typeof D}\``);return D.replace(Jg,"")}function CV(D){return D&&D.__esModule&&Object.prototype.hasOwnProperty.call(D,"default")?D.default:D}var xV={exports:{}};(function(D){var Y={};D.exports=Y,Y.eastAsianWidth=function(Q){var J=Q.charCodeAt(0),W=Q.length==2?Q.charCodeAt(1):0,$=J;return 55296<=J&&J<=56319&&56320<=W&&W<=57343&&(J&=1023,W&=1023,$=J<<10|W,$+=65536),$==12288||65281<=$&&$<=65376||65504<=$&&$<=65510?"F":$==8361||65377<=$&&$<=65470||65474<=$&&$<=65479||65482<=$&&$<=65487||65490<=$&&$<=65495||65498<=$&&$<=65500||65512<=$&&$<=65518?"H":4352<=$&&$<=4447||4515<=$&&$<=4519||4602<=$&&$<=4607||9001<=$&&$<=9002||11904<=$&&$<=11929||11931<=$&&$<=12019||12032<=$&&$<=12245||12272<=$&&$<=12283||12289<=$&&$<=12350||12353<=$&&$<=12438||12441<=$&&$<=12543||12549<=$&&$<=12589||12593<=$&&$<=12686||12688<=$&&$<=12730||12736<=$&&$<=12771||12784<=$&&$<=12830||12832<=$&&$<=12871||12880<=$&&$<=13054||13056<=$&&$<=19903||19968<=$&&$<=42124||42128<=$&&$<=42182||43360<=$&&$<=43388||44032<=$&&$<=55203||55216<=$&&$<=55238||55243<=$&&$<=55291||63744<=$&&$<=64255||65040<=$&&$<=65049||65072<=$&&$<=65106||65108<=$&&$<=65126||65128<=$&&$<=65131||110592<=$&&$<=110593||127488<=$&&$<=127490||127504<=$&&$<=127546||127552<=$&&$<=127560||127568<=$&&$<=127569||131072<=$&&$<=194367||177984<=$&&$<=196605||196608<=$&&$<=262141?"W":32<=$&&$<=126||162<=$&&$<=163||165<=$&&$<=166||$==172||$==175||10214<=$&&$<=10221||10629<=$&&$<=10630?"Na":$==161||$==164||167<=$&&$<=168||$==170||173<=$&&$<=174||176<=$&&$<=180||182<=$&&$<=186||188<=$&&$<=191||$==198||$==208||215<=$&&$<=216||222<=$&&$<=225||$==230||232<=$&&$<=234||236<=$&&$<=237||$==240||242<=$&&$<=243||247<=$&&$<=250||$==252||$==254||$==257||$==273||$==275||$==283||294<=$&&$<=295||$==299||305<=$&&$<=307||$==312||319<=$&&$<=322||$==324||328<=$&&$<=331||$==333||338<=$&&$<=339||358<=$&&$<=359||$==363||$==462||$==464||$==466||$==468||$==470||$==472||$==474||$==476||$==593||$==609||$==708||$==711||713<=$&&$<=715||$==717||$==720||728<=$&&$<=731||$==733||$==735||768<=$&&$<=879||913<=$&&$<=929||931<=$&&$<=937||945<=$&&$<=961||963<=$&&$<=969||$==1025||1040<=$&&$<=1103||$==1105||$==8208||8211<=$&&$<=8214||8216<=$&&$<=8217||8220<=$&&$<=8221||8224<=$&&$<=8226||8228<=$&&$<=8231||$==8240||8242<=$&&$<=8243||$==8245||$==8251||$==8254||$==8308||$==8319||8321<=$&&$<=8324||$==8364||$==8451||$==8453||$==8457||$==8467||$==8470||8481<=$&&$<=8482||$==8486||$==8491||8531<=$&&$<=8532||8539<=$&&$<=8542||8544<=$&&$<=8555||8560<=$&&$<=8569||$==8585||8592<=$&&$<=8601||8632<=$&&$<=8633||$==8658||$==8660||$==8679||$==8704||8706<=$&&$<=8707||8711<=$&&$<=8712||$==8715||$==8719||$==8721||$==8725||$==8730||8733<=$&&$<=8736||$==8739||$==8741||8743<=$&&$<=8748||$==8750||8756<=$&&$<=8759||8764<=$&&$<=8765||$==8776||$==8780||$==8786||8800<=$&&$<=8801||8804<=$&&$<=8807||8810<=$&&$<=8811||8814<=$&&$<=8815||8834<=$&&$<=8835||8838<=$&&$<=8839||$==8853||$==8857||$==8869||$==8895||$==8978||9312<=$&&$<=9449||9451<=$&&$<=9547||9552<=$&&$<=9587||9600<=$&&$<=9615||9618<=$&&$<=9621||9632<=$&&$<=9633||9635<=$&&$<=9641||9650<=$&&$<=9651||9654<=$&&$<=9655||9660<=$&&$<=9661||9664<=$&&$<=9665||9670<=$&&$<=9672||$==9675||9678<=$&&$<=9681||9698<=$&&$<=9701||$==9711||9733<=$&&$<=9734||$==9737||9742<=$&&$<=9743||9748<=$&&$<=9749||$==9756||$==9758||$==9792||$==9794||9824<=$&&$<=9825||9827<=$&&$<=9829||9831<=$&&$<=9834||9836<=$&&$<=9837||$==9839||9886<=$&&$<=9887||9918<=$&&$<=9919||9924<=$&&$<=9933||9935<=$&&$<=9953||$==9955||9960<=$&&$<=9983||$==10045||$==10071||10102<=$&&$<=10111||11093<=$&&$<=11097||12872<=$&&$<=12879||57344<=$&&$<=63743||65024<=$&&$<=65039||$==65533||127232<=$&&$<=127242||127248<=$&&$<=127277||127280<=$&&$<=127337||127344<=$&&$<=127386||917760<=$&&$<=917999||983040<=$&&$<=1048573||1048576<=$&&$<=1114109?"A":"N"},Y.characterLength=function(Q){var J=this.eastAsianWidth(Q);return J=="F"||J=="W"||J=="A"?2:1};function X(Q){return Q.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}Y.length=function(Q){for(var J=X(Q),W=0,$=0;$<J.length;$++)W=W+this.characterLength(J[$]);return W},Y.slice=function(Q,J,W){textLen=Y.length(Q),J=J||0,W=W||1,J<0&&(J=textLen+J),W<0&&(W=textLen+W);for(var $="",G=0,B=X(Q),H=0;H<B.length;H++){var F=B[H],K=Y.length(F);if(G>=J-(K==2?1:0))if(G+K<=W)$+=F;else break;G+=K}return $}})(xV);var Wg=xV.exports,$g=CV(Wg),Gg=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},Bg=CV(Gg);function h3(D,Y={}){if(typeof D!="string"||D.length===0||(Y={ambiguousIsNarrow:!0,...Y},D=IV(D),D.length===0))return 0;D=D.replace(Bg()," ");let X=Y.ambiguousIsNarrow?1:2,Q=0;for(let J of D){let W=J.codePointAt(0);if(W<=31||W>=127&&W<=159||W>=768&&W<=879)continue;switch($g.eastAsianWidth(J)){case"F":case"W":Q+=2;break;case"A":Q+=X;break;default:Q+=1}}return Q}var YG=10,OV=(D=0)=>(Y)=>`\x1B[${Y+D}m`,NV=(D=0)=>(Y)=>`\x1B[${38+D};5;${Y}m`,ZV=(D=0)=>(Y,X,Q)=>`\x1B[${38+D};2;${Y};${X};${Q}m`,V1={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(V1.modifier);var Hg=Object.keys(V1.color),Fg=Object.keys(V1.bgColor);[...Hg,...Fg];function qg(){let D=new Map;for(let[Y,X]of Object.entries(V1)){for(let[Q,J]of Object.entries(X))V1[Q]={open:`\x1B[${J[0]}m`,close:`\x1B[${J[1]}m`},X[Q]=V1[Q],D.set(J[0],J[1]);Object.defineProperty(V1,Y,{value:X,enumerable:!1})}return Object.defineProperty(V1,"codes",{value:D,enumerable:!1}),V1.color.close="\x1B[39m",V1.bgColor.close="\x1B[49m",V1.color.ansi=OV(),V1.color.ansi256=NV(),V1.color.ansi16m=ZV(),V1.bgColor.ansi=OV(YG),V1.bgColor.ansi256=NV(YG),V1.bgColor.ansi16m=ZV(YG),Object.defineProperties(V1,{rgbToAnsi256:{value:(Y,X,Q)=>Y===X&&X===Q?Y<8?16:Y>248?231:Math.round((Y-8)/247*24)+232:16+36*Math.round(Y/255*5)+6*Math.round(X/255*5)+Math.round(Q/255*5),enumerable:!1},hexToRgb:{value:(Y)=>{let X=/[a-f\d]{6}|[a-f\d]{3}/i.exec(Y.toString(16));if(!X)return[0,0,0];let[Q]=X;Q.length===3&&(Q=[...Q].map((W)=>W+W).join(""));let J=Number.parseInt(Q,16);return[J>>16&255,J>>8&255,J&255]},enumerable:!1},hexToAnsi256:{value:(Y)=>V1.rgbToAnsi256(...V1.hexToRgb(Y)),enumerable:!1},ansi256ToAnsi:{value:(Y)=>{if(Y<8)return 30+Y;if(Y<16)return 90+(Y-8);let X,Q,J;if(Y>=232)X=((Y-232)*10+8)/255,Q=X,J=X;else{Y-=16;let G=Y%36;X=Math.floor(Y/36)/5,Q=Math.floor(G/6)/5,J=G%6/5}let W=Math.max(X,Q,J)*2;if(W===0)return 30;let $=30+(Math.round(J)<<2|Math.round(Q)<<1|Math.round(X));return W===2&&($+=60),$},enumerable:!1},rgbToAnsi:{value:(Y,X,Q)=>V1.ansi256ToAnsi(V1.rgbToAnsi256(Y,X,Q)),enumerable:!1},hexToAnsi:{value:(Y)=>V1.ansi256ToAnsi(V1.hexToAnsi256(Y)),enumerable:!1}}),V1}var Kg=qg(),SX=new Set(["\x1B",""]),zg=39,JG="\x07",_V="[",Ug="]",bV="m",WG=`${Ug}8;;`,AV=(D)=>`${SX.values().next().value}${_V}${D}${bV}`,EV=(D)=>`${SX.values().next().value}${WG}${D}${JG}`,Vg=(D)=>D.split(" ").map((Y)=>h3(Y)),XG=(D,Y,X)=>{let Q=[...Y],J=!1,W=!1,$=h3(IV(D[D.length-1]));for(let[G,B]of Q.entries()){let H=h3(B);if($+H<=X?D[D.length-1]+=B:(D.push(B),$=0),SX.has(B)&&(J=!0,W=Q.slice(G+1).join("").startsWith(WG)),J){W?B===JG&&(J=!1,W=!1):B===bV&&(J=!1);continue}$+=H,$===X&&G<Q.length-1&&(D.push(""),$=0)}!$&&D[D.length-1].length>0&&D.length>1&&(D[D.length-2]+=D.pop())},wg=(D)=>{let Y=D.split(" "),X=Y.length;for(;X>0&&!(h3(Y[X-1])>0);)X--;return X===Y.length?D:Y.slice(0,X).join(" ")+Y.slice(X).join("")},Lg=(D,Y,X={})=>{if(X.trim!==!1&&D.trim()==="")return"";let Q="",J,W,$=Vg(D),G=[""];for(let[H,F]of D.split(" ").entries()){X.trim!==!1&&(G[G.length-1]=G[G.length-1].trimStart());let K=h3(G[G.length-1]);if(H!==0&&(K>=Y&&(X.wordWrap===!1||X.trim===!1)&&(G.push(""),K=0),(K>0||X.trim===!1)&&(G[G.length-1]+=" ",K++)),X.hard&&$[H]>Y){let U=Y-K,z=1+Math.floor(($[H]-U-1)/Y);Math.floor(($[H]-1)/Y)<z&&G.push(""),XG(G,F,Y);continue}if(K+$[H]>Y&&K>0&&$[H]>0){if(X.wordWrap===!1&&K<Y){XG(G,F,Y);continue}G.push("")}if(K+$[H]>Y&&X.wordWrap===!1){XG(G,F,Y);continue}G[G.length-1]+=F}X.trim!==!1&&(G=G.map((H)=>wg(H)));let B=[...G.join(`
|
|
138
138
|
`)];for(let[H,F]of B.entries()){if(Q+=F,SX.has(F)){let{groups:U}=new RegExp(`(?:\\${_V}(?<code>\\d+)m|\\${WG}(?<uri>.*)${JG})`).exec(B.slice(H).join(""))||{groups:{}};if(U.code!==void 0){let z=Number.parseFloat(U.code);J=z===zg?void 0:z}else U.uri!==void 0&&(W=U.uri.length===0?void 0:U.uri)}let K=Kg.codes.get(Number(J));B[H+1]===`
|
|
139
139
|
`?(W&&(Q+=EV("")),J&&K&&(Q+=AV(K))):F===`
|
|
140
140
|
`&&(J&&K&&(Q+=AV(J)),W&&(Q+=EV(W)))}return Q};function RV(D,Y,X){return String(D).normalize().replace(/\r\n/g,`
|
|
@@ -147,7 +147,7 @@ tell application "System Events" to get value of property list item "CFBundleNam
|
|
|
147
147
|
`).length-1;this.output.write(z8.cursor.move(-999,D*-1))}render(){let D=RV(this._render(this)??"",process.stdout.columns,{hard:!0});if(D!==this._prevFrame){if(this.state==="initial")this.output.write(z8.cursor.hide);else{let Y=Og(this._prevFrame,D);if(this.restoreCursor(),Y&&Y?.length===1){let X=Y[0];this.output.write(z8.cursor.move(0,X)),this.output.write(z8.erase.lines(1));let Q=D.split(`
|
|
148
148
|
`);this.output.write(Q[X]),this._prevFrame=D,this.output.write(z8.cursor.move(0,Q.length-X-1));return}if(Y&&Y?.length>1){let X=Y[0];this.output.write(z8.cursor.move(0,X)),this.output.write(z8.erase.down());let Q=D.split(`
|
|
149
149
|
`).slice(X);this.output.write(Q.join(`
|
|
150
|
-
`)),this._prevFrame=D;return}this.output.write(z8.erase.down())}this.output.write(D),this.state==="initial"&&(this.state="active"),this._prevFrame=D}}}class GG extends g3{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(D){super(D,!1),this.value=!!D.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(Y)=>{this.output.write(z8.cursor.move(0,-1)),this.value=Y,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var Eg;Eg=new WeakMap;var Rg=Object.defineProperty,jg=(D,Y,X)=>(Y in D)?Rg(D,Y,{enumerable:!0,configurable:!0,writable:!0,value:X}):D[Y]=X,jV=(D,Y,X)=>(jg(D,typeof Y!="symbol"?Y+"":Y,X),X);class BG extends g3{constructor({mask:D,...Y}){super(Y),jV(this,"valueWithCursor",""),jV(this,"_mask","•"),this._mask=D??"•",this.on("finalize",()=>{this.valueWithCursor=this.masked}),this.on("value",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.masked}${f3.default.inverse(f3.default.hidden("_"))}`;else{let X=this.masked.slice(0,this.cursor),Q=this.masked.slice(this.cursor);this.valueWithCursor=`${X}${f3.default.inverse(Q[0])}${Q.slice(1)}`}})}get cursor(){return this._cursor}get masked(){return this.value.replaceAll(/./g,this._mask)}}var Tg=Object.defineProperty,Sg=(D,Y,X)=>(Y in D)?Tg(D,Y,{enumerable:!0,configurable:!0,writable:!0,value:X}):D[Y]=X,TV=(D,Y,X)=>(Sg(D,typeof Y!="symbol"?Y+"":Y,X),X);class HG extends g3{constructor(D){super(D,!1),TV(this,"options"),TV(this,"cursor",0),this.options=D.options,this.cursor=this.options.findIndex(({value:Y})=>Y===D.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",(Y)=>{switch(Y){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue()})}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value}}class FG extends g3{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}█`;let D=this.value.slice(0,this.cursor),[Y,...X]=this.value.slice(this.cursor);return`${D}${f3.default.inverse(Y)}${X.join("")}`}get cursor(){return this._cursor}constructor(D){super(D),this.on("finalize",()=>{this.value||(this.value=D.defaultValue)})}}var s=a1(DG(),1),PX=a1(t$(),1);import R6 from"node:process";function Pg(){return R6.platform!=="win32"?R6.env.TERM!=="linux":!!R6.env.CI||!!R6.env.WT_SESSION||!!R6.env.TERMINUS_SUBLIME||R6.env.ConEmuTask==="{cmd::Cmder}"||R6.env.TERM_PROGRAM==="Terminus-Sublime"||R6.env.TERM_PROGRAM==="vscode"||R6.env.TERM==="xterm-256color"||R6.env.TERM==="alacritty"||R6.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var qG=Pg(),
|
|
150
|
+
`)),this._prevFrame=D;return}this.output.write(z8.erase.down())}this.output.write(D),this.state==="initial"&&(this.state="active"),this._prevFrame=D}}}class GG extends g3{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(D){super(D,!1),this.value=!!D.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(Y)=>{this.output.write(z8.cursor.move(0,-1)),this.value=Y,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var Eg;Eg=new WeakMap;var Rg=Object.defineProperty,jg=(D,Y,X)=>(Y in D)?Rg(D,Y,{enumerable:!0,configurable:!0,writable:!0,value:X}):D[Y]=X,jV=(D,Y,X)=>(jg(D,typeof Y!="symbol"?Y+"":Y,X),X);class BG extends g3{constructor({mask:D,...Y}){super(Y),jV(this,"valueWithCursor",""),jV(this,"_mask","•"),this._mask=D??"•",this.on("finalize",()=>{this.valueWithCursor=this.masked}),this.on("value",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.masked}${f3.default.inverse(f3.default.hidden("_"))}`;else{let X=this.masked.slice(0,this.cursor),Q=this.masked.slice(this.cursor);this.valueWithCursor=`${X}${f3.default.inverse(Q[0])}${Q.slice(1)}`}})}get cursor(){return this._cursor}get masked(){return this.value.replaceAll(/./g,this._mask)}}var Tg=Object.defineProperty,Sg=(D,Y,X)=>(Y in D)?Tg(D,Y,{enumerable:!0,configurable:!0,writable:!0,value:X}):D[Y]=X,TV=(D,Y,X)=>(Sg(D,typeof Y!="symbol"?Y+"":Y,X),X);class HG extends g3{constructor(D){super(D,!1),TV(this,"options"),TV(this,"cursor",0),this.options=D.options,this.cursor=this.options.findIndex(({value:Y})=>Y===D.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",(Y)=>{switch(Y){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue()})}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value}}class FG extends g3{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}█`;let D=this.value.slice(0,this.cursor),[Y,...X]=this.value.slice(this.cursor);return`${D}${f3.default.inverse(Y)}${X.join("")}`}get cursor(){return this._cursor}constructor(D){super(D),this.on("finalize",()=>{this.value||(this.value=D.defaultValue)})}}var s=a1(DG(),1),PX=a1(t$(),1);import R6 from"node:process";function Pg(){return R6.platform!=="win32"?R6.env.TERM!=="linux":!!R6.env.CI||!!R6.env.WT_SESSION||!!R6.env.TERMINUS_SUBLIME||R6.env.ConEmuTask==="{cmd::Cmder}"||R6.env.TERM_PROGRAM==="Terminus-Sublime"||R6.env.TERM_PROGRAM==="vscode"||R6.env.TERM==="xterm-256color"||R6.env.TERM==="alacritty"||R6.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var qG=Pg(),y1=(D,Y)=>qG?D:Y,Ig=y1("◆","*"),vV=y1("■","x"),yV=y1("▲","x"),UG=y1("◇","o"),Cg=y1("┌","T"),o0=y1("│","|"),y9=y1("└","—"),KG=y1("●",">"),zG=y1("○"," "),HK0=y1("◻","[•]"),FK0=y1("◼","[+]"),qK0=y1("◻","[ ]"),xg=y1("▪","•"),KK0=y1("─","-"),zK0=y1("╮","+"),UK0=y1("├","+"),VK0=y1("╯","+"),_g=y1("●","•"),bg=y1("◆","*"),kg=y1("▲","!"),vg=y1("■","x"),IX=(D)=>{switch(D){case"initial":case"active":return s.default.cyan(Ig);case"cancel":return s.default.red(vV);case"error":return s.default.yellow(yV);case"submit":return s.default.green(UG)}},yg=(D)=>{let{cursor:Y,options:X,style:Q}=D,J=D.maxItems??Number.POSITIVE_INFINITY,W=Math.max(process.stdout.rows-4,0),$=Math.min(W,Math.max(J,5)),G=0;Y>=G+$-3?G=Math.max(Math.min(Y-$+3,X.length-$),0):Y<G+2&&(G=Math.max(Y-2,0));let B=$<X.length&&G>0,H=$<X.length&&G+$<X.length;return X.slice(G,G+$).map((F,K,U)=>{let z=K===0&&B,V=K===U.length-1&&H;return z||V?s.default.dim("..."):Q(F,K+G===Y)})},h8=(D)=>new FG({validate:D.validate,placeholder:D.placeholder,defaultValue:D.defaultValue,initialValue:D.initialValue,render(){let Y=`${s.default.gray(o0)}
|
|
151
151
|
${IX(this.state)} ${D.message}
|
|
152
152
|
`,X=D.placeholder?s.default.inverse(D.placeholder[0])+s.default.dim(D.placeholder.slice(1)):s.default.inverse(s.default.hidden("_")),Q=this.value?this.valueWithCursor:X;switch(this.state){case"error":return`${Y.trim()}
|
|
153
153
|
${s.default.yellow(o0)} ${Q}
|
|
@@ -193,7 +193,7 @@ ${s.default.gray(y9)} ${D}
|
|
|
193
193
|
Caused by: ${(U=B===null||B===void 0?void 0:B.name)!==null&&U!==void 0?U:"Error"}: ${V}`,w)G+=` (${w})`;if(B===null||B===void 0?void 0:B.stack)G+=`
|
|
194
194
|
${B.stack}`}else{var z;G=(z=W===null||W===void 0?void 0:W.stack)!==null&&z!==void 0?z:""}return{error:{message:`${($=W===null||W===void 0?void 0:W.name)!==null&&$!==void 0?$:"FetchError"}: ${W===null||W===void 0?void 0:W.message}`,details:G,hint:"",code:""},data:null,count:null,status:0,statusText:""}});return J.then(D,Y)}returns(){return this}overrideTypes(){return this}},Au=class extends Zu{select(D){let Y=!1,X=(D!==null&&D!==void 0?D:"*").split("").map((Q)=>{if(/\s/.test(Q)&&!Y)return"";if(Q==='"')Y=!Y;return Q}).join("");return this.url.searchParams.set("select",X),this.headers.append("Prefer","return=representation"),this}order(D,{ascending:Y=!0,nullsFirst:X,foreignTable:Q,referencedTable:J=Q}={}){let W=J?`${J}.order`:"order",$=this.url.searchParams.get(W);return this.url.searchParams.set(W,`${$?`${$},`:""}${D}.${Y?"asc":"desc"}${X===void 0?"":X?".nullsfirst":".nullslast"}`),this}limit(D,{foreignTable:Y,referencedTable:X=Y}={}){let Q=typeof X>"u"?"limit":`${X}.limit`;return this.url.searchParams.set(Q,`${D}`),this}range(D,Y,{foreignTable:X,referencedTable:Q=X}={}){let J=typeof Q>"u"?"offset":`${Q}.offset`,W=typeof Q>"u"?"limit":`${Q}.limit`;return this.url.searchParams.set(J,`${D}`),this.url.searchParams.set(W,`${Y-D+1}`),this}abortSignal(D){return this.signal=D,this}single(){return this.headers.set("Accept","application/vnd.pgrst.object+json"),this}maybeSingle(){if(this.method==="GET")this.headers.set("Accept","application/json");else this.headers.set("Accept","application/vnd.pgrst.object+json");return this.isMaybeSingle=!0,this}csv(){return this.headers.set("Accept","text/csv"),this}geojson(){return this.headers.set("Accept","application/geo+json"),this}explain({analyze:D=!1,verbose:Y=!1,settings:X=!1,buffers:Q=!1,wal:J=!1,format:W="text"}={}){var $;let G=[D?"analyze":null,Y?"verbose":null,X?"settings":null,Q?"buffers":null,J?"wal":null].filter(Boolean).join("|"),B=($=this.headers.get("Accept"))!==null&&$!==void 0?$:"application/json";if(this.headers.set("Accept",`application/vnd.pgrst.plan+${W}; for="${B}"; options=${G};`),W==="json")return this;else return this}rollback(){return this.headers.append("Prefer","tx=rollback"),this}returns(){return this}maxAffected(D){return this.headers.append("Prefer","handling=strict"),this.headers.append("Prefer",`max-affected=${D}`),this}},lw=new RegExp("[,()]"),v5=class extends Au{eq(D,Y){return this.url.searchParams.append(D,`eq.${Y}`),this}neq(D,Y){return this.url.searchParams.append(D,`neq.${Y}`),this}gt(D,Y){return this.url.searchParams.append(D,`gt.${Y}`),this}gte(D,Y){return this.url.searchParams.append(D,`gte.${Y}`),this}lt(D,Y){return this.url.searchParams.append(D,`lt.${Y}`),this}lte(D,Y){return this.url.searchParams.append(D,`lte.${Y}`),this}like(D,Y){return this.url.searchParams.append(D,`like.${Y}`),this}likeAllOf(D,Y){return this.url.searchParams.append(D,`like(all).{${Y.join(",")}}`),this}likeAnyOf(D,Y){return this.url.searchParams.append(D,`like(any).{${Y.join(",")}}`),this}ilike(D,Y){return this.url.searchParams.append(D,`ilike.${Y}`),this}ilikeAllOf(D,Y){return this.url.searchParams.append(D,`ilike(all).{${Y.join(",")}}`),this}ilikeAnyOf(D,Y){return this.url.searchParams.append(D,`ilike(any).{${Y.join(",")}}`),this}regexMatch(D,Y){return this.url.searchParams.append(D,`match.${Y}`),this}regexIMatch(D,Y){return this.url.searchParams.append(D,`imatch.${Y}`),this}is(D,Y){return this.url.searchParams.append(D,`is.${Y}`),this}isDistinct(D,Y){return this.url.searchParams.append(D,`isdistinct.${Y}`),this}in(D,Y){let X=Array.from(new Set(Y)).map((Q)=>{if(typeof Q==="string"&&lw.test(Q))return`"${Q}"`;else return`${Q}`}).join(",");return this.url.searchParams.append(D,`in.(${X})`),this}notIn(D,Y){let X=Array.from(new Set(Y)).map((Q)=>{if(typeof Q==="string"&&lw.test(Q))return`"${Q}"`;else return`${Q}`}).join(",");return this.url.searchParams.append(D,`not.in.(${X})`),this}contains(D,Y){if(typeof Y==="string")this.url.searchParams.append(D,`cs.${Y}`);else if(Array.isArray(Y))this.url.searchParams.append(D,`cs.{${Y.join(",")}}`);else this.url.searchParams.append(D,`cs.${JSON.stringify(Y)}`);return this}containedBy(D,Y){if(typeof Y==="string")this.url.searchParams.append(D,`cd.${Y}`);else if(Array.isArray(Y))this.url.searchParams.append(D,`cd.{${Y.join(",")}}`);else this.url.searchParams.append(D,`cd.${JSON.stringify(Y)}`);return this}rangeGt(D,Y){return this.url.searchParams.append(D,`sr.${Y}`),this}rangeGte(D,Y){return this.url.searchParams.append(D,`nxl.${Y}`),this}rangeLt(D,Y){return this.url.searchParams.append(D,`sl.${Y}`),this}rangeLte(D,Y){return this.url.searchParams.append(D,`nxr.${Y}`),this}rangeAdjacent(D,Y){return this.url.searchParams.append(D,`adj.${Y}`),this}overlaps(D,Y){if(typeof Y==="string")this.url.searchParams.append(D,`ov.${Y}`);else this.url.searchParams.append(D,`ov.{${Y.join(",")}}`);return this}textSearch(D,Y,{config:X,type:Q}={}){let J="";if(Q==="plain")J="pl";else if(Q==="phrase")J="ph";else if(Q==="websearch")J="w";let W=X===void 0?"":`(${X})`;return this.url.searchParams.append(D,`${J}fts${W}.${Y}`),this}match(D){return Object.entries(D).forEach(([Y,X])=>{this.url.searchParams.append(Y,`eq.${X}`)}),this}not(D,Y,X){return this.url.searchParams.append(D,`not.${Y}.${X}`),this}or(D,{foreignTable:Y,referencedTable:X=Y}={}){let Q=X?`${X}.or`:"or";return this.url.searchParams.append(Q,`(${D})`),this}filter(D,Y,X){return this.url.searchParams.append(D,`${Y}.${X}`),this}},Eu=class{constructor(D,{headers:Y={},schema:X,fetch:Q}){this.url=D,this.headers=new Headers(Y),this.schema=X,this.fetch=Q}select(D,Y){let{head:X=!1,count:Q}=Y!==null&&Y!==void 0?Y:{},J=X?"HEAD":"GET",W=!1,$=(D!==null&&D!==void 0?D:"*").split("").map((G)=>{if(/\s/.test(G)&&!W)return"";if(G==='"')W=!W;return G}).join("");if(this.url.searchParams.set("select",$),Q)this.headers.append("Prefer",`count=${Q}`);return new v5({method:J,url:this.url,headers:this.headers,schema:this.schema,fetch:this.fetch})}insert(D,{count:Y,defaultToNull:X=!0}={}){var Q;let J="POST";if(Y)this.headers.append("Prefer",`count=${Y}`);if(!X)this.headers.append("Prefer","missing=default");if(Array.isArray(D)){let W=D.reduce(($,G)=>$.concat(Object.keys(G)),[]);if(W.length>0){let $=[...new Set(W)].map((G)=>`"${G}"`);this.url.searchParams.set("columns",$.join(","))}}return new v5({method:"POST",url:this.url,headers:this.headers,schema:this.schema,body:D,fetch:(Q=this.fetch)!==null&&Q!==void 0?Q:fetch})}upsert(D,{onConflict:Y,ignoreDuplicates:X=!1,count:Q,defaultToNull:J=!0}={}){var W;let $="POST";if(this.headers.append("Prefer",`resolution=${X?"ignore":"merge"}-duplicates`),Y!==void 0)this.url.searchParams.set("on_conflict",Y);if(Q)this.headers.append("Prefer",`count=${Q}`);if(!J)this.headers.append("Prefer","missing=default");if(Array.isArray(D)){let G=D.reduce((B,H)=>B.concat(Object.keys(H)),[]);if(G.length>0){let B=[...new Set(G)].map((H)=>`"${H}"`);this.url.searchParams.set("columns",B.join(","))}}return new v5({method:"POST",url:this.url,headers:this.headers,schema:this.schema,body:D,fetch:(W=this.fetch)!==null&&W!==void 0?W:fetch})}update(D,{count:Y}={}){var X;let Q="PATCH";if(Y)this.headers.append("Prefer",`count=${Y}`);return new v5({method:"PATCH",url:this.url,headers:this.headers,schema:this.schema,body:D,fetch:(X=this.fetch)!==null&&X!==void 0?X:fetch})}delete({count:D}={}){var Y;let X="DELETE";if(D)this.headers.append("Prefer",`count=${D}`);return new v5({method:"DELETE",url:this.url,headers:this.headers,schema:this.schema,fetch:(Y=this.fetch)!==null&&Y!==void 0?Y:fetch})}},pw=class D{constructor(Y,{headers:X={},schema:Q,fetch:J}={}){this.url=Y,this.headers=new Headers(X),this.schemaName=Q,this.fetch=J}from(Y){if(!Y||typeof Y!=="string"||Y.trim()==="")throw Error("Invalid relation name: relation must be a non-empty string.");return new Eu(new URL(`${this.url}/${Y}`),{headers:new Headers(this.headers),schema:this.schemaName,fetch:this.fetch})}schema(Y){return new D(this.url,{headers:this.headers,schema:Y,fetch:this.fetch})}rpc(Y,X={},{head:Q=!1,get:J=!1,count:W}={}){var $;let G,B=new URL(`${this.url}/rpc/${Y}`),H;if(Q||J)G=Q?"HEAD":"GET",Object.entries(X).filter(([K,U])=>U!==void 0).map(([K,U])=>[K,Array.isArray(U)?`{${U.join(",")}}`:`${U}`]).forEach(([K,U])=>{B.searchParams.append(K,U)});else G="POST",H=X;let F=new Headers(this.headers);if(W)F.set("Prefer",`count=${W}`);return new v5({method:G,url:B,headers:F,schema:this.schemaName,body:H,fetch:($=this.fetch)!==null&&$!==void 0?$:fetch})}};class jG{constructor(){}connect(){}disconnect(){}}var n3=class extends Error{constructor(D,Y){super(D);this.name="IcebergError",this.status=Y.status,this.icebergType=Y.icebergType,this.icebergCode=Y.icebergCode,this.details=Y.details,this.isCommitStateUnknown=Y.icebergType==="CommitStateUnknownException"||[500,502,504].includes(Y.status)&&Y.icebergType?.includes("CommitState")===!0}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};function Ru(D,Y,X){let Q=new URL(Y,D);if(X){for(let[J,W]of Object.entries(X))if(W!==void 0)Q.searchParams.set(J,W)}return Q.toString()}async function ju(D){if(!D||D.type==="none")return{};if(D.type==="bearer")return{Authorization:`Bearer ${D.token}`};if(D.type==="header")return{[D.name]:D.value};if(D.type==="custom")return await D.getHeaders();return{}}function Tu(D){let Y=D.fetchImpl??globalThis.fetch;return{async request({method:X,path:Q,query:J,body:W,headers:$}){let G=Ru(D.baseUrl,Q,J),B=await ju(D.auth),H=await Y(G,{method:X,headers:{...W?{"Content-Type":"application/json"}:{},...B,...$},body:W?JSON.stringify(W):void 0}),F=await H.text(),K=(H.headers.get("content-type")||"").includes("application/json"),U=K&&F?JSON.parse(F):F;if(!H.ok){let z=K?U:void 0,V=z?.error;throw new n3(V?.message??`Request failed with status ${H.status}`,{status:H.status,icebergType:V?.type,icebergCode:V?.code,details:z})}return{status:H.status,headers:H.headers,data:U}}}}function mX(D){return D.join("\x1F")}var Su=class{constructor(D,Y=""){this.client=D,this.prefix=Y}async listNamespaces(D){let Y=D?{parent:mX(D.namespace)}:void 0;return(await this.client.request({method:"GET",path:`${this.prefix}/namespaces`,query:Y})).data.namespaces.map((Q)=>({namespace:Q}))}async createNamespace(D,Y){let X={namespace:D.namespace,properties:Y?.properties};return(await this.client.request({method:"POST",path:`${this.prefix}/namespaces`,body:X})).data}async dropNamespace(D){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${mX(D.namespace)}`})}async loadNamespaceMetadata(D){return{properties:(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${mX(D.namespace)}`})).data.properties}}async namespaceExists(D){try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${mX(D.namespace)}`}),!0}catch(Y){if(Y instanceof n3&&Y.status===404)return!1;throw Y}}async createNamespaceIfNotExists(D,Y){try{return await this.createNamespace(D,Y)}catch(X){if(X instanceof n3&&X.status===409)return;throw X}}};function y5(D){return D.join("\x1F")}var Pu=class{constructor(D,Y="",X){this.client=D,this.prefix=Y,this.accessDelegation=X}async listTables(D){return(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${y5(D.namespace)}/tables`})).data.identifiers}async createTable(D,Y){let X={};if(this.accessDelegation)X["X-Iceberg-Access-Delegation"]=this.accessDelegation;return(await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${y5(D.namespace)}/tables`,body:Y,headers:X})).data.metadata}async updateTable(D,Y){let X=await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${y5(D.namespace)}/tables/${D.name}`,body:Y});return{"metadata-location":X.data["metadata-location"],metadata:X.data.metadata}}async dropTable(D,Y){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${y5(D.namespace)}/tables/${D.name}`,query:{purgeRequested:String(Y?.purge??!1)}})}async loadTable(D){let Y={};if(this.accessDelegation)Y["X-Iceberg-Access-Delegation"]=this.accessDelegation;return(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${y5(D.namespace)}/tables/${D.name}`,headers:Y})).data.metadata}async tableExists(D){let Y={};if(this.accessDelegation)Y["X-Iceberg-Access-Delegation"]=this.accessDelegation;try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${y5(D.namespace)}/tables/${D.name}`,headers:Y}),!0}catch(X){if(X instanceof n3&&X.status===404)return!1;throw X}}async createTableIfNotExists(D,Y){try{return await this.createTable(D,Y)}catch(X){if(X instanceof n3&&X.status===409)return await this.loadTable({namespace:D.namespace,name:Y.name});throw X}}},nw=class{constructor(D){let Y="v1";if(D.catalogName)Y+=`/${D.catalogName}`;let X=D.baseUrl.endsWith("/")?D.baseUrl:`${D.baseUrl}/`;this.client=Tu({baseUrl:X,auth:D.auth,fetchImpl:D.fetch}),this.accessDelegation=D.accessDelegation?.join(","),this.namespaceOps=new Su(this.client,Y),this.tableOps=new Pu(this.client,Y,this.accessDelegation)}async listNamespaces(D){return this.namespaceOps.listNamespaces(D)}async createNamespace(D,Y){return this.namespaceOps.createNamespace(D,Y)}async dropNamespace(D){await this.namespaceOps.dropNamespace(D)}async loadNamespaceMetadata(D){return this.namespaceOps.loadNamespaceMetadata(D)}async listTables(D){return this.tableOps.listTables(D)}async createTable(D,Y){return this.tableOps.createTable(D,Y)}async updateTable(D,Y){return this.tableOps.updateTable(D,Y)}async dropTable(D,Y){await this.tableOps.dropTable(D,Y)}async loadTable(D){return this.tableOps.loadTable(D)}async namespaceExists(D){return this.namespaceOps.namespaceExists(D)}async tableExists(D){return this.tableOps.tableExists(D)}async createNamespaceIfNotExists(D,Y){return this.namespaceOps.createNamespaceIfNotExists(D,Y)}async createTableIfNotExists(D,Y){return this.tableOps.createTableIfNotExists(D,Y)}};var cX=class extends Error{constructor(D){super(D);this.__isStorageError=!0,this.name="StorageError"}};function E1(D){return typeof D==="object"&&D!==null&&"__isStorageError"in D}var Iu=class extends cX{constructor(D,Y,X){super(D);this.name="StorageApiError",this.status=Y,this.statusCode=X}toJSON(){return{name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}},PG=class extends cX{constructor(D,Y){super(D);this.name="StorageUnknownError",this.originalError=Y}},xG=(D)=>{if(D)return(...Y)=>D(...Y);return(...Y)=>fetch(...Y)},Cu=()=>{return Response},IG=(D)=>{if(Array.isArray(D))return D.map((X)=>IG(X));else if(typeof D==="function"||D!==Object(D))return D;let Y={};return Object.entries(D).forEach(([X,Q])=>{let J=X.replace(/([-_][a-z])/gi,(W)=>W.toUpperCase().replace(/[-_]/g,""));Y[J]=IG(Q)}),Y},xu=(D)=>{if(typeof D!=="object"||D===null)return!1;let Y=Object.getPrototypeOf(D);return(Y===null||Y===Object.prototype||Object.getPrototypeOf(Y)===null)&&!(Symbol.toStringTag in D)&&!(Symbol.iterator in D)},_u=(D)=>{if(!D||typeof D!=="string")return!1;if(D.length===0||D.length>100)return!1;if(D.trim()!==D)return!1;if(D.includes("/")||D.includes("\\"))return!1;return/^[\w!.\*'() &$@=;:+,?-]+$/.test(D)};function i3(D){return i3=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(Y){return typeof Y}:function(Y){return Y&&typeof Symbol=="function"&&Y.constructor===Symbol&&Y!==Symbol.prototype?"symbol":typeof Y},i3(D)}function bu(D,Y){if(i3(D)!="object"||!D)return D;var X=D[Symbol.toPrimitive];if(X!==void 0){var Q=X.call(D,Y||"default");if(i3(Q)!="object")return Q;throw TypeError("@@toPrimitive must return a primitive value.")}return(Y==="string"?String:Number)(D)}function ku(D){var Y=bu(D,"string");return i3(Y)=="symbol"?Y:Y+""}function vu(D,Y,X){return(Y=ku(Y))in D?Object.defineProperty(D,Y,{value:X,enumerable:!0,configurable:!0,writable:!0}):D[Y]=X,D}function iw(D,Y){var X=Object.keys(D);if(Object.getOwnPropertySymbols){var Q=Object.getOwnPropertySymbols(D);Y&&(Q=Q.filter(function(J){return Object.getOwnPropertyDescriptor(D,J).enumerable})),X.push.apply(X,Q)}return X}function O0(D){for(var Y=1;Y<arguments.length;Y++){var X=arguments[Y]!=null?arguments[Y]:{};Y%2?iw(Object(X),!0).forEach(function(Q){vu(D,Q,X[Q])}):Object.getOwnPropertyDescriptors?Object.defineProperties(D,Object.getOwnPropertyDescriptors(X)):iw(Object(X)).forEach(function(Q){Object.defineProperty(D,Q,Object.getOwnPropertyDescriptor(X,Q))})}return D}var TG=(D)=>{var Y;return D.msg||D.message||D.error_description||(typeof D.error==="string"?D.error:(Y=D.error)===null||Y===void 0?void 0:Y.message)||JSON.stringify(D)},yu=async(D,Y,X)=>{if(D instanceof await Cu()&&!(X===null||X===void 0?void 0:X.noResolveJson))D.json().then((Q)=>{let J=D.status||500,W=(Q===null||Q===void 0?void 0:Q.statusCode)||J+"";Y(new Iu(TG(Q),J,W))}).catch((Q)=>{Y(new PG(TG(Q),Q))});else Y(new PG(TG(D),D))},fu=(D,Y,X,Q)=>{let J={method:D,headers:(Y===null||Y===void 0?void 0:Y.headers)||{}};if(D==="GET"||!Q)return J;if(xu(Q))J.headers=O0({"Content-Type":"application/json"},Y===null||Y===void 0?void 0:Y.headers),J.body=JSON.stringify(Q);else J.body=Q;if(Y===null||Y===void 0?void 0:Y.duplex)J.duplex=Y.duplex;return O0(O0({},J),X)};async function a3(D,Y,X,Q,J,W){return new Promise(($,G)=>{D(X,fu(Y,Q,J,W)).then((B)=>{if(!B.ok)throw B;if(Q===null||Q===void 0?void 0:Q.noResolveJson)return B;return B.json()}).then((B)=>$(B)).catch((B)=>yu(B,G,Q))})}async function r3(D,Y,X,Q){return a3(D,"GET",Y,X,Q)}async function T6(D,Y,X,Q,J){return a3(D,"POST",Y,Q,J,X)}async function CG(D,Y,X,Q,J){return a3(D,"PUT",Y,Q,J,X)}async function hu(D,Y,X,Q){return a3(D,"HEAD",Y,O0(O0({},X),{},{noResolveJson:!0}),Q)}async function _G(D,Y,X,Q,J){return a3(D,"DELETE",Y,Q,J,X)}var gu=class{constructor(D,Y){this.downloadFn=D,this.shouldThrowOnError=Y}then(D,Y){return this.execute().then(D,Y)}async execute(){var D=this;try{return{data:(await D.downloadFn()).body,error:null}}catch(Y){if(D.shouldThrowOnError)throw Y;if(E1(Y))return{data:null,error:Y};throw Y}}},ow;ow=Symbol.toStringTag;var uu=class{constructor(D,Y){this.downloadFn=D,this.shouldThrowOnError=Y,this[ow]="BlobDownloadBuilder",this.promise=null}asStream(){return new gu(this.downloadFn,this.shouldThrowOnError)}then(D,Y){return this.getPromise().then(D,Y)}catch(D){return this.getPromise().catch(D)}finally(D){return this.getPromise().finally(D)}getPromise(){if(!this.promise)this.promise=this.execute();return this.promise}async execute(){var D=this;try{return{data:await(await D.downloadFn()).blob(),error:null}}catch(Y){if(D.shouldThrowOnError)throw Y;if(E1(Y))return{data:null,error:Y};throw Y}}},mu={limit:100,offset:0,sortBy:{column:"name",order:"asc"}},rw={cacheControl:"3600",contentType:"text/plain;charset=UTF-8",upsert:!1},cu=class{constructor(D,Y={},X,Q){this.shouldThrowOnError=!1,this.url=D,this.headers=Y,this.bucketId=X,this.fetch=xG(Q)}throwOnError(){return this.shouldThrowOnError=!0,this}async uploadOrUpdate(D,Y,X,Q){var J=this;try{let W,$=O0(O0({},rw),Q),G=O0(O0({},J.headers),D==="POST"&&{"x-upsert":String($.upsert)}),B=$.metadata;if(typeof Blob<"u"&&X instanceof Blob){if(W=new FormData,W.append("cacheControl",$.cacheControl),B)W.append("metadata",J.encodeMetadata(B));W.append("",X)}else if(typeof FormData<"u"&&X instanceof FormData){if(W=X,!W.has("cacheControl"))W.append("cacheControl",$.cacheControl);if(B&&!W.has("metadata"))W.append("metadata",J.encodeMetadata(B))}else{if(W=X,G["cache-control"]=`max-age=${$.cacheControl}`,G["content-type"]=$.contentType,B)G["x-metadata"]=J.toBase64(J.encodeMetadata(B));if((typeof ReadableStream<"u"&&W instanceof ReadableStream||W&&typeof W==="object"&&("pipe"in W)&&typeof W.pipe==="function")&&!$.duplex)$.duplex="half"}if(Q===null||Q===void 0?void 0:Q.headers)G=O0(O0({},G),Q.headers);let H=J._removeEmptyFolders(Y),F=J._getFinalPath(H),K=await(D=="PUT"?CG:T6)(J.fetch,`${J.url}/object/${F}`,W,O0({headers:G},($===null||$===void 0?void 0:$.duplex)?{duplex:$.duplex}:{}));return{data:{path:H,id:K.Id,fullPath:K.Key},error:null}}catch(W){if(J.shouldThrowOnError)throw W;if(E1(W))return{data:null,error:W};throw W}}async upload(D,Y,X){return this.uploadOrUpdate("POST",D,Y,X)}async uploadToSignedUrl(D,Y,X,Q){var J=this;let W=J._removeEmptyFolders(D),$=J._getFinalPath(W),G=new URL(J.url+`/object/upload/sign/${$}`);G.searchParams.set("token",Y);try{let B,H=O0({upsert:rw.upsert},Q),F=O0(O0({},J.headers),{"x-upsert":String(H.upsert)});if(typeof Blob<"u"&&X instanceof Blob)B=new FormData,B.append("cacheControl",H.cacheControl),B.append("",X);else if(typeof FormData<"u"&&X instanceof FormData)B=X,B.append("cacheControl",H.cacheControl);else B=X,F["cache-control"]=`max-age=${H.cacheControl}`,F["content-type"]=H.contentType;return{data:{path:W,fullPath:(await CG(J.fetch,G.toString(),B,{headers:F})).Key},error:null}}catch(B){if(J.shouldThrowOnError)throw B;if(E1(B))return{data:null,error:B};throw B}}async createSignedUploadUrl(D,Y){var X=this;try{let Q=X._getFinalPath(D),J=O0({},X.headers);if(Y===null||Y===void 0?void 0:Y.upsert)J["x-upsert"]="true";let W=await T6(X.fetch,`${X.url}/object/upload/sign/${Q}`,{},{headers:J}),$=new URL(X.url+W.url),G=$.searchParams.get("token");if(!G)throw new cX("No token returned by API");return{data:{signedUrl:$.toString(),path:D,token:G},error:null}}catch(Q){if(X.shouldThrowOnError)throw Q;if(E1(Q))return{data:null,error:Q};throw Q}}async update(D,Y,X){return this.uploadOrUpdate("PUT",D,Y,X)}async move(D,Y,X){var Q=this;try{return{data:await T6(Q.fetch,`${Q.url}/object/move`,{bucketId:Q.bucketId,sourceKey:D,destinationKey:Y,destinationBucket:X===null||X===void 0?void 0:X.destinationBucket},{headers:Q.headers}),error:null}}catch(J){if(Q.shouldThrowOnError)throw J;if(E1(J))return{data:null,error:J};throw J}}async copy(D,Y,X){var Q=this;try{return{data:{path:(await T6(Q.fetch,`${Q.url}/object/copy`,{bucketId:Q.bucketId,sourceKey:D,destinationKey:Y,destinationBucket:X===null||X===void 0?void 0:X.destinationBucket},{headers:Q.headers})).Key},error:null}}catch(J){if(Q.shouldThrowOnError)throw J;if(E1(J))return{data:null,error:J};throw J}}async createSignedUrl(D,Y,X){var Q=this;try{let J=Q._getFinalPath(D),W=await T6(Q.fetch,`${Q.url}/object/sign/${J}`,O0({expiresIn:Y},(X===null||X===void 0?void 0:X.transform)?{transform:X.transform}:{}),{headers:Q.headers}),$=(X===null||X===void 0?void 0:X.download)?`&download=${X.download===!0?"":X.download}`:"";return W={signedUrl:encodeURI(`${Q.url}${W.signedURL}${$}`)},{data:W,error:null}}catch(J){if(Q.shouldThrowOnError)throw J;if(E1(J))return{data:null,error:J};throw J}}async createSignedUrls(D,Y,X){var Q=this;try{let J=await T6(Q.fetch,`${Q.url}/object/sign/${Q.bucketId}`,{expiresIn:Y,paths:D},{headers:Q.headers}),W=(X===null||X===void 0?void 0:X.download)?`&download=${X.download===!0?"":X.download}`:"";return{data:J.map(($)=>O0(O0({},$),{},{signedUrl:$.signedURL?encodeURI(`${Q.url}${$.signedURL}${W}`):null})),error:null}}catch(J){if(Q.shouldThrowOnError)throw J;if(E1(J))return{data:null,error:J};throw J}}download(D,Y){let X=typeof(Y===null||Y===void 0?void 0:Y.transform)<"u"?"render/image/authenticated":"object",Q=this.transformOptsToQueryString((Y===null||Y===void 0?void 0:Y.transform)||{}),J=Q?`?${Q}`:"",W=this._getFinalPath(D);return new uu(()=>r3(this.fetch,`${this.url}/${X}/${W}${J}`,{headers:this.headers,noResolveJson:!0}),this.shouldThrowOnError)}async info(D){var Y=this;let X=Y._getFinalPath(D);try{return{data:IG(await r3(Y.fetch,`${Y.url}/object/info/${X}`,{headers:Y.headers})),error:null}}catch(Q){if(Y.shouldThrowOnError)throw Q;if(E1(Q))return{data:null,error:Q};throw Q}}async exists(D){var Y=this;let X=Y._getFinalPath(D);try{return await hu(Y.fetch,`${Y.url}/object/${X}`,{headers:Y.headers}),{data:!0,error:null}}catch(Q){if(Y.shouldThrowOnError)throw Q;if(E1(Q)&&Q instanceof PG){let J=Q.originalError;if([400,404].includes(J===null||J===void 0?void 0:J.status))return{data:!1,error:Q}}throw Q}}getPublicUrl(D,Y){let X=this._getFinalPath(D),Q=[],J=(Y===null||Y===void 0?void 0:Y.download)?`download=${Y.download===!0?"":Y.download}`:"";if(J!=="")Q.push(J);let W=typeof(Y===null||Y===void 0?void 0:Y.transform)<"u"?"render/image":"object",$=this.transformOptsToQueryString((Y===null||Y===void 0?void 0:Y.transform)||{});if($!=="")Q.push($);let G=Q.join("&");if(G!=="")G=`?${G}`;return{data:{publicUrl:encodeURI(`${this.url}/${W}/public/${X}${G}`)}}}async remove(D){var Y=this;try{return{data:await _G(Y.fetch,`${Y.url}/object/${Y.bucketId}`,{prefixes:D},{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(E1(X))return{data:null,error:X};throw X}}async list(D,Y,X){var Q=this;try{let J=O0(O0(O0({},mu),Y),{},{prefix:D||""});return{data:await T6(Q.fetch,`${Q.url}/object/list/${Q.bucketId}`,J,{headers:Q.headers},X),error:null}}catch(J){if(Q.shouldThrowOnError)throw J;if(E1(J))return{data:null,error:J};throw J}}async listV2(D,Y){var X=this;try{let Q=O0({},D);return{data:await T6(X.fetch,`${X.url}/object/list-v2/${X.bucketId}`,Q,{headers:X.headers},Y),error:null}}catch(Q){if(X.shouldThrowOnError)throw Q;if(E1(Q))return{data:null,error:Q};throw Q}}encodeMetadata(D){return JSON.stringify(D)}toBase64(D){if(typeof Buffer<"u")return Buffer.from(D).toString("base64");return btoa(D)}_getFinalPath(D){return`${this.bucketId}/${D.replace(/^\/+/,"")}`}_removeEmptyFolders(D){return D.replace(/^\/|\/$/g,"").replace(/\/+/g,"/")}transformOptsToQueryString(D){let Y=[];if(D.width)Y.push(`width=${D.width}`);if(D.height)Y.push(`height=${D.height}`);if(D.resize)Y.push(`resize=${D.resize}`);if(D.format)Y.push(`format=${D.format}`);if(D.quality)Y.push(`quality=${D.quality}`);return Y.join("&")}},sw="2.89.0",tw={"X-Client-Info":`storage-js/${sw}`},lu=class{constructor(D,Y={},X,Q){this.shouldThrowOnError=!1;let J=new URL(D);if(Q===null||Q===void 0?void 0:Q.useNewHostname){if(/supabase\.(co|in|red)$/.test(J.hostname)&&!J.hostname.includes("storage.supabase."))J.hostname=J.hostname.replace("supabase.","storage.supabase.")}this.url=J.href.replace(/\/$/,""),this.headers=O0(O0({},tw),Y),this.fetch=xG(X)}throwOnError(){return this.shouldThrowOnError=!0,this}async listBuckets(D){var Y=this;try{let X=Y.listBucketOptionsToQueryString(D);return{data:await r3(Y.fetch,`${Y.url}/bucket${X}`,{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(E1(X))return{data:null,error:X};throw X}}async getBucket(D){var Y=this;try{return{data:await r3(Y.fetch,`${Y.url}/bucket/${D}`,{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(E1(X))return{data:null,error:X};throw X}}async createBucket(D,Y={public:!1}){var X=this;try{return{data:await T6(X.fetch,`${X.url}/bucket`,{id:D,name:D,type:Y.type,public:Y.public,file_size_limit:Y.fileSizeLimit,allowed_mime_types:Y.allowedMimeTypes},{headers:X.headers}),error:null}}catch(Q){if(X.shouldThrowOnError)throw Q;if(E1(Q))return{data:null,error:Q};throw Q}}async updateBucket(D,Y){var X=this;try{return{data:await CG(X.fetch,`${X.url}/bucket/${D}`,{id:D,name:D,public:Y.public,file_size_limit:Y.fileSizeLimit,allowed_mime_types:Y.allowedMimeTypes},{headers:X.headers}),error:null}}catch(Q){if(X.shouldThrowOnError)throw Q;if(E1(Q))return{data:null,error:Q};throw Q}}async emptyBucket(D){var Y=this;try{return{data:await T6(Y.fetch,`${Y.url}/bucket/${D}/empty`,{},{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(E1(X))return{data:null,error:X};throw X}}async deleteBucket(D){var Y=this;try{return{data:await _G(Y.fetch,`${Y.url}/bucket/${D}`,{},{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(E1(X))return{data:null,error:X};throw X}}listBucketOptionsToQueryString(D){let Y={};if(D){if("limit"in D)Y.limit=String(D.limit);if("offset"in D)Y.offset=String(D.offset);if(D.search)Y.search=D.search;if(D.sortColumn)Y.sortColumn=D.sortColumn;if(D.sortOrder)Y.sortOrder=D.sortOrder}return Object.keys(Y).length>0?"?"+new URLSearchParams(Y).toString():""}},du=class{constructor(D,Y={},X){this.shouldThrowOnError=!1,this.url=D.replace(/\/$/,""),this.headers=O0(O0({},tw),Y),this.fetch=xG(X)}throwOnError(){return this.shouldThrowOnError=!0,this}async createBucket(D){var Y=this;try{return{data:await T6(Y.fetch,`${Y.url}/bucket`,{name:D},{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(E1(X))return{data:null,error:X};throw X}}async listBuckets(D){var Y=this;try{let X=new URLSearchParams;if((D===null||D===void 0?void 0:D.limit)!==void 0)X.set("limit",D.limit.toString());if((D===null||D===void 0?void 0:D.offset)!==void 0)X.set("offset",D.offset.toString());if(D===null||D===void 0?void 0:D.sortColumn)X.set("sortColumn",D.sortColumn);if(D===null||D===void 0?void 0:D.sortOrder)X.set("sortOrder",D.sortOrder);if(D===null||D===void 0?void 0:D.search)X.set("search",D.search);let Q=X.toString(),J=Q?`${Y.url}/bucket?${Q}`:`${Y.url}/bucket`;return{data:await r3(Y.fetch,J,{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(E1(X))return{data:null,error:X};throw X}}async deleteBucket(D){var Y=this;try{return{data:await _G(Y.fetch,`${Y.url}/bucket/${D}`,{},{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(E1(X))return{data:null,error:X};throw X}}from(D){var Y=this;if(!_u(D))throw new cX("Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.");let X=new nw({baseUrl:this.url,catalogName:D,auth:{type:"custom",getHeaders:async()=>Y.headers},fetch:this.fetch}),Q=this.shouldThrowOnError;return new Proxy(X,{get(J,W){let $=J[W];if(typeof $!=="function")return $;return async(...G)=>{try{return{data:await $.apply(J,G),error:null}}catch(B){if(Q)throw B;return{data:null,error:B}}}}})}},bG={"X-Client-Info":`storage-js/${sw}`,"Content-Type":"application/json"},ew=class extends Error{constructor(D){super(D);this.__isStorageVectorsError=!0,this.name="StorageVectorsError"}};function D6(D){return typeof D==="object"&&D!==null&&"__isStorageVectorsError"in D}var SG=class extends ew{constructor(D,Y,X){super(D);this.name="StorageVectorsApiError",this.status=Y,this.statusCode=X}toJSON(){return{name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}},pu=class extends ew{constructor(D,Y){super(D);this.name="StorageVectorsUnknownError",this.originalError=Y}};var kG=(D)=>{if(D)return(...Y)=>D(...Y);return(...Y)=>fetch(...Y)};var nu=(D)=>{if(typeof D!=="object"||D===null)return!1;let Y=Object.getPrototypeOf(D);return(Y===null||Y===Object.prototype||Object.getPrototypeOf(Y)===null)&&!(Symbol.toStringTag in D)&&!(Symbol.iterator in D)};var aw=(D)=>D.msg||D.message||D.error_description||D.error||JSON.stringify(D),iu=async(D,Y,X)=>{if(D&&typeof D==="object"&&"status"in D&&"ok"in D&&typeof D.status==="number"&&!(X===null||X===void 0?void 0:X.noResolveJson)){let Q=D.status||500,J=D;if(typeof J.json==="function")J.json().then((W)=>{let $=(W===null||W===void 0?void 0:W.statusCode)||(W===null||W===void 0?void 0:W.code)||Q+"";Y(new SG(aw(W),Q,$))}).catch(()=>{let W=Q+"";Y(new SG(J.statusText||`HTTP ${Q} error`,Q,W))});else{let W=Q+"";Y(new SG(J.statusText||`HTTP ${Q} error`,Q,W))}}else Y(new pu(aw(D),D))},ru=(D,Y,X,Q)=>{let J={method:D,headers:(Y===null||Y===void 0?void 0:Y.headers)||{}};if(D==="GET"||!Q)return J;if(nu(Q))J.headers=O0({"Content-Type":"application/json"},Y===null||Y===void 0?void 0:Y.headers),J.body=JSON.stringify(Q);else J.body=Q;return O0(O0({},J),X)};async function au(D,Y,X,Q,J,W){return new Promise(($,G)=>{D(X,ru(Y,Q,J,W)).then((B)=>{if(!B.ok)throw B;if(Q===null||Q===void 0?void 0:Q.noResolveJson)return B;let H=B.headers.get("content-type");if(!H||!H.includes("application/json"))return{};return B.json()}).then((B)=>$(B)).catch((B)=>iu(B,G,Q))})}async function Y6(D,Y,X,Q,J){return au(D,"POST",Y,Q,J,X)}var ou=class{constructor(D,Y={},X){this.shouldThrowOnError=!1,this.url=D.replace(/\/$/,""),this.headers=O0(O0({},bG),Y),this.fetch=kG(X)}throwOnError(){return this.shouldThrowOnError=!0,this}async createIndex(D){var Y=this;try{return{data:await Y6(Y.fetch,`${Y.url}/CreateIndex`,D,{headers:Y.headers})||{},error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}async getIndex(D,Y){var X=this;try{return{data:await Y6(X.fetch,`${X.url}/GetIndex`,{vectorBucketName:D,indexName:Y},{headers:X.headers}),error:null}}catch(Q){if(X.shouldThrowOnError)throw Q;if(D6(Q))return{data:null,error:Q};throw Q}}async listIndexes(D){var Y=this;try{return{data:await Y6(Y.fetch,`${Y.url}/ListIndexes`,D,{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}async deleteIndex(D,Y){var X=this;try{return{data:await Y6(X.fetch,`${X.url}/DeleteIndex`,{vectorBucketName:D,indexName:Y},{headers:X.headers})||{},error:null}}catch(Q){if(X.shouldThrowOnError)throw Q;if(D6(Q))return{data:null,error:Q};throw Q}}},su=class{constructor(D,Y={},X){this.shouldThrowOnError=!1,this.url=D.replace(/\/$/,""),this.headers=O0(O0({},bG),Y),this.fetch=kG(X)}throwOnError(){return this.shouldThrowOnError=!0,this}async putVectors(D){var Y=this;try{if(D.vectors.length<1||D.vectors.length>500)throw Error("Vector batch size must be between 1 and 500 items");return{data:await Y6(Y.fetch,`${Y.url}/PutVectors`,D,{headers:Y.headers})||{},error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}async getVectors(D){var Y=this;try{return{data:await Y6(Y.fetch,`${Y.url}/GetVectors`,D,{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}async listVectors(D){var Y=this;try{if(D.segmentCount!==void 0){if(D.segmentCount<1||D.segmentCount>16)throw Error("segmentCount must be between 1 and 16");if(D.segmentIndex!==void 0){if(D.segmentIndex<0||D.segmentIndex>=D.segmentCount)throw Error(`segmentIndex must be between 0 and ${D.segmentCount-1}`)}}return{data:await Y6(Y.fetch,`${Y.url}/ListVectors`,D,{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}async queryVectors(D){var Y=this;try{return{data:await Y6(Y.fetch,`${Y.url}/QueryVectors`,D,{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}async deleteVectors(D){var Y=this;try{if(D.keys.length<1||D.keys.length>500)throw Error("Keys batch size must be between 1 and 500 items");return{data:await Y6(Y.fetch,`${Y.url}/DeleteVectors`,D,{headers:Y.headers})||{},error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}},tu=class{constructor(D,Y={},X){this.shouldThrowOnError=!1,this.url=D.replace(/\/$/,""),this.headers=O0(O0({},bG),Y),this.fetch=kG(X)}throwOnError(){return this.shouldThrowOnError=!0,this}async createBucket(D){var Y=this;try{return{data:await Y6(Y.fetch,`${Y.url}/CreateVectorBucket`,{vectorBucketName:D},{headers:Y.headers})||{},error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}async getBucket(D){var Y=this;try{return{data:await Y6(Y.fetch,`${Y.url}/GetVectorBucket`,{vectorBucketName:D},{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}async listBuckets(D={}){var Y=this;try{return{data:await Y6(Y.fetch,`${Y.url}/ListVectorBuckets`,D,{headers:Y.headers}),error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}async deleteBucket(D){var Y=this;try{return{data:await Y6(Y.fetch,`${Y.url}/DeleteVectorBucket`,{vectorBucketName:D},{headers:Y.headers})||{},error:null}}catch(X){if(Y.shouldThrowOnError)throw X;if(D6(X))return{data:null,error:X};throw X}}},eu=class extends tu{constructor(D,Y={}){super(D,Y.headers||{},Y.fetch)}from(D){return new Dm(this.url,this.headers,D,this.fetch)}async createBucket(D){var Y=()=>super.createBucket,X=this;return Y().call(X,D)}async getBucket(D){var Y=()=>super.getBucket,X=this;return Y().call(X,D)}async listBuckets(D={}){var Y=()=>super.listBuckets,X=this;return Y().call(X,D)}async deleteBucket(D){var Y=()=>super.deleteBucket,X=this;return Y().call(X,D)}},Dm=class extends ou{constructor(D,Y,X,Q){super(D,Y,Q);this.vectorBucketName=X}async createIndex(D){var Y=()=>super.createIndex,X=this;return Y().call(X,O0(O0({},D),{},{vectorBucketName:X.vectorBucketName}))}async listIndexes(D={}){var Y=()=>super.listIndexes,X=this;return Y().call(X,O0(O0({},D),{},{vectorBucketName:X.vectorBucketName}))}async getIndex(D){var Y=()=>super.getIndex,X=this;return Y().call(X,X.vectorBucketName,D)}async deleteIndex(D){var Y=()=>super.deleteIndex,X=this;return Y().call(X,X.vectorBucketName,D)}index(D){return new Ym(this.url,this.headers,this.vectorBucketName,D,this.fetch)}},Ym=class extends su{constructor(D,Y,X,Q,J){super(D,Y,J);this.vectorBucketName=X,this.indexName=Q}async putVectors(D){var Y=()=>super.putVectors,X=this;return Y().call(X,O0(O0({},D),{},{vectorBucketName:X.vectorBucketName,indexName:X.indexName}))}async getVectors(D){var Y=()=>super.getVectors,X=this;return Y().call(X,O0(O0({},D),{},{vectorBucketName:X.vectorBucketName,indexName:X.indexName}))}async listVectors(D={}){var Y=()=>super.listVectors,X=this;return Y().call(X,O0(O0({},D),{},{vectorBucketName:X.vectorBucketName,indexName:X.indexName}))}async queryVectors(D){var Y=()=>super.queryVectors,X=this;return Y().call(X,O0(O0({},D),{},{vectorBucketName:X.vectorBucketName,indexName:X.indexName}))}async deleteVectors(D){var Y=()=>super.deleteVectors,X=this;return Y().call(X,O0(O0({},D),{},{vectorBucketName:X.vectorBucketName,indexName:X.indexName}))}},DL=class extends lu{constructor(D,Y={},X,Q){super(D,Y,X,Q)}from(D){return new cu(this.url,this.headers,D,this.fetch)}get vectors(){return new eu(this.url+"/vector",{headers:this.headers,fetch:this.fetch})}get analytics(){return new du(this.url+"/iceberg",this.headers,this.fetch)}};var Xm=()=>Promise.resolve({data:{session:null,user:null},error:null}),Qm={get:(D,Y)=>{if(Y==="constructor")return D.constructor;if(Y==="then"||Y==="catch"||Y==="finally")return;if(typeof Y==="symbol")return;if(Y==="getSession")return()=>Promise.resolve({data:{session:null,user:null},error:null});if(Y==="onAuthStateChange")return()=>({data:{subscription:{unsubscribe:()=>{}}},error:null});return Xm}};class YL{constructor(D){return this.options=D,new Proxy(this,Qm)}}class vG extends YL{}var Jm="2.89.0",o3="";if(typeof Deno<"u")o3="deno";else if(typeof document<"u")o3="web";else if(typeof navigator<"u"&&navigator.product==="ReactNative")o3="react-native";else o3="node";var Wm={"X-Client-Info":`supabase-js-${o3}/${Jm}`},$m={headers:Wm},Gm={schema:"public"},Bm={autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,flowType:"implicit"},Hm={};function s3(D){return s3=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(Y){return typeof Y}:function(Y){return Y&&typeof Symbol=="function"&&Y.constructor===Symbol&&Y!==Symbol.prototype?"symbol":typeof Y},s3(D)}function Fm(D,Y){if(s3(D)!="object"||!D)return D;var X=D[Symbol.toPrimitive];if(X!==void 0){var Q=X.call(D,Y||"default");if(s3(Q)!="object")return Q;throw TypeError("@@toPrimitive must return a primitive value.")}return(Y==="string"?String:Number)(D)}function qm(D){var Y=Fm(D,"string");return s3(Y)=="symbol"?Y:Y+""}function Km(D,Y,X){return(Y=qm(Y))in D?Object.defineProperty(D,Y,{value:X,enumerable:!0,configurable:!0,writable:!0}):D[Y]=X,D}function XL(D,Y){var X=Object.keys(D);if(Object.getOwnPropertySymbols){var Q=Object.getOwnPropertySymbols(D);Y&&(Q=Q.filter(function(J){return Object.getOwnPropertyDescriptor(D,J).enumerable})),X.push.apply(X,Q)}return X}function x1(D){for(var Y=1;Y<arguments.length;Y++){var X=arguments[Y]!=null?arguments[Y]:{};Y%2?XL(Object(X),!0).forEach(function(Q){Km(D,Q,X[Q])}):Object.getOwnPropertyDescriptors?Object.defineProperties(D,Object.getOwnPropertyDescriptors(X)):XL(Object(X)).forEach(function(Q){Object.defineProperty(D,Q,Object.getOwnPropertyDescriptor(X,Q))})}return D}var zm=(D)=>{if(D)return(...Y)=>D(...Y);return(...Y)=>fetch(...Y)},Um=()=>{return Headers},Vm=(D,Y,X)=>{let Q=zm(X),J=Um();return async(W,$)=>{var G;let B=(G=await Y())!==null&&G!==void 0?G:D,H=new J($===null||$===void 0?void 0:$.headers);if(!H.has("apikey"))H.set("apikey",D);if(!H.has("Authorization"))H.set("Authorization",`Bearer ${B}`);return Q(W,x1(x1({},$),{},{headers:H}))}};function wm(D){return D.endsWith("/")?D:D+"/"}function Lm(D,Y){var X,Q;let{db:J,auth:W,realtime:$,global:G}=D,{db:B,auth:H,realtime:F,global:K}=Y,U={db:x1(x1({},B),J),auth:x1(x1({},H),W),realtime:x1(x1({},F),$),storage:{},global:x1(x1(x1({},K),G),{},{headers:x1(x1({},(X=K===null||K===void 0?void 0:K.headers)!==null&&X!==void 0?X:{}),(Q=G===null||G===void 0?void 0:G.headers)!==null&&Q!==void 0?Q:{})}),accessToken:async()=>""};if(D.accessToken)U.accessToken=D.accessToken;else delete U.accessToken;return U}function Mm(D){let Y=D===null||D===void 0?void 0:D.trim();if(!Y)throw Error("supabaseUrl is required.");if(!Y.match(/^https?:\/\//i))throw Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.");try{return new URL(wm(Y))}catch(X){throw Error("Invalid supabaseUrl: Provided URL is malformed.")}}var Om=class extends vG{constructor(D){super(D)}},Nm=class{constructor(D,Y,X){var Q,J;this.supabaseUrl=D,this.supabaseKey=Y;let W=Mm(D);if(!Y)throw Error("supabaseKey is required.");this.realtimeUrl=new URL("realtime/v1",W),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace("http","ws"),this.authUrl=new URL("auth/v1",W),this.storageUrl=new URL("storage/v1",W),this.functionsUrl=new URL("functions/v1",W);let $=`sb-${W.hostname.split(".")[0]}-auth-token`,G={db:Gm,realtime:Hm,auth:x1(x1({},Bm),{},{storageKey:$}),global:$m},B=Lm(X!==null&&X!==void 0?X:{},G);if(this.storageKey=(Q=B.auth.storageKey)!==null&&Q!==void 0?Q:"",this.headers=(J=B.global.headers)!==null&&J!==void 0?J:{},!B.accessToken){var H;this.auth=this._initSupabaseAuthClient((H=B.auth)!==null&&H!==void 0?H:{},this.headers,B.global.fetch)}else this.accessToken=B.accessToken,this.auth=new Proxy({},{get:(F,K)=>{throw Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(K)} is not possible`)}});if(this.fetch=Vm(Y,this._getAccessToken.bind(this),B.global.fetch),this.realtime=this._initRealtimeClient(x1({headers:this.headers,accessToken:this._getAccessToken.bind(this)},B.realtime)),this.accessToken)this.accessToken().then((F)=>this.realtime.setAuth(F)).catch((F)=>console.warn("Failed to set initial Realtime auth token:",F));if(this.rest=new pw(new URL("rest/v1",W).href,{headers:this.headers,schema:B.db.schema,fetch:this.fetch}),this.storage=new DL(this.storageUrl.href,this.headers,this.fetch,X===null||X===void 0?void 0:X.storage),!B.accessToken)this._listenForAuthEvents()}get functions(){return new S6.FunctionsClient(this.functionsUrl.href,{headers:this.headers,customFetch:this.fetch})}from(D){return this.rest.from(D)}schema(D){return this.rest.schema(D)}rpc(D,Y={},X={head:!1,get:!1,count:void 0}){return this.rest.rpc(D,Y,X)}channel(D,Y={config:{}}){return this.realtime.channel(D,Y)}getChannels(){return this.realtime.getChannels()}removeChannel(D){return this.realtime.removeChannel(D)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getAccessToken(){var D=this,Y,X;if(D.accessToken)return await D.accessToken();let{data:Q}=await D.auth.getSession();return(Y=(X=Q.session)===null||X===void 0?void 0:X.access_token)!==null&&Y!==void 0?Y:D.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:D,persistSession:Y,detectSessionInUrl:X,storage:Q,userStorage:J,storageKey:W,flowType:$,lock:G,debug:B,throwOnError:H},F,K){let U={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new Om({url:this.authUrl.href,headers:x1(x1({},U),F),storageKey:W,autoRefreshToken:D,persistSession:Y,detectSessionInUrl:X,storage:Q,userStorage:J,flowType:$,lock:G,debug:B,throwOnError:H,fetch:K,hasCustomAuthorizationHeader:Object.keys(this.headers).some((z)=>z.toLowerCase()==="authorization")})}_initRealtimeClient(D){return new jG(this.realtimeUrl.href,x1(x1({},D),{},{params:x1(x1({},{apikey:this.supabaseKey}),D===null||D===void 0?void 0:D.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((D,Y)=>{this._handleTokenChanged(D,"CLIENT",Y===null||Y===void 0?void 0:Y.access_token)})}_handleTokenChanged(D,Y,X){if((D==="TOKEN_REFRESHED"||D==="SIGNED_IN")&&this.changedAccessToken!==X)this.changedAccessToken=X,this.realtime.setAuth(X);else if(D==="SIGNED_OUT"){if(this.realtime.setAuth(),Y=="STORAGE")this.auth.signOut();this.changedAccessToken=void 0}}},QL=(D,Y,X)=>{return new Nm(D,Y,X)};function Zm(){if(typeof window<"u")return!1;if(typeof process>"u")return!1;let D=process.version;if(D===void 0||D===null)return!1;let Y=D.match(/^v(\d+)\./);if(!Y)return!1;return parseInt(Y[1],10)<=18}if(Zm())console.warn("⚠️ Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217");var O2=a1(uG(),1),gT=a1(KM(),1),MJ=a1(hQ(),1);function gZ(D,Y){let Q=["normal","bold","dim","italic","underline","strikethrough"].indexOf(D),J="\x1B[";return"\x1B["+Q+"m"+Y+"\x1B[0m"}class G1{title=null;headers=[];rows=[];static narrowTheme={top:["╔","═","╤","╗"],row:["║"," ","│","║"],div:["╟","─","┼","╢"],bot:["╚","═","╧","╝"]};static wideTheme={top:["╔═","═","═╤═","═╗"],row:["║ "," "," │ "," ║"],div:["╟─","─","─┼─","─╢"],bot:["╚═","═","═╧═","═╝"]};static roundTheme={top:["╭─","─","─┬─","─╮"],row:["│ "," "," │ "," │"],div:["├─","─","─┼─","─┤"],bot:["╰─","─","─┴─","─╯"]};theme=G1.wideTheme;columnWidth(){let D=[this.headers,...this.rows].filter((X)=>X.length>0),Y=D[0].map((X)=>this.cast(X).length);for(let X of D.slice(1))for(let Q=0;Q<Y.length;Q++){let J=this.cast(X[Q]).length;if(J>Y[Q])Y[Q]=J}return Y}cast(D){if(typeof D==="object")return"obj";if(D!==void 0&&typeof D.toString==="function")return D.toString();else return""}renderTitle(){return"[ "+this.title+" ]"}renderLine(D){let Y=this.columnWidth();return D[0]+Y.map((X)=>D[1].repeat(X)).join(D[2])+D[3]}renderCell(D,Y,X=!1){let Q=this.cast(D),J=X?gZ("bold",Q):Q,W=Y-Q.length,$=this.theme.row[1];switch(typeof D){case"number":return $.repeat(W)+J;case"string":return J+$.repeat(W);case"boolean":case"object":return $.repeat(Math.ceil(W/2))+gZ("italic",Q)+$.repeat(Math.floor(W/2));default:return $.repeat(W)}}renderRow(D,Y=!1){let X=this.theme.row,Q=this.columnWidth();return X[0]+D.map((J,W)=>this.renderCell(J,Q[W],Y)).join(X[2])+X[3]}toString(){let D=this.theme,Y=this.headers.length>0,X=this.rows.length>0;return[this.title?this.renderTitle():"",Y||X?this.renderLine(D.top):"",Y?this.renderRow(this.headers,!0):"",Y&&X?this.renderLine(D.div):"",...this.rows.map((Q)=>this.renderRow(Q)),Y||X?this.renderLine(D.bot):""].filter((Q)=>Q.length>0).join(`
|
|
195
195
|
`)}}async function gQ(D){try{let X=`https://registry.npmjs.org/${encodeURIComponent(D.toLowerCase())}`,Q=await fetch(X,{headers:{accept:"application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*"}});if(!Q.ok)return null;return(await Q.json())["dist-tags"]?.latest||null}catch{return null}}async function f0(){let D=await gQ("@capgo/cli")??"",Y=D?.split(".")[0];if(D!==f8.version)q.warning(`\uD83D\uDEA8 You are using @capgo/cli@${f8.version} it's not the latest version.
|
|
196
|
-
Please use @capgo/cli@${D}" or @capgo/cli@${Y} to keep up to date with the latest features and bug fixes.`)}function _a(D){return new Promise((Y)=>{setTimeout(Y,D)})}function ba(D){return new Date(D||"").toLocaleTimeString()}async function U8(D,Y,X,Q,J,W="✅"){await Z0(X,{channel:D,event:Q,icon:W,user_id:Y,...J?{tags:{"app-id":J}}:{},notify:!1})}async function ka(D,Y,X,Q){if(!E0(Y))return;throw await U8(D,X,Q,"canceled",void 0,"\uD83E\uDD37"),Error("Command cancelled")}async function va(D,Y,X){try{let Q=await c8(),J=X?{...Y,rangeStart:X}:{...Y},W=await fetch(`${Q.hostApi}/private/stats`,{method:"POST",headers:{"Content-Type":"application/json",capgkey:D},body:JSON.stringify(J)});if(!W.ok)throw Error(`HTTP error! status: ${W.status}`);let $=await W.json();if($?.length>0)return $}catch(Q){console.error("Cannot get devices",Q),q.error(`Cannot get stats ${m(Q)}`)}return[]}function ya(D){let Y={get:{summary:()=>"Update request by device. Waiting for download…",level:"info",snag:"done"},delete:{summary:()=>"Bundle deleted on device",level:"info"},set:{summary:()=>"Bundle set on device ❤️",level:"info",snag:"set",stop:!0},NoChannelOrOverride:{summary:()=>"No default channel/override; create it in channel settings",level:"error"},needPlanUpgrade:{summary:({baseUrl:X})=>`Out of quota. Upgrade plan: ${X}/settings/organization/plans`,level:"error"},missingBundle:{summary:()=>"Requested bundle not found on server",level:"error"},noNew:{summary:()=>"Device already has latest available version",level:"info"},disablePlatformIos:{summary:()=>"iOS platform disabled in channel",level:"error"},disablePlatformAndroid:{summary:()=>"Android platform disabled in channel",level:"error"},disableAutoUpdate:{summary:()=>"Automatic updates disabled in channel",level:"error"},disableAutoUpdateToMajor:{summary:()=>"Auto-update to major versions disabled",level:"error"},disableAutoUpdateToMinor:{summary:()=>"Auto-update to minor versions disabled",level:"error"},disableAutoUpdateToPatch:{summary:()=>"Auto-update to patch versions disabled",level:"error"},disableAutoUpdateUnderNative:{summary:()=>"Channel update version is lower than device native",level:"error"},disableDevBuild:{summary:()=>"Dev build updates disabled in channel",level:"error"},disableProdBuild:{summary:()=>"Prod build updates disabled in channel",level:"error"},disableEmulator:{summary:()=>"Emulator updates disabled in channel",level:"error"},disableDevice:{summary:()=>"Physical device updates disabled in channel",level:"error"},cannotGetBundle:{summary:()=>"Cannot retrieve bundle from channel",level:"error"},cannotUpdateViaPrivateChannel:{summary:()=>"No access to private channel",level:"error"},channelMisconfigured:{summary:()=>"Channel configuration invalid or incomplete",level:"error"},disableAutoUpdateMetadata:{summary:()=>"Auto-update on metadata disabled",level:"error"},set_fail:{summary:()=>"Bundle set failed. Possibly corrupted",level:"error"},reset:{summary:()=>"Device reset to builtin bundle",level:"warn"},update_fail:{summary:()=>"Installed bundle failed to call notifyAppReady",level:"error"},checksum_fail:{summary:()=>"Downloaded bundle checksum validation failed",level:"error"},windows_path_fail:{summary:()=>"Bundle contains illegal Windows-style paths",level:"error"},canonical_path_fail:{summary:()=>"Bundle contains non-canonical paths",level:"error"},directory_path_fail:{summary:()=>"Bundle ZIP contains invalid directory paths",level:"error"},unzip_fail:{summary:()=>"Failed to unzip bundle on device",level:"error"},low_mem_fail:{summary:()=>"Download failed due to low device memory",level:"error"},app_moved_to_background:{summary:()=>"App moved to background",level:"info"},app_moved_to_foreground:{summary:()=>"App moved to foreground",level:"info"},decrypt_fail:{summary:()=>"Failed to decrypt downloaded bundle",level:"error"},getChannel:{summary:()=>"Queried current channel on device",level:"info"},setChannel:{summary:()=>"Channel set on device",level:"info"},InvalidIp:{summary:()=>"Device appears in Google datacenter; blocking recent updates (<4h)",level:"warn"},uninstall:{summary:()=>"App uninstalled or Capgo data cleared on device",level:"warn"}};if(D.action.startsWith("download_")){let X=D.action.split("_")[1];if(X==="complete")return{summary:()=>"Download complete; relaunch app to apply",level:"info",snag:"downloaded"};if(X==="fail")return{summary:()=>"Download failed on device",level:"error"};return{summary:()=>`Downloading ${X}%`,level:"info"}}return Y[D.action]||null}async function fa(D,Y,X,Q,J,W){let $=ya(D);if(!$)return{};if($.snag)await U8(Y,X,Q,$.snag);let G=ba(D.created_at),B=D.action,H=D.version_id?`(version #${D.version_id})`:"",F=D.version?` (version ${D.version})`:H,K=`${$.summary({data:D,baseAppUrl:J,baseUrl:W})}${F}`;return{row:[G,D.device_id,B,K],stop:$.stop}}async function sB(D,Y,X,Q,J){let W=!0,$=await c8(),G=`${$.hostWeb}/app/${X}`;await U8(D,Q,Y,"Use waitlog",X);let B={appId:X,devicesId:J?[J]:void 0,order:[{key:"created_at",sortable:"desc"}],rangeStart:new Date().toISOString()},H=null,F=new Set,K=d0(),U=`${$.host}/docs/plugins/updater/debugging/#sent-from-the-backend`;K.start(`Waiting for logs (Expect delay of 30 sec) more info: ${U}`);while(W){await _a(5000);let z=await va(Y,B,H);if(z.length>0){let V=z.reduce((Z,M)=>{let E=new Date(M.created_at).getTime();return Math.max(Z,E)},H?new Date(H).getTime():0);if(V>0)H=new Date(V).toISOString();let w=z.filter((Z)=>{let M=`${Z.app_id}|${Z.device_id}|${Z.action}|${Z.version_id}|${Z.created_at}`;if(F.has(M))return!1;return F.add(M),!0}).sort((Z,M)=>new Date(Z.created_at).getTime()-new Date(M.created_at).getTime()),L=new G1;L.headers=["Time","Device","Key","Message"],L.theme=G1.roundTheme,L.rows=[];let O=!1;for(let Z of w){let{row:M,stop:E}=await fa(Z,D,Q,Y,G,$.hostWeb);if(M)L.rows.push(M);if(E)O=!0}if(L.rows.length)K.stop(""),q.info(L.toString()),K.start(`Waiting for logs (Expect delay of 30 sec) more info: ${U}`);if(O){W=!1;break}}}return K.stop("Stop watching logs"),Promise.resolve()}async function uZ(D,Y){F0("Debug Live update in Capgo"),await f0(),Y.apikey=Y.apikey||X0();let X=await U0();D=_0(D,X?.config);let Q=Y.device;if(!Y.apikey)throw q.error("Missing API key, you need to provide an API key to delete your app"),Error("Missing API key");if(!D)throw q.error("Missing argument, you need to provide a appId, or be in a capacitor project"),Error("Missing appId");let J=await w0(Y.apikey,Y.supaHost,Y.supaAnon),W=await
|
|
196
|
+
Please use @capgo/cli@${D}" or @capgo/cli@${Y} to keep up to date with the latest features and bug fixes.`)}function _a(D){return new Promise((Y)=>{setTimeout(Y,D)})}function ba(D){return new Date(D||"").toLocaleTimeString()}async function U8(D,Y,X,Q,J,W="✅"){await Z0(X,{channel:D,event:Q,icon:W,user_id:Y,...J?{tags:{"app-id":J}}:{},notify:!1})}async function ka(D,Y,X,Q){if(!E0(Y))return;throw await U8(D,X,Q,"canceled",void 0,"\uD83E\uDD37"),Error("Command cancelled")}async function va(D,Y,X){try{let Q=await c8(),J=X?{...Y,rangeStart:X}:{...Y},W=await fetch(`${Q.hostApi}/private/stats`,{method:"POST",headers:{"Content-Type":"application/json",capgkey:D},body:JSON.stringify(J)});if(!W.ok)throw Error(`HTTP error! status: ${W.status}`);let $=await W.json();if($?.length>0)return $}catch(Q){console.error("Cannot get devices",Q),q.error(`Cannot get stats ${m(Q)}`)}return[]}function ya(D){let Y={get:{summary:()=>"Update request by device. Waiting for download…",level:"info",snag:"done"},delete:{summary:()=>"Bundle deleted on device",level:"info"},set:{summary:()=>"Bundle set on device ❤️",level:"info",snag:"set",stop:!0},NoChannelOrOverride:{summary:()=>"No default channel/override; create it in channel settings",level:"error"},needPlanUpgrade:{summary:({baseUrl:X})=>`Out of quota. Upgrade plan: ${X}/settings/organization/plans`,level:"error"},missingBundle:{summary:()=>"Requested bundle not found on server",level:"error"},noNew:{summary:()=>"Device already has latest available version",level:"info"},disablePlatformIos:{summary:()=>"iOS platform disabled in channel",level:"error"},disablePlatformAndroid:{summary:()=>"Android platform disabled in channel",level:"error"},disableAutoUpdate:{summary:()=>"Automatic updates disabled in channel",level:"error"},disableAutoUpdateToMajor:{summary:()=>"Auto-update to major versions disabled",level:"error"},disableAutoUpdateToMinor:{summary:()=>"Auto-update to minor versions disabled",level:"error"},disableAutoUpdateToPatch:{summary:()=>"Auto-update to patch versions disabled",level:"error"},disableAutoUpdateUnderNative:{summary:()=>"Channel update version is lower than device native",level:"error"},disableDevBuild:{summary:()=>"Dev build updates disabled in channel",level:"error"},disableProdBuild:{summary:()=>"Prod build updates disabled in channel",level:"error"},disableEmulator:{summary:()=>"Emulator updates disabled in channel",level:"error"},disableDevice:{summary:()=>"Physical device updates disabled in channel",level:"error"},cannotGetBundle:{summary:()=>"Cannot retrieve bundle from channel",level:"error"},cannotUpdateViaPrivateChannel:{summary:()=>"No access to private channel",level:"error"},channelMisconfigured:{summary:()=>"Channel configuration invalid or incomplete",level:"error"},disableAutoUpdateMetadata:{summary:()=>"Auto-update on metadata disabled",level:"error"},set_fail:{summary:()=>"Bundle set failed. Possibly corrupted",level:"error"},reset:{summary:()=>"Device reset to builtin bundle",level:"warn"},update_fail:{summary:()=>"Installed bundle failed to call notifyAppReady",level:"error"},checksum_fail:{summary:()=>"Downloaded bundle checksum validation failed",level:"error"},windows_path_fail:{summary:()=>"Bundle contains illegal Windows-style paths",level:"error"},canonical_path_fail:{summary:()=>"Bundle contains non-canonical paths",level:"error"},directory_path_fail:{summary:()=>"Bundle ZIP contains invalid directory paths",level:"error"},unzip_fail:{summary:()=>"Failed to unzip bundle on device",level:"error"},low_mem_fail:{summary:()=>"Download failed due to low device memory",level:"error"},app_moved_to_background:{summary:()=>"App moved to background",level:"info"},app_moved_to_foreground:{summary:()=>"App moved to foreground",level:"info"},decrypt_fail:{summary:()=>"Failed to decrypt downloaded bundle",level:"error"},getChannel:{summary:()=>"Queried current channel on device",level:"info"},setChannel:{summary:()=>"Channel set on device",level:"info"},InvalidIp:{summary:()=>"Device appears in Google datacenter; blocking recent updates (<4h)",level:"warn"},uninstall:{summary:()=>"App uninstalled or Capgo data cleared on device",level:"warn"}};if(D.action.startsWith("download_")){let X=D.action.split("_")[1];if(X==="complete")return{summary:()=>"Download complete; relaunch app to apply",level:"info",snag:"downloaded"};if(X==="fail")return{summary:()=>"Download failed on device",level:"error"};return{summary:()=>`Downloading ${X}%`,level:"info"}}return Y[D.action]||null}async function fa(D,Y,X,Q,J,W){let $=ya(D);if(!$)return{};if($.snag)await U8(Y,X,Q,$.snag);let G=ba(D.created_at),B=D.action,H=D.version_id?`(version #${D.version_id})`:"",F=D.version?` (version ${D.version})`:H,K=`${$.summary({data:D,baseAppUrl:J,baseUrl:W})}${F}`;return{row:[G,D.device_id,B,K],stop:$.stop}}async function sB(D,Y,X,Q,J){let W=!0,$=await c8(),G=`${$.hostWeb}/app/${X}`;await U8(D,Q,Y,"Use waitlog",X);let B={appId:X,devicesId:J?[J]:void 0,order:[{key:"created_at",sortable:"desc"}],rangeStart:new Date().toISOString()},H=null,F=new Set,K=d0(),U=`${$.host}/docs/plugins/updater/debugging/#sent-from-the-backend`;K.start(`Waiting for logs (Expect delay of 30 sec) more info: ${U}`);while(W){await _a(5000);let z=await va(Y,B,H);if(z.length>0){let V=z.reduce((Z,M)=>{let E=new Date(M.created_at).getTime();return Math.max(Z,E)},H?new Date(H).getTime():0);if(V>0)H=new Date(V).toISOString();let w=z.filter((Z)=>{let M=`${Z.app_id}|${Z.device_id}|${Z.action}|${Z.version_id}|${Z.created_at}`;if(F.has(M))return!1;return F.add(M),!0}).sort((Z,M)=>new Date(Z.created_at).getTime()-new Date(M.created_at).getTime()),L=new G1;L.headers=["Time","Device","Key","Message"],L.theme=G1.roundTheme,L.rows=[];let O=!1;for(let Z of w){let{row:M,stop:E}=await fa(Z,D,Q,Y,G,$.hostWeb);if(M)L.rows.push(M);if(E)O=!0}if(L.rows.length)K.stop(""),q.info(L.toString()),K.start(`Waiting for logs (Expect delay of 30 sec) more info: ${U}`);if(O){W=!1;break}}}return K.stop("Stop watching logs"),Promise.resolve()}async function uZ(D,Y){F0("Debug Live update in Capgo"),await f0(),Y.apikey=Y.apikey||X0();let X=await U0();D=_0(D,X?.config);let Q=Y.device;if(!Y.apikey)throw q.error("Missing API key, you need to provide an API key to delete your app"),Error("Missing API key");if(!D)throw q.error("Missing argument, you need to provide a appId, or be in a capacitor project"),Error("Missing appId");let J=await w0(Y.apikey,Y.supaHost,Y.supaAnon),W=await l1(J,D),$=await R0({message:"Automatic check if update working in device ?"});if(await ka("debug",$,W,Y.apikey),$)q.info(`Wait logs sent to Capgo from ${D} device, Please background your app and open it again \uD83D\uDCAA`),await sB("debug",Y.apikey,D,W,Q),e("Done ✅");else e("Canceled ❌")}import{Buffer as mZ}from"node:buffer";import{createHash as ha}from"node:crypto";var ga=(()=>{let D=[];for(let Y=0;Y<256;Y++){let X=Y;for(let Q=0;Q<8;Q++)X=X&1?3988292384^X>>>1:X>>>1;D[Y]=X}return D})();function ua(D){let Y=4294967295;for(let X=0;X<D.length;X++){let Q=D[X];Y=ga[(Y^Q)&255]^Y>>>8}return Y=Y^4294967295,(Y>>>0).toString(16).padStart(8,"0")}async function o9(D,Y="sha256"){let X=mZ.isBuffer(D)?D:mZ.from(D);if(Y==="crc32")return ua(X);let Q=ha(Y);return Q.update(X),Q.digest("hex")}var g7=a1(WT(),1);async function $T(){let D=await g7.loadConfig();return{config:D.app.extConfig,path:D.app.extConfigFilePath}}async function rH(D,Y,X=!1){let Q=await g7.loadConfig(),{extConfig:J}=Q.app;if(J){if(!J.plugins)J.plugins={extConfig:{},[D]:{}};if(!J.plugins[D])J.plugins[D]={};if(!X)J.plugins[D]=Y.config.plugins?.[D];else J=Y.config;g7.writeConfig(J,Q.app.extConfigFilePath)}}async function P4(D,Y=!1){await rH("CapacitorUpdater",D,Y)}var u7={ORG_REQUIRES_EXPIRING_KEY:"org_requires_expiring_key",EXPIRATION_REQUIRED:"expiration_required",EXPIRATION_EXCEEDS_MAX:"expiration_exceeds_max"},aH={[u7.ORG_REQUIRES_EXPIRING_KEY]:`This organization requires API keys with expiration dates.
|
|
197
197
|
|
|
198
198
|
Please generate a new API key with an expiration:
|
|
199
199
|
1. Go to https://web.capgo.app/dashboard/apikeys
|
|
@@ -216,7 +216,7 @@ Please generate a new API key with a shorter expiration:
|
|
|
216
216
|
|
|
217
217
|
${Y.message}
|
|
218
218
|
`;return Y.message||"An unknown error occurred"}var k4=".capgo_key",l8=".capgo_key_v2",OJ=`${k4}.pub`,O9=`${l8}.pub`,_T="https://capgo.app",bT="https://files.capgo.app",kT="https://api.capgo.app",vT="https://console.capgo.app",N2=120000,_60=20971520,b60=1073741824,k60=103809024,Q6="package.json",v4=/^(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;function m(D){if(!D)return"";if(I4(D).isSecurityPolicyError)return oH(D);return`
|
|
219
|
-
${gT.default.render(D)}`}async function y4(D,Y,X=!1){let{data:Q,error:J}=await D.rpc("reject_access_due_to_2fa_for_org",{org_id:Y});if(J){if(!X)q.error(`Cannot check 2FA compliance: ${J.message}`);throw Error(`Cannot check 2FA compliance: ${J.message}`)}if(Q){if(!X)q.error("\uD83D\uDD10 Access Denied: 2FA Required. Enable 2FA at https://web.capgo.app/settings/account");throw Error("2FA required for this organization")}}function LJ(D){return new Promise((Y)=>{setTimeout(Y,D)})}function uT(D){return e6.isMonorepo(D)||e6.isNXMonorepo(D)}function
|
|
219
|
+
${gT.default.render(D)}`}async function y4(D,Y,X=!1){let{data:Q,error:J}=await D.rpc("reject_access_due_to_2fa_for_org",{org_id:Y});if(J){if(!X)q.error(`Cannot check 2FA compliance: ${J.message}`);throw Error(`Cannot check 2FA compliance: ${J.message}`)}if(Q){if(!X)q.error("\uD83D\uDD10 Access Denied: 2FA Required. Enable 2FA at https://web.capgo.app/settings/account");throw Error("2FA required for this organization")}}function LJ(D){return new Promise((Y)=>{setTimeout(Y,D)})}function uT(D){return e6.isMonorepo(D)||e6.isNXMonorepo(D)}function f1(D){if(e6.isMonorepo(D))return e6.findMonorepoRoot(D);else if(e6.isNXMonorepo(D))return e6.findNXMonorepoRoot(D);return D}function mT(D=f1(t6()),Y=void 0){let X=Y?.split(",")[0];if(X){if(!i1(X)){let J=`Package.json at ${X} does not exist`;throw q.error(J),Error(J)}}let Q=C8(X??Y1(D,Q6));return JSON.parse(Q)}function Z2(D=f1(t6()),Y=void 0){return mT(D,Y).scripts}function x6(D=f1(t6()),Y=void 0){return mT(D,Y).version??""}function v60(D){let Y=D.replace("^","").replace("~","");if(eV(Y))try{let X=C0(Y);return u8(X)}catch{return Y}return Y}async function d8(D,Y=t6(),X){let Q=X?d7(X):Y;try{let $=`${D}/package.json`,{createRequire:G}=await import("node:module"),H=G(Y1(Q,"package.json")).resolve($),F=JSON.parse(C8(H,"utf-8"));if(F.version)return F.version}catch{}let J=Q,W=M2.parse(J).root;while(J!==W){let $=Y1(J,"node_modules",D,Q6);if(i1($))try{let B=JSON.parse(C8($,"utf-8"));if(B.version)return B.version}catch{}let G=d7(J);if(G===J)break;J=G}if(D==="@capgo/capacitor-updater"){let $=null,G=Y1(Y,"ios","App","Podfile");if(i1(G))try{let H=C8(G,"utf-8").match(/pod\s+['"]CapgoCapacitorUpdater['"],\s*:path\s*=>\s*['"]([^'"]+)['"]/);if(H?.[1])$=wJ(Y1(Y,"ios","App",H[1]))}catch{}if(!$){let B=Y1(Y,"android","capacitor.settings.gradle");if(i1(B))try{let F=C8(B,"utf-8").match(/project\(':capgo-capacitor-updater'\)\.projectDir\s*=\s*new\s+File\(['"]([^'"]+)['"]/);if(F?.[1])$=wJ(Y1(Y,"android",F[1])).replace(/\/android$/,"")}catch{}}if($){let B=Y1($,Q6);if(i1(B))try{let H=JSON.parse(C8(B,"utf-8"));if(H.version)return H.version}catch{}}}try{let G=(await z6(Y)).get(D);if(G)return G}catch{}return null}async function z6(D=f1(t6()),Y=void 0){let X=Y?.split(",");if(X??=[Y1(D,Q6)],X){for(let W of X)if(!i1(W)){let $=`Package.json at ${W} does not exist`;throw q.error($),Error($)}}let Q=new Map,{createRequire:J}=await import("node:module");for(let W of X){let $=C8(W),G=JSON.parse($),B=d7(W),H=(F,K)=>{try{let w=J(Y1(B,"package.json")).resolve(`${F}/package.json`),L=JSON.parse(C8(w,"utf-8"));if(L.version)return L.version}catch{}let U=B,z=M2.parse(U).root;while(U!==z){let V=Y1(U,"node_modules",F,Q6);if(i1(V))try{let L=JSON.parse(C8(V,"utf-8"));if(L.version)return L.version}catch{}let w=d7(U);if(w===U)break;U=w}return v60(K)};for(let F in G.dependencies)Q.set(F,H(F,G.dependencies[F]));for(let F in G.devDependencies)Q.set(F,H(F,G.devDependencies[F]))}return Q}async function U0(){try{let D=await $T();if(!D)throw q.error("No capacitor config file found, run `cap init` first"),Error("No capacitor config file found, run `cap init` first");return D}catch(D){let Y=`No capacitor config file found, run \`cap init\` first ${m(D)}`;throw q.error(Y),Error(Y)}}async function A2(D,Y){let X=await U0();if(X?.config)X.config.plugins??={},X.config.plugins.extConfig??={},X.config.plugins[D]??={},X.config.plugins[D]={...X.config.plugins[D],...Y},await rH(D,X);return X}async function p7(D){return A2("CapacitorUpdater",D)}async function c8(){try{let D=await U0(),Y={host:D?.config?.plugins?.CapacitorUpdater?.localHost||_T,hostWeb:D?.config?.plugins?.CapacitorUpdater?.localWebHost||vT,hostFilesApi:D?.config?.plugins?.CapacitorUpdater?.localApiFiles||bT,hostApi:D?.config?.plugins?.CapacitorUpdater?.localApi||kT};if(D?.config?.plugins?.CapacitorUpdater?.localSupa&&D?.config?.plugins?.CapacitorUpdater?.localSupaAnon)q.info("Using custom supabase instance from capacitor.config.json"),Y.supaKey=D?.config?.plugins?.CapacitorUpdater?.localSupaAnon,Y.supaHost=D?.config?.plugins?.CapacitorUpdater?.localSupa;return Y}catch{return{host:_T,hostWeb:vT,hostFilesApi:bT,hostApi:kT}}}var cT=/([A-Za-z0-9]+)\.(java|swift|kt|scala)$/;async function NJ(){let D=await c8();try{let Y=await fetch(`${D.hostApi}/private/config`);if(!Y.ok)throw Error(`HTTP error! status: ${Y.status}`);return{...await Y.json(),...D}}catch{return q.info(`Local config ${m(D)}`),D}}async function lT(){let D=await c8();try{let Y=await fetch(`${D.hostFilesApi}/files/config`);if(!Y.ok)throw Error(`HTTP error! status: ${Y.status}`);return await Y.json()}catch{return{partialUpload:!1,TUSUpload:!1,partialUploadForced:!1,TUSUploadForced:!1,maxUploadLength:b60,maxChunkSize:k60,alertUploadSize:_60}}}async function w0(D,Y,X){let Q=await NJ();if(Y&&X)q.info("Using custom supabase instance from provided options"),Q.supaHost=Y,Q.supaKey=X;if(!Q.supaHost||!Q.supaKey)throw q.error("Cannot connect to server please try again later"),Error("Cannot connect to server please try again later");return QL(Q.supaHost,Q.supaKey,{auth:{persistSession:!1},global:{headers:{capgkey:D}}})}async function y60(D,Y,X){let{data:Q}=await D.rpc("is_allowed_capgkey",{apikey:Y,keymode:X}).single();if(!Q){q.error("Invalid API key or insufficient permissions.");let W=`Your key should be: ${X.map(($,G)=>{if(X.length===1)return`"${$}"`;if(G===X.length-1)return`or "${$}"`;return`"${$}", `}).join("")} mode.`;throw q.error(W),Error("Invalid API key or insufficient permissions.")}}async function dT(D,Y){let{data:X}=await D.rpc("is_paying_org",{orgid:Y}).single();return X||!1}async function pT(D,Y){let{data:X}=await D.rpc("is_trial_org",{orgid:Y}).single();return X||0}async function f60(D,Y){let{data:X}=await D.rpc("is_allowed_action_org",{orgid:Y}).single();return!!X}async function h60(D,Y,X){let{data:Q}=await D.rpc("is_allowed_action",{apikey:X,appid:Y}).single();return!!Q}var w8;(($)=>{$[$.none=0]="none";$[$.read=1]="read";$[$.upload=2]="upload";$[$.write=3]="write";$[$.admin=4]="admin";$[$.super_admin=5]="super_admin"})(w8||={});var f4=(D,Y)=>D>=Y;async function nT(D,Y,X){let{data:Q,error:J}=await D.rpc("get_org_perm_for_apikey",{apikey:Y,app_id:X}).single();if(J)throw q.error("Cannot get permissions for organization!"),console.error(J),Error("Cannot get permissions for organization");if(Q.includes("perm")){let G=null;switch(Q){case"perm_none":{G=0;break}case"perm_read":{G=1;break}case"perm_upload":{G=2;break}case"perm_write":{G=3;break}case"perm_admin":{G=4;break}case"perm_owner":{G=5;break}default:{if(Q.includes("invite"))throw q.info("Please accept/deny the organization invitation before trying to access the app"),Error("Organization invitation pending");throw q.error(`Invalid output when fetching organization permission. Response: ${Q}`),Error(`Invalid output when fetching organization permission. Response: ${Q}`)}}return{okay:!0,data:G}}let $=null;switch(Q){case"INVALID_APIKEY":{$="INVALID_APIKEY";break}case"NO_APP":{$="NO_APP";break}case"NO_ORG":{$="NO_ORG";break}default:throw q.error(`Invalid error when fetching organization permission. Response: ${Q}`),Error(`Invalid error when fetching organization permission. Response: ${Q}`)}return{okay:!1,error:$}}async function iT(D,Y,X){let{data:Q,error:J}=await D.rpc("get_organization_cli_warnings",{orgid:Y,cli_version:X});if(J){q.error(`Cannot get cli warnings: ${m(J)}`);return}if(Q.length>0){q.warn(`Found ${Q.length} cli warnings for your organization.`);let W=null;for(let $ of Q){if(typeof $!=="object"||typeof $.message!=="string"||typeof $.fatal!=="boolean"){q.error(`Invalid cli warning: ${$}`);continue}let G=$;if(G.fatal)q.error(`${G.message.replaceAll("\\n",`
|
|
220
220
|
`)}`),W=Error(G.message);else q.warn(`${G.message.replaceAll("\\n",`
|
|
221
221
|
`)}`)}if(W)throw q.error("Please fix the warnings and try again."),W;q.info("End of cli warnings.")}}async function rT(D,Y,X,Q,J=!0){let W=await NJ();if(!await(Q?h60(D,Q,X):f60(D,Y)))throw q.error(`You need to upgrade your plan to continue to use capgo.
|
|
222
222
|
Upgrade here: ${W.hostWeb}/settings/organization/plans
|
|
@@ -232,14 +232,14 @@ The organization "${D}" requires all members to have 2FA enabled.`);else q.error
|
|
|
232
232
|
This organization requires all members to have 2FA enabled.`);throw q.error(`
|
|
233
233
|
To regain access:`),q.error(" 1. Go to https://web.capgo.app/settings/account"),q.error(" 2. Enable Two-Factor Authentication on your account"),q.error(" 3. Try your command again"),q.error(`
|
|
234
234
|
For more information, visit: https://capgo.app/docs/webapp/2fa-enforcement/
|
|
235
|
-
`),Error("2FA required for this organization")}async function h4(D,Y){let{error:X,data:Q}=await D.rpc("get_orgs_v7");if(X)throw q.error("Cannot get the list of organizations - exiting"),q.error(`Error ${JSON.stringify(X)}`),Error("Cannot get the list of organizations");let J=Q.filter((B)=>!!Y.find((H)=>H===B.role));if(Q.length===0)throw q.error("Could not get organization please create an organization first"),Error("No organizations available");if(J.length===0)throw q.error(`Could not find organization with roles: ${Y.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 W=J.length>1?await D8({message:"Please pick the organization that you want to insert to",options:J.map((B)=>{let H=B.enforcing_2fa&&!B["2fa_has_access"]?" ⚠️ (2FA required)":"";return{value:B.gid,label:`${B.name}${H}`}})}):J[0].gid;if(E0(W))throw q.error("Canceled organization selection, exiting"),Error("Organization selection cancelled");let $=W,G=Q.find((B)=>B.gid===$);if(G.enforcing_2fa&&!G["2fa_has_access"])T2(G.name);return q.info(`Using the organization "${G.name}" as the app owner`),G}async function A0(D,Y,X=["all"]){await y60(D,Y,X);let{data:Q,error:J}=await D.rpc("get_user_id",{apikey:Y}).single(),W=(Q||"").toString();if(!W||J)throw q.error("Cannot auth user with apikey"),Error("Cannot authenticate user with provided API key");return W}async function
|
|
235
|
+
`),Error("2FA required for this organization")}async function h4(D,Y){let{error:X,data:Q}=await D.rpc("get_orgs_v7");if(X)throw q.error("Cannot get the list of organizations - exiting"),q.error(`Error ${JSON.stringify(X)}`),Error("Cannot get the list of organizations");let J=Q.filter((B)=>!!Y.find((H)=>H===B.role));if(Q.length===0)throw q.error("Could not get organization please create an organization first"),Error("No organizations available");if(J.length===0)throw q.error(`Could not find organization with roles: ${Y.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 W=J.length>1?await D8({message:"Please pick the organization that you want to insert to",options:J.map((B)=>{let H=B.enforcing_2fa&&!B["2fa_has_access"]?" ⚠️ (2FA required)":"";return{value:B.gid,label:`${B.name}${H}`}})}):J[0].gid;if(E0(W))throw q.error("Canceled organization selection, exiting"),Error("Organization selection cancelled");let $=W,G=Q.find((B)=>B.gid===$);if(G.enforcing_2fa&&!G["2fa_has_access"])T2(G.name);return q.info(`Using the organization "${G.name}" as the app owner`),G}async function A0(D,Y,X=["all"]){await y60(D,Y,X);let{data:Q,error:J}=await D.rpc("get_user_id",{apikey:Y}).single(),W=(Q||"").toString();if(!W||J)throw q.error("Cannot auth user with apikey"),Error("Cannot authenticate user with provided API key");return W}async function l1(D,Y){let{data:X,error:Q}=await D.from("apps").select("owner_org").eq("app_id",Y).single();if(!X||Q)throw q.error(`Cannot get organization id for app id ${Y}`),m(Q),Error(`Cannot get organization id for app id ${Y}`);return X.owner_org}function g4(D){return new Date(D||"").toLocaleString()}var yT=!1,_4="npm",l7="install",L2="npx";function W8(){if(yT)return{pm:_4,command:l7,installCommand:`${_4} ${l7}`,runner:L2};let D=f1(t6());return _4=m3(D,"npm"),l7=_X(_4),yT=!0,L2=uV(D),{pm:_4,command:l7,installCommand:`${_4} ${l7}`,runner:L2}}function QS(D){return b4(D,{withFileTypes:!0}).flatMap((Q)=>{let J=Y1(D,Q.name);if(Q.isDirectory())return QS(J);else return J.split(`node_modules${hT}`)[1]||J})}function JS(D){if(!i1(D))return[];try{return b4(D,{withFileTypes:!0}).flatMap((Q)=>{let J=Y1(D,Q.name);if(Q.isDirectory())return JS(J);else return J})}catch{return[]}}function m60(D,Y){let X=[];if(Y==="ios"){try{let W=b4(D);for(let $ of W)if($.endsWith(".podspec"))X.push(Y1(D,$))}catch{}let Q=Y1(D,"Package.swift"),J=Y1(D,"ios","Package.swift");if(i1(Q))X.push(Q);if(i1(J))X.push(J)}else if(Y==="android"){let Q=Y1(D,"android"),J=Y1(Q,"build.gradle"),W=Y1(Q,"build.gradle.kts");if(i1(J))X.push(J);if(i1(W))X.push(W)}return X}async function c60(D){let Y=Y1(D,"ios"),X=Y1(D,"android"),Q=async($,G)=>{let B=i1($)?JS($).filter((z)=>cT.test(z)):[],H=m60(D,G),F=[...B,...H].sort((z,V)=>z.localeCompare(V));if(F.length===0)return;let{createHash:K}=await import("node:crypto"),U=K("sha256");for(let z of F)try{let V=fT(D,z);U.update(V);let w=C8(z);U.update(w)}catch{}return U.digest("hex")},[J,W]=await Promise.all([Q(Y,"ios"),Q(X,"android")]);return{ios_checksum:J,android_checksum:W}}async function S2(D,Y){let X=Y?Y.split(","):[],Q;try{Q=await z6("",D)}catch(F){throw q.error("Invalid package.json, JSON parsing failed"),console.error("json parse error: ",F),F instanceof Error?F:Error("Invalid package.json")}let J=D?.split(",")[0],W=!J?f1(t6()):M2.resolve(J).replace(Q6,"");if(!Q)throw q.error("Missing dependencies section in package.json"),Error("Missing dependencies section in package.json");for(let[F,K]of Object.entries(Q))if(typeof K!=="string")throw q.error(`Invalid dependency ${F}: ${K}, expected string, got ${typeof K}`),Error(`Invalid dependency ${F}: expected string version`);let $=X.length===0?[Y1(t6(),"node_modules")]:X;if(!$.some((F)=>i1(F))){let F=m3(W,"npm"),K=_X(F);throw q.error(`Missing node_modules folder at ${$.join(", ")}, please run ${F} ${K}`),Error("Missing node_modules folder")}let B=!1,H=await Promise.all(Array.from(Q.entries()).map(async([F,K])=>{let U=!1,z=!1,V=K,w;for(let Z of $){let M=Y1(Z,F);if(i1(M)){U=!0,w=M;try{let E=Y1(M,Q6);if(i1(E)){let j=JSON.parse(C8(E,"utf-8"));if(j.version)V=j.version}}catch{}try{if(QS(M).some((j)=>cT.test(j))){z=!0;break}}catch(E){throw q.error(`Error reading node_modules files for ${F} package in ${Z}`),console.error(E),E instanceof Error?E:Error(`Error reading node_modules files for ${F}`)}}}if(!U){B=!0;let Z=m3(W,"npm"),M=_X(Z);return q.error(`Missing dependency ${F}, please run ${Z} ${M}`),{name:F,version:K}}let L,O;if(z&&w){let Z=await c60(w);L=Z.ios_checksum,O=Z.android_checksum}return{name:F,version:V,native:z,ios_checksum:L,android_checksum:O}})).catch(()=>[]);if(B||H.find((F)=>F.native===void 0))throw q.error("Missing dependencies or invalid dependencies"),q.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 H}async function l60(D,Y,X){let{data:Q,error:J}=await D.from("channels").select("version(checksum)").eq("name",X).eq("app_id",Y).single(),W=Q;if(J||W===null||!W.version||!W.version.checksum)return null;return W.version.checksum}function d60(D){if(!D)throw q.error("Error parsing native packages, perhaps the metadata does not exist in Capgo?"),Error("Error parsing native packages");for(let X of D){if(typeof X!=="object")throw q.error(`Invalid remote native package data: ${X}, expected object, got ${typeof X}`),Error("Invalid remote native package data");let{name:Q,version:J}=X;if(!Q||typeof Q!=="string")throw q.error(`Invalid remote native package name: ${Q}, expected string, got ${typeof Q}`),Error("Invalid remote native package name");if(!J||typeof J!=="string")throw q.error(`Invalid remote native package version: ${J}, expected string, got ${typeof J}`),Error("Invalid remote native package version")}return new Map(D.map((X)=>[X.name,X]))}async function WS(D,Y,X){let{data:Q,error:J}=await D.from("channels").select(`version (
|
|
236
236
|
native_packages
|
|
237
237
|
)`).eq("name",X).eq("app_id",Y).single();if(J)throw q.error(`Error fetching native packages: ${J.message}`),Error(`Error fetching native packages: ${J.message}`);return d60(Q.version.native_packages??[])}async function $S(D,Y,X,Q){let J=d0();J.start(`Checking bundle checksum compatibility with channel ${X}`);let W=await l60(D,Y,X);if(!W){J.stop(`No checksum found for channel ${X}, the bundle will be uploaded`);return}if(W&&W===Q)throw J.stop("Checksum check failed"),q.error(`Cannot upload the same bundle content.
|
|
238
238
|
Current bundle checksum matches remote bundle for channel ${X}
|
|
239
239
|
Did you build your app before uploading?
|
|
240
|
-
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 _0(D,Y){return D||Y?.plugins?.CapacitorUpdater?.appId||Y?.appId}function W5(D){let Y=[];if(!D.localVersion)return{compatible:!0,reasons:[],message:"Package only exists on remote (will be removed)"};if(!D.remoteVersion)return Y.push("new_plugin"),{compatible:!1,reasons:Y,message:"New native plugin added (requires app store update)"};let X=!1;try{let $=fX(D.localVersion),G=fX(D.remoteVersion);X=tV($,G)}catch{X=!1}if(!X)Y.push("version_mismatch");let Q=D.localIosChecksum&&D.remoteIosChecksum&&D.localIosChecksum!==D.remoteIosChecksum,J=D.localAndroidChecksum&&D.remoteAndroidChecksum&&D.localAndroidChecksum!==D.remoteAndroidChecksum;if(Q&&J)Y.push("both_platforms_changed");else if(Q)Y.push("ios_code_changed");else if(J)Y.push("android_code_changed");if(Y.length===0)return{compatible:!0,reasons:[],message:"Compatible"};let W=[];for(let $ of Y)switch($){case"version_mismatch":W.push(`version changed: ${D.remoteVersion} → ${D.localVersion}`);break;case"ios_code_changed":W.push("iOS native code changed");break;case"android_code_changed":W.push("Android native code changed");break;case"both_platforms_changed":W.push("iOS and Android native code changed");break;case"new_plugin":W.push("new plugin (requires app store update)");break;case"removed_plugin":W.push("plugin removed");break}return{compatible:!1,reasons:Y,message:W.join(", ")}}function QD(D){return W5(D).compatible}async function TJ(D,Y,X,Q,J){let W=await S2(Q,J),$=await WS(D,Y,X),G=W.filter((H)=>!!H.native).map((H)=>{let F=$.get(H.name);if(F)return{name:H.name,localVersion:H.version,remoteVersion:F.version,localIosChecksum:H.ios_checksum,remoteIosChecksum:F.ios_checksum,localAndroidChecksum:H.android_checksum,remoteAndroidChecksum:F.android_checksum};return{name:H.name,localVersion:H.version,remoteVersion:void 0,localIosChecksum:H.ios_checksum,localAndroidChecksum:H.android_checksum}}),B=[...$].filter(([H])=>W.find((F)=>F.name===H)===void 0).map(([H,F])=>({name:H,localVersion:void 0,remoteVersion:F.version,remoteIosChecksum:F.ios_checksum,remoteAndroidChecksum:F.android_checksum}));return G.push(...B),{finalCompatibility:G,localDependencies:W}}async function P2(D,Y,X,Q){let J=await WS(D,Y,X),W=Q.map((G)=>{let B=J.get(G.name);if(B)return{name:G.name,localVersion:G.version,remoteVersion:B.version,localIosChecksum:G.ios_checksum,remoteIosChecksum:B.ios_checksum,localAndroidChecksum:G.android_checksum,remoteAndroidChecksum:B.android_checksum};return{name:G.name,localVersion:G.version,remoteVersion:void 0,localIosChecksum:G.ios_checksum,localAndroidChecksum:G.android_checksum}}),$=[...J].filter(([G])=>Q.find((B)=>B.name===G)===void 0).map(([G,B])=>({name:G,localVersion:void 0,remoteVersion:B.version,remoteIosChecksum:B.ios_checksum,remoteAndroidChecksum:B.android_checksum}));return W.push(...$),{finalCompatibility:W,localDependencies:Q}}async function SJ(D,Y,X){let Q=await R0({message:"Would you like to sync your project with Capacitor now? This is recommended to ensure encrypted updates work properly."});if(E0(Q)){if(D&&Y&&X)await U8("onboarding-v2",Y,X,"canceled","\uD83E\uDD37");throw q.error("Canceled Capacitor sync"),Error("Capacitor sync cancelled")}if(Q){let J=W8(),W=d0();W.start("Running the command...");try{await new Promise(($,G)=>{let B=S60(J.runner,["cap","sync"],{stdio:"pipe"});B.on("close",(H)=>{if(H===0)$();else G(Error(`Command failed with exit code ${H}`))}),B.on("error",(H)=>{G(H)})}),W.stop("Capacitor sync completed ✅")}catch($){W.stop("Error"),q.error(`Failed to run Capacitor sync: ${$}`),q.warn(`Please run "${J.runner} cap sync" manually to ensure encrypted updates work properly`)}}else{let J=W8();q.warn("⚠️ Important: If you upload encrypted bundles without syncing, updates will fail!"),q.info(`Remember to run "${J.runner} cap sync" before uploading encrypted bundles`)}}async function GS(D,Y){let{data:X}=await D.rpc("exist_app_v2",{appid:Y}).single();return!!X}async function g1(D,Y,X=!1){let{data:Q,error:J}=await D.rpc("reject_access_due_to_2fa_for_app",{app_id:Y});if(J){if(!X)q.error(`Cannot check 2FA compliance: ${J.message}`);throw Error(`Cannot check 2FA compliance: ${J.message}`)}if(Q){if(X)throw Error("2FA required for this organization");T2()}}async function L1(D,Y,X,Q,J=!1,W=!1){let $=W8();if(!W)await g1(D,X,J);let G=await nT(D,Y,X);if(!G.okay)switch(G.error){case"INVALID_APIKEY":{if(!J)q.error("Invalid apikey, such apikey does not exists!");throw Error("Invalid apikey, such apikey does not exists!")}case"NO_APP":{let F=`App ${X} does not exist, run first \`${$.runner} @capgo/cli app add ${X}\` to create it`;if(!J)q.error(F);throw Error(F)}case"NO_ORG":{if(!J)q.error("Could not find organization, please contact support to resolve this!");throw Error("Could not find organization, please contact support to resolve this!")}}let B=G.data;if(Q>B){let F=`Insuficcent permissions for app ${X}. Current permission: ${w8[G.data]}, required for this action: ${w8[Q]}.`;if(!J)q.error(F);throw Error(F)}return G.data}var V6="assets/icon.png";var p60=/^[a-z0-9]+(\.[\w-]+)+$/i;function n60(D,Y,X){if(!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(D.includes("--")){if(!X)q.error('The app id includes illegal symbols. You cannot use "--" in the app id');throw Error("App id includes illegal symbols")}if(!p60.test(D)){if(!X)q.error(`Invalid app ID format: "${D}"`),q.info("App ID must be in reverse domain notation (e.g., com.example.app)"),q.info("Valid format: lowercase letters, numbers, dots, hyphens, and underscores"),q.info("Examples: com.mycompany.myapp, io.capgo.app, com.example.my-app");throw Error("Invalid app ID format")}}async function i60(D,Y,X){if(!await GS(D,Y))return;if(Y==="io.ionic.starter"){if(!X)q.error(`This appId ${Y} 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)q.error(`App ${Y} already exist`);throw Error(`App ${Y} already exists`)}async function i7(D,Y,X,Q=!1){if(!Q)F0("Adding");await f0(),Y.apikey=Y.apikey||X0();let J=await U0(),W=_0(D,J?.config);n60(W,Y,Q);let $=await w0(Y.apikey,Y.supaHost,Y.supaAnon),G=await A0($,Y.apikey,["write","all"]);if(await i60($,W,Q),!X)X=await h4($,["admin","super_admin"]);let B=X.gid,{name:H,icon:F}=Y;if(H=H||J.config?.appName||"Unknown",F=F||"resources/icon.png",!F||!H){if(!Q)q.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(!Q)q.info(`Adding ${W} to Capgo`);let K=null,U=null;if(F&&BS(F)){if(K=HS(F),U=XD(F)||"image/png",!Q)q.warn(`Found app icon ${F}`)}else if(BS(V6)){if(K=HS(V6),U=XD(V6)||"image/png",!Q)q.warn(`Found app icon ${V6}`)}else if(!Q)q.warn(`Cannot find app icon in any of the following locations: ${F}, ${V6}`);let z="icon",V="https://xvwzpoazmxkqosrdewyv.supabase.co/storage/v1/object/public/images/capgo.png";if(K&&U){let{error:L}=await $.storage.from(`images/org/${B}/${W}`).upload(z,K,{contentType:U});if(L){if(!Q)console.error(L);if(!Q)q.error(`Could not add app ${m(L)}`);throw Error(`Could not add app ${m(L)}`)}let{data:O}=await $.storage.from(`images/org/${B}/${W}`).getPublicUrl(z);V=O?.publicUrl||V}let{error:w}=await $.from("apps").insert({icon_url:V,owner_org:B,user_id:G,name:H,app_id:W});if(w){if(!Q)q.error(`Could not add app ${m(w)}`);throw Error(`Could not add app ${m(w)}`)}if(await Z0(Y.apikey,{channel:"app",event:"App Created",icon:"\uD83C\uDD95",user_id:B,tags:{"app-id":W},notify:!1,notifyConsole:!0}).catch(()=>{}),!Q)q.success(`App ${W} added to Capgo`),q.info("This app is accessible to all members of your organization based on their permissions"),q.info(`Next step: upload a bundle with "npx @capgo/cli bundle upload ${W}"`),e("Done ✅");return{appId:W,organizationUid:B,userId:G,name:H,signedURL:V}}async function FS(D,Y){await i7(D,Y,void 0)}async function I2(D,Y,X=!1,Q=!1){if(!X)F0("Deleting");Y.apikey=Y.apikey||X0();let J=await U0(),W=_0(D,J?.config);if(!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!W){if(!X)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let $=await w0(Y.apikey,Y.supaHost,Y.supaAnon),G=await A0($,Y.apikey,["write","all"]);await L1($,Y.apikey,W,5,X);let{data:B,error:H}=await $.from("apps").select("owner_org ( created_by, id )").eq("app_id",W).single(),F=B;if(!Q&&!H&&(F?.owner_org.created_by??"")!==G)if(!X){q.warn("Deleting the app is not recommended for users that are not the organization owner"),q.warn("You are invited as a super_admin but your are not the owner"),q.warn("It's strongly recommended that you do not continue!");let w=await D8({message:"Do you want to continue?",options:[{label:"Yes",value:"yes"},{label:"No",value:"no"}]});if(E0(w)||w==="no")throw q.error("Canceled deleting the app, exiting"),Error("App deletion cancelled")}else throw Error("Cannot delete app: you are not the organization owner");else if(H&&!X)q.warn(`Cannot get the app owner ${m(H)}`);let{error:K}=await $.storage.from("images").remove([`org/${F?.owner_org.id}/${W}/icon`]);if(K&&!X)q.error("Could not delete app logo");let{error:U}=await $.storage.from(`apps/${W}/${G}`).remove(["versions"]);if(U&&!X)q.error("Could not delete app version");let{error:z}=await $.from("apps").delete().eq("app_id",W);if(z){if(!X)q.error("Could not delete app");throw Error(`Could not delete app: ${m(z)}`)}let V=await v1($,W);if(await Z0(Y.apikey,{channel:"app",event:"App Deleted",icon:"\uD83D\uDDD1️",user_id:V,tags:{"app-id":W},notify:!0}).catch(()=>{}),!X)q.success("App deleted in Capgo"),e("Done ✅");return!0}async function qS(D,Y){return I2(D,Y,!1,!1)}import{platform as r60,version as a60}from"node:os";import{version as o60}from"node:process";async function KS(D){let Y={},X=Object.keys(D);return(await Promise.all(X.map((J)=>gQ(J)))).forEach((J,W)=>{if(J)Y[X[W]]=J}),Y}async function s60(){let D=await z6(),Y={"@capgo/cli":f8.version};for(let[X,Q]of D)if(X.startsWith("@capgo/")||X.startsWith("@capawesome/")||X.startsWith("capacitor"))Y[X]=Q;return Y}async function C2(D,Y=!1){if(!Y)q.warn(" \uD83D\uDC8A Capgo Doctor \uD83D\uDC8A");let X=await U0(),Q=x6("",D.packageJson),J=X?.config?.plugins?.CapacitorUpdater?.version||Q,W=X?.config?.appName||"",$=_0("",X?.config),G=X?.config?.webDir||"";if(!Y)q.info(` App Name: ${W}`),q.info(` App ID: ${$}`),q.info(` App Version: ${J}`),q.info(` Web Dir: ${G}`),q.info(` OS: ${r60()} ${a60()}`),q.info(` Node: ${o60}`),q.info(" Installed Dependencies:");let B=await s60();if(Object.keys(B).length===0){if(!Y)q.warning("\x1B[31m%s\x1B[0m \uD83D\uDEA8 No dependencies found");throw Error("No dependencies found")}if(!Y)for(let F of Object.keys(B))q.info(` ${F}: ${B[F]}`);let H={};if(!Y){let F=d0();F.start("Running: Loading latest dependencies"),H=await KS(B),F.stop("Latest Dependencies:");for(let K of Object.keys(H))q.info(` ${K}: ${H[K]}`)}else H=await KS(B);if(JSON.stringify(B)!==JSON.stringify(H)){if(!Y)q.warn("\x1B[31m\uD83D\uDEA8 Some dependencies are not up to date\x1B[0m");throw Error("Some dependencies are not up to date")}if(!Y)q.success("\x1B[32m✅ All dependencies are up to date\x1B[0m");return{appName:W,appId:$,appVersion:J,webDir:G,installedDependencies:B,latestDependencies:H}}async function zS(D){return C2(D)}function t60(D){let Y=new G1;Y.headers=["Name","id","Created"],Y.rows=[];for(let X of D.toReversed())Y.rows.push([X.name??"",X.app_id,g4(X.created_at)]);q.success("Apps"),q.success(Y.toString())}async function e60(D,Y){let{data:X,error:Q}=await D.from("apps").select().order("created_at",{ascending:!1});if(Q){if(!Y)q.error("Apps not found");throw Error("Apps not found")}return X??[]}async function x2(D,Y=!1){if(!Y)F0("List apps in Capgo");await f0(),D.apikey=D.apikey||X0();let X=await w0(D.apikey,D.supaHost,D.supaAnon);if(await A0(X,D.apikey,["write","all","read","upload"]),!Y)q.info("Getting active bundle in Capgo");let Q=await e60(X,Y);if(!Q.length){if(!Y)q.error("No apps found");throw Error("No apps found")}if(!Y)q.info(`Active app in Capgo: ${Q.length}`),t60(Q),e("Done ✅");return Q}async function US(D){return x2(D,!1)}import{randomUUID as D90}from"node:crypto";import{existsSync as VS,readFileSync as wS}from"node:fs";async function _2(D,Y,X=!1){if(!X)F0("Set app");Y.apikey=Y.apikey||X0();let Q=await U0();if(D=_0(D,Q?.config),!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let J=await w0(Y.apikey,Y.supaHost,Y.supaAnon),$=(await h4(J,["admin","super_admin"])).gid,G=await A0(J,Y.apikey,["write","all"]);await L1(J,Y.apikey,D,4,X);let{name:B,icon:H,retention:F,exposeMetadata:K}=Y;if(F&&Number.isNaN(Number(F))){if(!X)q.error("retention value must be a number");throw Error("Retention value must be a number")}else if(F&&F<0){if(!X)q.error("retention value cannot be less than 0");throw Error("Retention value cannot be less than 0")}else if(F&&F>=63113904){if(!X)q.error("retention value cannot be greater than 63113904 seconds (2 years)");throw Error("Retention value cannot be greater than 63113904 seconds (2 years)")}let U,z,V=`icon_${D90()}`,w="https://xvwzpoazmxkqosrdewyv.supabase.co/storage/v1/object/public/images/capgo.png";if(H&&VS(H)){if(U=wS(H),z=XD(H)||"image/png",!X)q.warn(`Found app icon ${H}`)}else if(VS(V6)){if(U=wS(V6),z=XD(V6)||"image/png",!X)q.warn(`Found app icon ${V6}`)}else if(!X)q.warn(`Cannot find app icon in any of the following locations: ${H}, ${V6}`);if(U&&z){let{error:O}=await J.storage.from(`images/org/${$}/${D}`).upload(V,U,{contentType:z});if(O){if(!X)q.error(`Could not set app ${m(O)}`);throw Error(`Could not set app: ${m(O)}`)}let{data:Z}=await J.storage.from(`images/org/${$}/${D}`).getPublicUrl(V);w=Z?.publicUrl||w}let{error:L}=await J.from("apps").update({icon_url:w,name:B,retention:!F?void 0:F*24*60*60,expose_metadata:K}).eq("app_id",D).eq("user_id",G);if(L){if(!X)q.error(`Could not set app ${m(L)}`);throw Error(`Could not set app: ${m(L)}`)}if(await Z0(Y.apikey,{channel:"app",event:"App Updated",icon:"\uD83D\uDCDD",user_id:$,tags:{"app-id":D},notify:!1,notifyConsole:!0}).catch(()=>{}),!X)e("Done ✅");return!0}async function LS(D,Y){return _2(D,Y)}async function b2(D,Y,X=!1){if(!X)F0("Set a specific setting in capacitor config");if(Y.bool&&Y.string){if(!X)q.error("Bool and string CANNOT be set at the same time");throw Error("Bool and string cannot both be provided")}if(!Y.bool&&!Y.string){if(!X)q.error("You MUST provide either bool or string as the value");throw Error("Either bool or string value is required")}if(Y.bool&&Y.bool!=="true"&&Y.bool!=="false"){if(!X)q.error("Invalid bool");throw Error("Invalid bool value; expected true or false")}try{let Q=await U0(),J=Q.config,W=D.split(".");if(W.length===0){if(!X)q.error("Invalid path");throw Error("Invalid config path")}for(let G of W.slice(0,-1)){if(!Object.prototype.hasOwnProperty.call(J,G))J[G]={};J=J[G]}let $=Y.bool?Y.bool==="true":Y.string;if(J[W.at(-1)]=$,await P4(Q,!0),!X)q.success(`Set "${D}" to "${$}"`)}catch(Q){if(!X)q.error(`Cannot set config in capacitor settings ${m(Q)}`);throw Error(`Cannot set capacitor config: ${m(Q)}`)}if(!X)e("Done ✅")}async function MS(D,Y){return b2(D,Y)}import{existsSync as w6}from"node:fs";import{resolve as L6}from"node:path";import{exit as S1}from"node:process";import{mkdir as Y90,readFile as OS,writeFile as X90}from"node:fs/promises";import{homedir as Q90}from"node:os";import{join as IJ}from"node:path";import{cwd as NS,env as X1}from"node:process";var ZS=IJ(Q90(),".capgo-credentials"),AS=IJ(ZS,"credentials.json"),ES=".capgo-credentials.json";function RS(D){return D?IJ(NS(),ES):AS}function J90(D){return D?null:ZS}async function u4(D){return(await OS(D)).toString("base64")}async function m4(D){try{let Y=RS(D),X=await OS(Y,"utf-8");return JSON.parse(X)}catch{return{}}}async function r7(D,Y){if(Y!==void 0){let J=await m4(Y);if(!D){let W=Object.keys(J);if(W.length===0)return null;return J[W[0]]||null}return J[D]||null}let X=await m4(!0),Q=await m4(!1);if(!D){let J=Object.keys(X);if(J.length>0)return X[J[0]]||null;let W=Object.keys(Q);if(W.length===0)return null;return Q[W[0]]||null}return X[D]||Q[D]||null}async function PJ(D,Y){let X=RS(Y),Q=J90(Y);if(Q)await Y90(Q,{recursive:!0});await X90(X,JSON.stringify(D,null,2),"utf-8")}function W90(){let D={};if(X1.BUILD_CERTIFICATE_BASE64)D.BUILD_CERTIFICATE_BASE64=X1.BUILD_CERTIFICATE_BASE64;if(X1.BUILD_PROVISION_PROFILE_BASE64)D.BUILD_PROVISION_PROFILE_BASE64=X1.BUILD_PROVISION_PROFILE_BASE64;if(X1.BUILD_PROVISION_PROFILE_BASE64_PROD)D.BUILD_PROVISION_PROFILE_BASE64_PROD=X1.BUILD_PROVISION_PROFILE_BASE64_PROD;if(X1.P12_PASSWORD)D.P12_PASSWORD=X1.P12_PASSWORD;if(X1.APPLE_KEY_ID)D.APPLE_KEY_ID=X1.APPLE_KEY_ID;if(X1.APPLE_ISSUER_ID)D.APPLE_ISSUER_ID=X1.APPLE_ISSUER_ID;if(X1.APPLE_KEY_CONTENT)D.APPLE_KEY_CONTENT=X1.APPLE_KEY_CONTENT;if(X1.APPLE_PROFILE_NAME)D.APPLE_PROFILE_NAME=X1.APPLE_PROFILE_NAME;if(X1.APP_STORE_CONNECT_TEAM_ID)D.APP_STORE_CONNECT_TEAM_ID=X1.APP_STORE_CONNECT_TEAM_ID;if(X1.ANDROID_KEYSTORE_FILE)D.ANDROID_KEYSTORE_FILE=X1.ANDROID_KEYSTORE_FILE;if(X1.KEYSTORE_KEY_ALIAS)D.KEYSTORE_KEY_ALIAS=X1.KEYSTORE_KEY_ALIAS;if(X1.KEYSTORE_KEY_PASSWORD)D.KEYSTORE_KEY_PASSWORD=X1.KEYSTORE_KEY_PASSWORD;if(X1.KEYSTORE_STORE_PASSWORD)D.KEYSTORE_STORE_PASSWORD=X1.KEYSTORE_STORE_PASSWORD;if(X1.PLAY_CONFIG_JSON)D.PLAY_CONFIG_JSON=X1.PLAY_CONFIG_JSON;return D}async function jS(D,Y,X){let Q=await r7(D),J=W90(),W={...Q?.[Y]||{}};if(Object.assign(W,J),X)Object.assign(W,X);if(Y==="android"){let $=!!W.KEYSTORE_KEY_PASSWORD,G=!!W.KEYSTORE_STORE_PASSWORD;if($&&!G)W.KEYSTORE_STORE_PASSWORD=W.KEYSTORE_KEY_PASSWORD;else if(!$&&G)W.KEYSTORE_KEY_PASSWORD=W.KEYSTORE_STORE_PASSWORD}return Object.keys(W).length>0?W:void 0}async function k2(D,Y,X={}){let Q={...X};if(D==="ios"){if(Y.BUILD_CERTIFICATE_FILE)Q.BUILD_CERTIFICATE_BASE64=await u4(Y.BUILD_CERTIFICATE_FILE);if(Y.BUILD_PROVISION_PROFILE_FILE)Q.BUILD_PROVISION_PROFILE_BASE64=await u4(Y.BUILD_PROVISION_PROFILE_FILE);if(Y.BUILD_PROVISION_PROFILE_FILE_PROD)Q.BUILD_PROVISION_PROFILE_BASE64_PROD=await u4(Y.BUILD_PROVISION_PROFILE_FILE_PROD);if(Y.APPLE_KEY_FILE)Q.APPLE_KEY_CONTENT=await u4(Y.APPLE_KEY_FILE)}else if(D==="android"){if(Y.ANDROID_KEYSTORE_PATH)Q.ANDROID_KEYSTORE_FILE=await u4(Y.ANDROID_KEYSTORE_PATH);if(Y.PLAY_CONFIG_JSON_PATH)Q.PLAY_CONFIG_JSON=await u4(Y.PLAY_CONFIG_JSON_PATH)}return Q}async function v2(D,Y,X,Q){let J=await m4(Q),W=J[D]||{};W[Y]={...W[Y],...X},J[D]=W,await PJ(J,Q)}async function CJ(D,Y,X){let Q=await m4(X);if(!D){await PJ({},X);return}if(!Y){delete Q[D],await PJ(Q,X);return}let J=Q[D]||{};if(delete J[Y],Object.keys(J).length===0)delete Q[D];else Q[D]=J;await PJ(Q,X)}async function y2(D,Y,X){return(await r7(D,X))?.[Y]||null}async function xJ(D){let Y=await m4(D);return Object.keys(Y)}function a7(){return IJ(NS(),ES)}function o7(){return AS}async function TS(D){try{if(!D.platform)q.error("Platform is required. Use --platform ios or --platform android"),S1(1);let Y=await U0(),X=_0(D.appId,Y?.config);if(!X)q.error("❌ App ID is required."),q.error(""),q.error("Either:"),q.error(" 1. Run this command from a Capacitor project directory, OR"),q.error(" 2. Provide --appId explicitly: --appId com.example.app"),q.error(""),S1(1);let Q=D.platform;q.info(`
|
|
240
|
+
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 _0(D,Y){return D||Y?.plugins?.CapacitorUpdater?.appId||Y?.appId}function W5(D){let Y=[];if(!D.localVersion)return{compatible:!0,reasons:[],message:"Package only exists on remote (will be removed)"};if(!D.remoteVersion)return Y.push("new_plugin"),{compatible:!1,reasons:Y,message:"New native plugin added (requires app store update)"};let X=!1;try{let $=fX(D.localVersion),G=fX(D.remoteVersion);X=tV($,G)}catch{X=!1}if(!X)Y.push("version_mismatch");let Q=D.localIosChecksum&&D.remoteIosChecksum&&D.localIosChecksum!==D.remoteIosChecksum,J=D.localAndroidChecksum&&D.remoteAndroidChecksum&&D.localAndroidChecksum!==D.remoteAndroidChecksum;if(Q&&J)Y.push("both_platforms_changed");else if(Q)Y.push("ios_code_changed");else if(J)Y.push("android_code_changed");if(Y.length===0)return{compatible:!0,reasons:[],message:"Compatible"};let W=[];for(let $ of Y)switch($){case"version_mismatch":W.push(`version changed: ${D.remoteVersion} → ${D.localVersion}`);break;case"ios_code_changed":W.push("iOS native code changed");break;case"android_code_changed":W.push("Android native code changed");break;case"both_platforms_changed":W.push("iOS and Android native code changed");break;case"new_plugin":W.push("new plugin (requires app store update)");break;case"removed_plugin":W.push("plugin removed");break}return{compatible:!1,reasons:Y,message:W.join(", ")}}function QD(D){return W5(D).compatible}async function TJ(D,Y,X,Q,J){let W=await S2(Q,J),$=await WS(D,Y,X),G=W.filter((H)=>!!H.native).map((H)=>{let F=$.get(H.name);if(F)return{name:H.name,localVersion:H.version,remoteVersion:F.version,localIosChecksum:H.ios_checksum,remoteIosChecksum:F.ios_checksum,localAndroidChecksum:H.android_checksum,remoteAndroidChecksum:F.android_checksum};return{name:H.name,localVersion:H.version,remoteVersion:void 0,localIosChecksum:H.ios_checksum,localAndroidChecksum:H.android_checksum}}),B=[...$].filter(([H])=>W.find((F)=>F.name===H)===void 0).map(([H,F])=>({name:H,localVersion:void 0,remoteVersion:F.version,remoteIosChecksum:F.ios_checksum,remoteAndroidChecksum:F.android_checksum}));return G.push(...B),{finalCompatibility:G,localDependencies:W}}async function P2(D,Y,X,Q){let J=await WS(D,Y,X),W=Q.map((G)=>{let B=J.get(G.name);if(B)return{name:G.name,localVersion:G.version,remoteVersion:B.version,localIosChecksum:G.ios_checksum,remoteIosChecksum:B.ios_checksum,localAndroidChecksum:G.android_checksum,remoteAndroidChecksum:B.android_checksum};return{name:G.name,localVersion:G.version,remoteVersion:void 0,localIosChecksum:G.ios_checksum,localAndroidChecksum:G.android_checksum}}),$=[...J].filter(([G])=>Q.find((B)=>B.name===G)===void 0).map(([G,B])=>({name:G,localVersion:void 0,remoteVersion:B.version,remoteIosChecksum:B.ios_checksum,remoteAndroidChecksum:B.android_checksum}));return W.push(...$),{finalCompatibility:W,localDependencies:Q}}async function SJ(D,Y,X){let Q=await R0({message:"Would you like to sync your project with Capacitor now? This is recommended to ensure encrypted updates work properly."});if(E0(Q)){if(D&&Y&&X)await U8("onboarding-v2",Y,X,"canceled","\uD83E\uDD37");throw q.error("Canceled Capacitor sync"),Error("Capacitor sync cancelled")}if(Q){let J=W8(),W=d0();W.start("Running the command...");try{await new Promise(($,G)=>{let B=S60(J.runner,["cap","sync"],{stdio:"pipe"});B.on("close",(H)=>{if(H===0)$();else G(Error(`Command failed with exit code ${H}`))}),B.on("error",(H)=>{G(H)})}),W.stop("Capacitor sync completed ✅")}catch($){W.stop("Error"),q.error(`Failed to run Capacitor sync: ${$}`),q.warn(`Please run "${J.runner} cap sync" manually to ensure encrypted updates work properly`)}}else{let J=W8();q.warn("⚠️ Important: If you upload encrypted bundles without syncing, updates will fail!"),q.info(`Remember to run "${J.runner} cap sync" before uploading encrypted bundles`)}}async function GS(D,Y){let{data:X}=await D.rpc("exist_app_v2",{appid:Y}).single();return!!X}async function h1(D,Y,X=!1){let{data:Q,error:J}=await D.rpc("reject_access_due_to_2fa_for_app",{app_id:Y});if(J){if(!X)q.error(`Cannot check 2FA compliance: ${J.message}`);throw Error(`Cannot check 2FA compliance: ${J.message}`)}if(Q){if(X)throw Error("2FA required for this organization");T2()}}async function L1(D,Y,X,Q,J=!1,W=!1){let $=W8();if(!W)await h1(D,X,J);let G=await nT(D,Y,X);if(!G.okay)switch(G.error){case"INVALID_APIKEY":{if(!J)q.error("Invalid apikey, such apikey does not exists!");throw Error("Invalid apikey, such apikey does not exists!")}case"NO_APP":{let F=`App ${X} does not exist, run first \`${$.runner} @capgo/cli app add ${X}\` to create it`;if(!J)q.error(F);throw Error(F)}case"NO_ORG":{if(!J)q.error("Could not find organization, please contact support to resolve this!");throw Error("Could not find organization, please contact support to resolve this!")}}let B=G.data;if(Q>B){let F=`Insuficcent permissions for app ${X}. Current permission: ${w8[G.data]}, required for this action: ${w8[Q]}.`;if(!J)q.error(F);throw Error(F)}return G.data}var V6="assets/icon.png";var p60=/^[a-z0-9]+(\.[\w-]+)+$/i;function n60(D,Y,X){if(!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(D.includes("--")){if(!X)q.error('The app id includes illegal symbols. You cannot use "--" in the app id');throw Error("App id includes illegal symbols")}if(!p60.test(D)){if(!X)q.error(`Invalid app ID format: "${D}"`),q.info("App ID must be in reverse domain notation (e.g., com.example.app)"),q.info("Valid format: lowercase letters, numbers, dots, hyphens, and underscores"),q.info("Examples: com.mycompany.myapp, io.capgo.app, com.example.my-app");throw Error("Invalid app ID format")}}async function i60(D,Y,X){if(!await GS(D,Y))return;if(Y==="io.ionic.starter"){if(!X)q.error(`This appId ${Y} 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)q.error(`App ${Y} already exist`);throw Error(`App ${Y} already exists`)}async function i7(D,Y,X,Q=!1){if(!Q)F0("Adding");await f0(),Y.apikey=Y.apikey||X0();let J=await U0(),W=_0(D,J?.config);n60(W,Y,Q);let $=await w0(Y.apikey,Y.supaHost,Y.supaAnon),G=await A0($,Y.apikey,["write","all"]);if(await i60($,W,Q),!X)X=await h4($,["admin","super_admin"]);let B=X.gid,{name:H,icon:F}=Y;if(H=H||J.config?.appName||"Unknown",F=F||"resources/icon.png",!F||!H){if(!Q)q.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(!Q)q.info(`Adding ${W} to Capgo`);let K=null,U=null;if(F&&BS(F)){if(K=HS(F),U=XD(F)||"image/png",!Q)q.warn(`Found app icon ${F}`)}else if(BS(V6)){if(K=HS(V6),U=XD(V6)||"image/png",!Q)q.warn(`Found app icon ${V6}`)}else if(!Q)q.warn(`Cannot find app icon in any of the following locations: ${F}, ${V6}`);let z="icon",V="https://xvwzpoazmxkqosrdewyv.supabase.co/storage/v1/object/public/images/capgo.png";if(K&&U){let{error:L}=await $.storage.from(`images/org/${B}/${W}`).upload(z,K,{contentType:U});if(L){if(!Q)console.error(L);if(!Q)q.error(`Could not add app ${m(L)}`);throw Error(`Could not add app ${m(L)}`)}let{data:O}=await $.storage.from(`images/org/${B}/${W}`).getPublicUrl(z);V=O?.publicUrl||V}let{error:w}=await $.from("apps").insert({icon_url:V,owner_org:B,user_id:G,name:H,app_id:W});if(w){if(!Q)q.error(`Could not add app ${m(w)}`);throw Error(`Could not add app ${m(w)}`)}if(await Z0(Y.apikey,{channel:"app",event:"App Created",icon:"\uD83C\uDD95",user_id:B,tags:{"app-id":W},notify:!1,notifyConsole:!0}).catch(()=>{}),!Q)q.success(`App ${W} added to Capgo`),q.info("This app is accessible to all members of your organization based on their permissions"),q.info(`Next step: upload a bundle with "npx @capgo/cli bundle upload ${W}"`),e("Done ✅");return{appId:W,organizationUid:B,userId:G,name:H,signedURL:V}}async function FS(D,Y){await i7(D,Y,void 0)}async function I2(D,Y,X=!1,Q=!1){if(!X)F0("Deleting");Y.apikey=Y.apikey||X0();let J=await U0(),W=_0(D,J?.config);if(!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!W){if(!X)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let $=await w0(Y.apikey,Y.supaHost,Y.supaAnon),G=await A0($,Y.apikey,["write","all"]);await L1($,Y.apikey,W,5,X);let{data:B,error:H}=await $.from("apps").select("owner_org ( created_by, id )").eq("app_id",W).single(),F=B;if(!Q&&!H&&(F?.owner_org.created_by??"")!==G)if(!X){q.warn("Deleting the app is not recommended for users that are not the organization owner"),q.warn("You are invited as a super_admin but your are not the owner"),q.warn("It's strongly recommended that you do not continue!");let w=await D8({message:"Do you want to continue?",options:[{label:"Yes",value:"yes"},{label:"No",value:"no"}]});if(E0(w)||w==="no")throw q.error("Canceled deleting the app, exiting"),Error("App deletion cancelled")}else throw Error("Cannot delete app: you are not the organization owner");else if(H&&!X)q.warn(`Cannot get the app owner ${m(H)}`);let{error:K}=await $.storage.from("images").remove([`org/${F?.owner_org.id}/${W}/icon`]);if(K&&!X)q.error("Could not delete app logo");let{error:U}=await $.storage.from(`apps/${W}/${G}`).remove(["versions"]);if(U&&!X)q.error("Could not delete app version");let{error:z}=await $.from("apps").delete().eq("app_id",W);if(z){if(!X)q.error("Could not delete app");throw Error(`Could not delete app: ${m(z)}`)}let V=await l1($,W);if(await Z0(Y.apikey,{channel:"app",event:"App Deleted",icon:"\uD83D\uDDD1️",user_id:V,tags:{"app-id":W},notify:!1}).catch(()=>{}),!X)q.success("App deleted in Capgo"),e("Done ✅");return!0}async function qS(D,Y){return I2(D,Y,!1,!1)}import{platform as r60,version as a60}from"node:os";import{version as o60}from"node:process";async function KS(D){let Y={},X=Object.keys(D);return(await Promise.all(X.map((J)=>gQ(J)))).forEach((J,W)=>{if(J)Y[X[W]]=J}),Y}async function s60(){let D=await z6(),Y={"@capgo/cli":f8.version};for(let[X,Q]of D)if(X.startsWith("@capgo/")||X.startsWith("@capawesome/")||X.startsWith("capacitor"))Y[X]=Q;return Y}async function C2(D,Y=!1){if(!Y)q.warn(" \uD83D\uDC8A Capgo Doctor \uD83D\uDC8A");let X=await U0(),Q=x6("",D.packageJson),J=X?.config?.plugins?.CapacitorUpdater?.version||Q,W=X?.config?.appName||"",$=_0("",X?.config),G=X?.config?.webDir||"";if(!Y)q.info(` App Name: ${W}`),q.info(` App ID: ${$}`),q.info(` App Version: ${J}`),q.info(` Web Dir: ${G}`),q.info(` OS: ${r60()} ${a60()}`),q.info(` Node: ${o60}`),q.info(" Installed Dependencies:");let B=await s60();if(Object.keys(B).length===0){if(!Y)q.warning("\x1B[31m%s\x1B[0m \uD83D\uDEA8 No dependencies found");throw Error("No dependencies found")}if(!Y)for(let F of Object.keys(B))q.info(` ${F}: ${B[F]}`);let H={};if(!Y){let F=d0();F.start("Running: Loading latest dependencies"),H=await KS(B),F.stop("Latest Dependencies:");for(let K of Object.keys(H))q.info(` ${K}: ${H[K]}`)}else H=await KS(B);if(JSON.stringify(B)!==JSON.stringify(H)){if(!Y)q.warn("\x1B[31m\uD83D\uDEA8 Some dependencies are not up to date\x1B[0m");throw Error("Some dependencies are not up to date")}if(!Y)q.success("\x1B[32m✅ All dependencies are up to date\x1B[0m");return{appName:W,appId:$,appVersion:J,webDir:G,installedDependencies:B,latestDependencies:H}}async function zS(D){return C2(D)}function t60(D){let Y=new G1;Y.headers=["Name","id","Created"],Y.rows=[];for(let X of D.toReversed())Y.rows.push([X.name??"",X.app_id,g4(X.created_at)]);q.success("Apps"),q.success(Y.toString())}async function e60(D,Y){let{data:X,error:Q}=await D.from("apps").select().order("created_at",{ascending:!1});if(Q){if(!Y)q.error("Apps not found");throw Error("Apps not found")}return X??[]}async function x2(D,Y=!1){if(!Y)F0("List apps in Capgo");await f0(),D.apikey=D.apikey||X0();let X=await w0(D.apikey,D.supaHost,D.supaAnon);if(await A0(X,D.apikey,["write","all","read","upload"]),!Y)q.info("Getting active bundle in Capgo");let Q=await e60(X,Y);if(!Q.length){if(!Y)q.error("No apps found");throw Error("No apps found")}if(!Y)q.info(`Active app in Capgo: ${Q.length}`),t60(Q),e("Done ✅");return Q}async function US(D){return x2(D,!1)}import{randomUUID as D90}from"node:crypto";import{existsSync as VS,readFileSync as wS}from"node:fs";async function _2(D,Y,X=!1){if(!X)F0("Set app");Y.apikey=Y.apikey||X0();let Q=await U0();if(D=_0(D,Q?.config),!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let J=await w0(Y.apikey,Y.supaHost,Y.supaAnon),$=(await h4(J,["admin","super_admin"])).gid,G=await A0(J,Y.apikey,["write","all"]);await L1(J,Y.apikey,D,4,X);let{name:B,icon:H,retention:F,exposeMetadata:K}=Y;if(F&&Number.isNaN(Number(F))){if(!X)q.error("retention value must be a number");throw Error("Retention value must be a number")}else if(F&&F<0){if(!X)q.error("retention value cannot be less than 0");throw Error("Retention value cannot be less than 0")}else if(F&&F>=63113904){if(!X)q.error("retention value cannot be greater than 63113904 seconds (2 years)");throw Error("Retention value cannot be greater than 63113904 seconds (2 years)")}let U,z,V=`icon_${D90()}`,w="https://xvwzpoazmxkqosrdewyv.supabase.co/storage/v1/object/public/images/capgo.png";if(H&&VS(H)){if(U=wS(H),z=XD(H)||"image/png",!X)q.warn(`Found app icon ${H}`)}else if(VS(V6)){if(U=wS(V6),z=XD(V6)||"image/png",!X)q.warn(`Found app icon ${V6}`)}else if(!X)q.warn(`Cannot find app icon in any of the following locations: ${H}, ${V6}`);if(U&&z){let{error:O}=await J.storage.from(`images/org/${$}/${D}`).upload(V,U,{contentType:z});if(O){if(!X)q.error(`Could not set app ${m(O)}`);throw Error(`Could not set app: ${m(O)}`)}let{data:Z}=await J.storage.from(`images/org/${$}/${D}`).getPublicUrl(V);w=Z?.publicUrl||w}let{error:L}=await J.from("apps").update({icon_url:w,name:B,retention:!F?void 0:F*24*60*60,expose_metadata:K}).eq("app_id",D).eq("user_id",G);if(L){if(!X)q.error(`Could not set app ${m(L)}`);throw Error(`Could not set app: ${m(L)}`)}if(await Z0(Y.apikey,{channel:"app",event:"App Updated",icon:"\uD83D\uDCDD",user_id:$,tags:{"app-id":D},notify:!1,notifyConsole:!0}).catch(()=>{}),!X)e("Done ✅");return!0}async function LS(D,Y){return _2(D,Y)}async function b2(D,Y,X=!1){if(!X)F0("Set a specific setting in capacitor config");if(Y.bool&&Y.string){if(!X)q.error("Bool and string CANNOT be set at the same time");throw Error("Bool and string cannot both be provided")}if(!Y.bool&&!Y.string){if(!X)q.error("You MUST provide either bool or string as the value");throw Error("Either bool or string value is required")}if(Y.bool&&Y.bool!=="true"&&Y.bool!=="false"){if(!X)q.error("Invalid bool");throw Error("Invalid bool value; expected true or false")}try{let Q=await U0(),J=Q.config,W=D.split(".");if(W.length===0){if(!X)q.error("Invalid path");throw Error("Invalid config path")}for(let G of W.slice(0,-1)){if(!Object.prototype.hasOwnProperty.call(J,G))J[G]={};J=J[G]}let $=Y.bool?Y.bool==="true":Y.string;if(J[W.at(-1)]=$,await P4(Q,!0),!X)q.success(`Set "${D}" to "${$}"`)}catch(Q){if(!X)q.error(`Cannot set config in capacitor settings ${m(Q)}`);throw Error(`Cannot set capacitor config: ${m(Q)}`)}if(!X)e("Done ✅")}async function MS(D,Y){return b2(D,Y)}import{existsSync as w6}from"node:fs";import{resolve as L6}from"node:path";import{exit as S1}from"node:process";import{mkdir as Y90,readFile as OS,writeFile as X90}from"node:fs/promises";import{homedir as Q90}from"node:os";import{join as IJ}from"node:path";import{cwd as NS,env as X1}from"node:process";var ZS=IJ(Q90(),".capgo-credentials"),AS=IJ(ZS,"credentials.json"),ES=".capgo-credentials.json";function RS(D){return D?IJ(NS(),ES):AS}function J90(D){return D?null:ZS}async function u4(D){return(await OS(D)).toString("base64")}async function m4(D){try{let Y=RS(D),X=await OS(Y,"utf-8");return JSON.parse(X)}catch{return{}}}async function r7(D,Y){if(Y!==void 0){let J=await m4(Y);if(!D){let W=Object.keys(J);if(W.length===0)return null;return J[W[0]]||null}return J[D]||null}let X=await m4(!0),Q=await m4(!1);if(!D){let J=Object.keys(X);if(J.length>0)return X[J[0]]||null;let W=Object.keys(Q);if(W.length===0)return null;return Q[W[0]]||null}return X[D]||Q[D]||null}async function PJ(D,Y){let X=RS(Y),Q=J90(Y);if(Q)await Y90(Q,{recursive:!0});await X90(X,JSON.stringify(D,null,2),"utf-8")}function W90(){let D={};if(X1.BUILD_CERTIFICATE_BASE64)D.BUILD_CERTIFICATE_BASE64=X1.BUILD_CERTIFICATE_BASE64;if(X1.BUILD_PROVISION_PROFILE_BASE64)D.BUILD_PROVISION_PROFILE_BASE64=X1.BUILD_PROVISION_PROFILE_BASE64;if(X1.BUILD_PROVISION_PROFILE_BASE64_PROD)D.BUILD_PROVISION_PROFILE_BASE64_PROD=X1.BUILD_PROVISION_PROFILE_BASE64_PROD;if(X1.P12_PASSWORD)D.P12_PASSWORD=X1.P12_PASSWORD;if(X1.APPLE_KEY_ID)D.APPLE_KEY_ID=X1.APPLE_KEY_ID;if(X1.APPLE_ISSUER_ID)D.APPLE_ISSUER_ID=X1.APPLE_ISSUER_ID;if(X1.APPLE_KEY_CONTENT)D.APPLE_KEY_CONTENT=X1.APPLE_KEY_CONTENT;if(X1.APPLE_PROFILE_NAME)D.APPLE_PROFILE_NAME=X1.APPLE_PROFILE_NAME;if(X1.APP_STORE_CONNECT_TEAM_ID)D.APP_STORE_CONNECT_TEAM_ID=X1.APP_STORE_CONNECT_TEAM_ID;if(X1.ANDROID_KEYSTORE_FILE)D.ANDROID_KEYSTORE_FILE=X1.ANDROID_KEYSTORE_FILE;if(X1.KEYSTORE_KEY_ALIAS)D.KEYSTORE_KEY_ALIAS=X1.KEYSTORE_KEY_ALIAS;if(X1.KEYSTORE_KEY_PASSWORD)D.KEYSTORE_KEY_PASSWORD=X1.KEYSTORE_KEY_PASSWORD;if(X1.KEYSTORE_STORE_PASSWORD)D.KEYSTORE_STORE_PASSWORD=X1.KEYSTORE_STORE_PASSWORD;if(X1.PLAY_CONFIG_JSON)D.PLAY_CONFIG_JSON=X1.PLAY_CONFIG_JSON;return D}async function jS(D,Y,X){let Q=await r7(D),J=W90(),W={...Q?.[Y]||{}};if(Object.assign(W,J),X)Object.assign(W,X);if(Y==="android"){let $=!!W.KEYSTORE_KEY_PASSWORD,G=!!W.KEYSTORE_STORE_PASSWORD;if($&&!G)W.KEYSTORE_STORE_PASSWORD=W.KEYSTORE_KEY_PASSWORD;else if(!$&&G)W.KEYSTORE_KEY_PASSWORD=W.KEYSTORE_STORE_PASSWORD}return Object.keys(W).length>0?W:void 0}async function k2(D,Y,X={}){let Q={...X};if(D==="ios"){if(Y.BUILD_CERTIFICATE_FILE)Q.BUILD_CERTIFICATE_BASE64=await u4(Y.BUILD_CERTIFICATE_FILE);if(Y.BUILD_PROVISION_PROFILE_FILE)Q.BUILD_PROVISION_PROFILE_BASE64=await u4(Y.BUILD_PROVISION_PROFILE_FILE);if(Y.BUILD_PROVISION_PROFILE_FILE_PROD)Q.BUILD_PROVISION_PROFILE_BASE64_PROD=await u4(Y.BUILD_PROVISION_PROFILE_FILE_PROD);if(Y.APPLE_KEY_FILE)Q.APPLE_KEY_CONTENT=await u4(Y.APPLE_KEY_FILE)}else if(D==="android"){if(Y.ANDROID_KEYSTORE_PATH)Q.ANDROID_KEYSTORE_FILE=await u4(Y.ANDROID_KEYSTORE_PATH);if(Y.PLAY_CONFIG_JSON_PATH)Q.PLAY_CONFIG_JSON=await u4(Y.PLAY_CONFIG_JSON_PATH)}return Q}async function v2(D,Y,X,Q){let J=await m4(Q),W=J[D]||{};W[Y]={...W[Y],...X},J[D]=W,await PJ(J,Q)}async function CJ(D,Y,X){let Q=await m4(X);if(!D){await PJ({},X);return}if(!Y){delete Q[D],await PJ(Q,X);return}let J=Q[D]||{};if(delete J[Y],Object.keys(J).length===0)delete Q[D];else Q[D]=J;await PJ(Q,X)}async function y2(D,Y,X){return(await r7(D,X))?.[Y]||null}async function xJ(D){let Y=await m4(D);return Object.keys(Y)}function a7(){return IJ(NS(),ES)}function o7(){return AS}async function TS(D){try{if(!D.platform)q.error("Platform is required. Use --platform ios or --platform android"),S1(1);let Y=await U0(),X=_0(D.appId,Y?.config);if(!X)q.error("❌ App ID is required."),q.error(""),q.error("Either:"),q.error(" 1. Run this command from a Capacitor project directory, OR"),q.error(" 2. Provide --appId explicitly: --appId com.example.app"),q.error(""),S1(1);let Q=D.platform;q.info(`
|
|
241
241
|
\uD83D\uDD12 SECURITY NOTICE:`),q.info(" - Credentials saved to ~/.capgo-credentials/credentials.json (local only)"),q.info(" - When building, credentials are sent to Capgo servers"),q.info(" - Credentials are NEVER stored on Capgo servers"),q.info(" - Auto-deleted after build"),q.info(` - Builds sent directly to app stores - Capgo keeps nothing
|
|
242
|
-
`);let J={},W={};if(Q==="ios"){if(D.certificate){let H=L6(D.certificate);if(!w6(H))q.error(`Certificate file not found: ${H}`),S1(1);W.BUILD_CERTIFICATE_FILE=H,q.info(`✓ Certificate file: ${H}`)}if(D.provisioningProfile){let H=L6(D.provisioningProfile);if(!w6(H))q.error(`Provisioning profile not found: ${H}`),S1(1);W.BUILD_PROVISION_PROFILE_FILE=H,q.info(`✓ Provisioning profile: ${H}`)}if(D.provisioningProfileProd){let H=L6(D.provisioningProfileProd);if(!w6(H))q.error(`Production provisioning profile not found: ${H}`),S1(1);W.BUILD_PROVISION_PROFILE_FILE_PROD=H,q.info(`✓ Production provisioning profile: ${H}`)}if(D.appleKey){let H=L6(D.appleKey);if(!w6(H))q.error(`Apple key file not found: ${H}`),S1(1);W.APPLE_KEY_FILE=H,q.info(`✓ Apple key file: ${H}`)}if(D.p12Password)J.P12_PASSWORD=D.p12Password;else if(W.BUILD_CERTIFICATE_FILE)q.warn("⚠️ No P12 password provided - assuming certificate has no password"),q.warn(' If your certificate requires a password, add --p12-password "your-password"');if(D.appleKeyId)J.APPLE_KEY_ID=D.appleKeyId;if(D.appleIssuerId)J.APPLE_ISSUER_ID=D.appleIssuerId;if(D.appleProfileName)J.APPLE_PROFILE_NAME=D.appleProfileName;if(D.appleTeamId)J.APP_STORE_CONNECT_TEAM_ID=D.appleTeamId}else if(Q==="android"){if(D.keystore){let K=L6(D.keystore);if(!w6(K))q.error(`Keystore file not found: ${K}`),S1(1);W.ANDROID_KEYSTORE_PATH=K,q.info(`✓ Keystore file: ${K}`)}if(D.playConfig){let K=L6(D.playConfig);if(!w6(K))q.error(`Play config file not found: ${K}`),S1(1);W.PLAY_CONFIG_JSON_PATH=K,q.info(`✓ Play Store config: ${K}`)}if(D.keystoreAlias)J.KEYSTORE_KEY_ALIAS=D.keystoreAlias;let H=!!D.keystoreKeyPassword,F=!!D.keystoreStorePassword;if(H&&!F)J.KEYSTORE_KEY_PASSWORD=D.keystoreKeyPassword,J.KEYSTORE_STORE_PASSWORD=D.keystoreKeyPassword;else if(!H&&F)J.KEYSTORE_KEY_PASSWORD=D.keystoreStorePassword,J.KEYSTORE_STORE_PASSWORD=D.keystoreStorePassword;else if(H&&F)J.KEYSTORE_KEY_PASSWORD=D.keystoreKeyPassword,J.KEYSTORE_STORE_PASSWORD=D.keystoreStorePassword}let $=await k2(Q,W,J),G=[];if(Q==="ios"){if(!$.BUILD_CERTIFICATE_BASE64)G.push("--certificate <path> (P12 certificate file)");if(!$.BUILD_PROVISION_PROFILE_BASE64)G.push("--provisioning-profile <path> (Provisioning profile file)");if(!$.APPLE_KEY_ID)G.push("--apple-key-id <id> (App Store Connect API Key ID)");if(!$.APPLE_ISSUER_ID)G.push("--apple-issuer-id <id> (App Store Connect Issuer ID)");if(!$.APPLE_KEY_CONTENT)G.push("--apple-key <path> (App Store Connect API Key file)");if(!$.APP_STORE_CONNECT_TEAM_ID)G.push("--apple-team-id <id> (App Store Connect Team ID)");if(!$.APPLE_PROFILE_NAME)G.push("--apple-profile-name <name> (Provisioning profile name)")}else if(Q==="android"){if(!$.ANDROID_KEYSTORE_FILE)G.push("--keystore <path> (Keystore file)");if(!$.KEYSTORE_KEY_ALIAS)G.push("--keystore-alias <alias> (Keystore alias)");if(!$.KEYSTORE_KEY_PASSWORD&&!$.KEYSTORE_STORE_PASSWORD)G.push("--keystore-key-password <password> OR --keystore-store-password <password> (At least one password required, will be used for both)");if(!$.PLAY_CONFIG_JSON)G.push("--play-config <path> (Google Play service account JSON - required for uploading to Play Store)")}if(G.length>0){q.error(`❌ Missing required credentials for ${Q.toUpperCase()}:`),q.error("");for(let H of G)q.error(` • ${H}`);if(q.error(""),q.error("Example:"),Q==="ios")q.error(" npx @capgo/cli build credentials save --platform ios \\"),q.error(" --certificate ./cert.p12 \\"),q.error(' --p12-password "your-password" \\ # Optional if cert has no password'),q.error(" --provisioning-profile ./profile.mobileprovision \\"),q.error(" --apple-key ./AuthKey_XXXXXXXXXX.p8 \\"),q.error(' --apple-key-id "XXXXXXXXXX" \\'),q.error(' --apple-issuer-id "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \\'),q.error(' --apple-team-id "XXXXXXXXXX" \\'),q.error(' --apple-profile-name "match AppStore com.example.app"');else q.error(" npx @capgo/cli build credentials save --platform android \\"),q.error(" --keystore ./release.keystore \\"),q.error(' --keystore-alias "my-key-alias" \\'),q.error(' --keystore-key-password "password" \\'),q.error(" --play-config ./play-store-service-account.json"),q.error(""),q.error(" Note: If both key and store passwords are the same, you only need to provide one."),q.error(" If they differ, provide both --keystore-key-password and --keystore-store-password."),q.error(" The --play-config is required for uploading to Google Play Store.");q.error(""),S1(1)}await v2(X,Q,$,D.local);try{let H=X0(!0);if(H){let F=await w0(H),K=await
|
|
242
|
+
`);let J={},W={};if(Q==="ios"){if(D.certificate){let H=L6(D.certificate);if(!w6(H))q.error(`Certificate file not found: ${H}`),S1(1);W.BUILD_CERTIFICATE_FILE=H,q.info(`✓ Certificate file: ${H}`)}if(D.provisioningProfile){let H=L6(D.provisioningProfile);if(!w6(H))q.error(`Provisioning profile not found: ${H}`),S1(1);W.BUILD_PROVISION_PROFILE_FILE=H,q.info(`✓ Provisioning profile: ${H}`)}if(D.provisioningProfileProd){let H=L6(D.provisioningProfileProd);if(!w6(H))q.error(`Production provisioning profile not found: ${H}`),S1(1);W.BUILD_PROVISION_PROFILE_FILE_PROD=H,q.info(`✓ Production provisioning profile: ${H}`)}if(D.appleKey){let H=L6(D.appleKey);if(!w6(H))q.error(`Apple key file not found: ${H}`),S1(1);W.APPLE_KEY_FILE=H,q.info(`✓ Apple key file: ${H}`)}if(D.p12Password)J.P12_PASSWORD=D.p12Password;else if(W.BUILD_CERTIFICATE_FILE)q.warn("⚠️ No P12 password provided - assuming certificate has no password"),q.warn(' If your certificate requires a password, add --p12-password "your-password"');if(D.appleKeyId)J.APPLE_KEY_ID=D.appleKeyId;if(D.appleIssuerId)J.APPLE_ISSUER_ID=D.appleIssuerId;if(D.appleProfileName)J.APPLE_PROFILE_NAME=D.appleProfileName;if(D.appleTeamId)J.APP_STORE_CONNECT_TEAM_ID=D.appleTeamId}else if(Q==="android"){if(D.keystore){let K=L6(D.keystore);if(!w6(K))q.error(`Keystore file not found: ${K}`),S1(1);W.ANDROID_KEYSTORE_PATH=K,q.info(`✓ Keystore file: ${K}`)}if(D.playConfig){let K=L6(D.playConfig);if(!w6(K))q.error(`Play config file not found: ${K}`),S1(1);W.PLAY_CONFIG_JSON_PATH=K,q.info(`✓ Play Store config: ${K}`)}if(D.keystoreAlias)J.KEYSTORE_KEY_ALIAS=D.keystoreAlias;let H=!!D.keystoreKeyPassword,F=!!D.keystoreStorePassword;if(H&&!F)J.KEYSTORE_KEY_PASSWORD=D.keystoreKeyPassword,J.KEYSTORE_STORE_PASSWORD=D.keystoreKeyPassword;else if(!H&&F)J.KEYSTORE_KEY_PASSWORD=D.keystoreStorePassword,J.KEYSTORE_STORE_PASSWORD=D.keystoreStorePassword;else if(H&&F)J.KEYSTORE_KEY_PASSWORD=D.keystoreKeyPassword,J.KEYSTORE_STORE_PASSWORD=D.keystoreStorePassword}let $=await k2(Q,W,J),G=[];if(Q==="ios"){if(!$.BUILD_CERTIFICATE_BASE64)G.push("--certificate <path> (P12 certificate file)");if(!$.BUILD_PROVISION_PROFILE_BASE64)G.push("--provisioning-profile <path> (Provisioning profile file)");if(!$.APPLE_KEY_ID)G.push("--apple-key-id <id> (App Store Connect API Key ID)");if(!$.APPLE_ISSUER_ID)G.push("--apple-issuer-id <id> (App Store Connect Issuer ID)");if(!$.APPLE_KEY_CONTENT)G.push("--apple-key <path> (App Store Connect API Key file)");if(!$.APP_STORE_CONNECT_TEAM_ID)G.push("--apple-team-id <id> (App Store Connect Team ID)");if(!$.APPLE_PROFILE_NAME)G.push("--apple-profile-name <name> (Provisioning profile name)")}else if(Q==="android"){if(!$.ANDROID_KEYSTORE_FILE)G.push("--keystore <path> (Keystore file)");if(!$.KEYSTORE_KEY_ALIAS)G.push("--keystore-alias <alias> (Keystore alias)");if(!$.KEYSTORE_KEY_PASSWORD&&!$.KEYSTORE_STORE_PASSWORD)G.push("--keystore-key-password <password> OR --keystore-store-password <password> (At least one password required, will be used for both)");if(!$.PLAY_CONFIG_JSON)G.push("--play-config <path> (Google Play service account JSON - required for uploading to Play Store)")}if(G.length>0){q.error(`❌ Missing required credentials for ${Q.toUpperCase()}:`),q.error("");for(let H of G)q.error(` • ${H}`);if(q.error(""),q.error("Example:"),Q==="ios")q.error(" npx @capgo/cli build credentials save --platform ios \\"),q.error(" --certificate ./cert.p12 \\"),q.error(' --p12-password "your-password" \\ # Optional if cert has no password'),q.error(" --provisioning-profile ./profile.mobileprovision \\"),q.error(" --apple-key ./AuthKey_XXXXXXXXXX.p8 \\"),q.error(' --apple-key-id "XXXXXXXXXX" \\'),q.error(' --apple-issuer-id "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \\'),q.error(' --apple-team-id "XXXXXXXXXX" \\'),q.error(' --apple-profile-name "match AppStore com.example.app"');else q.error(" npx @capgo/cli build credentials save --platform android \\"),q.error(" --keystore ./release.keystore \\"),q.error(' --keystore-alias "my-key-alias" \\'),q.error(' --keystore-key-password "password" \\'),q.error(" --play-config ./play-store-service-account.json"),q.error(""),q.error(" Note: If both key and store passwords are the same, you only need to provide one."),q.error(" If they differ, provide both --keystore-key-password and --keystore-store-password."),q.error(" The --play-config is required for uploading to Google Play Store.");q.error(""),S1(1)}await v2(X,Q,$,D.local);try{let H=X0(!0);if(H){let F=await w0(H),K=await l1(F,X);await Z0(H,{channel:"credentials",event:"Credentials saved",icon:"\uD83D\uDD10",user_id:K,tags:{"app-id":X,platform:Q,storage:D.local?"local":"global"},notify:!1}).catch()}}catch{}let B=D.local?a7():o7();q.success(`
|
|
243
243
|
✅ ${Q.toUpperCase()} credentials saved successfully for ${X}!`),q.info(` Location: ${B}`),q.info(` Use: npx @capgo/cli build ${X} --platform ${Q}
|
|
244
244
|
`)}catch(Y){q.error(`Failed to save credentials: ${Y instanceof Error?Y.message:String(Y)}`),S1(1)}}async function SS(D){try{let Y=D?.local?await xJ(!0):[],X=D?.local?[]:await xJ(!1),Q=[...new Set([...Y,...X])];if(Q.length===0){q.info("No saved credentials found."),q.info("Use: npx @capgo/cli build credentials save --platform <ios|android>");return}q.info(`
|
|
245
245
|
\uD83D\uDCCB Saved Build Credentials:
|
|
@@ -251,9 +251,9 @@ Global: ${o7()}`),q.info(`Local: ${a7()}`),q.info(`
|
|
|
251
251
|
`)}catch(Y){q.error(`Failed to clear credentials: ${Y instanceof Error?Y.message:String(Y)}`),S1(1)}}async function IS(D){try{let Y=!!(D.certificate||D.provisioningProfile||D.provisioningProfileProd||D.p12Password||D.appleKey||D.appleKeyId||D.appleIssuerId||D.appleProfileName||D.appleTeamId),X=!!(D.keystore||D.keystoreAlias||D.keystoreKeyPassword||D.keystoreStorePassword||D.playConfig),Q=D.platform;if(!Q)if(Y&&!X)Q="ios";else if(X&&!Y)Q="android";else if(Y&&X)q.error("Cannot mix iOS and Android options. Please use --platform to specify which platform."),S1(1);else q.error("No credentials provided to update."),q.error(""),q.error("Usage: npx @capgo/cli build credentials update [options]"),q.error(""),q.error("iOS options: --certificate, --provisioning-profile, --apple-key, etc."),q.error("Android options: --keystore, --keystore-alias, --play-config, etc."),S1(1);let J=await U0(),W=_0(D.appId,J?.config);if(!W)q.error("❌ App ID is required."),q.error(""),q.error("Either:"),q.error(" 1. Run this command from a Capacitor project directory, OR"),q.error(" 2. Provide --appId explicitly: --appId com.example.app"),S1(1);if(!await y2(W,Q,D.local))q.error(`❌ No existing ${Q.toUpperCase()} credentials found for ${W}.`),q.error(""),q.error('Use "build credentials save" to create credentials first.'),S1(1);let G={},B={};if(Q==="ios"){if(D.certificate){let K=L6(D.certificate);if(!w6(K))q.error(`Certificate file not found: ${K}`),S1(1);B.BUILD_CERTIFICATE_FILE=K,q.info(`✓ Updating certificate: ${K}`)}if(D.provisioningProfile){let K=L6(D.provisioningProfile);if(!w6(K))q.error(`Provisioning profile not found: ${K}`),S1(1);B.BUILD_PROVISION_PROFILE_FILE=K,q.info(`✓ Updating provisioning profile: ${K}`)}if(D.provisioningProfileProd){let K=L6(D.provisioningProfileProd);if(!w6(K))q.error(`Production provisioning profile not found: ${K}`),S1(1);B.BUILD_PROVISION_PROFILE_FILE_PROD=K,q.info(`✓ Updating production provisioning profile: ${K}`)}if(D.appleKey){let K=L6(D.appleKey);if(!w6(K))q.error(`Apple key file not found: ${K}`),S1(1);B.APPLE_KEY_FILE=K,q.info(`✓ Updating Apple key file: ${K}`)}if(D.p12Password)G.P12_PASSWORD=D.p12Password,q.info("✓ Updating P12 password");if(D.appleKeyId)G.APPLE_KEY_ID=D.appleKeyId,q.info(`✓ Updating Apple Key ID: ${D.appleKeyId}`);if(D.appleIssuerId)G.APPLE_ISSUER_ID=D.appleIssuerId,q.info(`✓ Updating Apple Issuer ID: ${D.appleIssuerId}`);if(D.appleProfileName)G.APPLE_PROFILE_NAME=D.appleProfileName,q.info(`✓ Updating Apple Profile Name: ${D.appleProfileName}`);if(D.appleTeamId)G.APP_STORE_CONNECT_TEAM_ID=D.appleTeamId,q.info(`✓ Updating Apple Team ID: ${D.appleTeamId}`)}else if(Q==="android"){if(D.keystore){let K=L6(D.keystore);if(!w6(K))q.error(`Keystore file not found: ${K}`),S1(1);B.ANDROID_KEYSTORE_PATH=K,q.info(`✓ Updating keystore: ${K}`)}if(D.playConfig){let K=L6(D.playConfig);if(!w6(K))q.error(`Play config file not found: ${K}`),S1(1);B.PLAY_CONFIG_JSON_PATH=K,q.info(`✓ Updating Play Store config: ${K}`)}if(D.keystoreAlias)G.KEYSTORE_KEY_ALIAS=D.keystoreAlias,q.info(`✓ Updating keystore alias: ${D.keystoreAlias}`);if(D.keystoreKeyPassword)G.KEYSTORE_KEY_PASSWORD=D.keystoreKeyPassword,q.info("✓ Updating keystore key password");if(D.keystoreStorePassword)G.KEYSTORE_STORE_PASSWORD=D.keystoreStorePassword,q.info("✓ Updating keystore store password")}let H=await k2(Q,B,G);await v2(W,Q,H,D.local);let F=D.local?a7():o7();q.success(`
|
|
252
252
|
✅ ${Q.toUpperCase()} credentials updated for ${W}!`),q.info(` Location: ${F}
|
|
253
253
|
`)}catch(Y){q.error(`Failed to update credentials: ${Y instanceof Error?Y.message:String(Y)}`),S1(1)}}import{existsSync as f2,readdirSync as $90,readFileSync as G90,statSync as B90}from"node:fs";import{mkdir as H90,readFile as h2,rm as F90,stat as q90,writeFile as K90}from"node:fs/promises";import{tmpdir as z90}from"node:os";import{basename as CS,join as c4,resolve as U90}from"node:path";import{cwd as V90,exit as w90}from"node:process";var _S=a1(uG(),1),_J=a1(hQ(),1);async function L90(D,Y,X=3,Q=!1){let J=[1000,3000,5000];for(let W=1;W<=X;W++)try{let $=await fetch(D,Y);if($.ok||$.status>=400&&$.status<500)return $;let G=await $.text().catch(()=>"unknown error");if(!Q)q.warn(`Build request attempt ${W}/${X} failed: ${$.status} - ${G}`);if(W<X){let B=J[W-1]||5000;if(!Q)q.info(`Retrying in ${B/1000}s...`);await new Promise((H)=>setTimeout(H,B))}else throw Error(`Failed to request build after ${X} attempts: ${$.status} - ${G}`)}catch($){let G=$ instanceof Error?$.message:String($);if(G.startsWith("Failed to request build after"))throw $;if(!Q)q.warn(`Build request attempt ${W}/${X} failed: ${G}`);if(W<X){let B=J[W-1]||5000;if(!Q)q.info(`Retrying in ${B/1000}s...`);await new Promise((H)=>setTimeout(H,B))}else throw Error(`Failed to request build after ${X} attempts: ${G}`)}throw Error("Unexpected error in fetchWithRetry")}async function M90(D,Y,X,Q,J,W=!1){if(J)return null;let $=null,G=!1,B=`${D}/build/logs/${Y}?app_id=${encodeURIComponent(X)}`;q.info(`Connecting to log stream: ${B}`);try{let H=await fetch(B,{headers:{authorization:Q}});if(q.info(`Log stream response: ${H.status}`),!H.ok){let V=await H.text().catch(()=>"unknown error");return q.warn(`Could not stream logs (${H.status}): ${V}`),null}let F=H.body?.getReader();if(!F)return q.warn("No response body for log stream"),null;q.info("Reading log stream...");let K=new TextDecoder,U="",z=(V)=>{if(!V.trim())return;let w=V.match(/^(?:Build|Job already) (succeeded|failed|expired|released|cancelled)$/i);if(w){$=w[1].toLowerCase();return}if($)return;if(!G)G=!0,q.info("");q.info(V)};while(!0){let{done:V,value:w}=await F.read();if(V)break;U+=K.decode(w,{stream:!0});let L=U.split(`
|
|
254
|
-
`);U=L.pop()||"";for(let O of L)if(O.startsWith("data: ")){let Z=O.slice(6);z(Z)}}if(U.startsWith("data: ")){let V=U.slice(6);z(V)}return $}catch(H){if(!J)q.warn(`Log streaming interrupted${H instanceof Error?`: ${H.message}`:""}`);return null}}async function O90(D,Y,X,Q,J,W){let G=0;while(G<120)try{let B=await fetch(`${D}/build/status?job_id=${encodeURIComponent(Y)}&app_id=${encodeURIComponent(X)}&platform=${Q}`,{headers:{authorization:J}});if(!B.ok){if(!W)q.warn(`Status check failed: ${B.status}`);await new Promise((F)=>setTimeout(F,5000)),G++;continue}let H=await B.json();if(H.status==="succeeded"||H.status==="failed")return H.status;await new Promise((F)=>setTimeout(F,5000)),G++}catch(B){if(!W)q.warn(`Status check error: ${B}`);await new Promise((H)=>setTimeout(H,5000)),G++}if(!W)q.warn("Build status polling timed out");return"timeout"}async function N90(D,Y){let X=new Set,Q=!1;if(Y==="ios"){let J=c4(D,"ios/App/CapApp-SPM/Package.swift");if(f2(J)){Q=!0;let $=(await h2(J,"utf-8")).matchAll(/\.package\s*\([^)]*path:\s*["'](?:\.\.\/)*node_modules\/([^"']+)["']\s*\)/g);for(let G of $)X.add(G[1])}else{let W=c4(D,"ios/App/Podfile");if(f2(W)){let G=(await h2(W,"utf-8")).matchAll(/pod\s+['"][^'"]+['"],\s*:path\s*=>\s*['"]\.\.\/\.\.\/node_modules\/([^'"]+)['"]/g);for(let B of G)X.add(B[1])}}}else if(Y==="android"){let J=c4(D,"android/capacitor.settings.gradle");if(f2(J)){let $=(await h2(J,"utf-8")).matchAll(/new\s+File\s*\(\s*['"]\.\.\/node_modules\/([^'"]+)['"]\s*\)/g);for(let G of $){let H=G[1].replace(/\/android$/,"");X.add(H)}}}return{packages:X,usesSPM:Q}}function xS(D,Y,X){let Q=D.replace(/\\/g,"/");if(Q.startsWith(`${Y}/`))return!0;if(Q==="package.json"||Q==="package-lock.json"||Q.startsWith("capacitor.config."))return!0;if(Q.startsWith("resources/"))return!0;if(Y==="ios"&&Q.startsWith("node_modules/@capacitor/ios/"))return!0;if(Y==="android"&&Q.startsWith("node_modules/@capacitor/android/"))return!0;for(let J of X.packages){let W=`node_modules/${J}/`;if(Y==="android"){if(Q.startsWith(`${W}android/`))return!0}else if(Y==="ios"){if(Q.startsWith(`${W}ios/`))return!0;if(X.usesSPM){if(Q===`${W}Package.swift`)return!0}else if(Q.startsWith(W)&&Q.endsWith(".podspec"))return!0}}return!1}function s7(D,Y,X,Q,J){let W=$90(Y);for(let $ of W){let G=c4(Y,$),B=X?`${X}/${$}`:$,H=B90(G);if(H.isDirectory()){if($===".git"||$==="dist"||$==="build"||$===".angular"||$===".vite"||$===".gradle"||$===".idea"||$===".swiftpm")continue;if($===Q){s7(D,G,B,Q,J);continue}if($==="node_modules"){s7(D,G,B,Q,J);continue}if($==="resources"){s7(D,G,B,Q,J);continue}let F=B.replace(/\\/g,"/");if(xS(B,Q,J)||Array.from(J.packages).some((U)=>{return`node_modules/${U}/`.startsWith(`${F}/`)||F.startsWith(`node_modules/${U}`)}))s7(D,G,B,Q,J)}else if(H.isFile()){if($===".DS_Store"||$.endsWith(".log"))continue;if(xS(B,Q,J))D.addLocalFile(G,X||void 0)}}}async function Z90(D,Y,X){let Q=await N90(D,X),J=new _S.default;s7(J,D,"",X,Q),await K90(Y,J.toBuffer())}async function g2(D,Y,X=!1){let Q=Date.now(),J=Y.verbose??!1;try{Y.apikey=Y.apikey||X0(X);let W=await U0();if(D=D||W?.config.appId,!D)throw Error("Missing argument, you need to provide a appId, or be in a capacitor project");if(!Y.platform)throw Error("Missing required argument: --platform <ios|android>");if(Y.platform!=="ios"&&Y.platform!=="android")throw Error(`Invalid platform "${Y.platform}". Must be "ios" or "android"`);let $=U90(Y.path||V90()),G=Y.supaHost||"https://api.capgo.app",B=await w0(Y.apikey,Y.supaHost,Y.supaAnon);await A0(B,Y.apikey,["write","all"]);let H=await
|
|
254
|
+
`);U=L.pop()||"";for(let O of L)if(O.startsWith("data: ")){let Z=O.slice(6);z(Z)}}if(U.startsWith("data: ")){let V=U.slice(6);z(V)}return $}catch(H){if(!J)q.warn(`Log streaming interrupted${H instanceof Error?`: ${H.message}`:""}`);return null}}async function O90(D,Y,X,Q,J,W){let G=0;while(G<120)try{let B=await fetch(`${D}/build/status?job_id=${encodeURIComponent(Y)}&app_id=${encodeURIComponent(X)}&platform=${Q}`,{headers:{authorization:J}});if(!B.ok){if(!W)q.warn(`Status check failed: ${B.status}`);await new Promise((F)=>setTimeout(F,5000)),G++;continue}let H=await B.json();if(H.status==="succeeded"||H.status==="failed")return H.status;await new Promise((F)=>setTimeout(F,5000)),G++}catch(B){if(!W)q.warn(`Status check error: ${B}`);await new Promise((H)=>setTimeout(H,5000)),G++}if(!W)q.warn("Build status polling timed out");return"timeout"}async function N90(D,Y){let X=new Set,Q=!1;if(Y==="ios"){let J=c4(D,"ios/App/CapApp-SPM/Package.swift");if(f2(J)){Q=!0;let $=(await h2(J,"utf-8")).matchAll(/\.package\s*\([^)]*path:\s*["'](?:\.\.\/)*node_modules\/([^"']+)["']\s*\)/g);for(let G of $)X.add(G[1])}else{let W=c4(D,"ios/App/Podfile");if(f2(W)){let G=(await h2(W,"utf-8")).matchAll(/pod\s+['"][^'"]+['"],\s*:path\s*=>\s*['"]\.\.\/\.\.\/node_modules\/([^'"]+)['"]/g);for(let B of G)X.add(B[1])}}}else if(Y==="android"){let J=c4(D,"android/capacitor.settings.gradle");if(f2(J)){let $=(await h2(J,"utf-8")).matchAll(/new\s+File\s*\(\s*['"]\.\.\/node_modules\/([^'"]+)['"]\s*\)/g);for(let G of $){let H=G[1].replace(/\/android$/,"");X.add(H)}}}return{packages:X,usesSPM:Q}}function xS(D,Y,X){let Q=D.replace(/\\/g,"/");if(Q.startsWith(`${Y}/`))return!0;if(Q==="package.json"||Q==="package-lock.json"||Q.startsWith("capacitor.config."))return!0;if(Q.startsWith("resources/"))return!0;if(Y==="ios"&&Q.startsWith("node_modules/@capacitor/ios/"))return!0;if(Y==="android"&&Q.startsWith("node_modules/@capacitor/android/"))return!0;for(let J of X.packages){let W=`node_modules/${J}/`;if(Y==="android"){if(Q.startsWith(`${W}android/`))return!0}else if(Y==="ios"){if(Q.startsWith(`${W}ios/`))return!0;if(X.usesSPM){if(Q===`${W}Package.swift`)return!0}else if(Q.startsWith(W)&&Q.endsWith(".podspec"))return!0}}return!1}function s7(D,Y,X,Q,J){let W=$90(Y);for(let $ of W){let G=c4(Y,$),B=X?`${X}/${$}`:$,H=B90(G);if(H.isDirectory()){if($===".git"||$==="dist"||$==="build"||$===".angular"||$===".vite"||$===".gradle"||$===".idea"||$===".swiftpm")continue;if($===Q){s7(D,G,B,Q,J);continue}if($==="node_modules"){s7(D,G,B,Q,J);continue}if($==="resources"){s7(D,G,B,Q,J);continue}let F=B.replace(/\\/g,"/");if(xS(B,Q,J)||Array.from(J.packages).some((U)=>{return`node_modules/${U}/`.startsWith(`${F}/`)||F.startsWith(`node_modules/${U}`)}))s7(D,G,B,Q,J)}else if(H.isFile()){if($===".DS_Store"||$.endsWith(".log"))continue;if(xS(B,Q,J))D.addLocalFile(G,X||void 0)}}}async function Z90(D,Y,X){let Q=await N90(D,X),J=new _S.default;s7(J,D,"",X,Q),await K90(Y,J.toBuffer())}async function g2(D,Y,X=!1){let Q=Date.now(),J=Y.verbose??!1;try{Y.apikey=Y.apikey||X0(X);let W=await U0();if(D=D||W?.config.appId,!D)throw Error("Missing argument, you need to provide a appId, or be in a capacitor project");if(!Y.platform)throw Error("Missing required argument: --platform <ios|android>");if(Y.platform!=="ios"&&Y.platform!=="android")throw Error(`Invalid platform "${Y.platform}". Must be "ios" or "android"`);let $=U90(Y.path||V90()),G=Y.supaHost||"https://api.capgo.app",B=await w0(Y.apikey,Y.supaHost,Y.supaAnon);await A0(B,Y.apikey,["write","all"]);let H=await l1(B,D);if(!X)q.info(`Requesting native build for ${D}`),q.info(`Platform: ${Y.platform}`),q.info(`Project: ${$}`),q.info(`
|
|
255
255
|
\uD83D\uDD12 Security: Credentials are never stored on Capgo servers`),q.info(" They are used only during build and deleted after"),q.info(` Builds sent directly to app stores - Capgo keeps nothing
|
|
256
|
-
`);if(J)q.info(`API host: ${G}`);let F={};if(Y.buildCertificateBase64)F.BUILD_CERTIFICATE_BASE64=Y.buildCertificateBase64;if(Y.buildProvisionProfileBase64)F.BUILD_PROVISION_PROFILE_BASE64=Y.buildProvisionProfileBase64;if(Y.buildProvisionProfileBase64Prod)F.BUILD_PROVISION_PROFILE_BASE64_PROD=Y.buildProvisionProfileBase64Prod;if(Y.p12Password)F.P12_PASSWORD=Y.p12Password;if(Y.appleKeyId)F.APPLE_KEY_ID=Y.appleKeyId;if(Y.appleIssuerId)F.APPLE_ISSUER_ID=Y.appleIssuerId;if(Y.appleKeyContent)F.APPLE_KEY_CONTENT=Y.appleKeyContent;if(Y.appleProfileName)F.APPLE_PROFILE_NAME=Y.appleProfileName;if(Y.appStoreConnectTeamId)F.APP_STORE_CONNECT_TEAM_ID=Y.appStoreConnectTeamId;if(Y.androidKeystoreFile)F.ANDROID_KEYSTORE_FILE=Y.androidKeystoreFile;if(Y.keystoreKeyAlias)F.KEYSTORE_KEY_ALIAS=Y.keystoreKeyAlias;let K=!!Y.keystoreKeyPassword,U=!!Y.keystoreStorePassword;if(K&&!U)F.KEYSTORE_KEY_PASSWORD=Y.keystoreKeyPassword,F.KEYSTORE_STORE_PASSWORD=Y.keystoreKeyPassword;else if(!K&&U)F.KEYSTORE_KEY_PASSWORD=Y.keystoreStorePassword,F.KEYSTORE_STORE_PASSWORD=Y.keystoreStorePassword;else if(K&&U)F.KEYSTORE_KEY_PASSWORD=Y.keystoreKeyPassword,F.KEYSTORE_STORE_PASSWORD=Y.keystoreStorePassword;if(Y.playConfigJson)F.PLAY_CONFIG_JSON=Y.playConfigJson;let z=await jS(D,Y.platform,Object.keys(F).length>0?F:void 0),V={app_id:D,platform:Y.platform,build_mode:Y.buildMode};if(!z){if(!X)q.error("❌ No credentials found for this app and platform"),q.error(""),q.error("You must provide credentials via:"),q.error(" 1. CLI arguments (--apple-key-id, --p12-password, etc.)"),q.error(" 2. Environment variables (APPLE_KEY_ID, P12_PASSWORD, etc.)"),q.error(" 3. Saved credentials file:"),q.error(` npx @capgo/cli build credentials save --appId ${D} --platform ${Y.platform}`),q.error(""),q.error("Documentation:"),q.error(" https://capgo.app/docs/cli/cloud-build/credentials/");throw Error("No credentials found. Please provide credentials before building.")}let w=[];if(Y.platform==="ios"){if(!z.BUILD_CERTIFICATE_BASE64)w.push("BUILD_CERTIFICATE_BASE64 (or --build-certificate-base64)");if(!z.P12_PASSWORD&&!X)q.warn("⚠️ P12_PASSWORD not provided - assuming certificate has no password"),q.warn(" If your certificate requires a password, provide it with --p12-password");if(!z.BUILD_PROVISION_PROFILE_BASE64)w.push("BUILD_PROVISION_PROFILE_BASE64 (or --build-provision-profile-base64)");if(!z.APPLE_KEY_ID)w.push("APPLE_KEY_ID (or --apple-key-id)");if(!z.APPLE_ISSUER_ID)w.push("APPLE_ISSUER_ID (or --apple-issuer-id)");if(!z.APPLE_KEY_CONTENT)w.push("APPLE_KEY_CONTENT (or --apple-key-content)");if(!z.APP_STORE_CONNECT_TEAM_ID)w.push("APP_STORE_CONNECT_TEAM_ID (or --apple-team-id)")}else if(Y.platform==="android"){if(!z.ANDROID_KEYSTORE_FILE)w.push("ANDROID_KEYSTORE_FILE (or --android-keystore-file)");if(!z.KEYSTORE_KEY_ALIAS)w.push("KEYSTORE_KEY_ALIAS (or --keystore-key-alias)");if(!z.KEYSTORE_KEY_PASSWORD&&!z.KEYSTORE_STORE_PASSWORD)w.push("KEYSTORE_KEY_PASSWORD or KEYSTORE_STORE_PASSWORD (at least one password required)");if(!z.PLAY_CONFIG_JSON&&!X)q.warn("⚠️ PLAY_CONFIG_JSON not provided - build will succeed but cannot auto-upload to Play Store")}if(w.length>0){if(!X){q.error(`❌ Missing required credentials for ${Y.platform}:`),q.error("");for(let j of w)q.error(` • ${j}`);q.error(""),q.error("Provide credentials via:"),q.error(' 1. CLI arguments: npx @capgo/cli build request --platform ios --apple-id "..." --p12-password "..."'),q.error(' 2. Environment variables: export APPLE_ID="..." P12_PASSWORD="..."'),q.error(" 3. Saved credentials: npx @capgo/cli build credentials save --platform ios ..."),q.error(""),q.error("Documentation:"),q.error(` https://capgo.app/docs/cli/cloud-build/${Y.platform}/`)}throw Error(`Missing required credentials for ${Y.platform}: ${w.join(", ")}`)}if(V.credentials=z,!X)q.info("✓ Using credentials (merged from CLI args, env vars, and saved file)");if(J){let j=Object.keys(z).filter((I)=>z[I]);q.info(`Credentials provided: ${j.join(", ")}`)}if(!X)q.info("Requesting build from Capgo...");let L=3,O=await L90(`${G}/build/request`,{method:"POST",headers:{"Content-Type":"application/json",authorization:Y.apikey},body:JSON.stringify(V)},L,X);if(!O.ok){let j=await O.text();throw Error(`Failed to request build: ${O.status} - ${j}`)}let Z=await O.json();if(!X)q.success(`Build job created: ${Z.job_id}`),q.info(`Status: ${Z.status}`);if(J)q.info(`Upload URL: ${Z.upload_url}`),q.info(`Upload expires: ${Z.upload_expires_at}`);await Z0(Y.apikey,{channel:"native-builder",event:"Build requested",icon:"\uD83C\uDFD7️",user_id:H,tags:{"app-id":D,platform:Y.platform},notify:!1}).catch();let M=c4(z90(),`capgo-build-${Date.now()}`);await H90(M,{recursive:!0});let E=c4(M,`${CS($)}.zip`);try{if(!X)q.info(`Zipping ${Y.platform} project from ${$}...`);await Z90($,E,Y.platform);let I=((await q90(E)).size/1024/1024).toFixed(2);if(!X)q.success(`Created zip: ${E} (${I} MB)`);if(!X)q.info("Uploading to builder...");if(J)q.info(`Upload endpoint: ${Z.upload_url}`),q.info(`File size: ${I} MB`),q.info(`Job ID: ${Z.job_id}`);let _=G90(E),y=d0();if(!X)y.start("Uploading bundle");if(await new Promise((Q0,x)=>{let N=new _J.Upload(_,{endpoint:Z.upload_url,chunkSize:5242880,metadata:{filename:CS(E),filetype:"application/zip"},headers:{authorization:Y.apikey},onBeforeRequest(A){if(J){q.info(`[TUS] ${A.getMethod()} ${A.getURL()}`);let R=A.getHeader("authorization");q.info(`[TUS] Authorization header present: ${!!R}`)}},onAfterResponse(A,R){if(J){q.info(`[TUS] Response status: ${R.getStatus()}`);let P=R.getHeader("upload-offset"),v=R.getHeader("tus-resumable");q.info(`[TUS] Upload-Offset: ${P}, Tus-Resumable: ${v}`)}},onError(A){if(!X)y.stop("Upload failed"),q.error(`Upload error: ${A.message}`);if(A instanceof _J.DetailedError){let R=A.originalResponse?.getBody(),P=A.originalResponse?.getStatus(),v=A.originalRequest?.getURL();if(J)q.error(`[TUS] Request URL: ${v}`),q.error(`[TUS] Response status: ${P}`),q.error(`[TUS] Response body: ${R}`);let b="Unknown error";try{let r=JSON.parse(R||'{"error": "unknown error"}');b=r.status||r.error||r.message||"unknown error"}catch{b=R||A.message}x(Error(`TUS upload failed: ${b}`))}else x(Error(`TUS upload failed: ${A.message||A.toString()}`))},onProgress(A,R){let P=(A/R*100).toFixed(2);if(!X)y.message(`Uploading ${P}%`)},onSuccess(){if(!X)y.stop("Upload complete!");if(J)q.success("TUS upload completed successfully");Q0()}});if(J)q.info("[TUS] Starting upload...");N.start()}),!X)q.info("Starting build job...");let C=await fetch(`${G}/build/start/${Z.job_id}`,{method:"POST",headers:{"Content-Type":"application/json",authorization:Y.apikey},body:JSON.stringify({app_id:D})});if(!C.ok){let Q0=await C.text();throw Error(`Failed to start build: ${C.status} - ${Q0}`)}let c=await C.json();if(!X)q.success("Build started!"),q.info("Streaming build logs...");let S,p=await M90(G,Z.job_id,D,Y.apikey,X,J);if(p)S=p;else S=await O90(G,Z.job_id,D,Y.platform,Y.apikey,X);if(!X)if(S==="succeeded")q.success("Build completed successfully!");else if(S==="failed")q.error("Build failed");else q.warn(`Build finished with status: ${S}`);let u=((Date.now()-Q)/1000).toFixed(2);return await Z0(Y.apikey,{channel:"native-builder",event:S==="succeeded"?"Build succeeded":"Build failed",icon:S==="succeeded"?"✅":"❌",user_id:H,tags:{"app-id":D,platform:Y.platform,status:S||"unknown",time:u},notify:!1}).catch(),{success:S==="succeeded",jobId:Z.job_id,uploadUrl:Z.upload_url,status:S||c.status||Z.status}}finally{await F90(M,{recursive:!0,force:!0})}}catch(W){let $=W instanceof Error?W.message:String(W);if(!X)q.error($);return{success:!1,error:$}}}async function bS(D,Y){if(!(await g2(D,Y,!1)).success)w90(1)}async function kS(D,Y,X,Q={}){let{silent:J=!1,autoUnlink:W=!1}=Q,{data:$,error:G}=await D.from("channels").select().eq("app_id",Y).eq("version",X.id);if(G){if(!J)q.error(`Cannot check Version ${Y}@${X.name}: ${m(G)}`);throw Error(`Cannot check version ${Y}@${X.name}: ${m(G)}`)}if(!$?.length)return;if(J)throw Error(`Version ${Y}@${X.name} is used in ${$.length} channel(s)`);F0(`❌ Version ${Y}@${X.name} is used in ${$.length} channel${$.length>1?"s":""}`);let B=W;if(!W)B=await R0({message:"unlink it?"})===!0;if(!B)throw q.error("Unlink it first"),Error(`Version ${Y}@${X.name} is still linked to channel(s)`);for(let H of $){let F=d0();F.start(`Unlinking channel ${H.name}`);let K=await u2(D,Y,{silent:J});if(!K)throw F.stop(`Cannot find unknown version for ${Y}`),Error(`Cannot find unknown version for ${Y}`);let{error:U}=await D.from("channels").update({version:K.id}).eq("id",H.id);if(U)throw F.stop(`Cannot update channel ${H.name} ${m(U)}`),Error(`Cannot update channel ${H.name}: ${m(U)}`);F.stop(`✅ Channel ${H.name} unlinked`)}e(`Version unlinked from ${$.length} channel${$.length>1?"s":""}`)}async function u2(D,Y,X={}){let{silent:Q=!1}=X,{data:J,error:W}=await D.from("app_versions").select("id").eq("app_id",Y).eq("name","unknown").single();if(!W)return J;try{let $=await
|
|
256
|
+
`);if(J)q.info(`API host: ${G}`);let F={};if(Y.buildCertificateBase64)F.BUILD_CERTIFICATE_BASE64=Y.buildCertificateBase64;if(Y.buildProvisionProfileBase64)F.BUILD_PROVISION_PROFILE_BASE64=Y.buildProvisionProfileBase64;if(Y.buildProvisionProfileBase64Prod)F.BUILD_PROVISION_PROFILE_BASE64_PROD=Y.buildProvisionProfileBase64Prod;if(Y.p12Password)F.P12_PASSWORD=Y.p12Password;if(Y.appleKeyId)F.APPLE_KEY_ID=Y.appleKeyId;if(Y.appleIssuerId)F.APPLE_ISSUER_ID=Y.appleIssuerId;if(Y.appleKeyContent)F.APPLE_KEY_CONTENT=Y.appleKeyContent;if(Y.appleProfileName)F.APPLE_PROFILE_NAME=Y.appleProfileName;if(Y.appStoreConnectTeamId)F.APP_STORE_CONNECT_TEAM_ID=Y.appStoreConnectTeamId;if(Y.androidKeystoreFile)F.ANDROID_KEYSTORE_FILE=Y.androidKeystoreFile;if(Y.keystoreKeyAlias)F.KEYSTORE_KEY_ALIAS=Y.keystoreKeyAlias;let K=!!Y.keystoreKeyPassword,U=!!Y.keystoreStorePassword;if(K&&!U)F.KEYSTORE_KEY_PASSWORD=Y.keystoreKeyPassword,F.KEYSTORE_STORE_PASSWORD=Y.keystoreKeyPassword;else if(!K&&U)F.KEYSTORE_KEY_PASSWORD=Y.keystoreStorePassword,F.KEYSTORE_STORE_PASSWORD=Y.keystoreStorePassword;else if(K&&U)F.KEYSTORE_KEY_PASSWORD=Y.keystoreKeyPassword,F.KEYSTORE_STORE_PASSWORD=Y.keystoreStorePassword;if(Y.playConfigJson)F.PLAY_CONFIG_JSON=Y.playConfigJson;let z=await jS(D,Y.platform,Object.keys(F).length>0?F:void 0),V={app_id:D,platform:Y.platform,build_mode:Y.buildMode};if(!z){if(!X)q.error("❌ No credentials found for this app and platform"),q.error(""),q.error("You must provide credentials via:"),q.error(" 1. CLI arguments (--apple-key-id, --p12-password, etc.)"),q.error(" 2. Environment variables (APPLE_KEY_ID, P12_PASSWORD, etc.)"),q.error(" 3. Saved credentials file:"),q.error(` npx @capgo/cli build credentials save --appId ${D} --platform ${Y.platform}`),q.error(""),q.error("Documentation:"),q.error(" https://capgo.app/docs/cli/cloud-build/credentials/");throw Error("No credentials found. Please provide credentials before building.")}let w=[];if(Y.platform==="ios"){if(!z.BUILD_CERTIFICATE_BASE64)w.push("BUILD_CERTIFICATE_BASE64 (or --build-certificate-base64)");if(!z.P12_PASSWORD&&!X)q.warn("⚠️ P12_PASSWORD not provided - assuming certificate has no password"),q.warn(" If your certificate requires a password, provide it with --p12-password");if(!z.BUILD_PROVISION_PROFILE_BASE64)w.push("BUILD_PROVISION_PROFILE_BASE64 (or --build-provision-profile-base64)");if(!z.APPLE_KEY_ID)w.push("APPLE_KEY_ID (or --apple-key-id)");if(!z.APPLE_ISSUER_ID)w.push("APPLE_ISSUER_ID (or --apple-issuer-id)");if(!z.APPLE_KEY_CONTENT)w.push("APPLE_KEY_CONTENT (or --apple-key-content)");if(!z.APP_STORE_CONNECT_TEAM_ID)w.push("APP_STORE_CONNECT_TEAM_ID (or --apple-team-id)")}else if(Y.platform==="android"){if(!z.ANDROID_KEYSTORE_FILE)w.push("ANDROID_KEYSTORE_FILE (or --android-keystore-file)");if(!z.KEYSTORE_KEY_ALIAS)w.push("KEYSTORE_KEY_ALIAS (or --keystore-key-alias)");if(!z.KEYSTORE_KEY_PASSWORD&&!z.KEYSTORE_STORE_PASSWORD)w.push("KEYSTORE_KEY_PASSWORD or KEYSTORE_STORE_PASSWORD (at least one password required)");if(!z.PLAY_CONFIG_JSON&&!X)q.warn("⚠️ PLAY_CONFIG_JSON not provided - build will succeed but cannot auto-upload to Play Store")}if(w.length>0){if(!X){q.error(`❌ Missing required credentials for ${Y.platform}:`),q.error("");for(let j of w)q.error(` • ${j}`);q.error(""),q.error("Provide credentials via:"),q.error(' 1. CLI arguments: npx @capgo/cli build request --platform ios --apple-id "..." --p12-password "..."'),q.error(' 2. Environment variables: export APPLE_ID="..." P12_PASSWORD="..."'),q.error(" 3. Saved credentials: npx @capgo/cli build credentials save --platform ios ..."),q.error(""),q.error("Documentation:"),q.error(` https://capgo.app/docs/cli/cloud-build/${Y.platform}/`)}throw Error(`Missing required credentials for ${Y.platform}: ${w.join(", ")}`)}if(V.credentials=z,!X)q.info("✓ Using credentials (merged from CLI args, env vars, and saved file)");if(J){let j=Object.keys(z).filter((I)=>z[I]);q.info(`Credentials provided: ${j.join(", ")}`)}if(!X)q.info("Requesting build from Capgo...");let L=3,O=await L90(`${G}/build/request`,{method:"POST",headers:{"Content-Type":"application/json",authorization:Y.apikey},body:JSON.stringify(V)},L,X);if(!O.ok){let j=await O.text();throw Error(`Failed to request build: ${O.status} - ${j}`)}let Z=await O.json();if(!X)q.success(`Build job created: ${Z.job_id}`),q.info(`Status: ${Z.status}`);if(J)q.info(`Upload URL: ${Z.upload_url}`),q.info(`Upload expires: ${Z.upload_expires_at}`);await Z0(Y.apikey,{channel:"native-builder",event:"Build requested",icon:"\uD83C\uDFD7️",user_id:H,tags:{"app-id":D,platform:Y.platform},notify:!1}).catch();let M=c4(z90(),`capgo-build-${Date.now()}`);await H90(M,{recursive:!0});let E=c4(M,`${CS($)}.zip`);try{if(!X)q.info(`Zipping ${Y.platform} project from ${$}...`);await Z90($,E,Y.platform);let I=((await q90(E)).size/1024/1024).toFixed(2);if(!X)q.success(`Created zip: ${E} (${I} MB)`);if(!X)q.info("Uploading to builder...");if(J)q.info(`Upload endpoint: ${Z.upload_url}`),q.info(`File size: ${I} MB`),q.info(`Job ID: ${Z.job_id}`);let _=G90(E),y=d0();if(!X)y.start("Uploading bundle");if(await new Promise((Q0,x)=>{let N=new _J.Upload(_,{endpoint:Z.upload_url,chunkSize:5242880,metadata:{filename:CS(E),filetype:"application/zip"},headers:{authorization:Y.apikey},onBeforeRequest(A){if(J){q.info(`[TUS] ${A.getMethod()} ${A.getURL()}`);let R=A.getHeader("authorization");q.info(`[TUS] Authorization header present: ${!!R}`)}},onAfterResponse(A,R){if(J){q.info(`[TUS] Response status: ${R.getStatus()}`);let P=R.getHeader("upload-offset"),v=R.getHeader("tus-resumable");q.info(`[TUS] Upload-Offset: ${P}, Tus-Resumable: ${v}`)}},onError(A){if(!X)y.stop("Upload failed"),q.error(`Upload error: ${A.message}`);if(A instanceof _J.DetailedError){let R=A.originalResponse?.getBody(),P=A.originalResponse?.getStatus(),v=A.originalRequest?.getURL();if(J)q.error(`[TUS] Request URL: ${v}`),q.error(`[TUS] Response status: ${P}`),q.error(`[TUS] Response body: ${R}`);let b="Unknown error";try{let r=JSON.parse(R||'{"error": "unknown error"}');b=r.status||r.error||r.message||"unknown error"}catch{b=R||A.message}x(Error(`TUS upload failed: ${b}`))}else x(Error(`TUS upload failed: ${A.message||A.toString()}`))},onProgress(A,R){let P=(A/R*100).toFixed(2);if(!X)y.message(`Uploading ${P}%`)},onSuccess(){if(!X)y.stop("Upload complete!");if(J)q.success("TUS upload completed successfully");Q0()}});if(J)q.info("[TUS] Starting upload...");N.start()}),!X)q.info("Starting build job...");let C=await fetch(`${G}/build/start/${Z.job_id}`,{method:"POST",headers:{"Content-Type":"application/json",authorization:Y.apikey},body:JSON.stringify({app_id:D})});if(!C.ok){let Q0=await C.text();throw Error(`Failed to start build: ${C.status} - ${Q0}`)}let c=await C.json();if(!X)q.success("Build started!"),q.info("Streaming build logs...");let S,p=await M90(G,Z.job_id,D,Y.apikey,X,J);if(p)S=p;else S=await O90(G,Z.job_id,D,Y.platform,Y.apikey,X);if(!X)if(S==="succeeded")q.success("Build completed successfully!");else if(S==="failed")q.error("Build failed");else q.warn(`Build finished with status: ${S}`);let u=((Date.now()-Q)/1000).toFixed(2);return await Z0(Y.apikey,{channel:"native-builder",event:S==="succeeded"?"Build succeeded":"Build failed",icon:S==="succeeded"?"✅":"❌",user_id:H,tags:{"app-id":D,platform:Y.platform,status:S||"unknown",time:u},notify:!1}).catch(),{success:S==="succeeded",jobId:Z.job_id,uploadUrl:Z.upload_url,status:S||c.status||Z.status}}finally{await F90(M,{recursive:!0,force:!0})}}catch(W){let $=W instanceof Error?W.message:String(W);if(!X)q.error($);return{success:!1,error:$}}}async function bS(D,Y){if(!(await g2(D,Y,!1)).success)w90(1)}async function kS(D,Y,X,Q={}){let{silent:J=!1,autoUnlink:W=!1}=Q,{data:$,error:G}=await D.from("channels").select().eq("app_id",Y).eq("version",X.id);if(G){if(!J)q.error(`Cannot check Version ${Y}@${X.name}: ${m(G)}`);throw Error(`Cannot check version ${Y}@${X.name}: ${m(G)}`)}if(!$?.length)return;if(J)throw Error(`Version ${Y}@${X.name} is used in ${$.length} channel(s)`);F0(`❌ Version ${Y}@${X.name} is used in ${$.length} channel${$.length>1?"s":""}`);let B=W;if(!W)B=await R0({message:"unlink it?"})===!0;if(!B)throw q.error("Unlink it first"),Error(`Version ${Y}@${X.name} is still linked to channel(s)`);for(let H of $){let F=d0();F.start(`Unlinking channel ${H.name}`);let K=await u2(D,Y,{silent:J});if(!K)throw F.stop(`Cannot find unknown version for ${Y}`),Error(`Cannot find unknown version for ${Y}`);let{error:U}=await D.from("channels").update({version:K.id}).eq("id",H.id);if(U)throw F.stop(`Cannot update channel ${H.name} ${m(U)}`),Error(`Cannot update channel ${H.name}: ${m(U)}`);F.stop(`✅ Channel ${H.name} unlinked`)}e(`Version unlinked from ${$.length} channel${$.length>1?"s":""}`)}async function u2(D,Y,X={}){let{silent:Q=!1}=X,{data:J,error:W}=await D.from("app_versions").select("id").eq("app_id",Y).eq("name","unknown").single();if(!W)return J;try{let $=await l1(D,Y),{data:G,error:B}=await D.from("app_versions").insert({owner_org:$,deleted:!0,name:"unknown",app_id:Y}).select("id").single();if(B){if(!Q)q.error(`Cannot find or create unknown version for ${Y}. Find error: ${m(W)}, Create error: ${m(B)}`);throw Error(`Cannot find or create unknown version for app ${Y}: ${m(B)}`)}return G}catch($){if(!Q)q.error(`Cannot find or create unknown version for ${Y}. Find error: ${m(W)}, Create error: ${m($)}`);throw Error(`Cannot retrieve or create unknown version for app ${Y}: ${m($)}`)}}function vS(D,Y){return D.from("channels").insert(Y).select().single()}function yS(D,Y,X,Q){return D.from("channels").delete().eq("name",Y).eq("app_id",X).single()}function fS(D,Y,X){return D.from("channels").select().eq("app_id",Y).eq("name",X).single()}function hS(D,Y,X){return D.from("channel_devices").delete().eq("app_id",Y).eq("channel_id",X)}function gS(D,Y,X){return D.from("channels").select(`
|
|
257
257
|
id,
|
|
258
258
|
version (id, name)
|
|
259
259
|
`).eq("app_id",Y).eq("name",X).single().throwOnError().then(({data:Q})=>Q?.version)}function uS(D,Y=!1){if(Y)return;let X=new G1;X.theme=G1.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 Q of D.toReversed())X.rows.push([Q.name,Q.version?.name,Q.public?"✅":"❌",Q.ios?"✅":"❌",Q.android?"✅":"❌",Q.disable_auto_update,Q.disable_auto_update_under_native?"❌":"✅",Q.allow_device_self_set?"✅":"❌",Q.allow_emulator?"✅":"❌",Q.allow_device?"✅":"❌",Q.allow_dev?"✅":"❌",Q.allow_prod?"✅":"❌"]);q.success("Channels"),q.success(X.toString())}async function mS(D,Y,X=!1){let{data:Q,error:J}=await D.from("channels").select(`
|
|
@@ -273,9 +273,9 @@ Global: ${o7()}`),q.info(`Local: ${a7()}`),q.info(`
|
|
|
273
273
|
created_by,
|
|
274
274
|
app_id,
|
|
275
275
|
version (id, name)
|
|
276
|
-
`).eq("app_id",Y).order("created_at",{ascending:!1});if(J){if(!X)q.error(`App ${Y} not found in database`);throw Error(`App ${Y} not found in database: ${m(J)}`)}return Q}async function m2(D,Y,X,Q={}){let{silent:J=!1}=Q,{error:W}=await D.from("app_versions").update({deleted:!0}).eq("app_id",Y).eq("deleted",!1).eq("name",X);if(W){let $=`App version ${Y}@${X} not found in database`;if(!J)q.error($);throw Error(`${$}: ${m(W)}`)}}async function bJ(D,Y,X,Q={}){let{silent:J=!1,autoUnlink:W=!1}=Q,$=await A90(D,Y,X,{silent:J});await kS(D,Y,$,{silent:J,autoUnlink:W}),await m2(D,Y,X,{silent:J})}function kJ(D,Y=!1){if(Y)return;if(!D.length)throw Error("No bundle found");let X=new G1;X.theme=G1.roundTheme,X.headers=["Version","Created","Keep"],X.rows=[];for(let Q of D.toReversed())X.rows.push([Q.name,g4(Q.created_at),Q.keep??""]);q.success("Bundles"),q.success(X.toString())}async function l4(D,Y,X={}){let{silent:Q=!1}=X,{data:J,error:W}=await D.from("app_versions").select().eq("app_id",Y).eq("deleted",!1).order("created_at",{ascending:!1});if(W){let $=`App ${Y} not found in database`;if(!Q)q.error($);throw Error(`${$}: ${m(W)}`)}return J??[]}async function cS(D,Y,X={}){let{silent:Q=!1}=X,{data:J,error:W}=await D.from("channels").select("version").eq("app_id",Y);if(W){let $=`App ${Y} not found in database`;if(!Q)q.error($);throw Error(`${$}: ${m(W)}`)}return(J??[]).map(($)=>$.version)}async function A90(D,Y,X,Q={}){let{silent:J=!1}=Q,{data:W,error:$}=await D.from("app_versions").select().eq("app_id",Y).eq("name",X).eq("deleted",!1).single();if(!W||$){let G=`App version ${Y}@${X} doesn't exist`;if(!J)q.error(G);throw Error(`${G}${$?`: ${m($)}`:""}`)}return W}async function E90(D,Y,X,Q){for await(let J of D){if(!Q)q.warn(`Removing ${J.name} created on ${g4(J.created_at)}`);await bJ(Y,X,J.name)}}function R90(D,Y,X){let Q=[];for(let J of D??[]){let W=C0(J.name);if(AG(W,Y)&&e8(W,X))Q.push(J)}return Q}async function c2(D,Y,X=!1){if(!X)F0("Cleanup versions in Capgo");await f0(),Y.apikey=Y.apikey||X0();let{bundle:Q,keep:J=4}=Y,W=Y.force||!1,$=Y.ignoreChannel||!1,G=await U0();if(D=_0(D,G?.config),!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to delete your app");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide a appid, or be in a capacitor project");throw Error("Missing appId")}let B=await w0(Y.apikey,Y.supaHost,Y.supaAnon);if(await
|
|
276
|
+
`).eq("app_id",Y).order("created_at",{ascending:!1});if(J){if(!X)q.error(`App ${Y} not found in database`);throw Error(`App ${Y} not found in database: ${m(J)}`)}return Q}async function m2(D,Y,X,Q={}){let{silent:J=!1}=Q,{error:W}=await D.from("app_versions").update({deleted:!0}).eq("app_id",Y).eq("deleted",!1).eq("name",X);if(W){let $=`App version ${Y}@${X} not found in database`;if(!J)q.error($);throw Error(`${$}: ${m(W)}`)}}async function bJ(D,Y,X,Q={}){let{silent:J=!1,autoUnlink:W=!1}=Q,$=await A90(D,Y,X,{silent:J});await kS(D,Y,$,{silent:J,autoUnlink:W}),await m2(D,Y,X,{silent:J})}function kJ(D,Y=!1){if(Y)return;if(!D.length)throw Error("No bundle found");let X=new G1;X.theme=G1.roundTheme,X.headers=["Version","Created","Keep"],X.rows=[];for(let Q of D.toReversed())X.rows.push([Q.name,g4(Q.created_at),Q.keep??""]);q.success("Bundles"),q.success(X.toString())}async function l4(D,Y,X={}){let{silent:Q=!1}=X,{data:J,error:W}=await D.from("app_versions").select().eq("app_id",Y).eq("deleted",!1).order("created_at",{ascending:!1});if(W){let $=`App ${Y} not found in database`;if(!Q)q.error($);throw Error(`${$}: ${m(W)}`)}return J??[]}async function cS(D,Y,X={}){let{silent:Q=!1}=X,{data:J,error:W}=await D.from("channels").select("version").eq("app_id",Y);if(W){let $=`App ${Y} not found in database`;if(!Q)q.error($);throw Error(`${$}: ${m(W)}`)}return(J??[]).map(($)=>$.version)}async function A90(D,Y,X,Q={}){let{silent:J=!1}=Q,{data:W,error:$}=await D.from("app_versions").select().eq("app_id",Y).eq("name",X).eq("deleted",!1).single();if(!W||$){let G=`App version ${Y}@${X} doesn't exist`;if(!J)q.error(G);throw Error(`${G}${$?`: ${m($)}`:""}`)}return W}async function E90(D,Y,X,Q){for await(let J of D){if(!Q)q.warn(`Removing ${J.name} created on ${g4(J.created_at)}`);await bJ(Y,X,J.name)}}function R90(D,Y,X){let Q=[];for(let J of D??[]){let W=C0(J.name);if(AG(W,Y)&&e8(W,X))Q.push(J)}return Q}async function c2(D,Y,X=!1){if(!X)F0("Cleanup versions in Capgo");await f0(),Y.apikey=Y.apikey||X0();let{bundle:Q,keep:J=4}=Y,W=Y.force||!1,$=Y.ignoreChannel||!1,G=await U0();if(D=_0(D,G?.config),!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to delete your app");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide a appid, or be in a capacitor project");throw Error("Missing appId")}let B=await w0(Y.apikey,Y.supaHost,Y.supaAnon);if(await h1(B,D,X),await A0(B,Y.apikey,["write","all"]),await L1(B,Y.apikey,D,3,X,!0),!X)q.info("Querying all available versions in Capgo");let H=await l4(B,D),F=await cS(B,D);if(!X)q.info(`Total active versions in Capgo: ${H?.length??0}`);if(!H?.length){if(!X)q.error("No versions found, aborting cleanup");throw Error("No versions found")}if(Q){let z=C0(Q),V=u9(z,"major");if(!X)q.info(`Querying available versions in Capgo between ${u8(z)} and ${u8(V)}`);if(H=R90(H,z,V),!X)q.info(`Active versions in Capgo between ${u8(z)} and ${u8(V)}: ${H?.length??0}`)}let K=[],U=0;for(let z of H){let V=F.find((w)=>w===z.id);if(U<J||V&&!$)z.keep=V?"✅ (Linked to channel)":"✅",U+=1;else z.keep="❌",K.push(z)}if(!K.length){if(!X)q.warn("Nothing to be removed, aborting removal...");return{removed:0,kept:U}}if(!X)kJ(H);if(!W)if(!X){let z=await R0({message:"Do you want to continue removing the versions specified?"});if(E0(z)||!z)throw q.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)q.success("You have confirmed removal, removing versions now");if(await E90(K,B,D,X),!X)e("Done ✅");return{removed:K.length,kept:U}}async function lS(D,Y){return c2(D,Y)}async function t7(D,Y,X=!1){if(!X)F0("Check compatibility");let Q={...Y,apikey:Y.apikey||X0()},J=D?void 0:await U0(),W=_0(D,J?.config),$=Q.channel;if(!$){if(!X)q.error("Missing argument, you need to provide a channel");throw Error("Missing channel")}if(!Q.apikey){if(!X)q.error("Missing API key, you need to provide an API key to access Capgo Cloud metadata");throw Error("Missing API key")}if(!W){if(!X)q.error("Missing argument, you need to provide an appId, or be in a capacitor project");throw Error("Missing appId")}let G=await w0(Q.apikey,Q.supaHost,Q.supaAnon);await h1(G,W,X),await A0(G,Q.apikey,["write","all","read","upload"]),await L1(G,Q.apikey,W,1,X,!0);let B=await TJ(G,W,$,Q.packageJson,Q.nodeModules),H=B.finalCompatibility.some((F)=>!QD(F));if(!X){let F=new G1;F.headers=["Package","Local","Remote","Status","Details"],F.theme=G1.roundTheme,F.rows=[];let K=Q.text?"OK":"✅",U=Q.text?"FAIL":"❌";for(let z of B.finalCompatibility){let{name:V,localVersion:w,remoteVersion:L}=z,O=W5(z),Z=O.compatible?K:U;F.rows.push([V,w||"-",L||"-",Z,O.message])}if(q.success("Compatibility Check Results"),q.info(F.toString()),H){let z=B.finalCompatibility.filter((V)=>!QD(V)).length;q.warn(`
|
|
277
277
|
${z} package(s) are incompatible with channel "${$}"`),q.warn("An app store update may be required for these changes to take effect.")}else q.success(`
|
|
278
|
-
All packages are compatible with channel "${$}"`)}return{finalCompatibility:B.finalCompatibility,hasIncompatible:H,resolvedAppId:W,channel:$}}async function dS(D,Y){try{await t7(D,Y,!1)}catch(X){throw q.error(`Error checking compatibility ${m(X)}`),X}}import{existsSync as p2,readFileSync as tS,writeFileSync as I90}from"node:fs";import{cwd as C90}from"node:process";import{Buffer as N9}from"node:buffer";import{constants as j90,createCipheriv as T90,createDecipheriv as S90,generateKeyPairSync as P90,privateEncrypt as l2,publicDecrypt as d2,randomBytes as pS}from"node:crypto";var nS="aes-128-cbc",Z9="base64",vJ="hex",d4=j90.RSA_PKCS1_PADDING;function yJ(D){let Y=pS(16),X=pS(16),Q=Y.toString(Z9),J=l2({key:D,padding:d4},X).toString(Z9);return{sessionKey:X,ivSessionKey:`${Q}:${J}`}}function p4(D,Y,X){let[Q]=X.split(":"),J=N9.from(Q,Z9),W=T90(nS,Y,J);return W.setAutoPadding(!0),N9.concat([W.update(D),W.final()])}function iS(D,Y,X){let[Q,J]=Y.split(":"),W=d2({key:X,padding:d4},N9.from(J,Z9)),$=N9.from(Q,Z9),G=S90(nS,W,$);return G.setAutoPadding(!0),N9.concat([G.update(D),G.final()])}function n4(D,Y){return l2({key:Y,padding:d4},N9.from(D,Z9)).toString(Z9)}function i4(D,Y){return l2({key:Y,padding:d4},N9.from(D,vJ)).toString(vJ)}function rS(D,Y){return d2({key:Y,padding:d4},N9.from(D,Z9)).toString(Z9)}function aS(D,Y){return d2({key:Y,padding:d4},N9.from(D,vJ)).toString(vJ)}function oS(){let{publicKey:D,privateKey:Y}=P90("rsa",{modulusLength:2048});return{publicKey:D.export({type:"pkcs1",format:"pem"}),privateKey:Y.export({type:"pkcs1",format:"pem"})}}function sS(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)}var x90="5.30.0",_90="6.30.0",b90="7.30.0";function k90(D,Y){let X=D.key||O9,Q=Y.config.plugins?.CapacitorUpdater?.publicKey;if(p2(X))Q=tS(X,"utf8");else if(!Q&&D.keyData)Q=D.keyData;return{publicKey:Q,fallbackKeyPath:X}}async function n2(D,Y,X,Q=!1){if(!Q)F0("Decrypt zip file");try{if(await f0(),!p2(D)){let K=`Zip not found at the path ${D}`;if(!Q)q.error(K);throw Error(K)}let J=await U0();if(!X.key&&!p2(O9)&&!J.config.plugins?.CapacitorUpdater?.publicKey){let K=`Public Key not found at the path ${O9} or in ${J.path}`;if(!Q)q.error(K);throw Error(K)}let{publicKey:W,fallbackKeyPath:$}=k90(X,J);if(!W){let K=`Cannot find public key ${$} or as keyData option or in ${J.path}`;if(!Q)q.error(K);throw Error(K)}let G=tS(D),B=iS(G,Y,X.keyData??W),H=`${D}_decrypted.zip`;if(I90(H,B),!Q)q.info(`Decrypted zip file at ${H}`);let F;if(X.checksum){let K=await o9(B,"sha256"),U=
|
|
278
|
+
All packages are compatible with channel "${$}"`)}return{finalCompatibility:B.finalCompatibility,hasIncompatible:H,resolvedAppId:W,channel:$}}async function dS(D,Y){try{await t7(D,Y,!1)}catch(X){throw q.error(`Error checking compatibility ${m(X)}`),X}}import{existsSync as p2,readFileSync as tS,writeFileSync as I90}from"node:fs";import{cwd as C90}from"node:process";import{Buffer as N9}from"node:buffer";import{constants as j90,createCipheriv as T90,createDecipheriv as S90,generateKeyPairSync as P90,privateEncrypt as l2,publicDecrypt as d2,randomBytes as pS}from"node:crypto";var nS="aes-128-cbc",Z9="base64",vJ="hex",d4=j90.RSA_PKCS1_PADDING;function yJ(D){let Y=pS(16),X=pS(16),Q=Y.toString(Z9),J=l2({key:D,padding:d4},X).toString(Z9);return{sessionKey:X,ivSessionKey:`${Q}:${J}`}}function p4(D,Y,X){let[Q]=X.split(":"),J=N9.from(Q,Z9),W=T90(nS,Y,J);return W.setAutoPadding(!0),N9.concat([W.update(D),W.final()])}function iS(D,Y,X){let[Q,J]=Y.split(":"),W=d2({key:X,padding:d4},N9.from(J,Z9)),$=N9.from(Q,Z9),G=S90(nS,W,$);return G.setAutoPadding(!0),N9.concat([G.update(D),G.final()])}function n4(D,Y){return l2({key:Y,padding:d4},N9.from(D,Z9)).toString(Z9)}function i4(D,Y){return l2({key:Y,padding:d4},N9.from(D,vJ)).toString(vJ)}function rS(D,Y){return d2({key:Y,padding:d4},N9.from(D,Z9)).toString(Z9)}function aS(D,Y){return d2({key:Y,padding:d4},N9.from(D,vJ)).toString(vJ)}function oS(){let{publicKey:D,privateKey:Y}=P90("rsa",{modulusLength:2048});return{publicKey:D.export({type:"pkcs1",format:"pem"}),privateKey:Y.export({type:"pkcs1",format:"pem"})}}function sS(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)}var x90="5.30.0",_90="6.30.0",b90="7.30.0";function k90(D,Y){let X=D.key||O9,Q=Y.config.plugins?.CapacitorUpdater?.publicKey;if(p2(X))Q=tS(X,"utf8");else if(!Q&&D.keyData)Q=D.keyData;return{publicKey:Q,fallbackKeyPath:X}}async function n2(D,Y,X,Q=!1){if(!Q)F0("Decrypt zip file");try{if(await f0(),!p2(D)){let K=`Zip not found at the path ${D}`;if(!Q)q.error(K);throw Error(K)}let J=await U0();if(!X.key&&!p2(O9)&&!J.config.plugins?.CapacitorUpdater?.publicKey){let K=`Public Key not found at the path ${O9} or in ${J.path}`;if(!Q)q.error(K);throw Error(K)}let{publicKey:W,fallbackKeyPath:$}=k90(X,J);if(!W){let K=`Cannot find public key ${$} or as keyData option or in ${J.path}`;if(!Q)q.error(K);throw Error(K)}let G=tS(D),B=iS(G,Y,X.keyData??W),H=`${D}_decrypted.zip`;if(I90(H,B),!Q)q.info(`Decrypted zip file at ${H}`);let F;if(X.checksum){let K=await o9(B,"sha256"),U=f1(C90()),z=await d8("@capgo/capacitor-updater",U,X.packageJson),V=!1,w;try{w=z?C0(z):void 0}catch{w=void 0}if(w)V=!U6(w,x90,_90,b90);if(!Q)q.info(`Decrypting checksum with ${V?"V3":"V2"} (based on updater version ${z||"unknown"})`);let L=V?aS(X.checksum,X.keyData??W):rS(X.checksum,X.keyData??W);if(F=K===L,!F){let O=`Checksum does not match ${K} !== ${L}`;if(!Q)q.error(O);throw Error(O)}if(!Q)q.info("Checksum matches")}if(!Q)e("✅ done");return{outputPath:H,checksumMatches:F}}catch(J){if(!Q)q.error(`Error decrypting zip file ${m(J)}`);throw J instanceof Error?J:Error(String(J))}}async function eS(D,Y,X){await n2(D,Y,X,!1)}async function i2(D,Y,X,Q=!1){if(!Q)F0("Delete bundle");X.apikey=X.apikey||X0();let J=await U0();if(Y=_0(Y,J?.config),!X.apikey){if(!Q)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Y){if(!Q)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(!D){if(!Q)q.error("Missing argument, you need to provide a bundleId, or be in a capacitor project");throw Error("Missing bundleId")}let W=await w0(X.apikey,X.supaHost,X.supaAnon);if(await h1(W,Y,Q),await A0(W,X.apikey,["write","all"]),await L1(W,X.apikey,Y,3,Q,!0),!Q)q.info(`Deleting bundle ${Y}@${D} from Capgo`),q.info("Keep in mind that you will not be able to reuse this bundle version, it's gone forever");await bJ(W,Y,D);let $=await l1(W,Y);if(await Z0(X.apikey,{channel:"app",event:"Bundle Deleted",icon:"\uD83D\uDDD1️",user_id:$,tags:{"app-id":Y,bundle:D},notify:!1,notifyConsole:!0}).catch(()=>{}),!Q)q.success(`Bundle ${Y}@${D} deleted in Capgo`),e("Done");return!0}async function DP(D,Y,X){return i2(D,Y,X)}import{existsSync as r2,readFileSync as YP,writeFileSync as v90}from"node:fs";import{cwd as y90}from"node:process";var f90="5.30.0",h90="6.30.0",g90="7.30.0";function e7(D){console.error(m(D))}async function a2(D,Y,X,Q=!1){let{json:J}=X,W=!J&&!Q;if(W)F0("Encryption"),await f0();try{let $=await U0(),G=!!$.config.plugins?.CapacitorUpdater?.privateKey,B=!!$.config.plugins?.CapacitorUpdater?.publicKey;if(G&&W)q.warning("There is still a privateKey in the config");if(!r2(D)){let j=`Zip not found at the path ${D}`;if(!Q)if(J)e7({error:"zip_not_found"});else q.error(`Error: ${j}`);throw Error(j)}if(!B){if(!Q)if(J)e7({error:"missing_public_key"});else q.warning("Warning: Missing Public Key in config");throw Error("Missing public key in config")}let H=X.key||l8,F=X.keyData||"";if(!r2(H)&&!F){if(!Q)if(J)e7({error:"missing_key"});else q.warning(`Cannot find a private key at ${H} or as a keyData option`),q.error("Error: Missing key");throw Error("Missing private key")}else if(r2(H))F=YP(H,"utf8");if(F&&!F.startsWith("-----BEGIN RSA PRIVATE KEY-----")){if(!Q)if(J)e7({error:"invalid_private_key"});else q.error("The private key provided is not a valid RSA Private key");throw Error("Invalid private key format")}let K=YP(D),{sessionKey:U,ivSessionKey:z}=yJ(F),V=p4(K,U,z),w=f1(y90()),L=await d8("@capgo/capacitor-updater",w,X.packageJson),O=!1,Z;try{Z=L?C0(L):void 0}catch{Z=void 0}if(Z)O=!U6(Z,f90,h90,g90);let M=O?i4(Y,F):n4(Y,F);if(W)q.info(`Encrypting checksum with ${O?"V3":"V2"} (based on updater version ${L||"unknown"})`);let E=`${D}_encrypted.zip`;if(v90(E,V),!Q)if(J)console.log(JSON.stringify({checksum:M,filename:E,ivSessionKey:z},null,2));else q.success(`Encoded Checksum: ${M}`),q.success(`ivSessionKey: ${z}`),q.success(`Encrypted zip saved at ${E}`),e("Done ✅");return{checksum:M,filename:E,ivSessionKey:z}}catch($){if(!Q)if(X.json)e7($);else q.error(`Error encrypting zip file ${m($)}`);throw $ instanceof Error?$:Error(String($))}}async function XP(D,Y,X){await a2(D,Y,X,!1)}async function QP(D,Y,X=!1){if(!X)F0("List bundles");await f0(),Y.apikey=Y.apikey||X0();let Q=await U0();if(D=_0(D,Q?.config),!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide a appid, or be in a capacitor project");throw Error("Missing appId")}let J=await w0(Y.apikey,Y.supaHost,Y.supaAnon);if(await h1(J,D,X),await A0(J,Y.apikey,["write","all","read","upload"]),await L1(J,Y.apikey,D,1,X,!0),!X)q.info(`Querying available versions of: ${D} in Capgo`);let W=await l4(J,D);if(!X)q.info(`Active versions in Capgo: ${W?.length??0}`),kJ(W),e("Done ✅");return W}import{stdout as u90}from"node:process";async function m90(D,Y){let X=await t7(D,Y,!0);return{releaseType:X.hasIncompatible?"native":"OTA",resolvedAppId:X.resolvedAppId,channel:X.channel}}async function JP(D,Y){try{let{releaseType:X,resolvedAppId:Q,channel:J}=await m90(D,Y),W=X==="OTA"?["Recommendation: OTA",`Run: npx @capgo/cli@latest bundle upload ${Q} --channel ${J}`]:["Recommendation: native",`Save credentials: npx @capgo/cli@latest build credentials save --appId ${Q} --platform <ios|android>`,`Request build: npx @capgo/cli@latest build request ${Q} --platform <ios|android> --path .`];u90.write(`${W.join(`
|
|
279
279
|
`)}
|
|
280
280
|
`)}catch(X){throw q.error(`Error checking release type ${m(X)}`),X}}import{randomUUID as u50}from"node:crypto";import{existsSync as BY,readFileSync as m50}from"node:fs";import{cwd as RF,stdin as PI,stdout as II}from"node:process";class o2 extends TransformStream{outChunkSize;constructor(D){let Y=new Uint8Array(D),X=0;super({transform(Q,J){let W=0;while(W<Q.length){let $=D-X,G=Math.min($,Q.length-W);if(Y.set(Q.subarray(W,W+G),X),W+=G,X+=G,X===D)J.enqueue(Y),Y=new Uint8Array(D),X=0}},flush(Q){if(X>0)Q.enqueue(Y.subarray(0,X))}}),this.outChunkSize=D}}function JD(D){return D=D.trim(),D=D.replace(/<!--[\s\S]*?-->/g,""),Y();function Y(){return{declaration:X(),root:Q()}}function X(){if(!B(/^<\?xml\s*/))return;let U={attributes:{}};while(!(H()||F("?>"))){let z=W();if(!z)return U;U.attributes[z.name]=z.value}return B(/\?>\s*/),U}function Q(){let K=B(/^<([\w-:.]+)\s*/);if(!K)return;let U={name:K[1],attributes:{},children:[]};while(!(H()||F(">")||F("?>")||F("/>"))){let V=W();if(!V)return U;U.attributes[V.name]=V.value}if(B(/^\s*\/>\s*/))return U;B(/\??>\s*/),U.content=J();let z;while(z=Q())U.children.push(z);return B(/^<\/[\w-:.]+>\s*/),U}function J(){let K=B(/^([^<]*)/);if(K)return G(K[1]);return""}function W(){let K=B(/([\w:-]+)\s*=\s*("[^"]*"|'[^']*'|\w+)\s*/);if(!K)return;return{name:K[1],value:G($(K[2]))}}function $(K){return K.replace(/^['"]|['"]$/g,"")}function G(K){return K.replaceAll("<","<").replaceAll(">",">").replaceAll("&","&")}function B(K){let U=D.match(K);if(!U)return;return D=D.slice(U[0].length),U}function H(){return D.length===0}function F(K){return D.startsWith(K)}}class A9 extends Error{}class x8 extends A9{}class fJ extends A9{}class s2 extends A9{bucketName;constructor(D){super(`Invalid bucket name: ${D}`),this.bucketName=D}}class E9 extends A9{objectName;constructor(D){super(`Invalid object name: ${D}`),this.objectName=D}}class $5 extends A9{constructor(){super("accessKey is required")}}class DY extends A9{constructor(){super("secretKey is required")}}class hJ extends A9{constructor(){super("expirySeconds cannot be less than 1 second or more than 7 days")}}class WD extends A9{statusCode;code;key;bucketName;resource;region;constructor(D,Y,X,Q={}){super(X),this.statusCode=D,this.code=Y,this.key=Q.key,this.bucketName=Q.bucketName,this.resource=Q.resource,this.region=Q.region}}async function WP(D){try{let X=JD(await D.text()).root;if(X?.name!=="Error")throw Error("Invalid root, expected <Error>");let Q=X.children.find((H)=>H.name==="Code")?.content??"UnknownErrorCode",J=X.children.find((H)=>H.name==="Message")?.content??"The error message could not be determined.",W=X.children.find((H)=>H.name==="Key")?.content,$=X.children.find((H)=>H.name==="BucketName")?.content,G=X.children.find((H)=>H.name==="Resource")?.content,B=X.children.find((H)=>H.name==="Region")?.content;return new WD(D.status,Q,J,{key:W,bucketName:$,resource:G,region:B})}catch{return new WD(D.status,"UnrecognizedError",`Error: Unexpected response code ${D.status} ${D.statusText}. Unable to parse response as XML.`)}}function $P(D){if(typeof D!=="number"||isNaN(D))return!1;return D>=1&&D<=65535}function GP(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 $D(D){if(!c90(D))return!1;if(D.length===0)return!1;return!0}function c90(D){if(typeof D!=="string")return!1;if(D.length>1024)return!1;return!0}function YY(D){return Array.from(D).map((Y)=>Y.toString(16).padStart(2,"0")).join("")}function G5(D=""){let Y={'"':"",""":"",""":"",""":"",""":""};return D.replace(/^("|"|")|("|"|")$/g,(X)=>Y[X])}function e2(D){return D.get("x-amz-version-id")??null}function B5(D){let Y=D.toISOString();return Y.slice(0,4)+Y.slice(5,7)+Y.slice(8,13)+Y.slice(14,16)+Y.slice(17,19)+"Z"}function DF(D){return B5(D).slice(0,8)}function YF(D,Y){return`${DF(Y)}/${D}/s3/aws4_request`}async function gJ(D){if(!(D instanceof Uint8Array))D=new TextEncoder().encode(D);return YY(new Uint8Array(await crypto.subtle.digest("SHA-256",D)))}var l90=["x-amz-server-side-encryption-customer-algorithm","x-amz-server-side-encryption-customer-key","x-amz-server-side-encryption-customer-key-MD5"];class XF extends WritableStream{getResult;constructor({client:D,bucketName:Y,objectName:X,partSize:Q,metadata:J}){let W,$=1,G,B=[],H,F=[];super({start(){},async write(K,U){let V=$++;try{if(V==1&&K.length<Q){let O=await D.makeRequest({method:"PUT",headers:new Headers({...J,"Content-Length":String(K.length)}),bucketName:Y,objectName:X,payload:K});W={etag:G5(O.headers.get("etag")??void 0),versionId:e2(O.headers)};return}if(V===1)G=(await d90({client:D,bucketName:Y,objectName:X,metadata:J})).uploadId;let w={"Content-Length":String(K.length)};for(let O of l90){let Z=J[O];if(Z)w[O]=Z}let L=D.makeRequest({method:"PUT",query:{partNumber:V.toString(),uploadId:G},headers:new Headers(w),bucketName:Y,objectName:X,payload:K}).then((O)=>{let Z=O.headers.get("etag")??"";if(Z)Z=Z.replace(/^"/,"").replace(/"$/,"");return B.push({part:V,etag:Z}),O});F.push(L.catch((O)=>{if(!H)H=O}))}catch(w){throw w}},async close(){if(W);else if(G){if(await Promise.all(F),H)throw H;B.sort((K,U)=>K.part>U.part?1:-1),W=await p90({client:D,bucketName:Y,objectName:X,uploadId:G,etags:B})}else throw Error("Stream was closed without uploading any data.")}});this.getResult=()=>{if(W===void 0)throw Error("Result is not ready. await the stream first.");return W}}}async function d90(D){let X=new Headers(D.metadata),Q="uploads",W=await(await D.client.makeRequest({method:"POST",bucketName:D.bucketName,objectName:D.objectName,query:"uploads",headers:X,returnBody:!0})).text(),$=JD(W).root;if(!$||$.name!=="InitiateMultipartUploadResult")throw Error(`Unexpected response: ${W}`);let G=$.children.find((B)=>B.name==="UploadId")?.content;if(!G)throw Error(`Unable to get UploadId from response: ${W}`);return{uploadId:G}}async function p90({client:D,bucketName:Y,objectName:X,uploadId:Q,etags:J}){let W=`
|
|
281
281
|
<CompleteMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
|
|
@@ -286,19 +286,19 @@ All packages are compatible with channel "${$}"`)}return{finalCompatibility:B.fi
|
|
|
286
286
|
`)+`
|
|
287
287
|
`,Q.join(";").toLowerCase(),J].join(`
|
|
288
288
|
`)}async function KP(D,Y,X){let Q=await gJ(D),J=YF(X,Y);return[XY,B5(Y),J,Q].join(`
|
|
289
|
-
`)}async function JF(D,Y,X){let Q=DF(D),J=await F5("AWS4"+X,Q),W=await F5(J,Y),$=await F5(W,"s3");return await F5($,"aws4_request")}function WF(D,Y,X){return`${D}/${YF(Y,X)}`}async function F5(D,Y){let X=new TextEncoder,Q=await crypto.subtle.importKey("raw",D instanceof Uint8Array?D:X.encode(D),{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign","verify"]),J=await crypto.subtle.sign("HMAC",Q,Y instanceof Uint8Array?Y:X.encode(Y));return new Uint8Array(J)}async function zP(D){if(!D.accessKey)throw new $5;if(!D.secretKey)throw new DY;if(D.expirySeconds<1||D.expirySeconds>604800)throw new hJ;let Y=new Date(D.date);Y.setSeconds(Y.getSeconds()+D.expirySeconds);let X=WF(D.accessKey,D.region,D.date),Q=B5(D.date),J={"X-Amz-Algorithm":XY,"X-Amz-Credential":X,"X-Amz-Date":Q,key:D.objectKey,...D.fields},W=[{bucket:D.bucket},{key:D.objectKey},{"X-Amz-Algorithm":XY},{"X-Amz-Credential":X},{"X-Amz-Date":Q}];if(D.conditions)W.push(...D.conditions);for(let[z,V]of Object.entries(D.fields||{})){if(["key","X-Amz-Algorithm","X-Amz-Credential","X-Amz-Date"].includes(z))continue;W.push({[z]:V})}let $={expiration:Y.toISOString(),conditions:W},G=new TextEncoder().encode(JSON.stringify($)),B=btoa(String.fromCharCode(...G));J.policy=B;let H=B,F=await JF(D.date,D.region,D.secretKey),K=YY(await F5(F,H)).toLowerCase();return J["X-Amz-Signature"]=K,{url:`${D.protocol}//${D.host}/${D.bucket}`,fields:J}}var i90=["Content-Type","Cache-Control","Content-Disposition","Content-Encoding","Content-Language","Expires","x-amz-checksum-sha256","x-amz-grant-full-control","x-amz-grant-read","x-amz-grant-read-acp","x-amz-grant-write-acp","x-amz-server-side-encryption","x-amz-storage-class","x-amz-website-redirect-location","x-amz-server-side-encryption-customer-algorithm","x-amz-server-side-encryption-customer-key","x-amz-server-side-encryption-customer-key-MD5","x-amz-server-side-encryption-aws-kms-key-id","x-amz-server-side-encryption-context","x-amz-server-side-encryption-bucket-key-enabled","x-amz-request-payer","x-amz-tagging","x-amz-object-lock-mode","x-amz-object-lock-retain-until-date","x-amz-object-lock-legal-hold","x-amz-expected-bucket-owner"],r90=5242880,a90=5368709120,$F=5497558138880;class uJ{host;port;protocol;accessKey;#D;sessionToken;defaultBucket;region;userAgent="s3-lite-client";pathStyle;pathPrefix;constructor({endPoint:D,useSSL:Y,port:X,pathPrefix:Q,...J}){if(/^https?:\/\//i.test(D)){if(Y!==void 0||X!==void 0||Q!==void 0)throw new x8("useSSL/port/pathPrefix cannot be specified if endPoint is a URL.");try{let $=new URL(D);if(D=$.hostname,Y=$.protocol==="https:",X=$.port?parseInt($.port,10):Y?443:80,$.pathname&&$.pathname!=="/")Q=$.pathname.endsWith("/")?$.pathname.slice(0,-1):$.pathname}catch{throw new fJ(`Invalid endPoint URL: ${D}`)}}if(typeof D!=="string"||D.length===0)throw new fJ(`Invalid endPoint: ${D}`);if(Y===void 0)Y=!0;if(X!==void 0&&!$P(X))throw new x8(`Invalid port: ${X}`);if(J.accessKey&&!J.secretKey)throw new x8("If specifying access key, secret key must also be provided.");if(J.accessKey&&J.accessKey.startsWith("ASIA")&&!J.sessionToken)throw new x8("If specifying temporary access key, session token must also be provided.");let W=Y?443:80;if(this.port=X??W,this.host=D.toLowerCase()+(this.port!==W?`:${this.port}`:""),this.protocol=Y?"https:":"http:",this.accessKey=J.accessKey,this.#D=J.secretKey??"",this.sessionToken=J.sessionToken,this.pathStyle=J.pathStyle??!0,this.pathPrefix=Q??"",this.defaultBucket=J.bucket,this.region=J.region,this.pathPrefix){if(!this.pathStyle)throw new x8("pathPrefix is incompatible with pathStyle=false");if(!this.pathPrefix.startsWith("/"))throw new x8("pathPrefix should start with /");if(this.pathPrefix.endsWith("/"))throw new x8("pathPrefix should not end with /")}}getBucketName(D){let Y=D?.bucketName??this.defaultBucket;if(Y===void 0||!GP(Y))throw new s2(Y??"");return Y}buildRequestOptions(D){let Y=this.getBucketName(D),X=this.pathStyle?this.host:`${Y}.${this.host}`,Q=D.headers??new Headers;Q.set("host",X);let J=typeof D.query==="object"?new URLSearchParams(D.query).toString().replace("+","%20"):D.query,W=this.pathStyle?`${this.pathPrefix}/${Y}/${D.objectName}`:`/${D.objectName}`,$=J?`?${J}`:"",G=W+$,B=W.split("/").map((H)=>encodeURIComponent(H)).join("/")+$;return{headers:Q,host:X,path:G,encodedPath:B}}async makeRequest({method:D,payload:Y,...X}){let Q=new Date,{headers:J,host:W,path:$,encodedPath:G}=this.buildRequestOptions(X),B=X.statusCode??200;if(D==="POST"||D==="PUT"||D==="DELETE"){if(Y===void 0)Y=new Uint8Array;else if(typeof Y==="string")Y=new TextEncoder().encode(Y);J.set("Content-Length",String(Y.length))}else if(Y)throw Error(`Unexpected payload on ${D} request.`);let H=await gJ(Y??new Uint8Array);if(J.set("x-amz-date",B5(Q)),J.set("x-amz-content-sha256",H),this.accessKey){if(this.sessionToken)J.set("x-amz-security-token",this.sessionToken);J.set("authorization",await BP({headers:J,method:D,path:$,accessKey:this.accessKey,secretKey:this.#D,region:this.region,date:Q}))}let F=`${this.protocol}//${W}${G}`,K=await fetch(F,{method:D,headers:J,body:Y});if(K.status!==B){if(K.status>=400)throw await WP(K);else if(K.status===301)throw new WD(K.status,"UnexpectedRedirect",'The server unexpectedly returned a redirect response. With AWS S3, this usually means you need to use a region-specific endpoint like "s3.us-west-2.amazonaws.com" instead of "s3.amazonaws.com"');throw new WD(K.status,"UnexpectedStatusCode",`Unexpected response code from the server (expected ${B}, got ${K.status} ${K.statusText}).`)}if(!X.returnBody)await K.body?.getReader().read();return K}async deleteObject(D,Y={}){let X=this.getBucketName(Y);if(!$D(D))throw new E9(D);let Q=Y.versionId?{versionId:Y.versionId}:{},J=new Headers;if(Y.governanceBypass)J.set("X-Amz-Bypass-Governance-Retention","true");await this.makeRequest({method:"DELETE",bucketName:X,objectName:D,headers:J,query:Q,statusCode:204})}async exists(D,Y){try{return await this.statObject(D,Y),!0}catch(X){if(X instanceof WD&&X.statusCode===404)return!1;throw X}}getObject(D,Y){return this.getPartialObject(D,{...Y,offset:0,length:0})}async getPartialObject(D,{offset:Y,length:X,...Q}){let J=this.getBucketName(Q);if(!$D(D))throw new E9(D);let W=new Headers(Object.entries(Q.metadata??{})),$=200;if(Y||X){let B="";if(Y)B=`bytes=${+Y}-`;else B="bytes=0-",Y=0;if(X)B+=`${+X+Y-1}`;W.set("Range",B),$=206}let G={...Q.responseParams,...Q.versionId?{versionId:Q.versionId}:{}};return await this.makeRequest({method:"GET",bucketName:J,objectName:D,headers:W,query:G,statusCode:$,returnBody:!0})}getPresignedUrl(D,Y,X={}){if(!this.accessKey)throw new $5;if(!$D(Y))throw new E9(Y);let{headers:Q,path:J}=this.buildRequestOptions({objectName:Y,bucketName:X.bucketName,query:X.parameters}),W=X.requestDate??new Date,$=X.expirySeconds??604800;return HP({protocol:this.protocol,headers:Q,method:D,path:J,accessKey:this.accessKey,secretKey:this.#D,sessionToken:this.sessionToken,region:this.region,date:W,expirySeconds:$})}presignedGetObject(D,Y={}){let{versionId:X,responseParams:Q,...J}=Y,W={...Q,...X?{versionId:X}:{}};return this.getPresignedUrl("GET",D,{parameters:W,...J})}async*listObjects(D={}){for await(let Y of this.listObjectsGrouped({...D,delimiter:""}))if(Y.type==="Object")yield Y;else throw Error(`Unexpected result from listObjectsGrouped(): ${Y}`)}async*listObjectsGrouped(D){let Y=this.getBucketName(D),X="",Q=D.pageSize??1000;if(Q<1||Q>1000)throw new x8("pageSize must be between 1 and 1,000.");let J=0;while(!0){let W=D.maxResults?Math.min(Q,D.maxResults-J):Q;if(W===0)return;let G=await(await this.makeRequest({method:"GET",bucketName:Y,objectName:"",query:{"list-type":"2",prefix:D.prefix??"",delimiter:D.delimiter,"max-keys":String(W),...X?{"continuation-token":X}:{}},returnBody:!0})).text(),B=JD(G).root;if(!B||B.name!=="ListBucketResult")throw Error(`Unexpected response: ${G}`);let H=B.children.filter((U)=>U.name==="CommonPrefixes").flatMap((U)=>U.children),F=[];for(let U of H)F.push({type:"CommonPrefix",prefix:U.content??""}),J++;for(let U of B.children.filter((z)=>z.name==="Contents"))F.push({type:"Object",key:U.children.find((z)=>z.name==="Key")?.content??"",etag:G5(U.children.find((z)=>z.name==="ETag")?.content??""),size:parseInt(U.children.find((z)=>z.name==="Size")?.content??"",10),lastModified:new Date(U.children.find((z)=>z.name==="LastModified")?.content??"invalid")}),J++;F.sort((U,z)=>{let V=U.type==="Object"?U.key:U.prefix,w=z.type==="Object"?z.key:z.prefix;return V>w?1:V<w?-1:0});for(let U of F)yield U;if(B.children.find((U)=>U.name==="IsTruncated")?.content==="true"){let U=B.children.find((z)=>z.name==="NextContinuationToken")?.content;if(!U)throw Error("Unexpectedly missing continuation token, but server said there are more results.");X=U}else return}}async putObject(D,Y,X){let Q=this.getBucketName(X);if(!$D(D))throw new E9(D);let J,W;if(typeof Y==="string"){let H=new TextEncoder().encode(Y);if(typeof ReadableStream.from<"u")W=ReadableStream.from([H]);else W=new ReadableStream({start(F){F.enqueue(H),F.close()}});J=H.length}else if(Y instanceof Uint8Array){if(typeof ReadableStream.from<"u")W=ReadableStream.from([Y]);else W=new ReadableStream({start(H){H.enqueue(Y),H.close()}});J=Y.byteLength}else if(Y instanceof ReadableStream)W=Y;else throw new x8("Invalid stream/data type provided.");if(X?.size!==void 0){if(J!==void 0&&X?.size!==J)throw new x8(`size was specified (${X.size}) but doesn't match auto-detected size (${J}).`);if(typeof X.size!=="number"||X.size<0||isNaN(X.size))throw new x8(`invalid size specified: ${X.size}`);else J=X.size}let $=X?.partSize??this.calculatePartSize(J);if($<r90)throw new x8("Part size should be greater than 5MB");else if($>a90)throw new x8("Part size should be less than 6MB");let G=new o2($),B=new XF({client:this,bucketName:Q,objectName:D,partSize:$,metadata:X?.metadata??{}});return await W.pipeThrough(G).pipeTo(B),B.getResult()}calculatePartSize(D){if(D===void 0)D=$F;if(D>$F)throw TypeError(`size should not be more than ${$F}`);let Y=67108864;while(!0){if(Y*1e4>D)return Y;Y+=16777216}}async statObject(D,Y){let X=this.getBucketName(Y);if(!$D(D))throw new E9(D);let Q={};if(Y?.versionId)Q.versionId=Y.versionId;let J=await this.makeRequest({method:"HEAD",bucketName:X,objectName:D,query:Q,headers:new Headers(Y?.headers)}),W={};for(let $ of i90)if(J.headers.has($))W[$]=J.headers.get($);return J.headers.forEach(($,G)=>{if(G.startsWith("x-amz-meta-"))W[G]=J.headers.get(G)}),{type:"Object",key:D,size:parseInt(J.headers.get("content-length")??"",10),metadata:W,lastModified:new Date(J.headers.get("Last-Modified")??"error: missing last modified"),versionId:J.headers.get("x-amz-version-id")||null,etag:G5(J.headers.get("ETag")??"")}}async copyObject(D,Y,X){let Q=this.getBucketName(X),J=D.sourceBucketName??Q;if(!$D(Y))throw new E9(Y);let W=`${J}/${D.sourceKey}`;if(D.sourceVersionId)W+=`?versionId=${D.sourceVersionId}`;let $=new Headers(X?.metadata);if(X?.metadata!==void 0)$.set("x-amz-metadata-directive","REPLACE");$.set("x-amz-copy-source",W);let G=await this.makeRequest({method:"PUT",bucketName:Q,objectName:Y,headers:$,returnBody:!0}),B=await G.text(),H=JD(B).root;if(!H||H.name!=="CopyObjectResult")throw Error(`Unexpected response: ${B}`);let F=H.children.find((U)=>U.name==="ETag")?.content??"",K=H.children.find((U)=>U.name==="LastModified")?.content;if(K===void 0)throw Error("Unable to find <LastModified>...</LastModified> from the server.");return{copySourceVersionId:G.headers.get("x-amz-copy-source-version-id")||null,etag:G5(F),lastModified:new Date(K),versionId:G.headers.get("x-amz-version-id")||null}}async bucketExists(D){try{return await this.listObjects({bucketName:D}).next(),!0}catch(Y){if(Y instanceof WD&&Y.statusCode===404)return!1;throw Y}}async makeBucket(D){await this.makeRequest({method:"PUT",bucketName:this.getBucketName({bucketName:D}),objectName:"",statusCode:200})}async removeBucket(D){await this.makeRequest({method:"DELETE",bucketName:this.getBucketName({bucketName:D}),objectName:"",statusCode:204})}presignedPostObject(D,Y={}){if(!$D(D))throw new E9(D);let X=this.getBucketName(Y);if(!X)throw Error("Bucket name is required for presignedPost, but none was provided either to this method nor to the client constructor");let Q=Y.requestDate||new Date,J=Y.expirySeconds??3600;return zP({protocol:this.protocol,host:this.host,bucket:X,objectKey:D,accessKey:this.accessKey||"",secretKey:this.#D||"",region:this.region,date:Q,expirySeconds:J,conditions:Y.conditions,fields:Y.fields})}}function UP(D){try{let Y=C0(D);return u8(u9(Y,"patch"))}catch{let Y=D.match(/^(\d+)\.(\d+)\.(\d+)/);if(Y){let[,X,Q,J]=Y;return`${X}.${Q}.${Number.parseInt(J)+1}`}return"1.0.1"}}async function VP(D,Y){let X=UP(D),Q=Y?` for ${Y}`:"",J=await D8({message:`How do you want to handle the version${Q}?`,options:[{value:"auto",label:`Auto: Bump patch version (${D} → ${X})`},{value:"manual",label:"Manual: I'll provide the version number"}]});if(E0(J))return null;if(J==="auto")return q.info(`\uD83D\uDD22 Auto-bumped version from ${D} to ${X}`),X;let W=await h8({message:`Current version is ${D}. Enter new version:`,validate:($)=>{if(!$)return"Version is required";if(!$.match(/^\d+\.\d+\.\d+/))return"Please enter a valid version (x.y.z)"}});if(E0(W))return null;return W}function wP(D){let Y=UP(D);try{let X=C0(D);return[Y,u8(u9(X,"minor")),`${D}-beta.1`,`${D}.1`]}catch{return[Y,`${D}.1`,`${D}-beta.1`,`${D}-rc.1`]}}import{readdirSync as LP,readFileSync as o90,statSync as s90}from"node:fs";import{extname as t90,join as e90}from"node:path";function DD0(D,Y){return o90(D,"utf8").includes(Y)}function QY(D,Y){let X=LP(D);for(let Q of X){let J=e90(D,Q),W=s90(J);if(W.isDirectory()){if(QY(J,Y))return!0}else if(W.isFile()&&t90(J)===".js"){if(DD0(J,Y))return!0}}return!1}function mJ(D){if(LP(D).indexOf("index.html")>-1)return!0;return!1}import{Buffer as j50}from"node:buffer";import{createHash as T50}from"node:crypto";import{createReadStream as AF,statSync as S50}from"node:fs";import{platform as P50}from"node:os";import{join as I50,posix as C50,win32 as EI}from"node:path";import{cwd as x50}from"node:process";import{buffer as EF}from"node:stream/consumers";import{createBrotliCompress as _50}from"node:zlib";var RI=a1(AI(),1),jI=a1(hQ(),1);async function b50(D,Y){try{let X=new URL(`${D.hostFilesApi}/files/read/attachments/${encodeURIComponent(Y)}`);return X.searchParams.set("nocache",`${Date.now()}`),(await fetch(X.toString(),{method:"GET",headers:{range:"bytes=0-0","cache-control":"no-cache"}})).ok}catch{return!1}}var k50=8192;async function v50(D){let Y=h1(x50()),X=await d8("@capgo/capacitor-updater",Y,D.packageJson),Q;try{Q=X?C0(X):void 0}catch{Q=void 0}if(!X||!Q)return{version:null,supportsBrotliV2:!1};let J=!U6(Q,void 0,void 0,n7);return{version:`${Q.major}.${Q.minor}.${Q.patch}`,supportsBrotliV2:J}}function y50(D,Y){if(!Y)return!1;let X=Y.split(",").map((Q)=>Q.trim()).filter((Q)=>!!Q);if(X.length===0)return!1;return RI.isMatch(D,X)}async function f50(D,Y,X){let J=S50(D).size,W=await EF(AF(D));if(J===0)return{buffer:W,useBrotli:!1};if(y50(Y,X.noBrotliPatterns))return{buffer:W,useBrotli:!1};if(J<k50)return{buffer:W,useBrotli:!1};try{let $=await EF(AF(D).pipe(_50({})));if($.length>=J-10)return{buffer:W,useBrotli:!1};return{buffer:$,useBrotli:!0}}catch($){return q.warn(`Brotli compression failed for ${D}: ${$}, using original file`),{buffer:W,useBrotli:!1}}}async function TI(D,Y,X,Q,J,W,$=!1){let G=d0();G.start(J!=="v2"?"Generating the update manifest":`Generating the update manifest with ${$?"V3":"V2"} encryption`);let B=await DS(D);if(J==="v2")for(let H of B)H.hash=$?i4(H.hash,W):n4(H.hash,W);return G.stop("Manifest generated successfully"),await Z0(Y,{channel:"partial-update",event:"Generate manifest",icon:"\uD83D\uDCC2",user_id:X,tags:{"app-id":Q},notify:!1}),B}function h50(D){if(P50()!=="win32")return D;return EI.normalize(D).split(EI.sep).join(C50.sep)}function g50(D){let Y=D.split("/").map((X)=>encodeURIComponent(X)).join("/");if(D.includes(" "))q.warn(`File "${D}" contains spaces in its name.`);return Y}async function SI(D,Y,X,Q,J,W,$){let G=d0();G.start("Preparing partial update with TUS protocol");let B=performance.now(),H=await c8(),F=!!($.partial||$.delta||$.partialOnly||$.deltaOnly),{version:K,supportsBrotliV2:U}=await v50($);if(!U)throw Error(`Your project is using an older version of @capgo/capacitor-updater (${K||"unknown"}). To use Delta updates, please upgrade to version ${AJ} (v5), ${EJ} (v6) or ${n7} (v7) or higher.`);else if($.disableBrotli)q.info("Brotli compression disabled by user request");else if($.noBrotliPatterns)q.info(`Files matching patterns (${$.noBrotliPatterns}) will be excluded from brotli compression`);let z=Y.filter((O)=>O.file.includes(" "));if(z.length>0)throw Error(`Files with spaces in their names (${z.map((O)=>O.file).join(", ")}). Please rename the files.`);let V=0,w=Y.length,L=0;try{G.message(`Uploading ${w} files using TUS protocol`);let O=async(I)=>{let _=I50(X,I.file),y=h50(I.file),C,c=!1;if($.disableBrotli)C=await EF(AF(_)),c=!1;else{let N=await f50(_,y,$);C=N.buffer,c=N.useBrotli}let S=C;if(W)S=p4(C,W.sessionKey,W.ivSessionKey);let p=y;if(c)p=`${y}.br`,L++;let u=g50(p),Q0=T50("sha256").update(I.hash).digest("hex"),x;if(W){let N=j50.from(W.ivSessionKey).toString("hex");x=`orgs/${J}/apps/${Q}/delta/${N}/${Q0}_${u}`}else x=`orgs/${J}/apps/${Q}/delta/${Q0}_${u}`;if(!W&&await b50(H,x))return V++,Promise.resolve({file_name:u,s3_path:x,file_hash:I.hash});return new Promise((N,A)=>{G.message(`Prepare upload partial file: ${y}`);let R=XD(p);new jI.Upload(S,{endpoint:`${H.hostFilesApi}/files/upload/attachments/`,chunkSize:$.tusChunkSize,retryDelays:[0,1000,3000,5000,1e4],removeFingerprintOnSuccess:!0,metadata:{filename:x,filetype:R},headers:{Authorization:D},onError:(v)=>{let b=v.toString(),r;try{let g=b.match(/response text: (\{.*?\})/);if(g&&g[1])r=JSON.parse(g[1]).moreInfo?.requestId}catch{}let k=r?` [requestId: ${r}]`:"";q.error(`Failed to upload ${y}: ${b}${k}`),A(v)},onProgress(){let v=(V/w*100).toFixed(2);G.message(`Uploading partial update: ${v}%`)},onSuccess(){V++,N({file_name:u,s3_path:x,file_hash:I.hash})}}).start()})},Z=500,M=[];for(let I=0;I<Y.length;I+=Z){let _=Y.slice(I,I+Z),y=Math.floor(I/Z)+1,C=Math.ceil(Y.length/Z);if(C>1)G.message(`Processing batch ${y}/${C} (${_.length} files)`);let c=await Promise.all(_.map((S)=>O(S)));M.push(...c)}let j=((performance.now()-B)/1000).toFixed(2);if(G.stop(`Partial update uploaded successfully \uD83D\uDCAA in (${j} seconds)`),L>0)q.info(`${L} of ${w} files were compressed with brotli and use .br extension`);return await Z0(D,{channel:"app",event:`App Partial TUS done${L>0?" with .br extension":""}`,icon:"⏫",user_id:J,tags:{"app-id":Q},notify:!1}),await Z0(D,{channel:"performance",event:"Partial upload performance",icon:"\uD83D\uDE84",user_id:J,tags:{"app-id":Q,time:j},notify:!1}),M}catch(O){let M=((performance.now()-B)/1000).toFixed(2);if(G.stop(`Failed to upload Partial bundle (after ${M} seconds)`),F)throw q.error(`Error uploading partial update: ${O}`),q.error("Delta/partial upload was explicitly requested but failed. Upload aborted."),O;else return q.info(`Error uploading partial update: ${O}, This is not a critical error, the bundle has been uploaded without the partial files`),null}}function h0(D){throw q.error(D),Error(D)}function c50(D){let Y=new G1;Y.headers=["Package","Local","Remote","Status","Details"],Y.theme=G1.roundTheme,Y.rows=[];for(let X of D){let{name:Q,localVersion:J,remoteVersion:W}=X,$=W5(X),G=$.compatible?"✅":"❌";Y.rows.push([Q,J||"-",W||"-",G,$.message])}q.info(Y.toString())}async function l50(D,Y){let X=x6("",Y.packageJson),Q=Y.bundle||D?.plugins?.CapacitorUpdater?.version||X||`0.0.1-beta.${u50().split("-")[0]}`;if(!v4.test(Q))h0(`Your bundle name ${Q}, is not valid it should follow semver convention : https://semver.org/`);return Q}function d50(D){let Y=D.apikey||X0();if(!Y)h0("Missing API key, you need to provide an API key to upload your bundle");return Y}function p50(D,Y,X){let Q=_0(D,X),J=Y.path||X?.webDir;if(!Q)h0("Missing argument, you need to provide a appid or be in a capacitor project");if(!J)h0("Missing argument, you need to provide a path (--path), or be in a capacitor project");if(!BY(J))h0(`Path ${J} does not exist, build your app first, or provide a valid path`);return{appid:Q,path:J}}function n50(D,Y){let X=D.codeCheck;if(typeof X>"u"||X){if(!QY(Y,"notifyAppReady"))h0(`notifyAppReady() is missing in the build folder of your app. see: https://capgo.app/docs/plugin/api/#notifyappready
|
|
290
|
-
If you are sure your app has this code, you can use the --no-code-check option`);if(!mJ(Y))h0(`index.html is missing in the root folder of ${Y}`)}}async function i50(D,Y,X,Q,J,W){let{ignoreMetadataCheck:$,autoMinUpdateVersion:G,minUpdateVersion:B}=X,{data:H,error:F}=await D.from("channels").select("disable_auto_update, version ( min_update_version, native_packages )").eq("name",Q).eq("app_id",J).single(),K=!!H&&H.disable_auto_update==="version_number",U,z;if(!F&&H&&H.version&&H.version.native_packages&&!$){let L=d0();L.start(`Checking bundle compatibility with channel ${Q}`);let{finalCompatibility:O,localDependencies:Z}=await TJ(D,J,Q,X.packageJson,X.nodeModules);if(z=O,U=Z,z.filter((E)=>!QD(E)).length>0){if(L.stop(`Bundle NOT compatible with ${Q} channel`),q.warn(""),c50(z),q.warn(""),q.warn("An app store update may be required for these changes to take effect."),G)B=W,q.info(`Auto set min-update-version to ${B}`)}else if(G)try{let{min_update_version:E}=H.version;if(!E||!v4.test(E))h0("Invalid remote min update version, skipping auto setting compatibility");B=E,L.stop(`Auto set min-update-version to ${B}`)}catch{h0(`Cannot auto set compatibility, invalid data ${H}`)}else L.stop(`Bundle compatible with ${Q} channel`)}else if(!$){if(q.warn(`Channel ${Q} is new or it's your first upload with compatibility check, it will be ignored this time`),U=await S2(X.packageJson,X.nodeModules),G)B=W,q.info(`Auto set min-update-version to ${B}`)}if(K&&!B&&!$)h0("You need to provide a min-update-version to upload a bundle to this channel");if(B){if(!v4.test(B))h0(`Your minimal version update ${B}, is not valid it should follow semver convention : https://semver.org/`)}let V=U?new Map(U.filter((L)=>!!L.native&&L.native!==void 0).map((L)=>[L.name,L])):new Map;return{nativePackages:V.size>0||!X.ignoreMetadataCheck?Array.from(V,([L,O])=>({name:L,version:O.version,...O.ios_checksum&&{ios_checksum:O.ios_checksum},...O.android_checksum&&{android_checksum:O.android_checksum}})):void 0,minUpdateVersion:B}}async function r50(D,Y,X,Q=!1,J=!1){let{data:W,error:$}=await D.rpc("exist_app_versions",{appid:Y,name_version:X}).single();if(W||$){if(Q)return q.warn(`Version ${X} already exists - exiting gracefully due to --silent-fail option`),e("Bundle version already exists - exiting gracefully \uD83C\uDF89"),!0;if(J){q.error(`❌ Version ${X} already exists`);let G=wP(X);q.info("\uD83D\uDCA1 Here are some suggestions:"),G.forEach((F,K)=>{q.info(` ${K+1}. ${F}`)});let B=await D8({message:"What would you like to do?",options:[{value:"suggest1",label:`Use ${G[0]}`},{value:"suggest2",label:`Use ${G[1]}`},{value:"suggest3",label:`Use ${G[2]}`},{value:"suggest4",label:`Use ${G[3]}`},{value:"custom",label:"Enter a custom version"},{value:"cancel",label:"Cancel upload"}]});if(E0(B)||B==="cancel")h0("Upload cancelled by user");let H;if(B==="custom"){let F=await VP(X,"upload");if(!F)h0("Upload cancelled by user");H=F}else{let F=Number.parseInt(B.replace("suggest",""))-1;H=G[F]}return q.info(`\uD83D\uDD04 Retrying with new version: ${H}`),H}h0(`Version ${X} already exists ${m($)}`)}return!1}async function a50(D,Y,X,Q,J,W,$,G){let B,H,F="",K=null,U="none",z="",V="",w=Y.keyV2,L=Y.key===!1,O=d0();O.start(`Zipping bundle from ${D}`),K=await RJ(D),O.message("Calculating checksum");let Z=
|
|
289
|
+
`)}async function JF(D,Y,X){let Q=DF(D),J=await F5("AWS4"+X,Q),W=await F5(J,Y),$=await F5(W,"s3");return await F5($,"aws4_request")}function WF(D,Y,X){return`${D}/${YF(Y,X)}`}async function F5(D,Y){let X=new TextEncoder,Q=await crypto.subtle.importKey("raw",D instanceof Uint8Array?D:X.encode(D),{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign","verify"]),J=await crypto.subtle.sign("HMAC",Q,Y instanceof Uint8Array?Y:X.encode(Y));return new Uint8Array(J)}async function zP(D){if(!D.accessKey)throw new $5;if(!D.secretKey)throw new DY;if(D.expirySeconds<1||D.expirySeconds>604800)throw new hJ;let Y=new Date(D.date);Y.setSeconds(Y.getSeconds()+D.expirySeconds);let X=WF(D.accessKey,D.region,D.date),Q=B5(D.date),J={"X-Amz-Algorithm":XY,"X-Amz-Credential":X,"X-Amz-Date":Q,key:D.objectKey,...D.fields},W=[{bucket:D.bucket},{key:D.objectKey},{"X-Amz-Algorithm":XY},{"X-Amz-Credential":X},{"X-Amz-Date":Q}];if(D.conditions)W.push(...D.conditions);for(let[z,V]of Object.entries(D.fields||{})){if(["key","X-Amz-Algorithm","X-Amz-Credential","X-Amz-Date"].includes(z))continue;W.push({[z]:V})}let $={expiration:Y.toISOString(),conditions:W},G=new TextEncoder().encode(JSON.stringify($)),B=btoa(String.fromCharCode(...G));J.policy=B;let H=B,F=await JF(D.date,D.region,D.secretKey),K=YY(await F5(F,H)).toLowerCase();return J["X-Amz-Signature"]=K,{url:`${D.protocol}//${D.host}/${D.bucket}`,fields:J}}var i90=["Content-Type","Cache-Control","Content-Disposition","Content-Encoding","Content-Language","Expires","x-amz-checksum-sha256","x-amz-grant-full-control","x-amz-grant-read","x-amz-grant-read-acp","x-amz-grant-write-acp","x-amz-server-side-encryption","x-amz-storage-class","x-amz-website-redirect-location","x-amz-server-side-encryption-customer-algorithm","x-amz-server-side-encryption-customer-key","x-amz-server-side-encryption-customer-key-MD5","x-amz-server-side-encryption-aws-kms-key-id","x-amz-server-side-encryption-context","x-amz-server-side-encryption-bucket-key-enabled","x-amz-request-payer","x-amz-tagging","x-amz-object-lock-mode","x-amz-object-lock-retain-until-date","x-amz-object-lock-legal-hold","x-amz-expected-bucket-owner"],r90=5242880,a90=5368709120,$F=5497558138880;class uJ{host;port;protocol;accessKey;#D;sessionToken;defaultBucket;region;userAgent="s3-lite-client";pathStyle;pathPrefix;constructor({endPoint:D,useSSL:Y,port:X,pathPrefix:Q,...J}){if(/^https?:\/\//i.test(D)){if(Y!==void 0||X!==void 0||Q!==void 0)throw new x8("useSSL/port/pathPrefix cannot be specified if endPoint is a URL.");try{let $=new URL(D);if(D=$.hostname,Y=$.protocol==="https:",X=$.port?parseInt($.port,10):Y?443:80,$.pathname&&$.pathname!=="/")Q=$.pathname.endsWith("/")?$.pathname.slice(0,-1):$.pathname}catch{throw new fJ(`Invalid endPoint URL: ${D}`)}}if(typeof D!=="string"||D.length===0)throw new fJ(`Invalid endPoint: ${D}`);if(Y===void 0)Y=!0;if(X!==void 0&&!$P(X))throw new x8(`Invalid port: ${X}`);if(J.accessKey&&!J.secretKey)throw new x8("If specifying access key, secret key must also be provided.");if(J.accessKey&&J.accessKey.startsWith("ASIA")&&!J.sessionToken)throw new x8("If specifying temporary access key, session token must also be provided.");let W=Y?443:80;if(this.port=X??W,this.host=D.toLowerCase()+(this.port!==W?`:${this.port}`:""),this.protocol=Y?"https:":"http:",this.accessKey=J.accessKey,this.#D=J.secretKey??"",this.sessionToken=J.sessionToken,this.pathStyle=J.pathStyle??!0,this.pathPrefix=Q??"",this.defaultBucket=J.bucket,this.region=J.region,this.pathPrefix){if(!this.pathStyle)throw new x8("pathPrefix is incompatible with pathStyle=false");if(!this.pathPrefix.startsWith("/"))throw new x8("pathPrefix should start with /");if(this.pathPrefix.endsWith("/"))throw new x8("pathPrefix should not end with /")}}getBucketName(D){let Y=D?.bucketName??this.defaultBucket;if(Y===void 0||!GP(Y))throw new s2(Y??"");return Y}buildRequestOptions(D){let Y=this.getBucketName(D),X=this.pathStyle?this.host:`${Y}.${this.host}`,Q=D.headers??new Headers;Q.set("host",X);let J=typeof D.query==="object"?new URLSearchParams(D.query).toString().replace("+","%20"):D.query,W=this.pathStyle?`${this.pathPrefix}/${Y}/${D.objectName}`:`/${D.objectName}`,$=J?`?${J}`:"",G=W+$,B=W.split("/").map((H)=>encodeURIComponent(H)).join("/")+$;return{headers:Q,host:X,path:G,encodedPath:B}}async makeRequest({method:D,payload:Y,...X}){let Q=new Date,{headers:J,host:W,path:$,encodedPath:G}=this.buildRequestOptions(X),B=X.statusCode??200;if(D==="POST"||D==="PUT"||D==="DELETE"){if(Y===void 0)Y=new Uint8Array;else if(typeof Y==="string")Y=new TextEncoder().encode(Y);J.set("Content-Length",String(Y.length))}else if(Y)throw Error(`Unexpected payload on ${D} request.`);let H=await gJ(Y??new Uint8Array);if(J.set("x-amz-date",B5(Q)),J.set("x-amz-content-sha256",H),this.accessKey){if(this.sessionToken)J.set("x-amz-security-token",this.sessionToken);J.set("authorization",await BP({headers:J,method:D,path:$,accessKey:this.accessKey,secretKey:this.#D,region:this.region,date:Q}))}let F=`${this.protocol}//${W}${G}`,K=await fetch(F,{method:D,headers:J,body:Y});if(K.status!==B){if(K.status>=400)throw await WP(K);else if(K.status===301)throw new WD(K.status,"UnexpectedRedirect",'The server unexpectedly returned a redirect response. With AWS S3, this usually means you need to use a region-specific endpoint like "s3.us-west-2.amazonaws.com" instead of "s3.amazonaws.com"');throw new WD(K.status,"UnexpectedStatusCode",`Unexpected response code from the server (expected ${B}, got ${K.status} ${K.statusText}).`)}if(!X.returnBody)await K.body?.getReader().read();return K}async deleteObject(D,Y={}){let X=this.getBucketName(Y);if(!$D(D))throw new E9(D);let Q=Y.versionId?{versionId:Y.versionId}:{},J=new Headers;if(Y.governanceBypass)J.set("X-Amz-Bypass-Governance-Retention","true");await this.makeRequest({method:"DELETE",bucketName:X,objectName:D,headers:J,query:Q,statusCode:204})}async exists(D,Y){try{return await this.statObject(D,Y),!0}catch(X){if(X instanceof WD&&X.statusCode===404)return!1;throw X}}getObject(D,Y){return this.getPartialObject(D,{...Y,offset:0,length:0})}async getPartialObject(D,{offset:Y,length:X,...Q}){let J=this.getBucketName(Q);if(!$D(D))throw new E9(D);let W=new Headers(Object.entries(Q.metadata??{})),$=200;if(Y||X){let B="";if(Y)B=`bytes=${+Y}-`;else B="bytes=0-",Y=0;if(X)B+=`${+X+Y-1}`;W.set("Range",B),$=206}let G={...Q.responseParams,...Q.versionId?{versionId:Q.versionId}:{}};return await this.makeRequest({method:"GET",bucketName:J,objectName:D,headers:W,query:G,statusCode:$,returnBody:!0})}getPresignedUrl(D,Y,X={}){if(!this.accessKey)throw new $5;if(!$D(Y))throw new E9(Y);let{headers:Q,path:J}=this.buildRequestOptions({objectName:Y,bucketName:X.bucketName,query:X.parameters}),W=X.requestDate??new Date,$=X.expirySeconds??604800;return HP({protocol:this.protocol,headers:Q,method:D,path:J,accessKey:this.accessKey,secretKey:this.#D,sessionToken:this.sessionToken,region:this.region,date:W,expirySeconds:$})}presignedGetObject(D,Y={}){let{versionId:X,responseParams:Q,...J}=Y,W={...Q,...X?{versionId:X}:{}};return this.getPresignedUrl("GET",D,{parameters:W,...J})}async*listObjects(D={}){for await(let Y of this.listObjectsGrouped({...D,delimiter:""}))if(Y.type==="Object")yield Y;else throw Error(`Unexpected result from listObjectsGrouped(): ${Y}`)}async*listObjectsGrouped(D){let Y=this.getBucketName(D),X="",Q=D.pageSize??1000;if(Q<1||Q>1000)throw new x8("pageSize must be between 1 and 1,000.");let J=0;while(!0){let W=D.maxResults?Math.min(Q,D.maxResults-J):Q;if(W===0)return;let G=await(await this.makeRequest({method:"GET",bucketName:Y,objectName:"",query:{"list-type":"2",prefix:D.prefix??"",delimiter:D.delimiter,"max-keys":String(W),...X?{"continuation-token":X}:{}},returnBody:!0})).text(),B=JD(G).root;if(!B||B.name!=="ListBucketResult")throw Error(`Unexpected response: ${G}`);let H=B.children.filter((U)=>U.name==="CommonPrefixes").flatMap((U)=>U.children),F=[];for(let U of H)F.push({type:"CommonPrefix",prefix:U.content??""}),J++;for(let U of B.children.filter((z)=>z.name==="Contents"))F.push({type:"Object",key:U.children.find((z)=>z.name==="Key")?.content??"",etag:G5(U.children.find((z)=>z.name==="ETag")?.content??""),size:parseInt(U.children.find((z)=>z.name==="Size")?.content??"",10),lastModified:new Date(U.children.find((z)=>z.name==="LastModified")?.content??"invalid")}),J++;F.sort((U,z)=>{let V=U.type==="Object"?U.key:U.prefix,w=z.type==="Object"?z.key:z.prefix;return V>w?1:V<w?-1:0});for(let U of F)yield U;if(B.children.find((U)=>U.name==="IsTruncated")?.content==="true"){let U=B.children.find((z)=>z.name==="NextContinuationToken")?.content;if(!U)throw Error("Unexpectedly missing continuation token, but server said there are more results.");X=U}else return}}async putObject(D,Y,X){let Q=this.getBucketName(X);if(!$D(D))throw new E9(D);let J,W;if(typeof Y==="string"){let H=new TextEncoder().encode(Y);if(typeof ReadableStream.from<"u")W=ReadableStream.from([H]);else W=new ReadableStream({start(F){F.enqueue(H),F.close()}});J=H.length}else if(Y instanceof Uint8Array){if(typeof ReadableStream.from<"u")W=ReadableStream.from([Y]);else W=new ReadableStream({start(H){H.enqueue(Y),H.close()}});J=Y.byteLength}else if(Y instanceof ReadableStream)W=Y;else throw new x8("Invalid stream/data type provided.");if(X?.size!==void 0){if(J!==void 0&&X?.size!==J)throw new x8(`size was specified (${X.size}) but doesn't match auto-detected size (${J}).`);if(typeof X.size!=="number"||X.size<0||isNaN(X.size))throw new x8(`invalid size specified: ${X.size}`);else J=X.size}let $=X?.partSize??this.calculatePartSize(J);if($<r90)throw new x8("Part size should be greater than 5MB");else if($>a90)throw new x8("Part size should be less than 6MB");let G=new o2($),B=new XF({client:this,bucketName:Q,objectName:D,partSize:$,metadata:X?.metadata??{}});return await W.pipeThrough(G).pipeTo(B),B.getResult()}calculatePartSize(D){if(D===void 0)D=$F;if(D>$F)throw TypeError(`size should not be more than ${$F}`);let Y=67108864;while(!0){if(Y*1e4>D)return Y;Y+=16777216}}async statObject(D,Y){let X=this.getBucketName(Y);if(!$D(D))throw new E9(D);let Q={};if(Y?.versionId)Q.versionId=Y.versionId;let J=await this.makeRequest({method:"HEAD",bucketName:X,objectName:D,query:Q,headers:new Headers(Y?.headers)}),W={};for(let $ of i90)if(J.headers.has($))W[$]=J.headers.get($);return J.headers.forEach(($,G)=>{if(G.startsWith("x-amz-meta-"))W[G]=J.headers.get(G)}),{type:"Object",key:D,size:parseInt(J.headers.get("content-length")??"",10),metadata:W,lastModified:new Date(J.headers.get("Last-Modified")??"error: missing last modified"),versionId:J.headers.get("x-amz-version-id")||null,etag:G5(J.headers.get("ETag")??"")}}async copyObject(D,Y,X){let Q=this.getBucketName(X),J=D.sourceBucketName??Q;if(!$D(Y))throw new E9(Y);let W=`${J}/${D.sourceKey}`;if(D.sourceVersionId)W+=`?versionId=${D.sourceVersionId}`;let $=new Headers(X?.metadata);if(X?.metadata!==void 0)$.set("x-amz-metadata-directive","REPLACE");$.set("x-amz-copy-source",W);let G=await this.makeRequest({method:"PUT",bucketName:Q,objectName:Y,headers:$,returnBody:!0}),B=await G.text(),H=JD(B).root;if(!H||H.name!=="CopyObjectResult")throw Error(`Unexpected response: ${B}`);let F=H.children.find((U)=>U.name==="ETag")?.content??"",K=H.children.find((U)=>U.name==="LastModified")?.content;if(K===void 0)throw Error("Unable to find <LastModified>...</LastModified> from the server.");return{copySourceVersionId:G.headers.get("x-amz-copy-source-version-id")||null,etag:G5(F),lastModified:new Date(K),versionId:G.headers.get("x-amz-version-id")||null}}async bucketExists(D){try{return await this.listObjects({bucketName:D}).next(),!0}catch(Y){if(Y instanceof WD&&Y.statusCode===404)return!1;throw Y}}async makeBucket(D){await this.makeRequest({method:"PUT",bucketName:this.getBucketName({bucketName:D}),objectName:"",statusCode:200})}async removeBucket(D){await this.makeRequest({method:"DELETE",bucketName:this.getBucketName({bucketName:D}),objectName:"",statusCode:204})}presignedPostObject(D,Y={}){if(!$D(D))throw new E9(D);let X=this.getBucketName(Y);if(!X)throw Error("Bucket name is required for presignedPost, but none was provided either to this method nor to the client constructor");let Q=Y.requestDate||new Date,J=Y.expirySeconds??3600;return zP({protocol:this.protocol,host:this.host,bucket:X,objectKey:D,accessKey:this.accessKey||"",secretKey:this.#D||"",region:this.region,date:Q,expirySeconds:J,conditions:Y.conditions,fields:Y.fields})}}function UP(D){try{let Y=C0(D);return u8(u9(Y,"patch"))}catch{let Y=D.match(/^(\d+)\.(\d+)\.(\d+)/);if(Y){let[,X,Q,J]=Y;return`${X}.${Q}.${Number.parseInt(J)+1}`}return"1.0.1"}}async function VP(D,Y){let X=UP(D),Q=Y?` for ${Y}`:"",J=await D8({message:`How do you want to handle the version${Q}?`,options:[{value:"auto",label:`Auto: Bump patch version (${D} → ${X})`},{value:"manual",label:"Manual: I'll provide the version number"}]});if(E0(J))return null;if(J==="auto")return q.info(`\uD83D\uDD22 Auto-bumped version from ${D} to ${X}`),X;let W=await h8({message:`Current version is ${D}. Enter new version:`,validate:($)=>{if(!$)return"Version is required";if(!$.match(/^\d+\.\d+\.\d+/))return"Please enter a valid version (x.y.z)"}});if(E0(W))return null;return W}function wP(D){let Y=UP(D);try{let X=C0(D);return[Y,u8(u9(X,"minor")),`${D}-beta.1`,`${D}.1`]}catch{return[Y,`${D}.1`,`${D}-beta.1`,`${D}-rc.1`]}}import{readdirSync as LP,readFileSync as o90,statSync as s90}from"node:fs";import{extname as t90,join as e90}from"node:path";function DD0(D,Y){return o90(D,"utf8").includes(Y)}function QY(D,Y){let X=LP(D);for(let Q of X){let J=e90(D,Q),W=s90(J);if(W.isDirectory()){if(QY(J,Y))return!0}else if(W.isFile()&&t90(J)===".js"){if(DD0(J,Y))return!0}}return!1}function mJ(D){if(LP(D).indexOf("index.html")>-1)return!0;return!1}import{Buffer as j50}from"node:buffer";import{createHash as T50}from"node:crypto";import{createReadStream as AF,statSync as S50}from"node:fs";import{platform as P50}from"node:os";import{join as I50,posix as C50,win32 as EI}from"node:path";import{cwd as x50}from"node:process";import{buffer as EF}from"node:stream/consumers";import{createBrotliCompress as _50}from"node:zlib";var RI=a1(AI(),1),jI=a1(hQ(),1);async function b50(D,Y){try{let X=new URL(`${D.hostFilesApi}/files/read/attachments/${encodeURIComponent(Y)}`);return X.searchParams.set("nocache",`${Date.now()}`),(await fetch(X.toString(),{method:"GET",headers:{range:"bytes=0-0","cache-control":"no-cache"}})).ok}catch{return!1}}var k50=8192;async function v50(D){let Y=f1(x50()),X=await d8("@capgo/capacitor-updater",Y,D.packageJson),Q;try{Q=X?C0(X):void 0}catch{Q=void 0}if(!X||!Q)return{version:null,supportsBrotliV2:!1};let J=!U6(Q,void 0,void 0,n7);return{version:`${Q.major}.${Q.minor}.${Q.patch}`,supportsBrotliV2:J}}function y50(D,Y){if(!Y)return!1;let X=Y.split(",").map((Q)=>Q.trim()).filter((Q)=>!!Q);if(X.length===0)return!1;return RI.isMatch(D,X)}async function f50(D,Y,X){let J=S50(D).size,W=await EF(AF(D));if(J===0)return{buffer:W,useBrotli:!1};if(y50(Y,X.noBrotliPatterns))return{buffer:W,useBrotli:!1};if(J<k50)return{buffer:W,useBrotli:!1};try{let $=await EF(AF(D).pipe(_50({})));if($.length>=J-10)return{buffer:W,useBrotli:!1};return{buffer:$,useBrotli:!0}}catch($){return q.warn(`Brotli compression failed for ${D}: ${$}, using original file`),{buffer:W,useBrotli:!1}}}async function TI(D,Y,X,Q,J,W,$=!1){let G=d0();G.start(J!=="v2"?"Generating the update manifest":`Generating the update manifest with ${$?"V3":"V2"} encryption`);let B=await DS(D);if(J==="v2")for(let H of B)H.hash=$?i4(H.hash,W):n4(H.hash,W);return G.stop("Manifest generated successfully"),await Z0(Y,{channel:"partial-update",event:"Generate manifest",icon:"\uD83D\uDCC2",user_id:X,tags:{"app-id":Q},notify:!1}),B}function h50(D){if(P50()!=="win32")return D;return EI.normalize(D).split(EI.sep).join(C50.sep)}function g50(D){let Y=D.split("/").map((X)=>encodeURIComponent(X)).join("/");if(D.includes(" "))q.warn(`File "${D}" contains spaces in its name.`);return Y}async function SI(D,Y,X,Q,J,W,$){let G=d0();G.start("Preparing partial update with TUS protocol");let B=performance.now(),H=await c8(),F=!!($.partial||$.delta||$.partialOnly||$.deltaOnly),{version:K,supportsBrotliV2:U}=await v50($);if(!U)throw Error(`Your project is using an older version of @capgo/capacitor-updater (${K||"unknown"}). To use Delta updates, please upgrade to version ${AJ} (v5), ${EJ} (v6) or ${n7} (v7) or higher.`);else if($.disableBrotli)q.info("Brotli compression disabled by user request");else if($.noBrotliPatterns)q.info(`Files matching patterns (${$.noBrotliPatterns}) will be excluded from brotli compression`);let z=Y.filter((O)=>O.file.includes(" "));if(z.length>0)throw Error(`Files with spaces in their names (${z.map((O)=>O.file).join(", ")}). Please rename the files.`);let V=0,w=Y.length,L=0;try{G.message(`Uploading ${w} files using TUS protocol`);let O=async(I)=>{let _=I50(X,I.file),y=h50(I.file),C,c=!1;if($.disableBrotli)C=await EF(AF(_)),c=!1;else{let N=await f50(_,y,$);C=N.buffer,c=N.useBrotli}let S=C;if(W)S=p4(C,W.sessionKey,W.ivSessionKey);let p=y;if(c)p=`${y}.br`,L++;let u=g50(p),Q0=T50("sha256").update(I.hash).digest("hex"),x;if(W){let N=j50.from(W.ivSessionKey).toString("hex");x=`orgs/${J}/apps/${Q}/delta/${N}/${Q0}_${u}`}else x=`orgs/${J}/apps/${Q}/delta/${Q0}_${u}`;if(!W&&await b50(H,x))return V++,Promise.resolve({file_name:u,s3_path:x,file_hash:I.hash});return new Promise((N,A)=>{G.message(`Prepare upload partial file: ${y}`);let R=XD(p);new jI.Upload(S,{endpoint:`${H.hostFilesApi}/files/upload/attachments/`,chunkSize:$.tusChunkSize,retryDelays:[0,1000,3000,5000,1e4],removeFingerprintOnSuccess:!0,metadata:{filename:x,filetype:R},headers:{Authorization:D},onError:(v)=>{let b=v.toString(),r;try{let g=b.match(/response text: (\{.*?\})/);if(g&&g[1])r=JSON.parse(g[1]).moreInfo?.requestId}catch{}let k=r?` [requestId: ${r}]`:"";q.error(`Failed to upload ${y}: ${b}${k}`),A(v)},onProgress(){let v=(V/w*100).toFixed(2);G.message(`Uploading partial update: ${v}%`)},onSuccess(){V++,N({file_name:u,s3_path:x,file_hash:I.hash})}}).start()})},Z=500,M=[];for(let I=0;I<Y.length;I+=Z){let _=Y.slice(I,I+Z),y=Math.floor(I/Z)+1,C=Math.ceil(Y.length/Z);if(C>1)G.message(`Processing batch ${y}/${C} (${_.length} files)`);let c=await Promise.all(_.map((S)=>O(S)));M.push(...c)}let j=((performance.now()-B)/1000).toFixed(2);if(G.stop(`Partial update uploaded successfully \uD83D\uDCAA in (${j} seconds)`),L>0)q.info(`${L} of ${w} files were compressed with brotli and use .br extension`);return await Z0(D,{channel:"app",event:`App Partial TUS done${L>0?" with .br extension":""}`,icon:"⏫",user_id:J,tags:{"app-id":Q},notify:!1}),await Z0(D,{channel:"performance",event:"Partial upload performance",icon:"\uD83D\uDE84",user_id:J,tags:{"app-id":Q,time:j},notify:!1}),M}catch(O){let M=((performance.now()-B)/1000).toFixed(2);if(G.stop(`Failed to upload Partial bundle (after ${M} seconds)`),F)throw q.error(`Error uploading partial update: ${O}`),q.error("Delta/partial upload was explicitly requested but failed. Upload aborted."),O;else return q.info(`Error uploading partial update: ${O}, This is not a critical error, the bundle has been uploaded without the partial files`),null}}function h0(D){throw q.error(D),Error(D)}function c50(D){let Y=new G1;Y.headers=["Package","Local","Remote","Status","Details"],Y.theme=G1.roundTheme,Y.rows=[];for(let X of D){let{name:Q,localVersion:J,remoteVersion:W}=X,$=W5(X),G=$.compatible?"✅":"❌";Y.rows.push([Q,J||"-",W||"-",G,$.message])}q.info(Y.toString())}async function l50(D,Y){let X=x6("",Y.packageJson),Q=Y.bundle||D?.plugins?.CapacitorUpdater?.version||X||`0.0.1-beta.${u50().split("-")[0]}`;if(!v4.test(Q))h0(`Your bundle name ${Q}, is not valid it should follow semver convention : https://semver.org/`);return Q}function d50(D){let Y=D.apikey||X0();if(!Y)h0("Missing API key, you need to provide an API key to upload your bundle");return Y}function p50(D,Y,X){let Q=_0(D,X),J=Y.path||X?.webDir;if(!Q)h0("Missing argument, you need to provide a appid or be in a capacitor project");if(!J)h0("Missing argument, you need to provide a path (--path), or be in a capacitor project");if(!BY(J))h0(`Path ${J} does not exist, build your app first, or provide a valid path`);return{appid:Q,path:J}}function n50(D,Y){let X=D.codeCheck;if(typeof X>"u"||X){if(!QY(Y,"notifyAppReady"))h0(`notifyAppReady() is missing in the build folder of your app. see: https://capgo.app/docs/plugin/api/#notifyappready
|
|
290
|
+
If you are sure your app has this code, you can use the --no-code-check option`);if(!mJ(Y))h0(`index.html is missing in the root folder of ${Y}`)}}async function i50(D,Y,X,Q,J,W){let{ignoreMetadataCheck:$,autoMinUpdateVersion:G,minUpdateVersion:B}=X,{data:H,error:F}=await D.from("channels").select("disable_auto_update, version ( min_update_version, native_packages )").eq("name",Q).eq("app_id",J).single(),K=!!H&&H.disable_auto_update==="version_number",U,z;if(!F&&H&&H.version&&H.version.native_packages&&!$){let L=d0();L.start(`Checking bundle compatibility with channel ${Q}`);let{finalCompatibility:O,localDependencies:Z}=await TJ(D,J,Q,X.packageJson,X.nodeModules);if(z=O,U=Z,z.filter((E)=>!QD(E)).length>0){if(L.stop(`Bundle NOT compatible with ${Q} channel`),q.warn(""),c50(z),q.warn(""),q.warn("An app store update may be required for these changes to take effect."),G)B=W,q.info(`Auto set min-update-version to ${B}`)}else if(G)try{let{min_update_version:E}=H.version;if(!E||!v4.test(E))h0("Invalid remote min update version, skipping auto setting compatibility");B=E,L.stop(`Auto set min-update-version to ${B}`)}catch{h0(`Cannot auto set compatibility, invalid data ${H}`)}else L.stop(`Bundle compatible with ${Q} channel`)}else if(!$){if(q.warn(`Channel ${Q} is new or it's your first upload with compatibility check, it will be ignored this time`),U=await S2(X.packageJson,X.nodeModules),G)B=W,q.info(`Auto set min-update-version to ${B}`)}if(K&&!B&&!$)h0("You need to provide a min-update-version to upload a bundle to this channel");if(B){if(!v4.test(B))h0(`Your minimal version update ${B}, is not valid it should follow semver convention : https://semver.org/`)}let V=U?new Map(U.filter((L)=>!!L.native&&L.native!==void 0).map((L)=>[L.name,L])):new Map;return{nativePackages:V.size>0||!X.ignoreMetadataCheck?Array.from(V,([L,O])=>({name:L,version:O.version,...O.ios_checksum&&{ios_checksum:O.ios_checksum},...O.android_checksum&&{android_checksum:O.android_checksum}})):void 0,minUpdateVersion:B}}async function r50(D,Y,X,Q=!1,J=!1){let{data:W,error:$}=await D.rpc("exist_app_versions",{appid:Y,name_version:X}).single();if(W||$){if(Q)return q.warn(`Version ${X} already exists - exiting gracefully due to --silent-fail option`),e("Bundle version already exists - exiting gracefully \uD83C\uDF89"),!0;if(J){q.error(`❌ Version ${X} already exists`);let G=wP(X);q.info("\uD83D\uDCA1 Here are some suggestions:"),G.forEach((F,K)=>{q.info(` ${K+1}. ${F}`)});let B=await D8({message:"What would you like to do?",options:[{value:"suggest1",label:`Use ${G[0]}`},{value:"suggest2",label:`Use ${G[1]}`},{value:"suggest3",label:`Use ${G[2]}`},{value:"suggest4",label:`Use ${G[3]}`},{value:"custom",label:"Enter a custom version"},{value:"cancel",label:"Cancel upload"}]});if(E0(B)||B==="cancel")h0("Upload cancelled by user");let H;if(B==="custom"){let F=await VP(X,"upload");if(!F)h0("Upload cancelled by user");H=F}else{let F=Number.parseInt(B.replace("suggest",""))-1;H=G[F]}return q.info(`\uD83D\uDD04 Retrying with new version: ${H}`),H}h0(`Version ${X} already exists ${m($)}`)}return!1}async function a50(D,Y,X,Q,J,W,$,G){let B,H,F="",K=null,U="none",z="",V="",w=Y.keyV2,L=Y.key===!1,O=d0();O.start(`Zipping bundle from ${D}`),K=await RJ(D),O.message("Calculating checksum");let Z=f1(RF()),M=await d8("@capgo/capacitor-updater",Z,Y.packageJson),E=!1,j;try{j=M?C0(M):void 0}catch{j=void 0}if(!M)h0("Cannot find @capgo/capacitor-updater in node_modules, please install it first with your package manager");else if(j)E=!U6(j,AJ,EJ,n7);else if(M==="link:@capgo/capacitor-updater"||M==="file:.."||M==="file:../")q.warn("Using local @capgo/capacitor-updater. Assuming latest version for checksum calculation."),E=!0;let I=Y.forceCrc32Checksum===!0,_=!I&&((w||Y.keyDataV2||BY(l8))&&!L||E);if(F=await o9(K,_?"sha256":"crc32"),O.stop(`Checksum ${_?"SHA256":"CRC32"}${I?" (forced)":""}: ${F}`),L)q.info("Encryption ignored");else if((w||BY(l8)||Y.keyDataV2)&&!Y.oldEncryption){let c=typeof w==="string"?w:l8,S=Y.keyDataV2||"";if(!S&&!BY(c))h0(`Cannot find private key ${c}`);if(await Z0(X,{channel:"app",event:"App encryption v2",icon:"\uD83D\uDD11",user_id:Q,tags:{"app-id":J},notify:!1},Y.verbose),!S)S=m50(c).toString();let p=j&&!U6(j,"5.30.0","6.30.0","7.30.0");q.info(`Encrypting your bundle with ${p?"V3":"V2"}`);let{sessionKey:u,ivSessionKey:Q0}=yJ(S),x=p4(K,u,Q0);if(F=p?i4(F,S):n4(F,S),B=Q0,H=u,U="v2",z=S,G){if(V=sS(G),Y.verbose)q.info(`[Verbose] Encryption key_id: ${V}`)}if(Y.displayIvSession)q.info(`Your Iv Session key is ${B},
|
|
291
291
|
keep it safe, you will need it to decrypt your bundle.
|
|
292
292
|
It will be also visible in your dashboard
|
|
293
293
|
`);K=x}let y=Math.floor((K?.byteLength??0)/1024/1024),C=Math.floor(W/1024/1024);if(K?.byteLength>W)h0(`The bundle size is ${y} Mb, this is greater than the maximum upload length ${C} Mb, please reduce the size of your bundle`);else if(K?.byteLength>$){if(q.warn(`WARNING !!
|
|
294
294
|
The bundle size is ${y} Mb, this may take a while to download for users
|
|
295
295
|
`),q.info(`Learn how to optimize your assets https://capgo.app/blog/optimise-your-images-for-updates/
|
|
296
296
|
`),Y.verbose)q.info("[Verbose] Bundle size details:"),q.info(` - Actual size: ${y} MB (${K?.byteLength} bytes)`),q.info(` - Alert threshold: ${Math.floor($/1024/1024)} MB`),q.info(` - Maximum allowed: ${C} MB`),q.info("[Verbose] Sending 'App Too Large' event to analytics...");if(await Z0(X,{channel:"app-error",event:"App Too Large",icon:"\uD83D\uDE9B",user_id:Q,tags:{"app-id":J},notify:!1},Y.verbose),Y.verbose)q.info("[Verbose] Event sent successfully")}else if(Y.verbose)q.info(`[Verbose] Bundle size OK: ${y} MB (under ${Math.floor($/1024/1024)} MB alert threshold)`);if(Y.verbose)q.info("[Verbose] Bundle preparation complete, returning bundle data");return{zipped:K,ivSessionKey:B,sessionKey:H,checksum:F,encryptionMethod:U,finalKeyData:z,keyId:V}}async function o50(D,Y,X,Q,J,W,$,G){let B=d0();B.start("Uploading Bundle");let H=performance.now(),F=!1;if($.verbose)q.info("[Verbose] uploadBundleToCapgoCloud called:"),q.info(` - Bundle size: ${Math.floor(W.byteLength/1024)} KB`),q.info(` - App ID: ${X}`),q.info(` - Bundle version: ${Q}`),q.info(` - Chunk size: ${Math.floor(G/1024/1024)} MB`);if($.dryUpload){if(B.stop(`Dry run, bundle not uploaded
|
|
297
|
-
Bundle uploaded \uD83D\uDCAA in 0 seconds`),$.verbose)q.info("[Verbose] Dry upload mode - skipping actual upload");return}try{let z=await c8();if($.verbose)q.info("[Verbose] Local config retrieved for upload");if($.multipart!==void 0&&$.multipart||$.tus!==void 0&&$.tus){if($.multipart)q.info("Uploading bundle with multipart is deprecated, we upload with TUS instead");else q.info("Uploading bundle with TUS protocol");if($.verbose)q.info("[Verbose] Starting TUS resumable upload..."),q.info(` - Host: ${z.hostWeb}`),q.info(` - Chunk size: ${Math.floor(G/1024/1024)} MB`);if(await YS(D,W,J,X,Q,B,z,G),F=!0,$.verbose)q.info("[Verbose] TUS upload completed, updating database with R2 path...");let V=`orgs/${J}/apps/${X}/${Q}.zip`,{error:w}=await Y.from("app_versions").update({r2_path:V}).eq("name",Q).eq("app_id",X);if(w){if(q.error(`Cannot finish TUS upload ${m(w)}`),$.verbose)q.info(`[Verbose] Database update failed: ${m(w)}`);return Promise.reject(Error("Cannot finish TUS upload"))}if($.verbose)q.info(`[Verbose] Database updated with R2 path: ${V}`)}else{if($.verbose)q.info("[Verbose] Using standard upload (non-TUS), getting presigned URL...");let V=await tT(Y,X,Q);if(!V){if(q.error("Cannot get upload url"),$.verbose)q.info("[Verbose] Failed to retrieve presigned upload URL from database");return Promise.reject(Error("Cannot get upload url"))}if($.verbose)q.info("[Verbose] Presigned URL obtained, uploading via HTTP PUT..."),q.info(` - Timeout: ${$.timeout||N2}ms`),q.info(" - Retry attempts: 5"),q.info(" - Content-Type: application/zip");let w=new AbortController,L=setTimeout(()=>w.abort(),$.timeout||N2);try{let O=await fetch(V,{method:"PUT",body:W,headers:{"Content-Type":"application/zip"},signal:w.signal});if(!O.ok)throw Error(`HTTP error! status: ${O.status}`)}finally{clearTimeout(L)}if($.verbose)q.info("[Verbose] HTTP PUT upload completed successfully")}}catch(z){let w=((performance.now()-H)/1000).toFixed(2);if(B.stop(`Failed to upload bundle ( after ${w} seconds)`),$.verbose)q.info(`[Verbose] Upload failed after ${w} seconds`),q.info(`[Verbose] Error type: ${z instanceof Error?"Error":typeof z}`);if(z instanceof Error&&z.message.includes("HTTP error"))try{let L=z.message.match(/status: (\d+)/),O=L?L[1]:"unknown";q.error(`Upload failed with status ${O}: ${z.message}`)}catch{q.error(`Upload failed: ${z.message}`)}else{if($.verbose)q.info(`[Verbose] Non-HTTP error: ${m(z)}`);if(!$.tus)q.error(`Cannot upload bundle ( try again with --tus option) ${m(z)}`);else q.error(`Cannot upload bundle please contact support if the issue persists ${m(z)}`)}if($.verbose)q.info("[Verbose] Cleaning up failed version from database...");if(await XS(Y,X,Q),$.verbose)q.info("[Verbose] Failed version cleaned up");throw z instanceof Error?z:Error(String(z))}let U=((performance.now()-H)/1000).toFixed(2);if(B.stop(`Bundle uploaded \uD83D\uDCAA in (${U} seconds)`),$.verbose)q.info("[Verbose] Upload successful:"),q.info(` - Upload time: ${U} seconds`),q.info(` - Upload method: ${F?"TUS (resumable)":"Standard HTTP PUT"}`),q.info(` - Bundle size: ${Math.floor(W.byteLength/1024)} KB`),q.info("[Verbose] Sending performance event...");if(await Z0(D,{channel:"performance",event:F?"TUS upload zip performance":"Upload zip performance",icon:"\uD83D\uDE84",user_id:J,tags:{"app-id":X,time:U},notify:!1},$.verbose),$.verbose)q.info("[Verbose] Performance event sent successfully")}async function s50(D,Y,X){let{data:Q,error:J}=await D.from("channels").select("version ( id, name, deleted )").eq("app_id",Y).eq("name",X);if(J){q.error(`Cannot delete linked bundle on upload ${m(J)}`);return}if(Q.length===0){q.warn("No linked bundle found in the channel you are trying to upload to");return}let W=Q[0].version;if(W.deleted){q.warn("The linked bundle is already deleted");return}let{error:$}=await D.from("app_versions").update({deleted:!0}).eq("id",W.id);if($){q.error(`Cannot delete linked bundle on upload ${m($)}`);return}q.info("Linked bundle deleted")}async function t50(D,Y,X,Q,J,W,$,G,B,H){let{data:F}=await D.rpc("get_app_versions",{apikey:Y,name_version:Q,appid:G}).single();if(!F)h0("Cannot get version id, cannot set channel");let{data:K}=await D.rpc("is_allowed_capgkey",{apikey:Y,keymode:["write","all"]}).single();if(K){let{error:U,data:z}=await jJ(D,{name:J,app_id:G,created_by:W,version:F,owner_org:$,...H?{allow_device_self_set:!0}:{}});if(U)h0(`Cannot set channel, the upload key is not allowed to do that, use the "all" for this. ${m(U)}`);let V=`${B.hostWeb}/app/${G}/channel/${z.id}`;if(z?.public)q.info("Your update is now available in your public channel \uD83C\uDF89");else if(z?.id)q.info(`Link device to this bundle to try it: ${V}`);if(X)q.info(`Bundle url: ${V}`)}else q.warn("The upload key is not allowed to set the version in the channel")}async function e50(D,Y,X){let{error:Q,data:J}=await Y.from("apps").select("default_upload_channel").eq("app_id",D).single();if(Q)return q.warn("Cannot find default upload channel"),q.info(`You can set it here: ${X}/app/${D}/info`),null;return J.default_upload_channel}async function o4(D,Y,X=!1){if(!X)F0(`Uploading with CLI version ${f8.version}`);let Q,J=W8();await f0();let{s3Region:W,s3Apikey:$,s3Apisecret:G,s3BucketName:B,s3Endpoint:H,s3Port:F,s3SSL:K}=Y;if(Y.verbose)q.info("[Verbose] Starting upload process with options:"),q.info(` - API key: ${Y.apikey?"provided":"from saved key"}`),q.info(` - Path: ${Y.path||"from capacitor config"}`),q.info(` - Channel: ${Y.channel||"from default upload channel"}`),q.info(` - Bundle: ${Y.bundle||"auto-detected"}`),q.info(` - External: ${Y.external||"false"}`),q.info(` - Encryption: ${Y.keyV2||Y.keyDataV2?"v2":Y.key===!1?"disabled":"auto"}`),q.info(` - Upload method: ${Y.tus?"TUS":Y.zip?"ZIP":"auto"}`),q.info(` - Delta updates: ${Y.delta||Y.partial?"enabled":"disabled"}`);let U=d50(Y);if(Y.verbose)q.info("[Verbose] API key retrieved successfully");let z=await U0();if(Y.verbose)q.info("[Verbose] Capacitor config loaded successfully");let V=await lT();if(Y.verbose)q.info("[Verbose] Remote file config retrieved:"),q.info(` - Max upload length: ${Math.floor(V.maxUploadLength/1024/1024)} MB`),q.info(` - Alert upload size: ${Math.floor(V.alertUploadSize/1024/1024)} MB`),q.info(` - TUS upload: ${V.TUSUpload?"enabled":"disabled"}`),q.info(` - TUS upload forced: ${V.TUSUploadForced?"yes":"no"}`),q.info(` - Partial upload: ${V.partialUpload?"enabled":"disabled"}`),q.info(` - Max chunk size: ${Math.floor(V.maxChunkSize/1024/1024)} MB`);let{appid:w,path:L}=p50(D,Y,z.config);if(Y.verbose)q.info(`[Verbose] App ID: ${w}, Build path: ${L}`);let O=await l50(z.config,Y);if(Y.verbose)q.info(`[Verbose] Bundle version: ${O}`);let Z=Y.external?"external":"r2-direct",M="none";if(Y.autoSetBundle){if(await p7({version:O}),Y.verbose)q.info("[Verbose] Auto-set bundle version in capacitor.config.json")}if(n50(Y,L),Y.verbose)q.info("[Verbose] Code check passed (notifyAppReady found and index.html present)");q.info(`Upload ${w}@${O} started from path "${L}" to Capgo cloud`);let E=await c8();if(Y.verbose)q.info(`[Verbose] Local config loaded: host=${E.hostWeb}`);if(Y.supaHost&&Y.supaAnon){if(q.info("Using custom supabase instance from provided options"),E.supaHost=Y.supaHost,E.supaKey=Y.supaAnon,Y.verbose)q.info(`[Verbose] Custom Supabase host: ${Y.supaHost}`)}let j=await w0(U,Y.supaHost,Y.supaAnon);if(Y.verbose)q.info("[Verbose] Supabase client created successfully");await g1(j,w,X);let I=await A0(j,U,["write","all","upload"]);if(Y.verbose)q.info(`[Verbose] User verified successfully, user_id: ${I}`);let _=Y.channel||await e50(w,j,E.hostWeb)||"production";if(Y.verbose)q.info(`[Verbose] Target channel: ${_}`);let y=await v1(j,w);if(Y.verbose)q.info(`[Verbose] Organization ID: ${y}`);if(await iT(j,y,f8.version),Y.verbose)q.info("[Verbose] Remote CLI messages checked");if(await aT(j,y,U,w,!0),Y.verbose)q.info("[Verbose] Plan validation passed");if(Y.verbose)q.info("[Verbose] Trial check completed");if(Y.verbose)q.info(`[Verbose] Checking compatibility with channel ${_}...`);let{nativePackages:C,minUpdateVersion:c}=await i50(j,J,Y,_,w,O);if(Y.verbose)q.info("[Verbose] Compatibility check completed:"),q.info(` - Native packages: ${C?C.length:0}`),q.info(` - Min update version: ${c||"none"}`);if(Y.verbose)q.info(`[Verbose] Checking if version ${O} already exists...`);let S=!X&&!!PI.isTTY&&!!II.isTTY,p=await r50(j,w,O,Y.versionExistsOk,S);if(Y.verbose)q.info(`[Verbose] Version exists check: ${p?typeof p==="string"?`retry with ${p}`:"yes (skipping)":"no (continuing)"}`);if(p===!0)return{success:!0,skipped:!0,reason:"VERSION_EXISTS",bundle:O,checksum:null,encryptionMethod:M,storageProvider:Z};if(typeof p==="string")return q.info(`Retrying upload with new version: ${p}`),o4(D,{...Y,bundle:p},X);if(Y.external&&!Y.external.startsWith("https://"))h0(`External link should should start with "https://" current is "${Y.external}"`);if(Y.deleteLinkedBundleOnUpload)q.warn("Deleting linked bundle on upload is destructive, it will delete the currently linked bundle in the channel you are trying to upload to."),q.warn("Please make sure you want to do this, if you are not sure, please do not use this option.");let u={name:O,app_id:w,session_key:void 0,external_url:Y.external,storage_provider:Z,min_update_version:c,native_packages:C,owner_org:y,user_id:I,checksum:void 0,link:Y.link||null,comment:Y.comment||null,key_id:void 0,cli_version:f8.version},Q0=null,x="";if(!Y.external){if(Y.verbose)q.info(`[Verbose] Preparing bundle file from path: ${L}`);let g=z.config?.plugins?.CapacitorUpdater?.publicKey,{zipped:$0,ivSessionKey:l,checksum:T0,sessionKey:s8,encryptionMethod:Y0,finalKeyData:n0,keyId:t}=await a50(L,Y,U,y,w,V.maxUploadLength,V.alertUploadSize,g);if(u.session_key=l,u.checksum=T0,u.key_id=t||void 0,Q=s8,Q0=$0,M=Y0,x=n0,Y.verbose)q.info("[Verbose] Bundle prepared:"),q.info(` - Size: ${Math.floor(($0?.byteLength??0)/1024)} KB`),q.info(` - Checksum: ${T0}`),q.info(` - Encryption: ${Y0}`),q.info(` - IV Session Key: ${l?"present":"none"}`),q.info(` - Key ID: ${t||"none"}`);if(!Y.ignoreChecksumCheck){if(Y.verbose)q.info("[Verbose] Checking for duplicate checksum...");if(await $S(j,w,_,T0),Y.verbose)q.info("[Verbose] Checksum is unique")}}else{if(Y.verbose)q.info(`[Verbose] Using external URL: ${Y.external}`);if(await Z0(U,{channel:"app",event:"App external",icon:"\uD83D\uDCE4",user_id:y,tags:{"app-id":w},notify:!1},Y.verbose),u.session_key=Y.ivSessionKey,u.checksum=Y.encryptedChecksum,Y.verbose)q.info("[Verbose] External bundle configured:"),q.info(` - URL: ${Y.external}`),q.info(` - IV Session Key: ${Y.ivSessionKey?"provided":"none"}`),q.info(` - Encrypted Checksum: ${Y.encryptedChecksum?"provided":"none"}`)}if(Y.zip){if(Y.tus=!1,Y.verbose)q.info("[Verbose] Upload method: ZIP (explicitly set via --zip)")}else if(!V.TUSUpload||Y.external){if(Y.tus=!1,Y.verbose)q.info("[Verbose] Upload method: Standard (TUS not available or external URL)")}else if(Y.tus=Y.tus||V.TUSUploadForced,Y.verbose)q.info(`[Verbose] Upload method: ${Y.tus?"TUS (resumable)":"Standard"}`);if(!V.partialUpload||Y.external){if(Y.delta=!1,Y.verbose&&Y.external)q.info("[Verbose] Delta updates disabled (not available with external URLs)")}else if(Y.delta=Y.delta||Y.partial||Y.deltaOnly||Y.partialOnly||V.partialUploadForced,Y.verbose)q.info(`[Verbose] Delta updates: ${Y.delta?"enabled":"disabled"}`);if(Y.encryptPartial&&M==="v1")h0("You cannot encrypt the partial update if you are not using the v2 encryption method");let N="5.30.0",A="6.30.0",R="7.30.0",P=!1;if(Y.delta&&M==="v2"&&!Y.encryptPartial){let g=h1(RF()),$0=await d8("@capgo/capacitor-updater",g,Y.packageJson),l;try{l=$0?C0($0):void 0}catch{l=void 0}if($0&&l&&Dw(l,C0("6.14.4"))){if(q.info(`Auto-enabling partial update encryption for updater version ${l} (> 6.14.4)`),Y.verbose)q.info("[Verbose] Partial encryption auto-enabled for updater >= 6.14.4");Y.encryptPartial=!0}}if(Y.delta&&(Y.encryptPartial||M==="v2")){let g=h1(RF()),$0=await d8("@capgo/capacitor-updater",g,Y.packageJson),l;try{l=$0?C0($0):void 0}catch{l=void 0}if($0&&l){if(P=!U6(l,N,A,R),Y.verbose&&P)q.info(`[Verbose] Using hex checksum format for updater version ${l}`)}}if(Y.verbose&&Y.delta)q.info("[Verbose] Preparing delta/partial update manifest...");let v=Y.delta?await TI(L,U,y,w,Y.encryptPartial?M:"none",x,P):[];if(Y.verbose&&Y.delta)q.info(`[Verbose] Delta manifest prepared with ${v.length} files`);if(Y.verbose)q.info("[Verbose] Creating version record in database...");let{error:b}=await j2(j,u);if(b)h0(`Cannot add bundle ${m(b)}`);if(Y.verbose)q.info("[Verbose] Version record created successfully");if(Y.tusChunkSize&&Y.tusChunkSize>V.maxChunkSize)q.error(`Chunk size ${Y.tusChunkSize} is greater than the maximum chunk size ${V.maxChunkSize}, using the maximum chunk size`),Y.tusChunkSize=V.maxChunkSize;else if(!Y.tusChunkSize)Y.tusChunkSize=V.maxChunkSize;if(Y.verbose)q.info(`[Verbose] TUS chunk size: ${Math.floor(Y.tusChunkSize/1024/1024)} MB`);if(Q0&&(B||H||W||$||G||F||K)){if(!B||!H||!W||!$||!G||!F)h0("Missing argument, for S3 upload you need to provide a bucket name, endpoint, region, port, API key, and API secret");if(q.info("Uploading to S3"),Y.verbose)q.info("[Verbose] S3 configuration:"),q.info(` - Endpoint: ${H}`),q.info(` - Region: ${W}`),q.info(` - Bucket: ${B}`),q.info(` - Port: ${F}`),q.info(` - SSL: ${K?"enabled":"disabled"}`);let g=K?`https://${H}`:`http://${H}`,$0=new uJ({endPoint:H,region:W,port:F,pathStyle:!0,bucket:B,accessKey:$,secretKey:G}),l=`${w}-${O}`,T0=encodeURIComponent(l);if(Y.verbose)q.info(`[Verbose] Uploading to S3 as: ${l}`);if(await $0.putObject(l,Uint8Array.from(Q0)),u.external_url=`${g}/${T0}`,u.storage_provider="external",Y.verbose)q.info(`[Verbose] S3 upload complete, external URL: ${u.external_url}`)}else if(Q0){if(!Y.partialOnly&&!Y.deltaOnly){if(Y.verbose)q.info("[Verbose] Starting full bundle upload to Capgo Cloud...");await o50(U,j,w,O,y,Q0,Y,Y.tusChunkSize)}else if(Y.verbose)q.info("[Verbose] Skipping full bundle upload (delta-only mode)");let g=null;try{if(Y.dryUpload){if(Y.delta=!1,Y.verbose)q.info("[Verbose] Dry upload mode: skipping delta upload")}let l=u.session_key&&Y.encryptPartial&&Q?{sessionKey:Q,ivSessionKey:u.session_key}:void 0;if(Y.verbose&&Y.delta)q.info("[Verbose] Starting delta/partial file upload..."),q.info(` - Manifest entries: ${v.length}`),q.info(` - Encryption: ${l?"enabled":"disabled"}`);if(g=Y.delta?await SI(U,v,L,w,y,l,Y):null,Y.verbose&&g)q.info(`[Verbose] Delta upload complete with ${g.length} files`)}catch(l){if(!!(Y.partial||Y.delta||Y.partialOnly||Y.deltaOnly))throw l;if(q.info(`Failed to upload partial files to capgo cloud. Error: ${m(l)}. This is not a critical error, the bundle has been uploaded without the partial files`),Y.verbose)q.info(`[Verbose] Delta upload error details: ${m(l)}`)}if(u.storage_provider="r2",u.manifest=g,Y.verbose)q.info("[Verbose] Updating version record with storage provider and manifest...");let{error:$0}=await j2(j,u);if($0)h0(`Cannot update bundle ${m($0)}`);if(Y.verbose)q.info("[Verbose] Version record updated successfully")}if(Y.verbose)q.info("[Verbose] Checking app permissions...");let r=await L1(j,U,w,2,!1,!0);if(Y.verbose)q.info("[Verbose] Permissions:"),q.info(` - Upload: ${f4(r,2)?"yes":"no"}`),q.info(` - Write: ${f4(r,3)?"yes":"no"}`),q.info(` - Admin: ${f4(r,4)?"yes":"no"}`);if(Y.deleteLinkedBundleOnUpload&&f4(r,3)){if(Y.verbose)q.info(`[Verbose] Deleting linked bundle in channel ${_}...`);await s50(j,w,_)}else if(Y.deleteLinkedBundleOnUpload)q.warn("Cannot delete linked bundle on upload as a upload organization member");if(f4(r,3)){if(Y.verbose)q.info(`[Verbose] Setting bundle ${O} to channel ${_}...`);if(await t50(j,U,!!Y.bundleUrl,O,_,I,y,w,E,Y.selfAssign),Y.verbose)q.info("[Verbose] Channel updated successfully")}else q.warn("Cannot set channel as a upload organization member");if(Y.verbose)q.info("[Verbose] Sending upload event...");await Z0(U,{channel:"app",event:"App Uploaded",icon:"⏫",user_id:y,tags:{"app-id":w},notify:!1},Y.verbose);let k={success:!0,bundle:O,checksum:u.checksum??null,encryptionMethod:M,sessionKey:Q?Q.toString("base64"):void 0,ivSessionKey:typeof u.session_key==="string"?u.session_key:void 0,storageProvider:u.storage_provider};if(Y.verbose)q.info("[Verbose] Upload completed successfully:"),q.info(` - Bundle: ${k.bundle}`),q.info(` - Checksum: ${k.checksum}`),q.info(` - Encryption: ${k.encryptionMethod}`),q.info(` - Storage: ${k.storageProvider}`);if(X&&!k.skipped)e("Time to share your update to the world \uD83C\uDF0D");return k}function D40(D){let Y=D.key===!1,X=D.forceCrc32Checksum===!0,Q=D.keyV2||D.keyDataV2||BY(l8);if(D.ivSessionKey&&!D.external)h0("You need to provide an external url if you want to use the --iv-session-key option");if(D.encryptedChecksum&&!D.external)h0("You need to provide an external url if you want to use the --encrypted-checksum option");if((D.partial||D.delta||D.partialOnly||D.deltaOnly)&&D.external)h0("You cannot use the --partial/--delta/--partial-only/--delta-only option with an external url");if(D.tus&&D.external)h0("You cannot use the --tus option with an external url");if(D.dryUpload&&D.external)h0("You cannot use the --dry-upload option with an external url");if(D.multipart&&D.external)h0("You cannot use the --multipart option with an external url");if(D.external&&(D.keyV2||D.keyDataV2))h0("You cannot set a key if you are uploading to an external url");if(D.keyV2&&D.keyDataV2)h0("You cannot set both key-v2 and key-data-v2");if(D.external&&(D.s3Region||D.s3Apikey||D.s3Apisecret||D.s3Endpoint||D.s3BucketName||D.s3Port||D.s3SSL))h0("You cannot set S3 options if you are uploading to an external url, it's automatically handled");if(D.encryptedChecksum&&!D.external)h0("You cannot set the --encrypted-checksum option if you are not uploading to an external url");if(D.minUpdateVersion&&D.autoMinUpdateVersion)h0("You cannot set both min-update-version and auto-min-update-version, use only one of them");if(X&&Q&&!Y)h0("You cannot use --force-crc32-checksum when encryption is enabled. Remove the flag or disable encryption.")}async function rJ(D,Y){try{D40(Y),await o4(D,Y)}catch(X){let Q=X instanceof Error?X.message:String(X),J=m(X);if(Y.verbose)q.error(`uploadBundle failed:${J}`);else q.error(`uploadBundle failed: ${Q}`);let W=Q.includes("Cannot upload the same bundle content"),$=!!PI.isTTY&&!!II.isTTY;if(!Y.versionExistsOk&&$)try{if(W){let G=await D8({message:"Would you like to retry the upload?",options:[{value:"ignore",label:"Retry with --ignore-checksum-check (force upload same content)"},{value:"cancel",label:"Cancel upload"}]});if(E0(G)||G==="cancel")throw X instanceof Error?X:Error(String(X));if(G==="ignore")return q.info("\uD83D\uDD04 Retrying upload with --ignore-checksum-check..."),rJ(D,{...Y,ignoreChecksumCheck:!0})}else{let G=await R0({message:"Would you like to retry the upload?"});if(E0(G))throw X instanceof Error?X:Error(String(X));if(G)return q.info("\uD83D\uDD04 Retrying upload..."),rJ(D,Y)}}catch{throw X instanceof Error?X:Error(String(X))}throw X instanceof Error?X:Error(String(X))}}import{randomUUID as Y40}from"node:crypto";import{existsSync as X40,writeFileSync as Q40}from"node:fs";import{cwd as J40}from"node:process";var W40=20;function $40(D){console.log(JSON.stringify(D,null,2))}function HY(D){console.error(m(D))}async function jF(D,Y,X=!1){let{json:Q}=Y,{bundle:J,path:W}=Y,$=!Q&&!X;try{if($)await f0();let G=await U0(),B=_0(D,G?.config),H=Y40().split("-")[0],F=x6("",Y.packageJson);if(J=J||F||`0.0.1-beta.${H}`,$)F0(`Zipping ${B}@${J}`);if(J&&!v4.test(J)){let I=`Your bundle name ${J}, is not valid it should follow semver convention : https://semver.org/`;if(!X)if(Q)HY({error:"invalid_semver"});else q.error(I);throw Error("Invalid bundle version format")}if(W=W||G?.config?.webDir,!B||!J||!W){if(!X)if(Q)HY({error:"missing_argument"});else q.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($)q.info(`Started from path "${W}"`);if(typeof Y.codeCheck>"u"?!0:Y.codeCheck){if(!QY(W,"notifyAppReady")){if(!X)if(Q)HY({error:"notifyAppReady_not_in_source_code"});else q.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(!mJ(W)){if(!X)if(Q)HY({error:"index_html_not_found"});else q.error(`index.html is missing in the root folder of ${W}`);throw Error("index.html is missing in root folder")}}let U=await RJ(W);if($)q.info(`Zipped ${U.byteLength} bytes`);let z=$?d0():null;if(z)z.start("Calculating checksum");let V=h1(J40()),w=await d8("@capgo/capacitor-updater",V,Y.packageJson);if(!w){if(!X)q.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,O;try{O=w?C0(w):void 0}catch{O=void 0}if(O)L=!U6(O,void 0,void 0,"7.0.0");else if(w==="link:@capgo/capacitor-updater"){if(!X)q.warn("Using local @capgo/capacitor-updater. Assuming v7");L=!0}let Z=await o9(U,Y.keyV2||X40(l8)||L?"sha256":"crc32");if(z)z.stop(`Checksum ${L?"SHA256":"CRC32"}: ${Z}`);let M=Math.floor(U.byteLength/1024/1024);if(M>W40&&$)q.warn(`WARNING !!
|
|
297
|
+
Bundle uploaded \uD83D\uDCAA in 0 seconds`),$.verbose)q.info("[Verbose] Dry upload mode - skipping actual upload");return}try{let z=await c8();if($.verbose)q.info("[Verbose] Local config retrieved for upload");if($.multipart!==void 0&&$.multipart||$.tus!==void 0&&$.tus){if($.multipart)q.info("Uploading bundle with multipart is deprecated, we upload with TUS instead");else q.info("Uploading bundle with TUS protocol");if($.verbose)q.info("[Verbose] Starting TUS resumable upload..."),q.info(` - Host: ${z.hostWeb}`),q.info(` - Chunk size: ${Math.floor(G/1024/1024)} MB`);if(await YS(D,W,J,X,Q,B,z,G),F=!0,$.verbose)q.info("[Verbose] TUS upload completed, updating database with R2 path...");let V=`orgs/${J}/apps/${X}/${Q}.zip`,{error:w}=await Y.from("app_versions").update({r2_path:V}).eq("name",Q).eq("app_id",X);if(w){if(q.error(`Cannot finish TUS upload ${m(w)}`),$.verbose)q.info(`[Verbose] Database update failed: ${m(w)}`);return Promise.reject(Error("Cannot finish TUS upload"))}if($.verbose)q.info(`[Verbose] Database updated with R2 path: ${V}`)}else{if($.verbose)q.info("[Verbose] Using standard upload (non-TUS), getting presigned URL...");let V=await tT(Y,X,Q);if(!V){if(q.error("Cannot get upload url"),$.verbose)q.info("[Verbose] Failed to retrieve presigned upload URL from database");return Promise.reject(Error("Cannot get upload url"))}if($.verbose)q.info("[Verbose] Presigned URL obtained, uploading via HTTP PUT..."),q.info(` - Timeout: ${$.timeout||N2}ms`),q.info(" - Retry attempts: 5"),q.info(" - Content-Type: application/zip");let w=new AbortController,L=setTimeout(()=>w.abort(),$.timeout||N2);try{let O=await fetch(V,{method:"PUT",body:W,headers:{"Content-Type":"application/zip"},signal:w.signal});if(!O.ok)throw Error(`HTTP error! status: ${O.status}`)}finally{clearTimeout(L)}if($.verbose)q.info("[Verbose] HTTP PUT upload completed successfully")}}catch(z){let w=((performance.now()-H)/1000).toFixed(2);if(B.stop(`Failed to upload bundle ( after ${w} seconds)`),$.verbose)q.info(`[Verbose] Upload failed after ${w} seconds`),q.info(`[Verbose] Error type: ${z instanceof Error?"Error":typeof z}`);if(z instanceof Error&&z.message.includes("HTTP error"))try{let L=z.message.match(/status: (\d+)/),O=L?L[1]:"unknown";q.error(`Upload failed with status ${O}: ${z.message}`)}catch{q.error(`Upload failed: ${z.message}`)}else{if($.verbose)q.info(`[Verbose] Non-HTTP error: ${m(z)}`);if(!$.tus)q.error(`Cannot upload bundle ( try again with --tus option) ${m(z)}`);else q.error(`Cannot upload bundle please contact support if the issue persists ${m(z)}`)}if($.verbose)q.info("[Verbose] Cleaning up failed version from database...");if(await XS(Y,X,Q),$.verbose)q.info("[Verbose] Failed version cleaned up");throw z instanceof Error?z:Error(String(z))}let U=((performance.now()-H)/1000).toFixed(2);if(B.stop(`Bundle uploaded \uD83D\uDCAA in (${U} seconds)`),$.verbose)q.info("[Verbose] Upload successful:"),q.info(` - Upload time: ${U} seconds`),q.info(` - Upload method: ${F?"TUS (resumable)":"Standard HTTP PUT"}`),q.info(` - Bundle size: ${Math.floor(W.byteLength/1024)} KB`),q.info("[Verbose] Sending performance event...");if(await Z0(D,{channel:"performance",event:F?"TUS upload zip performance":"Upload zip performance",icon:"\uD83D\uDE84",user_id:J,tags:{"app-id":X,time:U},notify:!1},$.verbose),$.verbose)q.info("[Verbose] Performance event sent successfully")}async function s50(D,Y,X){let{data:Q,error:J}=await D.from("channels").select("version ( id, name, deleted )").eq("app_id",Y).eq("name",X);if(J){q.error(`Cannot delete linked bundle on upload ${m(J)}`);return}if(Q.length===0){q.warn("No linked bundle found in the channel you are trying to upload to");return}let W=Q[0].version;if(W.deleted){q.warn("The linked bundle is already deleted");return}let{error:$}=await D.from("app_versions").update({deleted:!0}).eq("id",W.id);if($){q.error(`Cannot delete linked bundle on upload ${m($)}`);return}q.info("Linked bundle deleted")}async function t50(D,Y,X,Q,J,W,$,G,B,H){let{data:F}=await D.rpc("get_app_versions",{apikey:Y,name_version:Q,appid:G}).single();if(!F)h0("Cannot get version id, cannot set channel");let{data:K}=await D.rpc("is_allowed_capgkey",{apikey:Y,keymode:["write","all"]}).single();if(K){let{error:U,data:z}=await jJ(D,{name:J,app_id:G,created_by:W,version:F,owner_org:$,...H?{allow_device_self_set:!0}:{}});if(U)h0(`Cannot set channel, the upload key is not allowed to do that, use the "all" for this. ${m(U)}`);let V=`${B.hostWeb}/app/${G}/channel/${z.id}`;if(z?.public)q.info("Your update is now available in your public channel \uD83C\uDF89");else if(z?.id)q.info(`Link device to this bundle to try it: ${V}`);if(X)q.info(`Bundle url: ${V}`)}else q.warn("The upload key is not allowed to set the version in the channel")}async function e50(D,Y,X){let{error:Q,data:J}=await Y.from("apps").select("default_upload_channel").eq("app_id",D).single();if(Q)return q.warn("Cannot find default upload channel"),q.info(`You can set it here: ${X}/app/${D}/info`),null;return J.default_upload_channel}async function o4(D,Y,X=!1){if(!X)F0(`Uploading with CLI version ${f8.version}`);let Q,J=W8();await f0();let{s3Region:W,s3Apikey:$,s3Apisecret:G,s3BucketName:B,s3Endpoint:H,s3Port:F,s3SSL:K}=Y;if(Y.verbose)q.info("[Verbose] Starting upload process with options:"),q.info(` - API key: ${Y.apikey?"provided":"from saved key"}`),q.info(` - Path: ${Y.path||"from capacitor config"}`),q.info(` - Channel: ${Y.channel||"from default upload channel"}`),q.info(` - Bundle: ${Y.bundle||"auto-detected"}`),q.info(` - External: ${Y.external||"false"}`),q.info(` - Encryption: ${Y.keyV2||Y.keyDataV2?"v2":Y.key===!1?"disabled":"auto"}`),q.info(` - Upload method: ${Y.tus?"TUS":Y.zip?"ZIP":"auto"}`),q.info(` - Delta updates: ${Y.delta||Y.partial?"enabled":"disabled"}`);let U=d50(Y);if(Y.verbose)q.info("[Verbose] API key retrieved successfully");let z=await U0();if(Y.verbose)q.info("[Verbose] Capacitor config loaded successfully");let V=await lT();if(Y.verbose)q.info("[Verbose] Remote file config retrieved:"),q.info(` - Max upload length: ${Math.floor(V.maxUploadLength/1024/1024)} MB`),q.info(` - Alert upload size: ${Math.floor(V.alertUploadSize/1024/1024)} MB`),q.info(` - TUS upload: ${V.TUSUpload?"enabled":"disabled"}`),q.info(` - TUS upload forced: ${V.TUSUploadForced?"yes":"no"}`),q.info(` - Partial upload: ${V.partialUpload?"enabled":"disabled"}`),q.info(` - Max chunk size: ${Math.floor(V.maxChunkSize/1024/1024)} MB`);let{appid:w,path:L}=p50(D,Y,z.config);if(Y.verbose)q.info(`[Verbose] App ID: ${w}, Build path: ${L}`);let O=await l50(z.config,Y);if(Y.verbose)q.info(`[Verbose] Bundle version: ${O}`);let Z=Y.external?"external":"r2-direct",M="none";if(Y.autoSetBundle){if(await p7({version:O}),Y.verbose)q.info("[Verbose] Auto-set bundle version in capacitor.config.json")}if(n50(Y,L),Y.verbose)q.info("[Verbose] Code check passed (notifyAppReady found and index.html present)");q.info(`Upload ${w}@${O} started from path "${L}" to Capgo cloud`);let E=await c8();if(Y.verbose)q.info(`[Verbose] Local config loaded: host=${E.hostWeb}`);if(Y.supaHost&&Y.supaAnon){if(q.info("Using custom supabase instance from provided options"),E.supaHost=Y.supaHost,E.supaKey=Y.supaAnon,Y.verbose)q.info(`[Verbose] Custom Supabase host: ${Y.supaHost}`)}let j=await w0(U,Y.supaHost,Y.supaAnon);if(Y.verbose)q.info("[Verbose] Supabase client created successfully");await h1(j,w,X);let I=await A0(j,U,["write","all","upload"]);if(Y.verbose)q.info(`[Verbose] User verified successfully, user_id: ${I}`);let _=Y.channel||await e50(w,j,E.hostWeb)||"production";if(Y.verbose)q.info(`[Verbose] Target channel: ${_}`);let y=await l1(j,w);if(Y.verbose)q.info(`[Verbose] Organization ID: ${y}`);if(await iT(j,y,f8.version),Y.verbose)q.info("[Verbose] Remote CLI messages checked");if(await aT(j,y,U,w,!0),Y.verbose)q.info("[Verbose] Plan validation passed");if(Y.verbose)q.info("[Verbose] Trial check completed");if(Y.verbose)q.info(`[Verbose] Checking compatibility with channel ${_}...`);let{nativePackages:C,minUpdateVersion:c}=await i50(j,J,Y,_,w,O);if(Y.verbose)q.info("[Verbose] Compatibility check completed:"),q.info(` - Native packages: ${C?C.length:0}`),q.info(` - Min update version: ${c||"none"}`);if(Y.verbose)q.info(`[Verbose] Checking if version ${O} already exists...`);let S=!X&&!!PI.isTTY&&!!II.isTTY,p=await r50(j,w,O,Y.versionExistsOk,S);if(Y.verbose)q.info(`[Verbose] Version exists check: ${p?typeof p==="string"?`retry with ${p}`:"yes (skipping)":"no (continuing)"}`);if(p===!0)return{success:!0,skipped:!0,reason:"VERSION_EXISTS",bundle:O,checksum:null,encryptionMethod:M,storageProvider:Z};if(typeof p==="string")return q.info(`Retrying upload with new version: ${p}`),o4(D,{...Y,bundle:p},X);if(Y.external&&!Y.external.startsWith("https://"))h0(`External link should should start with "https://" current is "${Y.external}"`);if(Y.deleteLinkedBundleOnUpload)q.warn("Deleting linked bundle on upload is destructive, it will delete the currently linked bundle in the channel you are trying to upload to."),q.warn("Please make sure you want to do this, if you are not sure, please do not use this option.");let u={name:O,app_id:w,session_key:void 0,external_url:Y.external,storage_provider:Z,min_update_version:c,native_packages:C,owner_org:y,user_id:I,checksum:void 0,link:Y.link||null,comment:Y.comment||null,key_id:void 0,cli_version:f8.version},Q0=null,x="";if(!Y.external){if(Y.verbose)q.info(`[Verbose] Preparing bundle file from path: ${L}`);let g=z.config?.plugins?.CapacitorUpdater?.publicKey,{zipped:$0,ivSessionKey:l,checksum:T0,sessionKey:s8,encryptionMethod:Y0,finalKeyData:n0,keyId:t}=await a50(L,Y,U,y,w,V.maxUploadLength,V.alertUploadSize,g);if(u.session_key=l,u.checksum=T0,u.key_id=t||void 0,Q=s8,Q0=$0,M=Y0,x=n0,Y.verbose)q.info("[Verbose] Bundle prepared:"),q.info(` - Size: ${Math.floor(($0?.byteLength??0)/1024)} KB`),q.info(` - Checksum: ${T0}`),q.info(` - Encryption: ${Y0}`),q.info(` - IV Session Key: ${l?"present":"none"}`),q.info(` - Key ID: ${t||"none"}`);if(!Y.ignoreChecksumCheck){if(Y.verbose)q.info("[Verbose] Checking for duplicate checksum...");if(await $S(j,w,_,T0),Y.verbose)q.info("[Verbose] Checksum is unique")}}else{if(Y.verbose)q.info(`[Verbose] Using external URL: ${Y.external}`);if(await Z0(U,{channel:"app",event:"App external",icon:"\uD83D\uDCE4",user_id:y,tags:{"app-id":w},notify:!1},Y.verbose),u.session_key=Y.ivSessionKey,u.checksum=Y.encryptedChecksum,Y.verbose)q.info("[Verbose] External bundle configured:"),q.info(` - URL: ${Y.external}`),q.info(` - IV Session Key: ${Y.ivSessionKey?"provided":"none"}`),q.info(` - Encrypted Checksum: ${Y.encryptedChecksum?"provided":"none"}`)}if(Y.zip){if(Y.tus=!1,Y.verbose)q.info("[Verbose] Upload method: ZIP (explicitly set via --zip)")}else if(!V.TUSUpload||Y.external){if(Y.tus=!1,Y.verbose)q.info("[Verbose] Upload method: Standard (TUS not available or external URL)")}else if(Y.tus=Y.tus||V.TUSUploadForced,Y.verbose)q.info(`[Verbose] Upload method: ${Y.tus?"TUS (resumable)":"Standard"}`);if(!V.partialUpload||Y.external){if(Y.delta=!1,Y.verbose&&Y.external)q.info("[Verbose] Delta updates disabled (not available with external URLs)")}else if(Y.delta=Y.delta||Y.partial||Y.deltaOnly||Y.partialOnly||V.partialUploadForced,Y.verbose)q.info(`[Verbose] Delta updates: ${Y.delta?"enabled":"disabled"}`);if(Y.encryptPartial&&M==="v1")h0("You cannot encrypt the partial update if you are not using the v2 encryption method");let N="5.30.0",A="6.30.0",R="7.30.0",P=!1;if(Y.delta&&M==="v2"&&!Y.encryptPartial){let g=f1(RF()),$0=await d8("@capgo/capacitor-updater",g,Y.packageJson),l;try{l=$0?C0($0):void 0}catch{l=void 0}if($0&&l&&Dw(l,C0("6.14.4"))){if(q.info(`Auto-enabling partial update encryption for updater version ${l} (> 6.14.4)`),Y.verbose)q.info("[Verbose] Partial encryption auto-enabled for updater >= 6.14.4");Y.encryptPartial=!0}}if(Y.delta&&(Y.encryptPartial||M==="v2")){let g=f1(RF()),$0=await d8("@capgo/capacitor-updater",g,Y.packageJson),l;try{l=$0?C0($0):void 0}catch{l=void 0}if($0&&l){if(P=!U6(l,N,A,R),Y.verbose&&P)q.info(`[Verbose] Using hex checksum format for updater version ${l}`)}}if(Y.verbose&&Y.delta)q.info("[Verbose] Preparing delta/partial update manifest...");let v=Y.delta?await TI(L,U,y,w,Y.encryptPartial?M:"none",x,P):[];if(Y.verbose&&Y.delta)q.info(`[Verbose] Delta manifest prepared with ${v.length} files`);if(Y.verbose)q.info("[Verbose] Creating version record in database...");let{error:b}=await j2(j,u);if(b)h0(`Cannot add bundle ${m(b)}`);if(Y.verbose)q.info("[Verbose] Version record created successfully");if(Y.tusChunkSize&&Y.tusChunkSize>V.maxChunkSize)q.error(`Chunk size ${Y.tusChunkSize} is greater than the maximum chunk size ${V.maxChunkSize}, using the maximum chunk size`),Y.tusChunkSize=V.maxChunkSize;else if(!Y.tusChunkSize)Y.tusChunkSize=V.maxChunkSize;if(Y.verbose)q.info(`[Verbose] TUS chunk size: ${Math.floor(Y.tusChunkSize/1024/1024)} MB`);if(Q0&&(B||H||W||$||G||F||K)){if(!B||!H||!W||!$||!G||!F)h0("Missing argument, for S3 upload you need to provide a bucket name, endpoint, region, port, API key, and API secret");if(q.info("Uploading to S3"),Y.verbose)q.info("[Verbose] S3 configuration:"),q.info(` - Endpoint: ${H}`),q.info(` - Region: ${W}`),q.info(` - Bucket: ${B}`),q.info(` - Port: ${F}`),q.info(` - SSL: ${K?"enabled":"disabled"}`);let g=K?`https://${H}`:`http://${H}`,$0=new uJ({endPoint:H,region:W,port:F,pathStyle:!0,bucket:B,accessKey:$,secretKey:G}),l=`${w}-${O}`,T0=encodeURIComponent(l);if(Y.verbose)q.info(`[Verbose] Uploading to S3 as: ${l}`);if(await $0.putObject(l,Uint8Array.from(Q0)),u.external_url=`${g}/${T0}`,u.storage_provider="external",Y.verbose)q.info(`[Verbose] S3 upload complete, external URL: ${u.external_url}`)}else if(Q0){if(!Y.partialOnly&&!Y.deltaOnly){if(Y.verbose)q.info("[Verbose] Starting full bundle upload to Capgo Cloud...");await o50(U,j,w,O,y,Q0,Y,Y.tusChunkSize)}else if(Y.verbose)q.info("[Verbose] Skipping full bundle upload (delta-only mode)");let g=null;try{if(Y.dryUpload){if(Y.delta=!1,Y.verbose)q.info("[Verbose] Dry upload mode: skipping delta upload")}let l=u.session_key&&Y.encryptPartial&&Q?{sessionKey:Q,ivSessionKey:u.session_key}:void 0;if(Y.verbose&&Y.delta)q.info("[Verbose] Starting delta/partial file upload..."),q.info(` - Manifest entries: ${v.length}`),q.info(` - Encryption: ${l?"enabled":"disabled"}`);if(g=Y.delta?await SI(U,v,L,w,y,l,Y):null,Y.verbose&&g)q.info(`[Verbose] Delta upload complete with ${g.length} files`)}catch(l){if(!!(Y.partial||Y.delta||Y.partialOnly||Y.deltaOnly))throw l;if(q.info(`Failed to upload partial files to capgo cloud. Error: ${m(l)}. This is not a critical error, the bundle has been uploaded without the partial files`),Y.verbose)q.info(`[Verbose] Delta upload error details: ${m(l)}`)}if(u.storage_provider="r2",u.manifest=g,Y.verbose)q.info("[Verbose] Updating version record with storage provider and manifest...");let{error:$0}=await j2(j,u);if($0)h0(`Cannot update bundle ${m($0)}`);if(Y.verbose)q.info("[Verbose] Version record updated successfully")}if(Y.verbose)q.info("[Verbose] Checking app permissions...");let r=await L1(j,U,w,2,!1,!0);if(Y.verbose)q.info("[Verbose] Permissions:"),q.info(` - Upload: ${f4(r,2)?"yes":"no"}`),q.info(` - Write: ${f4(r,3)?"yes":"no"}`),q.info(` - Admin: ${f4(r,4)?"yes":"no"}`);if(Y.deleteLinkedBundleOnUpload&&f4(r,3)){if(Y.verbose)q.info(`[Verbose] Deleting linked bundle in channel ${_}...`);await s50(j,w,_)}else if(Y.deleteLinkedBundleOnUpload)q.warn("Cannot delete linked bundle on upload as a upload organization member");if(f4(r,3)){if(Y.verbose)q.info(`[Verbose] Setting bundle ${O} to channel ${_}...`);if(await t50(j,U,!!Y.bundleUrl,O,_,I,y,w,E,Y.selfAssign),Y.verbose)q.info("[Verbose] Channel updated successfully")}else q.warn("Cannot set channel as a upload organization member");if(Y.verbose)q.info("[Verbose] Sending upload event...");await Z0(U,{channel:"app",event:"App Uploaded",icon:"⏫",user_id:y,tags:{"app-id":w,bundle:O},notify:!1},Y.verbose),await Z0(U,{channel:"app",event:"Bundle Uploaded",icon:"⏫",user_id:y,tags:{"app-id":w,bundle:O},notify:!1,notifyConsole:!0}).catch(()=>{});let k={success:!0,bundle:O,checksum:u.checksum??null,encryptionMethod:M,sessionKey:Q?Q.toString("base64"):void 0,ivSessionKey:typeof u.session_key==="string"?u.session_key:void 0,storageProvider:u.storage_provider};if(Y.verbose)q.info("[Verbose] Upload completed successfully:"),q.info(` - Bundle: ${k.bundle}`),q.info(` - Checksum: ${k.checksum}`),q.info(` - Encryption: ${k.encryptionMethod}`),q.info(` - Storage: ${k.storageProvider}`);if(X&&!k.skipped)e("Time to share your update to the world \uD83C\uDF0D");return k}function D40(D){let Y=D.key===!1,X=D.forceCrc32Checksum===!0,Q=D.keyV2||D.keyDataV2||BY(l8);if(D.ivSessionKey&&!D.external)h0("You need to provide an external url if you want to use the --iv-session-key option");if(D.encryptedChecksum&&!D.external)h0("You need to provide an external url if you want to use the --encrypted-checksum option");if((D.partial||D.delta||D.partialOnly||D.deltaOnly)&&D.external)h0("You cannot use the --partial/--delta/--partial-only/--delta-only option with an external url");if(D.tus&&D.external)h0("You cannot use the --tus option with an external url");if(D.dryUpload&&D.external)h0("You cannot use the --dry-upload option with an external url");if(D.multipart&&D.external)h0("You cannot use the --multipart option with an external url");if(D.external&&(D.keyV2||D.keyDataV2))h0("You cannot set a key if you are uploading to an external url");if(D.keyV2&&D.keyDataV2)h0("You cannot set both key-v2 and key-data-v2");if(D.external&&(D.s3Region||D.s3Apikey||D.s3Apisecret||D.s3Endpoint||D.s3BucketName||D.s3Port||D.s3SSL))h0("You cannot set S3 options if you are uploading to an external url, it's automatically handled");if(D.encryptedChecksum&&!D.external)h0("You cannot set the --encrypted-checksum option if you are not uploading to an external url");if(D.minUpdateVersion&&D.autoMinUpdateVersion)h0("You cannot set both min-update-version and auto-min-update-version, use only one of them");if(X&&Q&&!Y)h0("You cannot use --force-crc32-checksum when encryption is enabled. Remove the flag or disable encryption.")}async function rJ(D,Y){try{D40(Y),await o4(D,Y)}catch(X){let Q=X instanceof Error?X.message:String(X),J=m(X);if(Y.verbose)q.error(`uploadBundle failed:${J}`);else q.error(`uploadBundle failed: ${Q}`);let W=Q.includes("Cannot upload the same bundle content"),$=!!PI.isTTY&&!!II.isTTY;if(!Y.versionExistsOk&&$)try{if(W){let G=await D8({message:"Would you like to retry the upload?",options:[{value:"ignore",label:"Retry with --ignore-checksum-check (force upload same content)"},{value:"cancel",label:"Cancel upload"}]});if(E0(G)||G==="cancel")throw X instanceof Error?X:Error(String(X));if(G==="ignore")return q.info("\uD83D\uDD04 Retrying upload with --ignore-checksum-check..."),rJ(D,{...Y,ignoreChecksumCheck:!0})}else{let G=await R0({message:"Would you like to retry the upload?"});if(E0(G))throw X instanceof Error?X:Error(String(X));if(G)return q.info("\uD83D\uDD04 Retrying upload..."),rJ(D,Y)}}catch{throw X instanceof Error?X:Error(String(X))}throw X instanceof Error?X:Error(String(X))}}import{randomUUID as Y40}from"node:crypto";import{existsSync as X40,writeFileSync as Q40}from"node:fs";import{cwd as J40}from"node:process";var W40=20;function $40(D){console.log(JSON.stringify(D,null,2))}function HY(D){console.error(m(D))}async function jF(D,Y,X=!1){let{json:Q}=Y,{bundle:J,path:W}=Y,$=!Q&&!X;try{if($)await f0();let G=await U0(),B=_0(D,G?.config),H=Y40().split("-")[0],F=x6("",Y.packageJson);if(J=J||F||`0.0.1-beta.${H}`,$)F0(`Zipping ${B}@${J}`);if(J&&!v4.test(J)){let I=`Your bundle name ${J}, is not valid it should follow semver convention : https://semver.org/`;if(!X)if(Q)HY({error:"invalid_semver"});else q.error(I);throw Error("Invalid bundle version format")}if(W=W||G?.config?.webDir,!B||!J||!W){if(!X)if(Q)HY({error:"missing_argument"});else q.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($)q.info(`Started from path "${W}"`);if(typeof Y.codeCheck>"u"?!0:Y.codeCheck){if(!QY(W,"notifyAppReady")){if(!X)if(Q)HY({error:"notifyAppReady_not_in_source_code"});else q.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(!mJ(W)){if(!X)if(Q)HY({error:"index_html_not_found"});else q.error(`index.html is missing in the root folder of ${W}`);throw Error("index.html is missing in root folder")}}let U=await RJ(W);if($)q.info(`Zipped ${U.byteLength} bytes`);let z=$?d0():null;if(z)z.start("Calculating checksum");let V=f1(J40()),w=await d8("@capgo/capacitor-updater",V,Y.packageJson);if(!w){if(!X)q.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,O;try{O=w?C0(w):void 0}catch{O=void 0}if(O)L=!U6(O,void 0,void 0,"7.0.0");else if(w==="link:@capgo/capacitor-updater"){if(!X)q.warn("Using local @capgo/capacitor-updater. Assuming v7");L=!0}let Z=await o9(U,Y.keyV2||X40(l8)||L?"sha256":"crc32");if(z)z.stop(`Checksum ${L?"SHA256":"CRC32"}: ${Z}`);let M=Math.floor(U.byteLength/1024/1024);if(M>W40&&$)q.warn(`WARNING !!
|
|
298
298
|
The bundle size is ${M} Mb, this may take a while to download for users
|
|
299
299
|
`),q.warn(`Learn how to optimize your assets https://capgo.app/blog/optimise-your-images-for-updates/
|
|
300
|
-
`);let E=$?d0():null,j=Y.name||`${B}_${J}.zip`;if(E)E.start(`Saving to ${j}`);if(Q40(j,U),E)E.stop(`Saved to ${j}`);if($)e("Done ✅");if(!X&&Q)$40({bundle:J,filename:j,checksum:Z});return{bundle:J,filename:j,checksum:Z}}catch(G){if(!X)if(Q)HY(G);else q.error(m(G));throw G instanceof Error?G:Error(String(G))}}async function CI(D,Y){await jF(D,Y,!1)}async function FY(D,Y,X,Q=!1){if(!Q)F0("Create channel");X.apikey=X.apikey||X0();let J=await U0().catch(()=>{return});if(Y=_0(Y,J?.config),!X.apikey){if(!Q)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Y){if(!Q)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let W=await w0(X.apikey,X.supaHost,X.supaAnon);if(await
|
|
301
|
-
${m(H.error)}`);throw Error(`Cannot create channel: ${m(H.error)}`)}if(await Z0(X.apikey,{channel:"channel",event:"Create channel",icon:"✅",user_id:G,tags:{"app-id":Y,channel:D},notify:!0}).catch(()=>{}),!Q)q.success("Channel created ✅"),e("Done ✅");return H.data??!0}async function xI(D,Y,X){await FY(D,Y,X,!1)}async function TF(D,Y,X,Q=!1){let{quiet:J}=X;if(!J&&!Q)F0("List current bundle");X.apikey=X.apikey||X0(J);let W=await U0();if(Y=_0(Y,W?.config),!X.apikey){if(!Q)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Y){if(!Q)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let $=await w0(X.apikey,X.supaHost,X.supaAnon);if(await g1($,Y,Q),await A0($,X.apikey,["write","all","read"]),await L1($,X.apikey,Y,1,Q,!0),!D){if(!Q)q.error("Please provide a channel to get the bundle from.");throw Error("Channel name missing")}let{data:G,error:B}=await $.from("channels").select("version ( name )").eq("name",D).eq("app_id",Y).limit(1);if(B||!G?.length){if(!Q)q.error(`Error retrieving channel ${D} for app ${Y}. Perhaps the channel does not exist?`);throw Error(`Channel ${D} not found for app ${Y}`)}let{version:H}=G[0];if(!H){if(!Q)q.error(`Error retrieving channel ${D} for app ${Y}. Perhaps the channel does not exist?`);throw Error(`Channel ${D} does not have a bundle linked`)}if(!Q)if(!J)q.info(`Current bundle for channel ${D} is ${H.name}`);else q.info(H.name);return H.name}async function _I(D,Y,X){return TF(D,Y,X)}async function SF(D,Y,X,Q=!1){if(!Q)F0("Delete channel");X.apikey=X.apikey||X0();let J=await U0();if(Y=_0(Y,J?.config),!X.apikey){if(!Q)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Y){if(!Q)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let W=await w0(X.apikey,X.supaHost,X.supaAnon);await g1(W,Y,Q);let $=await A0(W,X.apikey,["all"]);if(await L1(W,X.apikey,Y,4,Q,!0),X.deleteBundle&&!Q)q.info(`Deleting bundle ${Y}#${D} from Capgo`);if(X.deleteBundle){let U=await gS(W,Y,D);if(U?.name&&!Q)q.info(`Deleting bundle ${U.name} from Capgo`);if(U?.name)await m2(W,Y,U.name)}let{data:G,error:B}=await fS(W,Y,D);if(B||!G){if(!Q)q.error(`Channel ${D} not found`);if(X.successIfNotFound){if(!Q)q.success(`Channel ${D} not found and successIfNotFound is true`);return!0}throw Error(`Channel ${D} not found`)}let{error:H}=await hS(W,Y,G.id);if(H){if(!Q)q.error(`Cannot delete channel devices: ${m(H)}`);throw Error(`Cannot delete channel devices: ${m(H)}`)}if(!Q)q.info(`Deleting channel ${Y}#${D} from Capgo`);let F=await yS(W,D,Y,$);if(F.error){if(!Q)q.error(`Cannot delete Channel \uD83D\uDE40 ${m(F.error)}`);throw Error(`Cannot delete channel: ${m(F.error)}`)}let K=await v1(W,Y);if(await Z0(X.apikey,{channel:"channel",event:"Delete channel",icon:"✅",user_id:K,tags:{"app-id":Y,channel:D},notify:!0}).catch(()=>{}),!Q)q.success("Channel deleted"),e("Done ✅");return!0}async function bI(D,Y,X){return SF(D,Y,X,!1)}async function PF(D,Y,X=!1){if(!X)F0("List channels");Y.apikey=Y.apikey||X0();let Q=await U0();if(D=_0(D,Q?.config),!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let J=await w0(Y.apikey,Y.supaHost,Y.supaAnon);await g1(J,D,X);let W=await A0(J,Y.apikey,["write","all","read","upload"]);if(await L1(J,Y.apikey,D,1,X,!0),!X)q.info("Querying available channels in Capgo");let $=await mS(J,D);if(!X)q.info(`Active channels in Capgo: ${$?.length??0}`),uS($);if(await Z0(Y.apikey,{channel:"channel",event:"List channel",icon:"✅",user_id:W,tags:{"app-id":D},notify:!1}).catch(()=>{}),!X)e("Done ✅");return $}async function kI(D,Y){return PF(D,Y,!1)}function vI(D){let Y=new G1;Y.headers=["Package","Local","Remote","Status","Details"],Y.theme=G1.roundTheme,Y.rows=[];for(let X of D){let{name:Q,localVersion:J,remoteVersion:W}=X,$=W5(X),G=$.compatible?"✅":"❌";Y.rows.push([Q,J||"-",W||"-",G,$.message])}q.info(Y.toString())}var yI=["major","minor","metadata","patch","none"];async function IF(D,Y,X,Q=!1){if(!Q)F0("Set channel");X.apikey=X.apikey||X0();let J=await U0();if(Y=_0(Y,J?.config),!X.apikey){if(!Q)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Y){if(!Q)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(!D){if(!Q)q.error("Missing argument, you need to provide a channel");throw Error("Missing channel id")}let W=await w0(X.apikey,X.supaHost,X.supaAnon);await g1(W,Y,Q);let $=await A0(W,X.apikey,["write","all"]);await L1(W,X.apikey,Y,4,Q,!0);let G=await v1(W,Y),{bundle:B,state:H,downgrade:F,latest:K,latestRemote:U,ios:z,android:V,selfAssign:w,disableAutoUpdate:L,dev:O,emulator:Z,device:M,prod:E}=X;if(K&&B){if(!Q)q.error("Cannot set latest and bundle at the same time");throw Error("Cannot set both latest and bundle simultaneously")}if(U&&B){if(!Q)q.error("Cannot set latest remote and bundle at the same time");throw Error("Cannot set both latest remote and bundle simultaneously")}if(U&&K){if(!Q)q.error("Cannot set latest remote and latest at the same time");throw Error("Cannot set both latest remote and latest simultaneously")}if(B==null&&H==null&&K==null&&U==null&&F==null&&z==null&&V==null&&w==null&&O==null&&Z==null&&M==null&&E==null&&L==null){if(!Q)q.error("Missing argument, you need to provide a option to set");throw Error("No channel option provided")}await rT(W,G,X.apikey,Y);let j={created_by:$,app_id:Y,name:D,owner_org:G,version:void 0},{error:I}=await W.from("channels").select().eq("app_id",Y).eq("name",D).single();if(I){if(!Q)q.error(`Cannot find channel ${D}`);throw Error(`Cannot find channel ${D}`)}let _=K?J?.config?.plugins?.CapacitorUpdater?.version||x6("",X.packageJson):B;if(_!=null){let{data:C,error:c}=await W.from("app_versions").select().eq("app_id",Y).eq("name",_).eq("user_id",$).eq("deleted",!1).single();if(c||!C){if(!Q)q.error(`Cannot find version ${_}`);throw Error(`Cannot find version ${_}`)}if(!X.ignoreMetadataCheck){let{finalCompatibility:S,localDependencies:p}=await P2(W,Y,D,C.native_packages??[]),u=S.filter((Q0)=>!QD(Q0));if(p.length>0&&u.length>0){if(!Q)q.warn(`Bundle NOT compatible with ${D} channel`),q.warn(""),vI(S),q.warn(""),q.warn("An app store update may be required for these changes to take effect.");throw Error(`Bundle is not compatible with ${D} channel`)}if(!Q)if(p.length===0&&S.length>0)q.info(`Ignoring check compatibility with ${D} channel because the bundle does not contain any native packages`);else q.info(`Bundle is compatible with ${D} channel`)}if(!Q)q.info(`Set ${Y} channel: ${D} to @${_}`);j.version=C.id}if(U){let{data:C,error:c}=await W.from("app_versions").select().eq("app_id",Y).eq("user_id",$).eq("deleted",!1).order("created_at",{ascending:!1}).single();if(c||!C){if(!Q)q.error("Cannot find latest remote version");throw Error("Cannot find latest remote version")}if(!X.ignoreMetadataCheck){let{finalCompatibility:S}=await P2(W,Y,D,C.native_packages??[]);if(S.filter((u)=>!QD(u)).length>0){if(!Q)q.warn(`Bundle NOT compatible with ${D} channel`),q.warn(""),vI(S),q.warn(""),q.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(!Q)q.info(`Set ${Y} channel: ${D} to @${C.name}`);j.version=C.id}if(H!=null){if(H!=="normal"&&H!=="default"){if(!Q)q.error(`State ${H} is not known. The possible values are: normal, default.`);throw Error(`Unknown state ${H}. Expected normal or default`)}if(!Q)q.info(`Set ${Y} channel: ${D} to ${H}`);j.public=H==="default"}if(F!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${F?"allow":"disallow"} downgrade`);j.disable_auto_update_under_native=!F}if(z!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${z?"allow":"disallow"} ios update`);j.ios=!!z}if(V!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${V?"allow":"disallow"} android update`);j.android=!!V}if(w!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${w?"allow":"disallow"} self assign to this channel`);j.allow_device_self_set=!!w}if(O!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${O?"allow":"disallow"} dev devices`);j.allow_dev=!!O}if(Z!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${Z?"allow":"disallow"} emulator devices`);j.allow_emulator=!!Z}if(M!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${M?"allow":"disallow"} physical devices`);j.allow_device=!!M}if(E!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${E?"allow":"disallow"} prod builds`);j.allow_prod=!!E}if(L!=null){let C=L.toLowerCase();if(!yI.includes(C)){if(!Q)q.error(`Channel strategy ${C} is not known. The possible values are: ${yI.join(", ")}.`);throw Error(`Unknown channel strategy ${C}`)}if(C==="metadata")C="version_number";if(j.disable_auto_update=C,!Q)q.info(`Set ${Y} channel: ${D} to ${C} disable update strategy to this channel`)}let{error:y}=await jJ(W,j);if(y){if(!Q)q.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 Z0(X.apikey,{channel:"channel",event:"Set channel",icon:"✅",user_id:G,tags:{"app-id":Y},notify:!0}).catch(()=>{}),!Q)e("Done ✅");return!0}async function fI(D,Y,X){return IF(D,Y,X,!1)}import{existsSync as G40,mkdirSync as B40,readFileSync as H40,writeFileSync as CF}from"node:fs";function xF(D){let Y="\uD83D\uDD39";if(D.includes("upload"))Y="⬆️";else if(D.includes("delete"))Y="\uD83D\uDDD1️";else if(D.includes("list"))Y="\uD83D\uDCCB";else if(D.includes("add"))Y="➕";else if(D.includes("set"))Y="⚙️";else if(D.includes("create"))Y="\uD83D\uDD28";else if(D.includes("encrypt"))Y="\uD83D\uDD12";else if(D.includes("decrypt"))Y="\uD83D\uDD13";else if(D.includes("debug"))Y="\uD83D\uDC1E";else if(D.includes("doctor"))Y="\uD83D\uDC68⚕️";else if(D.includes("login"))Y="\uD83D\uDD11";else if(D.includes("init"))Y="\uD83D\uDE80";else if(D.includes("compatibility"))Y="\uD83E\uDDEA";else if(D.includes("cleanup"))Y="\uD83E\uDDF9";else if(D.includes("currentBundle"))Y="\uD83D\uDCE6";else if(D.includes("setting"))Y="⚙️";else if(D==="app")Y="\uD83D\uDCF1";else if(D==="bundle")Y="\uD83D\uDCE6";else if(D==="channel")Y="\uD83D\uDCE2";else if(D==="key")Y="\uD83D\uDD10";else if(D==="account")Y="\uD83D\uDC64";return Y}function hI(D="./README.md",Y){let X=l1.commands.map((J)=>{let W=J,$=W._actionHandler!==null&&W._actionHandler!==void 0,B=J.commands&&J.commands.length>0&&!$;return{name:J.name(),alias:J.alias()||"",description:J.description(),options:J.options.map((H)=>({flags:H.flags,description:H.description||""})),subcommands:J.commands?J.commands.map((H)=>{let F=H,K=F._actionHandler!==null&&F._actionHandler!==void 0;return{name:H.name(),alias:H.alias()||"",description:H.description(),options:H.options.map((U)=>({flags:U.flags,description:U.description||""})),subcommands:[],hasAction:K,isCommandGroup:!1}}):[],hasAction:$,isCommandGroup:B}}),Q=(J,W=!1,$,G=!1)=>{let B=J.name,H=B.charAt(0).toUpperCase()+B.slice(1),F;if(W)F=$?`${$}-${B}`:B;else F=G?"options":B;let K=W?"###":"##",U="",z=xF(B);if(!(G&&!W))U+=`${K} <a id="${F}"></a> ${z} **${H}**
|
|
300
|
+
`);let E=$?d0():null,j=Y.name||`${B}_${J}.zip`;if(E)E.start(`Saving to ${j}`);if(Q40(j,U),E)E.stop(`Saved to ${j}`);if($)e("Done ✅");if(!X&&Q)$40({bundle:J,filename:j,checksum:Z});return{bundle:J,filename:j,checksum:Z}}catch(G){if(!X)if(Q)HY(G);else q.error(m(G));throw G instanceof Error?G:Error(String(G))}}async function CI(D,Y){await jF(D,Y,!1)}async function FY(D,Y,X,Q=!1){if(!Q)F0("Create channel");X.apikey=X.apikey||X0();let J=await U0().catch(()=>{return});if(Y=_0(Y,J?.config),!X.apikey){if(!Q)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Y){if(!Q)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let W=await w0(X.apikey,X.supaHost,X.supaAnon);if(await h1(W,Y,Q),await A0(W,X.apikey,["write","all"]),await L1(W,X.apikey,Y,4,Q,!0),!Q)q.info(`Creating channel ${Y}#${D} to Capgo`);let $=await u2(W,Y);if(!$){if(!Q)q.error("Cannot find default version for channel creation, please contact Capgo support \uD83E\uDD28");throw Error("Cannot find default version for channel creation")}let G=await l1(W,Y),B=await A0(W,X.apikey,["write","all"]),H=await vS(W,{name:D,app_id:Y,version:$.id,created_by:B,owner_org:G,allow_device_self_set:X.selfAssign??!1,public:X.default??!1});if(H.error){if(!Q)q.error(`Cannot create Channel \uD83D\uDE40
|
|
301
|
+
${m(H.error)}`);throw Error(`Cannot create channel: ${m(H.error)}`)}if(await Z0(X.apikey,{channel:"channel",event:"Create channel",icon:"✅",user_id:G,tags:{"app-id":Y,channel:D},notify:!1}).catch(()=>{}),!Q)q.success("Channel created ✅"),e("Done ✅");return H.data??!0}async function xI(D,Y,X){await FY(D,Y,X,!1)}async function TF(D,Y,X,Q=!1){let{quiet:J}=X;if(!J&&!Q)F0("List current bundle");X.apikey=X.apikey||X0(J);let W=await U0();if(Y=_0(Y,W?.config),!X.apikey){if(!Q)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Y){if(!Q)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let $=await w0(X.apikey,X.supaHost,X.supaAnon);if(await h1($,Y,Q),await A0($,X.apikey,["write","all","read"]),await L1($,X.apikey,Y,1,Q,!0),!D){if(!Q)q.error("Please provide a channel to get the bundle from.");throw Error("Channel name missing")}let{data:G,error:B}=await $.from("channels").select("version ( name )").eq("name",D).eq("app_id",Y).limit(1);if(B||!G?.length){if(!Q)q.error(`Error retrieving channel ${D} for app ${Y}. Perhaps the channel does not exist?`);throw Error(`Channel ${D} not found for app ${Y}`)}let{version:H}=G[0];if(!H){if(!Q)q.error(`Error retrieving channel ${D} for app ${Y}. Perhaps the channel does not exist?`);throw Error(`Channel ${D} does not have a bundle linked`)}if(!Q)if(!J)q.info(`Current bundle for channel ${D} is ${H.name}`);else q.info(H.name);return H.name}async function _I(D,Y,X){return TF(D,Y,X)}async function SF(D,Y,X,Q=!1){if(!Q)F0("Delete channel");X.apikey=X.apikey||X0();let J=await U0();if(Y=_0(Y,J?.config),!X.apikey){if(!Q)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Y){if(!Q)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let W=await w0(X.apikey,X.supaHost,X.supaAnon);await h1(W,Y,Q);let $=await A0(W,X.apikey,["all"]);if(await L1(W,X.apikey,Y,4,Q,!0),X.deleteBundle&&!Q)q.info(`Deleting bundle ${Y}#${D} from Capgo`);if(X.deleteBundle){let U=await gS(W,Y,D);if(U?.name&&!Q)q.info(`Deleting bundle ${U.name} from Capgo`);if(U?.name)await m2(W,Y,U.name)}let{data:G,error:B}=await fS(W,Y,D);if(B||!G){if(!Q)q.error(`Channel ${D} not found`);if(X.successIfNotFound){if(!Q)q.success(`Channel ${D} not found and successIfNotFound is true`);return!0}throw Error(`Channel ${D} not found`)}let{error:H}=await hS(W,Y,G.id);if(H){if(!Q)q.error(`Cannot delete channel devices: ${m(H)}`);throw Error(`Cannot delete channel devices: ${m(H)}`)}if(!Q)q.info(`Deleting channel ${Y}#${D} from Capgo`);let F=await yS(W,D,Y,$);if(F.error){if(!Q)q.error(`Cannot delete Channel \uD83D\uDE40 ${m(F.error)}`);throw Error(`Cannot delete channel: ${m(F.error)}`)}let K=await l1(W,Y);if(await Z0(X.apikey,{channel:"channel",event:"Delete channel",icon:"✅",user_id:K,tags:{"app-id":Y,channel:D},notify:!1}).catch(()=>{}),!Q)q.success("Channel deleted"),e("Done ✅");return!0}async function bI(D,Y,X){return SF(D,Y,X,!1)}async function PF(D,Y,X=!1){if(!X)F0("List channels");Y.apikey=Y.apikey||X0();let Q=await U0();if(D=_0(D,Q?.config),!Y.apikey){if(!X)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}let J=await w0(Y.apikey,Y.supaHost,Y.supaAnon);await h1(J,D,X);let W=await A0(J,Y.apikey,["write","all","read","upload"]);if(await L1(J,Y.apikey,D,1,X,!0),!X)q.info("Querying available channels in Capgo");let $=await mS(J,D);if(!X)q.info(`Active channels in Capgo: ${$?.length??0}`),uS($);if(await Z0(Y.apikey,{channel:"channel",event:"List channel",icon:"✅",user_id:W,tags:{"app-id":D},notify:!1}).catch(()=>{}),!X)e("Done ✅");return $}async function kI(D,Y){return PF(D,Y,!1)}function vI(D){let Y=new G1;Y.headers=["Package","Local","Remote","Status","Details"],Y.theme=G1.roundTheme,Y.rows=[];for(let X of D){let{name:Q,localVersion:J,remoteVersion:W}=X,$=W5(X),G=$.compatible?"✅":"❌";Y.rows.push([Q,J||"-",W||"-",G,$.message])}q.info(Y.toString())}var yI=["major","minor","metadata","patch","none"];async function IF(D,Y,X,Q=!1){if(!Q)F0("Set channel");X.apikey=X.apikey||X0();let J=await U0();if(Y=_0(Y,J?.config),!X.apikey){if(!Q)q.error("Missing API key, you need to provide an API key to upload your bundle");throw Error("Missing API key")}if(!Y){if(!Q)q.error("Missing argument, you need to provide a appId, or be in a capacitor project");throw Error("Missing appId")}if(!D){if(!Q)q.error("Missing argument, you need to provide a channel");throw Error("Missing channel id")}let W=await w0(X.apikey,X.supaHost,X.supaAnon);await h1(W,Y,Q);let $=await A0(W,X.apikey,["write","all"]);await L1(W,X.apikey,Y,4,Q,!0);let G=await l1(W,Y),{bundle:B,state:H,downgrade:F,latest:K,latestRemote:U,ios:z,android:V,selfAssign:w,disableAutoUpdate:L,dev:O,emulator:Z,device:M,prod:E}=X;if(K&&B){if(!Q)q.error("Cannot set latest and bundle at the same time");throw Error("Cannot set both latest and bundle simultaneously")}if(U&&B){if(!Q)q.error("Cannot set latest remote and bundle at the same time");throw Error("Cannot set both latest remote and bundle simultaneously")}if(U&&K){if(!Q)q.error("Cannot set latest remote and latest at the same time");throw Error("Cannot set both latest remote and latest simultaneously")}if(B==null&&H==null&&K==null&&U==null&&F==null&&z==null&&V==null&&w==null&&O==null&&Z==null&&M==null&&E==null&&L==null){if(!Q)q.error("Missing argument, you need to provide a option to set");throw Error("No channel option provided")}await rT(W,G,X.apikey,Y);let j={created_by:$,app_id:Y,name:D,owner_org:G,version:void 0},{error:I}=await W.from("channels").select().eq("app_id",Y).eq("name",D).single();if(I){if(!Q)q.error(`Cannot find channel ${D}`);throw Error(`Cannot find channel ${D}`)}let _=K?J?.config?.plugins?.CapacitorUpdater?.version||x6("",X.packageJson):B;if(_!=null){let{data:C,error:c}=await W.from("app_versions").select().eq("app_id",Y).eq("name",_).eq("user_id",$).eq("deleted",!1).single();if(c||!C){if(!Q)q.error(`Cannot find version ${_}`);throw Error(`Cannot find version ${_}`)}if(!X.ignoreMetadataCheck){let{finalCompatibility:S,localDependencies:p}=await P2(W,Y,D,C.native_packages??[]),u=S.filter((Q0)=>!QD(Q0));if(p.length>0&&u.length>0){if(!Q)q.warn(`Bundle NOT compatible with ${D} channel`),q.warn(""),vI(S),q.warn(""),q.warn("An app store update may be required for these changes to take effect.");throw Error(`Bundle is not compatible with ${D} channel`)}if(!Q)if(p.length===0&&S.length>0)q.info(`Ignoring check compatibility with ${D} channel because the bundle does not contain any native packages`);else q.info(`Bundle is compatible with ${D} channel`)}if(!Q)q.info(`Set ${Y} channel: ${D} to @${_}`);j.version=C.id}if(U){let{data:C,error:c}=await W.from("app_versions").select().eq("app_id",Y).eq("user_id",$).eq("deleted",!1).order("created_at",{ascending:!1}).single();if(c||!C){if(!Q)q.error("Cannot find latest remote version");throw Error("Cannot find latest remote version")}if(!X.ignoreMetadataCheck){let{finalCompatibility:S}=await P2(W,Y,D,C.native_packages??[]);if(S.filter((u)=>!QD(u)).length>0){if(!Q)q.warn(`Bundle NOT compatible with ${D} channel`),q.warn(""),vI(S),q.warn(""),q.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(!Q)q.info(`Set ${Y} channel: ${D} to @${C.name}`);j.version=C.id}if(H!=null){if(H!=="normal"&&H!=="default"){if(!Q)q.error(`State ${H} is not known. The possible values are: normal, default.`);throw Error(`Unknown state ${H}. Expected normal or default`)}if(!Q)q.info(`Set ${Y} channel: ${D} to ${H}`);j.public=H==="default"}if(F!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${F?"allow":"disallow"} downgrade`);j.disable_auto_update_under_native=!F}if(z!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${z?"allow":"disallow"} ios update`);j.ios=!!z}if(V!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${V?"allow":"disallow"} android update`);j.android=!!V}if(w!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${w?"allow":"disallow"} self assign to this channel`);j.allow_device_self_set=!!w}if(O!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${O?"allow":"disallow"} dev devices`);j.allow_dev=!!O}if(Z!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${Z?"allow":"disallow"} emulator devices`);j.allow_emulator=!!Z}if(M!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${M?"allow":"disallow"} physical devices`);j.allow_device=!!M}if(E!=null){if(!Q)q.info(`Set ${Y} channel: ${D} to ${E?"allow":"disallow"} prod builds`);j.allow_prod=!!E}if(L!=null){let C=L.toLowerCase();if(!yI.includes(C)){if(!Q)q.error(`Channel strategy ${C} is not known. The possible values are: ${yI.join(", ")}.`);throw Error(`Unknown channel strategy ${C}`)}if(C==="metadata")C="version_number";if(j.disable_auto_update=C,!Q)q.info(`Set ${Y} channel: ${D} to ${C} disable update strategy to this channel`)}let{error:y}=await jJ(W,j);if(y){if(!Q)q.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 Z0(X.apikey,{channel:"channel",event:"Set channel",icon:"✅",user_id:G,tags:{"app-id":Y},notify:!1}).catch(()=>{}),!Q)e("Done ✅");return!0}async function fI(D,Y,X){return IF(D,Y,X,!1)}import{existsSync as G40,mkdirSync as B40,readFileSync as H40,writeFileSync as CF}from"node:fs";function xF(D){let Y="\uD83D\uDD39";if(D.includes("upload"))Y="⬆️";else if(D.includes("delete"))Y="\uD83D\uDDD1️";else if(D.includes("list"))Y="\uD83D\uDCCB";else if(D.includes("add"))Y="➕";else if(D.includes("set"))Y="⚙️";else if(D.includes("create"))Y="\uD83D\uDD28";else if(D.includes("encrypt"))Y="\uD83D\uDD12";else if(D.includes("decrypt"))Y="\uD83D\uDD13";else if(D.includes("debug"))Y="\uD83D\uDC1E";else if(D.includes("doctor"))Y="\uD83D\uDC68⚕️";else if(D.includes("login"))Y="\uD83D\uDD11";else if(D.includes("init"))Y="\uD83D\uDE80";else if(D.includes("compatibility"))Y="\uD83E\uDDEA";else if(D.includes("cleanup"))Y="\uD83E\uDDF9";else if(D.includes("currentBundle"))Y="\uD83D\uDCE6";else if(D.includes("setting"))Y="⚙️";else if(D==="app")Y="\uD83D\uDCF1";else if(D==="bundle")Y="\uD83D\uDCE6";else if(D==="channel")Y="\uD83D\uDCE2";else if(D==="key")Y="\uD83D\uDD10";else if(D==="account")Y="\uD83D\uDC64";return Y}function hI(D="./README.md",Y){let X=c1.commands.map((J)=>{let W=J,$=W._actionHandler!==null&&W._actionHandler!==void 0,B=J.commands&&J.commands.length>0&&!$;return{name:J.name(),alias:J.alias()||"",description:J.description(),options:J.options.map((H)=>({flags:H.flags,description:H.description||""})),subcommands:J.commands?J.commands.map((H)=>{let F=H,K=F._actionHandler!==null&&F._actionHandler!==void 0;return{name:H.name(),alias:H.alias()||"",description:H.description(),options:H.options.map((U)=>({flags:U.flags,description:U.description||""})),subcommands:[],hasAction:K,isCommandGroup:!1}}):[],hasAction:$,isCommandGroup:B}}),Q=(J,W=!1,$,G=!1)=>{let B=J.name,H=B.charAt(0).toUpperCase()+B.slice(1),F;if(W)F=$?`${$}-${B}`:B;else F=G?"options":B;let K=W?"###":"##",U="",z=xF(B);if(!(G&&!W))U+=`${K} <a id="${F}"></a> ${z} **${H}**
|
|
302
302
|
|
|
303
303
|
`;if(J.alias)U+=`**Alias:** \`${J.alias}\`
|
|
304
304
|
|
|
@@ -349,26 +349,26 @@ ${K}`;CF(D,U,"utf8"),q.success(`Documentation updated in ${D}`)}else CF(D,J,"utf
|
|
|
349
349
|
`),f40(".gitignore",`.capgo
|
|
350
350
|
`)}else{let $=GC();$C(`${$}/.capgo`,`${D}
|
|
351
351
|
`)}let J=await w0(D,Y.supaHost,Y.supaAnon),W=await A0(J,D,["write","all","upload"]);if(await Z0(D,{channel:"user-login",event:"User CLI login",icon:"✅",user_id:W,notify:!1}).catch(),!X)q.success(`login saved into .capgo file in ${Q?"local":"home"} directory`),e("Done ✅")}async function HC(D,Y){await KY(D,Y,!1)}var uF="import { CapacitorUpdater } from '@capgo/capacitor-updater'",zY="CapacitorUpdater.notifyAppReady()",l40=/import.*from.*/g,UY="production",cF={stdio:"pipe"},KC=["capacitor.config.ts","capacitor.config.js","capacitor.config.json"],LY,GD;function zC(){LY??=FC(tJ.default.tmpdir).map((D)=>{return{name:D,full:`${tJ.default.tmpdir}/${D}`}}).find((D)=>D.name.startsWith("capgocli"))?.full??tJ.default.fileSync({prefix:"capgocli"}).name}function _8(D,Y){try{if(zC(),VY(LY,JSON.stringify(Y?{step_done:D,pathToPackageJson:Y}:{step_done:D,pathToPackageJson:GD})),Y)GD=Y}catch(X){q.error(`Cannot mark step as done in the CLI, error:
|
|
352
|
-
${X}`),q.warn("Onboarding will continue but please report it to the capgo team!")}}async function d40(D,Y){try{zC();let X=eJ(LY,"utf-8");if(!X||X.length===0)return;let{step_done:Q,pathToPackageJson:J}=JSON.parse(X);q.info(`You have already got to the step ${Q}/10 in the previous session`);let W=await R0({message:"Would you like to continue from where you left off?"});if(await
|
|
352
|
+
${X}`),q.warn("Onboarding will continue but please report it to the capgo team!")}}async function d40(D,Y){try{zC();let X=eJ(LY,"utf-8");if(!X||X.length===0)return;let{step_done:Q,pathToPackageJson:J}=JSON.parse(X);q.info(`You have already got to the step ${Q}/10 in the previous session`);let W=await R0({message:"Would you like to continue from where you left off?"});if(await v1(W,D,Y),W){if(J)GD=J;return Q}return}catch(X){q.error(`Cannot read which steps have been completed, error:
|
|
353
353
|
${X}`),q.warn("Onboarding will continue but please report it to the capgo team!");return}}function p40(){if(!LY)return;try{u40(LY)}catch(D){q.error(`Cannot delete the tmp steps file.
|
|
354
|
-
Error: ${D}`)}}async function
|
|
355
|
-
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0()}function n40(D){let Y=D,X=qC.parse(Y).root;while(!0){for(let J of KC){let W=M6(Y,J);if(_6(W))return{dir:Y,file:W}}if(Y===X)break;let Q=c40(Y);if(Q===Y)break;Y=Q}return}async function i40(){let D=wY();if(KC.some((W)=>_6(M6(D,W))))return;let X=n40(D);if(q.warn("Capacitor config not found in the current folder."),X)q.info(`Found a capacitor config at: ${X.file}`),q.info(`You are currently in: ${D}`);else q.info("No capacitor config was found in this folder or any parent directories.");let Q=qC.basename(D);if(Q==="ios"||Q==="android")q.info("It looks like you are inside a platform folder (ios/android)."),q.info("Try running the onboarding from the project root (the folder with capacitor.config.*).");let J=await R0({message:"Are you sure you want to continue? If you do, the auto-configuration will probably not work from here.",initialValue:!1});if(E0(J)||!J)f9("Operation cancelled."),r0(1)}async function L8(D,Y,X,Q){return U8("onboarding-v2",D,Y,`onboarding-step-${X}`,Q)}async function r40(D,Y){q.info("\uD83D\uDCCB Checking development environment prerequisites"),q.info(" For mobile development, you need at least one platform setup");let X=gF==="darwin"&&_6("/Applications/Xcode.app"),Q=sJ.HOME||sJ.USERPROFILE||"~",W=[sJ.ANDROID_HOME,sJ.ANDROID_SDK_ROOT,M6(Q,"Library","Android","sdk"),M6(Q,"Android","Sdk"),M6(Q,"AppData","Local","Android","Sdk")].filter(Boolean).some(($)=>$&&_6($));if(X)q.success("✅ Xcode detected - iOS development ready");else if(gF==="darwin")q.warn("⚠️ Xcode not found");if(W)q.success("✅ Android SDK detected - Android development ready");else q.warn("⚠️ Android SDK not found");if(!X&&!W){q.error("❌ No development environment detected"),q.info(""),q.info("\uD83D\uDCF1 To develop mobile apps with Capacitor, you need:"),q.info(" • For iOS: Xcode (macOS only) - https://developer.apple.com/xcode/"),q.info(" • For Android: Android Studio - https://developer.android.com/studio"),q.info("");let $=await R0({message:"Continue onboarding without a development environment? (You won't be able to build or test)",initialValue:!1});if(await
|
|
356
|
-
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();q.warn("⚠️ Continuing without development environment - you'll need to set it up later")}else if(!X&&gF==="darwin"){let $=await R0({message:"Xcode is not installed. Do you plan to develop for iOS?",initialValue:!1});if(await
|
|
354
|
+
Error: ${D}`)}}async function v1(D,Y,X){if(E0(D))await U8("onboarding-v2",Y,X,"canceled","\uD83E\uDD37"),e(`Bye \uD83D\uDC4B
|
|
355
|
+
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0()}function n40(D){let Y=D,X=qC.parse(Y).root;while(!0){for(let J of KC){let W=M6(Y,J);if(_6(W))return{dir:Y,file:W}}if(Y===X)break;let Q=c40(Y);if(Q===Y)break;Y=Q}return}async function i40(){let D=wY();if(KC.some((W)=>_6(M6(D,W))))return;let X=n40(D);if(q.warn("Capacitor config not found in the current folder."),X)q.info(`Found a capacitor config at: ${X.file}`),q.info(`You are currently in: ${D}`);else q.info("No capacitor config was found in this folder or any parent directories.");let Q=qC.basename(D);if(Q==="ios"||Q==="android")q.info("It looks like you are inside a platform folder (ios/android)."),q.info("Try running the onboarding from the project root (the folder with capacitor.config.*).");let J=await R0({message:"Are you sure you want to continue? If you do, the auto-configuration will probably not work from here.",initialValue:!1});if(E0(J)||!J)f9("Operation cancelled."),r0(1)}async function L8(D,Y,X,Q){return U8("onboarding-v2",D,Y,`onboarding-step-${X}`,Q)}async function r40(D,Y){q.info("\uD83D\uDCCB Checking development environment prerequisites"),q.info(" For mobile development, you need at least one platform setup");let X=gF==="darwin"&&_6("/Applications/Xcode.app"),Q=sJ.HOME||sJ.USERPROFILE||"~",W=[sJ.ANDROID_HOME,sJ.ANDROID_SDK_ROOT,M6(Q,"Library","Android","sdk"),M6(Q,"Android","Sdk"),M6(Q,"AppData","Local","Android","Sdk")].filter(Boolean).some(($)=>$&&_6($));if(X)q.success("✅ Xcode detected - iOS development ready");else if(gF==="darwin")q.warn("⚠️ Xcode not found");if(W)q.success("✅ Android SDK detected - Android development ready");else q.warn("⚠️ Android SDK not found");if(!X&&!W){q.error("❌ No development environment detected"),q.info(""),q.info("\uD83D\uDCF1 To develop mobile apps with Capacitor, you need:"),q.info(" • For iOS: Xcode (macOS only) - https://developer.apple.com/xcode/"),q.info(" • For Android: Android Studio - https://developer.android.com/studio"),q.info("");let $=await R0({message:"Continue onboarding without a development environment? (You won't be able to build or test)",initialValue:!1});if(await v1($,D,Y),!$)q.info("\uD83D\uDCDD Please install a development environment and run the onboarding again"),e(`Bye \uD83D\uDC4B
|
|
356
|
+
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();q.warn("⚠️ Continuing without development environment - you'll need to set it up later")}else if(!X&&gF==="darwin"){let $=await R0({message:"Xcode is not installed. Do you plan to develop for iOS?",initialValue:!1});if(await v1($,D,Y),$){q.info("\uD83D\uDCE5 Please install Xcode from: https://developer.apple.com/xcode/"),q.info("\uD83D\uDCA1 After installing Xcode, you can continue the onboarding");let G=await R0({message:"Have you installed Xcode? (Choose No to continue with Android only)",initialValue:!1});if(await v1(G,D,Y),!G)q.info("\uD83D\uDCF1 Continuing with Android development only")}}else if(!W){let $=await R0({message:"Android SDK is not installed. Do you plan to develop for Android?",initialValue:!1});if(await v1($,D,Y),$){q.info("\uD83D\uDCE5 Please install Android Studio from: https://developer.android.com/studio"),q.info("\uD83D\uDCA1 After installing Android Studio, set up the Android SDK");let G=await R0({message:"Have you installed Android Studio? (Choose No to continue with iOS only)",initialValue:!1});if(await v1(G,D,Y),!G)q.info("\uD83D\uDCF1 Continuing with iOS development only")}}await L8(D,Y,"check-prerequisites","checked")}async function a40(D,Y,X,Q){let J=W8(),W=X,$=0,G=5;while($<G){let B=await R0({message:`Add ${W} in Capgo?`});if(await v1(B,D.gid,Y),!B)return q.info(`If you change your mind, run it for yourself with: "${J.runner} @capgo/cli@latest app add ${W}"`),await L8(D.gid,Y,"add-app",W),W;try{let H=d0();if(H.start(`Running: ${J.runner} @capgo/cli@latest app add ${W}`),!await i7(W,Q,D,!0))H.stop("App already add ✅");else H.stop("App add Done ✅");return q.info("This app is accessible to all members of your organization based on their permissions"),await L8(D.gid,Y,"add-app",W),W}catch(H){if((H instanceof Error?H.message:String(H)).includes("already exist")){$++,q.error(`❌ App ID "${W}" is already taken`);let K=[`${X}2`,`${X}3`,`${X}.new`,`${X}.app`];q.info("\uD83D\uDCA1 Here are some suggestions:"),K.forEach((z,V)=>{q.info(` ${V+1}. ${z}`)});let U=await D8({message:"What would you like to do?",options:[{value:"suggest1",label:`Use ${K[0]}`},{value:"suggest2",label:`Use ${K[1]}`},{value:"suggest3",label:`Use ${K[2]}`},{value:"suggest4",label:`Use ${K[3]}`},{value:"custom",label:"Enter a custom app ID"},{value:"cancel",label:"Cancel onboarding"}]});if(E0(U))await U8("onboarding-v2",D.gid,Y,"canceled","\uD83E\uDD37"),e(`Bye \uD83D\uDC4B
|
|
357
357
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();if(U==="cancel")await U8("onboarding-v2",D.gid,Y,"canceled-appid-conflict","\uD83E\uDD37"),e(`Bye \uD83D\uDC4B
|
|
358
358
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();if(U==="custom"){let z=await h8({message:"Enter your custom app ID (e.g., com.example.myapp):",validate:(V)=>{if(!V)return"App ID is required";if(V.includes("--"))return'App ID cannot contain "--"';if(!/^[a-z0-9]+(?:\.[\w-]+)+$/i.test(V))return"Invalid format. Use reverse domain notation (e.g., com.example.app)"}});if(E0(z))await U8("onboarding-v2",D.gid,Y,"canceled","\uD83E\uDD37"),e(`Bye \uD83D\uDC4B
|
|
359
359
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();W=z}else{let z=Number.parseInt(U.replace("suggest",""))-1;W=K[z]}q.info(`\uD83D\uDD04 Trying with new app ID: ${W}`);continue}throw H}}q.error(`❌ Maximum retry attempts (${G}) reached`),e(`Bye \uD83D\uDC4B
|
|
360
|
-
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0(1)}async function o40(D,Y,X){let Q=W8(),J=await R0({message:`Create default channel ${UY} for ${X} in Capgo?`});if(await
|
|
360
|
+
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0(1)}async function o40(D,Y,X){let Q=W8(),J=await R0({message:`Create default channel ${UY} for ${X} in Capgo?`});if(await v1(J,D,Y),J){let W=d0();if(W.start(`Running: ${Q.runner} @capgo/cli@latest channel add ${UY} ${X} --default`),!await FY(UY,X,{default:!0,apikey:Y},!0))W.stop("Channel already added ✅");else W.stop("Channel add Done ✅")}else q.info(`If you change your mind, run it for yourself with: "${Q.runner} @capgo/cli@latest channel add ${UY} ${X} --default"`);await L8(D,Y,"add-channel",X)}async function s40(D){let Y=M6(f1(wY()),Q6),X=!GD?await z6(void 0,Y):await z6(void 0,GD);if(X.size===0||!X.has("@capacitor/core")){q.warn("No adequate dependencies found");let Q=await R0({message:"Would you like to select the package.json file manually?"});if(E0(Q))f9("Operation cancelled."),r0(1);if(Q){let J=await R0({message:"Would you like to use a tree selector to choose the package.json file?"});if(E0(J))f9("Operation cancelled."),r0(1);if(J){let $=wY(),G=Q6;while(!0){let B=FC($).map((H)=>({value:H,label:H}));if(B.push({value:"..",label:".."}),G=await D8({message:"Select package.json file:",options:B}),E0(G))f9("Operation cancelled."),r0(1);if(!m40(M6($,G)).isDirectory()&&G!==Q6){q.error("Selected a file that is not a package.json file");continue}if($=M6($,G),G===Q6)break}return await _8(D,$),{dependencies:await z6(void 0,$),path:$}}let W=await h8({message:"Enter path to node_modules folder:"});if(E0(W))f9("Operation cancelled."),r0(1);if(!_6(W))q.error(`Path ${W} does not exist`),r0(1);return{dependencies:await z6(void 0,W),path:W}}}return await _8(D,Y),{dependencies:await z6(void 0,Y),path:Y}}var t40="https://capacitorjs.com/docs/updating/5-0",e40="https://capacitorjs.com/docs/updating/6-0",D30="https://capacitorjs.com/docs/updating/7-0",Y30="https://capacitorjs.com/docs/updating/8-0";async function X30(D,Y,X){let Q=W8(),J="1.0.0",W=!1,$=await R0({message:`Automatic Install "@capgo/capacitor-updater" dependency in ${X}?`});if(await v1($,D,Y),$){let G=d0(),B="latest",{dependencies:H,path:F}=await s40(3);if(G.start("Checking if @capgo/capacitor-updater is installed"),!H.has("@capacitor/core"))G.stop("Error"),q.warn("Cannot find @capacitor/core in package.json"),e(`Bye \uD83D\uDC4B
|
|
361
361
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();let K=H.get("@capacitor/core");if(!K)G.stop("Error"),q.warn("Cannot find @capacitor/core in package.json, please run `capgo init` in a capacitor project"),e(`Bye \uD83D\uDC4B
|
|
362
362
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();if(K==="latest")G.stop(`@capacitor/core version is ${K}, make sure to use a proper version, using Latest as value is not recommended and will lead to unexpected behavior`),e(`Bye \uD83D\uDC4B
|
|
363
363
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();else if(e8(C0(K),C0("5.0.0")))G.stop("Error"),q.warn(`@capacitor/core version is ${K}, Capgo only supports Capacitor v5 and above, please update to Capacitor v5 minimum: ${t40}`),e(`Bye \uD83D\uDC4B
|
|
364
364
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();else if(e8(C0(K),C0("6.0.0")))q.info(`@capacitor/core version is ${K}, installing compatible capacitor-updater v5`),q.warn(`Consider upgrading to Capacitor v6 or higher to support the latest mobile OS features: ${e40}`),B="^5.0.0";else if(e8(C0(K),C0("7.0.0")))q.info(`@capacitor/core version is ${K}, installing compatible capacitor-updater v6`),q.warn(`Consider upgrading to Capacitor v7 or higher to support the latest mobile OS features: ${D30}`),B="^6.0.0";else if(e8(C0(K),C0("8.0.0")))q.info(`@capacitor/core version is ${K}, installing compatible capacitor-updater v7`),q.warn(`Consider upgrading to Capacitor v8 to support the latest mobile OS features: ${Y30}`),B="^7.0.0";else q.info(`@capacitor/core version is ${K}, installing latest capacitor-updater v8+`),B="^8.0.0";if(Q.pm==="unknown")G.stop("Error"),q.warn("Cannot recognize package manager, please run `capgo init` in a capacitor project with npm, pnpm, bun or yarn"),e(`Bye \uD83D\uDC4B
|
|
365
|
-
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();if(await d8("@capgo/capacitor-updater",F.replace("/package.json",""),F))G.stop("Capgo already installed ✅");else{await mF(`${Q.installCommand} --force @capgo/capacitor-updater@${B}`,{...cF,cwd:F.replace("/package.json","")}),G.stop("Install Done ✅"),J=x6(void 0,F)||"1.0.0";let z=!1;if(B==="latest")z=await R0({message:`Do you want to set instant updates in ${X}? Read more about it here: https://capgo.app/docs/live-updates/update-behavior/#applying-updates-immediately`}),await
|
|
365
|
+
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();if(await d8("@capgo/capacitor-updater",F.replace("/package.json",""),F))G.stop("Capgo already installed ✅");else{await mF(`${Q.installCommand} --force @capgo/capacitor-updater@${B}`,{...cF,cwd:F.replace("/package.json","")}),G.stop("Install Done ✅"),J=x6(void 0,F)||"1.0.0";let z=!1;if(B==="latest")z=await R0({message:`Do you want to set instant updates in ${X}? Read more about it here: https://capgo.app/docs/live-updates/update-behavior/#applying-updates-immediately`}),await v1(z,D,Y);G.start("Updating config file"),W=!!z;let V=z?{directUpdate:"always",autoSplashscreen:!0}:{};if(z)await A2("SplashScreen",{launchAutoHide:!1});await p7({version:J,appId:X,autoUpdate:!0,...V}),G.stop("Config file updated ✅")}}else q.info(`If you change your mind, run it for yourself with: "${Q.installCommand} @capgo/capacitor-updater@latest"`);return await L8(D,Y,"add-updater",X),{pkgVersion:J,delta:W}}async function Q30(D,Y,X){let Q=await R0({message:`Automatic Add "${zY}" code and import in ${X}?`});if(await v1(Q,D,Y),Q){let J=d0();J.start("Adding @capacitor-updater to your main file");let W=await ZJ();if(W==="nuxtjs-js"||W==="nuxtjs-ts"){let $=M6("plugins");if(!_6($))g40($,{recursive:!0});let G;if(W==="nuxtjs-ts")G=M6($,"capacitorUpdater.client.ts");else G=M6($,"capacitorUpdater.client.js");let B=`
|
|
366
366
|
import { CapacitorUpdater } from '@capgo/capacitor-updater'
|
|
367
367
|
|
|
368
368
|
export default defineNuxtPlugin(() => {
|
|
369
369
|
CapacitorUpdater.notifyAppReady()
|
|
370
370
|
})
|
|
371
|
-
`;if(_6(G))if(eJ(G,"utf8").includes("CapacitorUpdater.notifyAppReady()"))J.stop("Code already added to capacitorUpdater.client.ts file inside plugins directory ✅"),q.info("Plugins directory and capacitorUpdater.client.ts file already exist with required code");else VY(G,B,"utf8"),J.stop("Code added to capacitorUpdater.client.ts file inside plugins directory ✅"),q.info("Updated capacitorUpdater.client.ts file with required code");else VY(G,B,"utf8"),J.stop("Code added to capacitorUpdater.client.ts file inside plugins directory ✅"),q.info("Created plugins directory and capacitorUpdater.client.ts file")}else{let $;if(W==="unknown")$=await sT();else{let K=W.endsWith("-ts");$=await oT(W,K)}if(!$||!_6($)){J.stop("Cannot find main file to install Updater plugin");let K=await h8({message:"Provide the correct relative path to your main file (JS or TS):",validate:(U)=>{if(!_6(U))return"File does not exist. Please provide a valid path."}});if(E0(K))f9("Operation cancelled."),r0(1);$=K}let B=eJ($,"utf8").toString(),F=B.match(l40)?.pop();if(!F){J.stop("Cannot auto-inject code"),q.warn(`❌ Cannot find import statements in ${$}`),q.info("\uD83D\uDCA1 You'll need to add the code manually"),q.info("\uD83D\uDCDD Add this to your main file:"),q.info(` ${uF}`),q.info(` ${zY}`),q.info("\uD83D\uDCDA Or follow: https://capgo.app/docs/getting-started/add-an-app/");let K=await R0({message:"Continue without auto-injecting the code? (You'll add it manually)"});if(await
|
|
371
|
+
`;if(_6(G))if(eJ(G,"utf8").includes("CapacitorUpdater.notifyAppReady()"))J.stop("Code already added to capacitorUpdater.client.ts file inside plugins directory ✅"),q.info("Plugins directory and capacitorUpdater.client.ts file already exist with required code");else VY(G,B,"utf8"),J.stop("Code added to capacitorUpdater.client.ts file inside plugins directory ✅"),q.info("Updated capacitorUpdater.client.ts file with required code");else VY(G,B,"utf8"),J.stop("Code added to capacitorUpdater.client.ts file inside plugins directory ✅"),q.info("Created plugins directory and capacitorUpdater.client.ts file")}else{let $;if(W==="unknown")$=await sT();else{let K=W.endsWith("-ts");$=await oT(W,K)}if(!$||!_6($)){J.stop("Cannot find main file to install Updater plugin");let K=await h8({message:"Provide the correct relative path to your main file (JS or TS):",validate:(U)=>{if(!_6(U))return"File does not exist. Please provide a valid path."}});if(E0(K))f9("Operation cancelled."),r0(1);$=K}let B=eJ($,"utf8").toString(),F=B.match(l40)?.pop();if(!F){J.stop("Cannot auto-inject code"),q.warn(`❌ Cannot find import statements in ${$}`),q.info("\uD83D\uDCA1 You'll need to add the code manually"),q.info("\uD83D\uDCDD Add this to your main file:"),q.info(` ${uF}`),q.info(` ${zY}`),q.info("\uD83D\uDCDA Or follow: https://capgo.app/docs/getting-started/add-an-app/");let K=await R0({message:"Continue without auto-injecting the code? (You'll add it manually)"});if(await v1(K,D,Y),!K)e(`Bye \uD83D\uDC4B
|
|
372
372
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();q.info("⏭️ Skipping auto-injection - remember to add the code manually!"),await L8(D,Y,"add-code-manual",X)}else if(B.includes(zY))J.stop(`Code already added to ${$} ✅`);else{let K=B.replace(F,`${F}
|
|
373
373
|
${uF};
|
|
374
374
|
|
|
@@ -378,9 +378,9 @@ ${zY};
|
|
|
378
378
|
${uF};
|
|
379
379
|
|
|
380
380
|
${zY};
|
|
381
|
-
`)}async function J30(D,Y,X){let J=(await z6()).get("@capacitor/core");if(!J)q.warn("Cannot find @capacitor/core in package.json. It is likely that you are using a monorepo. Please NOTE that encryption is not supported in Capacitor V5.");let W=W8();q.info("\uD83D\uDD10 End-to-end encryption"),q.info(" ✅ Use this for: Banking, healthcare, or apps with legal encryption requirements"),q.info(" ⚠️ Note: Makes debugging harder - skip if you don't need it");let $=await R0({message:`Enable end-to-end encryption for ${X} updates?`,initialValue:!1});if(await
|
|
381
|
+
`)}async function J30(D,Y,X){let J=(await z6()).get("@capacitor/core");if(!J)q.warn("Cannot find @capacitor/core in package.json. It is likely that you are using a monorepo. Please NOTE that encryption is not supported in Capacitor V5.");let W=W8();q.info("\uD83D\uDD10 End-to-end encryption"),q.info(" ✅ Use this for: Banking, healthcare, or apps with legal encryption requirements"),q.info(" ⚠️ Note: Makes debugging harder - skip if you don't need it");let $=await R0({message:`Enable end-to-end encryption for ${X} updates?`,initialValue:!1});if(await v1($,D,Y),$){if(J==="latest"){q.error(`@capacitor/core version is ${J}, make sure to use a proper version, using Latest as value is not recommended and will lead to unexpected behavior`);return}if(J&&e8(C0(J),C0("6.0.0"))){q.warn("Encryption is not supported in Capacitor V5.");return}let G=d0();if(G.start(`Running: ${W.runner} @capgo/cli@latest key create`),!await qY({force:!0},!1))G.stop("Error"),q.warn("Cannot create key ❌"),e("Bye \uD83D\uDC4B"),r0(1);else G.stop("key created \uD83D\uDD11");try{await SJ(!0,D,Y),U8("onboarding-v2",D,Y,"Use encryption v2",X)}catch(H){if(H instanceof Error&&H.message==="Capacitor sync cancelled");else throw H}}await L8(D,Y,"add-encryption",X)}async function W30(D,Y,X,Q){let J=W8(),W=await R0({message:`Automatic build ${X} with "${J.pm} run build" ?`});if(await v1(W,D,Y),W){let $=d0();$.start("Checking project type");let G=await ZJ(),B=await R2(G);if($.message(`Running: ${J.pm} run ${B} && ${J.runner} cap sync ${Q}`),!Z2()[B]){$.stop("Missing build script"),q.warn(`❌ Cannot find "${B}" script in package.json`),q.info(`\uD83D\uDCA1 Your package.json needs a "${B}" script to build the app`);let F=await R0({message:"Would you like to skip the build for now and continue? You can build manually later."});if(await v1(F,D,Y),F){q.info(`⏭️ Skipping build step - you can build manually with: ${J.pm} run ${B}`),q.info(`\uD83D\uDCDD After building, run: ${J.runner} cap sync ${Q}`),await L8(D,Y,"build-project-skipped",X);return}e(`Bye \uD83D\uDC4B
|
|
382
382
|
\uD83D\uDCA1 Add a "${B}" script to package.json and run the command again`),r0()}mF(`${J.pm} run ${B} && ${J.runner} cap sync ${Q}`,cF),$.stop("Build & Sync Done ✅")}else q.info(`Build yourself with command: ${J.pm} run build && ${J.runner} cap sync ${Q}`);await L8(D,Y,"build-project",X)}async function $30(D,Y){q.info("\uD83D\uDCF1 Platform selection for onboarding"),q.info(" This is just for testing during onboarding - your app will work on all platforms");let X=await D8({message:"Which platform do you want to test with during this onboarding?",options:[{value:"ios",label:"IOS"},{value:"android",label:"Android"}]});if(E0(X))await U8("onboarding-v2",D,Y,"canceled","\uD83E\uDD37"),e(`Bye \uD83D\uDC4B
|
|
383
|
-
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();let Q=X;return q.info(`\uD83C\uDFAF Testing with: ${Q.toUpperCase()}`),q.info(`\uD83D\uDCA1 Note: Onboarding builds will use ${Q} only`),await L8(D,Y,"select-platform",Q),Q}async function G30(D,Y,X,Q){let J=W8(),W=await R0({message:`Run ${X} on ${Q.toUpperCase()} device now to test the initial version?`});if(await
|
|
383
|
+
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();let Q=X;return q.info(`\uD83C\uDFAF Testing with: ${Q.toUpperCase()}`),q.info(`\uD83D\uDCA1 Note: Onboarding builds will use ${Q} only`),await L8(D,Y,"select-platform",Q),Q}async function G30(D,Y,X,Q){let J=W8(),W=await R0({message:`Run ${X} on ${Q.toUpperCase()} device now to test the initial version?`});if(await v1(W,D,Y),W){let $=d0();$.start(`Running: ${J.runner} cap run ${Q}`),await h40(J.runner,["cap","run",Q],{stdio:"inherit"}),$.stop("App started ✅"),q.info(`\uD83D\uDCF1 Your app should now be running on your ${Q} device with Capgo integrated`),q.info("\uD83D\uDD04 This is your baseline version - we'll create an update next")}else q.info(`If you change your mind, run it for yourself with: ${J.runner} cap run ${Q}`);await L8(D,Y,"run-device",X)}async function B30(D,Y,X,Q,J){q.info("\uD83C\uDFAF Now let's test Capgo by making a visible change and deploying an update!");let W=await D8({message:"How would you like to test the update?",options:[{value:"auto",label:"Auto: Let Capgo CLI make a visible change for you"},{value:"manual",label:"Manual: I'll make changes myself"}]});if(E0(W))await U8("onboarding-v2",D,Y,"canceled","\uD83E\uDD37"),e(`Bye \uD83D\uDC4B
|
|
384
384
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();if(W==="auto"){let K=d0();K.start("Making automatic changes to test Capgo updates");let U=!1,z=["src/index.html","public/index.html","index.html","src/App.vue","src/app/app.component.html","src/app/home/home.page.html","src/main.css","src/style.css","public/style.css"];for(let V of z)if(_6(V)&&!U)try{let w=eJ(V,"utf8"),L=w;if(V.endsWith(".html")){if(w.includes("<body>")&&!w.includes("capgo-test-banner"))L=w.replace("<body>",`<body>
|
|
385
385
|
<div id="capgo-test-banner" style="background: linear-gradient(90deg, #4CAF50, #2196F3); color: white; padding: 15px; text-align: center; font-weight: bold; position: fixed; top: env(safe-area-inset-top, 0); left: env(safe-area-inset-left, 0); right: env(safe-area-inset-right, 0); z-index: 9999; box-shadow: 0 2px 10px rgba(0,0,0,0.1); padding-top: calc(15px + env(safe-area-inset-top, 0));">
|
|
386
386
|
\uD83D\uDE80 Capgo Update Test - This banner shows the update worked!
|
|
@@ -396,11 +396,11 @@ body {
|
|
|
396
396
|
/* capgo-test-background */
|
|
397
397
|
}
|
|
398
398
|
|
|
399
|
-
${w}`}if(L!==w){VY(V,L,"utf8"),K.stop(`✅ Made test changes to ${V}`),q.info("\uD83D\uDCDD Added visible test modification to verify the update works"),U=!0;break}}catch{}if(!U){K.stop("⚠️ Could not automatically modify files"),q.warn("Please make a visible change manually (like editing a text or color)");let V=await R0({message:"Continue after making your changes?"});await
|
|
399
|
+
${w}`}if(L!==w){VY(V,L,"utf8"),K.stop(`✅ Made test changes to ${V}`),q.info("\uD83D\uDCDD Added visible test modification to verify the update works"),U=!0;break}}catch{}if(!U){K.stop("⚠️ Could not automatically modify files"),q.warn("Please make a visible change manually (like editing a text or color)");let V=await R0({message:"Continue after making your changes?"});await v1(V,D,Y)}}else{q.info("✋ Please make a visible change to your app now (example: change a text, color, or add an element)"),q.info("\uD83D\uDCA1 This change will help you see that Capgo updates work correctly");let K=await R0({message:"Have you made your changes and ready to continue?"});await v1(K,D,Y)}let $="1.0.1";try{let K=C0(Q);$=u8(u9(K,"patch"))}catch{$="1.0.1"}let G=await D8({message:"How do you want to handle the version for this update?",options:[{value:"auto",label:`Auto: Bump patch version (${Q} → ${$})`},{value:"manual",label:"Manual: I'll provide the version number"}]});if(E0(G))await U8("onboarding-v2",D,Y,"canceled","\uD83E\uDD37"),e(`Bye \uD83D\uDC4B
|
|
400
400
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();let B=Q;if(G==="auto")try{let K=C0(Q);B=u8(u9(K,"patch")),q.info(`\uD83D\uDD22 Auto-bumped version from ${Q} to ${B}`)}catch{B="1.0.1",q.warn(`Could not parse version ${Q}, using fallback ${B}`)}else{let K=await h8({message:`Current version is ${Q}. Enter new version:`,validate:(U)=>{if(!U.match(/^\d+\.\d+\.\d+/))return"Please enter a valid version (x.y.z)"}});if(E0(K))await U8("onboarding-v2",D,Y,"canceled","\uD83E\uDD37"),e(`Bye \uD83D\uDC4B
|
|
401
|
-
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();B=K}let H=W8(),F=await R0({message:`Build ${X} with changes before uploading? If you need to build yourself please do it now in other terminal, and then select no`});if(await
|
|
401
|
+
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();B=K}let H=W8(),F=await R0({message:`Build ${X} with changes before uploading? If you need to build yourself please do it now in other terminal, and then select no`});if(await v1(F,D,Y),F){let K=d0();K.start("Checking project type");let U=await ZJ(),z=await R2(U);if(K.message(`Running: ${H.pm} run ${z} && ${H.runner} cap sync ${J}`),!Z2()[z]){K.stop("Missing build script"),q.warn(`❌ Cannot find "${z}" script in package.json`),q.info("\uD83D\uDCA1 Build manually in another terminal, then come back and continue");let w=await R0({message:"Have you built the app manually? (If not, we'll skip the build)"});if(await v1(w,D,Y),!w)q.warn("⚠️ Continuing without build - upload may fail if app isn't built"),q.info(`\uD83D\uDCA1 Build with: ${H.pm} run ${z} && ${H.runner} cap sync ${J}`);else q.info("✅ Great! Continuing with your manual build")}else mF(`${H.pm} run ${z} && ${H.runner} cap sync ${J}`,cF),K.stop("✅ Build with changes completed"),q.info("\uD83D\uDCE6 Your modifications have been built and synced")}else q.info(`Build yourself with command: ${H.pm} run build && ${H.runner} cap sync ${J}`);return await L8(D,Y,"add-code-change",X),B}async function H30(D,Y,X,Q,J){let W=W8(),$=await R0({message:`Upload the updated ${X} bundle (v${Q}) to Capgo?`});if(await v1($,D,Y),$){let G=d0(),B;G.start(`Running: ${W.runner} @capgo/cli@latest bundle upload ${J?"--delta-only":""}`);let H=uT(wY());if(GD&&H){if(q.warn("You are most likely using a monorepo, please provide the path to your package.json file AND node_modules path folder when uploading your bundle"),q.warn(`Example: ${W.runner} @capgo/cli@latest bundle upload --package-json ./packages/my-app/package.json --node-modules ./packages/my-app/node_modules ${J?"--delta-only":""}`),B=M6(f1(wY()),"node_modules"),q.warn(`Guessed node modules path at: ${B}`),!_6(B))q.error("Node modules path does not exist, upload skipped"),e(`Bye \uD83D\uDC4B
|
|
402
402
|
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0(1)}if(!(await o4(X,{channel:UY,apikey:Y,packageJson:H?GD:void 0,nodeModules:H?B:void 0,deltaOnly:J,bundle:Q},!1))?.success)G.stop("Error"),q.warn("Upload failed ❌"),e(`Bye \uD83D\uDC4B
|
|
403
|
-
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();else G.stop(`✅ Update v${Q} uploaded successfully!`),q.info("\uD83C\uDF89 Your updated bundle is now available on Capgo")}else q.info(`Upload yourself with command: ${W.runner} @capgo/cli@latest bundle upload`);await L8(D,Y,"upload",X)}async function F30(D,Y,X,Q,J){if(q.info("\uD83E\uDDEA Time to test the Capgo update system!"),q.info("\uD83D\uDCF1 Go to your device where the app is running"),J)q.info("\uD83D\uDD04 IMPORTANT: Background your app (swipe up/press home button) and then reopen it"),q.info("⏱️ The update should be downloaded and applied automatically");else q.info("\uD83D\uDCF1 With standard updates, you will need to:"),q.info(" 1. Background the app (swipe up/press home button) to start download"),q.info(" 2. Wait a few seconds for download to complete"),q.info(" 3. Background and foreground again to see the update");q.info("\uD83D\uDC40 You should see your changes appear in the app!");let W=await R0({message:"Monitor Capgo logs to verify the update worked?"});if(await
|
|
403
|
+
\uD83D\uDCA1 You can resume the onboarding anytime by running the same command again`),r0();else G.stop(`✅ Update v${Q} uploaded successfully!`),q.info("\uD83C\uDF89 Your updated bundle is now available on Capgo")}else q.info(`Upload yourself with command: ${W.runner} @capgo/cli@latest bundle upload`);await L8(D,Y,"upload",X)}async function F30(D,Y,X,Q,J){if(q.info("\uD83E\uDDEA Time to test the Capgo update system!"),q.info("\uD83D\uDCF1 Go to your device where the app is running"),J)q.info("\uD83D\uDD04 IMPORTANT: Background your app (swipe up/press home button) and then reopen it"),q.info("⏱️ The update should be downloaded and applied automatically");else q.info("\uD83D\uDCF1 With standard updates, you will need to:"),q.info(" 1. Background the app (swipe up/press home button) to start download"),q.info(" 2. Wait a few seconds for download to complete"),q.info(" 3. Background and foreground again to see the update");q.info("\uD83D\uDC40 You should see your changes appear in the app!");let W=await R0({message:"Monitor Capgo logs to verify the update worked?"});if(await v1(W,D,Y),W)q.info(`\uD83D\uDCCA Watching logs from ${X}...`),q.info("\uD83D\uDD04 Please background and reopen your app now to trigger the update"),await sB("onboarding-v2",Y,X,Y,D);else q.info(`\uD83D\uDCCA Check logs manually at ${Q}/app/${X}/logs to verify the update`);await L8(D,Y,"test-update",X)}async function UC(D,Y,X){let Q=W8();F0("Capgo onboarding \uD83D\uDEEB"),await i40(),await f0();let J=!X.supaAnon||!X.supaHost?await U0():await p7({statsUrl:`${X.supaHost}/functions/v1/stats`,channelUrl:`${X.supaHost}/functions/v1/channel_self`,updateUrl:`${X.supaHost}/functions/v1/updates`,localApiFiles:`${X.supaHost}/functions/v1`,localS3:!0,localSupa:X.supaHost,localSupaAnon:X.supaAnon}),W=await c8();if(Y=_0(Y,J?.config),X.apikey=D||X0(),Y===void 0){if(Y=await h8({message:"Enter your appId:"}),E0(Y))f9("Operation cancelled."),r0(1)}let $=d0();if(!BC()||D)$.start(`Running: ${Q.runner} @capgo/cli@latest login ***`),await KY(X.apikey,X,!1),$.stop("Login Done ✅");let G=await w0(X.apikey,X.supaHost,X.supaAnon);await A0(G,X.apikey,["upload","all","read","write"]);let B=await h4(G,["admin","super_admin"]),H=B.gid,F=await d40(H,X.apikey)??0,K=x6(void 0,GD)||"1.0.0",U=!1,z=K,V="ios";try{if(F<1)await r40(H,X.apikey),_8(1);if(F<2)Y=await a40(B,X.apikey,Y,X),_8(2);if(F<3)await o40(H,X.apikey,Y),_8(3);if(F<4){let w=await X30(H,X.apikey,Y);K=w.pkgVersion,z=K,U=w.delta,_8(4)}if(F<5)await Q30(H,X.apikey,Y),_8(5);if(F<6)await J30(H,X.apikey,Y),_8(6);if(F<7)V=await $30(H,X.apikey),_8(7);if(F<8)await W30(H,X.apikey,Y,V),_8(8);if(F<9)await G30(H,X.apikey,Y,V),_8(9);if(F<10)z=await B30(H,X.apikey,Y,K,V),_8(10);if(F<11)await H30(H,X.apikey,Y,z,U),_8(11);if(F<12)await F30(H,X.apikey,Y,W.hostWeb,U),_8(12);if(F<13)_8(13);await L8(H,X.apikey,"done",Y),p40()}catch(w){console.error(w),q.error(`Error during onboarding.
|
|
404
404
|
if the error persists please contact support@capgo.app
|
|
405
405
|
Or use manual installation: https://capgo.app/docs/getting-started/add-an-app/`),r0(1)}q.info("Welcome onboard ✈️!"),q.info("Your Capgo update system is setup"),q.info(`Next time use \`${Q.runner} @capgo/cli@latest bundle upload\` to only upload your bundle`),q.info(`If you have any issue try to use the debug command \`${Q.runner} @capgo/cli@latest app debug\``),e("Bye \uD83D\uDC4B"),r0()}var G0={};H9(G0,{void:()=>r30,util:()=>y0,unknown:()=>n30,union:()=>s30,undefined:()=>l30,tuple:()=>D70,transformer:()=>F70,symbol:()=>c30,string:()=>EC,strictObject:()=>o30,setErrorMap:()=>z30,set:()=>Q70,record:()=>Y70,quotelessJson:()=>q30,promise:()=>H70,preprocess:()=>z70,pipeline:()=>U70,ostring:()=>V70,optional:()=>q70,onumber:()=>w70,oboolean:()=>L70,objectUtil:()=>lF,object:()=>nF,number:()=>RC,nullable:()=>K70,null:()=>d30,never:()=>i30,nativeEnum:()=>B70,nan:()=>g30,map:()=>X70,makeIssue:()=>MY,literal:()=>$70,lazy:()=>W70,late:()=>f30,isValid:()=>BD,isDirty:()=>YW,isAsync:()=>Y3,isAborted:()=>DW,intersection:()=>e30,instanceof:()=>h30,getParsedType:()=>X9,getErrorMap:()=>D3,function:()=>J70,enum:()=>G70,effect:()=>F70,discriminatedUnion:()=>t30,defaultErrorMap:()=>j9,datetimeRegex:()=>NC,date:()=>m30,custom:()=>AC,coerce:()=>M70,boolean:()=>jC,bigint:()=>u30,array:()=>a30,any:()=>p30,addIssueToContext:()=>D0,ZodVoid:()=>NY,ZodUnknown:()=>HD,ZodUnion:()=>G3,ZodUndefined:()=>W3,ZodType:()=>b0,ZodTuple:()=>J9,ZodTransformer:()=>y6,ZodSymbol:()=>OY,ZodString:()=>b6,ZodSet:()=>w5,ZodSchema:()=>b0,ZodRecord:()=>ZY,ZodReadonly:()=>U3,ZodPromise:()=>L5,ZodPipeline:()=>RY,ZodParsedType:()=>o,ZodOptional:()=>G6,ZodObject:()=>P1,ZodNumber:()=>FD,ZodNullable:()=>S9,ZodNull:()=>$3,ZodNever:()=>Q9,ZodNativeEnum:()=>q3,ZodNaN:()=>EY,ZodMap:()=>AY,ZodLiteral:()=>F3,ZodLazy:()=>H3,ZodIssueCode:()=>d,ZodIntersection:()=>B3,ZodFunction:()=>Q3,ZodFirstPartyTypeKind:()=>i,ZodError:()=>p8,ZodEnum:()=>KD,ZodEffects:()=>y6,ZodDiscriminatedUnion:()=>XW,ZodDefault:()=>K3,ZodDate:()=>U5,ZodCatch:()=>z3,ZodBranded:()=>QW,ZodBoolean:()=>J3,ZodBigInt:()=>qD,ZodArray:()=>k6,ZodAny:()=>V5,Schema:()=>b0,ParseStatus:()=>G8,OK:()=>M8,NEVER:()=>O70,INVALID:()=>L0,EMPTY_PATH:()=>U30,DIRTY:()=>z5,BRAND:()=>y30});var y0;(function(D){D.assertEqual=(J)=>{};function Y(J){}D.assertIs=Y;function X(J){throw Error()}D.assertNever=X,D.arrayToEnum=(J)=>{let W={};for(let $ of J)W[$]=$;return W},D.getValidEnumValues=(J)=>{let W=D.objectKeys(J).filter((G)=>typeof J[J[G]]!=="number"),$={};for(let G of W)$[G]=J[G];return D.objectValues($)},D.objectValues=(J)=>{return D.objectKeys(J).map(function(W){return J[W]})},D.objectKeys=typeof Object.keys==="function"?(J)=>Object.keys(J):(J)=>{let W=[];for(let $ in J)if(Object.prototype.hasOwnProperty.call(J,$))W.push($);return W},D.find=(J,W)=>{for(let $ of J)if(W($))return $;return},D.isInteger=typeof Number.isInteger==="function"?(J)=>Number.isInteger(J):(J)=>typeof J==="number"&&Number.isFinite(J)&&Math.floor(J)===J;function Q(J,W=" | "){return J.map(($)=>typeof $==="string"?`'${$}'`:$).join(W)}D.joinValues=Q,D.jsonStringifyReplacer=(J,W)=>{if(typeof W==="bigint")return W.toString();return W}})(y0||(y0={}));var lF;(function(D){D.mergeShapes=(Y,X)=>{return{...Y,...X}}})(lF||(lF={}));var o=y0.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),X9=(D)=>{switch(typeof D){case"undefined":return o.undefined;case"string":return o.string;case"number":return Number.isNaN(D)?o.nan:o.number;case"boolean":return o.boolean;case"function":return o.function;case"bigint":return o.bigint;case"symbol":return o.symbol;case"object":if(Array.isArray(D))return o.array;if(D===null)return o.null;if(D.then&&typeof D.then==="function"&&D.catch&&typeof D.catch==="function")return o.promise;if(typeof Map<"u"&&D instanceof Map)return o.map;if(typeof Set<"u"&&D instanceof Set)return o.set;if(typeof Date<"u"&&D instanceof Date)return o.date;return o.object;default:return o.unknown}};var d=y0.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),q30=(D)=>{return JSON.stringify(D,null,2).replace(/"([^"]+)":/g,"$1:")};class p8 extends Error{get errors(){return this.issues}constructor(D){super();this.issues=[],this.addIssue=(X)=>{this.issues=[...this.issues,X]},this.addIssues=(X=[])=>{this.issues=[...this.issues,...X]};let Y=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,Y);else this.__proto__=Y;this.name="ZodError",this.issues=D}format(D){let Y=D||function(J){return J.message},X={_errors:[]},Q=(J)=>{for(let W of J.issues)if(W.code==="invalid_union")W.unionErrors.map(Q);else if(W.code==="invalid_return_type")Q(W.returnTypeError);else if(W.code==="invalid_arguments")Q(W.argumentsError);else if(W.path.length===0)X._errors.push(Y(W));else{let $=X,G=0;while(G<W.path.length){let B=W.path[G];if(G!==W.path.length-1)$[B]=$[B]||{_errors:[]};else $[B]=$[B]||{_errors:[]},$[B]._errors.push(Y(W));$=$[B],G++}}};return Q(this),X}static assert(D){if(!(D instanceof p8))throw Error(`Not a ZodError: ${D}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,y0.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(D=(Y)=>Y.message){let Y={},X=[];for(let Q of this.issues)if(Q.path.length>0){let J=Q.path[0];Y[J]=Y[J]||[],Y[J].push(D(Q))}else X.push(D(Q));return{formErrors:X,fieldErrors:Y}}get formErrors(){return this.flatten()}}p8.create=(D)=>{return new p8(D)};var K30=(D,Y)=>{let X;switch(D.code){case d.invalid_type:if(D.received===o.undefined)X="Required";else X=`Expected ${D.expected}, received ${D.received}`;break;case d.invalid_literal:X=`Invalid literal value, expected ${JSON.stringify(D.expected,y0.jsonStringifyReplacer)}`;break;case d.unrecognized_keys:X=`Unrecognized key(s) in object: ${y0.joinValues(D.keys,", ")}`;break;case d.invalid_union:X="Invalid input";break;case d.invalid_union_discriminator:X=`Invalid discriminator value. Expected ${y0.joinValues(D.options)}`;break;case d.invalid_enum_value:X=`Invalid enum value. Expected ${y0.joinValues(D.options)}, received '${D.received}'`;break;case d.invalid_arguments:X="Invalid function arguments";break;case d.invalid_return_type:X="Invalid function return type";break;case d.invalid_date:X="Invalid date";break;case d.invalid_string:if(typeof D.validation==="object")if("includes"in D.validation){if(X=`Invalid input: must include "${D.validation.includes}"`,typeof D.validation.position==="number")X=`${X} at one or more positions greater than or equal to ${D.validation.position}`}else if("startsWith"in D.validation)X=`Invalid input: must start with "${D.validation.startsWith}"`;else if("endsWith"in D.validation)X=`Invalid input: must end with "${D.validation.endsWith}"`;else y0.assertNever(D.validation);else if(D.validation!=="regex")X=`Invalid ${D.validation}`;else X="Invalid";break;case d.too_small:if(D.type==="array")X=`Array must contain ${D.exact?"exactly":D.inclusive?"at least":"more than"} ${D.minimum} element(s)`;else if(D.type==="string")X=`String must contain ${D.exact?"exactly":D.inclusive?"at least":"over"} ${D.minimum} character(s)`;else if(D.type==="number")X=`Number must be ${D.exact?"exactly equal to ":D.inclusive?"greater than or equal to ":"greater than "}${D.minimum}`;else if(D.type==="bigint")X=`Number must be ${D.exact?"exactly equal to ":D.inclusive?"greater than or equal to ":"greater than "}${D.minimum}`;else if(D.type==="date")X=`Date must be ${D.exact?"exactly equal to ":D.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(D.minimum))}`;else X="Invalid input";break;case d.too_big:if(D.type==="array")X=`Array must contain ${D.exact?"exactly":D.inclusive?"at most":"less than"} ${D.maximum} element(s)`;else if(D.type==="string")X=`String must contain ${D.exact?"exactly":D.inclusive?"at most":"under"} ${D.maximum} character(s)`;else if(D.type==="number")X=`Number must be ${D.exact?"exactly":D.inclusive?"less than or equal to":"less than"} ${D.maximum}`;else if(D.type==="bigint")X=`BigInt must be ${D.exact?"exactly":D.inclusive?"less than or equal to":"less than"} ${D.maximum}`;else if(D.type==="date")X=`Date must be ${D.exact?"exactly":D.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(D.maximum))}`;else X="Invalid input";break;case d.custom:X="Invalid input";break;case d.invalid_intersection_types:X="Intersection results could not be merged";break;case d.not_multiple_of:X=`Number must be a multiple of ${D.multipleOf}`;break;case d.not_finite:X="Number must be finite";break;default:X=Y.defaultError,y0.assertNever(D)}return{message:X}},j9=K30;var VC=j9;function z30(D){VC=D}function D3(){return VC}var MY=(D)=>{let{data:Y,path:X,errorMaps:Q,issueData:J}=D,W=[...X,...J.path||[]],$={...J,path:W};if(J.message!==void 0)return{...J,path:W,message:J.message};let G="",B=Q.filter((H)=>!!H).slice().reverse();for(let H of B)G=H($,{data:Y,defaultError:G}).message;return{...J,path:W,message:G}},U30=[];function D0(D,Y){let X=D3(),Q=MY({issueData:Y,data:D.data,path:D.path,errorMaps:[D.common.contextualErrorMap,D.schemaErrorMap,X,X===j9?void 0:j9].filter((J)=>!!J)});D.common.issues.push(Q)}class G8{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(D,Y){let X=[];for(let Q of Y){if(Q.status==="aborted")return L0;if(Q.status==="dirty")D.dirty();X.push(Q.value)}return{status:D.value,value:X}}static async mergeObjectAsync(D,Y){let X=[];for(let Q of Y){let J=await Q.key,W=await Q.value;X.push({key:J,value:W})}return G8.mergeObjectSync(D,X)}static mergeObjectSync(D,Y){let X={};for(let Q of Y){let{key:J,value:W}=Q;if(J.status==="aborted")return L0;if(W.status==="aborted")return L0;if(J.status==="dirty")D.dirty();if(W.status==="dirty")D.dirty();if(J.value!=="__proto__"&&(typeof W.value<"u"||Q.alwaysSet))X[J.value]=W.value}return{status:D.value,value:X}}}var L0=Object.freeze({status:"aborted"}),z5=(D)=>({status:"dirty",value:D}),M8=(D)=>({status:"valid",value:D}),DW=(D)=>D.status==="aborted",YW=(D)=>D.status==="dirty",BD=(D)=>D.status==="valid",Y3=(D)=>typeof Promise<"u"&&D instanceof Promise;var H0;(function(D){D.errToObj=(Y)=>typeof Y==="string"?{message:Y}:Y||{},D.toString=(Y)=>typeof Y==="string"?Y:Y?.message})(H0||(H0={}));class v6{constructor(D,Y,X,Q){this._cachedPath=[],this.parent=D,this.data=Y,this._path=X,this._key=Q}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}var wC=(D,Y)=>{if(BD(Y))return{success:!0,data:Y.value};else{if(!D.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let X=new p8(D.common.issues);return this._error=X,this._error}}}};function P0(D){if(!D)return{};let{errorMap:Y,invalid_type_error:X,required_error:Q,description:J}=D;if(Y&&(X||Q))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(Y)return{errorMap:Y,description:J};return{errorMap:($,G)=>{let{message:B}=D;if($.code==="invalid_enum_value")return{message:B??G.defaultError};if(typeof G.data>"u")return{message:B??Q??G.defaultError};if($.code!=="invalid_type")return{message:G.defaultError};return{message:B??X??G.defaultError}},description:J}}class b0{get description(){return this._def.description}_getType(D){return X9(D.data)}_getOrReturnCtx(D,Y){return Y||{common:D.parent.common,data:D.data,parsedType:X9(D.data),schemaErrorMap:this._def.errorMap,path:D.path,parent:D.parent}}_processInputParams(D){return{status:new G8,ctx:{common:D.parent.common,data:D.data,parsedType:X9(D.data),schemaErrorMap:this._def.errorMap,path:D.path,parent:D.parent}}}_parseSync(D){let Y=this._parse(D);if(Y3(Y))throw Error("Synchronous parse encountered promise.");return Y}_parseAsync(D){let Y=this._parse(D);return Promise.resolve(Y)}parse(D,Y){let X=this.safeParse(D,Y);if(X.success)return X.data;throw X.error}safeParse(D,Y){let X={common:{issues:[],async:Y?.async??!1,contextualErrorMap:Y?.errorMap},path:Y?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:D,parsedType:X9(D)},Q=this._parseSync({data:D,path:X.path,parent:X});return wC(X,Q)}"~validate"(D){let Y={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:D,parsedType:X9(D)};if(!this["~standard"].async)try{let X=this._parseSync({data:D,path:[],parent:Y});return BD(X)?{value:X.value}:{issues:Y.common.issues}}catch(X){if(X?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;Y.common={issues:[],async:!0}}return this._parseAsync({data:D,path:[],parent:Y}).then((X)=>BD(X)?{value:X.value}:{issues:Y.common.issues})}async parseAsync(D,Y){let X=await this.safeParseAsync(D,Y);if(X.success)return X.data;throw X.error}async safeParseAsync(D,Y){let X={common:{issues:[],contextualErrorMap:Y?.errorMap,async:!0},path:Y?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:D,parsedType:X9(D)},Q=this._parse({data:D,path:X.path,parent:X}),J=await(Y3(Q)?Q:Promise.resolve(Q));return wC(X,J)}refine(D,Y){let X=(Q)=>{if(typeof Y==="string"||typeof Y>"u")return{message:Y};else if(typeof Y==="function")return Y(Q);else return Y};return this._refinement((Q,J)=>{let W=D(Q),$=()=>J.addIssue({code:d.custom,...X(Q)});if(typeof Promise<"u"&&W instanceof Promise)return W.then((G)=>{if(!G)return $(),!1;else return!0});if(!W)return $(),!1;else return!0})}refinement(D,Y){return this._refinement((X,Q)=>{if(!D(X))return Q.addIssue(typeof Y==="function"?Y(X,Q):Y),!1;else return!0})}_refinement(D){return new y6({schema:this,typeName:i.ZodEffects,effect:{type:"refinement",refinement:D}})}superRefine(D){return this._refinement(D)}constructor(D){this.spa=this.safeParseAsync,this._def=D,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(Y)=>this["~validate"](Y)}}optional(){return G6.create(this,this._def)}nullable(){return S9.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return k6.create(this)}promise(){return L5.create(this,this._def)}or(D){return G3.create([this,D],this._def)}and(D){return B3.create(this,D,this._def)}transform(D){return new y6({...P0(this._def),schema:this,typeName:i.ZodEffects,effect:{type:"transform",transform:D}})}default(D){let Y=typeof D==="function"?D:()=>D;return new K3({...P0(this._def),innerType:this,defaultValue:Y,typeName:i.ZodDefault})}brand(){return new QW({typeName:i.ZodBranded,type:this,...P0(this._def)})}catch(D){let Y=typeof D==="function"?D:()=>D;return new z3({...P0(this._def),innerType:this,catchValue:Y,typeName:i.ZodCatch})}describe(D){return new this.constructor({...this._def,description:D})}pipe(D){return RY.create(this,D)}readonly(){return U3.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var V30=/^c[^\s-]{8,}$/i,w30=/^[0-9a-z]+$/,L30=/^[0-9A-HJKMNP-TV-Z]{26}$/i,M30=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,O30=/^[a-z0-9_-]{21}$/i,N30=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Z30=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,A30=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,E30="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",dF,R30=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,j30=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,T30=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,S30=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,P30=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,I30=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,MC="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",C30=new RegExp(`^${MC}$`);function OC(D){let Y="[0-5]\\d";if(D.precision)Y=`${Y}\\.\\d{${D.precision}}`;else if(D.precision==null)Y=`${Y}(\\.\\d+)?`;let X=D.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${Y})${X}`}function x30(D){return new RegExp(`^${OC(D)}$`)}function NC(D){let Y=`${MC}T${OC(D)}`,X=[];if(X.push(D.local?"Z?":"Z"),D.offset)X.push("([+-]\\d{2}:?\\d{2})");return Y=`${Y}(${X.join("|")})`,new RegExp(`^${Y}$`)}function _30(D,Y){if((Y==="v4"||!Y)&&R30.test(D))return!0;if((Y==="v6"||!Y)&&T30.test(D))return!0;return!1}function b30(D,Y){if(!N30.test(D))return!1;try{let[X]=D.split(".");if(!X)return!1;let Q=X.replace(/-/g,"+").replace(/_/g,"/").padEnd(X.length+(4-X.length%4)%4,"="),J=JSON.parse(atob(Q));if(typeof J!=="object"||J===null)return!1;if("typ"in J&&J?.typ!=="JWT")return!1;if(!J.alg)return!1;if(Y&&J.alg!==Y)return!1;return!0}catch{return!1}}function k30(D,Y){if((Y==="v4"||!Y)&&j30.test(D))return!0;if((Y==="v6"||!Y)&&S30.test(D))return!0;return!1}class b6 extends b0{_parse(D){if(this._def.coerce)D.data=String(D.data);if(this._getType(D)!==o.string){let J=this._getOrReturnCtx(D);return D0(J,{code:d.invalid_type,expected:o.string,received:J.parsedType}),L0}let X=new G8,Q=void 0;for(let J of this._def.checks)if(J.kind==="min"){if(D.data.length<J.value)Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.too_small,minimum:J.value,type:"string",inclusive:!0,exact:!1,message:J.message}),X.dirty()}else if(J.kind==="max"){if(D.data.length>J.value)Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.too_big,maximum:J.value,type:"string",inclusive:!0,exact:!1,message:J.message}),X.dirty()}else if(J.kind==="length"){let W=D.data.length>J.value,$=D.data.length<J.value;if(W||$){if(Q=this._getOrReturnCtx(D,Q),W)D0(Q,{code:d.too_big,maximum:J.value,type:"string",inclusive:!0,exact:!0,message:J.message});else if($)D0(Q,{code:d.too_small,minimum:J.value,type:"string",inclusive:!0,exact:!0,message:J.message});X.dirty()}}else if(J.kind==="email"){if(!A30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"email",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="emoji"){if(!dF)dF=new RegExp(E30,"u");if(!dF.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"emoji",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="uuid"){if(!M30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"uuid",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="nanoid"){if(!O30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"nanoid",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="cuid"){if(!V30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"cuid",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="cuid2"){if(!w30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"cuid2",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="ulid"){if(!L30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"ulid",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="url")try{new URL(D.data)}catch{Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"url",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="regex"){if(J.regex.lastIndex=0,!J.regex.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"regex",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="trim")D.data=D.data.trim();else if(J.kind==="includes"){if(!D.data.includes(J.value,J.position))Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.invalid_string,validation:{includes:J.value,position:J.position},message:J.message}),X.dirty()}else if(J.kind==="toLowerCase")D.data=D.data.toLowerCase();else if(J.kind==="toUpperCase")D.data=D.data.toUpperCase();else if(J.kind==="startsWith"){if(!D.data.startsWith(J.value))Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.invalid_string,validation:{startsWith:J.value},message:J.message}),X.dirty()}else if(J.kind==="endsWith"){if(!D.data.endsWith(J.value))Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.invalid_string,validation:{endsWith:J.value},message:J.message}),X.dirty()}else if(J.kind==="datetime"){if(!NC(J).test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.invalid_string,validation:"datetime",message:J.message}),X.dirty()}else if(J.kind==="date"){if(!C30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.invalid_string,validation:"date",message:J.message}),X.dirty()}else if(J.kind==="time"){if(!x30(J).test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.invalid_string,validation:"time",message:J.message}),X.dirty()}else if(J.kind==="duration"){if(!Z30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"duration",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="ip"){if(!_30(D.data,J.version))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"ip",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="jwt"){if(!b30(D.data,J.alg))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"jwt",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="cidr"){if(!k30(D.data,J.version))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"cidr",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="base64"){if(!P30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"base64",code:d.invalid_string,message:J.message}),X.dirty()}else if(J.kind==="base64url"){if(!I30.test(D.data))Q=this._getOrReturnCtx(D,Q),D0(Q,{validation:"base64url",code:d.invalid_string,message:J.message}),X.dirty()}else y0.assertNever(J);return{status:X.value,value:D.data}}_regex(D,Y,X){return this.refinement((Q)=>D.test(Q),{validation:Y,code:d.invalid_string,...H0.errToObj(X)})}_addCheck(D){return new b6({...this._def,checks:[...this._def.checks,D]})}email(D){return this._addCheck({kind:"email",...H0.errToObj(D)})}url(D){return this._addCheck({kind:"url",...H0.errToObj(D)})}emoji(D){return this._addCheck({kind:"emoji",...H0.errToObj(D)})}uuid(D){return this._addCheck({kind:"uuid",...H0.errToObj(D)})}nanoid(D){return this._addCheck({kind:"nanoid",...H0.errToObj(D)})}cuid(D){return this._addCheck({kind:"cuid",...H0.errToObj(D)})}cuid2(D){return this._addCheck({kind:"cuid2",...H0.errToObj(D)})}ulid(D){return this._addCheck({kind:"ulid",...H0.errToObj(D)})}base64(D){return this._addCheck({kind:"base64",...H0.errToObj(D)})}base64url(D){return this._addCheck({kind:"base64url",...H0.errToObj(D)})}jwt(D){return this._addCheck({kind:"jwt",...H0.errToObj(D)})}ip(D){return this._addCheck({kind:"ip",...H0.errToObj(D)})}cidr(D){return this._addCheck({kind:"cidr",...H0.errToObj(D)})}datetime(D){if(typeof D==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:D});return this._addCheck({kind:"datetime",precision:typeof D?.precision>"u"?null:D?.precision,offset:D?.offset??!1,local:D?.local??!1,...H0.errToObj(D?.message)})}date(D){return this._addCheck({kind:"date",message:D})}time(D){if(typeof D==="string")return this._addCheck({kind:"time",precision:null,message:D});return this._addCheck({kind:"time",precision:typeof D?.precision>"u"?null:D?.precision,...H0.errToObj(D?.message)})}duration(D){return this._addCheck({kind:"duration",...H0.errToObj(D)})}regex(D,Y){return this._addCheck({kind:"regex",regex:D,...H0.errToObj(Y)})}includes(D,Y){return this._addCheck({kind:"includes",value:D,position:Y?.position,...H0.errToObj(Y?.message)})}startsWith(D,Y){return this._addCheck({kind:"startsWith",value:D,...H0.errToObj(Y)})}endsWith(D,Y){return this._addCheck({kind:"endsWith",value:D,...H0.errToObj(Y)})}min(D,Y){return this._addCheck({kind:"min",value:D,...H0.errToObj(Y)})}max(D,Y){return this._addCheck({kind:"max",value:D,...H0.errToObj(Y)})}length(D,Y){return this._addCheck({kind:"length",value:D,...H0.errToObj(Y)})}nonempty(D){return this.min(1,H0.errToObj(D))}trim(){return new b6({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new b6({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new b6({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((D)=>D.kind==="datetime")}get isDate(){return!!this._def.checks.find((D)=>D.kind==="date")}get isTime(){return!!this._def.checks.find((D)=>D.kind==="time")}get isDuration(){return!!this._def.checks.find((D)=>D.kind==="duration")}get isEmail(){return!!this._def.checks.find((D)=>D.kind==="email")}get isURL(){return!!this._def.checks.find((D)=>D.kind==="url")}get isEmoji(){return!!this._def.checks.find((D)=>D.kind==="emoji")}get isUUID(){return!!this._def.checks.find((D)=>D.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((D)=>D.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((D)=>D.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((D)=>D.kind==="cuid2")}get isULID(){return!!this._def.checks.find((D)=>D.kind==="ulid")}get isIP(){return!!this._def.checks.find((D)=>D.kind==="ip")}get isCIDR(){return!!this._def.checks.find((D)=>D.kind==="cidr")}get isBase64(){return!!this._def.checks.find((D)=>D.kind==="base64")}get isBase64url(){return!!this._def.checks.find((D)=>D.kind==="base64url")}get minLength(){let D=null;for(let Y of this._def.checks)if(Y.kind==="min"){if(D===null||Y.value>D)D=Y.value}return D}get maxLength(){let D=null;for(let Y of this._def.checks)if(Y.kind==="max"){if(D===null||Y.value<D)D=Y.value}return D}}b6.create=(D)=>{return new b6({checks:[],typeName:i.ZodString,coerce:D?.coerce??!1,...P0(D)})};function v30(D,Y){let X=(D.toString().split(".")[1]||"").length,Q=(Y.toString().split(".")[1]||"").length,J=X>Q?X:Q,W=Number.parseInt(D.toFixed(J).replace(".","")),$=Number.parseInt(Y.toFixed(J).replace(".",""));return W%$/10**J}class FD extends b0{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(D){if(this._def.coerce)D.data=Number(D.data);if(this._getType(D)!==o.number){let J=this._getOrReturnCtx(D);return D0(J,{code:d.invalid_type,expected:o.number,received:J.parsedType}),L0}let X=void 0,Q=new G8;for(let J of this._def.checks)if(J.kind==="int"){if(!y0.isInteger(D.data))X=this._getOrReturnCtx(D,X),D0(X,{code:d.invalid_type,expected:"integer",received:"float",message:J.message}),Q.dirty()}else if(J.kind==="min"){if(J.inclusive?D.data<J.value:D.data<=J.value)X=this._getOrReturnCtx(D,X),D0(X,{code:d.too_small,minimum:J.value,type:"number",inclusive:J.inclusive,exact:!1,message:J.message}),Q.dirty()}else if(J.kind==="max"){if(J.inclusive?D.data>J.value:D.data>=J.value)X=this._getOrReturnCtx(D,X),D0(X,{code:d.too_big,maximum:J.value,type:"number",inclusive:J.inclusive,exact:!1,message:J.message}),Q.dirty()}else if(J.kind==="multipleOf"){if(v30(D.data,J.value)!==0)X=this._getOrReturnCtx(D,X),D0(X,{code:d.not_multiple_of,multipleOf:J.value,message:J.message}),Q.dirty()}else if(J.kind==="finite"){if(!Number.isFinite(D.data))X=this._getOrReturnCtx(D,X),D0(X,{code:d.not_finite,message:J.message}),Q.dirty()}else y0.assertNever(J);return{status:Q.value,value:D.data}}gte(D,Y){return this.setLimit("min",D,!0,H0.toString(Y))}gt(D,Y){return this.setLimit("min",D,!1,H0.toString(Y))}lte(D,Y){return this.setLimit("max",D,!0,H0.toString(Y))}lt(D,Y){return this.setLimit("max",D,!1,H0.toString(Y))}setLimit(D,Y,X,Q){return new FD({...this._def,checks:[...this._def.checks,{kind:D,value:Y,inclusive:X,message:H0.toString(Q)}]})}_addCheck(D){return new FD({...this._def,checks:[...this._def.checks,D]})}int(D){return this._addCheck({kind:"int",message:H0.toString(D)})}positive(D){return this._addCheck({kind:"min",value:0,inclusive:!1,message:H0.toString(D)})}negative(D){return this._addCheck({kind:"max",value:0,inclusive:!1,message:H0.toString(D)})}nonpositive(D){return this._addCheck({kind:"max",value:0,inclusive:!0,message:H0.toString(D)})}nonnegative(D){return this._addCheck({kind:"min",value:0,inclusive:!0,message:H0.toString(D)})}multipleOf(D,Y){return this._addCheck({kind:"multipleOf",value:D,message:H0.toString(Y)})}finite(D){return this._addCheck({kind:"finite",message:H0.toString(D)})}safe(D){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:H0.toString(D)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:H0.toString(D)})}get minValue(){let D=null;for(let Y of this._def.checks)if(Y.kind==="min"){if(D===null||Y.value>D)D=Y.value}return D}get maxValue(){let D=null;for(let Y of this._def.checks)if(Y.kind==="max"){if(D===null||Y.value<D)D=Y.value}return D}get isInt(){return!!this._def.checks.find((D)=>D.kind==="int"||D.kind==="multipleOf"&&y0.isInteger(D.value))}get isFinite(){let D=null,Y=null;for(let X of this._def.checks)if(X.kind==="finite"||X.kind==="int"||X.kind==="multipleOf")return!0;else if(X.kind==="min"){if(Y===null||X.value>Y)Y=X.value}else if(X.kind==="max"){if(D===null||X.value<D)D=X.value}return Number.isFinite(Y)&&Number.isFinite(D)}}FD.create=(D)=>{return new FD({checks:[],typeName:i.ZodNumber,coerce:D?.coerce||!1,...P0(D)})};class qD extends b0{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(D){if(this._def.coerce)try{D.data=BigInt(D.data)}catch{return this._getInvalidInput(D)}if(this._getType(D)!==o.bigint)return this._getInvalidInput(D);let X=void 0,Q=new G8;for(let J of this._def.checks)if(J.kind==="min"){if(J.inclusive?D.data<J.value:D.data<=J.value)X=this._getOrReturnCtx(D,X),D0(X,{code:d.too_small,type:"bigint",minimum:J.value,inclusive:J.inclusive,message:J.message}),Q.dirty()}else if(J.kind==="max"){if(J.inclusive?D.data>J.value:D.data>=J.value)X=this._getOrReturnCtx(D,X),D0(X,{code:d.too_big,type:"bigint",maximum:J.value,inclusive:J.inclusive,message:J.message}),Q.dirty()}else if(J.kind==="multipleOf"){if(D.data%J.value!==BigInt(0))X=this._getOrReturnCtx(D,X),D0(X,{code:d.not_multiple_of,multipleOf:J.value,message:J.message}),Q.dirty()}else y0.assertNever(J);return{status:Q.value,value:D.data}}_getInvalidInput(D){let Y=this._getOrReturnCtx(D);return D0(Y,{code:d.invalid_type,expected:o.bigint,received:Y.parsedType}),L0}gte(D,Y){return this.setLimit("min",D,!0,H0.toString(Y))}gt(D,Y){return this.setLimit("min",D,!1,H0.toString(Y))}lte(D,Y){return this.setLimit("max",D,!0,H0.toString(Y))}lt(D,Y){return this.setLimit("max",D,!1,H0.toString(Y))}setLimit(D,Y,X,Q){return new qD({...this._def,checks:[...this._def.checks,{kind:D,value:Y,inclusive:X,message:H0.toString(Q)}]})}_addCheck(D){return new qD({...this._def,checks:[...this._def.checks,D]})}positive(D){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:H0.toString(D)})}negative(D){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:H0.toString(D)})}nonpositive(D){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:H0.toString(D)})}nonnegative(D){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:H0.toString(D)})}multipleOf(D,Y){return this._addCheck({kind:"multipleOf",value:D,message:H0.toString(Y)})}get minValue(){let D=null;for(let Y of this._def.checks)if(Y.kind==="min"){if(D===null||Y.value>D)D=Y.value}return D}get maxValue(){let D=null;for(let Y of this._def.checks)if(Y.kind==="max"){if(D===null||Y.value<D)D=Y.value}return D}}qD.create=(D)=>{return new qD({checks:[],typeName:i.ZodBigInt,coerce:D?.coerce??!1,...P0(D)})};class J3 extends b0{_parse(D){if(this._def.coerce)D.data=Boolean(D.data);if(this._getType(D)!==o.boolean){let X=this._getOrReturnCtx(D);return D0(X,{code:d.invalid_type,expected:o.boolean,received:X.parsedType}),L0}return M8(D.data)}}J3.create=(D)=>{return new J3({typeName:i.ZodBoolean,coerce:D?.coerce||!1,...P0(D)})};class U5 extends b0{_parse(D){if(this._def.coerce)D.data=new Date(D.data);if(this._getType(D)!==o.date){let J=this._getOrReturnCtx(D);return D0(J,{code:d.invalid_type,expected:o.date,received:J.parsedType}),L0}if(Number.isNaN(D.data.getTime())){let J=this._getOrReturnCtx(D);return D0(J,{code:d.invalid_date}),L0}let X=new G8,Q=void 0;for(let J of this._def.checks)if(J.kind==="min"){if(D.data.getTime()<J.value)Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.too_small,message:J.message,inclusive:!0,exact:!1,minimum:J.value,type:"date"}),X.dirty()}else if(J.kind==="max"){if(D.data.getTime()>J.value)Q=this._getOrReturnCtx(D,Q),D0(Q,{code:d.too_big,message:J.message,inclusive:!0,exact:!1,maximum:J.value,type:"date"}),X.dirty()}else y0.assertNever(J);return{status:X.value,value:new Date(D.data.getTime())}}_addCheck(D){return new U5({...this._def,checks:[...this._def.checks,D]})}min(D,Y){return this._addCheck({kind:"min",value:D.getTime(),message:H0.toString(Y)})}max(D,Y){return this._addCheck({kind:"max",value:D.getTime(),message:H0.toString(Y)})}get minDate(){let D=null;for(let Y of this._def.checks)if(Y.kind==="min"){if(D===null||Y.value>D)D=Y.value}return D!=null?new Date(D):null}get maxDate(){let D=null;for(let Y of this._def.checks)if(Y.kind==="max"){if(D===null||Y.value<D)D=Y.value}return D!=null?new Date(D):null}}U5.create=(D)=>{return new U5({checks:[],coerce:D?.coerce||!1,typeName:i.ZodDate,...P0(D)})};class OY extends b0{_parse(D){if(this._getType(D)!==o.symbol){let X=this._getOrReturnCtx(D);return D0(X,{code:d.invalid_type,expected:o.symbol,received:X.parsedType}),L0}return M8(D.data)}}OY.create=(D)=>{return new OY({typeName:i.ZodSymbol,...P0(D)})};class W3 extends b0{_parse(D){if(this._getType(D)!==o.undefined){let X=this._getOrReturnCtx(D);return D0(X,{code:d.invalid_type,expected:o.undefined,received:X.parsedType}),L0}return M8(D.data)}}W3.create=(D)=>{return new W3({typeName:i.ZodUndefined,...P0(D)})};class $3 extends b0{_parse(D){if(this._getType(D)!==o.null){let X=this._getOrReturnCtx(D);return D0(X,{code:d.invalid_type,expected:o.null,received:X.parsedType}),L0}return M8(D.data)}}$3.create=(D)=>{return new $3({typeName:i.ZodNull,...P0(D)})};class V5 extends b0{constructor(){super(...arguments);this._any=!0}_parse(D){return M8(D.data)}}V5.create=(D)=>{return new V5({typeName:i.ZodAny,...P0(D)})};class HD extends b0{constructor(){super(...arguments);this._unknown=!0}_parse(D){return M8(D.data)}}HD.create=(D)=>{return new HD({typeName:i.ZodUnknown,...P0(D)})};class Q9 extends b0{_parse(D){let Y=this._getOrReturnCtx(D);return D0(Y,{code:d.invalid_type,expected:o.never,received:Y.parsedType}),L0}}Q9.create=(D)=>{return new Q9({typeName:i.ZodNever,...P0(D)})};class NY extends b0{_parse(D){if(this._getType(D)!==o.undefined){let X=this._getOrReturnCtx(D);return D0(X,{code:d.invalid_type,expected:o.void,received:X.parsedType}),L0}return M8(D.data)}}NY.create=(D)=>{return new NY({typeName:i.ZodVoid,...P0(D)})};class k6 extends b0{_parse(D){let{ctx:Y,status:X}=this._processInputParams(D),Q=this._def;if(Y.parsedType!==o.array)return D0(Y,{code:d.invalid_type,expected:o.array,received:Y.parsedType}),L0;if(Q.exactLength!==null){let W=Y.data.length>Q.exactLength.value,$=Y.data.length<Q.exactLength.value;if(W||$)D0(Y,{code:W?d.too_big:d.too_small,minimum:$?Q.exactLength.value:void 0,maximum:W?Q.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:Q.exactLength.message}),X.dirty()}if(Q.minLength!==null){if(Y.data.length<Q.minLength.value)D0(Y,{code:d.too_small,minimum:Q.minLength.value,type:"array",inclusive:!0,exact:!1,message:Q.minLength.message}),X.dirty()}if(Q.maxLength!==null){if(Y.data.length>Q.maxLength.value)D0(Y,{code:d.too_big,maximum:Q.maxLength.value,type:"array",inclusive:!0,exact:!1,message:Q.maxLength.message}),X.dirty()}if(Y.common.async)return Promise.all([...Y.data].map((W,$)=>{return Q.type._parseAsync(new v6(Y,W,Y.path,$))})).then((W)=>{return G8.mergeArray(X,W)});let J=[...Y.data].map((W,$)=>{return Q.type._parseSync(new v6(Y,W,Y.path,$))});return G8.mergeArray(X,J)}get element(){return this._def.type}min(D,Y){return new k6({...this._def,minLength:{value:D,message:H0.toString(Y)}})}max(D,Y){return new k6({...this._def,maxLength:{value:D,message:H0.toString(Y)}})}length(D,Y){return new k6({...this._def,exactLength:{value:D,message:H0.toString(Y)}})}nonempty(D){return this.min(1,D)}}k6.create=(D,Y)=>{return new k6({type:D,minLength:null,maxLength:null,exactLength:null,typeName:i.ZodArray,...P0(Y)})};function X3(D){if(D instanceof P1){let Y={};for(let X in D.shape){let Q=D.shape[X];Y[X]=G6.create(X3(Q))}return new P1({...D._def,shape:()=>Y})}else if(D instanceof k6)return new k6({...D._def,type:X3(D.element)});else if(D instanceof G6)return G6.create(X3(D.unwrap()));else if(D instanceof S9)return S9.create(X3(D.unwrap()));else if(D instanceof J9)return J9.create(D.items.map((Y)=>X3(Y)));else return D}class P1 extends b0{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let D=this._def.shape(),Y=y0.objectKeys(D);return this._cached={shape:D,keys:Y},this._cached}_parse(D){if(this._getType(D)!==o.object){let B=this._getOrReturnCtx(D);return D0(B,{code:d.invalid_type,expected:o.object,received:B.parsedType}),L0}let{status:X,ctx:Q}=this._processInputParams(D),{shape:J,keys:W}=this._getCached(),$=[];if(!(this._def.catchall instanceof Q9&&this._def.unknownKeys==="strip")){for(let B in Q.data)if(!W.includes(B))$.push(B)}let G=[];for(let B of W){let H=J[B],F=Q.data[B];G.push({key:{status:"valid",value:B},value:H._parse(new v6(Q,F,Q.path,B)),alwaysSet:B in Q.data})}if(this._def.catchall instanceof Q9){let B=this._def.unknownKeys;if(B==="passthrough")for(let H of $)G.push({key:{status:"valid",value:H},value:{status:"valid",value:Q.data[H]}});else if(B==="strict"){if($.length>0)D0(Q,{code:d.unrecognized_keys,keys:$}),X.dirty()}else if(B==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let B=this._def.catchall;for(let H of $){let F=Q.data[H];G.push({key:{status:"valid",value:H},value:B._parse(new v6(Q,F,Q.path,H)),alwaysSet:H in Q.data})}}if(Q.common.async)return Promise.resolve().then(async()=>{let B=[];for(let H of G){let F=await H.key,K=await H.value;B.push({key:F,value:K,alwaysSet:H.alwaysSet})}return B}).then((B)=>{return G8.mergeObjectSync(X,B)});else return G8.mergeObjectSync(X,G)}get shape(){return this._def.shape()}strict(D){return H0.errToObj,new P1({...this._def,unknownKeys:"strict",...D!==void 0?{errorMap:(Y,X)=>{let Q=this._def.errorMap?.(Y,X).message??X.defaultError;if(Y.code==="unrecognized_keys")return{message:H0.errToObj(D).message??Q};return{message:Q}}}:{}})}strip(){return new P1({...this._def,unknownKeys:"strip"})}passthrough(){return new P1({...this._def,unknownKeys:"passthrough"})}extend(D){return new P1({...this._def,shape:()=>({...this._def.shape(),...D})})}merge(D){return new P1({unknownKeys:D._def.unknownKeys,catchall:D._def.catchall,shape:()=>({...this._def.shape(),...D._def.shape()}),typeName:i.ZodObject})}setKey(D,Y){return this.augment({[D]:Y})}catchall(D){return new P1({...this._def,catchall:D})}pick(D){let Y={};for(let X of y0.objectKeys(D))if(D[X]&&this.shape[X])Y[X]=this.shape[X];return new P1({...this._def,shape:()=>Y})}omit(D){let Y={};for(let X of y0.objectKeys(this.shape))if(!D[X])Y[X]=this.shape[X];return new P1({...this._def,shape:()=>Y})}deepPartial(){return X3(this)}partial(D){let Y={};for(let X of y0.objectKeys(this.shape)){let Q=this.shape[X];if(D&&!D[X])Y[X]=Q;else Y[X]=Q.optional()}return new P1({...this._def,shape:()=>Y})}required(D){let Y={};for(let X of y0.objectKeys(this.shape))if(D&&!D[X])Y[X]=this.shape[X];else{let J=this.shape[X];while(J instanceof G6)J=J._def.innerType;Y[X]=J}return new P1({...this._def,shape:()=>Y})}keyof(){return ZC(y0.objectKeys(this.shape))}}P1.create=(D,Y)=>{return new P1({shape:()=>D,unknownKeys:"strip",catchall:Q9.create(),typeName:i.ZodObject,...P0(Y)})};P1.strictCreate=(D,Y)=>{return new P1({shape:()=>D,unknownKeys:"strict",catchall:Q9.create(),typeName:i.ZodObject,...P0(Y)})};P1.lazycreate=(D,Y)=>{return new P1({shape:D,unknownKeys:"strip",catchall:Q9.create(),typeName:i.ZodObject,...P0(Y)})};class G3 extends b0{_parse(D){let{ctx:Y}=this._processInputParams(D),X=this._def.options;function Q(J){for(let $ of J)if($.result.status==="valid")return $.result;for(let $ of J)if($.result.status==="dirty")return Y.common.issues.push(...$.ctx.common.issues),$.result;let W=J.map(($)=>new p8($.ctx.common.issues));return D0(Y,{code:d.invalid_union,unionErrors:W}),L0}if(Y.common.async)return Promise.all(X.map(async(J)=>{let W={...Y,common:{...Y.common,issues:[]},parent:null};return{result:await J._parseAsync({data:Y.data,path:Y.path,parent:W}),ctx:W}})).then(Q);else{let J=void 0,W=[];for(let G of X){let B={...Y,common:{...Y.common,issues:[]},parent:null},H=G._parseSync({data:Y.data,path:Y.path,parent:B});if(H.status==="valid")return H;else if(H.status==="dirty"&&!J)J={result:H,ctx:B};if(B.common.issues.length)W.push(B.common.issues)}if(J)return Y.common.issues.push(...J.ctx.common.issues),J.result;let $=W.map((G)=>new p8(G));return D0(Y,{code:d.invalid_union,unionErrors:$}),L0}}get options(){return this._def.options}}G3.create=(D,Y)=>{return new G3({options:D,typeName:i.ZodUnion,...P0(Y)})};var T9=(D)=>{if(D instanceof H3)return T9(D.schema);else if(D instanceof y6)return T9(D.innerType());else if(D instanceof F3)return[D.value];else if(D instanceof KD)return D.options;else if(D instanceof q3)return y0.objectValues(D.enum);else if(D instanceof K3)return T9(D._def.innerType);else if(D instanceof W3)return[void 0];else if(D instanceof $3)return[null];else if(D instanceof G6)return[void 0,...T9(D.unwrap())];else if(D instanceof S9)return[null,...T9(D.unwrap())];else if(D instanceof QW)return T9(D.unwrap());else if(D instanceof U3)return T9(D.unwrap());else if(D instanceof z3)return T9(D._def.innerType);else return[]};class XW extends b0{_parse(D){let{ctx:Y}=this._processInputParams(D);if(Y.parsedType!==o.object)return D0(Y,{code:d.invalid_type,expected:o.object,received:Y.parsedType}),L0;let X=this.discriminator,Q=Y.data[X],J=this.optionsMap.get(Q);if(!J)return D0(Y,{code:d.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[X]}),L0;if(Y.common.async)return J._parseAsync({data:Y.data,path:Y.path,parent:Y});else return J._parseSync({data:Y.data,path:Y.path,parent:Y})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(D,Y,X){let Q=new Map;for(let J of Y){let W=T9(J.shape[D]);if(!W.length)throw Error(`A discriminator value for key \`${D}\` could not be extracted from all schema options`);for(let $ of W){if(Q.has($))throw Error(`Discriminator property ${String(D)} has duplicate value ${String($)}`);Q.set($,J)}}return new XW({typeName:i.ZodDiscriminatedUnion,discriminator:D,options:Y,optionsMap:Q,...P0(X)})}}function pF(D,Y){let X=X9(D),Q=X9(Y);if(D===Y)return{valid:!0,data:D};else if(X===o.object&&Q===o.object){let J=y0.objectKeys(Y),W=y0.objectKeys(D).filter((G)=>J.indexOf(G)!==-1),$={...D,...Y};for(let G of W){let B=pF(D[G],Y[G]);if(!B.valid)return{valid:!1};$[G]=B.data}return{valid:!0,data:$}}else if(X===o.array&&Q===o.array){if(D.length!==Y.length)return{valid:!1};let J=[];for(let W=0;W<D.length;W++){let $=D[W],G=Y[W],B=pF($,G);if(!B.valid)return{valid:!1};J.push(B.data)}return{valid:!0,data:J}}else if(X===o.date&&Q===o.date&&+D===+Y)return{valid:!0,data:D};else return{valid:!1}}class B3 extends b0{_parse(D){let{status:Y,ctx:X}=this._processInputParams(D),Q=(J,W)=>{if(DW(J)||DW(W))return L0;let $=pF(J.value,W.value);if(!$.valid)return D0(X,{code:d.invalid_intersection_types}),L0;if(YW(J)||YW(W))Y.dirty();return{status:Y.value,value:$.data}};if(X.common.async)return Promise.all([this._def.left._parseAsync({data:X.data,path:X.path,parent:X}),this._def.right._parseAsync({data:X.data,path:X.path,parent:X})]).then(([J,W])=>Q(J,W));else return Q(this._def.left._parseSync({data:X.data,path:X.path,parent:X}),this._def.right._parseSync({data:X.data,path:X.path,parent:X}))}}B3.create=(D,Y,X)=>{return new B3({left:D,right:Y,typeName:i.ZodIntersection,...P0(X)})};class J9 extends b0{_parse(D){let{status:Y,ctx:X}=this._processInputParams(D);if(X.parsedType!==o.array)return D0(X,{code:d.invalid_type,expected:o.array,received:X.parsedType}),L0;if(X.data.length<this._def.items.length)return D0(X,{code:d.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),L0;if(!this._def.rest&&X.data.length>this._def.items.length)D0(X,{code:d.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),Y.dirty();let J=[...X.data].map((W,$)=>{let G=this._def.items[$]||this._def.rest;if(!G)return null;return G._parse(new v6(X,W,X.path,$))}).filter((W)=>!!W);if(X.common.async)return Promise.all(J).then((W)=>{return G8.mergeArray(Y,W)});else return G8.mergeArray(Y,J)}get items(){return this._def.items}rest(D){return new J9({...this._def,rest:D})}}J9.create=(D,Y)=>{if(!Array.isArray(D))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new J9({items:D,typeName:i.ZodTuple,rest:null,...P0(Y)})};class ZY extends b0{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(D){let{status:Y,ctx:X}=this._processInputParams(D);if(X.parsedType!==o.object)return D0(X,{code:d.invalid_type,expected:o.object,received:X.parsedType}),L0;let Q=[],J=this._def.keyType,W=this._def.valueType;for(let $ in X.data)Q.push({key:J._parse(new v6(X,$,X.path,$)),value:W._parse(new v6(X,X.data[$],X.path,$)),alwaysSet:$ in X.data});if(X.common.async)return G8.mergeObjectAsync(Y,Q);else return G8.mergeObjectSync(Y,Q)}get element(){return this._def.valueType}static create(D,Y,X){if(Y instanceof b0)return new ZY({keyType:D,valueType:Y,typeName:i.ZodRecord,...P0(X)});return new ZY({keyType:b6.create(),valueType:D,typeName:i.ZodRecord,...P0(Y)})}}class AY extends b0{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(D){let{status:Y,ctx:X}=this._processInputParams(D);if(X.parsedType!==o.map)return D0(X,{code:d.invalid_type,expected:o.map,received:X.parsedType}),L0;let Q=this._def.keyType,J=this._def.valueType,W=[...X.data.entries()].map(([$,G],B)=>{return{key:Q._parse(new v6(X,$,X.path,[B,"key"])),value:J._parse(new v6(X,G,X.path,[B,"value"]))}});if(X.common.async){let $=new Map;return Promise.resolve().then(async()=>{for(let G of W){let B=await G.key,H=await G.value;if(B.status==="aborted"||H.status==="aborted")return L0;if(B.status==="dirty"||H.status==="dirty")Y.dirty();$.set(B.value,H.value)}return{status:Y.value,value:$}})}else{let $=new Map;for(let G of W){let{key:B,value:H}=G;if(B.status==="aborted"||H.status==="aborted")return L0;if(B.status==="dirty"||H.status==="dirty")Y.dirty();$.set(B.value,H.value)}return{status:Y.value,value:$}}}}AY.create=(D,Y,X)=>{return new AY({valueType:Y,keyType:D,typeName:i.ZodMap,...P0(X)})};class w5 extends b0{_parse(D){let{status:Y,ctx:X}=this._processInputParams(D);if(X.parsedType!==o.set)return D0(X,{code:d.invalid_type,expected:o.set,received:X.parsedType}),L0;let Q=this._def;if(Q.minSize!==null){if(X.data.size<Q.minSize.value)D0(X,{code:d.too_small,minimum:Q.minSize.value,type:"set",inclusive:!0,exact:!1,message:Q.minSize.message}),Y.dirty()}if(Q.maxSize!==null){if(X.data.size>Q.maxSize.value)D0(X,{code:d.too_big,maximum:Q.maxSize.value,type:"set",inclusive:!0,exact:!1,message:Q.maxSize.message}),Y.dirty()}let J=this._def.valueType;function W(G){let B=new Set;for(let H of G){if(H.status==="aborted")return L0;if(H.status==="dirty")Y.dirty();B.add(H.value)}return{status:Y.value,value:B}}let $=[...X.data.values()].map((G,B)=>J._parse(new v6(X,G,X.path,B)));if(X.common.async)return Promise.all($).then((G)=>W(G));else return W($)}min(D,Y){return new w5({...this._def,minSize:{value:D,message:H0.toString(Y)}})}max(D,Y){return new w5({...this._def,maxSize:{value:D,message:H0.toString(Y)}})}size(D,Y){return this.min(D,Y).max(D,Y)}nonempty(D){return this.min(1,D)}}w5.create=(D,Y)=>{return new w5({valueType:D,minSize:null,maxSize:null,typeName:i.ZodSet,...P0(Y)})};class Q3 extends b0{constructor(){super(...arguments);this.validate=this.implement}_parse(D){let{ctx:Y}=this._processInputParams(D);if(Y.parsedType!==o.function)return D0(Y,{code:d.invalid_type,expected:o.function,received:Y.parsedType}),L0;function X($,G){return MY({data:$,path:Y.path,errorMaps:[Y.common.contextualErrorMap,Y.schemaErrorMap,D3(),j9].filter((B)=>!!B),issueData:{code:d.invalid_arguments,argumentsError:G}})}function Q($,G){return MY({data:$,path:Y.path,errorMaps:[Y.common.contextualErrorMap,Y.schemaErrorMap,D3(),j9].filter((B)=>!!B),issueData:{code:d.invalid_return_type,returnTypeError:G}})}let J={errorMap:Y.common.contextualErrorMap},W=Y.data;if(this._def.returns instanceof L5){let $=this;return M8(async function(...G){let B=new p8([]),H=await $._def.args.parseAsync(G,J).catch((U)=>{throw B.addIssue(X(G,U)),B}),F=await Reflect.apply(W,this,H);return await $._def.returns._def.type.parseAsync(F,J).catch((U)=>{throw B.addIssue(Q(F,U)),B})})}else{let $=this;return M8(function(...G){let B=$._def.args.safeParse(G,J);if(!B.success)throw new p8([X(G,B.error)]);let H=Reflect.apply(W,this,B.data),F=$._def.returns.safeParse(H,J);if(!F.success)throw new p8([Q(H,F.error)]);return F.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...D){return new Q3({...this._def,args:J9.create(D).rest(HD.create())})}returns(D){return new Q3({...this._def,returns:D})}implement(D){return this.parse(D)}strictImplement(D){return this.parse(D)}static create(D,Y,X){return new Q3({args:D?D:J9.create([]).rest(HD.create()),returns:Y||HD.create(),typeName:i.ZodFunction,...P0(X)})}}class H3 extends b0{get schema(){return this._def.getter()}_parse(D){let{ctx:Y}=this._processInputParams(D);return this._def.getter()._parse({data:Y.data,path:Y.path,parent:Y})}}H3.create=(D,Y)=>{return new H3({getter:D,typeName:i.ZodLazy,...P0(Y)})};class F3 extends b0{_parse(D){if(D.data!==this._def.value){let Y=this._getOrReturnCtx(D);return D0(Y,{received:Y.data,code:d.invalid_literal,expected:this._def.value}),L0}return{status:"valid",value:D.data}}get value(){return this._def.value}}F3.create=(D,Y)=>{return new F3({value:D,typeName:i.ZodLiteral,...P0(Y)})};function ZC(D,Y){return new KD({values:D,typeName:i.ZodEnum,...P0(Y)})}class KD extends b0{_parse(D){if(typeof D.data!=="string"){let Y=this._getOrReturnCtx(D),X=this._def.values;return D0(Y,{expected:y0.joinValues(X),received:Y.parsedType,code:d.invalid_type}),L0}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(D.data)){let Y=this._getOrReturnCtx(D),X=this._def.values;return D0(Y,{received:Y.data,code:d.invalid_enum_value,options:X}),L0}return M8(D.data)}get options(){return this._def.values}get enum(){let D={};for(let Y of this._def.values)D[Y]=Y;return D}get Values(){let D={};for(let Y of this._def.values)D[Y]=Y;return D}get Enum(){let D={};for(let Y of this._def.values)D[Y]=Y;return D}extract(D,Y=this._def){return KD.create(D,{...this._def,...Y})}exclude(D,Y=this._def){return KD.create(this.options.filter((X)=>!D.includes(X)),{...this._def,...Y})}}KD.create=ZC;class q3 extends b0{_parse(D){let Y=y0.getValidEnumValues(this._def.values),X=this._getOrReturnCtx(D);if(X.parsedType!==o.string&&X.parsedType!==o.number){let Q=y0.objectValues(Y);return D0(X,{expected:y0.joinValues(Q),received:X.parsedType,code:d.invalid_type}),L0}if(!this._cache)this._cache=new Set(y0.getValidEnumValues(this._def.values));if(!this._cache.has(D.data)){let Q=y0.objectValues(Y);return D0(X,{received:X.data,code:d.invalid_enum_value,options:Q}),L0}return M8(D.data)}get enum(){return this._def.values}}q3.create=(D,Y)=>{return new q3({values:D,typeName:i.ZodNativeEnum,...P0(Y)})};class L5 extends b0{unwrap(){return this._def.type}_parse(D){let{ctx:Y}=this._processInputParams(D);if(Y.parsedType!==o.promise&&Y.common.async===!1)return D0(Y,{code:d.invalid_type,expected:o.promise,received:Y.parsedType}),L0;let X=Y.parsedType===o.promise?Y.data:Promise.resolve(Y.data);return M8(X.then((Q)=>{return this._def.type.parseAsync(Q,{path:Y.path,errorMap:Y.common.contextualErrorMap})}))}}L5.create=(D,Y)=>{return new L5({type:D,typeName:i.ZodPromise,...P0(Y)})};class y6 extends b0{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===i.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(D){let{status:Y,ctx:X}=this._processInputParams(D),Q=this._def.effect||null,J={addIssue:(W)=>{if(D0(X,W),W.fatal)Y.abort();else Y.dirty()},get path(){return X.path}};if(J.addIssue=J.addIssue.bind(J),Q.type==="preprocess"){let W=Q.transform(X.data,J);if(X.common.async)return Promise.resolve(W).then(async($)=>{if(Y.value==="aborted")return L0;let G=await this._def.schema._parseAsync({data:$,path:X.path,parent:X});if(G.status==="aborted")return L0;if(G.status==="dirty")return z5(G.value);if(Y.value==="dirty")return z5(G.value);return G});else{if(Y.value==="aborted")return L0;let $=this._def.schema._parseSync({data:W,path:X.path,parent:X});if($.status==="aborted")return L0;if($.status==="dirty")return z5($.value);if(Y.value==="dirty")return z5($.value);return $}}if(Q.type==="refinement"){let W=($)=>{let G=Q.refinement($,J);if(X.common.async)return Promise.resolve(G);if(G instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return $};if(X.common.async===!1){let $=this._def.schema._parseSync({data:X.data,path:X.path,parent:X});if($.status==="aborted")return L0;if($.status==="dirty")Y.dirty();return W($.value),{status:Y.value,value:$.value}}else return this._def.schema._parseAsync({data:X.data,path:X.path,parent:X}).then(($)=>{if($.status==="aborted")return L0;if($.status==="dirty")Y.dirty();return W($.value).then(()=>{return{status:Y.value,value:$.value}})})}if(Q.type==="transform")if(X.common.async===!1){let W=this._def.schema._parseSync({data:X.data,path:X.path,parent:X});if(!BD(W))return L0;let $=Q.transform(W.value,J);if($ instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:Y.value,value:$}}else return this._def.schema._parseAsync({data:X.data,path:X.path,parent:X}).then((W)=>{if(!BD(W))return L0;return Promise.resolve(Q.transform(W.value,J)).then(($)=>({status:Y.value,value:$}))});y0.assertNever(Q)}}y6.create=(D,Y,X)=>{return new y6({schema:D,typeName:i.ZodEffects,effect:Y,...P0(X)})};y6.createWithPreprocess=(D,Y,X)=>{return new y6({schema:Y,effect:{type:"preprocess",transform:D},typeName:i.ZodEffects,...P0(X)})};class G6 extends b0{_parse(D){if(this._getType(D)===o.undefined)return M8(void 0);return this._def.innerType._parse(D)}unwrap(){return this._def.innerType}}G6.create=(D,Y)=>{return new G6({innerType:D,typeName:i.ZodOptional,...P0(Y)})};class S9 extends b0{_parse(D){if(this._getType(D)===o.null)return M8(null);return this._def.innerType._parse(D)}unwrap(){return this._def.innerType}}S9.create=(D,Y)=>{return new S9({innerType:D,typeName:i.ZodNullable,...P0(Y)})};class K3 extends b0{_parse(D){let{ctx:Y}=this._processInputParams(D),X=Y.data;if(Y.parsedType===o.undefined)X=this._def.defaultValue();return this._def.innerType._parse({data:X,path:Y.path,parent:Y})}removeDefault(){return this._def.innerType}}K3.create=(D,Y)=>{return new K3({innerType:D,typeName:i.ZodDefault,defaultValue:typeof Y.default==="function"?Y.default:()=>Y.default,...P0(Y)})};class z3 extends b0{_parse(D){let{ctx:Y}=this._processInputParams(D),X={...Y,common:{...Y.common,issues:[]}},Q=this._def.innerType._parse({data:X.data,path:X.path,parent:{...X}});if(Y3(Q))return Q.then((J)=>{return{status:"valid",value:J.status==="valid"?J.value:this._def.catchValue({get error(){return new p8(X.common.issues)},input:X.data})}});else return{status:"valid",value:Q.status==="valid"?Q.value:this._def.catchValue({get error(){return new p8(X.common.issues)},input:X.data})}}removeCatch(){return this._def.innerType}}z3.create=(D,Y)=>{return new z3({innerType:D,typeName:i.ZodCatch,catchValue:typeof Y.catch==="function"?Y.catch:()=>Y.catch,...P0(Y)})};class EY extends b0{_parse(D){if(this._getType(D)!==o.nan){let X=this._getOrReturnCtx(D);return D0(X,{code:d.invalid_type,expected:o.nan,received:X.parsedType}),L0}return{status:"valid",value:D.data}}}EY.create=(D)=>{return new EY({typeName:i.ZodNaN,...P0(D)})};var y30=Symbol("zod_brand");class QW extends b0{_parse(D){let{ctx:Y}=this._processInputParams(D),X=Y.data;return this._def.type._parse({data:X,path:Y.path,parent:Y})}unwrap(){return this._def.type}}class RY extends b0{_parse(D){let{status:Y,ctx:X}=this._processInputParams(D);if(X.common.async)return(async()=>{let J=await this._def.in._parseAsync({data:X.data,path:X.path,parent:X});if(J.status==="aborted")return L0;if(J.status==="dirty")return Y.dirty(),z5(J.value);else return this._def.out._parseAsync({data:J.value,path:X.path,parent:X})})();else{let Q=this._def.in._parseSync({data:X.data,path:X.path,parent:X});if(Q.status==="aborted")return L0;if(Q.status==="dirty")return Y.dirty(),{status:"dirty",value:Q.value};else return this._def.out._parseSync({data:Q.value,path:X.path,parent:X})}}static create(D,Y){return new RY({in:D,out:Y,typeName:i.ZodPipeline})}}class U3 extends b0{_parse(D){let Y=this._def.innerType._parse(D),X=(Q)=>{if(BD(Q))Q.value=Object.freeze(Q.value);return Q};return Y3(Y)?Y.then((Q)=>X(Q)):X(Y)}unwrap(){return this._def.innerType}}U3.create=(D,Y)=>{return new U3({innerType:D,typeName:i.ZodReadonly,...P0(Y)})};function LC(D,Y){let X=typeof D==="function"?D(Y):typeof D==="string"?{message:D}:D;return typeof X==="string"?{message:X}:X}function AC(D,Y={},X){if(D)return V5.create().superRefine((Q,J)=>{let W=D(Q);if(W instanceof Promise)return W.then(($)=>{if(!$){let G=LC(Y,Q),B=G.fatal??X??!0;J.addIssue({code:"custom",...G,fatal:B})}});if(!W){let $=LC(Y,Q),G=$.fatal??X??!0;J.addIssue({code:"custom",...$,fatal:G})}return});return V5.create()}var f30={object:P1.lazycreate},i;(function(D){D.ZodString="ZodString",D.ZodNumber="ZodNumber",D.ZodNaN="ZodNaN",D.ZodBigInt="ZodBigInt",D.ZodBoolean="ZodBoolean",D.ZodDate="ZodDate",D.ZodSymbol="ZodSymbol",D.ZodUndefined="ZodUndefined",D.ZodNull="ZodNull",D.ZodAny="ZodAny",D.ZodUnknown="ZodUnknown",D.ZodNever="ZodNever",D.ZodVoid="ZodVoid",D.ZodArray="ZodArray",D.ZodObject="ZodObject",D.ZodUnion="ZodUnion",D.ZodDiscriminatedUnion="ZodDiscriminatedUnion",D.ZodIntersection="ZodIntersection",D.ZodTuple="ZodTuple",D.ZodRecord="ZodRecord",D.ZodMap="ZodMap",D.ZodSet="ZodSet",D.ZodFunction="ZodFunction",D.ZodLazy="ZodLazy",D.ZodLiteral="ZodLiteral",D.ZodEnum="ZodEnum",D.ZodEffects="ZodEffects",D.ZodNativeEnum="ZodNativeEnum",D.ZodOptional="ZodOptional",D.ZodNullable="ZodNullable",D.ZodDefault="ZodDefault",D.ZodCatch="ZodCatch",D.ZodPromise="ZodPromise",D.ZodBranded="ZodBranded",D.ZodPipeline="ZodPipeline",D.ZodReadonly="ZodReadonly"})(i||(i={}));var h30=(D,Y={message:`Input not instance of ${D.name}`})=>AC((X)=>X instanceof D,Y),EC=b6.create,RC=FD.create,g30=EY.create,u30=qD.create,jC=J3.create,m30=U5.create,c30=OY.create,l30=W3.create,d30=$3.create,p30=V5.create,n30=HD.create,i30=Q9.create,r30=NY.create,a30=k6.create,nF=P1.create,o30=P1.strictCreate,s30=G3.create,t30=XW.create,e30=B3.create,D70=J9.create,Y70=ZY.create,X70=AY.create,Q70=w5.create,J70=Q3.create,W70=H3.create,$70=F3.create,G70=KD.create,B70=q3.create,H70=L5.create,F70=y6.create,q70=G6.create,K70=S9.create,z70=y6.createWithPreprocess,U70=RY.create,V70=()=>EC().optional(),w70=()=>RC().optional(),L70=()=>jC().optional(),M70={string:(D)=>b6.create({...D,coerce:!0}),number:(D)=>FD.create({...D,coerce:!0}),boolean:(D)=>J3.create({...D,coerce:!0}),bigint:(D)=>qD.create({...D,coerce:!0}),date:(D)=>U5.create({...D,coerce:!0})};var O70=L0;var N70=Object.freeze({status:"aborted"});function h(D,Y,X){function Q(G,B){var H;Object.defineProperty(G,"_zod",{value:G._zod??{},enumerable:!1}),(H=G._zod).traits??(H.traits=new Set),G._zod.traits.add(D),Y(G,B);for(let F in $.prototype)if(!(F in G))Object.defineProperty(G,F,{value:$.prototype[F].bind(G)});G._zod.constr=$,G._zod.def=B}let J=X?.Parent??Object;class W extends J{}Object.defineProperty(W,"name",{value:D});function $(G){var B;let H=X?.Parent?new W:this;Q(H,G),(B=H._zod).deferred??(B.deferred=[]);for(let F of H._zod.deferred)F();return H}return Object.defineProperty($,"init",{value:Q}),Object.defineProperty($,Symbol.hasInstance,{value:(G)=>{if(X?.Parent&&G instanceof X.Parent)return!0;return G?._zod?.traits?.has(D)}}),Object.defineProperty($,"name",{value:D}),$}var Z70=Symbol("zod_brand");class zD extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}var JW={};function B6(D){if(D)Object.assign(JW,D);return JW}var g0={};H9(g0,{unwrapMessage:()=>jY,stringifyPrimitive:()=>GW,required:()=>h70,randomString:()=>I70,propertyKeyTypes:()=>tF,promiseAllObject:()=>P70,primitiveTypes:()=>TC,prefixIssues:()=>W9,pick:()=>b70,partial:()=>f70,optionalKeys:()=>eF,omit:()=>k70,numKeys:()=>C70,nullish:()=>PY,normalizeParams:()=>M0,merge:()=>y70,jsonStringifyReplacer:()=>rF,joinValues:()=>WW,issue:()=>Yq,isPlainObject:()=>w3,isObject:()=>V3,getSizableOrigin:()=>PC,getParsedType:()=>x70,getLengthableOrigin:()=>CY,getEnumValues:()=>TY,getElementAtPath:()=>S70,floatSafeRemainder:()=>aF,finalizeIssue:()=>f6,extend:()=>v70,escapeRegex:()=>UD,esc:()=>M5,defineLazy:()=>H1,createTransparentProxy:()=>_70,clone:()=>H6,cleanRegex:()=>IY,cleanEnum:()=>g70,captureStackTrace:()=>$W,cached:()=>SY,assignProp:()=>oF,assertNotEqual:()=>E70,assertNever:()=>j70,assertIs:()=>R70,assertEqual:()=>A70,assert:()=>T70,allowsEval:()=>sF,aborted:()=>O5,NUMBER_FORMAT_RANGES:()=>Dq,Class:()=>IC,BIGINT_FORMAT_RANGES:()=>SC});function A70(D){return D}function E70(D){return D}function R70(D){}function j70(D){throw Error()}function T70(D){}function TY(D){let Y=Object.values(D).filter((Q)=>typeof Q==="number");return Object.entries(D).filter(([Q,J])=>Y.indexOf(+Q)===-1).map(([Q,J])=>J)}function WW(D,Y="|"){return D.map((X)=>GW(X)).join(Y)}function rF(D,Y){if(typeof Y==="bigint")return Y.toString();return Y}function SY(D){return{get value(){{let X=D();return Object.defineProperty(this,"value",{value:X}),X}throw Error("cached value already set")}}}function PY(D){return D===null||D===void 0}function IY(D){let Y=D.startsWith("^")?1:0,X=D.endsWith("$")?D.length-1:D.length;return D.slice(Y,X)}function aF(D,Y){let X=(D.toString().split(".")[1]||"").length,Q=(Y.toString().split(".")[1]||"").length,J=X>Q?X:Q,W=Number.parseInt(D.toFixed(J).replace(".","")),$=Number.parseInt(Y.toFixed(J).replace(".",""));return W%$/10**J}function H1(D,Y,X){Object.defineProperty(D,Y,{get(){{let J=X();return D[Y]=J,J}throw Error("cached value already set")},set(J){Object.defineProperty(D,Y,{value:J})},configurable:!0})}function oF(D,Y,X){Object.defineProperty(D,Y,{value:X,writable:!0,enumerable:!0,configurable:!0})}function S70(D,Y){if(!Y)return D;return Y.reduce((X,Q)=>X?.[Q],D)}function P70(D){let Y=Object.keys(D),X=Y.map((Q)=>D[Q]);return Promise.all(X).then((Q)=>{let J={};for(let W=0;W<Y.length;W++)J[Y[W]]=Q[W];return J})}function I70(D=10){let X="";for(let Q=0;Q<D;Q++)X+="abcdefghijklmnopqrstuvwxyz"[Math.floor(Math.random()*26)];return X}function M5(D){return JSON.stringify(D)}var $W=Error.captureStackTrace?Error.captureStackTrace:(...D)=>{};function V3(D){return typeof D==="object"&&D!==null&&!Array.isArray(D)}var sF=SY(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{return new Function(""),!0}catch(D){return!1}});function w3(D){if(V3(D)===!1)return!1;let Y=D.constructor;if(Y===void 0)return!0;let X=Y.prototype;if(V3(X)===!1)return!1;if(Object.prototype.hasOwnProperty.call(X,"isPrototypeOf")===!1)return!1;return!0}function C70(D){let Y=0;for(let X in D)if(Object.prototype.hasOwnProperty.call(D,X))Y++;return Y}var x70=(D)=>{let Y=typeof D;switch(Y){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(D)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":if(Array.isArray(D))return"array";if(D===null)return"null";if(D.then&&typeof D.then==="function"&&D.catch&&typeof D.catch==="function")return"promise";if(typeof Map<"u"&&D instanceof Map)return"map";if(typeof Set<"u"&&D instanceof Set)return"set";if(typeof Date<"u"&&D instanceof Date)return"date";if(typeof File<"u"&&D instanceof File)return"file";return"object";default:throw Error(`Unknown data type: ${Y}`)}},tF=new Set(["string","number","symbol"]),TC=new Set(["string","number","bigint","boolean","symbol","undefined"]);function UD(D){return D.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function H6(D,Y,X){let Q=new D._zod.constr(Y??D._zod.def);if(!Y||X?.parent)Q._zod.parent=D;return Q}function M0(D){let Y=D;if(!Y)return{};if(typeof Y==="string")return{error:()=>Y};if(Y?.message!==void 0){if(Y?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");Y.error=Y.message}if(delete Y.message,typeof Y.error==="string")return{...Y,error:()=>Y.error};return Y}function _70(D){let Y;return new Proxy({},{get(X,Q,J){return Y??(Y=D()),Reflect.get(Y,Q,J)},set(X,Q,J,W){return Y??(Y=D()),Reflect.set(Y,Q,J,W)},has(X,Q){return Y??(Y=D()),Reflect.has(Y,Q)},deleteProperty(X,Q){return Y??(Y=D()),Reflect.deleteProperty(Y,Q)},ownKeys(X){return Y??(Y=D()),Reflect.ownKeys(Y)},getOwnPropertyDescriptor(X,Q){return Y??(Y=D()),Reflect.getOwnPropertyDescriptor(Y,Q)},defineProperty(X,Q,J){return Y??(Y=D()),Reflect.defineProperty(Y,Q,J)}})}function GW(D){if(typeof D==="bigint")return D.toString()+"n";if(typeof D==="string")return`"${D}"`;return`${D}`}function eF(D){return Object.keys(D).filter((Y)=>{return D[Y]._zod.optin==="optional"&&D[Y]._zod.optout==="optional"})}var Dq={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-340282346638528860000000000000000000000,340282346638528860000000000000000000000],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},SC={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]};function b70(D,Y){let X={},Q=D._zod.def;for(let J in Y){if(!(J in Q.shape))throw Error(`Unrecognized key: "${J}"`);if(!Y[J])continue;X[J]=Q.shape[J]}return H6(D,{...D._zod.def,shape:X,checks:[]})}function k70(D,Y){let X={...D._zod.def.shape},Q=D._zod.def;for(let J in Y){if(!(J in Q.shape))throw Error(`Unrecognized key: "${J}"`);if(!Y[J])continue;delete X[J]}return H6(D,{...D._zod.def,shape:X,checks:[]})}function v70(D,Y){if(!w3(Y))throw Error("Invalid input to extend: expected a plain object");let X={...D._zod.def,get shape(){let Q={...D._zod.def.shape,...Y};return oF(this,"shape",Q),Q},checks:[]};return H6(D,X)}function y70(D,Y){return H6(D,{...D._zod.def,get shape(){let X={...D._zod.def.shape,...Y._zod.def.shape};return oF(this,"shape",X),X},catchall:Y._zod.def.catchall,checks:[]})}function f70(D,Y,X){let Q=Y._zod.def.shape,J={...Q};if(X)for(let W in X){if(!(W in Q))throw Error(`Unrecognized key: "${W}"`);if(!X[W])continue;J[W]=D?new D({type:"optional",innerType:Q[W]}):Q[W]}else for(let W in Q)J[W]=D?new D({type:"optional",innerType:Q[W]}):Q[W];return H6(Y,{...Y._zod.def,shape:J,checks:[]})}function h70(D,Y,X){let Q=Y._zod.def.shape,J={...Q};if(X)for(let W in X){if(!(W in J))throw Error(`Unrecognized key: "${W}"`);if(!X[W])continue;J[W]=new D({type:"nonoptional",innerType:Q[W]})}else for(let W in Q)J[W]=new D({type:"nonoptional",innerType:Q[W]});return H6(Y,{...Y._zod.def,shape:J,checks:[]})}function O5(D,Y=0){for(let X=Y;X<D.issues.length;X++)if(D.issues[X]?.continue!==!0)return!0;return!1}function W9(D,Y){return Y.map((X)=>{var Q;return(Q=X).path??(Q.path=[]),X.path.unshift(D),X})}function jY(D){return typeof D==="string"?D:D?.message}function f6(D,Y,X){let Q={...D,path:D.path??[]};if(!D.message){let J=jY(D.inst?._zod.def?.error?.(D))??jY(Y?.error?.(D))??jY(X.customError?.(D))??jY(X.localeError?.(D))??"Invalid input";Q.message=J}if(delete Q.inst,delete Q.continue,!Y?.reportInput)delete Q.input;return Q}function PC(D){if(D instanceof Set)return"set";if(D instanceof Map)return"map";if(D instanceof File)return"file";return"unknown"}function CY(D){if(Array.isArray(D))return"array";if(typeof D==="string")return"string";return"unknown"}function Yq(...D){let[Y,X,Q]=D;if(typeof Y==="string")return{message:Y,code:"custom",input:X,inst:Q};return{...Y}}function g70(D){return Object.entries(D).filter(([Y,X])=>{return Number.isNaN(Number.parseInt(Y,10))}).map((Y)=>Y[1])}class IC{constructor(...D){}}var CC=(D,Y)=>{D.name="$ZodError",Object.defineProperty(D,"_zod",{value:D._zod,enumerable:!1}),Object.defineProperty(D,"issues",{value:Y,enumerable:!1}),Object.defineProperty(D,"message",{get(){return JSON.stringify(Y,rF,2)},enumerable:!0}),Object.defineProperty(D,"toString",{value:()=>D.message,enumerable:!1})},BW=h("$ZodError",CC),xY=h("$ZodError",CC,{Parent:Error});function Xq(D,Y=(X)=>X.message){let X={},Q=[];for(let J of D.issues)if(J.path.length>0)X[J.path[0]]=X[J.path[0]]||[],X[J.path[0]].push(Y(J));else Q.push(Y(J));return{formErrors:Q,fieldErrors:X}}function Qq(D,Y){let X=Y||function(W){return W.message},Q={_errors:[]},J=(W)=>{for(let $ of W.issues)if($.code==="invalid_union"&&$.errors.length)$.errors.map((G)=>J({issues:G}));else if($.code==="invalid_key")J({issues:$.issues});else if($.code==="invalid_element")J({issues:$.issues});else if($.path.length===0)Q._errors.push(X($));else{let G=Q,B=0;while(B<$.path.length){let H=$.path[B];if(B!==$.path.length-1)G[H]=G[H]||{_errors:[]};else G[H]=G[H]||{_errors:[]},G[H]._errors.push(X($));G=G[H],B++}}};return J(D),Q}var Jq=(D)=>(Y,X,Q,J)=>{let W=Q?Object.assign(Q,{async:!1}):{async:!1},$=Y._zod.run({value:X,issues:[]},W);if($ instanceof Promise)throw new zD;if($.issues.length){let G=new(J?.Err??D)($.issues.map((B)=>f6(B,W,B6())));throw $W(G,J?.callee),G}return $.value},Wq=Jq(xY),$q=(D)=>async(Y,X,Q,J)=>{let W=Q?Object.assign(Q,{async:!0}):{async:!0},$=Y._zod.run({value:X,issues:[]},W);if($ instanceof Promise)$=await $;if($.issues.length){let G=new(J?.Err??D)($.issues.map((B)=>f6(B,W,B6())));throw $W(G,J?.callee),G}return $.value},Gq=$q(xY),Bq=(D)=>(Y,X,Q)=>{let J=Q?{...Q,async:!1}:{async:!1},W=Y._zod.run({value:X,issues:[]},J);if(W instanceof Promise)throw new zD;return W.issues.length?{success:!1,error:new(D??BW)(W.issues.map(($)=>f6($,J,B6())))}:{success:!0,data:W.value}},N5=Bq(xY),Hq=(D)=>async(Y,X,Q)=>{let J=Q?Object.assign(Q,{async:!0}):{async:!0},W=Y._zod.run({value:X,issues:[]},J);if(W instanceof Promise)W=await W;return W.issues.length?{success:!1,error:new D(W.issues.map(($)=>f6($,J,B6())))}:{success:!0,data:W.value}},Z5=Hq(xY);var xC=/^[cC][^\s-]{8,}$/,_C=/^[0-9a-z]+$/,bC=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,kC=/^[0-9a-vA-V]{20}$/,vC=/^[A-Za-z0-9]{27}$/,yC=/^[a-zA-Z0-9_-]{21}$/,fC=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;var hC=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Fq=(D)=>{if(!D)return/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${D}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`)};var gC=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;function uC(){return new RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")}var mC=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,cC=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/,lC=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,dC=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,pC=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,qq=/^[A-Za-z0-9_-]*$/,nC=/^([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+$/;var iC=/^\+(?:[0-9]){6,14}[0-9]$/,rC="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",aC=new RegExp(`^${rC}$`);function oC(D){return typeof D.precision==="number"?D.precision===-1?"(?:[01]\\d|2[0-3]):[0-5]\\d":D.precision===0?"(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d":`(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{${D.precision}}`:"(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?"}function sC(D){return new RegExp(`^${oC(D)}$`)}function tC(D){let Y=oC({precision:D.precision}),X=["Z"];if(D.local)X.push("");if(D.offset)X.push("([+-]\\d{2}:\\d{2})");let Q=`${Y}(?:${X.join("|")})`;return new RegExp(`^${rC}T(?:${Q})$`)}var eC=(D)=>{let Y=D?`[\\s\\S]{${D?.minimum??0},${D?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${Y}$`)};var Dx=/^\d+$/,Yx=/^-?\d+(?:\.\d+)?/i,Xx=/true|false/i,Qx=/null/i;var Jx=/^[^A-Z]*$/,Wx=/^[^a-z]*$/;var B8=h("$ZodCheck",(D,Y)=>{var X;D._zod??(D._zod={}),D._zod.def=Y,(X=D._zod).onattach??(X.onattach=[])}),$x={number:"number",bigint:"bigint",object:"date"},Kq=h("$ZodCheckLessThan",(D,Y)=>{B8.init(D,Y);let X=$x[typeof Y.value];D._zod.onattach.push((Q)=>{let J=Q._zod.bag,W=(Y.inclusive?J.maximum:J.exclusiveMaximum)??Number.POSITIVE_INFINITY;if(Y.value<W)if(Y.inclusive)J.maximum=Y.value;else J.exclusiveMaximum=Y.value}),D._zod.check=(Q)=>{if(Y.inclusive?Q.value<=Y.value:Q.value<Y.value)return;Q.issues.push({origin:X,code:"too_big",maximum:Y.value,input:Q.value,inclusive:Y.inclusive,inst:D,continue:!Y.abort})}}),zq=h("$ZodCheckGreaterThan",(D,Y)=>{B8.init(D,Y);let X=$x[typeof Y.value];D._zod.onattach.push((Q)=>{let J=Q._zod.bag,W=(Y.inclusive?J.minimum:J.exclusiveMinimum)??Number.NEGATIVE_INFINITY;if(Y.value>W)if(Y.inclusive)J.minimum=Y.value;else J.exclusiveMinimum=Y.value}),D._zod.check=(Q)=>{if(Y.inclusive?Q.value>=Y.value:Q.value>Y.value)return;Q.issues.push({origin:X,code:"too_small",minimum:Y.value,input:Q.value,inclusive:Y.inclusive,inst:D,continue:!Y.abort})}}),Gx=h("$ZodCheckMultipleOf",(D,Y)=>{B8.init(D,Y),D._zod.onattach.push((X)=>{var Q;(Q=X._zod.bag).multipleOf??(Q.multipleOf=Y.value)}),D._zod.check=(X)=>{if(typeof X.value!==typeof Y.value)throw Error("Cannot mix number and bigint in multiple_of check.");if(typeof X.value==="bigint"?X.value%Y.value===BigInt(0):aF(X.value,Y.value)===0)return;X.issues.push({origin:typeof X.value,code:"not_multiple_of",divisor:Y.value,input:X.value,inst:D,continue:!Y.abort})}}),Bx=h("$ZodCheckNumberFormat",(D,Y)=>{B8.init(D,Y),Y.format=Y.format||"float64";let X=Y.format?.includes("int"),Q=X?"int":"number",[J,W]=Dq[Y.format];D._zod.onattach.push(($)=>{let G=$._zod.bag;if(G.format=Y.format,G.minimum=J,G.maximum=W,X)G.pattern=Dx}),D._zod.check=($)=>{let G=$.value;if(X){if(!Number.isInteger(G)){$.issues.push({expected:Q,format:Y.format,code:"invalid_type",input:G,inst:D});return}if(!Number.isSafeInteger(G)){if(G>0)$.issues.push({input:G,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:D,origin:Q,continue:!Y.abort});else $.issues.push({input:G,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:D,origin:Q,continue:!Y.abort});return}}if(G<J)$.issues.push({origin:"number",input:G,code:"too_small",minimum:J,inclusive:!0,inst:D,continue:!Y.abort});if(G>W)$.issues.push({origin:"number",input:G,code:"too_big",maximum:W,inst:D})}});var Hx=h("$ZodCheckMaxLength",(D,Y)=>{var X;B8.init(D,Y),(X=D._zod.def).when??(X.when=(Q)=>{let J=Q.value;return!PY(J)&&J.length!==void 0}),D._zod.onattach.push((Q)=>{let J=Q._zod.bag.maximum??Number.POSITIVE_INFINITY;if(Y.maximum<J)Q._zod.bag.maximum=Y.maximum}),D._zod.check=(Q)=>{let J=Q.value;if(J.length<=Y.maximum)return;let $=CY(J);Q.issues.push({origin:$,code:"too_big",maximum:Y.maximum,inclusive:!0,input:J,inst:D,continue:!Y.abort})}}),Fx=h("$ZodCheckMinLength",(D,Y)=>{var X;B8.init(D,Y),(X=D._zod.def).when??(X.when=(Q)=>{let J=Q.value;return!PY(J)&&J.length!==void 0}),D._zod.onattach.push((Q)=>{let J=Q._zod.bag.minimum??Number.NEGATIVE_INFINITY;if(Y.minimum>J)Q._zod.bag.minimum=Y.minimum}),D._zod.check=(Q)=>{let J=Q.value;if(J.length>=Y.minimum)return;let $=CY(J);Q.issues.push({origin:$,code:"too_small",minimum:Y.minimum,inclusive:!0,input:J,inst:D,continue:!Y.abort})}}),qx=h("$ZodCheckLengthEquals",(D,Y)=>{var X;B8.init(D,Y),(X=D._zod.def).when??(X.when=(Q)=>{let J=Q.value;return!PY(J)&&J.length!==void 0}),D._zod.onattach.push((Q)=>{let J=Q._zod.bag;J.minimum=Y.length,J.maximum=Y.length,J.length=Y.length}),D._zod.check=(Q)=>{let J=Q.value,W=J.length;if(W===Y.length)return;let $=CY(J),G=W>Y.length;Q.issues.push({origin:$,...G?{code:"too_big",maximum:Y.length}:{code:"too_small",minimum:Y.length},inclusive:!0,exact:!0,input:Q.value,inst:D,continue:!Y.abort})}}),_Y=h("$ZodCheckStringFormat",(D,Y)=>{var X,Q;if(B8.init(D,Y),D._zod.onattach.push((J)=>{let W=J._zod.bag;if(W.format=Y.format,Y.pattern)W.patterns??(W.patterns=new Set),W.patterns.add(Y.pattern)}),Y.pattern)(X=D._zod).check??(X.check=(J)=>{if(Y.pattern.lastIndex=0,Y.pattern.test(J.value))return;J.issues.push({origin:"string",code:"invalid_format",format:Y.format,input:J.value,...Y.pattern?{pattern:Y.pattern.toString()}:{},inst:D,continue:!Y.abort})});else(Q=D._zod).check??(Q.check=()=>{})}),Kx=h("$ZodCheckRegex",(D,Y)=>{_Y.init(D,Y),D._zod.check=(X)=>{if(Y.pattern.lastIndex=0,Y.pattern.test(X.value))return;X.issues.push({origin:"string",code:"invalid_format",format:"regex",input:X.value,pattern:Y.pattern.toString(),inst:D,continue:!Y.abort})}}),zx=h("$ZodCheckLowerCase",(D,Y)=>{Y.pattern??(Y.pattern=Jx),_Y.init(D,Y)}),Ux=h("$ZodCheckUpperCase",(D,Y)=>{Y.pattern??(Y.pattern=Wx),_Y.init(D,Y)}),Vx=h("$ZodCheckIncludes",(D,Y)=>{B8.init(D,Y);let X=UD(Y.includes),Q=new RegExp(typeof Y.position==="number"?`^.{${Y.position}}${X}`:X);Y.pattern=Q,D._zod.onattach.push((J)=>{let W=J._zod.bag;W.patterns??(W.patterns=new Set),W.patterns.add(Q)}),D._zod.check=(J)=>{if(J.value.includes(Y.includes,Y.position))return;J.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:Y.includes,input:J.value,inst:D,continue:!Y.abort})}}),wx=h("$ZodCheckStartsWith",(D,Y)=>{B8.init(D,Y);let X=new RegExp(`^${UD(Y.prefix)}.*`);Y.pattern??(Y.pattern=X),D._zod.onattach.push((Q)=>{let J=Q._zod.bag;J.patterns??(J.patterns=new Set),J.patterns.add(X)}),D._zod.check=(Q)=>{if(Q.value.startsWith(Y.prefix))return;Q.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:Y.prefix,input:Q.value,inst:D,continue:!Y.abort})}}),Lx=h("$ZodCheckEndsWith",(D,Y)=>{B8.init(D,Y);let X=new RegExp(`.*${UD(Y.suffix)}$`);Y.pattern??(Y.pattern=X),D._zod.onattach.push((Q)=>{let J=Q._zod.bag;J.patterns??(J.patterns=new Set),J.patterns.add(X)}),D._zod.check=(Q)=>{if(Q.value.endsWith(Y.suffix))return;Q.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:Y.suffix,input:Q.value,inst:D,continue:!Y.abort})}});var Mx=h("$ZodCheckOverwrite",(D,Y)=>{B8.init(D,Y),D._zod.check=(X)=>{X.value=Y.tx(X.value)}});class Uq{constructor(D=[]){if(this.content=[],this.indent=0,this)this.args=D}indented(D){this.indent+=1,D(this),this.indent-=1}write(D){if(typeof D==="function"){D(this,{execution:"sync"}),D(this,{execution:"async"});return}let X=D.split(`
|
|
406
406
|
`).filter((W)=>W),Q=Math.min(...X.map((W)=>W.length-W.trimStart().length)),J=X.map((W)=>W.slice(Q)).map((W)=>" ".repeat(this.indent*2)+W);for(let W of J)this.content.push(W)}compile(){let D=Function,Y=this?.args,Q=[...(this?.content??[""]).map((J)=>` ${J}`)];return new D(...Y,Q.join(`
|
|
@@ -437,21 +437,21 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
437
437
|
`);if(D===-1)return null;let Y=this._buffer.toString("utf8",0,D).replace(/\r$/,"");return this._buffer=this._buffer.subarray(D+1),Rq0(Y)}clear(){this._buffer=void 0}}function Rq0(D){return O_.parse(JSON.parse(D))}function sf(D){return JSON.stringify(D)+`
|
|
438
438
|
`}class gU{constructor(D=tf.stdin,Y=tf.stdout){this._stdin=D,this._stdout=Y,this._readBuffer=new hU,this._started=!1,this._ondata=(X)=>{this._readBuffer.append(X),this.processReadBuffer()},this._onerror=(X)=>{this.onerror?.(X)}}async start(){if(this._started)throw Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){while(!0)try{let D=this._readBuffer.readMessage();if(D===null)break;this.onmessage?.(D)}catch(D){this.onerror?.(D)}}async close(){if(this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0)this._stdin.pause();this._readBuffer.clear(),this.onclose?.()}send(D){return new Promise((Y)=>{let X=sf(D);if(this._stdout.write(X))Y();else this._stdout.once("drain",Y)})}}async function uU(D,Y=!1){if(!Y)F0("Adding organization");await f0();let X={...D,apikey:D.apikey||X0()};if(!X.apikey){if(!Y)q.error("Missing API key, you need to provide an API key to add an organization");throw Error("Missing API key")}let Q=await w0(X.apikey,X.supaHost,X.supaAnon),J=await A0(Q,X.apikey,["write","all"]),{name:W,email:$}=X;if(!Y&&!W){let H=await h8({message:"Organization name:",placeholder:"My Organization"});if(E0(H))throw q.error("Canceled adding organization"),Error("Organization creation cancelled");W=H}if(!Y&&!$){let H=await h8({message:"Management email:",placeholder:"admin@example.com"});if(E0(H))throw q.error("Canceled adding organization"),Error("Organization creation cancelled");$=H}if(!W||!$){if(!Y)q.error("Missing arguments, you need to provide an organization name and management email");throw Error("Missing organization name or management email")}if(!Y)q.info(`Adding organization "${W}" to Capgo`);let{data:G,error:B}=await Q.from("orgs").insert({name:W,management_email:$,created_by:J}).select().single();if(B){if(!Y)q.error(`Could not add organization ${m(B)}`);throw Error(`Could not add organization: ${m(B)}`)}if(await Z0(X.apikey,{channel:"organization",event:"Organization Created",icon:"\uD83C\uDFE2",user_id:G.id,tags:{"org-name":W},notify:!1}).catch(()=>{}),!Y)q.success(`Organization "${W}" added to Capgo`),e("Done ✅");return G}async function y$(D){await uU(D,!1)}async function mU(D,Y,X=!1){if(!X)F0("Deleting organization");await f0();let Q={...Y,apikey:Y.apikey||X0()};if(!Q.apikey){if(!X)q.error("Missing API key, you need to provide an API key to delete an organization");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide an organization ID");throw Error("Missing organization id")}let J=await w0(Q.apikey,Q.supaHost,Q.supaAnon),W=await A0(J,Q.apikey,["write","all"]);await y4(J,D,X);let{data:$,error:G}=await J.from("orgs").select("created_by, name").eq("id",D).single();if(G||!$){if(!X)q.error(`Cannot get organization details ${m(G)}`);throw Error(`Cannot get organization details: ${m(G)}`)}if($.created_by!==W){if(X)throw Error("Deleting an organization is restricted to the organization owner");q.warn("Deleting an organization is restricted to the organization owner"),q.warn("You are not the owner of this organization"),q.warn("It's strongly recommended that you do not continue!");let H=await D8({message:"Do you want to continue?",options:[{label:"Yes",value:"yes"},{label:"No",value:"no"}]});if(E0(H)||H==="no")throw q.error("Canceled deleting the organization"),Error("Organization deletion cancelled")}if(!X&&!Q.autoConfirm){let H=await R0({message:`Are you sure you want to delete organization "${$.name}"? This action cannot be undone.`});if(E0(H)||!H)throw q.error("Canceled deleting the organization"),Error("Organization deletion cancelled")}if(!X)q.info(`Deleting organization "${$.name}"`);let{error:B}=await J.from("orgs").delete().eq("id",D);if(B){if(!X)q.error(`Could not delete organization ${m(B)}`);throw Error(`Could not delete organization: ${m(B)}`)}if(await Z0(Q.apikey,{channel:"organization",event:"Organization Deleted",icon:"\uD83D\uDDD1️",user_id:D,tags:{"org-name":$.name},notify:!1}).catch(()=>{}),!X)q.success(`Organization "${$.name}" deleted from Capgo`),e("Done ✅");return!0}async function f$(D,Y){await mU(D,Y,!1)}function jq0(D,Y){if(Y)return;if(!D.length){q.error("No organizations found");return}let X=new G1;X.headers=["Name","ID","Role","Apps","2FA Required","2FA Access"],X.rows=[];for(let J of D.toReversed()){let W=J.enforcing_2fa?"✓ Yes":"✗ No",$=J["2fa_has_access"]?"✓ Yes":"✗ No";X.rows.push([J.name??"Unknown",J.gid,J.role,J.app_count?.toString()||"0",W,$])}q.success("Organizations"),q.success(X.toString());let Q=D.filter((J)=>J.enforcing_2fa&&!J["2fa_has_access"]);if(Q.length>0){q.warn(`
|
|
439
439
|
⚠️ You don't have access to ${Q.length} organization(s) due to 2FA enforcement:`);for(let J of Q)q.warn(` - ${J.name} (${J.gid})`);q.warn(`
|
|
440
|
-
To regain access, enable 2FA on your account at https://web.capgo.app/settings/account`)}}async function cU(D,Y=!1){if(!Y)F0("List organizations");await f0();let X={...D,apikey:D.apikey||X0()};if(!X.apikey){if(!Y)q.error("Missing API key, you need to provide an API key to list organizations");throw Error("Missing API key")}let Q=await w0(X.apikey,X.supaHost,X.supaAnon);if(await A0(Q,X.apikey,["read","write","all"]),!Y)q.info("Getting organizations from Capgo");let{error:J,data:W}=await Q.rpc("get_orgs_v7");if(J){if(!Y)q.error(`Cannot get organizations ${m(J)}`);throw Error(`Cannot get organizations: ${m(J)}`)}let $=W||[];if(!Y)q.info(`Organizations found: ${$.length}`),jq0($,Y),e("Done ✅");return $}async function h$(D){await cU(D,!1)}async function lU(D,Y,X=!1){if(!X)F0("Updating organization");await f0();let Q={...Y,apikey:Y.apikey||X0()};if(!Q.apikey){if(!X)q.error("Missing API key, you need to provide an API key to update an organization");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide an organization ID");throw Error("Missing organization id")}let J=await w0(Q.apikey,Q.supaHost,Q.supaAnon);await A0(J,Q.apikey,["write","all"]),await y4(J,D,X);let{data:W,error:$}=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($||!W){if(!X)q.error(`Cannot get organization details ${m($)}`);throw Error(`Cannot get organization details: ${m($)}`)}let{name:G,email:B,enforce2fa:H}=Q,{passwordPolicy:F,minLength:K,requireUppercase:U,requireNumber:z,requireSpecial:V}=Q,{requireApikeyExpiration:w,maxApikeyExpirationDays:L,enforceHashedApiKeys:O}=Q;if(H!==void 0){if(!X){if(H&&!W.enforcing_2fa){q.info("Checking organization members 2FA status...");let{data:I,error:_}=await J.rpc("check_org_members_2fa_enabled",{org_id:D});if(_)throw q.error(`Cannot check members 2FA status: ${m(_)}`),Error("Cannot check members 2FA status");let{data:y,error:C}=await J.rpc("has_2fa_enabled");if(C)throw q.error(`Cannot check your 2FA status: ${m(C)}`),Error("Cannot check your 2FA status");let{data:c,error:S}=await J.rpc("get_identity_apikey_only",{keymode:["read","upload","write","all"]});if(S||!c)throw q.error(`Cannot get current user identity: ${S?m(S):"No user ID returned"}`),Error("Cannot get current user identity");let p=I?.filter((u)=>!u["2fa_enabled"]&&u.user_id!==c)||[];if(p.length>0||!y){if(q.warn("⚠️ Warning: Enabling 2FA enforcement will affect access"),q.message("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"),!y)q.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(p.length>0){let{data:Q0,error:x}=await J.rpc("get_org_members",{guild_id:D});if(x)throw q.error(`Cannot get organization members: ${m(x)}`),Error("Cannot get organization members");let N=new Map(Q0?.map((v)=>[v.uid,v])||[]),A=p.map((v)=>{return N.get(v.user_id)?.email||v.user_id}),R=p.length===1?"member does":"members do",P=p.length===1?"This member will":"These members will";q.warn(`${p.length} ${R} not have 2FA enabled: ${A.join(", ")}`),q.warn(`${P} lose access until they enable 2FA.`)}let u=await R0({message:"Are you sure you want to enable 2FA enforcement?"});if(E0(u)||!u)throw q.error("Canceled enabling 2FA enforcement"),Error("2FA enforcement cancelled")}q.info("Enabling 2FA enforcement for organization...")}else if(!H&&W.enforcing_2fa)q.info("Disabling 2FA enforcement for organization...")}let{error:E}=await J.from("orgs").update({enforcing_2fa:H}).eq("id",D);if(E){if(!X)q.error(`Could not update 2FA enforcement: ${m(E)}`);throw Error(`Could not update 2FA enforcement: ${m(E)}`)}if(!X)if(H)q.success("✓ 2FA enforcement enabled for this organization");else q.success("✓ 2FA enforcement disabled for this organization");if(G===void 0&&B===void 0&&!(F!==void 0||w!==void 0||L!==void 0||O!==void 0)){if(await Z0(Q.apikey,{channel:"organization",event:H?"Organization 2FA Enabled":"Organization 2FA Disabled",icon:"\uD83D\uDD10",user_id:D,tags:{"org-name":W.name,"enforce-2fa":H.toString()},notify:!1}).catch(()=>{}),!X)e("Done ✅");return{orgId:D,name:W.name,email:W.management_email,enforce2fa:H}}}if(F!==void 0){if(!X)if(F){q.info("Configuring password policy for organization...");let{data:I,error:_}=await J.rpc("check_org_members_password_policy",{org_id:D});if(_){if(!_.message?.includes("NO_RIGHTS"))q.warn(`Cannot check members password policy status: ${m(_)}`)}else if(I){let y=I.filter((C)=>!C.password_policy_compliant);if(y.length>0){q.warn(`⚠️ Warning: ${y.length} member(s) do not meet the password policy requirements`),q.warn("These members will need to update their passwords to regain access.");let C=await R0({message:"Are you sure you want to enable the password policy?"});if(E0(C)||!C)throw q.error("Canceled enabling password policy"),Error("Password policy configuration cancelled")}}}else q.info("Disabling password policy for organization...");let E={enabled:F,min_length:K??10,require_uppercase:U??!0,require_number:z??!0,require_special:V??!0},{error:j}=await J.from("orgs").update({password_policy_config:E}).eq("id",D);if(j){if(!X)q.error(`Could not update password policy: ${m(j)}`);throw Error(`Could not update password policy: ${m(j)}`)}if(!X)if(F)q.success("✓ Password policy enabled for this organization"),q.info(` - Minimum length: ${E.min_length} characters`),q.info(` - Require uppercase: ${E.require_uppercase?"Yes":"No"}`),q.info(` - Require number: ${E.require_number?"Yes":"No"}`),q.info(` - Require special character: ${E.require_special?"Yes":"No"}`);else q.success("✓ Password policy disabled for this organization");if(G===void 0&&B===void 0&&H===void 0&&w===void 0&&L===void 0&&O===void 0){if(await Z0(Q.apikey,{channel:"organization",event:F?"Password Policy Enabled":"Password Policy Disabled",icon:"\uD83D\uDD11",user_id:D,tags:{"org-name":W.name},notify:!1}).catch(()=>{}),!X)e("Done ✅");return{orgId:D,name:W.name,email:W.management_email,passwordPolicy:F}}}if(w!==void 0||L!==void 0||O!==void 0){if(!X)q.info("Updating API key security settings...");if(L!==void 0&&L!==null){if(L<1||L>365){if(!X)q.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 E={};if(w!==void 0)E.require_apikey_expiration=w;if(L!==void 0)E.max_apikey_expiration_days=L;if(O!==void 0)E.enforce_hashed_api_keys=O;let{error:j}=await J.from("orgs").update(E).eq("id",D);if(j){if(!X)q.error(`Could not update API key settings: ${m(j)}`);throw Error(`Could not update API key settings: ${m(j)}`)}if(!X){if(w!==void 0)q.success(`✓ API key expiration requirement: ${w?"Enabled":"Disabled"}`);if(L!==void 0)if(L===null)q.success("✓ Maximum API key expiration days: No limit");else q.success(`✓ Maximum API key expiration days: ${L}`);if(O!==void 0)q.success(`✓ Hashed API keys enforcement: ${O?"Enabled":"Disabled"}`)}if(G===void 0&&B===void 0&&H===void 0&&F===void 0){if(await Z0(Q.apikey,{channel:"organization",event:"API Key Settings Updated",icon:"\uD83D\uDD10",user_id:D,tags:{"org-name":W.name},notify:!1}).catch(()=>{}),!X)e("Done ✅");return{orgId:D,name:W.name,email:W.management_email}}}if(!X&&!G){let E=await h8({message:"New organization name:",placeholder:W.name||"My Organization"});if(E0(E))throw q.error("Canceled updating organization"),Error("Organization update cancelled");G=E}if(!X&&!B){let E=await h8({message:"Management email:",placeholder:W.management_email||"admin@example.com"});if(E0(E))throw q.error("Canceled updating organization"),Error("Organization update cancelled");B=E}if(!G||!B){if(!X)q.error("Missing arguments, you need to provide an organization name and management email");throw Error("Missing organization name or management email")}if(!X)q.info(`Updating organization "${D}"`);let{error:M}=await J.from("orgs").update({name:G,management_email:B}).eq("id",D);if(M){if(!X)q.error(`Could not update organization ${m(M)}`);throw Error(`Could not update organization: ${m(M)}`)}if(await Z0(Q.apikey,{channel:"organization",event:"Organization Updated",icon:"✏️",user_id:D,tags:{"org-name":G},notify:!1}).catch(()=>{}),!X)q.success("Organization updated"),e("Done ✅");return{orgId:D,name:G,email:B,enforce2fa:H??W.enforcing_2fa}}async function g$(D,Y){await lU(D,Y,!1)}async function dU(D,Y=!1){if(!Y)F0("Getting user id");let X={...D,apikey:D.apikey||X0()};if(!X.apikey){if(!Y)q.error("Missing API key, you need to provide an API key to fetch the user id");throw Error("Missing API key")}try{let Q=await w0(X.apikey,X.supaHost,X.supaAnon),J=await A0(Q,X.apikey,["read","all","write"]);if(!Y)e(`Done ✅: ${J}`);return J}catch(Q){if(!Y)q.error(`Error getting user id ${m(Q)}`);throw Q instanceof Error?Q:Error(String(Q))}}async function ef(D){await dU(D,!1)}function a0(D){let Y=D instanceof Error?D.message:String(D),X=I4(D);return{success:!1,error:Y,isSecurityPolicyError:X.isSecurityPolicyError,securityPolicyMessage:X.isSecurityPolicyError?X.message:void 0}}class pU{apikey;supaHost;supaAnon;constructor(D){this.apikey=D?.apikey,this.supaHost=D?.supaHost,this.supaAnon=D?.supaAnon}async login(D){try{return await KY(D.apikey,{local:D.local??!1,supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon},!0),{success:!0}}catch(Y){return a0(Y)}}async doctor(D){try{return{success:!0,data:await C2({packageJson:D?.packageJson},!0)}}catch(Y){return a0(Y)}}async addApp(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,icon:D.icon};return await i7(D.appId,Y,void 0,!0),{success:!0}}catch(Y){return a0(Y)}}async updateApp(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,icon:D.icon,retention:D.retention};return await _2(D.appId,Y,!0),{success:!0}}catch(Y){return a0(Y)}}async deleteApp(D,Y=!1){try{let X={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return await I2(D,X,!1,Y),{success:!0}}catch(X){return a0(X)}}async listApps(){try{let D={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return{success:!0,data:(await x2(D,!1)).map((Q)=>({appId:Q.app_id,name:Q.name||"Unknown",iconUrl:Q.icon_url||void 0,createdAt:new Date(Q.created_at||"")}))}}catch(D){return a0(D)}}async getAccountId(D){try{let Y={apikey:D?.apikey||this.apikey||X0(!0),supaHost:D?.supaHost||this.supaHost,supaAnon:D?.supaAnon||this.supaAnon};return{success:!0,data:await dU(Y,!0)}}catch(Y){return a0(Y)}}async checkBundleCompatibility(D){try{let Y={apikey:D.apikey||this.apikey||X0(!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 t7(D.appId,Y,!0)).finalCompatibility}}catch(Y){return a0(Y)}}async encryptBundle(D){try{return{success:!0,data:await a2(D.zipPath,D.checksum,{key:D.keyPath,keyData:D.keyData,json:D.json,packageJson:D.packageJson},!0)}}catch(Y){return a0(Y)}}async decryptBundle(D){try{return{success:!0,data:await n2(D.zipPath,D.ivSessionKey,{key:D.keyPath,keyData:D.keyData,checksum:D.checksum,packageJson:D.packageJson},!0)}}catch(Y){return a0(Y)}}async zipBundle(D){try{return{success:!0,data:await jF(D.appId,{apikey:this.apikey||X0(!0),path:D.path,bundle:D.bundle,name:D.name,codeCheck:D.codeCheck,json:D.json,keyV2:D.keyV2,packageJson:D.packageJson},!0)}}catch(Y){return a0(Y)}}async uploadBundle(D){try{let Y={apikey:D.apikey||this.apikey||X0(!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 o4(D.appId,Y,!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(Y){return a0(Y)}}async listBundles(D){try{let Y=this.apikey||X0(!0),X=await w0(Y,this.supaHost,this.supaAnon);return{success:!0,data:(await l4(X,D)).map((W)=>({id:W.id.toString(),version:W.name,uploadedAt:new Date(W.created_at||""),size:0,encrypted:W.session_key!==null}))}}catch(Y){return a0(Y)}}async deleteBundle(D,Y){try{let X={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon,bundle:Y};return await i2(Y,D,X,!0),{success:!0}}catch(X){return a0(X)}}async cleanupBundles(D){try{let Y={apikey:D.apikey||this.apikey||X0(!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 c2(D.appId,Y,!0)}}catch(Y){return a0(Y)}}async requestBuild(D){try{let Y=D.credentials,X={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,path:D.path,platform:D.platform,userId:D.userId,buildCertificateBase64:Y?.BUILD_CERTIFICATE_BASE64,buildProvisionProfileBase64:Y?.BUILD_PROVISION_PROFILE_BASE64,buildProvisionProfileBase64Prod:Y?.BUILD_PROVISION_PROFILE_BASE64_PROD,p12Password:Y?.P12_PASSWORD,appleKeyId:Y?.APPLE_KEY_ID,appleIssuerId:Y?.APPLE_ISSUER_ID,appleKeyContent:Y?.APPLE_KEY_CONTENT,appStoreConnectTeamId:Y?.APP_STORE_CONNECT_TEAM_ID,androidKeystoreFile:Y?.ANDROID_KEYSTORE_FILE,keystoreKeyAlias:Y?.KEYSTORE_KEY_ALIAS,keystoreKeyPassword:Y?.KEYSTORE_KEY_PASSWORD,keystoreStorePassword:Y?.KEYSTORE_STORE_PASSWORD,playConfigJson:Y?.PLAY_CONFIG_JSON},Q=await g2(D.appId,X,!0);if(Q.success&&Q.jobId)return{success:!0,data:{jobId:Q.jobId,uploadUrl:Q.uploadUrl||"",status:Q.status||"unknown"}};return{success:!1,error:Q.error||"Unknown error during build request"}}catch(Y){return a0(Y)}}async getCurrentBundle(D,Y,X){try{let Q={apikey:X?.apikey||this.apikey||X0(!0),quiet:!0,supaHost:X?.supaHost||this.supaHost,supaAnon:X?.supaAnon||this.supaAnon};return{success:!0,data:await TF(Y,D,Q,!0)}}catch(Q){return a0(Q)}}async addChannel(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,default:D.default,selfAssign:D.selfAssign};return await FY(D.channelId,D.appId,Y,!0),{success:!0}}catch(Y){return a0(Y)}}async updateChannel(D){try{let Y={apikey:D.apikey||this.apikey||X0(!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 IF(D.channelId,D.appId,Y,!0),{success:!0}}catch(Y){return a0(Y)}}async deleteChannel(D,Y,X=!1){try{let Q={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon,deleteBundle:X,successIfNotFound:!1};return await SF(D,Y,Q,!0),{success:!0}}catch(Q){return a0(Q)}}async listChannels(D){try{let Y={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return{success:!0,data:await PF(D,Y,!0)}}catch(Y){return a0(Y)}}async generateEncryptionKeys(D){try{return await qY({force:D?.force,setupChannel:D?.setupChannel},!0),{success:!0}}catch(Y){return a0(Y)}}async saveEncryptionKey(D){try{return await yF({key:D?.keyPath,keyData:D?.keyData,setupChannel:D?.setupChannel},!0),{success:!0}}catch(Y){return a0(Y)}}async deleteLegacyEncryptionKey(D){try{return{success:!0,data:{deleted:await fF({force:D?.force,setupChannel:D?.setupChannel},!0)}}}catch(Y){return a0(Y)}}async listOrganizations(D){try{let Y={apikey:D?.apikey||this.apikey||X0(!0),supaHost:D?.supaHost||this.supaHost,supaAnon:D?.supaAnon||this.supaAnon};return{success:!0,data:(await cU(Y,!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(Y){return a0(Y)}}async addOrganization(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,email:D.email},X=await uU(Y,!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(Y){return a0(Y)}}async updateOrganization(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,email:D.email},X=await lU(D.orgId,Y,!0);return{success:!0,data:{id:X.orgId,name:X.name,email:X.email}}}catch(Y){return a0(Y)}}async deleteOrganization(D,Y){try{let X={apikey:Y?.apikey||this.apikey||X0(!0),supaHost:Y?.supaHost||this.supaHost,supaAnon:Y?.supaAnon||this.supaAnon,autoConfirm:Y?.autoConfirm??!0};return{success:!0,data:{deleted:await mU(D,X,!0)}}}catch(X){return a0(X)}}async getStats(D){try{let Y=D.apikey||this.apikey||X0(!0),X=await c8(),Q={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:Y},body:JSON.stringify(Q)});if(!J.ok)throw Error(`HTTP error! status: ${J.status}`);return{success:!0,data:(await J.json()).map((G)=>({appId:G.app_id,deviceId:G.device_id,action:G.action,versionId:G.version_id,version:G.version,createdAt:G.created_at}))}}catch(Y){return a0(Y)}}async setAppSetting(D,Y){try{return await b2(D,{apikey:Y.apikey||this.apikey||X0(!0),bool:Y.bool,string:Y.string},!0),{success:!0}}catch(X){return a0(X)}}}function c1(D){let Y=D.error||"Unknown error";if(D.isSecurityPolicyError&&D.securityPolicyMessage)Y=`Security Policy Error:
|
|
440
|
+
To regain access, enable 2FA on your account at https://web.capgo.app/settings/account`)}}async function cU(D,Y=!1){if(!Y)F0("List organizations");await f0();let X={...D,apikey:D.apikey||X0()};if(!X.apikey){if(!Y)q.error("Missing API key, you need to provide an API key to list organizations");throw Error("Missing API key")}let Q=await w0(X.apikey,X.supaHost,X.supaAnon);if(await A0(Q,X.apikey,["read","write","all"]),!Y)q.info("Getting organizations from Capgo");let{error:J,data:W}=await Q.rpc("get_orgs_v7");if(J){if(!Y)q.error(`Cannot get organizations ${m(J)}`);throw Error(`Cannot get organizations: ${m(J)}`)}let $=W||[];if(!Y)q.info(`Organizations found: ${$.length}`),jq0($,Y),e("Done ✅");return $}async function h$(D){await cU(D,!1)}async function lU(D,Y,X=!1){if(!X)F0("Updating organization");await f0();let Q={...Y,apikey:Y.apikey||X0()};if(!Q.apikey){if(!X)q.error("Missing API key, you need to provide an API key to update an organization");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide an organization ID");throw Error("Missing organization id")}let J=await w0(Q.apikey,Q.supaHost,Q.supaAnon);await A0(J,Q.apikey,["write","all"]),await y4(J,D,X);let{data:W,error:$}=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($||!W){if(!X)q.error(`Cannot get organization details ${m($)}`);throw Error(`Cannot get organization details: ${m($)}`)}let{name:G,email:B,enforce2fa:H}=Q,{passwordPolicy:F,minLength:K,requireUppercase:U,requireNumber:z,requireSpecial:V}=Q,{requireApikeyExpiration:w,maxApikeyExpirationDays:L,enforceHashedApiKeys:O}=Q;if(H!==void 0){if(!X){if(H&&!W.enforcing_2fa){q.info("Checking organization members 2FA status...");let{data:I,error:_}=await J.rpc("check_org_members_2fa_enabled",{org_id:D});if(_)throw q.error(`Cannot check members 2FA status: ${m(_)}`),Error("Cannot check members 2FA status");let{data:y,error:C}=await J.rpc("has_2fa_enabled");if(C)throw q.error(`Cannot check your 2FA status: ${m(C)}`),Error("Cannot check your 2FA status");let{data:c,error:S}=await J.rpc("get_identity_apikey_only",{keymode:["read","upload","write","all"]});if(S||!c)throw q.error(`Cannot get current user identity: ${S?m(S):"No user ID returned"}`),Error("Cannot get current user identity");let p=I?.filter((u)=>!u["2fa_enabled"]&&u.user_id!==c)||[];if(p.length>0||!y){if(q.warn("⚠️ Warning: Enabling 2FA enforcement will affect access"),q.message("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"),!y)q.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(p.length>0){let{data:Q0,error:x}=await J.rpc("get_org_members",{guild_id:D});if(x)throw q.error(`Cannot get organization members: ${m(x)}`),Error("Cannot get organization members");let N=new Map(Q0?.map((v)=>[v.uid,v])||[]),A=p.map((v)=>{return N.get(v.user_id)?.email||v.user_id}),R=p.length===1?"member does":"members do",P=p.length===1?"This member will":"These members will";q.warn(`${p.length} ${R} not have 2FA enabled: ${A.join(", ")}`),q.warn(`${P} lose access until they enable 2FA.`)}let u=await R0({message:"Are you sure you want to enable 2FA enforcement?"});if(E0(u)||!u)throw q.error("Canceled enabling 2FA enforcement"),Error("2FA enforcement cancelled")}q.info("Enabling 2FA enforcement for organization...")}else if(!H&&W.enforcing_2fa)q.info("Disabling 2FA enforcement for organization...")}let{error:E}=await J.from("orgs").update({enforcing_2fa:H}).eq("id",D);if(E){if(!X)q.error(`Could not update 2FA enforcement: ${m(E)}`);throw Error(`Could not update 2FA enforcement: ${m(E)}`)}if(!X)if(H)q.success("✓ 2FA enforcement enabled for this organization");else q.success("✓ 2FA enforcement disabled for this organization");if(G===void 0&&B===void 0&&!(F!==void 0||w!==void 0||L!==void 0||O!==void 0)){if(await Z0(Q.apikey,{channel:"organization",event:H?"Organization 2FA Enabled":"Organization 2FA Disabled",icon:"\uD83D\uDD10",user_id:D,tags:{"org-name":W.name,"enforce-2fa":H.toString()},notify:!1}).catch(()=>{}),!X)e("Done ✅");return{orgId:D,name:W.name,email:W.management_email,enforce2fa:H}}}if(F!==void 0){if(!X)if(F){q.info("Configuring password policy for organization...");let{data:I,error:_}=await J.rpc("check_org_members_password_policy",{org_id:D});if(_){if(!_.message?.includes("NO_RIGHTS"))q.warn(`Cannot check members password policy status: ${m(_)}`)}else if(I){let y=I.filter((C)=>!C.password_policy_compliant);if(y.length>0){q.warn(`⚠️ Warning: ${y.length} member(s) do not meet the password policy requirements`),q.warn("These members will need to update their passwords to regain access.");let C=await R0({message:"Are you sure you want to enable the password policy?"});if(E0(C)||!C)throw q.error("Canceled enabling password policy"),Error("Password policy configuration cancelled")}}}else q.info("Disabling password policy for organization...");let E={enabled:F,min_length:K??10,require_uppercase:U??!0,require_number:z??!0,require_special:V??!0},{error:j}=await J.from("orgs").update({password_policy_config:E}).eq("id",D);if(j){if(!X)q.error(`Could not update password policy: ${m(j)}`);throw Error(`Could not update password policy: ${m(j)}`)}if(!X)if(F)q.success("✓ Password policy enabled for this organization"),q.info(` - Minimum length: ${E.min_length} characters`),q.info(` - Require uppercase: ${E.require_uppercase?"Yes":"No"}`),q.info(` - Require number: ${E.require_number?"Yes":"No"}`),q.info(` - Require special character: ${E.require_special?"Yes":"No"}`);else q.success("✓ Password policy disabled for this organization");if(G===void 0&&B===void 0&&H===void 0&&w===void 0&&L===void 0&&O===void 0){if(await Z0(Q.apikey,{channel:"organization",event:F?"Password Policy Enabled":"Password Policy Disabled",icon:"\uD83D\uDD11",user_id:D,tags:{"org-name":W.name},notify:!1}).catch(()=>{}),!X)e("Done ✅");return{orgId:D,name:W.name,email:W.management_email,passwordPolicy:F}}}if(w!==void 0||L!==void 0||O!==void 0){if(!X)q.info("Updating API key security settings...");if(L!==void 0&&L!==null){if(L<1||L>365){if(!X)q.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 E={};if(w!==void 0)E.require_apikey_expiration=w;if(L!==void 0)E.max_apikey_expiration_days=L;if(O!==void 0)E.enforce_hashed_api_keys=O;let{error:j}=await J.from("orgs").update(E).eq("id",D);if(j){if(!X)q.error(`Could not update API key settings: ${m(j)}`);throw Error(`Could not update API key settings: ${m(j)}`)}if(!X){if(w!==void 0)q.success(`✓ API key expiration requirement: ${w?"Enabled":"Disabled"}`);if(L!==void 0)if(L===null)q.success("✓ Maximum API key expiration days: No limit");else q.success(`✓ Maximum API key expiration days: ${L}`);if(O!==void 0)q.success(`✓ Hashed API keys enforcement: ${O?"Enabled":"Disabled"}`)}if(G===void 0&&B===void 0&&H===void 0&&F===void 0){if(await Z0(Q.apikey,{channel:"organization",event:"API Key Settings Updated",icon:"\uD83D\uDD10",user_id:D,tags:{"org-name":W.name},notify:!1}).catch(()=>{}),!X)e("Done ✅");return{orgId:D,name:W.name,email:W.management_email}}}if(!X&&!G){let E=await h8({message:"New organization name:",placeholder:W.name||"My Organization"});if(E0(E))throw q.error("Canceled updating organization"),Error("Organization update cancelled");G=E}if(!X&&!B){let E=await h8({message:"Management email:",placeholder:W.management_email||"admin@example.com"});if(E0(E))throw q.error("Canceled updating organization"),Error("Organization update cancelled");B=E}if(!G||!B){if(!X)q.error("Missing arguments, you need to provide an organization name and management email");throw Error("Missing organization name or management email")}if(!X)q.info(`Updating organization "${D}"`);let{error:M}=await J.from("orgs").update({name:G,management_email:B}).eq("id",D);if(M){if(!X)q.error(`Could not update organization ${m(M)}`);throw Error(`Could not update organization: ${m(M)}`)}if(await Z0(Q.apikey,{channel:"organization",event:"Organization Updated",icon:"✏️",user_id:D,tags:{"org-name":G},notify:!1}).catch(()=>{}),!X)q.success("Organization updated"),e("Done ✅");return{orgId:D,name:G,email:B,enforce2fa:H??W.enforcing_2fa}}async function g$(D,Y){await lU(D,Y,!1)}async function dU(D,Y=!1){if(!Y)F0("Getting user id");let X={...D,apikey:D.apikey||X0()};if(!X.apikey){if(!Y)q.error("Missing API key, you need to provide an API key to fetch the user id");throw Error("Missing API key")}try{let Q=await w0(X.apikey,X.supaHost,X.supaAnon),J=await A0(Q,X.apikey,["read","all","write"]);if(!Y)e(`Done ✅: ${J}`);return J}catch(Q){if(!Y)q.error(`Error getting user id ${m(Q)}`);throw Q instanceof Error?Q:Error(String(Q))}}async function ef(D){await dU(D,!1)}function a0(D){let Y=D instanceof Error?D.message:String(D),X=I4(D);return{success:!1,error:Y,isSecurityPolicyError:X.isSecurityPolicyError,securityPolicyMessage:X.isSecurityPolicyError?X.message:void 0}}class pU{apikey;supaHost;supaAnon;constructor(D){this.apikey=D?.apikey,this.supaHost=D?.supaHost,this.supaAnon=D?.supaAnon}async login(D){try{return await KY(D.apikey,{local:D.local??!1,supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon},!0),{success:!0}}catch(Y){return a0(Y)}}async doctor(D){try{return{success:!0,data:await C2({packageJson:D?.packageJson},!0)}}catch(Y){return a0(Y)}}async addApp(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,icon:D.icon};return await i7(D.appId,Y,void 0,!0),{success:!0}}catch(Y){return a0(Y)}}async updateApp(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,icon:D.icon,retention:D.retention};return await _2(D.appId,Y,!0),{success:!0}}catch(Y){return a0(Y)}}async deleteApp(D,Y=!1){try{let X={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return await I2(D,X,!1,Y),{success:!0}}catch(X){return a0(X)}}async listApps(){try{let D={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return{success:!0,data:(await x2(D,!1)).map((Q)=>({appId:Q.app_id,name:Q.name||"Unknown",iconUrl:Q.icon_url||void 0,createdAt:new Date(Q.created_at||"")}))}}catch(D){return a0(D)}}async getAccountId(D){try{let Y={apikey:D?.apikey||this.apikey||X0(!0),supaHost:D?.supaHost||this.supaHost,supaAnon:D?.supaAnon||this.supaAnon};return{success:!0,data:await dU(Y,!0)}}catch(Y){return a0(Y)}}async checkBundleCompatibility(D){try{let Y={apikey:D.apikey||this.apikey||X0(!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 t7(D.appId,Y,!0)).finalCompatibility}}catch(Y){return a0(Y)}}async encryptBundle(D){try{return{success:!0,data:await a2(D.zipPath,D.checksum,{key:D.keyPath,keyData:D.keyData,json:D.json,packageJson:D.packageJson},!0)}}catch(Y){return a0(Y)}}async decryptBundle(D){try{return{success:!0,data:await n2(D.zipPath,D.ivSessionKey,{key:D.keyPath,keyData:D.keyData,checksum:D.checksum,packageJson:D.packageJson},!0)}}catch(Y){return a0(Y)}}async zipBundle(D){try{return{success:!0,data:await jF(D.appId,{apikey:this.apikey||X0(!0),path:D.path,bundle:D.bundle,name:D.name,codeCheck:D.codeCheck,json:D.json,keyV2:D.keyV2,packageJson:D.packageJson},!0)}}catch(Y){return a0(Y)}}async uploadBundle(D){try{let Y={apikey:D.apikey||this.apikey||X0(!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 o4(D.appId,Y,!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(Y){return a0(Y)}}async listBundles(D){try{let Y=this.apikey||X0(!0),X=await w0(Y,this.supaHost,this.supaAnon);return{success:!0,data:(await l4(X,D)).map((W)=>({id:W.id.toString(),version:W.name,uploadedAt:new Date(W.created_at||""),size:0,encrypted:W.session_key!==null}))}}catch(Y){return a0(Y)}}async deleteBundle(D,Y){try{let X={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon,bundle:Y};return await i2(Y,D,X,!0),{success:!0}}catch(X){return a0(X)}}async cleanupBundles(D){try{let Y={apikey:D.apikey||this.apikey||X0(!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 c2(D.appId,Y,!0)}}catch(Y){return a0(Y)}}async requestBuild(D){try{let Y=D.credentials,X={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,path:D.path,platform:D.platform,userId:D.userId,buildCertificateBase64:Y?.BUILD_CERTIFICATE_BASE64,buildProvisionProfileBase64:Y?.BUILD_PROVISION_PROFILE_BASE64,buildProvisionProfileBase64Prod:Y?.BUILD_PROVISION_PROFILE_BASE64_PROD,p12Password:Y?.P12_PASSWORD,appleKeyId:Y?.APPLE_KEY_ID,appleIssuerId:Y?.APPLE_ISSUER_ID,appleKeyContent:Y?.APPLE_KEY_CONTENT,appStoreConnectTeamId:Y?.APP_STORE_CONNECT_TEAM_ID,androidKeystoreFile:Y?.ANDROID_KEYSTORE_FILE,keystoreKeyAlias:Y?.KEYSTORE_KEY_ALIAS,keystoreKeyPassword:Y?.KEYSTORE_KEY_PASSWORD,keystoreStorePassword:Y?.KEYSTORE_STORE_PASSWORD,playConfigJson:Y?.PLAY_CONFIG_JSON},Q=await g2(D.appId,X,!0);if(Q.success&&Q.jobId)return{success:!0,data:{jobId:Q.jobId,uploadUrl:Q.uploadUrl||"",status:Q.status||"unknown"}};return{success:!1,error:Q.error||"Unknown error during build request"}}catch(Y){return a0(Y)}}async getCurrentBundle(D,Y,X){try{let Q={apikey:X?.apikey||this.apikey||X0(!0),quiet:!0,supaHost:X?.supaHost||this.supaHost,supaAnon:X?.supaAnon||this.supaAnon};return{success:!0,data:await TF(Y,D,Q,!0)}}catch(Q){return a0(Q)}}async addChannel(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,default:D.default,selfAssign:D.selfAssign};return await FY(D.channelId,D.appId,Y,!0),{success:!0}}catch(Y){return a0(Y)}}async updateChannel(D){try{let Y={apikey:D.apikey||this.apikey||X0(!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 IF(D.channelId,D.appId,Y,!0),{success:!0}}catch(Y){return a0(Y)}}async deleteChannel(D,Y,X=!1){try{let Q={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon,deleteBundle:X,successIfNotFound:!1};return await SF(D,Y,Q,!0),{success:!0}}catch(Q){return a0(Q)}}async listChannels(D){try{let Y={apikey:this.apikey||X0(!0),supaHost:this.supaHost,supaAnon:this.supaAnon};return{success:!0,data:await PF(D,Y,!0)}}catch(Y){return a0(Y)}}async generateEncryptionKeys(D){try{return await qY({force:D?.force,setupChannel:D?.setupChannel},!0),{success:!0}}catch(Y){return a0(Y)}}async saveEncryptionKey(D){try{return await yF({key:D?.keyPath,keyData:D?.keyData,setupChannel:D?.setupChannel},!0),{success:!0}}catch(Y){return a0(Y)}}async deleteLegacyEncryptionKey(D){try{return{success:!0,data:{deleted:await fF({force:D?.force,setupChannel:D?.setupChannel},!0)}}}catch(Y){return a0(Y)}}async listOrganizations(D){try{let Y={apikey:D?.apikey||this.apikey||X0(!0),supaHost:D?.supaHost||this.supaHost,supaAnon:D?.supaAnon||this.supaAnon};return{success:!0,data:(await cU(Y,!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(Y){return a0(Y)}}async addOrganization(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,email:D.email},X=await uU(Y,!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(Y){return a0(Y)}}async updateOrganization(D){try{let Y={apikey:D.apikey||this.apikey||X0(!0),supaHost:D.supaHost||this.supaHost,supaAnon:D.supaAnon||this.supaAnon,name:D.name,email:D.email},X=await lU(D.orgId,Y,!0);return{success:!0,data:{id:X.orgId,name:X.name,email:X.email}}}catch(Y){return a0(Y)}}async deleteOrganization(D,Y){try{let X={apikey:Y?.apikey||this.apikey||X0(!0),supaHost:Y?.supaHost||this.supaHost,supaAnon:Y?.supaAnon||this.supaAnon,autoConfirm:Y?.autoConfirm??!0};return{success:!0,data:{deleted:await mU(D,X,!0)}}}catch(X){return a0(X)}}async getStats(D){try{let Y=D.apikey||this.apikey||X0(!0),X=await c8(),Q={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:Y},body:JSON.stringify(Q)});if(!J.ok)throw Error(`HTTP error! status: ${J.status}`);return{success:!0,data:(await J.json()).map((G)=>({appId:G.app_id,deviceId:G.device_id,action:G.action,versionId:G.version_id,version:G.version,createdAt:G.created_at}))}}catch(Y){return a0(Y)}}async setAppSetting(D,Y){try{return await b2(D,{apikey:Y.apikey||this.apikey||X0(!0),bool:Y.bool,string:Y.string},!0),{success:!0}}catch(X){return a0(X)}}}function m1(D){let Y=D.error||"Unknown error";if(D.isSecurityPolicyError&&D.securityPolicyMessage)Y=`Security Policy Error:
|
|
441
441
|
|
|
442
|
-
${D.securityPolicyMessage}`;return{content:[{type:"text",text:Y}],isError:!0}}async function Dh(){let D=new fU({name:"capgo",version:f8.version}),Y=X0(!0),X=new pU({apikey:Y});D.tool("capgo_list_apps","List all apps registered in your Capgo Cloud account",{},async()=>{let J=await X.listApps();if(!J.success)return c1(J);return{content:[{type:"text",text:JSON.stringify(J.data,null,2)}]}}),D.tool("capgo_add_app","Register a new app in Capgo Cloud",{appId:G0.string().describe("App ID in reverse domain format (e.g., com.example.app)"),name:G0.string().optional().describe("Display name for the app"),icon:G0.string().optional().describe("Path to app icon file")},async({appId:J,name:W,icon:$})=>{let G=await X.addApp({appId:J,name:W,icon:$});if(!G.success)return c1(G);return{content:[{type:"text",text:`Successfully added app: ${J}`}]}}),D.tool("capgo_update_app","Update settings for an existing app in Capgo Cloud",{appId:G0.string().describe("App ID to update"),name:G0.string().optional().describe("New display name"),icon:G0.string().optional().describe("New icon path"),retention:G0.number().optional().describe("Days to keep old bundles (0 = infinite)")},async({appId:J,name:W,icon:$,retention:G})=>{let B=await X.updateApp({appId:J,name:W,icon:$,retention:G});if(!B.success)return c1(B);return{content:[{type:"text",text:`Successfully updated app: ${J}`}]}}),D.tool("capgo_delete_app","Delete an app from Capgo Cloud",{appId:G0.string().describe("App ID to delete")},async({appId:J})=>{let W=await X.deleteApp(J,!0);if(!W.success)return c1(W);return{content:[{type:"text",text:`Successfully deleted app: ${J}`}]}}),D.tool("capgo_upload_bundle","Upload a new app bundle to Capgo Cloud for distribution",{appId:G0.string().describe("App ID to upload bundle for"),path:G0.string().describe("Path to the build folder to upload"),bundle:G0.string().optional().describe("Bundle version number"),channel:G0.string().optional().describe("Channel to link the bundle to"),comment:G0.string().optional().describe("Comment or release notes for this version"),minUpdateVersion:G0.string().optional().describe("Minimum version required to update to this version"),autoMinUpdateVersion:G0.boolean().optional().describe("Automatically set min update version based on native packages"),encrypt:G0.boolean().optional().describe("Enable encryption for the bundle")},async({appId:J,path:W,bundle:$,channel:G,comment:B,minUpdateVersion:H,autoMinUpdateVersion:F,encrypt:K})=>{let U=await X.uploadBundle({appId:J,path:W,bundle:$,channel:G,comment:B,minUpdateVersion:H,autoMinUpdateVersion:F,encrypt:K});if(!U.success)return c1(U);return{content:[{type:"text",text:JSON.stringify({message:"Bundle uploaded successfully",bundleId:U.bundleId,checksum:U.checksum,skipped:U.skipped,reason:U.reason},null,2)}]}}),D.tool("capgo_list_bundles","List all bundles uploaded for an app",{appId:G0.string().describe("App ID to list bundles for")},async({appId:J})=>{let W=await X.listBundles(J);if(!W.success)return c1(W);return{content:[{type:"text",text:JSON.stringify(W.data,null,2)}]}}),D.tool("capgo_delete_bundle","Delete a specific bundle from Capgo Cloud",{appId:G0.string().describe("App ID"),bundleId:G0.string().describe("Bundle version to delete")},async({appId:J,bundleId:W})=>{let $=await X.deleteBundle(J,W);if(!$.success)return c1($);return{content:[{type:"text",text:`Successfully deleted bundle: ${W}`}]}}),D.tool("capgo_cleanup_bundles","Delete old bundles, keeping only recent versions",{appId:G0.string().describe("App ID to cleanup bundles for"),keep:G0.number().optional().describe("Number of versions to keep (default: 4)"),bundle:G0.string().optional().describe("Bundle version pattern to cleanup"),force:G0.boolean().optional().describe("Force removal without confirmation"),ignoreChannel:G0.boolean().optional().describe("Delete bundles even if linked to channels")},async({appId:J,keep:W,bundle:$,force:G,ignoreChannel:B})=>{let H=await X.cleanupBundles({appId:J,keep:W,bundle:$,force:G??!0,ignoreChannel:B});if(!H.success)return c1(H);return{content:[{type:"text",text:JSON.stringify({message:"Cleanup completed",removed:H.data?.removed,kept:H.data?.kept},null,2)}]}}),D.tool("capgo_check_compatibility","Check bundle compatibility with a specific channel",{appId:G0.string().describe("App ID to check"),channel:G0.string().describe("Channel to check compatibility with"),packageJson:G0.string().optional().describe("Path to package.json for monorepos")},async({appId:J,channel:W,packageJson:$})=>{let G=await X.checkBundleCompatibility({appId:J,channel:W,packageJson:$});if(!G.success)return c1(G);return{content:[{type:"text",text:JSON.stringify(G.data,null,2)}]}}),D.tool("capgo_list_channels","List all channels for an app",{appId:G0.string().describe("App ID to list channels for")},async({appId:J})=>{let W=await X.listChannels(J);if(!W.success)return c1(W);return{content:[{type:"text",text:JSON.stringify(W.data,null,2)}]}}),D.tool("capgo_add_channel","Create a new distribution channel for an app",{appId:G0.string().describe("App ID"),channelId:G0.string().describe("Channel name/ID to create"),default:G0.boolean().optional().describe("Set as default channel"),selfAssign:G0.boolean().optional().describe("Allow devices to self-assign to this channel")},async({appId:J,channelId:W,default:$,selfAssign:G})=>{let B=await X.addChannel({appId:J,channelId:W,default:$,selfAssign:G});if(!B.success)return c1(B);return{content:[{type:"text",text:`Successfully created channel: ${W}`}]}}),D.tool("capgo_update_channel","Update channel settings including linked bundle and targeting options",{appId:G0.string().describe("App ID"),channelId:G0.string().describe("Channel name/ID to update"),bundle:G0.string().optional().describe("Bundle version to link to this channel"),state:G0.string().optional().describe('Channel state: "default" or "normal"'),downgrade:G0.boolean().optional().describe("Allow downgrading to versions below native"),ios:G0.boolean().optional().describe("Enable updates for iOS devices"),android:G0.boolean().optional().describe("Enable updates for Android devices"),selfAssign:G0.boolean().optional().describe("Allow device self-assignment"),disableAutoUpdate:G0.string().optional().describe("Block updates by type: major, minor, metadata, patch, or none"),dev:G0.boolean().optional().describe("Enable updates for development builds"),emulator:G0.boolean().optional().describe("Enable updates for emulators"),device:G0.boolean().optional().describe("Enable updates for physical devices"),prod:G0.boolean().optional().describe("Enable updates for production builds")},async({appId:J,channelId:W,bundle:$,state:G,downgrade:B,ios:H,android:F,selfAssign:K,disableAutoUpdate:U,dev:z,emulator:V,device:w,prod:L})=>{let O=await X.updateChannel({appId:J,channelId:W,bundle:$,state:G,downgrade:B,ios:H,android:F,selfAssign:K,disableAutoUpdate:U,dev:z,emulator:V,device:w,prod:L});if(!O.success)return c1(O);return{content:[{type:"text",text:`Successfully updated channel: ${W}`}]}}),D.tool("capgo_delete_channel","Delete a channel from an app",{appId:G0.string().describe("App ID"),channelId:G0.string().describe("Channel name/ID to delete"),deleteBundle:G0.boolean().optional().describe("Also delete the bundle linked to this channel")},async({appId:J,channelId:W,deleteBundle:$})=>{let G=await X.deleteChannel(W,J,$);if(!G.success)return c1(G);return{content:[{type:"text",text:`Successfully deleted channel: ${W}`}]}}),D.tool("capgo_get_current_bundle","Get the current bundle linked to a specific channel",{appId:G0.string().describe("App ID"),channelId:G0.string().describe("Channel name/ID")},async({appId:J,channelId:W})=>{let $=await X.getCurrentBundle(J,W);if(!$.success)return c1($);return{content:[{type:"text",text:JSON.stringify({channel:W,currentBundle:$.data},null,2)}]}}),D.tool("capgo_list_organizations","List all organizations you have access to",{},async()=>{let J=await X.listOrganizations();if(!J.success)return c1(J);return{content:[{type:"text",text:JSON.stringify(J.data,null,2)}]}}),D.tool("capgo_add_organization","Create a new organization for team collaboration",{name:G0.string().describe("Organization name"),email:G0.string().describe("Management email for the organization")},async({name:J,email:W})=>{let $=await X.addOrganization({name:J,email:W});if(!$.success)return c1($);return{content:[{type:"text",text:JSON.stringify({message:"Organization created successfully",...$.data},null,2)}]}}),D.tool("capgo_get_account_id","Get the account ID associated with the current API key",{},async()=>{let J=await X.getAccountId();if(!J.success)return c1(J);return{content:[{type:"text",text:JSON.stringify({accountId:J.data},null,2)}]}}),D.tool("capgo_doctor","Run diagnostics on the Capgo installation and get system information",{packageJson:G0.string().optional().describe("Path to package.json for monorepos")},async({packageJson:J})=>{let W=await X.doctor({packageJson:J});if(!W.success)return c1(W);return{content:[{type:"text",text:JSON.stringify(W.data,null,2)}]}}),D.tool("capgo_get_stats","Get device statistics and logs from Capgo backend for debugging",{appId:G0.string().describe("App ID to get stats for"),deviceIds:G0.array(G0.string()).optional().describe("Filter by specific device IDs"),limit:G0.number().optional().describe("Maximum number of results to return"),rangeStart:G0.string().optional().describe("Start date/time for range filter (ISO string)"),rangeEnd:G0.string().optional().describe("End date/time for range filter (ISO string)")},async({appId:J,deviceIds:W,limit:$,rangeStart:G,rangeEnd:B})=>{let H=await X.getStats({appId:J,deviceIds:W,limit:$,rangeStart:G,rangeEnd:B});if(!H.success)return c1(H);return{content:[{type:"text",text:JSON.stringify(H.data,null,2)}]}}),D.tool("capgo_request_build","Request a native iOS/Android build from Capgo Cloud",{appId:G0.string().describe("App ID to build"),platform:G0.enum(["ios","android"]).describe("Target platform"),path:G0.string().optional().describe("Path to project directory")},async({appId:J,platform:W,path:$})=>{let G=await X.requestBuild({appId:J,platform:W,path:$});if(!G.success)return c1(G);return{content:[{type:"text",text:JSON.stringify({message:"Build requested successfully",...G.data},null,2)}]}}),D.tool("capgo_generate_encryption_keys","Generate RSA key pair for end-to-end encryption of bundles",{force:G0.boolean().optional().describe("Overwrite existing keys if they exist")},async({force:J})=>{let W=await X.generateEncryptionKeys({force:J});if(!W.success)return c1(W);return{content:[{type:"text",text:"Encryption keys generated successfully. Private key saved to .capgo_key_v2, public key to .capgo_key_v2.pub"}]}});let Q=new gU;await D.connect(Q)}function Tq0(D,Y,X){if(X)return;if(!D.length){q.error("No members found");return}let Q=new G1;Q.headers=Y.hasPasswordPolicy?["Email","Role","Status","2FA Enabled","Password Policy"]:["Email","Role","Status","2FA Enabled"],Q.rows=[];for(let J of D){let W=J.is_tmp?"Invited":"Active",$=J.has_2fa?"✓ Yes":"✗ No",G=J.password_policy_compliant?"✓ Compliant":"✗ Non-compliant",B=[J.email,J.role,W,$];if(Y.hasPasswordPolicy)B.push(G);Q.rows.push(B)}q.success(`Members of "${Y.orgName}"`),q.success(Q.toString())}async function Sq0(D,Y,X=!1){if(!X)F0("List organization members");await f0();let Q={...Y,apikey:Y.apikey||X0()};if(!Q.apikey){if(!X)q.error("Missing API key, you need to provide an API key to list members");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide an organization ID");throw Error("Missing organization id")}let J=await w0(Q.apikey,Q.supaHost,Q.supaAnon);await A0(J,Q.apikey,["read","write","all"]),await y4(J,D,X);let{data:W,error:$}=await J.from("orgs").select("name, enforcing_2fa, password_policy_config, require_apikey_expiration, max_apikey_expiration_days, enforce_hashed_api_keys").eq("id",D).single();if($||!W){if(!X)q.error(`Cannot get organization details: ${m($)}`);throw Error(`Cannot get organization details: ${m($)}`)}let G=W.password_policy_config,B=G?.enabled??!1;if(!X)q.info(`Getting members of "${W.name}" from Capgo`);let{data:H,error:F}=await J.rpc("get_org_members",{guild_id:D});if(F){if(!X)q.error(`Cannot get organization members: ${m(F)}`);throw Error(`Cannot get organization members: ${m(F)}`)}let{data:K,error:U}=await J.rpc("check_org_members_2fa_enabled",{org_id:D});if(U){if(!X)if(U.message?.includes("NO_RIGHTS"))q.warn("You need super_admin rights to view 2FA status of members");else q.error(`Cannot get 2FA status: ${m(U)}`)}let z=null;if(B){let{data:w,error:L}=await J.rpc("check_org_members_password_policy",{org_id:D});if(L){if(!X)if(L.message?.includes("NO_RIGHTS"))q.warn("You need super_admin rights to view password policy compliance status");else q.warn(`Cannot get password policy status: ${m(L)}`)}else z=w}let V=(H||[]).map((w)=>{let L=K?.find((Z)=>Z.user_id===w.uid),O=z?.find((Z)=>Z.user_id===w.uid);return{uid:w.uid,email:w.email,role:w.role,is_tmp:w.is_tmp,has_2fa:L?.["2fa_enabled"]??!1,password_policy_compliant:O?.password_policy_compliant??!1}});if(!X){if(q.info(`Members found: ${V.length}`),q.info(""),q.info("Security Settings:"),W.enforcing_2fa)q.info(" \uD83D\uDD10 2FA enforcement: ENABLED");else q.info(" 2FA enforcement: Disabled");if(B)q.info(" \uD83D\uDD11 Password policy: ENABLED"),q.info(` - Minimum length: ${G.min_length} characters`),q.info(` - Require uppercase: ${G.require_uppercase?"Yes":"No"}`),q.info(` - Require number: ${G.require_number?"Yes":"No"}`),q.info(` - Require special: ${G.require_special?"Yes":"No"}`);else q.info(" Password policy: Disabled");if(W.require_apikey_expiration){if(q.info(" ⏰ API key expiration required: ENABLED"),W.max_apikey_expiration_days)q.info(` - Maximum expiration: ${W.max_apikey_expiration_days} days`)}else q.info(" API key expiration required: Disabled");if(W.enforce_hashed_api_keys)q.info(" \uD83D\uDD12 Hashed API keys: ENABLED");else q.info(" Hashed API keys: Disabled");q.info("");let w=V.filter((O)=>!O.is_tmp),L=w.filter((O)=>!O.has_2fa);if(q.info("Member Summary:"),q.info(` Total active members: ${w.length}`),q.info(` Members with 2FA: ${w.length-L.length}`),q.info(` Members without 2FA: ${L.length}`),B){let O=w.filter((Z)=>!Z.password_policy_compliant);q.info(` Password policy compliant: ${w.length-O.length}`),q.info(` Password policy non-compliant: ${O.length}`)}q.info(""),Tq0(V,{orgName:W.name,hasPasswordPolicy:B},X),e("Done ✅")}return V}async function nU(D,Y){await Sq0(D,Y,!1)}var n={apikey:"API key to link to your account",supaHost:"Custom Supabase host URL (for self-hosting or Capgo development)",supaAnon:"Custom Supabase anon key (for self-hosting)",packageJson:"Paths to package.json files for monorepos (comma-separated)",nodeModules:"Paths to node_modules directories for monorepos (comma-separated)",verbose:"Enable verbose output with detailed logging"};l1.name(f8.name).description("\uD83D\uDCE6 Manage packages and bundle versions in Capgo Cloud").version(f8.version,"-v, --version","output the current version");l1.command("init [apikey] [appId]").alias("i").description(`\uD83D\uDE80 Initialize a new app in Capgo Cloud with step-by-step guidance.
|
|
442
|
+
${D.securityPolicyMessage}`;return{content:[{type:"text",text:Y}],isError:!0}}async function Dh(){let D=new fU({name:"capgo",version:f8.version}),Y=X0(!0),X=new pU({apikey:Y});D.tool("capgo_list_apps","List all apps registered in your Capgo Cloud account",{},async()=>{let J=await X.listApps();if(!J.success)return m1(J);return{content:[{type:"text",text:JSON.stringify(J.data,null,2)}]}}),D.tool("capgo_add_app","Register a new app in Capgo Cloud",{appId:G0.string().describe("App ID in reverse domain format (e.g., com.example.app)"),name:G0.string().optional().describe("Display name for the app"),icon:G0.string().optional().describe("Path to app icon file")},async({appId:J,name:W,icon:$})=>{let G=await X.addApp({appId:J,name:W,icon:$});if(!G.success)return m1(G);return{content:[{type:"text",text:`Successfully added app: ${J}`}]}}),D.tool("capgo_update_app","Update settings for an existing app in Capgo Cloud",{appId:G0.string().describe("App ID to update"),name:G0.string().optional().describe("New display name"),icon:G0.string().optional().describe("New icon path"),retention:G0.number().optional().describe("Days to keep old bundles (0 = infinite)")},async({appId:J,name:W,icon:$,retention:G})=>{let B=await X.updateApp({appId:J,name:W,icon:$,retention:G});if(!B.success)return m1(B);return{content:[{type:"text",text:`Successfully updated app: ${J}`}]}}),D.tool("capgo_delete_app","Delete an app from Capgo Cloud",{appId:G0.string().describe("App ID to delete")},async({appId:J})=>{let W=await X.deleteApp(J,!0);if(!W.success)return m1(W);return{content:[{type:"text",text:`Successfully deleted app: ${J}`}]}}),D.tool("capgo_upload_bundle","Upload a new app bundle to Capgo Cloud for distribution",{appId:G0.string().describe("App ID to upload bundle for"),path:G0.string().describe("Path to the build folder to upload"),bundle:G0.string().optional().describe("Bundle version number"),channel:G0.string().optional().describe("Channel to link the bundle to"),comment:G0.string().optional().describe("Comment or release notes for this version"),minUpdateVersion:G0.string().optional().describe("Minimum version required to update to this version"),autoMinUpdateVersion:G0.boolean().optional().describe("Automatically set min update version based on native packages"),encrypt:G0.boolean().optional().describe("Enable encryption for the bundle")},async({appId:J,path:W,bundle:$,channel:G,comment:B,minUpdateVersion:H,autoMinUpdateVersion:F,encrypt:K})=>{let U=await X.uploadBundle({appId:J,path:W,bundle:$,channel:G,comment:B,minUpdateVersion:H,autoMinUpdateVersion:F,encrypt:K});if(!U.success)return m1(U);return{content:[{type:"text",text:JSON.stringify({message:"Bundle uploaded successfully",bundleId:U.bundleId,checksum:U.checksum,skipped:U.skipped,reason:U.reason},null,2)}]}}),D.tool("capgo_list_bundles","List all bundles uploaded for an app",{appId:G0.string().describe("App ID to list bundles for")},async({appId:J})=>{let W=await X.listBundles(J);if(!W.success)return m1(W);return{content:[{type:"text",text:JSON.stringify(W.data,null,2)}]}}),D.tool("capgo_delete_bundle","Delete a specific bundle from Capgo Cloud",{appId:G0.string().describe("App ID"),bundleId:G0.string().describe("Bundle version to delete")},async({appId:J,bundleId:W})=>{let $=await X.deleteBundle(J,W);if(!$.success)return m1($);return{content:[{type:"text",text:`Successfully deleted bundle: ${W}`}]}}),D.tool("capgo_cleanup_bundles","Delete old bundles, keeping only recent versions",{appId:G0.string().describe("App ID to cleanup bundles for"),keep:G0.number().optional().describe("Number of versions to keep (default: 4)"),bundle:G0.string().optional().describe("Bundle version pattern to cleanup"),force:G0.boolean().optional().describe("Force removal without confirmation"),ignoreChannel:G0.boolean().optional().describe("Delete bundles even if linked to channels")},async({appId:J,keep:W,bundle:$,force:G,ignoreChannel:B})=>{let H=await X.cleanupBundles({appId:J,keep:W,bundle:$,force:G??!0,ignoreChannel:B});if(!H.success)return m1(H);return{content:[{type:"text",text:JSON.stringify({message:"Cleanup completed",removed:H.data?.removed,kept:H.data?.kept},null,2)}]}}),D.tool("capgo_check_compatibility","Check bundle compatibility with a specific channel",{appId:G0.string().describe("App ID to check"),channel:G0.string().describe("Channel to check compatibility with"),packageJson:G0.string().optional().describe("Path to package.json for monorepos")},async({appId:J,channel:W,packageJson:$})=>{let G=await X.checkBundleCompatibility({appId:J,channel:W,packageJson:$});if(!G.success)return m1(G);return{content:[{type:"text",text:JSON.stringify(G.data,null,2)}]}}),D.tool("capgo_list_channels","List all channels for an app",{appId:G0.string().describe("App ID to list channels for")},async({appId:J})=>{let W=await X.listChannels(J);if(!W.success)return m1(W);return{content:[{type:"text",text:JSON.stringify(W.data,null,2)}]}}),D.tool("capgo_add_channel","Create a new distribution channel for an app",{appId:G0.string().describe("App ID"),channelId:G0.string().describe("Channel name/ID to create"),default:G0.boolean().optional().describe("Set as default channel"),selfAssign:G0.boolean().optional().describe("Allow devices to self-assign to this channel")},async({appId:J,channelId:W,default:$,selfAssign:G})=>{let B=await X.addChannel({appId:J,channelId:W,default:$,selfAssign:G});if(!B.success)return m1(B);return{content:[{type:"text",text:`Successfully created channel: ${W}`}]}}),D.tool("capgo_update_channel","Update channel settings including linked bundle and targeting options",{appId:G0.string().describe("App ID"),channelId:G0.string().describe("Channel name/ID to update"),bundle:G0.string().optional().describe("Bundle version to link to this channel"),state:G0.string().optional().describe('Channel state: "default" or "normal"'),downgrade:G0.boolean().optional().describe("Allow downgrading to versions below native"),ios:G0.boolean().optional().describe("Enable updates for iOS devices"),android:G0.boolean().optional().describe("Enable updates for Android devices"),selfAssign:G0.boolean().optional().describe("Allow device self-assignment"),disableAutoUpdate:G0.string().optional().describe("Block updates by type: major, minor, metadata, patch, or none"),dev:G0.boolean().optional().describe("Enable updates for development builds"),emulator:G0.boolean().optional().describe("Enable updates for emulators"),device:G0.boolean().optional().describe("Enable updates for physical devices"),prod:G0.boolean().optional().describe("Enable updates for production builds")},async({appId:J,channelId:W,bundle:$,state:G,downgrade:B,ios:H,android:F,selfAssign:K,disableAutoUpdate:U,dev:z,emulator:V,device:w,prod:L})=>{let O=await X.updateChannel({appId:J,channelId:W,bundle:$,state:G,downgrade:B,ios:H,android:F,selfAssign:K,disableAutoUpdate:U,dev:z,emulator:V,device:w,prod:L});if(!O.success)return m1(O);return{content:[{type:"text",text:`Successfully updated channel: ${W}`}]}}),D.tool("capgo_delete_channel","Delete a channel from an app",{appId:G0.string().describe("App ID"),channelId:G0.string().describe("Channel name/ID to delete"),deleteBundle:G0.boolean().optional().describe("Also delete the bundle linked to this channel")},async({appId:J,channelId:W,deleteBundle:$})=>{let G=await X.deleteChannel(W,J,$);if(!G.success)return m1(G);return{content:[{type:"text",text:`Successfully deleted channel: ${W}`}]}}),D.tool("capgo_get_current_bundle","Get the current bundle linked to a specific channel",{appId:G0.string().describe("App ID"),channelId:G0.string().describe("Channel name/ID")},async({appId:J,channelId:W})=>{let $=await X.getCurrentBundle(J,W);if(!$.success)return m1($);return{content:[{type:"text",text:JSON.stringify({channel:W,currentBundle:$.data},null,2)}]}}),D.tool("capgo_list_organizations","List all organizations you have access to",{},async()=>{let J=await X.listOrganizations();if(!J.success)return m1(J);return{content:[{type:"text",text:JSON.stringify(J.data,null,2)}]}}),D.tool("capgo_add_organization","Create a new organization for team collaboration",{name:G0.string().describe("Organization name"),email:G0.string().describe("Management email for the organization")},async({name:J,email:W})=>{let $=await X.addOrganization({name:J,email:W});if(!$.success)return m1($);return{content:[{type:"text",text:JSON.stringify({message:"Organization created successfully",...$.data},null,2)}]}}),D.tool("capgo_get_account_id","Get the account ID associated with the current API key",{},async()=>{let J=await X.getAccountId();if(!J.success)return m1(J);return{content:[{type:"text",text:JSON.stringify({accountId:J.data},null,2)}]}}),D.tool("capgo_doctor","Run diagnostics on the Capgo installation and get system information",{packageJson:G0.string().optional().describe("Path to package.json for monorepos")},async({packageJson:J})=>{let W=await X.doctor({packageJson:J});if(!W.success)return m1(W);return{content:[{type:"text",text:JSON.stringify(W.data,null,2)}]}}),D.tool("capgo_get_stats","Get device statistics and logs from Capgo backend for debugging",{appId:G0.string().describe("App ID to get stats for"),deviceIds:G0.array(G0.string()).optional().describe("Filter by specific device IDs"),limit:G0.number().optional().describe("Maximum number of results to return"),rangeStart:G0.string().optional().describe("Start date/time for range filter (ISO string)"),rangeEnd:G0.string().optional().describe("End date/time for range filter (ISO string)")},async({appId:J,deviceIds:W,limit:$,rangeStart:G,rangeEnd:B})=>{let H=await X.getStats({appId:J,deviceIds:W,limit:$,rangeStart:G,rangeEnd:B});if(!H.success)return m1(H);return{content:[{type:"text",text:JSON.stringify(H.data,null,2)}]}}),D.tool("capgo_request_build","Request a native iOS/Android build from Capgo Cloud",{appId:G0.string().describe("App ID to build"),platform:G0.enum(["ios","android"]).describe("Target platform"),path:G0.string().optional().describe("Path to project directory")},async({appId:J,platform:W,path:$})=>{let G=await X.requestBuild({appId:J,platform:W,path:$});if(!G.success)return m1(G);return{content:[{type:"text",text:JSON.stringify({message:"Build requested successfully",...G.data},null,2)}]}}),D.tool("capgo_generate_encryption_keys","Generate RSA key pair for end-to-end encryption of bundles",{force:G0.boolean().optional().describe("Overwrite existing keys if they exist")},async({force:J})=>{let W=await X.generateEncryptionKeys({force:J});if(!W.success)return m1(W);return{content:[{type:"text",text:"Encryption keys generated successfully. Private key saved to .capgo_key_v2, public key to .capgo_key_v2.pub"}]}});let Q=new gU;await D.connect(Q)}function Tq0(D,Y,X){if(X)return;if(!D.length){q.error("No members found");return}let Q=new G1;Q.headers=Y.hasPasswordPolicy?["Email","Role","Status","2FA Enabled","Password Policy"]:["Email","Role","Status","2FA Enabled"],Q.rows=[];for(let J of D){let W=J.is_tmp?"Invited":"Active",$=J.has_2fa?"✓ Yes":"✗ No",G=J.password_policy_compliant?"✓ Compliant":"✗ Non-compliant",B=[J.email,J.role,W,$];if(Y.hasPasswordPolicy)B.push(G);Q.rows.push(B)}q.success(`Members of "${Y.orgName}"`),q.success(Q.toString())}async function Sq0(D,Y,X=!1){if(!X)F0("List organization members");await f0();let Q={...Y,apikey:Y.apikey||X0()};if(!Q.apikey){if(!X)q.error("Missing API key, you need to provide an API key to list members");throw Error("Missing API key")}if(!D){if(!X)q.error("Missing argument, you need to provide an organization ID");throw Error("Missing organization id")}let J=await w0(Q.apikey,Q.supaHost,Q.supaAnon);await A0(J,Q.apikey,["read","write","all"]),await y4(J,D,X);let{data:W,error:$}=await J.from("orgs").select("name, enforcing_2fa, password_policy_config, require_apikey_expiration, max_apikey_expiration_days, enforce_hashed_api_keys").eq("id",D).single();if($||!W){if(!X)q.error(`Cannot get organization details: ${m($)}`);throw Error(`Cannot get organization details: ${m($)}`)}let G=W.password_policy_config,B=G?.enabled??!1;if(!X)q.info(`Getting members of "${W.name}" from Capgo`);let{data:H,error:F}=await J.rpc("get_org_members",{guild_id:D});if(F){if(!X)q.error(`Cannot get organization members: ${m(F)}`);throw Error(`Cannot get organization members: ${m(F)}`)}let{data:K,error:U}=await J.rpc("check_org_members_2fa_enabled",{org_id:D});if(U){if(!X)if(U.message?.includes("NO_RIGHTS"))q.warn("You need super_admin rights to view 2FA status of members");else q.error(`Cannot get 2FA status: ${m(U)}`)}let z=null;if(B){let{data:w,error:L}=await J.rpc("check_org_members_password_policy",{org_id:D});if(L){if(!X)if(L.message?.includes("NO_RIGHTS"))q.warn("You need super_admin rights to view password policy compliance status");else q.warn(`Cannot get password policy status: ${m(L)}`)}else z=w}let V=(H||[]).map((w)=>{let L=K?.find((Z)=>Z.user_id===w.uid),O=z?.find((Z)=>Z.user_id===w.uid);return{uid:w.uid,email:w.email,role:w.role,is_tmp:w.is_tmp,has_2fa:L?.["2fa_enabled"]??!1,password_policy_compliant:O?.password_policy_compliant??!1}});if(!X){if(q.info(`Members found: ${V.length}`),q.info(""),q.info("Security Settings:"),W.enforcing_2fa)q.info(" \uD83D\uDD10 2FA enforcement: ENABLED");else q.info(" 2FA enforcement: Disabled");if(B)q.info(" \uD83D\uDD11 Password policy: ENABLED"),q.info(` - Minimum length: ${G.min_length} characters`),q.info(` - Require uppercase: ${G.require_uppercase?"Yes":"No"}`),q.info(` - Require number: ${G.require_number?"Yes":"No"}`),q.info(` - Require special: ${G.require_special?"Yes":"No"}`);else q.info(" Password policy: Disabled");if(W.require_apikey_expiration){if(q.info(" ⏰ API key expiration required: ENABLED"),W.max_apikey_expiration_days)q.info(` - Maximum expiration: ${W.max_apikey_expiration_days} days`)}else q.info(" API key expiration required: Disabled");if(W.enforce_hashed_api_keys)q.info(" \uD83D\uDD12 Hashed API keys: ENABLED");else q.info(" Hashed API keys: Disabled");q.info("");let w=V.filter((O)=>!O.is_tmp),L=w.filter((O)=>!O.has_2fa);if(q.info("Member Summary:"),q.info(` Total active members: ${w.length}`),q.info(` Members with 2FA: ${w.length-L.length}`),q.info(` Members without 2FA: ${L.length}`),B){let O=w.filter((Z)=>!Z.password_policy_compliant);q.info(` Password policy compliant: ${w.length-O.length}`),q.info(` Password policy non-compliant: ${O.length}`)}q.info(""),Tq0(V,{orgName:W.name,hasPasswordPolicy:B},X),e("Done ✅")}return V}async function nU(D,Y){await Sq0(D,Y,!1)}var n={apikey:"API key to link to your account",supaHost:"Custom Supabase host URL (for self-hosting or Capgo development)",supaAnon:"Custom Supabase anon key (for self-hosting)",packageJson:"Paths to package.json files for monorepos (comma-separated)",nodeModules:"Paths to node_modules directories for monorepos (comma-separated)",verbose:"Enable verbose output with detailed logging"};c1.name(f8.name).description("\uD83D\uDCE6 Manage packages and bundle versions in Capgo Cloud").version(f8.version,"-v, --version","output the current version");c1.command("init [apikey] [appId]").alias("i").description(`\uD83D\uDE80 Initialize a new app in Capgo Cloud with step-by-step guidance.
|
|
443
443
|
|
|
444
444
|
This includes adding code for updates, building, uploading your app, and verifying update functionality.
|
|
445
445
|
|
|
446
|
-
Example: npx @capgo/cli@latest init YOUR_API_KEY com.example.app`).action(UC).option("-n, --name <name>","App name for display in Capgo Cloud").option("-i, --icon <icon>","App icon path for display in Capgo Cloud").option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);
|
|
446
|
+
Example: npx @capgo/cli@latest init YOUR_API_KEY com.example.app`).action(UC).option("-n, --name <name>","App name for display in Capgo Cloud").option("-i, --icon <icon>","App icon path for display in Capgo Cloud").option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);c1.command("doctor").description(`\uD83D\uDC68⚕️ Check if your Capgo app installation is up-to-date and gather information useful for bug reports.
|
|
447
447
|
|
|
448
448
|
This command helps diagnose issues with your setup.
|
|
449
449
|
|
|
450
|
-
Example: npx @capgo/cli@latest doctor`).option("--package-json <packageJson>",n.packageJson).action(async(...D)=>{let Y=D.at(-1);await zS(Y)});
|
|
450
|
+
Example: npx @capgo/cli@latest doctor`).option("--package-json <packageJson>",n.packageJson).action(async(...D)=>{let Y=D.at(-1);await zS(Y)});c1.command("login [apikey]").alias("l").description(`\uD83D\uDD11 Save your Capgo API key to your machine or local folder for easier access to Capgo Cloud services.
|
|
451
451
|
|
|
452
452
|
Use --apikey=******** in any command to override it.
|
|
453
453
|
|
|
454
|
-
Example: npx @capgo/cli@latest login YOUR_API_KEY`).action(HC).option("--local","Only save in local folder, git ignored for security.").option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);var b9=
|
|
454
|
+
Example: npx @capgo/cli@latest login YOUR_API_KEY`).action(HC).option("--local","Only save in local folder, git ignored for security.").option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);var b9=c1.command("bundle").description("\uD83D\uDCE6 Manage app bundles for deployment in Capgo Cloud, including upload, compatibility checks, and encryption.");b9.command("upload [appId]").alias("u").description(`⬆️ Upload a new app bundle to Capgo Cloud for distribution.
|
|
455
455
|
|
|
456
456
|
Version must be > 0.0.0 and unique. Deleted versions cannot be reused for security.
|
|
457
457
|
|
|
@@ -482,7 +482,7 @@ Example: npx @capgo/cli@latest bundle decrypt ./myapp_encrypted.zip CHECKSUM`).a
|
|
|
482
482
|
|
|
483
483
|
Returns checksum for use with encryption. Use --json for machine-readable output.
|
|
484
484
|
|
|
485
|
-
Example: npx @capgo/cli@latest bundle zip com.example.app --path ./dist`).action(CI).option("-p, --path <path>","Path of the folder to upload, if not provided it will use the webDir set in capacitor.config").option("-b, --bundle <bundle>","Bundle version number to name the zip file").option("-n, --name <name>","Name of the zip file").option("-j, --json","Output in JSON").option("--no-code-check","Ignore checking if notifyAppReady() is called in source code and index present in root folder").option("--key-v2","Use encryption v2").option("--package-json <packageJson>",n.packageJson);var k3=
|
|
485
|
+
Example: npx @capgo/cli@latest bundle zip com.example.app --path ./dist`).action(CI).option("-p, --path <path>","Path of the folder to upload, if not provided it will use the webDir set in capacitor.config").option("-b, --bundle <bundle>","Bundle version number to name the zip file").option("-n, --name <name>","Name of the zip file").option("-j, --json","Output in JSON").option("--no-code-check","Ignore checking if notifyAppReady() is called in source code and index present in root folder").option("--key-v2","Use encryption v2").option("--package-json <packageJson>",n.packageJson);var k3=c1.command("app").description("\uD83D\uDCF1 Manage your Capgo app settings and configurations in Capgo Cloud.");k3.command("add [appId]").alias("a").description(`➕ Add a new app to Capgo Cloud with a unique app ID in the format com.test.app.
|
|
486
486
|
|
|
487
487
|
All options can be guessed from config if not provided.
|
|
488
488
|
|
|
@@ -502,7 +502,7 @@ Example: npx @capgo/cli@latest app setting plugins.CapacitorUpdater.defaultChann
|
|
|
502
502
|
|
|
503
503
|
Retention of 0 means infinite storage.
|
|
504
504
|
|
|
505
|
-
Example: npx @capgo/cli@latest app set com.example.app --name "Updated App" --retention 30`).action(async(D,Y)=>{await LS(D,Y)}).option("-n, --name <name>","App name for display in Capgo Cloud").option("-i, --icon <icon>","App icon path for display in Capgo Cloud").option("-a, --apikey <apikey>",n.apikey).option("-r, --retention <retention>","Days to keep old bundles (0 = infinite, default: 0)").option("--expose-metadata <exposeMetadata>","Expose bundle metadata (link and comment) to the plugin (true/false, default: false)").option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);var MX=
|
|
505
|
+
Example: npx @capgo/cli@latest app set com.example.app --name "Updated App" --retention 30`).action(async(D,Y)=>{await LS(D,Y)}).option("-n, --name <name>","App name for display in Capgo Cloud").option("-i, --icon <icon>","App icon path for display in Capgo Cloud").option("-a, --apikey <apikey>",n.apikey).option("-r, --retention <retention>","Days to keep old bundles (0 = infinite, default: 0)").option("--expose-metadata <exposeMetadata>","Expose bundle metadata (link and comment) to the plugin (true/false, default: false)").option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);var MX=c1.command("channel").description("\uD83D\uDCE2 Manage distribution channels for app updates in Capgo Cloud, controlling how updates are delivered to devices.");MX.command("add [channelId] [appId]").alias("a").description(`➕ Create a new channel for app distribution in Capgo Cloud to manage update delivery.
|
|
506
506
|
|
|
507
507
|
Example: npx @capgo/cli@latest channel add production com.example.app --default`).action(xI).option("-d, --default","Set the channel as default").option("--self-assign","Allow device to self-assign to this channel").option("-a, --apikey <apikey>",n.apikey).option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);MX.command("delete [channelId] [appId]").alias("d").description(`\uD83D\uDDD1️ Delete a channel from Capgo Cloud, optionally removing associated bundles to free up resources.
|
|
508
508
|
|
|
@@ -514,7 +514,7 @@ Example: npx @capgo/cli@latest channel currentBundle production com.example.app`
|
|
|
514
514
|
|
|
515
515
|
One channel must be default.
|
|
516
516
|
|
|
517
|
-
Example: npx @capgo/cli@latest channel set production com.example.app --bundle 1.0.0 --state default`).action(async(D,Y,X)=>{await fI(D,Y,X)}).option("-a, --apikey <apikey>",n.apikey).option("-b, --bundle <bundle>","Bundle version number of the file to set").option("-s, --state <state>","Set the state of the channel, default or normal").option("--latest-remote","Get the latest bundle uploaded in capgo cloud and set it to the channel").option("--latest","Get the latest version key in the package.json to set it to the channel").option("--downgrade","Allow to downgrade to version under native one").option("--no-downgrade","Disable downgrade to version under native one").option("--ios","Allow sending update to iOS devices").option("--no-ios","Disable sending update to iOS devices").option("--android","Allow sending update to Android devices").option("--no-android","Disable sending update to Android devices").option("--self-assign","Allow device to self-assign to this channel").option("--no-self-assign","Disable devices to self-assign to this channel").option("--disable-auto-update <disableAutoUpdate>","Block updates by type: major, minor, metadata, patch, or none (allows all)").option("--dev","Allow sending update to development devices").option("--no-dev","Disable sending update to development devices").option("--prod","Allow sending update to production devices").option("--no-prod","Disable sending update to production devices").option("--emulator","Allow sending update to emulator devices").option("--no-emulator","Disable sending update to emulator devices").option("--device","Allow sending update to physical devices").option("--no-device","Disable sending update to physical devices").option("--package-json <packageJson>",n.packageJson).option("--ignore-metadata-check","Ignore checking node_modules compatibility if present in the bundle").option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);var rU=
|
|
517
|
+
Example: npx @capgo/cli@latest channel set production com.example.app --bundle 1.0.0 --state default`).action(async(D,Y,X)=>{await fI(D,Y,X)}).option("-a, --apikey <apikey>",n.apikey).option("-b, --bundle <bundle>","Bundle version number of the file to set").option("-s, --state <state>","Set the state of the channel, default or normal").option("--latest-remote","Get the latest bundle uploaded in capgo cloud and set it to the channel").option("--latest","Get the latest version key in the package.json to set it to the channel").option("--downgrade","Allow to downgrade to version under native one").option("--no-downgrade","Disable downgrade to version under native one").option("--ios","Allow sending update to iOS devices").option("--no-ios","Disable sending update to iOS devices").option("--android","Allow sending update to Android devices").option("--no-android","Disable sending update to Android devices").option("--self-assign","Allow device to self-assign to this channel").option("--no-self-assign","Disable devices to self-assign to this channel").option("--disable-auto-update <disableAutoUpdate>","Block updates by type: major, minor, metadata, patch, or none (allows all)").option("--dev","Allow sending update to development devices").option("--no-dev","Disable sending update to development devices").option("--prod","Allow sending update to production devices").option("--no-prod","Disable sending update to production devices").option("--emulator","Allow sending update to emulator devices").option("--no-emulator","Disable sending update to emulator devices").option("--device","Allow sending update to physical devices").option("--no-device","Disable sending update to physical devices").option("--package-json <packageJson>",n.packageJson).option("--ignore-metadata-check","Ignore checking node_modules compatibility if present in the bundle").option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);var rU=c1.command("key").description("\uD83D\uDD10 Manage encryption keys for secure bundle distribution in Capgo Cloud, supporting end-to-end encryption with RSA and AES combination.");rU.command("save").description(`\uD83D\uDCBE Save the public key in the Capacitor config, useful for CI environments.
|
|
518
518
|
|
|
519
519
|
Recommended not to commit the key for security.
|
|
520
520
|
|
|
@@ -526,9 +526,9 @@ NEVER commit the private key - store it securely!
|
|
|
526
526
|
|
|
527
527
|
Example: npx @capgo/cli@latest key create`).action(JC).option("-f, --force","Force generate a new one");rU.command("delete_old").description(`\uD83E\uDDF9 Delete the old encryption key from the Capacitor config to ensure only the current key is used.
|
|
528
528
|
|
|
529
|
-
Example: npx @capgo/cli@latest key delete_old`).action(WC);var Pq0=
|
|
529
|
+
Example: npx @capgo/cli@latest key delete_old`).action(WC);var Pq0=c1.command("account").description("\uD83D\uDC64 Manage your Capgo account details and retrieve information for support or collaboration.");Pq0.command("id").description(`\uD83E\uDEAA Retrieve your account ID, safe to share for collaboration or support purposes in Discord or other platforms.
|
|
530
530
|
|
|
531
|
-
Example: npx @capgo/cli@latest account id`).action(ef).option("-a, --apikey <apikey>",n.apikey);var OX=
|
|
531
|
+
Example: npx @capgo/cli@latest account id`).action(ef).option("-a, --apikey <apikey>",n.apikey);var OX=c1.command("organization").description("\uD83C\uDFE2 Manage your organizations in Capgo Cloud for team collaboration and app management.");OX.command("list").alias("l").description(`\uD83D\uDCCB List all organizations you have access to in Capgo Cloud.
|
|
532
532
|
|
|
533
533
|
Example: npx @capgo/cli@latest organization list`).action(h$).option("-a, --apikey <apikey>",n.apikey).option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);OX.command("add").alias("a").description(`➕ Create a new organization in Capgo Cloud for team collaboration.
|
|
534
534
|
|
|
@@ -551,7 +551,7 @@ Example: npx @capgo/cli@latest organization set ORG_ID --enforce-hashed-api-keys
|
|
|
551
551
|
|
|
552
552
|
Only organization owners can delete organizations.
|
|
553
553
|
|
|
554
|
-
Example: npx @capgo/cli@latest organization delete ORG_ID`).action(f$).option("-a, --apikey <apikey>",n.apikey).option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);function Iq0(){console.warn('⚠️ Warning: "organisation" is deprecated. Please use "organization" instead.')}var u$=
|
|
554
|
+
Example: npx @capgo/cli@latest organization delete ORG_ID`).action(f$).option("-a, --apikey <apikey>",n.apikey).option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);function Iq0(){console.warn('⚠️ Warning: "organisation" is deprecated. Please use "organization" instead.')}var u$=c1.command("organisation").description('[DEPRECATED] Use "organization" instead. This command will be removed in a future version.').hook("preAction",Iq0);u$.command("list").alias("l").description('[DEPRECATED] Use "organization list" instead.').action(h$).option("-a, --apikey <apikey>",n.apikey).option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);u$.command("add").alias("a").description('[DEPRECATED] Use "organization add" instead.').action(y$).option("-n, --name <name>","Organization name").option("-e, --email <email>","Management email for the organization").option("-a, --apikey <apikey>",n.apikey).option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);u$.command("set [orgId]").alias("s").description('[DEPRECATED] Use "organization set" instead.').action(g$).option("-n, --name <name>","Organization name").option("-e, --email <email>","Management email for the organization").option("--enforce-2fa","Enable 2FA enforcement for all organization members").option("--no-enforce-2fa","Disable 2FA enforcement for organization").option("--password-policy","Enable password policy enforcement for organization").option("--no-password-policy","Disable password policy enforcement").option("--min-length <minLength>","Minimum password length (6-128, default: 10)",(D)=>{let Y=Number.parseInt(D,10);if(Number.isNaN(Y)||Y<6||Y>128)throw Error("min-length must be between 6 and 128");return Y}).option("--require-uppercase","Require uppercase letter in password").option("--no-require-uppercase","Do not require uppercase letter").option("--require-number","Require number in password").option("--no-require-number","Do not require number").option("--require-special","Require special character in password").option("--no-require-special","Do not require special character").option("--require-apikey-expiration","Require all API keys to have an expiration date").option("--no-require-apikey-expiration","Do not require API key expiration").option("--max-apikey-expiration-days <days>","Maximum days before API key expiration (1-365, null for no limit)",(D)=>{if(D==="null"||D==="")return null;let Y=Number.parseInt(D,10);if(Number.isNaN(Y)||Y<1||Y>365)throw Error("max-apikey-expiration-days must be between 1 and 365, or null");return Y}).option("--enforce-hashed-api-keys","Enforce hashed/secure API keys (key value stored as hash, shown only once)").option("--no-enforce-hashed-api-keys","Allow plain-text API keys").option("-a, --apikey <apikey>",n.apikey).option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);u$.command("delete [orgId]").alias("d").description('[DEPRECATED] Use "organization delete" instead.').action(f$).option("-a, --apikey <apikey>",n.apikey).option("--supa-host <supaHost>",n.supaHost).option("--supa-anon <supaAnon>",n.supaAnon);var Yh=c1.command("build").description(`\uD83C\uDFD7️ Manage native iOS/Android builds through Capgo Cloud.
|
|
555
555
|
|
|
556
556
|
⚠️ This feature is currently in PUBLIC BETA and cannot be used by anyone at this time.
|
|
557
557
|
|
|
@@ -635,7 +635,7 @@ Platform is auto-detected from the options you provide.
|
|
|
635
635
|
|
|
636
636
|
Examples:
|
|
637
637
|
npx @capgo/cli build credentials update --provisioning-profile ./new-profile.mobileprovision
|
|
638
|
-
npx @capgo/cli build credentials update --local --keystore ./new-keystore.jks`).action(IS).option("--appId <appId>","App ID (auto-detected from capacitor.config if omitted)").option("--platform <platform>","Platform: ios or android (auto-detected from options)").option("--local","Update local .capgo-credentials.json instead of global").option("--certificate <path>","Path to P12 certificate file").option("--provisioning-profile <path>","Path to provisioning profile (.mobileprovision)").option("--provisioning-profile-prod <path>","Path to production provisioning profile").option("--p12-password <password>","P12 certificate password").option("--apple-key <path>","Path to App Store Connect API key (.p8 file)").option("--apple-key-id <id>","App Store Connect API Key ID").option("--apple-issuer-id <id>","App Store Connect Issuer ID").option("--apple-profile-name <name>","Provisioning profile name").option("--apple-team-id <id>","App Store Connect Team ID").option("--keystore <path>","Path to keystore file (.keystore or .jks)").option("--keystore-alias <alias>","Keystore key alias").option("--keystore-key-password <password>","Keystore key password").option("--keystore-store-password <password>","Keystore store password").option("--play-config <path>","Path to Google Play service account JSON");
|
|
638
|
+
npx @capgo/cli build credentials update --local --keystore ./new-keystore.jks`).action(IS).option("--appId <appId>","App ID (auto-detected from capacitor.config if omitted)").option("--platform <platform>","Platform: ios or android (auto-detected from options)").option("--local","Update local .capgo-credentials.json instead of global").option("--certificate <path>","Path to P12 certificate file").option("--provisioning-profile <path>","Path to provisioning profile (.mobileprovision)").option("--provisioning-profile-prod <path>","Path to production provisioning profile").option("--p12-password <password>","P12 certificate password").option("--apple-key <path>","Path to App Store Connect API key (.p8 file)").option("--apple-key-id <id>","App Store Connect API Key ID").option("--apple-issuer-id <id>","App Store Connect Issuer ID").option("--apple-profile-name <name>","Provisioning profile name").option("--apple-team-id <id>","App Store Connect Team ID").option("--keystore <path>","Path to keystore file (.keystore or .jks)").option("--keystore-alias <alias>","Keystore key alias").option("--keystore-key-password <password>","Keystore key password").option("--keystore-store-password <password>","Keystore store password").option("--play-config <path>","Path to Google Play service account JSON");c1.command("generate-docs [filePath]").description("Generate Markdown documentation for CLI commands - either for README or individual files").option("--folder <folderPath>","Generate individual markdown files for each command in the specified folder (instead of updating README)").action((D,Y)=>{hI(D,Y.folder)});c1.command("mcp").description(`\uD83E\uDD16 Start the Capgo MCP (Model Context Protocol) server for AI agent integration.
|
|
639
639
|
|
|
640
640
|
This command starts an MCP server that exposes Capgo functionality as tools for AI agents.
|
|
641
641
|
The server communicates via stdio and is designed for non-interactive, programmatic use.
|
|
@@ -660,4 +660,4 @@ Example usage with Claude Desktop:
|
|
|
660
660
|
}
|
|
661
661
|
}
|
|
662
662
|
|
|
663
|
-
Example: npx @capgo/cli mcp`).action(async()=>{await Dh()});
|
|
663
|
+
Example: npx @capgo/cli mcp`).action(async()=>{await Dh()});c1.exitOverride();c1.configureOutput({writeErr:(D)=>{}});c1.parseAsync().catch((D)=>{if(typeof D==="object"&&D!==null&&"code"in D){let Y=D;if(Y.code==="commander.version"||Y.code==="commander.helpDisplayed")iU(0);if(Y.message)console.error(Y.message);let X=Y.exitCode??1;iU(X)}console.error(`Error: ${m(D)}`),iU(1)});
|