ravi.bot 0.1.18 → 0.1.19

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.
@@ -13,7 +13,7 @@ MERCHANTABLITY OR NON-INFRINGEMENT.
13
13
 
14
14
  See the Apache Version 2.0 License for specific language governing permissions
15
15
  and limitations under the License.
16
- ***************************************************************************** */var qQ;(function($){(function(U){var J=typeof globalThis==="object"?globalThis:typeof global==="object"?global:typeof self==="object"?self:typeof this==="object"?this:Y(),v=_($);if(typeof J.Reflect<"u")v=_(J.Reflect,v);if(U(v,J),typeof J.Reflect>"u")J.Reflect=$;function _(Q,z){return function(N,G){if(Object.defineProperty(Q,N,{configurable:!0,writable:!0,value:G}),z)z(N,G)}}function D(){try{return Function("return this;")()}catch(Q){}}function X(){try{return(0,eval)("(function() { return this; })()")}catch(Q){}}function Y(){return D()||X()}})(function(U,J){var v=Object.prototype.hasOwnProperty,_=typeof Symbol==="function",D=_&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",X=_&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",Y=typeof Object.create==="function",Q={__proto__:[]}instanceof Array,z=!Y&&!Q,N={create:Y?function(){return c3(Object.create(null))}:Q?function(){return c3({__proto__:null})}:function(){return c3({})},has:z?function(Z,E){return v.call(Z,E)}:function(Z,E){return E in Z},get:z?function(Z,E){return v.call(Z,E)?Z[E]:void 0}:function(Z,E){return Z[E]}},G=Object.getPrototypeOf(Function),q=typeof Map==="function"&&typeof Map.prototype.entries==="function"?Map:YB(),V=typeof Set==="function"&&typeof Set.prototype.entries==="function"?Set:QB(),H=typeof WeakMap==="function"?WeakMap:zB(),P=_?Symbol.for("@reflect-metadata:registry"):void 0,T=vB(),M=DB(T);function f(Z,E,L,C){if(!o(L)){if(!DQ(Z))throw TypeError();if(!T$(E))throw TypeError();if(!T$(C)&&!o(C)&&!Q6(C))throw TypeError();if(Q6(C))C=void 0;return L=M4(L),a$(Z,E,L,C)}else{if(!DQ(Z))throw TypeError();if(!XQ(E))throw TypeError();return S$(Z,E)}}U("decorate",f);function R(Z,E){function L(C,p){if(!T$(C))throw TypeError();if(!o(p)&&!_B(p))throw TypeError();M0(Z,E,C,p)}return L}U("metadata",R);function x(Z,E,L,C){if(!T$(L))throw TypeError();if(!o(C))C=M4(C);return M0(Z,E,L,C)}U("defineMetadata",x);function i(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);return c$(Z,E,L)}U("hasMetadata",i);function d(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);return Z4(Z,E,L)}U("hasOwnMetadata",d);function s(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);return Y6(Z,E,L)}U("getMetadata",s);function X$(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);return Y2(Z,E,L)}U("getOwnMetadata",X$);function _$(Z,E){if(!T$(Z))throw TypeError();if(!o(E))E=M4(E);return Q2(Z,E)}U("getMetadataKeys",_$);function A$(Z,E){if(!T$(Z))throw TypeError();if(!o(E))E=M4(E);return b0(Z,E)}U("getOwnMetadataKeys",A$);function l$(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);if(!T$(E))throw TypeError();if(!o(L))L=M4(L);var C=z2(E,L,!1);if(o(C))return!1;return C.OrdinaryDeleteMetadata(Z,E,L)}U("deleteMetadata",l$);function S$(Z,E){for(var L=Z.length-1;L>=0;--L){var C=Z[L],p=C(E);if(!o(p)&&!Q6(p)){if(!XQ(p))throw TypeError();E=p}}return E}function a$(Z,E,L,C){for(var p=Z.length-1;p>=0;--p){var L$=Z[p],b$=L$(E,L,C);if(!o(b$)&&!Q6(b$)){if(!T$(b$))throw TypeError();C=b$}}return C}function c$(Z,E,L){var C=Z4(Z,E,L);if(C)return!0;var p=m3(E);if(!Q6(p))return c$(Z,p,L);return!1}function Z4(Z,E,L){var C=z2(E,L,!1);if(o(C))return!1;return vQ(C.OrdinaryHasOwnMetadata(Z,E,L))}function Y6(Z,E,L){var C=Z4(Z,E,L);if(C)return Y2(Z,E,L);var p=m3(E);if(!Q6(p))return Y6(Z,p,L);return}function Y2(Z,E,L){var C=z2(E,L,!1);if(o(C))return;return C.OrdinaryGetOwnMetadata(Z,E,L)}function M0(Z,E,L,C){var p=z2(L,C,!0);p.OrdinaryDefineOwnMetadata(Z,E,L,C)}function Q2(Z,E){var L=b0(Z,E),C=m3(Z);if(C===null)return L;var p=Q2(C,E);if(p.length<=0)return L;if(L.length<=0)return p;var L$=new V,b$=[];for(var J$=0,g=L;J$<g.length;J$++){var y=g[J$],l=L$.has(y);if(!l)L$.add(y),b$.push(y)}for(var c=0,v$=p;c<v$.length;c++){var y=v$[c],l=L$.has(y);if(!l)L$.add(y),b$.push(y)}return b$}function b0(Z,E){var L=z2(Z,E,!1);if(!L)return[];return L.OrdinaryOwnMetadataKeys(Z,E)}function JQ(Z){if(Z===null)return 1;switch(typeof Z){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return Z===null?1:6;default:return 6}}function o(Z){return Z===void 0}function Q6(Z){return Z===null}function eW(Z){return typeof Z==="symbol"}function T$(Z){return typeof Z==="object"?Z!==null:typeof Z==="function"}function sW(Z,E){switch(JQ(Z)){case 0:return Z;case 1:return Z;case 2:return Z;case 3:return Z;case 4:return Z;case 5:return Z}var L=E===3?"string":E===5?"number":"default",C=YQ(Z,D);if(C!==void 0){var p=C.call(Z,L);if(T$(p))throw TypeError();return p}return $B(Z,L==="default"?"number":L)}function $B(Z,E){if(E==="string"){var L=Z.toString;if(z6(L)){var C=L.call(Z);if(!T$(C))return C}var p=Z.valueOf;if(z6(p)){var C=p.call(Z);if(!T$(C))return C}}else{var p=Z.valueOf;if(z6(p)){var C=p.call(Z);if(!T$(C))return C}var L$=Z.toString;if(z6(L$)){var C=L$.call(Z);if(!T$(C))return C}}throw TypeError()}function vQ(Z){return!!Z}function UB(Z){return""+Z}function M4(Z){var E=sW(Z,3);if(eW(E))return E;return UB(E)}function DQ(Z){return Array.isArray?Array.isArray(Z):Z instanceof Object?Z instanceof Array:Object.prototype.toString.call(Z)==="[object Array]"}function z6(Z){return typeof Z==="function"}function XQ(Z){return typeof Z==="function"}function _B(Z){switch(JQ(Z)){case 3:return!0;case 4:return!0;default:return!1}}function i3(Z,E){return Z===E||Z!==Z&&E!==E}function YQ(Z,E){var L=Z[E];if(L===void 0||L===null)return;if(!z6(L))throw TypeError();return L}function QQ(Z){var E=YQ(Z,X);if(!z6(E))throw TypeError();var L=E.call(Z);if(!T$(L))throw TypeError();return L}function zQ(Z){return Z.value}function NQ(Z){var E=Z.next();return E.done?!1:E}function GQ(Z){var E=Z.return;if(E)E.call(Z)}function m3(Z){var E=Object.getPrototypeOf(Z);if(typeof Z!=="function"||Z===G)return E;if(E!==G)return E;var L=Z.prototype,C=L&&Object.getPrototypeOf(L);if(C==null||C===Object.prototype)return E;var p=C.constructor;if(typeof p!=="function")return E;if(p===Z)return E;return p}function JB(){var Z;if(!o(P)&&typeof J.Reflect<"u"&&!(P in J.Reflect)&&typeof J.Reflect.defineMetadata==="function")Z=XB(J.Reflect);var E,L,C,p=new H,L$={registerProvider:b$,getProvider:g,setProvider:l};return L$;function b$(c){if(!Object.isExtensible(L$))throw Error("Cannot add provider to a frozen registry.");switch(!0){case Z===c:break;case o(E):E=c;break;case E===c:break;case o(L):L=c;break;case L===c:break;default:if(C===void 0)C=new V;C.add(c);break}}function J$(c,v$){if(!o(E)){if(E.isProviderFor(c,v$))return E;if(!o(L)){if(L.isProviderFor(c,v$))return E;if(!o(C)){var W$=QQ(C);while(!0){var R$=NQ(W$);if(!R$)return;var E4=zQ(R$);if(E4.isProviderFor(c,v$))return GQ(W$),E4}}}}if(!o(Z)&&Z.isProviderFor(c,v$))return Z;return}function g(c,v$){var W$=p.get(c),R$;if(!o(W$))R$=W$.get(v$);if(!o(R$))return R$;if(R$=J$(c,v$),!o(R$)){if(o(W$))W$=new q,p.set(c,W$);W$.set(v$,R$)}return R$}function y(c){if(o(c))throw TypeError();return E===c||L===c||!o(C)&&C.has(c)}function l(c,v$,W$){if(!y(W$))throw Error("Metadata provider not registered.");var R$=g(c,v$);if(R$!==W$){if(!o(R$))return!1;var E4=p.get(c);if(o(E4))E4=new q,p.set(c,E4);E4.set(v$,W$)}return!0}}function vB(){var Z;if(!o(P)&&T$(J.Reflect)&&Object.isExtensible(J.Reflect))Z=J.Reflect[P];if(o(Z))Z=JB();if(!o(P)&&T$(J.Reflect)&&Object.isExtensible(J.Reflect))Object.defineProperty(J.Reflect,P,{enumerable:!1,configurable:!1,writable:!1,value:Z});return Z}function DB(Z){var E=new H,L={isProviderFor:function(y,l){var c=E.get(y);if(o(c))return!1;return c.has(l)},OrdinaryDefineOwnMetadata:b$,OrdinaryHasOwnMetadata:p,OrdinaryGetOwnMetadata:L$,OrdinaryOwnMetadataKeys:J$,OrdinaryDeleteMetadata:g};return T.registerProvider(L),L;function C(y,l,c){var v$=E.get(y),W$=!1;if(o(v$)){if(!c)return;v$=new q,E.set(y,v$),W$=!0}var R$=v$.get(l);if(o(R$)){if(!c)return;if(R$=new q,v$.set(l,R$),!Z.setProvider(y,l,L)){if(v$.delete(l),W$)E.delete(y);throw Error("Wrong provider for target.")}}return R$}function p(y,l,c){var v$=C(l,c,!1);if(o(v$))return!1;return vQ(v$.has(y))}function L$(y,l,c){var v$=C(l,c,!1);if(o(v$))return;return v$.get(y)}function b$(y,l,c,v$){var W$=C(c,v$,!0);W$.set(y,l)}function J$(y,l){var c=[],v$=C(y,l,!1);if(o(v$))return c;var W$=v$.keys(),R$=QQ(W$),E4=0;while(!0){var VQ=NQ(R$);if(!VQ)return c.length=E4,c;var NB=zQ(VQ);try{c[E4]=NB}catch(GB){try{GQ(R$)}finally{throw GB}}E4++}}function g(y,l,c){var v$=C(l,c,!1);if(o(v$))return!1;if(!v$.delete(y))return!1;if(v$.size===0){var W$=E.get(l);if(!o(W$)){if(W$.delete(c),W$.size===0)E.delete(W$)}}return!0}}function XB(Z){var{defineMetadata:E,hasOwnMetadata:L,getOwnMetadata:C,getOwnMetadataKeys:p,deleteMetadata:L$}=Z,b$=new H,J$={isProviderFor:function(g,y){var l=b$.get(g);if(!o(l)&&l.has(y))return!0;if(p(g,y).length){if(o(l))l=new V,b$.set(g,l);return l.add(y),!0}return!1},OrdinaryDefineOwnMetadata:E,OrdinaryHasOwnMetadata:L,OrdinaryGetOwnMetadata:C,OrdinaryOwnMetadataKeys:p,OrdinaryDeleteMetadata:L$};return J$}function z2(Z,E,L){var C=T.getProvider(Z,E);if(!o(C))return C;if(L){if(T.setProvider(Z,E,M))return M;throw Error("Illegal state.")}return}function YB(){var Z={},E=[],L=function(){function J$(g,y,l){this._index=0,this._keys=g,this._values=y,this._selector=l}return J$.prototype["@@iterator"]=function(){return this},J$.prototype[X]=function(){return this},J$.prototype.next=function(){var g=this._index;if(g>=0&&g<this._keys.length){var y=this._selector(this._keys[g],this._values[g]);if(g+1>=this._keys.length)this._index=-1,this._keys=E,this._values=E;else this._index++;return{value:y,done:!1}}return{value:void 0,done:!0}},J$.prototype.throw=function(g){if(this._index>=0)this._index=-1,this._keys=E,this._values=E;throw g},J$.prototype.return=function(g){if(this._index>=0)this._index=-1,this._keys=E,this._values=E;return{value:g,done:!0}},J$}(),C=function(){function J$(){this._keys=[],this._values=[],this._cacheKey=Z,this._cacheIndex=-2}return Object.defineProperty(J$.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),J$.prototype.has=function(g){return this._find(g,!1)>=0},J$.prototype.get=function(g){var y=this._find(g,!1);return y>=0?this._values[y]:void 0},J$.prototype.set=function(g,y){var l=this._find(g,!0);return this._values[l]=y,this},J$.prototype.delete=function(g){var y=this._find(g,!1);if(y>=0){var l=this._keys.length;for(var c=y+1;c<l;c++)this._keys[c-1]=this._keys[c],this._values[c-1]=this._values[c];if(this._keys.length--,this._values.length--,i3(g,this._cacheKey))this._cacheKey=Z,this._cacheIndex=-2;return!0}return!1},J$.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=Z,this._cacheIndex=-2},J$.prototype.keys=function(){return new L(this._keys,this._values,p)},J$.prototype.values=function(){return new L(this._keys,this._values,L$)},J$.prototype.entries=function(){return new L(this._keys,this._values,b$)},J$.prototype["@@iterator"]=function(){return this.entries()},J$.prototype[X]=function(){return this.entries()},J$.prototype._find=function(g,y){if(!i3(this._cacheKey,g)){this._cacheIndex=-1;for(var l=0;l<this._keys.length;l++)if(i3(this._keys[l],g)){this._cacheIndex=l;break}}if(this._cacheIndex<0&&y)this._cacheIndex=this._keys.length,this._keys.push(g),this._values.push(void 0);return this._cacheIndex},J$}();return C;function p(J$,g){return J$}function L$(J$,g){return g}function b$(J$,g){return[J$,g]}}function QB(){var Z=function(){function E(){this._map=new q}return Object.defineProperty(E.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),E.prototype.has=function(L){return this._map.has(L)},E.prototype.add=function(L){return this._map.set(L,L),this},E.prototype.delete=function(L){return this._map.delete(L)},E.prototype.clear=function(){this._map.clear()},E.prototype.keys=function(){return this._map.keys()},E.prototype.values=function(){return this._map.keys()},E.prototype.entries=function(){return this._map.entries()},E.prototype["@@iterator"]=function(){return this.keys()},E.prototype[X]=function(){return this.keys()},E}();return Z}function zB(){var Z=16,E=N.create(),L=C();return function(){function g(){this._key=C()}return g.prototype.has=function(y){var l=p(y,!1);return l!==void 0?N.has(l,this._key):!1},g.prototype.get=function(y){var l=p(y,!1);return l!==void 0?N.get(l,this._key):void 0},g.prototype.set=function(y,l){var c=p(y,!0);return c[this._key]=l,this},g.prototype.delete=function(y){var l=p(y,!1);return l!==void 0?delete l[this._key]:!1},g.prototype.clear=function(){this._key=C()},g}();function C(){var g;do g="@@WeakMap@@"+J$();while(N.has(E,g));return E[g]=!0,g}function p(g,y){if(!v.call(g,L)){if(!y)return;Object.defineProperty(g,L,{value:N.create()})}return g[L]}function L$(g,y){for(var l=0;l<y;++l)g[l]=Math.random()*255|0;return g}function b$(g){if(typeof Uint8Array==="function"){var y=new Uint8Array(g);if(typeof crypto<"u")crypto.getRandomValues(y);else if(typeof msCrypto<"u")msCrypto.getRandomValues(y);else L$(y,g);return y}return L$(Array(g),g)}function J$(){var g=b$(Z);g[6]=g[6]&79|64,g[8]=g[8]&191|128;var y="";for(var l=0;l<Z;++l){var c=g[l];if(l===4||l===6||l===8)y+="-";if(c<16)y+="0";y+=c.toString(16).toLowerCase()}return y}}function c3(Z){return Z.__=void 0,delete Z.__,Z}})})(qQ||(qQ={}))});var N2=r((PB)=>{class p3 extends Error{constructor($,U,J){super(J);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=U,this.exitCode=$,this.nestedError=void 0}}class WQ extends p3{constructor($){super(1,"commander.invalidArgument",$);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}PB.CommanderError=p3;PB.InvalidArgumentError=WQ});var k0=r((jB)=>{var{InvalidArgumentError:LB}=N2();class BQ{constructor($,U){switch(this.description=U||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,$[0]){case"<":this.required=!0,this._name=$.slice(1,-1);break;case"[":this.required=!1,this._name=$.slice(1,-1);break;default:this.required=!0,this._name=$;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue($,U){if(U===this.defaultValue||!Array.isArray(U))return[$];return U.push($),U}default($,U){return this.defaultValue=$,this.defaultValueDescription=U,this}argParser($){return this.parseArg=$,this}choices($){return this.argChoices=$.slice(),this.parseArg=(U,J)=>{if(!this.argChoices.includes(U))throw new LB(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(U,J);return U},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function RB($){let U=$.name()+($.variadic===!0?"...":"");return $.required?"<"+U+">":"["+U+"]"}jB.Argument=BQ;jB.humanReadableArgName=RB});var r3=r((SB)=>{var{humanReadableArgName:AB}=k0();class ZQ{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext($){this.helpWidth=this.helpWidth??$.helpWidth??80}visibleCommands($){let U=$.commands.filter((v)=>!v._hidden),J=$._getHelpCommand();if(J&&!J._hidden)U.push(J);if(this.sortSubcommands)U.sort((v,_)=>{return v.name().localeCompare(_.name())});return U}compareOptions($,U){let J=(v)=>{return v.short?v.short.replace(/^-/,""):v.long.replace(/^--/,"")};return J($).localeCompare(J(U))}visibleOptions($){let U=$.options.filter((v)=>!v.hidden),J=$._getHelpOption();if(J&&!J.hidden){let v=J.short&&$._findOption(J.short),_=J.long&&$._findOption(J.long);if(!v&&!_)U.push(J);else if(J.long&&!_)U.push($.createOption(J.long,J.description));else if(J.short&&!v)U.push($.createOption(J.short,J.description))}if(this.sortOptions)U.sort(this.compareOptions);return U}visibleGlobalOptions($){if(!this.showGlobalOptions)return[];let U=[];for(let J=$.parent;J;J=J.parent){let v=J.options.filter((_)=>!_.hidden);U.push(...v)}if(this.sortOptions)U.sort(this.compareOptions);return U}visibleArguments($){if($._argsDescription)$.registeredArguments.forEach((U)=>{U.description=U.description||$._argsDescription[U.name()]||""});if($.registeredArguments.find((U)=>U.description))return $.registeredArguments;return[]}subcommandTerm($){let U=$.registeredArguments.map((J)=>AB(J)).join(" ");return $._name+($._aliases[0]?"|"+$._aliases[0]:"")+($.options.length?" [options]":"")+(U?" "+U:"")}optionTerm($){return $.flags}argumentTerm($){return $.name()}longestSubcommandTermLength($,U){return U.visibleCommands($).reduce((J,v)=>{return Math.max(J,this.displayWidth(U.styleSubcommandTerm(U.subcommandTerm(v))))},0)}longestOptionTermLength($,U){return U.visibleOptions($).reduce((J,v)=>{return Math.max(J,this.displayWidth(U.styleOptionTerm(U.optionTerm(v))))},0)}longestGlobalOptionTermLength($,U){return U.visibleGlobalOptions($).reduce((J,v)=>{return Math.max(J,this.displayWidth(U.styleOptionTerm(U.optionTerm(v))))},0)}longestArgumentTermLength($,U){return U.visibleArguments($).reduce((J,v)=>{return Math.max(J,this.displayWidth(U.styleArgumentTerm(U.argumentTerm(v))))},0)}commandUsage($){let U=$._name;if($._aliases[0])U=U+"|"+$._aliases[0];let J="";for(let v=$.parent;v;v=v.parent)J=v.name()+" "+J;return J+U+" "+$.usage()}commandDescription($){return $.description()}subcommandDescription($){return $.summary()||$.description()}optionDescription($){let U=[];if($.argChoices)U.push(`choices: ${$.argChoices.map((J)=>JSON.stringify(J)).join(", ")}`);if($.defaultValue!==void 0){if($.required||$.optional||$.isBoolean()&&typeof $.defaultValue==="boolean")U.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`)}if($.presetArg!==void 0&&$.optional)U.push(`preset: ${JSON.stringify($.presetArg)}`);if($.envVar!==void 0)U.push(`env: ${$.envVar}`);if(U.length>0){let J=`(${U.join(", ")})`;if($.description)return`${$.description} ${J}`;return J}return $.description}argumentDescription($){let U=[];if($.argChoices)U.push(`choices: ${$.argChoices.map((J)=>JSON.stringify(J)).join(", ")}`);if($.defaultValue!==void 0)U.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`);if(U.length>0){let J=`(${U.join(", ")})`;if($.description)return`${$.description} ${J}`;return J}return $.description}formatItemList($,U,J){if(U.length===0)return[];return[J.styleTitle($),...U,""]}groupItems($,U,J){let v=new Map;return $.forEach((_)=>{let D=J(_);if(!v.has(D))v.set(D,[])}),U.forEach((_)=>{let D=J(_);if(!v.has(D))v.set(D,[]);v.get(D).push(_)}),v}formatHelp($,U){let J=U.padWidth($,U),v=U.helpWidth??80;function _(N,G){return U.formatItem(N,J,G,U)}let D=[`${U.styleTitle("Usage:")} ${U.styleUsage(U.commandUsage($))}`,""],X=U.commandDescription($);if(X.length>0)D=D.concat([U.boxWrap(U.styleCommandDescription(X),v),""]);let Y=U.visibleArguments($).map((N)=>{return _(U.styleArgumentTerm(U.argumentTerm(N)),U.styleArgumentDescription(U.argumentDescription(N)))});if(D=D.concat(this.formatItemList("Arguments:",Y,U)),this.groupItems($.options,U.visibleOptions($),(N)=>N.helpGroupHeading??"Options:").forEach((N,G)=>{let q=N.map((V)=>{return _(U.styleOptionTerm(U.optionTerm(V)),U.styleOptionDescription(U.optionDescription(V)))});D=D.concat(this.formatItemList(G,q,U))}),U.showGlobalOptions){let N=U.visibleGlobalOptions($).map((G)=>{return _(U.styleOptionTerm(U.optionTerm(G)),U.styleOptionDescription(U.optionDescription(G)))});D=D.concat(this.formatItemList("Global Options:",N,U))}return this.groupItems($.commands,U.visibleCommands($),(N)=>N.helpGroup()||"Commands:").forEach((N,G)=>{let q=N.map((V)=>{return _(U.styleSubcommandTerm(U.subcommandTerm(V)),U.styleSubcommandDescription(U.subcommandDescription(V)))});D=D.concat(this.formatItemList(G,q,U))}),D.join(`
16
+ ***************************************************************************** */var qQ;(function($){(function(U){var J=typeof globalThis==="object"?globalThis:typeof global==="object"?global:typeof self==="object"?self:typeof this==="object"?this:Y(),v=_($);if(typeof J.Reflect<"u")v=_(J.Reflect,v);if(U(v,J),typeof J.Reflect>"u")J.Reflect=$;function _(Q,z){return function(N,G){if(Object.defineProperty(Q,N,{configurable:!0,writable:!0,value:G}),z)z(N,G)}}function D(){try{return Function("return this;")()}catch(Q){}}function X(){try{return(0,eval)("(function() { return this; })()")}catch(Q){}}function Y(){return D()||X()}})(function(U,J){var v=Object.prototype.hasOwnProperty,_=typeof Symbol==="function",D=_&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",X=_&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",Y=typeof Object.create==="function",Q={__proto__:[]}instanceof Array,z=!Y&&!Q,N={create:Y?function(){return c3(Object.create(null))}:Q?function(){return c3({__proto__:null})}:function(){return c3({})},has:z?function(Z,E){return v.call(Z,E)}:function(Z,E){return E in Z},get:z?function(Z,E){return v.call(Z,E)?Z[E]:void 0}:function(Z,E){return Z[E]}},G=Object.getPrototypeOf(Function),q=typeof Map==="function"&&typeof Map.prototype.entries==="function"?Map:YB(),V=typeof Set==="function"&&typeof Set.prototype.entries==="function"?Set:QB(),H=typeof WeakMap==="function"?WeakMap:zB(),P=_?Symbol.for("@reflect-metadata:registry"):void 0,T=vB(),M=DB(T);function f(Z,E,L,C){if(!o(L)){if(!DQ(Z))throw TypeError();if(!T$(E))throw TypeError();if(!T$(C)&&!o(C)&&!Q6(C))throw TypeError();if(Q6(C))C=void 0;return L=M4(L),a$(Z,E,L,C)}else{if(!DQ(Z))throw TypeError();if(!XQ(E))throw TypeError();return S$(Z,E)}}U("decorate",f);function R(Z,E){function L(C,p){if(!T$(C))throw TypeError();if(!o(p)&&!_B(p))throw TypeError();M0(Z,E,C,p)}return L}U("metadata",R);function x(Z,E,L,C){if(!T$(L))throw TypeError();if(!o(C))C=M4(C);return M0(Z,E,L,C)}U("defineMetadata",x);function i(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);return c$(Z,E,L)}U("hasMetadata",i);function d(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);return Z4(Z,E,L)}U("hasOwnMetadata",d);function s(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);return Y6(Z,E,L)}U("getMetadata",s);function X$(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);return Y2(Z,E,L)}U("getOwnMetadata",X$);function _$(Z,E){if(!T$(Z))throw TypeError();if(!o(E))E=M4(E);return Q2(Z,E)}U("getMetadataKeys",_$);function A$(Z,E){if(!T$(Z))throw TypeError();if(!o(E))E=M4(E);return b0(Z,E)}U("getOwnMetadataKeys",A$);function l$(Z,E,L){if(!T$(E))throw TypeError();if(!o(L))L=M4(L);if(!T$(E))throw TypeError();if(!o(L))L=M4(L);var C=z2(E,L,!1);if(o(C))return!1;return C.OrdinaryDeleteMetadata(Z,E,L)}U("deleteMetadata",l$);function S$(Z,E){for(var L=Z.length-1;L>=0;--L){var C=Z[L],p=C(E);if(!o(p)&&!Q6(p)){if(!XQ(p))throw TypeError();E=p}}return E}function a$(Z,E,L,C){for(var p=Z.length-1;p>=0;--p){var L$=Z[p],b$=L$(E,L,C);if(!o(b$)&&!Q6(b$)){if(!T$(b$))throw TypeError();C=b$}}return C}function c$(Z,E,L){var C=Z4(Z,E,L);if(C)return!0;var p=m3(E);if(!Q6(p))return c$(Z,p,L);return!1}function Z4(Z,E,L){var C=z2(E,L,!1);if(o(C))return!1;return vQ(C.OrdinaryHasOwnMetadata(Z,E,L))}function Y6(Z,E,L){var C=Z4(Z,E,L);if(C)return Y2(Z,E,L);var p=m3(E);if(!Q6(p))return Y6(Z,p,L);return}function Y2(Z,E,L){var C=z2(E,L,!1);if(o(C))return;return C.OrdinaryGetOwnMetadata(Z,E,L)}function M0(Z,E,L,C){var p=z2(L,C,!0);p.OrdinaryDefineOwnMetadata(Z,E,L,C)}function Q2(Z,E){var L=b0(Z,E),C=m3(Z);if(C===null)return L;var p=Q2(C,E);if(p.length<=0)return L;if(L.length<=0)return p;var L$=new V,b$=[];for(var J$=0,g=L;J$<g.length;J$++){var y=g[J$],l=L$.has(y);if(!l)L$.add(y),b$.push(y)}for(var c=0,v$=p;c<v$.length;c++){var y=v$[c],l=L$.has(y);if(!l)L$.add(y),b$.push(y)}return b$}function b0(Z,E){var L=z2(Z,E,!1);if(!L)return[];return L.OrdinaryOwnMetadataKeys(Z,E)}function JQ(Z){if(Z===null)return 1;switch(typeof Z){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return Z===null?1:6;default:return 6}}function o(Z){return Z===void 0}function Q6(Z){return Z===null}function eW(Z){return typeof Z==="symbol"}function T$(Z){return typeof Z==="object"?Z!==null:typeof Z==="function"}function sW(Z,E){switch(JQ(Z)){case 0:return Z;case 1:return Z;case 2:return Z;case 3:return Z;case 4:return Z;case 5:return Z}var L=E===3?"string":E===5?"number":"default",C=YQ(Z,D);if(C!==void 0){var p=C.call(Z,L);if(T$(p))throw TypeError();return p}return $B(Z,L==="default"?"number":L)}function $B(Z,E){if(E==="string"){var L=Z.toString;if(z6(L)){var C=L.call(Z);if(!T$(C))return C}var p=Z.valueOf;if(z6(p)){var C=p.call(Z);if(!T$(C))return C}}else{var p=Z.valueOf;if(z6(p)){var C=p.call(Z);if(!T$(C))return C}var L$=Z.toString;if(z6(L$)){var C=L$.call(Z);if(!T$(C))return C}}throw TypeError()}function vQ(Z){return!!Z}function UB(Z){return""+Z}function M4(Z){var E=sW(Z,3);if(eW(E))return E;return UB(E)}function DQ(Z){return Array.isArray?Array.isArray(Z):Z instanceof Object?Z instanceof Array:Object.prototype.toString.call(Z)==="[object Array]"}function z6(Z){return typeof Z==="function"}function XQ(Z){return typeof Z==="function"}function _B(Z){switch(JQ(Z)){case 3:return!0;case 4:return!0;default:return!1}}function i3(Z,E){return Z===E||Z!==Z&&E!==E}function YQ(Z,E){var L=Z[E];if(L===void 0||L===null)return;if(!z6(L))throw TypeError();return L}function QQ(Z){var E=YQ(Z,X);if(!z6(E))throw TypeError();var L=E.call(Z);if(!T$(L))throw TypeError();return L}function zQ(Z){return Z.value}function NQ(Z){var E=Z.next();return E.done?!1:E}function GQ(Z){var E=Z.return;if(E)E.call(Z)}function m3(Z){var E=Object.getPrototypeOf(Z);if(typeof Z!=="function"||Z===G)return E;if(E!==G)return E;var L=Z.prototype,C=L&&Object.getPrototypeOf(L);if(C==null||C===Object.prototype)return E;var p=C.constructor;if(typeof p!=="function")return E;if(p===Z)return E;return p}function JB(){var Z;if(!o(P)&&typeof J.Reflect<"u"&&!(P in J.Reflect)&&typeof J.Reflect.defineMetadata==="function")Z=XB(J.Reflect);var E,L,C,p=new H,L$={registerProvider:b$,getProvider:g,setProvider:l};return L$;function b$(c){if(!Object.isExtensible(L$))throw Error("Cannot add provider to a frozen registry.");switch(!0){case Z===c:break;case o(E):E=c;break;case E===c:break;case o(L):L=c;break;case L===c:break;default:if(C===void 0)C=new V;C.add(c);break}}function J$(c,v$){if(!o(E)){if(E.isProviderFor(c,v$))return E;if(!o(L)){if(L.isProviderFor(c,v$))return E;if(!o(C)){var B$=QQ(C);while(!0){var R$=NQ(B$);if(!R$)return;var E4=zQ(R$);if(E4.isProviderFor(c,v$))return GQ(B$),E4}}}}if(!o(Z)&&Z.isProviderFor(c,v$))return Z;return}function g(c,v$){var B$=p.get(c),R$;if(!o(B$))R$=B$.get(v$);if(!o(R$))return R$;if(R$=J$(c,v$),!o(R$)){if(o(B$))B$=new q,p.set(c,B$);B$.set(v$,R$)}return R$}function y(c){if(o(c))throw TypeError();return E===c||L===c||!o(C)&&C.has(c)}function l(c,v$,B$){if(!y(B$))throw Error("Metadata provider not registered.");var R$=g(c,v$);if(R$!==B$){if(!o(R$))return!1;var E4=p.get(c);if(o(E4))E4=new q,p.set(c,E4);E4.set(v$,B$)}return!0}}function vB(){var Z;if(!o(P)&&T$(J.Reflect)&&Object.isExtensible(J.Reflect))Z=J.Reflect[P];if(o(Z))Z=JB();if(!o(P)&&T$(J.Reflect)&&Object.isExtensible(J.Reflect))Object.defineProperty(J.Reflect,P,{enumerable:!1,configurable:!1,writable:!1,value:Z});return Z}function DB(Z){var E=new H,L={isProviderFor:function(y,l){var c=E.get(y);if(o(c))return!1;return c.has(l)},OrdinaryDefineOwnMetadata:b$,OrdinaryHasOwnMetadata:p,OrdinaryGetOwnMetadata:L$,OrdinaryOwnMetadataKeys:J$,OrdinaryDeleteMetadata:g};return T.registerProvider(L),L;function C(y,l,c){var v$=E.get(y),B$=!1;if(o(v$)){if(!c)return;v$=new q,E.set(y,v$),B$=!0}var R$=v$.get(l);if(o(R$)){if(!c)return;if(R$=new q,v$.set(l,R$),!Z.setProvider(y,l,L)){if(v$.delete(l),B$)E.delete(y);throw Error("Wrong provider for target.")}}return R$}function p(y,l,c){var v$=C(l,c,!1);if(o(v$))return!1;return vQ(v$.has(y))}function L$(y,l,c){var v$=C(l,c,!1);if(o(v$))return;return v$.get(y)}function b$(y,l,c,v$){var B$=C(c,v$,!0);B$.set(y,l)}function J$(y,l){var c=[],v$=C(y,l,!1);if(o(v$))return c;var B$=v$.keys(),R$=QQ(B$),E4=0;while(!0){var VQ=NQ(R$);if(!VQ)return c.length=E4,c;var NB=zQ(VQ);try{c[E4]=NB}catch(GB){try{GQ(R$)}finally{throw GB}}E4++}}function g(y,l,c){var v$=C(l,c,!1);if(o(v$))return!1;if(!v$.delete(y))return!1;if(v$.size===0){var B$=E.get(l);if(!o(B$)){if(B$.delete(c),B$.size===0)E.delete(B$)}}return!0}}function XB(Z){var{defineMetadata:E,hasOwnMetadata:L,getOwnMetadata:C,getOwnMetadataKeys:p,deleteMetadata:L$}=Z,b$=new H,J$={isProviderFor:function(g,y){var l=b$.get(g);if(!o(l)&&l.has(y))return!0;if(p(g,y).length){if(o(l))l=new V,b$.set(g,l);return l.add(y),!0}return!1},OrdinaryDefineOwnMetadata:E,OrdinaryHasOwnMetadata:L,OrdinaryGetOwnMetadata:C,OrdinaryOwnMetadataKeys:p,OrdinaryDeleteMetadata:L$};return J$}function z2(Z,E,L){var C=T.getProvider(Z,E);if(!o(C))return C;if(L){if(T.setProvider(Z,E,M))return M;throw Error("Illegal state.")}return}function YB(){var Z={},E=[],L=function(){function J$(g,y,l){this._index=0,this._keys=g,this._values=y,this._selector=l}return J$.prototype["@@iterator"]=function(){return this},J$.prototype[X]=function(){return this},J$.prototype.next=function(){var g=this._index;if(g>=0&&g<this._keys.length){var y=this._selector(this._keys[g],this._values[g]);if(g+1>=this._keys.length)this._index=-1,this._keys=E,this._values=E;else this._index++;return{value:y,done:!1}}return{value:void 0,done:!0}},J$.prototype.throw=function(g){if(this._index>=0)this._index=-1,this._keys=E,this._values=E;throw g},J$.prototype.return=function(g){if(this._index>=0)this._index=-1,this._keys=E,this._values=E;return{value:g,done:!0}},J$}(),C=function(){function J$(){this._keys=[],this._values=[],this._cacheKey=Z,this._cacheIndex=-2}return Object.defineProperty(J$.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),J$.prototype.has=function(g){return this._find(g,!1)>=0},J$.prototype.get=function(g){var y=this._find(g,!1);return y>=0?this._values[y]:void 0},J$.prototype.set=function(g,y){var l=this._find(g,!0);return this._values[l]=y,this},J$.prototype.delete=function(g){var y=this._find(g,!1);if(y>=0){var l=this._keys.length;for(var c=y+1;c<l;c++)this._keys[c-1]=this._keys[c],this._values[c-1]=this._values[c];if(this._keys.length--,this._values.length--,i3(g,this._cacheKey))this._cacheKey=Z,this._cacheIndex=-2;return!0}return!1},J$.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=Z,this._cacheIndex=-2},J$.prototype.keys=function(){return new L(this._keys,this._values,p)},J$.prototype.values=function(){return new L(this._keys,this._values,L$)},J$.prototype.entries=function(){return new L(this._keys,this._values,b$)},J$.prototype["@@iterator"]=function(){return this.entries()},J$.prototype[X]=function(){return this.entries()},J$.prototype._find=function(g,y){if(!i3(this._cacheKey,g)){this._cacheIndex=-1;for(var l=0;l<this._keys.length;l++)if(i3(this._keys[l],g)){this._cacheIndex=l;break}}if(this._cacheIndex<0&&y)this._cacheIndex=this._keys.length,this._keys.push(g),this._values.push(void 0);return this._cacheIndex},J$}();return C;function p(J$,g){return J$}function L$(J$,g){return g}function b$(J$,g){return[J$,g]}}function QB(){var Z=function(){function E(){this._map=new q}return Object.defineProperty(E.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),E.prototype.has=function(L){return this._map.has(L)},E.prototype.add=function(L){return this._map.set(L,L),this},E.prototype.delete=function(L){return this._map.delete(L)},E.prototype.clear=function(){this._map.clear()},E.prototype.keys=function(){return this._map.keys()},E.prototype.values=function(){return this._map.keys()},E.prototype.entries=function(){return this._map.entries()},E.prototype["@@iterator"]=function(){return this.keys()},E.prototype[X]=function(){return this.keys()},E}();return Z}function zB(){var Z=16,E=N.create(),L=C();return function(){function g(){this._key=C()}return g.prototype.has=function(y){var l=p(y,!1);return l!==void 0?N.has(l,this._key):!1},g.prototype.get=function(y){var l=p(y,!1);return l!==void 0?N.get(l,this._key):void 0},g.prototype.set=function(y,l){var c=p(y,!0);return c[this._key]=l,this},g.prototype.delete=function(y){var l=p(y,!1);return l!==void 0?delete l[this._key]:!1},g.prototype.clear=function(){this._key=C()},g}();function C(){var g;do g="@@WeakMap@@"+J$();while(N.has(E,g));return E[g]=!0,g}function p(g,y){if(!v.call(g,L)){if(!y)return;Object.defineProperty(g,L,{value:N.create()})}return g[L]}function L$(g,y){for(var l=0;l<y;++l)g[l]=Math.random()*255|0;return g}function b$(g){if(typeof Uint8Array==="function"){var y=new Uint8Array(g);if(typeof crypto<"u")crypto.getRandomValues(y);else if(typeof msCrypto<"u")msCrypto.getRandomValues(y);else L$(y,g);return y}return L$(Array(g),g)}function J$(){var g=b$(Z);g[6]=g[6]&79|64,g[8]=g[8]&191|128;var y="";for(var l=0;l<Z;++l){var c=g[l];if(l===4||l===6||l===8)y+="-";if(c<16)y+="0";y+=c.toString(16).toLowerCase()}return y}}function c3(Z){return Z.__=void 0,delete Z.__,Z}})})(qQ||(qQ={}))});var N2=r((PB)=>{class p3 extends Error{constructor($,U,J){super(J);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=U,this.exitCode=$,this.nestedError=void 0}}class WQ extends p3{constructor($){super(1,"commander.invalidArgument",$);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}PB.CommanderError=p3;PB.InvalidArgumentError=WQ});var k0=r((jB)=>{var{InvalidArgumentError:LB}=N2();class BQ{constructor($,U){switch(this.description=U||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,$[0]){case"<":this.required=!0,this._name=$.slice(1,-1);break;case"[":this.required=!1,this._name=$.slice(1,-1);break;default:this.required=!0,this._name=$;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue($,U){if(U===this.defaultValue||!Array.isArray(U))return[$];return U.push($),U}default($,U){return this.defaultValue=$,this.defaultValueDescription=U,this}argParser($){return this.parseArg=$,this}choices($){return this.argChoices=$.slice(),this.parseArg=(U,J)=>{if(!this.argChoices.includes(U))throw new LB(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(U,J);return U},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function RB($){let U=$.name()+($.variadic===!0?"...":"");return $.required?"<"+U+">":"["+U+"]"}jB.Argument=BQ;jB.humanReadableArgName=RB});var r3=r((SB)=>{var{humanReadableArgName:AB}=k0();class ZQ{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext($){this.helpWidth=this.helpWidth??$.helpWidth??80}visibleCommands($){let U=$.commands.filter((v)=>!v._hidden),J=$._getHelpCommand();if(J&&!J._hidden)U.push(J);if(this.sortSubcommands)U.sort((v,_)=>{return v.name().localeCompare(_.name())});return U}compareOptions($,U){let J=(v)=>{return v.short?v.short.replace(/^-/,""):v.long.replace(/^--/,"")};return J($).localeCompare(J(U))}visibleOptions($){let U=$.options.filter((v)=>!v.hidden),J=$._getHelpOption();if(J&&!J.hidden){let v=J.short&&$._findOption(J.short),_=J.long&&$._findOption(J.long);if(!v&&!_)U.push(J);else if(J.long&&!_)U.push($.createOption(J.long,J.description));else if(J.short&&!v)U.push($.createOption(J.short,J.description))}if(this.sortOptions)U.sort(this.compareOptions);return U}visibleGlobalOptions($){if(!this.showGlobalOptions)return[];let U=[];for(let J=$.parent;J;J=J.parent){let v=J.options.filter((_)=>!_.hidden);U.push(...v)}if(this.sortOptions)U.sort(this.compareOptions);return U}visibleArguments($){if($._argsDescription)$.registeredArguments.forEach((U)=>{U.description=U.description||$._argsDescription[U.name()]||""});if($.registeredArguments.find((U)=>U.description))return $.registeredArguments;return[]}subcommandTerm($){let U=$.registeredArguments.map((J)=>AB(J)).join(" ");return $._name+($._aliases[0]?"|"+$._aliases[0]:"")+($.options.length?" [options]":"")+(U?" "+U:"")}optionTerm($){return $.flags}argumentTerm($){return $.name()}longestSubcommandTermLength($,U){return U.visibleCommands($).reduce((J,v)=>{return Math.max(J,this.displayWidth(U.styleSubcommandTerm(U.subcommandTerm(v))))},0)}longestOptionTermLength($,U){return U.visibleOptions($).reduce((J,v)=>{return Math.max(J,this.displayWidth(U.styleOptionTerm(U.optionTerm(v))))},0)}longestGlobalOptionTermLength($,U){return U.visibleGlobalOptions($).reduce((J,v)=>{return Math.max(J,this.displayWidth(U.styleOptionTerm(U.optionTerm(v))))},0)}longestArgumentTermLength($,U){return U.visibleArguments($).reduce((J,v)=>{return Math.max(J,this.displayWidth(U.styleArgumentTerm(U.argumentTerm(v))))},0)}commandUsage($){let U=$._name;if($._aliases[0])U=U+"|"+$._aliases[0];let J="";for(let v=$.parent;v;v=v.parent)J=v.name()+" "+J;return J+U+" "+$.usage()}commandDescription($){return $.description()}subcommandDescription($){return $.summary()||$.description()}optionDescription($){let U=[];if($.argChoices)U.push(`choices: ${$.argChoices.map((J)=>JSON.stringify(J)).join(", ")}`);if($.defaultValue!==void 0){if($.required||$.optional||$.isBoolean()&&typeof $.defaultValue==="boolean")U.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`)}if($.presetArg!==void 0&&$.optional)U.push(`preset: ${JSON.stringify($.presetArg)}`);if($.envVar!==void 0)U.push(`env: ${$.envVar}`);if(U.length>0){let J=`(${U.join(", ")})`;if($.description)return`${$.description} ${J}`;return J}return $.description}argumentDescription($){let U=[];if($.argChoices)U.push(`choices: ${$.argChoices.map((J)=>JSON.stringify(J)).join(", ")}`);if($.defaultValue!==void 0)U.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`);if(U.length>0){let J=`(${U.join(", ")})`;if($.description)return`${$.description} ${J}`;return J}return $.description}formatItemList($,U,J){if(U.length===0)return[];return[J.styleTitle($),...U,""]}groupItems($,U,J){let v=new Map;return $.forEach((_)=>{let D=J(_);if(!v.has(D))v.set(D,[])}),U.forEach((_)=>{let D=J(_);if(!v.has(D))v.set(D,[]);v.get(D).push(_)}),v}formatHelp($,U){let J=U.padWidth($,U),v=U.helpWidth??80;function _(N,G){return U.formatItem(N,J,G,U)}let D=[`${U.styleTitle("Usage:")} ${U.styleUsage(U.commandUsage($))}`,""],X=U.commandDescription($);if(X.length>0)D=D.concat([U.boxWrap(U.styleCommandDescription(X),v),""]);let Y=U.visibleArguments($).map((N)=>{return _(U.styleArgumentTerm(U.argumentTerm(N)),U.styleArgumentDescription(U.argumentDescription(N)))});if(D=D.concat(this.formatItemList("Arguments:",Y,U)),this.groupItems($.options,U.visibleOptions($),(N)=>N.helpGroupHeading??"Options:").forEach((N,G)=>{let q=N.map((V)=>{return _(U.styleOptionTerm(U.optionTerm(V)),U.styleOptionDescription(U.optionDescription(V)))});D=D.concat(this.formatItemList(G,q,U))}),U.showGlobalOptions){let N=U.visibleGlobalOptions($).map((G)=>{return _(U.styleOptionTerm(U.optionTerm(G)),U.styleOptionDescription(U.optionDescription(G)))});D=D.concat(this.formatItemList("Global Options:",N,U))}return this.groupItems($.commands,U.visibleCommands($),(N)=>N.helpGroup()||"Commands:").forEach((N,G)=>{let q=N.map((V)=>{return _(U.styleSubcommandTerm(U.subcommandTerm(V)),U.styleSubcommandDescription(U.subcommandDescription(V)))});D=D.concat(this.formatItemList(G,q,U))}),D.join(`
17
17
  `)}displayWidth($){return EQ($).length}styleTitle($){return $}styleUsage($){return $.split(" ").map((U)=>{if(U==="[options]")return this.styleOptionText(U);if(U==="[command]")return this.styleSubcommandText(U);if(U[0]==="["||U[0]==="<")return this.styleArgumentText(U);return this.styleCommandText(U)}).join(" ")}styleCommandDescription($){return this.styleDescriptionText($)}styleOptionDescription($){return this.styleDescriptionText($)}styleSubcommandDescription($){return this.styleDescriptionText($)}styleArgumentDescription($){return this.styleDescriptionText($)}styleDescriptionText($){return $}styleOptionTerm($){return this.styleOptionText($)}styleSubcommandTerm($){return $.split(" ").map((U)=>{if(U==="[options]")return this.styleOptionText(U);if(U[0]==="["||U[0]==="<")return this.styleArgumentText(U);return this.styleSubcommandText(U)}).join(" ")}styleArgumentTerm($){return this.styleArgumentText($)}styleOptionText($){return $}styleArgumentText($){return $}styleSubcommandText($){return $}styleCommandText($){return $}padWidth($,U){return Math.max(U.longestOptionTermLength($,U),U.longestGlobalOptionTermLength($,U),U.longestSubcommandTermLength($,U),U.longestArgumentTermLength($,U))}preformatted($){return/\n[^\S\r\n]/.test($)}formatItem($,U,J,v){let D=" ".repeat(2);if(!J)return D+$;let X=$.padEnd(U+$.length-v.displayWidth($)),Y=2,z=(this.helpWidth??80)-U-Y-2,N;if(z<this.minWidthToWrap||v.preformatted(J))N=J;else N=v.boxWrap(J,z).replace(/\n/g,`
18
18
  `+" ".repeat(U+Y));return D+X+" ".repeat(Y)+N.replace(/\n/g,`
19
19
  ${D}`)}boxWrap($,U){if(U<this.minWidthToWrap)return $;let J=$.split(/\r\n|\n/),v=/[\s]*[^\s]+/g,_=[];return J.forEach((D)=>{let X=D.match(v);if(X===null){_.push("");return}let Y=[X.shift()],Q=this.displayWidth(Y[0]);X.forEach((z)=>{let N=this.displayWidth(z);if(Q+N<=U){Y.push(z),Q+=N;return}_.push(Y.join(""));let G=z.trimStart();Y=[G],Q=this.displayWidth(G)}),_.push(Y.join(""))}),_.join(`
@@ -327,7 +327,7 @@ ${f}`;return P.pop(),`{${d}}`}case"number":return isFinite(H)?String(H):U?U(H):"
327
327
  ON CONFLICT(phone) DO UPDATE SET
328
328
  name = COALESCE(excluded.name, contacts.name),
329
329
  updated_at = datetime('now')
330
- `),Pj=d$.prepare("SELECT * FROM contacts WHERE phone = ?"),wj=d$.prepare("SELECT * FROM contacts ORDER BY status, name, phone"),Tj=d$.prepare("SELECT * FROM contacts WHERE status = ? ORDER BY name, phone"),Lj=d$.prepare("DELETE FROM contacts WHERE phone = ?"),Kq=d$.prepare("UPDATE contacts SET status = ?, agent_id = ?, updated_at = datetime('now') WHERE phone = ?")});class cq{config=xD;getConfig(){return this.config}setConfig($){this.config=$}listAccounts(){return Object.keys(this.config.accounts)}resolveAccount($){let U=this.config.accounts[$];if(!U)return null;let J=V$.getState($),_=V$.getSocket($)?.user?.id?.split(":")[0];return{id:$,name:U.name,phone:_,state:J,enabled:U.enabled}}isAuthenticated($){return V$.getState($)==="connected"}}class nq{checkAccess($,U,J,v){let _=u1(v,$);if(J){let Y=_.groupPolicy;if(Y==="closed")return{allowed:!1,reason:"groups_disabled"};if(Y==="allowlist"){let Q=_.groupAllowFrom.includes(U),z=a6(U);if(!Q&&!z)return{allowed:!1,pending:!0,reason:"group_not_allowed"}}}let D=_.dmPolicy,X=H$(U);if(_.allowFrom.length>0){if(_.allowFrom.some((Q)=>H$(Q)===X))return{allowed:!0}}if(a6(X))return{allowed:!0};switch(D){case"open":return{allowed:!0};case"pairing":return{allowed:!1,pending:!0,reason:"pending_approval"};case"closed":return{allowed:!1,reason:"dm_closed"};default:return{allowed:!1,reason:"unknown_policy"}}}getDmPolicy($,U){return u1(U,$).dmPolicy}getGroupPolicy($,U){return u1(U,$).groupPolicy}isAllowed($,U,J){return this.checkAccess($,U,!1,J).allowed}}class pq{async send($,U,J){let v=V$.getSocket($);if(!v)return{success:!1,error:`Account ${$} not connected`};let _=await uX(v,U,J);if(_.success)Z3($);else E3($,_.error??"Unknown send error");return _}async sendTyping($,U,J){let v=V$.getSocket($);if(!v){B$.warn(`Cannot send typing - account ${$} not connected`);return}await gX(v,U,J)}async sendReadReceipt($,U,J){let v=V$.getSocket($);if(!v){B$.warn(`Cannot send read receipt - account ${$} not connected`);return}await q3(v,U,U,J)}async sendReaction($,U,J,v){let _=V$.getSocket($);if(!_){B$.warn(`Cannot send reaction - account ${$} not connected`);return}await H0(_,U,J,v)}}class rq{configAdapter;securityAdapter;stateCallbacks=yq;qrCallbacks=lq;messageCallbacks=new Set;constructor($,U){if(this.configAdapter=$,this.securityAdapter=U,gq)return;gq=!0,V$.on("stateChange",(J,v)=>{for(let _ of yq)_(J,v)}),V$.on("qrCode",(J,v)=>{for(let _ of lq)_(J,v)}),V$.on("socketReady",(J,v)=>{if(iq.has(v)){B$.debug(`Socket already subscribed for ${J}, skipping`);return}iq.add(v),B$.info(`Socket ready for ${J}, subscribing to messages`),v.ev.on("messages.upsert",async({messages:_,type:D})=>{if(D!=="notify")return;let X=this.configAdapter.getConfig();for(let Y of _)await this.handleMessage(J,Y,X)})})}async start($,U){let J=u1(U,$);if(!J.enabled){B$.info(`Account ${$} is disabled, skipping`);return}await V$.start($,J)}async stop($){await V$.stop($)}getState($){return V$.getState($)}onStateChange($){return this.stateCallbacks.add($),()=>this.stateCallbacks.delete($)}onQrCode($){return this.qrCallbacks.add($),()=>this.qrCallbacks.delete($)}onMessage($){return this.messageCallbacks.add($),()=>this.messageCallbacks.delete($)}async handleMessage($,U,J){let v=u1(J,$),_=xX(U,v);if(!_.pass){B$.debug(`Message filtered: ${_.reason}`);return}let D,X,Y=U.key.remoteJid;if(Y&&Y.endsWith("@g.us")){let V=V$.getSocket($);if(V)try{let H=await V.groupMetadata(Y);D=H.subject,X=H.participants.map((P)=>{let T=H$(P.id),M=P.id.split("@")[0];uq(T,P.notify||null);let f=hq(T),R=f||P.notify||M;return B$.info("Group member resolution",{jid:P.id,normalizedId:T,pushName:P.notify??"(none)",contactName:f??"(none)",resolvedName:R}),R})}catch(H){B$.debug("Failed to fetch group metadata",{jid:Y,error:H})}}let Q=kX($,U,D,X);if(!Q)return;if((Q.media?.type==="audio"||Q.media?.type==="document"&&Q.media.mimetype.startsWith("audio/"))&&Q.media)try{let V=await bX(U);if(V){if(Q.media.data=V,B$.debug("Audio downloaded",{size:V.length,mimetype:Q.media.mimetype}),process.env.OPENAI_API_KEY){let H=await H3(V,Q.media.mimetype);Q.transcription=H.text,B$.info("Audio transcribed",{textLength:H.text.length})}}}catch(V){B$.warn("Failed to process audio",{error:V})}B$.info("Message received",{accountId:$,senderId:Q.senderId,chatId:Q.chatId,isGroup:Q.isGroup}),cX($),B3($);let N=Q.isGroup?Q.chatId:Q.senderId;B$.info("Security check",{checkId:N,isGroup:Q.isGroup,chatId:Q.chatId,senderId:Q.senderId});let G=this.securityAdapter.checkAccess($,N,Q.isGroup,J);if(B$.info("Security decision",G),!G.allowed){if(G.pending){let V=Q.isGroup?Q.chatId:Q.senderId,H=Q.isGroup?null:Q.senderName??null;F3(V,H),B$.info("Saved pending",{id:V,isGroup:Q.isGroup})}else B$.debug(`Message blocked: ${G.reason}`);return}if(v.sendReadReceipts){let V=V$.getSocket($);if(V)await q3(V,Q.chatId,Q.senderId,[Q.id])}if(v.ackReaction){let V=V$.getSocket($);if(V)await yX(V,Q.chatId,Q.id,Q.isGroup,!1,v.ackReaction)}if(Q.isGroup){if(Iq(Q.chatId)==="mention"){let H=V$.getSocket($),P=H?.user?.id,T=H?.user?.lid,M=U.message?.extendedTextMessage?.contextInfo?.mentionedJid??[],f=(i)=>i.split("@")[0].split(":")[0],R=[P,T].filter(Boolean).map((i)=>f(i)),x=M.some((i)=>R.includes(f(i)));if(B$.info("Mention check",{botJid:P,botLid:T,mentioned:x,mentions:M}),!x){B$.debug("Skipping group message (not mentioned)",{chatId:Q.chatId});return}}}let q=v.debounceMs;if(q>0){let V=await CX(Q,q),H=IX(V);this.emitMessage(H)}else this.emitMessage(Q)}emitMessage($){let U={...$,media:$.media?{...$.media,data:void 0}:void 0,raw:void 0};F$.emit(`whatsapp.${$.accountId}.inbound`,U).catch((J)=>B$.error("Failed to emit inbound message",J));for(let J of this.messageCallbacks)try{J($)}catch(v){B$.error("Error in message callback",v)}}}class dq{getHealth(){return mX()}getSnapshot($){return q0($)}recordSent($){Z3($)}recordReceived($){B3($)}recordError($,U){E3($,U)}}function e6($){let U=new cq,J=new nq,v=new pq,_=new rq(U,J),D=new dq;if($)U.setConfig(CD($));return{id:"whatsapp",meta:jj,capabilities:Oj,config:U,security:J,outbound:v,gateway:_,status:D,async init(){B$.info("WhatsApp plugin initialized"),_.onQrCode((X,Y)=>{B$.info(`Scan QR code for ${X} (Settings > Linked Devices):`),mq.default.generate(Y,{small:!0})}),_.onStateChange((X,Y)=>{B$.info(`Account ${X} state: ${Y}`)})},async shutdown(){B$.info("Shutting down WhatsApp plugin"),await V$.stopAll()}}}var mq,B$,jj,Oj,gq=!1,yq,lq,iq,Kj;var dX=w(()=>{T1();ID();Q3();fX();hX();lX();nX();c1();W0();j$();mq=C$(BV(),1),B$=t.child("wa:plugin"),jj={id:"whatsapp",name:"WhatsApp",description:"WhatsApp messaging via Baileys",version:"1.0.0"},Oj={media:!0,reactions:!0,replies:!0,edits:!1,groups:!0,typing:!0,readReceipts:!0};yq=new Set,lq=new Set,iq=new WeakSet;Kj=e6()});import Aj from"path";import Sj from"os";function oq($=process.env){return $.RAVI_STATE_DIR||Aj.join(Sj.homedir(),".ravi")}function w3($){return $.replace(/\/+$/,"")}async function y$($,U={},J=Mj){let v=new AbortController,_=setTimeout(()=>v.abort(),J);try{return await fetch($,{...U,signal:v.signal})}finally{clearTimeout(_)}}var Mj=30000;var T3=()=>{};function tq($){return{homeserver:$.homeserver,userId:$.userId,accessToken:$.accessToken,deviceId:$.deviceId,createdAt:new Date($.createdAt).toISOString(),lastUsedAt:$.lastUsedAt?new Date($.lastUsedAt).toISOString():void 0}}function Z1($){let U=f4($);if(!U)return null;return tq(U)}function K4(){let $=n6();if($.length===0)return null;let U={version:4,accounts:{}};for(let J of $)U.accounts[J.username]=tq(J);return U}function E1($,U){c6({username:$,userId:U.userId,homeserver:U.homeserver,accessToken:U.accessToken,deviceId:U.deviceId})}function oX($){HD($)}function tX($){try{D0($)}catch(U){bj.warn(`Could not delete credentials for ${$}: ${U}`)}}function aX(){return n6().map((U)=>U.username)}var bj;var n1=w(()=>{T3();L4();j$();bj=t.child("matrix:credentials")});function eX($){let{agentId:U,channel:J,accountId:v,peerKind:_="dm",peerId:D,dmScope:X="per-peer",threadId:Y}=$,Q=["agent",U];if(_==="dm")switch(X){case"main":Q.push("main");break;case"per-peer":Q.push("dm",D??"unknown");break;case"per-channel-peer":if(J)Q.push(J);Q.push("dm",D??"unknown");break;case"per-account-channel-peer":if(J)Q.push(J);if(v)Q.push(v);Q.push("dm",D??"unknown");break}else{if(J)Q.push(J);if(v)Q.push(v);let z=D??"unknown";if(z.toLowerCase().startsWith(`${_}:`))z=z.slice(_.length+1);if(Q.push(_,z),Y)Q.push("thread",Y)}return Q.join(":")}function eq($,U){if(!U.includes("*"))return $===U;if(U==="*")return!0;let J=U.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${J}$`).test($)}function sq($,U){let J=[...U].sort((v,_)=>(_.priority??0)-(v.priority??0));for(let v of J)if(eq($,v.pattern))return v;return null}function sX($,U){let{phone:J,channel:v,accountId:_,isGroup:D,groupId:X}=U,Y=Cq(D?X??J:J),z=sq(D?X??J:J,$.routes),N=_&&_!=="default"&&$.agents[_]?_:void 0,G=Y??z?.agent??N??$.defaultAgent,q=$.agents[G];if(!q)throw aq.error(`Agent not found: ${G}`),Error(`Agent not found: ${G}`);let V=z?.dmScope??q.dmScope??$.defaultDmScope,H=eX({agentId:G,channel:v,accountId:_,peerKind:D?"group":"dm",peerId:D?X:J,dmScope:V});return aq.debug("Resolved route",{phone:J,agentId:G,dmScope:V,sessionKey:H,matchedPattern:z?.pattern}),{agent:q,dmScope:V,sessionKey:H,route:z??void 0}}function $Y($){if($.startsWith("~/"))return $.replace("~",process.env.HOME??"");return $}var aq;var $W=w(()=>{j$();W0();aq=t.child("router")});var B0=w(()=>{$W();ZD();L4();Y0()});function UY($){return kj.parse($)}function p1($,U){return $.accounts[U]}function _W($=process.env){let U=$.MATRIX_HOMESERVER;if(!U)return s6;let{MATRIX_ACCESS_TOKEN:J,MATRIX_USER_ID:v,MATRIX_PASSWORD:_}=$;if(!J&&(!v||!_))return s6;let D=$.MATRIX_ENCRYPTION==="true",X=$.MATRIX_DM_POLICY||"open",Y=$.MATRIX_ROOM_POLICY||"closed",Q=$.MATRIX_ROOM_ALLOWLIST?$.MATRIX_ROOM_ALLOWLIST.split(",").map((q)=>q.trim()).filter(Boolean):[],z={name:"Matrix",enabled:!0,homeserver:U,accessToken:J,userId:v,password:_,encryption:D,dmPolicy:X,roomPolicy:Y,roomAllowlist:Q,sendReadReceipts:!0,debounceMs:0},N=UW.safeParse(z);if(!N.success)return s6;return{accounts:{[I1()]:N.data}}}function r1($=process.env){let{MATRIX_HOMESERVER:U,MATRIX_ACCESS_TOKEN:J,MATRIX_USER_ID:v,MATRIX_PASSWORD:_}=$;if(!U)return!1;if(J)return!0;if(v&&_)return!0;return!1}function JW(){let $=K4();if(!$||Object.keys($.accounts).length===0)return s6;let U=h$(),J=new Set(U.map((_)=>_.matrixAccount).filter(Boolean)),v={};for(let[_,D]of Object.entries($.accounts)){if(!J.has(_))continue;v[_]={name:_,enabled:!0,homeserver:D.homeserver,accessToken:D.accessToken,userId:D.userId,encryption:!1,dmPolicy:"open",allowFrom:[],roomPolicy:"open",roomAllowlist:[],sendReadReceipts:!0,debounceMs:0}}return{accounts:v}}function _Y($=process.env){let U=JW(),J=_W($);return{accounts:{...U.accounts,...J.accounts}}}var UW,kj,s6;var $2=w(()=>{e2();n1();B0();UW=m.object({name:m.string().optional(),enabled:m.boolean().default(!0),homeserver:m.string().url(),accessToken:m.string().optional(),userId:m.string().optional(),password:m.string().optional(),encryption:m.boolean().default(!1),dmPolicy:m.enum(["open","closed","pairing"]).default("open"),allowFrom:m.array(m.string()).default([]),roomPolicy:m.enum(["open","closed","allowlist"]).default("closed"),roomAllowlist:m.array(m.string()).default([]),sendReadReceipts:m.boolean().default(!0),debounceMs:m.number().min(0).max(30000).default(0)}),kj=m.object({accounts:m.record(m.string(),UW).default({})}),s6={accounts:{}}});import JY from"fs";import L3 from"path";import xj from"crypto";import{MatrixClient as Cj,SimpleFsStorageProvider as Ij,LogService as U2,LogLevel as R3}from"@vector-im/matrix-bot-sdk";import{EventEmitter as fj}from"events";function j3($){return $.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"_").replace(/^_+|_+$/g,"")||"unknown"}function hj($){try{let U=new URL($);if(U.host)return j3(U.host)}catch{}return j3($)}function uj($){return xj.createHash("sha256").update($).digest("hex").slice(0,16)}function vW($){let U=$.env??process.env,J=oq(U),v=j3($.accountId),_=j3($.userId),D=hj($.homeserver),X=uj($.accessToken),Y=L3.join(J,"matrix","accounts",v,`${D}__${_}`,X);return{rootDir:Y,storagePath:L3.join(Y,"bot-storage.json"),cryptoPath:L3.join(Y,"crypto"),metaPath:L3.join(Y,"storage-meta.json"),accountKey:v,tokenHash:X}}var B4,DW,E$;var Z0=w(()=>{n1();j$();T3();B4=t.child("matrix:session");DW=class DW extends fj{sessions=new Map;loggingConfigured=!1;constructor(){super()}configureLogging(){if(this.loggingConfigured)return;let $=process.env.RAVI_LOG_LEVEL;if($==="debug")U2.setLevel(R3.DEBUG);else if($==="warn")U2.setLevel(R3.WARN);else if($==="error")U2.setLevel(R3.ERROR);else U2.setLevel(R3.INFO);U2.muteModule("MatrixLiteClient"),U2.muteModule("RustSdkCryptoStorageProvider"),this.loggingConfigured=!0}getState($){return this.sessions.get($)?.state??"disconnected"}getClient($){return this.sessions.get($)?.client??null}getUserId($){return this.sessions.get($)?.userId??null}async start($,U){this.configureLogging();let J=this.sessions.get($);if(J?.state==="connected"||J?.state==="connecting"){B4.warn(`Session ${$} already ${J.state}`);return}this.updateState($,"connecting",U);try{let v=await this.resolveCredentials($,U);if(!v)throw Error("No valid credentials available");let _=await this.createClient($,U,v),D=await _.getUserId();B4.info(`Logged in as ${D}`),await _.start();let X=this.sessions.get($);if(X)X.client=_,X.userId=D;this.updateState($,"connected",U),this.emit("connected",$,D),this.emit("clientReady",$,_),oX($)}catch(v){let _=v instanceof Error?v:Error(String(v));throw B4.error(`Failed to start session ${$}:`,_),this.updateState($,"error",U),this.emit("error",$,_),_}}async stop($){let U=this.sessions.get($);if(!U?.client){B4.debug(`Session ${$} not running`);return}try{U.client.stop(),B4.info(`Stopped session ${$}`)}catch(J){B4.warn(`Error stopping session ${$}:`,J)}this.updateState($,"disconnected"),this.emit("disconnected",$)}async stopAll(){let $=Array.from(this.sessions.keys());await Promise.all($.map((U)=>this.stop(U)))}async resolveCredentials($,U){if(U.accessToken){let v=U.userId;if(!v)try{let _=`${U.homeserver}/_matrix/client/v3/account/whoami`,D=await y$(_,{headers:{Authorization:`Bearer ${U.accessToken}`}});if(!D.ok)throw Error(`whoami failed: ${D.status}`);v=(await D.json()).user_id}catch(_){return B4.error("Failed to get user ID from access token:",_),null}return E1($,{homeserver:U.homeserver,accessToken:U.accessToken,userId:v}),{homeserver:U.homeserver,accessToken:U.accessToken,userId:v}}let J=Z1($);if(J){if(U.homeserver){if(w3(J.homeserver)!==w3(U.homeserver))return B4.warn(`Stored credentials homeserver mismatch for ${$}`),null}return{homeserver:J.homeserver,accessToken:J.accessToken,userId:J.userId}}if(U.userId&&U.password)try{return await this.loginWithPassword($,U.homeserver,U.userId,U.password)}catch(v){return B4.error("Password login failed:",v),null}return null}async loginWithPassword($,U,J,v){let _=`${U}/_matrix/client/v3/login`,D=await y$(_,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"m.login.password",identifier:{type:"m.id.user",user:J},password:v,initial_device_display_name:`Ravi Bot (${$})`})});if(!D.ok){let Y=await D.text();throw Error(`Login failed: ${Y}`)}let X=await D.json();return E1($,{homeserver:U,accessToken:X.access_token,userId:X.user_id,deviceId:X.device_id}),{homeserver:U,accessToken:X.access_token,userId:X.user_id,deviceId:X.device_id}}async createClient($,U,J){let v=vW({homeserver:J.homeserver,userId:J.userId,accessToken:J.accessToken,accountId:$});JY.mkdirSync(v.rootDir,{recursive:!0});let _=new Ij(v.storagePath),D;if(U.encryption){JY.mkdirSync(v.cryptoPath,{recursive:!0});try{let{StoreType:Y}=await import("@matrix-org/matrix-sdk-crypto-nodejs"),{RustSdkCryptoStorageProvider:Q}=await import("@vector-im/matrix-bot-sdk");D=new Q(v.cryptoPath,Y.Sqlite),B4.info("E2EE enabled with crypto storage")}catch(Y){B4.warn("Failed to initialize crypto storage, E2EE disabled:",Y)}}return this.writeStorageMeta(v,J,$),new Cj(J.homeserver,J.accessToken,_,D)}writeStorageMeta($,U,J){try{let v={homeserver:U.homeserver,userId:U.userId,accountId:J,accessTokenHash:$.tokenHash,createdAt:new Date().toISOString()};JY.writeFileSync($.metaPath,JSON.stringify(v,null,2),"utf-8")}catch(v){B4.debug(`Failed to write storage meta: ${v}`)}}updateState($,U,J){let v=this.sessions.get($);if(!v)v={client:null,state:"disconnected",config:J??null,userId:null},this.sessions.set($,v);if(v.state=U,J)v.config=J;this.emit("stateChange",$,U)}on($,U){return super.on($,U)}emit($,...U){return super.emit($,...U)}};E$=new DW});function vY($){let U=0,J=null,v=new Map,_=async()=>{if(J)return J;try{J=await $.getUserId()}catch{J=null}return J},D=async()=>{let Q=Date.now();if(Q-U<XW)return;U=Q;try{await $.dms.update()}catch(z){_2.debug(`DM cache refresh failed: ${String(z)}`)}},X=async(Q)=>{let z=v.get(Q),N=Date.now();if(z&&N-z.ts<XW)return z.count;try{let q=(await $.getJoinedRoomMembers(Q)).length;return v.set(Q,{count:q,ts:N}),q}catch(G){return _2.debug(`Member count failed room=${Q}: ${String(G)}`),null}},Y=async(Q,z)=>{let N=z?.trim();if(!N)return!1;try{return(await $.getRoomStateEvent(Q,"m.room.member",N))?.is_direct===!0}catch{return!1}};return{isDirectMessage:async(Q)=>{let{roomId:z,senderId:N}=Q;if(await D(),$.dms.isDm(z))return _2.debug(`DM detected via m.direct room=${z}`),!0;let G=await X(z);if(G===2)return _2.debug(`DM detected via member count room=${z} members=${G}`),!0;let q=Q.selfUserId??await _();if(await Y(z,N)||await Y(z,q??""))return _2.debug(`DM detected via member state room=${z}`),!0;return _2.debug(`Room check room=${z} result=group members=${G??"unknown"}`),!1},clearCache:()=>{v.clear(),U=0}}}var _2,XW=30000;var DY=w(()=>{j$();_2=t.child("matrix:direct")});var U1,d1,o1;var O3=w(()=>{U1={RoomMessage:"m.room.message",RoomMessageEncrypted:"m.room.encrypted",Reaction:"m.reaction",Direct:"m.direct",Location:"m.location"},d1={Text:"m.text",Image:"m.image",Audio:"m.audio",Video:"m.video",File:"m.file"},o1={Thread:"m.thread",Replace:"m.replace",Annotation:"m.annotation"}});function XY($,U,J){let v=$.type;if(v===U1.RoomMessageEncrypted)return{pass:!1,reason:"encrypted_event"};if(v!==U1.RoomMessage)return{pass:!1,reason:"not_room_message"};if($.unsigned?.redacted_because)return{pass:!1,reason:"redacted"};let _=$.sender;if(!_)return{pass:!1,reason:"no_sender"};if(_===U)return{pass:!1,reason:"self_message"};let D=$.origin_server_ts,X=$.unsigned?.age,Y=5000;if(typeof D==="number"&&D<J-Y)return{pass:!1,reason:"old_message"};if(typeof D!=="number"&&typeof X==="number"&&X>Y)return{pass:!1,reason:"old_message_by_age"};let z=$.content["m.relates_to"];if(z&&"rel_type"in z&&z.rel_type===o1.Replace)return{pass:!1,reason:"edit_event"};return{pass:!0}}function YY($){let{accountId:U,roomId:J,event:v,isDirect:_,roomName:D,senderDisplayName:X}=$,Y=v.content,Q=v.sender,z=v.event_id;if(!Q||!z)return null;let N=typeof Y.body==="string"?Y.body.trim():"",G=gj(Y);if(!N&&!G)return null;let q=yj(Y),V=lj(Y);return{id:z,channelId:"matrix",accountId:U,senderId:Q,senderName:X??Q.split(":")[0]?.replace(/^@/,""),chatId:J,text:N||void 0,media:G??void 0,replyTo:q,timestamp:v.origin_server_ts??Date.now(),isGroup:!_,groupName:!_?D:void 0,raw:v,roomId:J,eventId:z,isDirect:_,threadId:V,replyToEventId:Y["m.relates_to"]?.["m.in_reply_to"]?.event_id}}function gj($){let U=$.msgtype;if(!["m.image","m.audio","m.video","m.file"].includes(U))return null;let J=$.url??$.file?.url;if(!J)return null;let _=$.info?.mimetype??"application/octet-stream",D;switch(U){case"m.image":D="image";break;case"m.audio":D="audio";break;case"m.video":D="video";break;default:D="document"}return{type:D,mimetype:_,filename:$.body,url:J}}function yj($){let U=$["m.relates_to"]?.["m.in_reply_to"]?.event_id;if(!U)return;return{id:U,senderId:""}}function lj($){let U=$["m.relates_to"];if(!U)return;if("rel_type"in U&&U.rel_type===o1.Thread)return U.event_id;return}async function QY($){let{client:U,mxcUrl:J,sizeBytes:v,maxBytes:_,file:D}=$;if(typeof v==="number"&&v>_)throw Error("Matrix media exceeds configured size limit");let X;if(D){if(!U.crypto)throw Error("Cannot decrypt media: crypto not enabled");let Y=await U.crypto.decryptMedia(D);if(Y.byteLength>_)throw Error("Matrix media exceeds configured size limit");X=Y}else{let Y=await U.downloadContent(J);if(Y.data.byteLength>_)throw Error("Matrix media exceeds configured size limit");X=Buffer.from(Y.data)}return X}async function zY($,U){if(U<=0)return[$];let J=`${$.accountId}:${$.chatId}`;return new Promise((v)=>{let _=K3.get(J)??[];if(_.length>0){let X=_[_.length-1];clearTimeout(X.timer)}let D={message:$,timer:setTimeout(()=>{let X=K3.get(J)??[];K3.delete(J);let Y=X.map((Q)=>Q.message);for(let Q of X)Q.resolve(Y)},U),resolve:v};K3.set(J,[..._,D])})}function NY($){let U=$[0];if(!U)throw Error("Cannot merge empty message array");if($.length===1)return U;let J=$.map((_)=>_.text).filter(Boolean).join(`
330
+ `),Pj=d$.prepare("SELECT * FROM contacts WHERE phone = ?"),wj=d$.prepare("SELECT * FROM contacts ORDER BY status, name, phone"),Tj=d$.prepare("SELECT * FROM contacts WHERE status = ? ORDER BY name, phone"),Lj=d$.prepare("DELETE FROM contacts WHERE phone = ?"),Kq=d$.prepare("UPDATE contacts SET status = ?, agent_id = ?, updated_at = datetime('now') WHERE phone = ?")});class cq{config=xD;getConfig(){return this.config}setConfig($){this.config=$}listAccounts(){return Object.keys(this.config.accounts)}resolveAccount($){let U=this.config.accounts[$];if(!U)return null;let J=V$.getState($),_=V$.getSocket($)?.user?.id?.split(":")[0];return{id:$,name:U.name,phone:_,state:J,enabled:U.enabled}}isAuthenticated($){return V$.getState($)==="connected"}}class nq{checkAccess($,U,J,v){let _=u1(v,$);if(J){let Y=_.groupPolicy;if(W$.debug("Group policy check",{accountId:$,groupPolicy:Y,configAccounts:Object.keys(v.accounts)}),Y==="closed")return{allowed:!1,reason:"groups_disabled"};if(Y==="allowlist"){let Q=_.groupAllowFrom.includes(U),z=a6(U);if(!Q&&!z)return{allowed:!1,pending:!0,reason:"group_not_allowed"}}}let D=_.dmPolicy,X=H$(U);if(_.allowFrom.length>0){if(_.allowFrom.some((Q)=>H$(Q)===X))return{allowed:!0}}if(a6(X))return{allowed:!0};switch(D){case"open":return{allowed:!0};case"pairing":return{allowed:!1,pending:!0,reason:"pending_approval"};case"closed":return{allowed:!1,reason:"dm_closed"};default:return{allowed:!1,reason:"unknown_policy"}}}getDmPolicy($,U){return u1(U,$).dmPolicy}getGroupPolicy($,U){return u1(U,$).groupPolicy}isAllowed($,U,J){return this.checkAccess($,U,!1,J).allowed}}class pq{async send($,U,J){let v=V$.getSocket($);if(!v)return{success:!1,error:`Account ${$} not connected`};let _=await uX(v,U,J);if(_.success)Z3($);else E3($,_.error??"Unknown send error");return _}async sendTyping($,U,J){let v=V$.getSocket($);if(!v){W$.warn(`Cannot send typing - account ${$} not connected`);return}await gX(v,U,J)}async sendReadReceipt($,U,J){let v=V$.getSocket($);if(!v){W$.warn(`Cannot send read receipt - account ${$} not connected`);return}await q3(v,U,U,J)}async sendReaction($,U,J,v){let _=V$.getSocket($);if(!_){W$.warn(`Cannot send reaction - account ${$} not connected`);return}await H0(_,U,J,v)}}class rq{configAdapter;securityAdapter;stateCallbacks=yq;qrCallbacks=lq;messageCallbacks=new Set;constructor($,U){if(this.configAdapter=$,this.securityAdapter=U,gq)return;gq=!0,V$.on("stateChange",(J,v)=>{for(let _ of yq)_(J,v)}),V$.on("qrCode",(J,v)=>{for(let _ of lq)_(J,v)}),V$.on("socketReady",(J,v)=>{if(iq.has(v)){W$.debug(`Socket already subscribed for ${J}, skipping`);return}iq.add(v),W$.info(`Socket ready for ${J}, subscribing to messages`),v.ev.on("messages.upsert",async({messages:_,type:D})=>{if(D!=="notify")return;let X=this.configAdapter.getConfig();for(let Y of _)await this.handleMessage(J,Y,X)})})}async start($,U){let J=u1(U,$);if(!J.enabled){W$.info(`Account ${$} is disabled, skipping`);return}await V$.start($,J)}async stop($){await V$.stop($)}getState($){return V$.getState($)}onStateChange($){return this.stateCallbacks.add($),()=>this.stateCallbacks.delete($)}onQrCode($){return this.qrCallbacks.add($),()=>this.qrCallbacks.delete($)}onMessage($){return this.messageCallbacks.add($),()=>this.messageCallbacks.delete($)}async handleMessage($,U,J){let v=u1(J,$),_=xX(U,v);if(!_.pass){W$.debug(`Message filtered: ${_.reason}`);return}let D,X,Y=U.key.remoteJid;if(Y&&Y.endsWith("@g.us")){let V=V$.getSocket($);if(V)try{let H=await V.groupMetadata(Y);D=H.subject,X=H.participants.map((P)=>{let T=H$(P.id),M=P.id.split("@")[0];uq(T,P.notify||null);let f=hq(T),R=f||P.notify||M;return W$.info("Group member resolution",{jid:P.id,normalizedId:T,pushName:P.notify??"(none)",contactName:f??"(none)",resolvedName:R}),R})}catch(H){W$.debug("Failed to fetch group metadata",{jid:Y,error:H})}}let Q=kX($,U,D,X);if(!Q)return;if((Q.media?.type==="audio"||Q.media?.type==="document"&&Q.media.mimetype.startsWith("audio/"))&&Q.media)try{let V=await bX(U);if(V){if(Q.media.data=V,W$.debug("Audio downloaded",{size:V.length,mimetype:Q.media.mimetype}),process.env.OPENAI_API_KEY){let H=await H3(V,Q.media.mimetype);Q.transcription=H.text,W$.info("Audio transcribed",{textLength:H.text.length})}}}catch(V){W$.warn("Failed to process audio",{error:V})}W$.info("Message received",{accountId:$,senderId:Q.senderId,chatId:Q.chatId,isGroup:Q.isGroup}),cX($),B3($);let N=Q.isGroup?Q.chatId:Q.senderId;W$.info("Security check",{checkId:N,isGroup:Q.isGroup,chatId:Q.chatId,senderId:Q.senderId});let G=this.securityAdapter.checkAccess($,N,Q.isGroup,J);if(W$.info("Security decision",G),!G.allowed){if(G.pending){let V=Q.isGroup?Q.chatId:Q.senderId,H=Q.isGroup?null:Q.senderName??null;F3(V,H),W$.info("Saved pending",{id:V,isGroup:Q.isGroup})}else W$.debug(`Message blocked: ${G.reason}`);return}if(v.sendReadReceipts){let V=V$.getSocket($);if(V)await q3(V,Q.chatId,Q.senderId,[Q.id])}if(v.ackReaction){let V=V$.getSocket($);if(V)await yX(V,Q.chatId,Q.id,Q.isGroup,!1,v.ackReaction)}if(Q.isGroup){if(Iq(Q.chatId)==="mention"){let H=V$.getSocket($),P=H?.user?.id,T=H?.user?.lid,M=U.message?.extendedTextMessage?.contextInfo?.mentionedJid??[],f=(i)=>i.split("@")[0].split(":")[0],R=[P,T].filter(Boolean).map((i)=>f(i)),x=M.some((i)=>R.includes(f(i)));if(W$.info("Mention check",{botJid:P,botLid:T,mentioned:x,mentions:M}),!x){W$.debug("Skipping group message (not mentioned)",{chatId:Q.chatId});return}}}let q=v.debounceMs;if(q>0){let V=await CX(Q,q),H=IX(V);this.emitMessage(H)}else this.emitMessage(Q)}emitMessage($){let U={...$,media:$.media?{...$.media,data:void 0}:void 0,raw:void 0};F$.emit(`whatsapp.${$.accountId}.inbound`,U).catch((J)=>W$.error("Failed to emit inbound message",J));for(let J of this.messageCallbacks)try{J($)}catch(v){W$.error("Error in message callback",v)}}}class dq{getHealth(){return mX()}getSnapshot($){return q0($)}recordSent($){Z3($)}recordReceived($){B3($)}recordError($,U){E3($,U)}}function e6($){let U=new cq,J=new nq,v=new pq,_=new rq(U,J),D=new dq;if($)U.setConfig(CD($));return{id:"whatsapp",meta:jj,capabilities:Oj,config:U,security:J,outbound:v,gateway:_,status:D,async init(){W$.info("WhatsApp plugin initialized"),_.onQrCode((X,Y)=>{W$.info(`Scan QR code for ${X} (Settings > Linked Devices):`),mq.default.generate(Y,{small:!0})}),_.onStateChange((X,Y)=>{W$.info(`Account ${X} state: ${Y}`)})},async shutdown(){W$.info("Shutting down WhatsApp plugin"),await V$.stopAll()}}}var mq,W$,jj,Oj,gq=!1,yq,lq,iq,Kj;var dX=w(()=>{T1();ID();Q3();fX();hX();lX();nX();c1();W0();j$();mq=C$(BV(),1),W$=t.child("wa:plugin"),jj={id:"whatsapp",name:"WhatsApp",description:"WhatsApp messaging via Baileys",version:"1.0.0"},Oj={media:!0,reactions:!0,replies:!0,edits:!1,groups:!0,typing:!0,readReceipts:!0};yq=new Set,lq=new Set,iq=new WeakSet;Kj=e6()});import Aj from"path";import Sj from"os";function oq($=process.env){return $.RAVI_STATE_DIR||Aj.join(Sj.homedir(),".ravi")}function w3($){return $.replace(/\/+$/,"")}async function y$($,U={},J=Mj){let v=new AbortController,_=setTimeout(()=>v.abort(),J);try{return await fetch($,{...U,signal:v.signal})}finally{clearTimeout(_)}}var Mj=30000;var T3=()=>{};function tq($){return{homeserver:$.homeserver,userId:$.userId,accessToken:$.accessToken,deviceId:$.deviceId,createdAt:new Date($.createdAt).toISOString(),lastUsedAt:$.lastUsedAt?new Date($.lastUsedAt).toISOString():void 0}}function Z1($){let U=f4($);if(!U)return null;return tq(U)}function K4(){let $=n6();if($.length===0)return null;let U={version:4,accounts:{}};for(let J of $)U.accounts[J.username]=tq(J);return U}function E1($,U){c6({username:$,userId:U.userId,homeserver:U.homeserver,accessToken:U.accessToken,deviceId:U.deviceId})}function oX($){HD($)}function tX($){try{D0($)}catch(U){bj.warn(`Could not delete credentials for ${$}: ${U}`)}}function aX(){return n6().map((U)=>U.username)}var bj;var n1=w(()=>{T3();L4();j$();bj=t.child("matrix:credentials")});function eX($){let{agentId:U,channel:J,accountId:v,peerKind:_="dm",peerId:D,dmScope:X="per-peer",threadId:Y}=$,Q=["agent",U];if(_==="dm")switch(X){case"main":Q.push("main");break;case"per-peer":Q.push("dm",D??"unknown");break;case"per-channel-peer":if(J)Q.push(J);Q.push("dm",D??"unknown");break;case"per-account-channel-peer":if(J)Q.push(J);if(v)Q.push(v);Q.push("dm",D??"unknown");break}else{if(J)Q.push(J);if(v)Q.push(v);let z=D??"unknown";if(z.toLowerCase().startsWith(`${_}:`))z=z.slice(_.length+1);if(Q.push(_,z),Y)Q.push("thread",Y)}return Q.join(":")}function eq($,U){if(!U.includes("*"))return $===U;if(U==="*")return!0;let J=U.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${J}$`).test($)}function sq($,U){let J=[...U].sort((v,_)=>(_.priority??0)-(v.priority??0));for(let v of J)if(eq($,v.pattern))return v;return null}function sX($,U){let{phone:J,channel:v,accountId:_,isGroup:D,groupId:X}=U,Y=Cq(D?X??J:J),z=sq(D?X??J:J,$.routes),N=_&&_!=="default"&&$.agents[_]?_:void 0,G=Y??z?.agent??N??$.defaultAgent,q=$.agents[G];if(!q)throw aq.error(`Agent not found: ${G}`),Error(`Agent not found: ${G}`);let V=z?.dmScope??q.dmScope??$.defaultDmScope,H=eX({agentId:G,channel:v,accountId:_,peerKind:D?"group":"dm",peerId:D?X:J,dmScope:V});return aq.debug("Resolved route",{phone:J,agentId:G,dmScope:V,sessionKey:H,matchedPattern:z?.pattern}),{agent:q,dmScope:V,sessionKey:H,route:z??void 0}}function $Y($){if($.startsWith("~/"))return $.replace("~",process.env.HOME??"");return $}var aq;var $W=w(()=>{j$();W0();aq=t.child("router")});var B0=w(()=>{$W();ZD();L4();Y0()});function UY($){return kj.parse($)}function p1($,U){return $.accounts[U]}function _W($=process.env){let U=$.MATRIX_HOMESERVER;if(!U)return s6;let{MATRIX_ACCESS_TOKEN:J,MATRIX_USER_ID:v,MATRIX_PASSWORD:_}=$;if(!J&&(!v||!_))return s6;let D=$.MATRIX_ENCRYPTION==="true",X=$.MATRIX_DM_POLICY||"open",Y=$.MATRIX_ROOM_POLICY||"closed",Q=$.MATRIX_ROOM_ALLOWLIST?$.MATRIX_ROOM_ALLOWLIST.split(",").map((q)=>q.trim()).filter(Boolean):[],z={name:"Matrix",enabled:!0,homeserver:U,accessToken:J,userId:v,password:_,encryption:D,dmPolicy:X,roomPolicy:Y,roomAllowlist:Q,sendReadReceipts:!0,debounceMs:0},N=UW.safeParse(z);if(!N.success)return s6;return{accounts:{[I1()]:N.data}}}function r1($=process.env){let{MATRIX_HOMESERVER:U,MATRIX_ACCESS_TOKEN:J,MATRIX_USER_ID:v,MATRIX_PASSWORD:_}=$;if(!U)return!1;if(J)return!0;if(v&&_)return!0;return!1}function JW(){let $=K4();if(!$||Object.keys($.accounts).length===0)return s6;let U=h$(),J=new Set(U.map((_)=>_.matrixAccount).filter(Boolean)),v={};for(let[_,D]of Object.entries($.accounts)){if(!J.has(_))continue;v[_]={name:_,enabled:!0,homeserver:D.homeserver,accessToken:D.accessToken,userId:D.userId,encryption:!1,dmPolicy:"open",allowFrom:[],roomPolicy:"open",roomAllowlist:[],sendReadReceipts:!0,debounceMs:0}}return{accounts:v}}function _Y($=process.env){let U=JW(),J=_W($);return{accounts:{...U.accounts,...J.accounts}}}var UW,kj,s6;var $2=w(()=>{e2();n1();B0();UW=m.object({name:m.string().optional(),enabled:m.boolean().default(!0),homeserver:m.string().url(),accessToken:m.string().optional(),userId:m.string().optional(),password:m.string().optional(),encryption:m.boolean().default(!1),dmPolicy:m.enum(["open","closed","pairing"]).default("open"),allowFrom:m.array(m.string()).default([]),roomPolicy:m.enum(["open","closed","allowlist"]).default("closed"),roomAllowlist:m.array(m.string()).default([]),sendReadReceipts:m.boolean().default(!0),debounceMs:m.number().min(0).max(30000).default(0)}),kj=m.object({accounts:m.record(m.string(),UW).default({})}),s6={accounts:{}}});import JY from"fs";import L3 from"path";import xj from"crypto";import{MatrixClient as Cj,SimpleFsStorageProvider as Ij,LogService as U2,LogLevel as R3}from"@vector-im/matrix-bot-sdk";import{EventEmitter as fj}from"events";function j3($){return $.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"_").replace(/^_+|_+$/g,"")||"unknown"}function hj($){try{let U=new URL($);if(U.host)return j3(U.host)}catch{}return j3($)}function uj($){return xj.createHash("sha256").update($).digest("hex").slice(0,16)}function vW($){let U=$.env??process.env,J=oq(U),v=j3($.accountId),_=j3($.userId),D=hj($.homeserver),X=uj($.accessToken),Y=L3.join(J,"matrix","accounts",v,`${D}__${_}`,X);return{rootDir:Y,storagePath:L3.join(Y,"bot-storage.json"),cryptoPath:L3.join(Y,"crypto"),metaPath:L3.join(Y,"storage-meta.json"),accountKey:v,tokenHash:X}}var B4,DW,E$;var Z0=w(()=>{n1();j$();T3();B4=t.child("matrix:session");DW=class DW extends fj{sessions=new Map;loggingConfigured=!1;constructor(){super()}configureLogging(){if(this.loggingConfigured)return;let $=process.env.RAVI_LOG_LEVEL;if($==="debug")U2.setLevel(R3.DEBUG);else if($==="warn")U2.setLevel(R3.WARN);else if($==="error")U2.setLevel(R3.ERROR);else U2.setLevel(R3.INFO);U2.muteModule("MatrixLiteClient"),U2.muteModule("RustSdkCryptoStorageProvider"),this.loggingConfigured=!0}getState($){return this.sessions.get($)?.state??"disconnected"}getClient($){return this.sessions.get($)?.client??null}getUserId($){return this.sessions.get($)?.userId??null}async start($,U){this.configureLogging();let J=this.sessions.get($);if(J?.state==="connected"||J?.state==="connecting"){B4.warn(`Session ${$} already ${J.state}`);return}this.updateState($,"connecting",U);try{let v=await this.resolveCredentials($,U);if(!v)throw Error("No valid credentials available");let _=await this.createClient($,U,v),D=await _.getUserId();B4.info(`Logged in as ${D}`),await _.start();let X=this.sessions.get($);if(X)X.client=_,X.userId=D;this.updateState($,"connected",U),this.emit("connected",$,D),this.emit("clientReady",$,_),oX($)}catch(v){let _=v instanceof Error?v:Error(String(v));throw B4.error(`Failed to start session ${$}:`,_),this.updateState($,"error",U),this.emit("error",$,_),_}}async stop($){let U=this.sessions.get($);if(!U?.client){B4.debug(`Session ${$} not running`);return}try{U.client.stop(),B4.info(`Stopped session ${$}`)}catch(J){B4.warn(`Error stopping session ${$}:`,J)}this.updateState($,"disconnected"),this.emit("disconnected",$)}async stopAll(){let $=Array.from(this.sessions.keys());await Promise.all($.map((U)=>this.stop(U)))}async resolveCredentials($,U){if(U.accessToken){let v=U.userId;if(!v)try{let _=`${U.homeserver}/_matrix/client/v3/account/whoami`,D=await y$(_,{headers:{Authorization:`Bearer ${U.accessToken}`}});if(!D.ok)throw Error(`whoami failed: ${D.status}`);v=(await D.json()).user_id}catch(_){return B4.error("Failed to get user ID from access token:",_),null}return E1($,{homeserver:U.homeserver,accessToken:U.accessToken,userId:v}),{homeserver:U.homeserver,accessToken:U.accessToken,userId:v}}let J=Z1($);if(J){if(U.homeserver){if(w3(J.homeserver)!==w3(U.homeserver))return B4.warn(`Stored credentials homeserver mismatch for ${$}`),null}return{homeserver:J.homeserver,accessToken:J.accessToken,userId:J.userId}}if(U.userId&&U.password)try{return await this.loginWithPassword($,U.homeserver,U.userId,U.password)}catch(v){return B4.error("Password login failed:",v),null}return null}async loginWithPassword($,U,J,v){let _=`${U}/_matrix/client/v3/login`,D=await y$(_,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"m.login.password",identifier:{type:"m.id.user",user:J},password:v,initial_device_display_name:`Ravi Bot (${$})`})});if(!D.ok){let Y=await D.text();throw Error(`Login failed: ${Y}`)}let X=await D.json();return E1($,{homeserver:U,accessToken:X.access_token,userId:X.user_id,deviceId:X.device_id}),{homeserver:U,accessToken:X.access_token,userId:X.user_id,deviceId:X.device_id}}async createClient($,U,J){let v=vW({homeserver:J.homeserver,userId:J.userId,accessToken:J.accessToken,accountId:$});JY.mkdirSync(v.rootDir,{recursive:!0});let _=new Ij(v.storagePath),D;if(U.encryption){JY.mkdirSync(v.cryptoPath,{recursive:!0});try{let{StoreType:Y}=await import("@matrix-org/matrix-sdk-crypto-nodejs"),{RustSdkCryptoStorageProvider:Q}=await import("@vector-im/matrix-bot-sdk");D=new Q(v.cryptoPath,Y.Sqlite),B4.info("E2EE enabled with crypto storage")}catch(Y){B4.warn("Failed to initialize crypto storage, E2EE disabled:",Y)}}return this.writeStorageMeta(v,J,$),new Cj(J.homeserver,J.accessToken,_,D)}writeStorageMeta($,U,J){try{let v={homeserver:U.homeserver,userId:U.userId,accountId:J,accessTokenHash:$.tokenHash,createdAt:new Date().toISOString()};JY.writeFileSync($.metaPath,JSON.stringify(v,null,2),"utf-8")}catch(v){B4.debug(`Failed to write storage meta: ${v}`)}}updateState($,U,J){let v=this.sessions.get($);if(!v)v={client:null,state:"disconnected",config:J??null,userId:null},this.sessions.set($,v);if(v.state=U,J)v.config=J;this.emit("stateChange",$,U)}on($,U){return super.on($,U)}emit($,...U){return super.emit($,...U)}};E$=new DW});function vY($){let U=0,J=null,v=new Map,_=async()=>{if(J)return J;try{J=await $.getUserId()}catch{J=null}return J},D=async()=>{let Q=Date.now();if(Q-U<XW)return;U=Q;try{await $.dms.update()}catch(z){_2.debug(`DM cache refresh failed: ${String(z)}`)}},X=async(Q)=>{let z=v.get(Q),N=Date.now();if(z&&N-z.ts<XW)return z.count;try{let q=(await $.getJoinedRoomMembers(Q)).length;return v.set(Q,{count:q,ts:N}),q}catch(G){return _2.debug(`Member count failed room=${Q}: ${String(G)}`),null}},Y=async(Q,z)=>{let N=z?.trim();if(!N)return!1;try{return(await $.getRoomStateEvent(Q,"m.room.member",N))?.is_direct===!0}catch{return!1}};return{isDirectMessage:async(Q)=>{let{roomId:z,senderId:N}=Q;if(await D(),$.dms.isDm(z))return _2.debug(`DM detected via m.direct room=${z}`),!0;let G=await X(z);if(G===2)return _2.debug(`DM detected via member count room=${z} members=${G}`),!0;let q=Q.selfUserId??await _();if(await Y(z,N)||await Y(z,q??""))return _2.debug(`DM detected via member state room=${z}`),!0;return _2.debug(`Room check room=${z} result=group members=${G??"unknown"}`),!1},clearCache:()=>{v.clear(),U=0}}}var _2,XW=30000;var DY=w(()=>{j$();_2=t.child("matrix:direct")});var U1,d1,o1;var O3=w(()=>{U1={RoomMessage:"m.room.message",RoomMessageEncrypted:"m.room.encrypted",Reaction:"m.reaction",Direct:"m.direct",Location:"m.location"},d1={Text:"m.text",Image:"m.image",Audio:"m.audio",Video:"m.video",File:"m.file"},o1={Thread:"m.thread",Replace:"m.replace",Annotation:"m.annotation"}});function XY($,U,J){let v=$.type;if(v===U1.RoomMessageEncrypted)return{pass:!1,reason:"encrypted_event"};if(v!==U1.RoomMessage)return{pass:!1,reason:"not_room_message"};if($.unsigned?.redacted_because)return{pass:!1,reason:"redacted"};let _=$.sender;if(!_)return{pass:!1,reason:"no_sender"};if(_===U)return{pass:!1,reason:"self_message"};let D=$.origin_server_ts,X=$.unsigned?.age,Y=5000;if(typeof D==="number"&&D<J-Y)return{pass:!1,reason:"old_message"};if(typeof D!=="number"&&typeof X==="number"&&X>Y)return{pass:!1,reason:"old_message_by_age"};let z=$.content["m.relates_to"];if(z&&"rel_type"in z&&z.rel_type===o1.Replace)return{pass:!1,reason:"edit_event"};return{pass:!0}}function YY($){let{accountId:U,roomId:J,event:v,isDirect:_,roomName:D,senderDisplayName:X}=$,Y=v.content,Q=v.sender,z=v.event_id;if(!Q||!z)return null;let N=typeof Y.body==="string"?Y.body.trim():"",G=gj(Y);if(!N&&!G)return null;let q=yj(Y),V=lj(Y);return{id:z,channelId:"matrix",accountId:U,senderId:Q,senderName:X??Q.split(":")[0]?.replace(/^@/,""),chatId:J,text:N||void 0,media:G??void 0,replyTo:q,timestamp:v.origin_server_ts??Date.now(),isGroup:!_,groupName:!_?D:void 0,raw:v,roomId:J,eventId:z,isDirect:_,threadId:V,replyToEventId:Y["m.relates_to"]?.["m.in_reply_to"]?.event_id}}function gj($){let U=$.msgtype;if(!["m.image","m.audio","m.video","m.file"].includes(U))return null;let J=$.url??$.file?.url;if(!J)return null;let _=$.info?.mimetype??"application/octet-stream",D;switch(U){case"m.image":D="image";break;case"m.audio":D="audio";break;case"m.video":D="video";break;default:D="document"}return{type:D,mimetype:_,filename:$.body,url:J}}function yj($){let U=$["m.relates_to"]?.["m.in_reply_to"]?.event_id;if(!U)return;return{id:U,senderId:""}}function lj($){let U=$["m.relates_to"];if(!U)return;if("rel_type"in U&&U.rel_type===o1.Thread)return U.event_id;return}async function QY($){let{client:U,mxcUrl:J,sizeBytes:v,maxBytes:_,file:D}=$;if(typeof v==="number"&&v>_)throw Error("Matrix media exceeds configured size limit");let X;if(D){if(!U.crypto)throw Error("Cannot decrypt media: crypto not enabled");let Y=await U.crypto.decryptMedia(D);if(Y.byteLength>_)throw Error("Matrix media exceeds configured size limit");X=Y}else{let Y=await U.downloadContent(J);if(Y.data.byteLength>_)throw Error("Matrix media exceeds configured size limit");X=Buffer.from(Y.data)}return X}async function zY($,U){if(U<=0)return[$];let J=`${$.accountId}:${$.chatId}`;return new Promise((v)=>{let _=K3.get(J)??[];if(_.length>0){let X=_[_.length-1];clearTimeout(X.timer)}let D={message:$,timer:setTimeout(()=>{let X=K3.get(J)??[];K3.delete(J);let Y=X.map((Q)=>Q.message);for(let Q of X)Q.resolve(Y)},U),resolve:v};K3.set(J,[..._,D])})}function NY($){let U=$[0];if(!U)throw Error("Cannot merge empty message array");if($.length===1)return U;let J=$.map((_)=>_.text).filter(Boolean).join(`
331
331
 
332
332
  `),v=$[$.length-1];return{...U,text:J||void 0,id:v?.id??U.id}}async function GY($,U){let J=YW.get(U);if(J&&Date.now()-J.ts<ij)return J.info;let v={altAliases:[]};try{let _=await $.getRoomStateEvent(U,"m.room.name","");if(_?.name)v.name=_.name}catch{}try{let _=await $.getRoomStateEvent(U,"m.room.canonical_alias","");if(_?.alias)v.canonicalAlias=_.alias;if(Array.isArray(_?.alt_aliases))v.altAliases=_.alt_aliases}catch{}return YW.set(U,{info:v,ts:Date.now()}),v}async function VY($,U,J){try{let v=await $.getRoomStateEvent(U,"m.room.member",J);if(v?.displayname)return v.displayname}catch{}return J.split(":")[0]?.replace(/^@/,"")??J}var K3,YW,ij=60000;var HY=w(()=>{O3();K3=new Map;YW=new Map});function cj($){let U=$.trim();if(!U)throw Error("Matrix target is required");return U}async function QW($,U){let J=U.trim();if(!J.startsWith("@"))throw Error(`Matrix user IDs must be fully qualified (got "${J}")`);let v=A3.get(J);if(v)return v;try{let D=await $.getAccountData(U1.Direct),X=Array.isArray(D?.[J])?D[J]:[];if(X.length>0)return A3.set(J,X[0]),X[0]}catch{}let _=null;try{let D=await $.getJoinedRooms();for(let X of D){let Y;try{Y=await $.getJoinedRoomMembers(X)}catch{continue}if(!Y.includes(J))continue;if(Y.length===2)return A3.set(J,X),await zW($,J,X),X;if(!_)_=X}}catch{}if(_)return A3.set(J,_),await zW($,J,_),_;throw Error(`No direct room found for ${J}`)}async function zW($,U,J){let v=null;try{v=await $.getAccountData(U1.Direct)}catch{}let _=v&&!Array.isArray(v)?v:{},D=Array.isArray(_[U])?_[U]:[];if(D[0]===J)return;let X=[J,...D.filter((Y)=>Y!==J)];try{await $.setAccountData(U1.Direct,{..._,[U]:X})}catch{}}async function t1($,U){let J=cj(U),v=J.toLowerCase();if(v.startsWith("matrix:"))return t1($,J.slice(7));if(v.startsWith("room:"))return t1($,J.slice(5));if(v.startsWith("channel:"))return t1($,J.slice(8));if(v.startsWith("user:"))return QW($,J.slice(5));if(J.startsWith("@"))return QW($,J);if(J.startsWith("#")){let _=await $.resolveRoom(J);if(!_)throw Error(`Matrix alias ${J} could not be resolved`);return _}return J}function NW($,U){let J={msgtype:d1.Text,body:$};if(U)J["m.relates_to"]=U;let v=rj($);if(v!==$)J.format="org.matrix.custom.html",J.formatted_body=v;return J}function nj($){let U=$?.trim();if(!U)return;return{"m.in_reply_to":{event_id:U}}}function pj($,U){let J=$.trim();return{rel_type:o1.Thread,event_id:J,is_falling_back:!0,"m.in_reply_to":{event_id:U?.trim()||J}}}function rj($){return $.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/\*(.+?)\*/g,"<em>$1</em>").replace(/`(.+?)`/g,"<code>$1</code>").replace(/\[(.+?)\]\((.+?)\)/g,'<a href="$2">$1</a>').replace(/\n/g,"<br>")}function dj($,U){if($.length<=U)return[$];let J=[],v=$;while(v.length>0){if(v.length<=U){J.push(v);break}let _=U,D=v.lastIndexOf(`
333
333
  `,U),X=v.lastIndexOf(" ",U);if(D>U*0.7)_=D+1;else if(X>U*0.7)_=X+1;J.push(v.slice(0,_).trimEnd()),v=v.slice(_).trimStart()}return J}async function qY($,U,J){let v=J.text?.trim()??"";if(!v&&!J.media)return{success:!1,error:"Message requires text or media"};try{let _=await t1($,U),D;if(J.replyTo)if(J.replyTo.includes(":")&&J.replyTo.startsWith("$")){let[Y,Q]=J.replyTo.split(":");D=pj(Y,Q||Y)}else D=nj(J.replyTo);let X="";if(J.media){let Y=typeof J.media.data==="string"?Buffer.from(J.media.data,"base64"):J.media.data,Q=await $.uploadContent(Y,J.media.mimetype),z;if(J.media.mimetype.startsWith("image/"))z=d1.Image;else if(J.media.mimetype.startsWith("audio/"))z=d1.Audio;else if(J.media.mimetype.startsWith("video/"))z=d1.Video;else z=d1.File;let N={msgtype:z,body:J.media.filename||"file",url:Q,info:{mimetype:J.media.mimetype,size:Y.length},...D?{"m.relates_to":D}:{}};if(X=await $.sendMessage(_,N),v){let q=NW(v,D);X=await $.sendMessage(_,q)}}else{let Y=dj(v,mj);for(let Q of Y){let z=NW(Q,D);X=await $.sendMessage(_,z),D=void 0}}return{success:!0,messageId:X}}catch(_){let D=_ instanceof Error?_.message:String(_);return S3.error(`Send message failed: ${D}`),{success:!1,error:D}}}async function WY($,U,J,v=30000){try{await $.setTyping(U,J,v)}catch(_){S3.debug(`Typing indicator failed: ${_}`)}}async function M3($,U,J){if(!J?.trim())return;try{await $.sendReadReceipt(U,J.trim())}catch(v){S3.debug(`Read receipt failed: ${v}`)}}async function BY($,U,J,v){if(!v?.trim())throw Error("Reaction requires an emoji");try{let _={"m.relates_to":{rel_type:o1.Annotation,event_id:J,key:v.trim()}};await $.sendEvent(U,U1.Reaction,_)}catch(_){throw S3.debug(`Reaction failed: ${_}`),_}}var S3,mj=4000,A3;var ZY=w(()=>{O3();j$();S3=t.child("matrix:outbound"),A3=new Map});function E0($){let U=b3.get($);if(!U)U={messagesReceived:0,messagesSent:0,errors:0},b3.set($,U);return U}function k3($){let U=E0($);U.messagesReceived++,U.lastActivityAt=Date.now()}function x3($){let U=E0($);U.messagesSent++,U.lastActivityAt=Date.now()}function C3($,U){let J=E0($);J.errors++,J.lastError=U,J.lastErrorAt=Date.now()}function EY($){let U=E0($);U.startedAt=Date.now()}function FY($){let U=E0($);U.lastActivityAt=Date.now()}function I3($){let U=b3.get($),J=E$.getState($);if(!U&&J==="disconnected")return null;let v=U??{messagesReceived:0,messagesSent:0,errors:0};return{id:$,state:J,lastActivity:v.lastActivityAt,lastError:v.lastError,metrics:{messagesReceived:v.messagesReceived,messagesSent:v.messagesSent,uptime:v.startedAt?Date.now()-v.startedAt:0}}}function PY(){let $=[],U=!0,J=new Set;for(let v of b3.keys())J.add(v);for(let v of J){let _=I3(v);if(_){if($.push(_),_.state==="error")U=!1}}if($.length===0||$.every((v)=>v.state!=="connected"))U=!1;return{healthy:U,accounts:$,lastCheck:Date.now()}}var b3;var wY=w(()=>{Z0();b3=new Map});class VW{config=s6;getConfig(){return this.config}setConfig($){this.config=$}listAccounts(){return Object.keys(this.config.accounts)}resolveAccount($){let U=this.config.accounts[$];if(!U)return null;let J=E$.getState($),v=E$.getUserId($);return{id:$,name:U.name,phone:v??void 0,state:J,enabled:U.enabled}}isAuthenticated($){return E$.getState($)==="connected"}}class HW{checkAccess($,U,J,v){let _=p1(v,$);if(!_)return{allowed:!1,reason:"account_not_found"};if(J){let D=_.roomPolicy;if(D==="closed")return{allowed:!1,reason:"rooms_disabled"};if(D==="allowlist"){let X=_.roomAllowlist.some((Q)=>Q===U||U.includes(Q)),Y=a6(U);if(!X&&!Y)return{allowed:!1,pending:!0,reason:"room_not_allowed"}}}if(!J){let D=_.dmPolicy;if(_.allowFrom.length>0){if(_.allowFrom.some((Y)=>Y===U||U.toLowerCase()===Y.toLowerCase()))return{allowed:!0}}if(a6(U))return{allowed:!0};switch(D){case"open":return{allowed:!0};case"pairing":return{allowed:!1,pending:!0,reason:"pending_approval"};case"closed":return{allowed:!1,reason:"dm_closed"};default:return{allowed:!1,reason:"unknown_policy"}}}return{allowed:!0}}getDmPolicy($,U){let v=p1(U,$)?.dmPolicy??"open";if(v==="pairing")return"pairing";if(v==="closed")return"closed";return"open"}getGroupPolicy($,U){let v=p1(U,$)?.roomPolicy??"closed";if(v==="allowlist")return"allowlist";if(v==="closed")return"closed";return"open"}isAllowed($,U,J){return this.checkAccess($,U,!1,J).allowed}}class qW{async send($,U,J){let v=E$.getClient($);if(!v)return{success:!1,error:`Account ${$} not connected`};let _=await qY(v,U,J);if(_.success)x3($);else C3($,_.error??"Unknown send error");return _}async sendTyping($,U,J){let v=E$.getClient($);if(!v){Z$.warn(`Cannot send typing - account ${$} not connected`);return}try{let _=await t1(v,U);await WY(v,_,J)}catch(_){Z$.debug(`Typing indicator failed: ${_}`)}}async sendReadReceipt($,U,J){let v=E$.getClient($);if(!v){Z$.warn(`Cannot send read receipt - account ${$} not connected`);return}let _=J[J.length-1];if(_)await M3(v,U,_)}async sendReaction($,U,J,v){let _=E$.getClient($);if(!_){Z$.warn(`Cannot send reaction - account ${$} not connected`);return}await BY(_,U,J,v)}}class WW{configAdapter;securityAdapter;stateCallbacks=new Set;qrCallbacks=new Set;messageCallbacks=new Set;directTrackers=new Map;subscribedAccounts=new Set;startupTimes=new Map;constructor($,U){if(this.configAdapter=$,this.securityAdapter=U,GW){Z$.debug("Session listeners already configured, reusing");return}GW=!0,A4=this,E$.on("stateChange",(J,v)=>{if(!A4)return;for(let _ of A4.stateCallbacks)_(J,v)}),E$.on("clientReady",(J,v)=>{if(!A4)return;if(A4.subscribedAccounts.has(J)){Z$.debug(`Account ${J} already subscribed, skipping`);return}A4.subscribedAccounts.add(J),Z$.info(`Client ready for ${J}, subscribing to messages`),A4.startupTimes.set(J,Date.now()),EY(J),A4.directTrackers.set(J,vY(v)),v.on("room.message",async(_,D)=>{if(!A4)return;let X=A4.configAdapter.getConfig();await A4.handleMessage(J,v,_,D,X)}),v.on("room.invite",async(_,D)=>{Z$.info(`Received invite to room ${_}`);try{await v.joinRoom(_),Z$.info(`Joined room ${_}`)}catch(X){Z$.warn(`Failed to join room ${_}:`,X)}})})}async start($,U){let J=p1(U,$);if(!J){Z$.warn(`Account ${$} not found in config`);return}if(!J.enabled){Z$.info(`Account ${$} is disabled, skipping`);return}await E$.start($,J)}async stop($){await E$.stop($),this.directTrackers.delete($),this.startupTimes.delete($)}getState($){return E$.getState($)}onStateChange($){return this.stateCallbacks.add($),()=>this.stateCallbacks.delete($)}onQrCode($){return this.qrCallbacks.add($),()=>this.qrCallbacks.delete($)}onMessage($){return this.messageCallbacks.add($),()=>this.messageCallbacks.delete($)}async handleMessage($,U,J,v,_){let D=p1(_,$);if(!D)return;let X=this.startupTimes.get($)??Date.now(),Y=await U.getUserId(),Q=XY(v,Y,X);if(!Q.pass){Z$.debug(`Event filtered: ${Q.reason}`);return}let z=this.directTrackers.get($),N=z?await z.isDirectMessage({roomId:J,senderId:v.sender}):!1,G=await GY(U,J),q=await VY(U,J,v.sender),V=YY({accountId:$,roomId:J,event:v,isDirect:N,roomName:G.name,senderDisplayName:q});if(!V)return;if(V.media?.type==="audio"&&V.media.url)try{let M=v.content,f=await QY({client:U,mxcUrl:V.media.url,contentType:V.media.mimetype,sizeBytes:M.info?.size,maxBytes:20971520,file:M.file});if(f){if(V.media.data=f,Z$.debug("Audio downloaded",{size:f.length,mimetype:V.media.mimetype}),process.env.OPENAI_API_KEY){let R=await H3(f,V.media.mimetype);V.transcription=R.text,Z$.info("Audio transcribed",{textLength:R.text.length})}}}catch(M){Z$.warn("Failed to process audio:",M)}Z$.info("Message received",{accountId:$,senderId:V.senderId,roomId:V.chatId,isDirect:V.isDirect}),FY($),k3($);let H=V.isGroup?V.chatId:V.senderId,P=this.securityAdapter.checkAccess($,H,V.isGroup,_);if(Z$.info("Security decision",P),!P.allowed){if(P.pending){let M=V.isGroup?V.chatId:V.senderId,f=V.isGroup?V.groupName:V.senderName;F3(M,f??null),Z$.info("Saved pending",{id:M,isGroup:V.isGroup})}else Z$.debug(`Message blocked: ${P.reason}`);return}if(D.sendReadReceipts)await M3(U,J,V.eventId);let T=D.debounceMs;if(T>0){let M=await zY(V,T),f=NY(M);this.emitMessage(f)}else this.emitMessage(V)}emitMessage($){let U={...$,media:$.media?{...$.media,data:void 0}:void 0,raw:void 0};F$.emit(`matrix.${$.accountId}.inbound`,U).catch((J)=>Z$.error("Failed to emit inbound message",J));for(let J of this.messageCallbacks)try{J($)}catch(v){Z$.error("Error in message callback",v)}}}class BW{getHealth(){return PY()}getSnapshot($){return I3($)}recordSent($){x3($)}recordReceived($){k3($)}recordError($,U){C3($,U)}}function F0($){let U=new VW,J=new HW,v=new qW,_=new WW(U,J),D=new BW;if($)U.setConfig(UY($));else{let X=_Y();U.setConfig(X)}return{id:"matrix",meta:oj,capabilities:tj,config:U,security:J,outbound:v,gateway:_,status:D,async init(){Z$.info("Matrix plugin initialized"),_.onStateChange((X,Y)=>{Z$.info(`Account ${X} state: ${Y}`)})},async shutdown(){Z$.info("Shutting down Matrix plugin"),await E$.stopAll()}}}var Z$,oj,tj,GW=!1,A4=null;var TY=w(()=>{T1();$2();Z0();DY();HY();ZY();wY();hX();W0();j$();Z$=t.child("matrix:plugin"),oj={id:"matrix",name:"Matrix",description:"Matrix messaging via matrix-bot-sdk",version:"1.0.0"},tj={media:!0,reactions:!0,replies:!0,edits:!1,groups:!0,typing:!0,readReceipts:!0}});var ZW;var LY=w(()=>{ZW={autoStart:!0,reconnect:{enabled:!0,maxAttempts:10,baseDelayMs:1000,maxDelayMs:30000}}});class EW{plugins;stores=new Map;listeners=new Map;config;constructor($,U={}){this.plugins=$;this.config={...ZW,...U};for(let[J]of $)this.stores.set(J,{channelId:J,aborts:new Map,tasks:new Map,runtimes:new Map})}async startChannels(){F1.info("Starting all channels...");let $=[];for(let[U,J]of this.plugins){await J.init();for(let v of J.config.listAccounts())$.push(this.startAccount(U,v).catch((_)=>{F1.error(`Failed to start ${U}:${v}`,_)}))}await Promise.all($),F1.info("All channels started")}async startChannel($,U){let J=this.plugins.get($);if(!J)throw Error(`Unknown channel: ${$}`);if(U)await this.startAccount($,U);else{let v=J.config.listAccounts().map((_)=>this.startAccount($,_).catch((D)=>{F1.error(`Failed to start ${$}:${_}`,D)}));await Promise.all(v)}}async stopChannel($,U){if(!this.plugins.get($))throw Error(`Unknown channel: ${$}`);if(U)await this.stopAccount($,U);else{let v=this.stores.get($);if(!v)return;let _=Array.from(v.runtimes.keys()).map((D)=>this.stopAccount($,D).catch((X)=>{F1.error(`Failed to stop ${$}:${D}`,X)}));await Promise.all(_)}}async stopAll(){F1.info("Stopping all channels...");let $=[];for(let[U]of this.plugins)$.push(this.stopChannel(U));await Promise.all($),F1.info("All channels stopped")}getChannelSnapshot($){let U=this.stores.get($);if(!U)return[];return Array.from(U.runtimes.values())}getAllSnapshots(){let $=new Map;for(let[U,J]of this.stores)$.set(U,Array.from(J.runtimes.values()));return $}getAccountSnapshot($,U){return this.stores.get($)?.runtimes.get(U)??null}getChannelIds(){return Array.from(this.plugins.keys())}getPlugin($){return this.plugins.get($)}on($,U){if(!this.listeners.has($))this.listeners.set($,new Set);return this.listeners.get($).add(U),()=>{this.listeners.get($)?.delete(U)}}async startAccount($,U){let J=this.plugins.get($),v=this.stores.get($);if(!J||!v)return;let _=t.child(`${$}:${U}`);if(v.runtimes.get(U)?.running){_.debug("Already running, skipping start");return}let X=J.config.resolveAccount(U);if(!X){this.setRuntime($,U,{accountId:U,enabled:!1,configured:!1,linked:!1,running:!1,connected:!1,reconnectAttempts:0,lastError:"Account not found"});return}if(!X.enabled){this.setRuntime($,U,{accountId:U,name:X.name,enabled:!1,configured:!0,linked:!1,running:!1,connected:!1,reconnectAttempts:0,lastError:"Account disabled"}),_.info("Account disabled, skipping");return}let Y=new AbortController;v.aborts.set(U,Y),this.setRuntime($,U,{accountId:U,name:X.name,enabled:!0,configured:!0,linked:X.state==="connected",running:!0,connected:!1,lastStartAt:Date.now(),reconnectAttempts:0,lastError:null}),_.info("Starting account"),this.createGatewayContext($,U,Y);let Q=J.gateway.onStateChange((N,G)=>{if(N!==U)return;this.handleStateChange($,U,G)}),z=J.config.getConfig();try{let N=(async()=>{try{await J.gateway.start(U,z)}catch(G){if(!Y.signal.aborted)_.error("Gateway start failed",G),this.setRuntime($,U,{running:!1,lastError:G instanceof Error?G.message:String(G)}),this.emit("error",$,U,G)}})();v.tasks.set(U,N),Y.signal.addEventListener("abort",()=>{Q()}),this.emit("started",$,U)}catch(N){throw _.error("Failed to start account",N),v.aborts.delete(U),this.setRuntime($,U,{running:!1,lastError:N instanceof Error?N.message:String(N)}),this.emit("error",$,U,N),N}}async stopAccount($,U){let J=this.plugins.get($),v=this.stores.get($);if(!J||!v)return;let _=t.child(`${$}:${U}`);_.info("Stopping account");let D=v.aborts.get(U);if(D)D.abort();try{await J.gateway.stop(U)}catch(Y){_.error("Error stopping gateway",Y)}let X=v.tasks.get(U);if(X)try{await X}catch{}v.aborts.delete(U),v.tasks.delete(U),this.setRuntime($,U,{running:!1,connected:!1,lastStopAt:Date.now()}),this.emit("stopped",$,U),_.info("Account stopped")}createGatewayContext($,U,J){let v=this.plugins.get($),_=v.config.getConfig();return{channelId:$,accountId:U,account:v.config.resolveAccount(U),config:_,abortSignal:J.signal,getStatus:()=>this.getAccountSnapshot($,U),setStatus:(D)=>this.setRuntime($,U,D),log:t.child(`${$}:${U}`)}}setRuntime($,U,J){let v=this.stores.get($);if(!v)return;let D={...v.runtimes.get(U)??{accountId:U,enabled:!1,configured:!1,linked:!1,running:!1,connected:!1,reconnectAttempts:0},...J};v.runtimes.set(U,D),this.emit("stateChange",$,U,D)}handleStateChange($,U,J){let v=J==="connected",_={connected:v,linked:v};if(v)_.lastConnectedAt=Date.now(),_.reconnectAttempts=0,_.lastError=null;else if(J==="disconnected")_.lastDisconnect={reason:"disconnected",at:Date.now()};else if(J==="error")_.lastError="Connection error";this.setRuntime($,U,_)}emit($,...U){let J=this.listeners.get($);if(J)for(let v of J)try{v(...U)}catch(_){F1.error(`Error in ${$} listener`,_)}}}function J2($,U){return new EW($,U)}var F1;var RY=w(()=>{LY();j$();LY();F1=t.child("channel-manager")});function jY($){let U=$.split(":");return{channelId:U[0],accountId:U[1]}}function aj($){if(!$.enabled)return{icon:"\u25CB",status:"disabled"};if(!$.configured)return{icon:"\u25CB",status:"not configured"};if(!$.running)return{icon:"\u25CB",status:"stopped"};if($.connected)return{icon:"\u2713",status:"connected"};if($.lastError)return{icon:"\u2717",status:`error: ${$.lastError}`};return{icon:"\u25D0",status:"connecting"}}function P0(){let $=new Map,U=e6({accounts:{default:{name:"Ravi WhatsApp",enabled:!0,dmPolicy:"pairing",groupPolicy:"allowlist",sendReadReceipts:!0,debounceMs:500}}});$.set(U.id,U);let J=K4();if(r1()||J){let v=F0();$.set(v.id,v)}return $}var qx,a1;var OY=w(()=>{v4();dX();TY();$2();n1();RY();qx=C$(N4(),1);a1=class a1{async status($){let U=P0();for(let v of U.values())await v.init();let J=$?[$]:Array.from(U.keys());console.log(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ravi.bot",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "description": "Claude-powered bot with WhatsApp and Matrix integration via notif.sh",
5
5
  "type": "module",
6
6
  "main": "dist/bundle/index.js",