@naarang/ccc 3.1.0-beta.3 → 3.1.0-beta.4

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.
Files changed (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -50,7 +50,7 @@ Event: ${$7(Z)}`),!0}return!1}function HE0(Z,J){if(!J?.length)return!1;return kK
50
50
  `;let K=sl(X);X.write(`${W}\r
51
51
  `);let{connect:z,buffered:G}=await K;if(Z.emit("proxyConnect",z),this.emit("proxyConnect",z,Z),z.statusCode===200){if(Z.once("socket",tx0),J.secureEndpoint){T3("Upgrading socket connection to TLS");let V=J.servername||J.host;return h2.connect({...tl(J,"host","path","port"),socket:X,servername:z9.isIP(V)?void 0:V})}return X}X.destroy();let H=new z9.Socket({writable:!1});return H.readable=!0,Z.once("socket",(V)=>{T3("Replaying proxy buffer for failed request"),V.push(G),V.push(null)}),H}}Cz.__initStatic();function tx0(Z){Z.resume()}function tl(Z,...J){let $={},X;for(X in Z)if(!J.includes(X))$[X]=Z[X];return $}var Xv0=32768;function Yv0(Z){return new Jv0({read(){this.push(Z),this.push(null)}})}function f2(Z){let J;try{J=new URL(Z.url)}catch(z){return m1(()=>{console.warn("[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.")}),gZ(Z,()=>Promise.resolve({}))}let $=J.protocol==="https:",X=Qv0(J,Z.proxy||($?process.env.https_proxy:void 0)||process.env.http_proxy),Y=$?Zv0:ex0,Q=Z.keepAlive===void 0?!1:Z.keepAlive,W=X?new Cz(X):new Y.Agent({keepAlive:Q,maxSockets:30,timeout:2000}),K=Wv0(Z,Z.httpModule??Y,W);return gZ(Z,K)}function Qv0(Z,J){let{no_proxy:$}=process.env;if($?.split(",").some((Y)=>Z.host.endsWith(Y)||Z.hostname.endsWith(Y)))return;else return J}function Wv0(Z,J,$){let{hostname:X,pathname:Y,port:Q,protocol:W,search:K}=new URL(Z.url);return function(G){return new Promise((H,V)=>{G7(()=>{let F=Yv0(G.body),B={...Z.headers};if(G.body.length>Xv0)B["content-encoding"]="gzip",F=F.pipe($v0());let U=X.startsWith("["),L=J.request({method:"POST",agent:$,headers:B,hostname:U?X.slice(1,-1):X,path:`${Y}${K}`,port:Q,protocol:W,ca:Z.caCerts},(O)=>{O.on("data",()=>{}),O.on("end",()=>{}),O.setEncoding("utf8");let _=O.headers["retry-after"]??null,w=O.headers["x-sentry-rate-limits"]??null;H({statusCode:O.statusCode,headers:{"retry-after":_,"x-sentry-rate-limits":Array.isArray(w)?w[0]||null:w}})});L.on("error",V),F.pipe(L)})})}}var Kv0=new Set(["false","f","n","no","off","0"]),zv0=new Set(["true","t","y","yes","on","1"]);function Ez(Z,J){let $=String(Z).toLowerCase();if(Kv0.has($))return!1;if(zv0.has($))return!0;return J?.strict?null:Boolean(Z)}import{posix as Gv0,sep as Hv0}from"path";function el(Z){return Z.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}function b2(Z=process.argv[1]?VL(process.argv[1]):process.cwd(),J=Hv0==="\\"){let $=J?el(Z):Z;return(X)=>{if(!X)return;let Y=J?el(X):X,{dir:Q,base:W,ext:K}=Gv0.parse(Y);if(K===".js"||K===".mjs"||K===".cjs")W=W.slice(0,K.length*-1);let z=decodeURIComponent(W);if(!Q)Q=".";let G=Q.lastIndexOf("/node_modules");if(G>-1)return`${Q.slice(G+14).replace(/\//g,".")}:${z}`;if(Q.startsWith($)){let H=Q.slice($.length+1).replace(/\//g,".");return H?`${H}:${z}`:z}return z}}function g2(Z){if(process.env.SENTRY_RELEASE)return process.env.SENTRY_RELEASE;if(W0.SENTRY_RELEASE?.id)return W0.SENTRY_RELEASE.id;let J=process.env.GITHUB_SHA||process.env.CI_MERGE_REQUEST_SOURCE_BRANCH_SHA||process.env.CI_BUILD_REF||process.env.CI_COMMIT_SHA||process.env.BITBUCKET_COMMIT,$=process.env.APPVEYOR_PULL_REQUEST_HEAD_COMMIT||process.env.APPVEYOR_REPO_COMMIT||process.env.CODEBUILD_RESOLVED_SOURCE_VERSION||process.env.AWS_COMMIT_ID||process.env.BUILD_SOURCEVERSION||process.env.GIT_CLONE_COMMIT_HASH||process.env.BUDDY_EXECUTION_REVISION||process.env.BUILDKITE_COMMIT||process.env.CIRCLE_SHA1||process.env.CIRRUS_CHANGE_IN_REPO||process.env.CF_REVISION||process.env.CM_COMMIT||process.env.CF_PAGES_COMMIT_SHA||process.env.DRONE_COMMIT_SHA||process.env.FC_GIT_COMMIT_SHA||process.env.HEROKU_TEST_RUN_COMMIT_VERSION||process.env.HEROKU_SLUG_COMMIT||process.env.RAILWAY_GIT_COMMIT_SHA||process.env.RENDER_GIT_COMMIT||process.env.SEMAPHORE_GIT_SHA||process.env.TRAVIS_PULL_REQUEST_SHA||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA,X=process.env.CI_COMMIT_ID||process.env.SOURCE_COMMIT||process.env.SOURCE_VERSION||process.env.GIT_COMMIT||process.env.COMMIT_REF||process.env.BUILD_VCS_NUMBER||process.env.CI_COMMIT_SHA;return J||$||X||Z}var m2=FK(vL(b2()));var Jp=v(g(),1),$p=v(V0(),1);import*as Zp from"os";import{threadId as Vv0,isMainThread as Fv0}from"worker_threads";var Bv0=60000;class Pz extends hK{constructor(Z){let J=Z.includeServerName===!1?void 0:Z.serverName||global.process.env.SENTRY_NAME||Zp.hostname(),$={...Z,platform:"node",runtime:{name:"node",version:global.process.version},serverName:J};if(Z.openTelemetryInstrumentations)$p.registerInstrumentations({instrumentations:Z.openTelemetryInstrumentations});$9($,"node"),T.log(`Initializing Sentry: process: ${process.pid}, thread: ${Fv0?"main":`worker-${Vv0}`}.`);super($);if(this.getOptions().enableLogs){if(this._logOnExitFlushListener=()=>{dY(this)},J)this.on("beforeCaptureLog",(X)=>{X.attributes={...X.attributes,"server.address":J}});process.on("beforeExit",this._logOnExitFlushListener)}}get tracer(){if(this._tracer)return this._tracer;let Z="@sentry/node",J=I0,$=Jp.trace.getTracer(Z,J);return this._tracer=$,$}async flush(Z){if(await this.traceProvider?.forceFlush(),this.getOptions().sendClientReports)this._flushOutcomes();return super.flush(Z)}async close(Z){if(this._clientReportInterval)clearInterval(this._clientReportInterval);if(this._clientReportOnExitFlushListener)process.off("beforeExit",this._clientReportOnExitFlushListener);if(this._logOnExitFlushListener)process.off("beforeExit",this._logOnExitFlushListener);let J=await super.close(Z);if(this.traceProvider)await this.traceProvider.shutdown();return J}startClientReportTracking(){let Z=this.getOptions();if(Z.sendClientReports)this._clientReportOnExitFlushListener=()=>{this._flushOutcomes()},this._clientReportInterval=setInterval(()=>{w0&&T.log("Flushing client reports based on interval."),this._flushOutcomes()},Z.clientReportFlushInterval??Bv0).unref(),process.on("beforeExit",this._clientReportOnExitFlushListener)}_setupIntegrations(){YL(),super._setupIntegrations()}_getTraceInfoFromScope(Z){if(!Z)return[void 0,void 0];return ic(this,Z)}}var Xp=v(lB(),1);import*as Yp from"module";function u2(){if(!El())return;if(!W0._sentryEsmLoaderHookRegistered){W0._sentryEsmLoaderHookRegistered=!0;try{let{addHookMessagePort:Z}=Xp.createAddHookMessageChannel();Yp.register("import-in-the-middle/hook.mjs",import.meta.url,{data:{addHookMessagePort:Z,include:[]},transferList:[Z]})}catch(Z){T.warn("Failed to register 'import-in-the-middle' hook",Z)}}}function Iz(){return[_$(),O$(),w$(),j$(),E2(),M$(),al(),ol(),p$(),i$(),c$(),N2(),d$(),I2(),rl(),l$()]}function d2(Z={}){return Uv0(Z,Iz)}function Uv0(Z={},J){let $=Lv0(Z,J);if($.debug===!0)if(w0)T.enable();else m1(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")});if($.registerEsmLoaderHooks!==!1)u2();if(oc(),o0().update($.initialScope),$.spotlight&&!$.integrations.some(({name:Q})=>Q===q2))$.integrations.push(C2({sidecarUrl:typeof $.spotlight==="string"?$.spotlight:void 0}));$9($,"node-core");let Y=new Pz($);if(o0().setClient(Y),Y.init(),W0._sentryInjectLoaderHookRegister?.(),T.log(`SDK initialized from ${O3()?"CommonJS":"ESM"}`),Y.startClientReportTracking(),_v0(),kc(Y),ac(Y),process.env.VERCEL)process.on("SIGTERM",async()=>{await Y.flush(200)});return Y}function Sz(){if(!w0)return;let Z=fc(),J=["SentryContextManager","SentryPropagator"];if(T1())J.push("SentrySpanProcessor");for(let $ of J)if(!Z.includes($))T.error(`You have to set up the ${$}. Without this, the OpenTelemetry & Sentry integration will not work properly.`);if(!Z.includes("SentrySampler"))T.warn("You have to set up the SentrySampler. Without this, the OpenTelemetry & Sentry integration may still work, but sample rates set for the Sentry SDK will not be respected. If you use a custom sampler, make sure to use `wrapSamplingDecision`.")}function Lv0(Z,J){let $=Dv0(Z.release),X;if(Z.spotlight===!1)X=!1;else if(typeof Z.spotlight==="string")X=Z.spotlight;else{let z=Ez(process.env.SENTRY_SPOTLIGHT,{strict:!0}),G=z===null&&process.env.SENTRY_SPOTLIGHT?process.env.SENTRY_SPOTLIGHT:void 0;X=Z.spotlight===!0?G??!0:z??G}let Y=Ov0(Z.tracesSampleRate),Q={...Z,dsn:Z.dsn??process.env.SENTRY_DSN,environment:Z.environment??process.env.SENTRY_ENVIRONMENT,sendClientReports:Z.sendClientReports??!0,transport:Z.transport??f2,stackParser:DU(Z.stackParser||m2),release:$,tracesSampleRate:Y,spotlight:X,debug:Ez(Z.debug??process.env.SENTRY_DEBUG)},W=Z.integrations,K=Z.defaultIntegrations??J(Q);return{...Q,integrations:iU({defaultIntegrations:K,integrations:W})}}function Dv0(Z){if(Z!==void 0)return Z;let J=g2();if(J!==void 0)return J;return}function Ov0(Z){if(Z!==void 0)return Z;let J=process.env.SENTRY_TRACES_SAMPLE_RATE;if(!J)return;let $=parseFloat(J);return isFinite($)?$:void 0}function _v0(){if(Ez(process.env.SENTRY_USE_ENVIRONMENT)!==!1){let Z=process.env.SENTRY_TRACE,J=process.env.SENTRY_BAGGAGE,$=kZ(Z,J);o0().setPropagationContext($)}}function Z1(Z,J){Z.setAttribute(X0,J)}var c2="Http",Qp="@opentelemetry_sentry-patched/instrumentation-http",wv0=s(`${c2}.sentry`,(Z)=>{return new g$(Z)}),jv0=s(c2,(Z)=>{let J=new Kp.HttpInstrumentation({...Z,disableIncomingRequestInstrumentation:!0});try{J._diag=Wp.diag.createComponentLogger({namespace:Qp}),J.instrumentationName=Qp}catch{}return J});function Mv0(Z,J={}){if(typeof Z.spans==="boolean")return Z.spans;if(J.skipOpenTelemetrySetup)return!1;if(!T1(J)&&C7.major>=22)return!1;return!0}var A3=k((Z={})=>{let J=Z.spans??!0,$=Z.disableIncomingRequestSpans,X={sessions:Z.trackIncomingRequestsAsSessions,sessionFlushingDelayMS:Z.sessionFlushingDelayMS,ignoreRequestBody:Z.ignoreIncomingRequestBody,maxRequestBodySize:Z.maxIncomingRequestBodySize},Y={ignoreIncomingRequests:Z.ignoreIncomingRequests,ignoreStaticAssets:Z.ignoreStaticAssets,ignoreStatusCodes:Z.dropSpansForIncomingRequestStatusCodes,instrumentation:Z.instrumentation,onSpanCreated:Z.incomingRequestSpanHook},Q=P$(X),W=I$(Y),K=J&&!$;return{name:c2,setup(z){let G=z.getOptions();if(K&&T1(G))W.setup(z)},setupOnce(){let z=l()?.getOptions()||{},G=Mv0(Z,z);Q.setupOnce();let H={breadcrumbs:Z.breadcrumbs,propagateTraceInOutgoingRequests:!G,ignoreOutgoingRequests:Z.ignoreOutgoingRequests};if(wv0(H),G){let V=Tv0(Z);jv0(V)}},processEvent(z){return W.processEvent(z)}}});function Tv0(Z={}){return{ignoreOutgoingRequestHook:($)=>{let X=W3($);if(!X)return!1;let Y=Z.ignoreOutgoingRequests;if(Y?.(X,$))return!0;return!1},requireParentforOutgoingSpans:!1,requestHook:($,X)=>{Z1($,"auto.http.otel.http"),Z.instrumentation?.requestHook?.($,X)},responseHook:($,X)=>{Z.instrumentation?.responseHook?.($,X)},applyCustomAttributesOnSpan:($,X,Y)=>{Z.instrumentation?.applyCustomAttributesOnSpan?.($,X,Y)}}}var Op=v(Dp(),1);var _p="NodeFetch",Cv0=s(_p,Op.UndiciInstrumentation,(Z)=>{return yv0(Z)}),Ev0=s(`${_p}.sentry`,u$,(Z)=>{return Z}),Pv0=(Z={})=>{return{name:"NodeFetch",setupOnce(){if(Sv0(Z,l()?.getOptions()))Cv0(Z);Ev0(Z)}}},R3=k(Pv0);function Iv0(Z,J="/"){let $=`${Z}`;if($.endsWith("/")&&J.startsWith("/"))return`${$}${J.slice(1)}`;if(!$.endsWith("/")&&!J.startsWith("/"))return`${$}/${J.slice(1)}`;return`${$}${J}`}function Sv0(Z,J={}){return typeof Z.spans==="boolean"?Z.spans:!J.skipOpenTelemetrySetup&&T1(J)}function yv0(Z={}){return{requireParentforSpans:!1,ignoreRequestHook:($)=>{let X=Iv0($.origin,$.path),Y=Z.ignoreOutgoingRequests;return!!(Y&&X&&Y(X))},startSpanHook:()=>{return{[X0]:"auto.http.otel.node_fetch"}},requestHook:Z.requestHook,responseHook:Z.responseHook}}var mp=v(gp(),1);var k1=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__;var up="Express";function Xh0(Z){Z1(Z,"auto.http.otel.express");let J=$0(Z).data,$=J["express.type"];if($)Z.setAttribute(G0,`${$}.express`);let X=J["express.name"];if(typeof X==="string")Z.updateName(X)}function Yh0(Z,J){if(y0()===T6())return k1&&T.warn("Isolation scope is still default isolation scope - skipping setting transactionName"),J;if(Z.layerType==="request_handler"){let $=Z.request,X=$.method?$.method.toUpperCase():"GET";y0().setTransactionName(`${X} ${Z.route}`)}return J}var dp=s(up,()=>new mp.ExpressInstrumentation({requestHook:(Z)=>Xh0(Z),spanNameHook:(Z,J)=>Yh0(Z,J)})),Qh0=()=>{return{name:up,setupOnce(){dp()}}},cp=k(Qh0);import*as YD from"diagnostics_channel";var d1=v(g(),1),gz=v(_1(),1),ji=v(V0(),1),o1=v(e0(),1);import Li from"diagnostics_channel";var Hi=v($i(),1);var E3=(Z)=>{if(typeof Z!=="string")throw TypeError("invalid pattern");if(Z.length>65536)throw TypeError("pattern is too long")};var Bh0={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},P3=(Z)=>Z.replace(/[[\]\\-]/g,"\\$&"),Uh0=(Z)=>Z.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Xi=(Z)=>Z.join(""),Yi=(Z,J)=>{let $=J;if(Z.charAt($)!=="[")throw Error("not in a brace expression");let X=[],Y=[],Q=$+1,W=!1,K=!1,z=!1,G=!1,H=$,V="";Z:while(Q<Z.length){let L=Z.charAt(Q);if((L==="!"||L==="^")&&Q===$+1){G=!0,Q++;continue}if(L==="]"&&W&&!z){H=Q+1;break}if(W=!0,L==="\\"){if(!z){z=!0,Q++;continue}}if(L==="["&&!z){for(let[O,[_,w,j]]of Object.entries(Bh0))if(Z.startsWith(O,Q)){if(V)return["$.",!1,Z.length-$,!0];if(Q+=O.length,j)Y.push(_);else X.push(_);K=K||w;continue Z}}if(z=!1,V){if(L>V)X.push(P3(V)+"-"+P3(L));else if(L===V)X.push(P3(L));V="",Q++;continue}if(Z.startsWith("-]",Q+1)){X.push(P3(L+"-")),Q+=2;continue}if(Z.startsWith("-",Q+1)){V=L,Q+=2;continue}X.push(P3(L)),Q++}if(H<Q)return["",!1,0,!1];if(!X.length&&!Y.length)return["$.",!1,Z.length-$,!0];if(Y.length===0&&X.length===1&&/^\\?.$/.test(X[0])&&!G){let L=X[0].length===2?X[0].slice(-1):X[0];return[Uh0(L),!1,H-$,!1]}let F="["+(G?"^":"")+Xi(X)+"]",B="["+(G?"":"^")+Xi(Y)+"]";return[X.length&&Y.length?"("+F+"|"+B+")":X.length?F:B,K,H-$,!0]};var E7=(Z,{windowsPathsNoEscape:J=!1}={})=>{return J?Z.replace(/\[([^\/\\])\]/g,"$1"):Z.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1")};var Lh0=new Set(["!","?","+","*","@"]),Qi=(Z)=>Lh0.has(Z),Dh0="(?!(?:^|/)\\.\\.?(?:$|/))",fz="(?!\\.)",Oh0=new Set(["[","."]),_h0=new Set(["..","."]),wh0=new Set("().*{}+?[]^$\\!"),jh0=(Z)=>Z.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),e2="[^/]",Wi=e2+"*?",Ki=e2+"+?";class w4{type;#J;#$;#G=!1;#X=[];#Y;#B;#Q;#H=!1;#K;#W;#Z=!1;constructor(Z,J,$={}){if(this.type=Z,Z)this.#$=!0;if(this.#Y=J,this.#J=this.#Y?this.#Y.#J:this,this.#K=this.#J===this?$:this.#J.#K,this.#Q=this.#J===this?[]:this.#J.#Q,Z==="!"&&!this.#J.#H)this.#Q.push(this);this.#B=this.#Y?this.#Y.#X.length:0}get hasMagic(){if(this.#$!==void 0)return this.#$;for(let Z of this.#X){if(typeof Z==="string")continue;if(Z.type||Z.hasMagic)return this.#$=!0}return this.#$}toString(){if(this.#W!==void 0)return this.#W;if(!this.type)return this.#W=this.#X.map((Z)=>String(Z)).join("");else return this.#W=this.type+"("+this.#X.map((Z)=>String(Z)).join("|")+")"}#L(){if(this!==this.#J)throw Error("should only call on root");if(this.#H)return this;this.toString(),this.#H=!0;let Z;while(Z=this.#Q.pop()){if(Z.type!=="!")continue;let J=Z,$=J.#Y;while($){for(let X=J.#B+1;!$.type&&X<$.#X.length;X++)for(let Y of Z.#X){if(typeof Y==="string")throw Error("string part in extglob AST??");Y.copyIn($.#X[X])}J=$,$=J.#Y}}return this}push(...Z){for(let J of Z){if(J==="")continue;if(typeof J!=="string"&&!(J instanceof w4&&J.#Y===this))throw Error("invalid part: "+J);this.#X.push(J)}}toJSON(){let Z=this.type===null?this.#X.slice().map((J)=>typeof J==="string"?J:J.toJSON()):[this.type,...this.#X.map((J)=>J.toJSON())];if(this.isStart()&&!this.type)Z.unshift([]);if(this.isEnd()&&(this===this.#J||this.#J.#H&&this.#Y?.type==="!"))Z.push({});return Z}isStart(){if(this.#J===this)return!0;if(!this.#Y?.isStart())return!1;if(this.#B===0)return!0;let Z=this.#Y;for(let J=0;J<this.#B;J++){let $=Z.#X[J];if(!($ instanceof w4&&$.type==="!"))return!1}return!0}isEnd(){if(this.#J===this)return!0;if(this.#Y?.type==="!")return!0;if(!this.#Y?.isEnd())return!1;if(!this.type)return this.#Y?.isEnd();let Z=this.#Y?this.#Y.#X.length:0;return this.#B===Z-1}copyIn(Z){if(typeof Z==="string")this.push(Z);else this.push(Z.clone(this))}clone(Z){let J=new w4(this.type,Z);for(let $ of this.#X)J.copyIn($);return J}static#D(Z,J,$,X){let Y=!1,Q=!1,W=-1,K=!1;if(J.type===null){let F=$,B="";while(F<Z.length){let U=Z.charAt(F++);if(Y||U==="\\"){Y=!Y,B+=U;continue}if(Q){if(F===W+1){if(U==="^"||U==="!")K=!0}else if(U==="]"&&!(F===W+2&&K))Q=!1;B+=U;continue}else if(U==="["){Q=!0,W=F,K=!1,B+=U;continue}if(!X.noext&&Qi(U)&&Z.charAt(F)==="("){J.push(B),B="";let L=new w4(U,J);F=w4.#D(Z,L,F,X),J.push(L);continue}B+=U}return J.push(B),F}let z=$+1,G=new w4(null,J),H=[],V="";while(z<Z.length){let F=Z.charAt(z++);if(Y||F==="\\"){Y=!Y,V+=F;continue}if(Q){if(z===W+1){if(F==="^"||F==="!")K=!0}else if(F==="]"&&!(z===W+2&&K))Q=!1;V+=F;continue}else if(F==="["){Q=!0,W=z,K=!1,V+=F;continue}if(Qi(F)&&Z.charAt(z)==="("){G.push(V),V="";let B=new w4(F,G);G.push(B),z=w4.#D(Z,B,z,X);continue}if(F==="|"){G.push(V),V="",H.push(G),G=new w4(null,J);continue}if(F===")"){if(V===""&&J.#X.length===0)J.#Z=!0;return G.push(V),V="",J.push(...H,G),z}V+=F}return J.type=null,J.#$=void 0,J.#X=[Z.substring($-1)],z}static fromGlob(Z,J={}){let $=new w4(null,void 0,J);return w4.#D(Z,$,0,J),$}toMMPattern(){if(this!==this.#J)return this.#J.toMMPattern();let Z=this.toString(),[J,$,X,Y]=this.toRegExpSource();if(!(X||this.#$||this.#K.nocase&&!this.#K.nocaseMagicOnly&&Z.toUpperCase()!==Z.toLowerCase()))return $;let W=(this.#K.nocase?"i":"")+(Y?"u":"");return Object.assign(new RegExp(`^${J}$`,W),{_src:J,_glob:Z})}get options(){return this.#K}toRegExpSource(Z){let J=Z??!!this.#K.dot;if(this.#J===this)this.#L();if(!this.type){let K=this.isStart()&&this.isEnd(),z=this.#X.map((F)=>{let[B,U,L,O]=typeof F==="string"?w4.#V(F,this.#$,K):F.toRegExpSource(Z);return this.#$=this.#$||L,this.#G=this.#G||O,B}).join(""),G="";if(this.isStart()){if(typeof this.#X[0]==="string"){if(!(this.#X.length===1&&_h0.has(this.#X[0]))){let B=Oh0,U=J&&B.has(z.charAt(0))||z.startsWith("\\.")&&B.has(z.charAt(2))||z.startsWith("\\.\\.")&&B.has(z.charAt(4)),L=!J&&!Z&&B.has(z.charAt(0));G=U?Dh0:L?fz:""}}}let H="";if(this.isEnd()&&this.#J.#H&&this.#Y?.type==="!")H="(?:$|\\/)";return[G+z+H,E7(z),this.#$=!!this.#$,this.#G]}let $=this.type==="*"||this.type==="+",X=this.type==="!"?"(?:(?!(?:":"(?:",Y=this.#F(J);if(this.isStart()&&this.isEnd()&&!Y&&this.type!=="!"){let K=this.toString();return this.#X=[K],this.type=null,this.#$=void 0,[K,E7(this.toString()),!1,!1]}let Q=!$||Z||J||!fz?"":this.#F(!0);if(Q===Y)Q="";if(Q)Y=`(?:${Y})(?:${Q})*?`;let W="";if(this.type==="!"&&this.#Z)W=(this.isStart()&&!J?fz:"")+Ki;else{let K=this.type==="!"?"))"+(this.isStart()&&!J&&!Z?fz:"")+Wi+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&Q?")":this.type==="*"&&Q?")?":`)${this.type}`;W=X+Y+K}return[W,E7(Y),this.#$=!!this.#$,this.#G]}#F(Z){return this.#X.map((J)=>{if(typeof J==="string")throw Error("string type in extglob ast??");let[$,X,Y,Q]=J.toRegExpSource(Z);return this.#G=this.#G||Q,$}).filter((J)=>!(this.isStart()&&this.isEnd())||!!J).join("|")}static#V(Z,J,$=!1){let X=!1,Y="",Q=!1;for(let W=0;W<Z.length;W++){let K=Z.charAt(W);if(X){X=!1,Y+=(wh0.has(K)?"\\":"")+K;continue}if(K==="\\"){if(W===Z.length-1)Y+="\\\\";else X=!0;continue}if(K==="["){let[z,G,H,V]=Yi(Z,W);if(H){Y+=z,Q=Q||G,W+=H-1,J=J||V;continue}}if(K==="*"){if($&&Z==="*")Y+=Ki;else Y+=Wi;J=!0;continue}if(K==="?"){Y+=e2,J=!0;continue}Y+=jh0(K)}return[Y,E7(Z),!!J,Q]}}var ZD=(Z,{windowsPathsNoEscape:J=!1}={})=>{return J?Z.replace(/[?*()[\]]/g,"[$&]"):Z.replace(/[?*()[\]\\]/g,"\\$&")};var j4=(Z,J,$={})=>{if(E3(J),!$.nocomment&&J.charAt(0)==="#")return!1;return new I3(J,$).match(Z)},Mh0=/^\*+([^+@!?\*\[\(]*)$/,Th0=(Z)=>(J)=>!J.startsWith(".")&&J.endsWith(Z),Ah0=(Z)=>(J)=>J.endsWith(Z),Nh0=(Z)=>{return Z=Z.toLowerCase(),(J)=>!J.startsWith(".")&&J.toLowerCase().endsWith(Z)},Rh0=(Z)=>{return Z=Z.toLowerCase(),(J)=>J.toLowerCase().endsWith(Z)},qh0=/^\*+\.\*+$/,Ch0=(Z)=>!Z.startsWith(".")&&Z.includes("."),Eh0=(Z)=>Z!=="."&&Z!==".."&&Z.includes("."),Ph0=/^\.\*+$/,Ih0=(Z)=>Z!=="."&&Z!==".."&&Z.startsWith("."),Sh0=/^\*+$/,yh0=(Z)=>Z.length!==0&&!Z.startsWith("."),kh0=(Z)=>Z.length!==0&&Z!=="."&&Z!=="..",xh0=/^\?+([^+@!?\*\[\(]*)?$/,vh0=([Z,J=""])=>{let $=Vi([Z]);if(!J)return $;return J=J.toLowerCase(),(X)=>$(X)&&X.toLowerCase().endsWith(J)},hh0=([Z,J=""])=>{let $=Fi([Z]);if(!J)return $;return J=J.toLowerCase(),(X)=>$(X)&&X.toLowerCase().endsWith(J)},fh0=([Z,J=""])=>{let $=Fi([Z]);return!J?$:(X)=>$(X)&&X.endsWith(J)},bh0=([Z,J=""])=>{let $=Vi([Z]);return!J?$:(X)=>$(X)&&X.endsWith(J)},Vi=([Z])=>{let J=Z.length;return($)=>$.length===J&&!$.startsWith(".")},Fi=([Z])=>{let J=Z.length;return($)=>$.length===J&&$!=="."&&$!==".."},Bi=typeof process==="object"&&process?typeof process.env==="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",zi={win32:{sep:"\\"},posix:{sep:"/"}},gh0=Bi==="win32"?zi.win32.sep:zi.posix.sep;j4.sep=gh0;var t6=Symbol("globstar **");j4.GLOBSTAR=t6;var mh0="[^/]",uh0=mh0+"*?",dh0="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",ch0="(?:(?!(?:\\/|^)\\.).)*?",lh0=(Z,J={})=>($)=>j4($,Z,J);j4.filter=lh0;var s6=(Z,J={})=>Object.assign({},Z,J),ph0=(Z)=>{if(!Z||typeof Z!=="object"||!Object.keys(Z).length)return j4;let J=j4;return Object.assign((X,Y,Q={})=>J(X,Y,s6(Z,Q)),{Minimatch:class extends J.Minimatch{constructor(Y,Q={}){super(Y,s6(Z,Q))}static defaults(Y){return J.defaults(s6(Z,Y)).Minimatch}},AST:class extends J.AST{constructor(Y,Q,W={}){super(Y,Q,s6(Z,W))}static fromGlob(Y,Q={}){return J.AST.fromGlob(Y,s6(Z,Q))}},unescape:(X,Y={})=>J.unescape(X,s6(Z,Y)),escape:(X,Y={})=>J.escape(X,s6(Z,Y)),filter:(X,Y={})=>J.filter(X,s6(Z,Y)),defaults:(X)=>J.defaults(s6(Z,X)),makeRe:(X,Y={})=>J.makeRe(X,s6(Z,Y)),braceExpand:(X,Y={})=>J.braceExpand(X,s6(Z,Y)),match:(X,Y,Q={})=>J.match(X,Y,s6(Z,Q)),sep:J.sep,GLOBSTAR:t6})};j4.defaults=ph0;var Ui=(Z,J={})=>{if(E3(Z),J.nobrace||!/\{(?:(?!\{).)*\}/.test(Z))return[Z];return Hi.default(Z)};j4.braceExpand=Ui;var ih0=(Z,J={})=>new I3(Z,J).makeRe();j4.makeRe=ih0;var nh0=(Z,J,$={})=>{let X=new I3(J,$);if(Z=Z.filter((Y)=>X.match(Y)),X.options.nonull&&!Z.length)Z.push(J);return Z};j4.match=nh0;var Gi=/[?*]|[+@!]\(.*?\)|\[|\]/,ah0=(Z)=>Z.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");class I3{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(Z,J={}){if(E3(Z),J=J||{},this.options=J,this.pattern=Z,this.platform=J.platform||Bi,this.isWindows=this.platform==="win32",this.windowsPathsNoEscape=!!J.windowsPathsNoEscape||J.allowWindowsEscape===!1,this.windowsPathsNoEscape)this.pattern=this.pattern.replace(/\\/g,"/");this.preserveMultipleSlashes=!!J.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!J.nonegate,this.comment=!1,this.empty=!1,this.partial=!!J.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=J.windowsNoMagicRoot!==void 0?J.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let Z of this.set)for(let J of Z)if(typeof J!=="string")return!0;return!1}debug(...Z){}make(){let Z=this.pattern,J=this.options;if(!J.nocomment&&Z.charAt(0)==="#"){this.comment=!0;return}if(!Z){this.empty=!0;return}if(this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],J.debug)this.debug=(...Y)=>console.error(...Y);this.debug(this.pattern,this.globSet);let $=this.globSet.map((Y)=>this.slashSplit(Y));this.globParts=this.preprocess($),this.debug(this.pattern,this.globParts);let X=this.globParts.map((Y,Q,W)=>{if(this.isWindows&&this.windowsNoMagicRoot){let K=Y[0]===""&&Y[1]===""&&(Y[2]==="?"||!Gi.test(Y[2]))&&!Gi.test(Y[3]),z=/^[a-z]:/i.test(Y[0]);if(K)return[...Y.slice(0,4),...Y.slice(4).map((G)=>this.parse(G))];else if(z)return[Y[0],...Y.slice(1).map((G)=>this.parse(G))]}return Y.map((K)=>this.parse(K))});if(this.debug(this.pattern,X),this.set=X.filter((Y)=>Y.indexOf(!1)===-1),this.isWindows)for(let Y=0;Y<this.set.length;Y++){let Q=this.set[Y];if(Q[0]===""&&Q[1]===""&&this.globParts[Y][2]==="?"&&typeof Q[3]==="string"&&/^[a-z]:$/i.test(Q[3]))Q[2]="?"}this.debug(this.pattern,this.set)}preprocess(Z){if(this.options.noglobstar){for(let $=0;$<Z.length;$++)for(let X=0;X<Z[$].length;X++)if(Z[$][X]==="**")Z[$][X]="*"}let{optimizationLevel:J=1}=this.options;if(J>=2)Z=this.firstPhasePreProcess(Z),Z=this.secondPhasePreProcess(Z);else if(J>=1)Z=this.levelOneOptimize(Z);else Z=this.adjascentGlobstarOptimize(Z);return Z}adjascentGlobstarOptimize(Z){return Z.map((J)=>{let $=-1;while(($=J.indexOf("**",$+1))!==-1){let X=$;while(J[X+1]==="**")X++;if(X!==$)J.splice($,X-$)}return J})}levelOneOptimize(Z){return Z.map((J)=>{return J=J.reduce(($,X)=>{let Y=$[$.length-1];if(X==="**"&&Y==="**")return $;if(X===".."){if(Y&&Y!==".."&&Y!=="."&&Y!=="**")return $.pop(),$}return $.push(X),$},[]),J.length===0?[""]:J})}levelTwoFileOptimize(Z){if(!Array.isArray(Z))Z=this.slashSplit(Z);let J=!1;do{if(J=!1,!this.preserveMultipleSlashes){for(let X=1;X<Z.length-1;X++){let Y=Z[X];if(X===1&&Y===""&&Z[0]==="")continue;if(Y==="."||Y==="")J=!0,Z.splice(X,1),X--}if(Z[0]==="."&&Z.length===2&&(Z[1]==="."||Z[1]===""))J=!0,Z.pop()}let $=0;while(($=Z.indexOf("..",$+1))!==-1){let X=Z[$-1];if(X&&X!=="."&&X!==".."&&X!=="**")J=!0,Z.splice($-1,2),$-=2}}while(J);return Z.length===0?[""]:Z}firstPhasePreProcess(Z){let J=!1;do{J=!1;for(let $ of Z){let X=-1;while((X=$.indexOf("**",X+1))!==-1){let Q=X;while($[Q+1]==="**")Q++;if(Q>X)$.splice(X+1,Q-X);let W=$[X+1],K=$[X+2],z=$[X+3];if(W!=="..")continue;if(!K||K==="."||K===".."||!z||z==="."||z==="..")continue;J=!0,$.splice(X,1);let G=$.slice(0);G[X]="**",Z.push(G),X--}if(!this.preserveMultipleSlashes){for(let Q=1;Q<$.length-1;Q++){let W=$[Q];if(Q===1&&W===""&&$[0]==="")continue;if(W==="."||W==="")J=!0,$.splice(Q,1),Q--}if($[0]==="."&&$.length===2&&($[1]==="."||$[1]===""))J=!0,$.pop()}let Y=0;while((Y=$.indexOf("..",Y+1))!==-1){let Q=$[Y-1];if(Q&&Q!=="."&&Q!==".."&&Q!=="**"){J=!0;let K=Y===1&&$[Y+1]==="**"?["."]:[];if($.splice(Y-1,2,...K),$.length===0)$.push("");Y-=2}}}}while(J);return Z}secondPhasePreProcess(Z){for(let J=0;J<Z.length-1;J++)for(let $=J+1;$<Z.length;$++){let X=this.partsMatch(Z[J],Z[$],!this.preserveMultipleSlashes);if(X){Z[J]=[],Z[$]=X;break}}return Z.filter((J)=>J.length)}partsMatch(Z,J,$=!1){let X=0,Y=0,Q=[],W="";while(X<Z.length&&Y<J.length)if(Z[X]===J[Y])Q.push(W==="b"?J[Y]:Z[X]),X++,Y++;else if($&&Z[X]==="**"&&J[Y]===Z[X+1])Q.push(Z[X]),X++;else if($&&J[Y]==="**"&&Z[X]===J[Y+1])Q.push(J[Y]),Y++;else if(Z[X]==="*"&&J[Y]&&(this.options.dot||!J[Y].startsWith("."))&&J[Y]!=="**"){if(W==="b")return!1;W="a",Q.push(Z[X]),X++,Y++}else if(J[Y]==="*"&&Z[X]&&(this.options.dot||!Z[X].startsWith("."))&&Z[X]!=="**"){if(W==="a")return!1;W="b",Q.push(J[Y]),X++,Y++}else return!1;return Z.length===J.length&&Q}parseNegate(){if(this.nonegate)return;let Z=this.pattern,J=!1,$=0;for(let X=0;X<Z.length&&Z.charAt(X)==="!";X++)J=!J,$++;if($)this.pattern=Z.slice($);this.negate=J}matchOne(Z,J,$=!1){let X=this.options;if(this.isWindows){let U=typeof Z[0]==="string"&&/^[a-z]:$/i.test(Z[0]),L=!U&&Z[0]===""&&Z[1]===""&&Z[2]==="?"&&/^[a-z]:$/i.test(Z[3]),O=typeof J[0]==="string"&&/^[a-z]:$/i.test(J[0]),_=!O&&J[0]===""&&J[1]===""&&J[2]==="?"&&typeof J[3]==="string"&&/^[a-z]:$/i.test(J[3]),w=L?3:U?0:void 0,j=_?3:O?0:void 0;if(typeof w==="number"&&typeof j==="number"){let[A,R]=[Z[w],J[j]];if(A.toLowerCase()===R.toLowerCase()){if(J[j]=A,j>w)J=J.slice(j);else if(w>j)Z=Z.slice(w)}}}let{optimizationLevel:Y=1}=this.options;if(Y>=2)Z=this.levelTwoFileOptimize(Z);this.debug("matchOne",this,{file:Z,pattern:J}),this.debug("matchOne",Z.length,J.length);for(var Q=0,W=0,K=Z.length,z=J.length;Q<K&&W<z;Q++,W++){this.debug("matchOne loop");var G=J[W],H=Z[Q];if(this.debug(J,G,H),G===!1)return!1;if(G===t6){this.debug("GLOBSTAR",[J,G,H]);var V=Q,F=W+1;if(F===z){this.debug("** at the end");for(;Q<K;Q++)if(Z[Q]==="."||Z[Q]===".."||!X.dot&&Z[Q].charAt(0)===".")return!1;return!0}while(V<K){var B=Z[V];if(this.debug(`
52
52
  globstar while`,Z,V,J,F,B),this.matchOne(Z.slice(V),J.slice(F),$))return this.debug("globstar found match!",V,K,B),!0;else{if(B==="."||B===".."||!X.dot&&B.charAt(0)==="."){this.debug("dot detected!",Z,V,J,F);break}this.debug("globstar swallow a segment, and continue"),V++}}if($){if(this.debug(`
53
- >>> no match, partial?`,Z,V,J,F),V===K)return!0}return!1}let U;if(typeof G==="string")U=H===G,this.debug("string match",G,H,U);else U=G.test(H),this.debug("pattern match",G,H,U);if(!U)return!1}if(Q===K&&W===z)return!0;else if(Q===K)return $;else if(W===z)return Q===K-1&&Z[Q]==="";else throw Error("wtf?")}braceExpand(){return Ui(this.pattern,this.options)}parse(Z){E3(Z);let J=this.options;if(Z==="**")return t6;if(Z==="")return"";let $,X=null;if($=Z.match(Sh0))X=J.dot?kh0:yh0;else if($=Z.match(Mh0))X=(J.nocase?J.dot?Rh0:Nh0:J.dot?Ah0:Th0)($[1]);else if($=Z.match(xh0))X=(J.nocase?J.dot?hh0:vh0:J.dot?fh0:bh0)($);else if($=Z.match(qh0))X=J.dot?Eh0:Ch0;else if($=Z.match(Ph0))X=Ih0;let Y=w4.fromGlob(Z,this.options).toMMPattern();if(X&&typeof Y==="object")Reflect.defineProperty(Y,"test",{value:X});return Y}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let Z=this.set;if(!Z.length)return this.regexp=!1,this.regexp;let J=this.options,$=J.noglobstar?uh0:J.dot?dh0:ch0,X=new Set(J.nocase?["i"]:[]),Y=Z.map((K)=>{let z=K.map((G)=>{if(G instanceof RegExp)for(let H of G.flags.split(""))X.add(H);return typeof G==="string"?ah0(G):G===t6?t6:G._src});return z.forEach((G,H)=>{let V=z[H+1],F=z[H-1];if(G!==t6||F===t6)return;if(F===void 0)if(V!==void 0&&V!==t6)z[H+1]="(?:\\/|"+$+"\\/)?"+V;else z[H]=$;else if(V===void 0)z[H-1]=F+"(?:\\/|"+$+")?";else if(V!==t6)z[H-1]=F+"(?:\\/|\\/"+$+"\\/)"+V,z[H+1]=t6}),z.filter((G)=>G!==t6).join("/")}).join("|"),[Q,W]=Z.length>1?["(?:",")"]:["",""];if(Y="^"+Q+Y+W+"$",this.negate)Y="^(?!"+Y+").+$";try{this.regexp=new RegExp(Y,[...X].join(""))}catch(K){this.regexp=!1}return this.regexp}slashSplit(Z){if(this.preserveMultipleSlashes)return Z.split("/");else if(this.isWindows&&/^\/\/[^\/]+/.test(Z))return["",...Z.split(/\/+/)];else return Z.split(/\/+/)}match(Z,J=this.partial){if(this.debug("match",Z,this.pattern),this.comment)return!1;if(this.empty)return Z==="";if(Z==="/"&&J)return!0;let $=this.options;if(this.isWindows)Z=Z.split("\\").join("/");let X=this.slashSplit(Z);this.debug(this.pattern,"split",X);let Y=this.set;this.debug(this.pattern,"set",Y);let Q=X[X.length-1];if(!Q)for(let W=X.length-2;!Q&&W>=0;W--)Q=X[W];for(let W=0;W<Y.length;W++){let K=Y[W],z=X;if($.matchBase&&K.length===1)z=[Q];if(this.matchOne(z,K,J)){if($.flipNegate)return!0;return!this.negate}}if($.flipNegate)return!1;return this.negate}static defaults(Z){return j4.defaults(Z).Minimatch}}j4.AST=w4;j4.Minimatch=I3;j4.escape=ZD;j4.unescape=E7;var Di="@fastify/otel",rh0="0.8.0",sh0=">=4.0.0 <6",Oi=["onRequest","preParsing","preValidation","preHandler","preSerialization","onSend","onResponse","onError"],H1={HOOK_NAME:"hook.name",FASTIFY_TYPE:"fastify.type",HOOK_CALLBACK_NAME:"hook.callback.name",ROOT:"fastify.root"},P7={ROUTE:"route-hook",INSTANCE:"hook",HANDLER:"request-handler"},G9="anonymous",p4=Symbol("fastify otel instance"),I7=Symbol("fastify otel request spans"),S3=Symbol("fastify otel request context"),_i=Symbol("fastify otel addhook original"),wi=Symbol("fastify otel setnotfound original"),bz=Symbol("fastify otel ignore path");class JD extends ji.InstrumentationBase{constructor(Z){super(Di,rh0,Z);if(this.servername=Z?.servername??process.env.OTEL_SERVICE_NAME??"fastify",this[bz]=null,this._logger=d1.diag.createComponentLogger({namespace:Di}),Z?.ignorePaths!=null||process.env.OTEL_FASTIFY_IGNORE_PATHS!=null){let J=Z?.ignorePaths??process.env.OTEL_FASTIFY_IGNORE_PATHS;if((typeof J!=="string"||J.length===0)&&typeof J!=="function")throw TypeError("ignorePaths must be a string or a function");let $=j4;this[bz]=(X)=>{if(typeof J==="function")return J(X);else return $(X.url,J)}}}enable(){if(this._handleInitialization===void 0&&this.getConfig().registerOnInitialization){let Z=this.plugin();this._handleInitialization=(J)=>{J.fastify.register(Z)},Li.subscribe("fastify.initialization",this._handleInitialization)}return super.enable()}disable(){if(this._handleInitialization)Li.unsubscribe("fastify.initialization",this._handleInitialization),this._handleInitialization=void 0;return super.disable()}init(){return[]}plugin(){let Z=this;return J[Symbol.for("skip-override")]=!0,J[Symbol.for("fastify.display-name")]="@fastify/otel",J[Symbol.for("plugin-meta")]={fastify:sh0,name:"@fastify/otel"},J;function J($,X,Y){$.decorate(p4,Z),$.decorate(_i,$.addHook),$.decorate(wi,$.setNotFoundHandler),$.decorateRequest("opentelemetry",function(){let V=this[S3];return{span:this[I7],tracer:Z.tracer,context:V,inject:(B,U)=>{return d1.propagation.inject(V,B,U)},extract:(B,U)=>{return d1.propagation.extract(V,B,U)}}}),$.decorateRequest(I7,null),$.decorateRequest(S3,null),$.addHook("onRoute",function(H){if(Z[bz]?.(H)===!0){Z._logger.debug(`Ignoring route instrumentation ${H.method} ${H.url} because it matches the ignore path`);return}for(let V of Oi)if(H[V]!=null){let F=H[V];if(typeof F==="function")H[V]=G(F,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - route -> ${V}`,[H1.FASTIFY_TYPE]:P7.ROUTE,[o1.ATTR_HTTP_ROUTE]:H.url,[H1.HOOK_CALLBACK_NAME]:F.name?.length>0?F.name:G9});else if(Array.isArray(F)){let B=[];for(let U of F)B.push(G(U,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - route -> ${V}`,[H1.FASTIFY_TYPE]:P7.ROUTE,[o1.ATTR_HTTP_ROUTE]:H.url,[H1.HOOK_CALLBACK_NAME]:U.name?.length>0?U.name:G9}));H[V]=B}}if(H.onSend!=null)H.onSend=Array.isArray(H.onSend)?[...H.onSend,Q]:[H.onSend,Q];else H.onSend=Q;if(H.onError!=null)H.onError=Array.isArray(H.onError)?[...H.onError,W]:[H.onError,W];else H.onError=W;H.handler=G(H.handler,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - route-handler`,[H1.FASTIFY_TYPE]:P7.HANDLER,[o1.ATTR_HTTP_ROUTE]:H.url,[H1.HOOK_CALLBACK_NAME]:H.handler.name.length>0?H.handler.name:G9})}),$.addHook("onRequest",function(H,V,F){if(this[p4].isEnabled()===!1)return F();else if(this[p4][bz]?.({url:H.url,method:H.method})===!0)return this[p4]._logger.debug(`Ignoring request ${H.method} ${H.url} because it matches the ignore path`),F();let B=d1.context.active();if(d1.trace.getSpan(B)==null)B=d1.propagation.extract(B,H.headers);let U=gz.getRPCMetadata(B);if(H.routeOptions.url!=null&&U?.type===gz.RPCType.HTTP)U.route=H.routeOptions.url;let L=this[p4].tracer.startSpan("request",{attributes:{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.ROOT]:"@fastify/otel",[o1.ATTR_HTTP_ROUTE]:H.url,[o1.ATTR_HTTP_REQUEST_METHOD]:H.method}},B);H[S3]=d1.trace.setSpan(B,L),H[I7]=L,d1.context.with(H[S3],()=>{F()})}),$.addHook("onResponse",function(H,V,F){let B=H[I7];if(B!=null)B.setStatus({code:d1.SpanStatusCode.OK,message:"OK"}),B.setAttributes({[o1.ATTR_HTTP_RESPONSE_STATUS_CODE]:404}),B.end();H[I7]=null,F()}),$.addHook=K,$.setNotFoundHandler=z,Y();function Q(H,V,F,B){let U=H[I7];if(U!=null){if(V.statusCode<500)U.setStatus({code:d1.SpanStatusCode.OK,message:"OK"});U.setAttributes({[o1.ATTR_HTTP_RESPONSE_STATUS_CODE]:V.statusCode}),U.end()}H[I7]=null,B(null,F)}function W(H,V,F,B){let U=H[I7];if(U!=null)U.setStatus({code:d1.SpanStatusCode.ERROR,message:F.message}),U.recordException(F);B()}function K(H,V){let F=this[_i];if(Oi.includes(H))return F.call(this,H,G(V,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - ${H}`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:V.name?.length>0?V.name:G9}));else return F.call(this,H,V)}function z(H,V){let F=this[wi];if(typeof H==="function")V=G(H,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - not-found-handler`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:H.name?.length>0?H.name:G9}),F.call(this,V);else{if(H.preValidation!=null)H.preValidation=G(H.preValidation,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - not-found-handler - preValidation`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:H.preValidation.name?.length>0?H.preValidation.name:G9});if(H.preHandler!=null)H.preHandler=G(H.preHandler,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - not-found-handler - preHandler`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:H.preHandler.name?.length>0?H.preHandler.name:G9});V=G(V,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - not-found-handler`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:V.name?.length>0?V.name:G9}),F.call(this,H,V)}}function G(H,V={}){return function(...B){let U=this[p4],[L]=B;if(U.isEnabled()===!1)return H.call(this,...B);let O=L[S3]??d1.context.active(),_=U.tracer.startSpan(`handler - ${H.name?.length>0?H.name:this.pluginName??G9}`,{attributes:V},O);return d1.context.with(d1.trace.setSpan(O,_),function(){try{let w=H.call(this,...B);if(typeof w?.then==="function")return w.then((j)=>{return _.end(),j},(j)=>{return _.setStatus({code:d1.SpanStatusCode.ERROR,message:j.message}),_.recordException(j),_.end(),Promise.reject(j)});return _.end(),w}catch(w){throw _.setStatus({code:d1.SpanStatusCode.ERROR,message:w.message}),_.recordException(w),_.end(),w}},this)}}}}}var u8=v(g(),1),uz=v(_1(),1),eZ=v(V0(),1),Ri=v(e0(),1);var H9;(function(Z){Z.FASTIFY_NAME="fastify.name";let $="fastify.type";Z.FASTIFY_TYPE=$;let X="hook.name";Z.HOOK_NAME=X;let Y="plugin.name";Z.PLUGIN_NAME=Y})(H9||(H9={}));var y3;(function(Z){Z.MIDDLEWARE="middleware";let $="request_handler";Z.REQUEST_HANDLER=$})(y3||(y3={}));var k3;(function(Z){Z.MIDDLEWARE="middleware";let $="request handler";Z.REQUEST_HANDLER=$})(k3||(k3={}));var Ti=v(g(),1);var x3=Symbol("opentelemetry.instrumentation.fastify.request_active_span");function $D(Z,J,$,X={}){let Y=J.startSpan($,{attributes:X}),Q=Z[x3]||[];return Q.push(Y),Object.defineProperty(Z,x3,{enumerable:!1,configurable:!0,value:Q}),Y}function mz(Z,J){let $=Z[x3]||[];if(!$.length)return;$.forEach((X)=>{if(J)X.setStatus({code:Ti.SpanStatusCode.ERROR,message:J.message}),X.recordException(J);X.end()}),delete Z[x3]}function Ai(Z,J,$){let X,Y=void 0;try{if(Y=Z(),Mi(Y))Y.then((Q)=>J(void 0,Q),(Q)=>J(Q))}catch(Q){X=Q}finally{if(!Mi(Y)){if(J(X,Y),X)throw X}return Y}}function Mi(Z){return typeof Z==="object"&&Z&&typeof Object.getOwnPropertyDescriptor(Z,"then")?.value==="function"||!1}var th0="0.1.0",eh0="@sentry/instrumentation-fastify-v3",Ni="anonymous",Zf0=new Set(["onTimeout","onRequest","preParsing","preValidation","preSerialization","preHandler","onSend","onResponse","onError"]);class XD extends eZ.InstrumentationBase{constructor(Z={}){super(eh0,th0,Z)}init(){return[new eZ.InstrumentationNodeModuleDefinition("fastify",[">=3.0.0 <4"],(Z)=>{return this._patchConstructor(Z)})]}_hookOnRequest(){let Z=this;return function($,X,Y){if(!Z.isEnabled())return Y();Z._wrap(X,"send",Z._patchSend());let Q=$,W=uz.getRPCMetadata(u8.context.active()),K=Q.routeOptions?Q.routeOptions.url:$.routerPath;if(K&&W?.type===uz.RPCType.HTTP)W.route=K;let z=$.method||"GET";y0().setTransactionName(`${z} ${K}`),Y()}}_wrapHandler(Z,J,$,X){let Y=this;return this._diag.debug("Patching fastify route.handler function"),function(...Q){if(!Y.isEnabled())return $.apply(this,Q);let W=$.name||Z||Ni,K=`${k3.MIDDLEWARE} - ${W}`,z=Q[1],G=$D(z,Y.tracer,K,{[H9.FASTIFY_TYPE]:y3.MIDDLEWARE,[H9.PLUGIN_NAME]:Z,[H9.HOOK_NAME]:J}),H=X&&Q[Q.length-1];if(H)Q[Q.length-1]=function(...V){mz(z),H.apply(this,V)};return u8.context.with(u8.trace.setSpan(u8.context.active(),G),()=>{return Ai(()=>{return $.apply(this,Q)},(V)=>{if(V instanceof Error)G.setStatus({code:u8.SpanStatusCode.ERROR,message:V.message}),G.recordException(V);if(!X)mz(z)})})}}_wrapAddHook(){let Z=this;return this._diag.debug("Patching fastify server.addHook function"),function(J){return function(...X){let Y=X[0],Q=X[1],W=this.pluginName;if(!Zf0.has(Y))return J.apply(this,X);let K=typeof X[X.length-1]==="function"&&Q.constructor.name!=="AsyncFunction";return J.apply(this,[Y,Z._wrapHandler(W,Y,Q,K)])}}}_patchConstructor(Z){let J=this;function $(...X){let Y=Z.fastify.apply(this,X);return Y.addHook("onRequest",J._hookOnRequest()),Y.addHook("preHandler",J._hookPreHandler()),Jf0(),J._wrap(Y,"addHook",J._wrapAddHook()),Y}if(Z.errorCodes!==void 0)$.errorCodes=Z.errorCodes;return $.fastify=$,$.default=$,$}_patchSend(){let Z=this;return this._diag.debug("Patching fastify reply.send function"),function($){return function(...Y){let Q=Y[0];if(!Z.isEnabled())return $.apply(this,Y);return eZ.safeExecuteInTheMiddle(()=>{return $.apply(this,Y)},(W)=>{if(!W&&Q instanceof Error)W=Q;mz(this,W)})}}}_hookPreHandler(){let Z=this;return this._diag.debug("Patching fastify preHandler function"),function($,X,Y){if(!Z.isEnabled())return Y();let Q=$,W=Q.routeOptions?.handler||Q.context?.handler,K=W?.name.startsWith("bound ")?W.name.substring(6):W?.name,z=`${k3.REQUEST_HANDLER} - ${K||this.pluginName||Ni}`,G={[H9.PLUGIN_NAME]:this.pluginName,[H9.FASTIFY_TYPE]:y3.REQUEST_HANDLER,[Ri.SEMATTRS_HTTP_ROUTE]:Q.routeOptions?Q.routeOptions.url:$.routerPath};if(K)G[H9.FASTIFY_NAME]=K;let H=$D(X,Z.tracer,z,G);qi(H);let{requestHook:V}=Z.getConfig();if(V)eZ.safeExecuteInTheMiddle(()=>V(H,{request:$}),(F)=>{if(F)Z._diag.error("request hook failed",F)},!0);return u8.context.with(u8.trace.setSpan(u8.context.active(),H),()=>{Y()})}}}function Jf0(){let Z=l();if(Z)Z.on("spanStart",(J)=>{qi(J)})}function qi(Z){let J=$0(Z).data,$=J["fastify.type"];if(J[G0]||!$)return;Z.setAttributes({[X0]:"auto.http.otel.fastify",[G0]:`${$}.fastify`});let X=J["fastify.name"]||J["plugin.name"]||J["hook.name"];if(typeof X==="string"){let Y=X.replace(/^fastify -> /,"").replace(/^@fastify\/otel -> /,"");Z.updateName(Y)}}var dz="Fastify",Ei=s(`${dz}.v3`,()=>new XD);function $f0(){let Z=l();if(!Z)return;else return Z.getIntegrationByName(dz)}function Ci(Z,J,$,X){let Y=$f0()?.getShouldHandleError()||Si;if(X==="diagnostics-channel")this.diagnosticsChannelExists=!0;if(this.diagnosticsChannelExists&&X==="onError-hook"){k1&&T.warn("Fastify error handler was already registered via diagnostics channel.","You can safely remove `setupFastifyErrorHandler` call and set `shouldHandleError` on the integration options.");return}if(Y(Z,J,$))F0(Z,{mechanism:{handled:!1,type:"auto.function.fastify"}})}var Pi=s(`${dz}.v5`,()=>{let Z=new JD,J=Z.plugin();return YD.subscribe("fastify.initialization",($)=>{let X=$.fastify;X?.register(J).after((Y)=>{if(Y)k1&&T.error("Failed to setup Fastify instrumentation",Y);else if(Yf0(),X)Qf0(X)})}),YD.subscribe("tracing:fastify.request.handler:error",($)=>{let{error:X,request:Y,reply:Q}=$;Ci.call(Ci,X,Y,Q,"diagnostics-channel")}),Z}),Xf0=({shouldHandleError:Z})=>{let J;return{name:dz,setupOnce(){J=Z||Si,Ei(),Pi()},getShouldHandleError(){return J},setShouldHandleError($){J=$}}},Ii=k((Z={})=>Xf0(Z));function Si(Z,J,$){let X=$.statusCode;return X>=500||X<=299}function yi(Z){let J=$0(Z),$=J.description,X=J.data,Y=X["fastify.type"],Q=Y==="hook",W=Y===$?.startsWith("handler -"),K=$==="request"||Y==="request-handler";if(X[G0]||!W&&!K&&!Q)return;let z=Q?"hook":W?"middleware":K?"request-handler":"<unknown>";Z.setAttributes({[X0]:"auto.http.otel.fastify",[G0]:`${z}.fastify`});let G=X["fastify.name"]||X["plugin.name"]||X["hook.name"];if(typeof G==="string"){let H=G.replace(/^fastify -> /,"").replace(/^@fastify\/otel -> /,"");Z.updateName(H)}}function Yf0(){let Z=l();if(Z)Z.on("spanStart",(J)=>{yi(J)})}function Qf0(Z){Z.addHook("onRequest",async(J,$)=>{if(J.opentelemetry){let{span:Q}=J.opentelemetry();if(Q)yi(Q)}let X=J.routeOptions?.url,Y=J.method||"GET";y0().setTransactionName(`${Y} ${X}`)})}var Ln=v(g(),1),Dn=v(Un(),1);var On="Graphql",_n=s(On,Dn.GraphQLInstrumentation,(Z)=>{let J=jn(Z);return{...J,responseHook($,X){if(Z1($,"auto.graphql.otel.graphql"),X.errors?.length&&!$0($).status)$.setStatus({code:Ln.SpanStatusCode.ERROR});let Q=$0($).data,W=Q["graphql.operation.type"],K=Q["graphql.operation.name"];if(J.useOperationNameForRootSpan&&W){let z=S1($),H=$0(z).data[f$]||[],V=K?`${W} ${K}`:`${W}`;if(Array.isArray(H))H.push(V),z.setAttribute(f$,H);else if(typeof H==="string")z.setAttribute(f$,[H,V]);else z.setAttribute(f$,V);if(!$0(z).data["original-description"])z.setAttribute("original-description",$0(z).description);z.updateName(`${$0(z).data["original-description"]} (${vf0(H)})`)}}}}),xf0=(Z={})=>{return{name:On,setupOnce(){_n(jn(Z))}}},wn=k(xf0);function jn(Z){return{ignoreResolveSpans:!0,ignoreTrivialResolveSpans:!0,useOperationNameForRootSpan:!0,...Z}}function vf0(Z){if(Array.isArray(Z)){let J=Z.slice().sort();if(J.length<=5)return J.join(", ");else return`${J.slice(0,5).join(", ")}, +${J.length-5}`}return`${Z}`}var cn=v(dn(),1);var ln="Kafka",pn=s(ln,()=>new cn.KafkaJsInstrumentation({consumerHook(Z){Z1(Z,"auto.kafkajs.otel.consumer")},producerHook(Z){Z1(Z,"auto.kafkajs.otel.producer")}})),Jb0=()=>{return{name:ln,setupOnce(){pn()}}},nn=k(Jb0);var Qa=v(Ya(),1);var Wa="LruMemoizer",Ka=s(Wa,()=>new Qa.LruMemoizerInstrumentation),Qb0=()=>{return{name:Wa,setupOnce(){Ka()}}},za=k(Qb0);var Ra=v(Na(),1);var qa="Mongo",Ca=s(qa,()=>new Ra.MongoDBInstrumentation({dbStatementSerializer:Mb0,responseHook(Z){Z1(Z,"auto.db.otel.mongo")}}));function Mb0(Z){let J=OD(Z);return JSON.stringify(J)}function OD(Z){if(Array.isArray(Z))return Z.map((J)=>OD(J));if(Tb0(Z)){let J={};return Object.entries(Z).map(([$,X])=>[$,OD(X)]).reduce(($,X)=>{if(Nb0(X))$[X[0]]=X[1];return $},J)}return"?"}function Tb0(Z){return typeof Z==="object"&&Z!==null&&!Ab0(Z)}function Ab0(Z){let J=!1;if(typeof Buffer<"u")J=Buffer.isBuffer(Z);return J}function Nb0(Z){return Array.isArray(Z)}var Rb0=()=>{return{name:qa,setupOnce(){Ca()}}},Ea=k(Rb0);var aa=v(na(),1);var oa="Mongoose",ra=s(oa,()=>new aa.MongooseInstrumentation({responseHook(Z){Z1(Z,"auto.db.otel.mongoose")}})),ib0=()=>{return{name:oa,setupOnce(){ra()}}},sa=k(ib0);var Uo=v(Bo(),1);var Lo="Mysql",Do=s(Lo,()=>new Uo.MySQLInstrumentation({})),Og0=()=>{return{name:Lo,setupOnce(){Do()}}},Oo=k(Og0);var ho=v(vo(),1);var fo="Mysql2",bo=s(fo,()=>new ho.MySQL2Instrumentation({responseHook(Z){Z1(Z,"auto.db.otel.mysql2")}})),pg0=()=>{return{name:fo,setupOnce(){bo()}}},go=k(pg0);var gr=v(Qr(),1),mr=v(xr(),1);var Cm0=["get","set","setex"],gD=["get","mget"],Em0=["set","setex"];function l3(Z,J){return Z.includes(J.toLowerCase())}function mD(Z){if(l3(gD,Z))return"cache.get";else if(l3(Em0,Z))return"cache.put";else return}function Pm0(Z,J){return J.some(($)=>Z.startsWith($))}function hr(Z,J){try{if(J.length===0)return;let $=(Y)=>{if(typeof Y==="string"||typeof Y==="number"||Buffer.isBuffer(Y))return[Y.toString()];else if(Array.isArray(Y))return vr(Y.map((Q)=>$(Q)));else return["<unknown>"]},X=J[0];if(l3(Cm0,Z)&&X!=null)return $(X);return vr(J.map((Y)=>$(Y)))}catch{return}}function fr(Z,J,$){if(!mD(Z))return!1;for(let X of J)if(Pm0(X,$))return!0;return!1}function br(Z){let J=($)=>{try{if(Buffer.isBuffer($))return $.byteLength;else if(typeof $==="string")return $.length;else if(typeof $==="number")return $.toString().length;else if($===null||$===void 0)return 0;return JSON.stringify($).length}catch{return}};return Array.isArray(Z)?Z.reduce(($,X)=>{let Y=J(X);return typeof Y==="number"?$!==void 0?$+Y:Y:$},0):J(Z)}function vr(Z){let J=[],$=(X)=>{X.forEach((Y)=>{if(Array.isArray(Y))$(Y);else J.push(Y)})};return $(Z),J}var XG="Redis",p3={},ur=(Z,J,$,X)=>{Z.setAttribute(X0,"auto.db.otel.redis");let Y=hr(J,$),Q=mD(J);if(!Y||!Q||!p3.cachePrefixes||!fr(J,Y,p3.cachePrefixes))return;let W=$0(Z).data["net.peer.name"],K=$0(Z).data["net.peer.port"];if(K&&W)Z.setAttributes({"network.peer.address":W,"network.peer.port":K});let z=br(X);if(z)Z.setAttribute(IU,z);if(l3(gD,J)&&z!==void 0)Z.setAttribute(EU,z>0);Z.setAttributes({[G0]:Q,[PU]:Y});let G=Y.join(", ");Z.updateName(p3.maxCacheKeyLength?Z7(G,p3.maxCacheKeyLength):G)},Im0=s(`${XG}.IORedis`,()=>{return new gr.IORedisInstrumentation({responseHook:ur})}),Sm0=s(`${XG}.Redis`,()=>{return new mr.RedisInstrumentation({responseHook:ur})}),dr=Object.assign(()=>{Im0(),Sm0()},{id:XG}),ym0=(Z={})=>{return{name:XG,setupOnce(){p3=Z,dr()}}},cr=k(ym0);var ws=v(_s(),1);var js="Postgres",Ms=s(js,()=>new ws.PgInstrumentation({requireParentSpan:!0,requestHook(Z){Z1(Z,"auto.db.otel.postgres")}})),Nu0=()=>{return{name:js,setupOnce(){Ms()}}},Ts=k(Nu0);var YX=v(g(),1),U9=v(V0(),1),c1=v(e0(),1);var HG="PostgresJs",As=[">=3.0.0 <4"],Ru0=/^(SELECT|INSERT|UPDATE|DELETE|CREATE|DROP|ALTER)/i,GG=Symbol("sentryPostgresConnectionContext"),nD=Symbol.for("sentry.instrumented.postgresjs"),Ns=Symbol.for("sentry.query.from.instrumented.sql"),Rs=s(HG,(Z)=>new qs({requireParentSpan:Z?.requireParentSpan??!0,requestHook:Z?.requestHook}));class qs extends U9.InstrumentationBase{constructor(Z){super("sentry-postgres-js",I0,Z)}init(){let Z=new U9.InstrumentationNodeModuleDefinition("postgres",As,(J)=>{try{return this._patchPostgres(J)}catch($){return k1&&T.error("Failed to patch postgres module:",$),J}},(J)=>J);return["src","cf/src","cjs/src"].forEach((J)=>{Z.files.push(new U9.InstrumentationNodeModuleFile(`postgres/${J}/query.js`,As,this._patchQueryPrototype.bind(this),this._unpatchQueryPrototype.bind(this)))}),Z}_patchPostgres(Z){let J=typeof Z==="function",$=J?Z:Z.default;if(typeof $!=="function")return k1&&T.warn("postgres module does not export a function. Skipping instrumentation."),Z;let X=this,Y=function(...Q){let W=Reflect.construct($,Q);if(!W||typeof W!=="function")return k1&&T.warn("postgres() did not return a valid instance"),W;return X._instrumentSqlInstance(W)};Object.setPrototypeOf(Y,$),Object.setPrototypeOf(Y.prototype,$.prototype);for(let Q of Object.getOwnPropertyNames($))if(!["length","name","prototype"].includes(Q)){let W=Object.getOwnPropertyDescriptor($,Q);if(W)Object.defineProperty(Y,Q,W)}if(J)return Y;else return $3(Z,"default",Y),Z}_wrapQueryMethod(Z,J,$){let X=this;return function(...Y){let Q=Reflect.apply(Z,J,Y);if(Q&&typeof Q==="object"&&"handle"in Q)X._wrapSingleQueryHandle(Q,$);return Q}}_wrapCallbackMethod(Z,J,$){let X=this;return function(...Y){let Q=$[GG];if(typeof Y[Y.length-1]!=="function"){let H=Reflect.apply(Z,J,Y);if(H&&typeof H.then==="function")return H.then((V)=>{return X._instrumentSqlInstance(V,Q)});return H}let K=Y.length===1?Y[0]:Y[1],z=function(H){let V=X._instrumentSqlInstance(H,Q);return K(V)},G=Y.length===1?[z]:[Y[0],z];return Reflect.apply(Z,J,G)}}_setConnectionAttributes(Z,J){if(!J)return;if(J.ATTR_DB_NAMESPACE)Z.setAttribute(c1.ATTR_DB_NAMESPACE,J.ATTR_DB_NAMESPACE);if(J.ATTR_SERVER_ADDRESS)Z.setAttribute(c1.ATTR_SERVER_ADDRESS,J.ATTR_SERVER_ADDRESS);if(J.ATTR_SERVER_PORT!==void 0){let $=parseInt(J.ATTR_SERVER_PORT,10);if(!isNaN($))Z.setAttribute(c1.ATTR_SERVER_PORT,$)}}_setOperationName(Z,J,$){if($){Z.setAttribute(c1.ATTR_DB_OPERATION_NAME,$);return}let X=J?.match(Ru0);if(X?.[1])Z.setAttribute(c1.ATTR_DB_OPERATION_NAME,X[1].toUpperCase())}_attachConnectionContext(Z,J){let $=Z;if(!$.options||typeof $.options!=="object")return;let X=$.options,Y=X.host?.[0]||"localhost",Q=X.port?.[0]||5432,W={ATTR_DB_NAMESPACE:typeof X.database==="string"&&X.database!==""?X.database:void 0,ATTR_SERVER_ADDRESS:Y,ATTR_SERVER_PORT:String(Q)};J[GG]=W}_instrumentSqlInstance(Z,J){if(Z[nD])return Z;let $=this,X=new Proxy(Z,{apply(Y,Q,W){let K=Reflect.apply(Y,Q,W);if(K&&typeof K==="object"&&"handle"in K)$._wrapSingleQueryHandle(K,X);return K},get(Y,Q){let W=Y[Q];if(typeof Q!=="string"||typeof W!=="function")return W;if(Q==="unsafe"||Q==="file")return $._wrapQueryMethod(W,Y,X);if(Q==="begin"||Q==="reserve")return $._wrapCallbackMethod(W,Y,X);return W}});if(J)X[GG]=J;else this._attachConnectionContext(Z,X);return Z[nD]=!0,X[nD]=!0,X}_wrapSingleQueryHandle(Z,J){if(Z.handle?.__sentryWrapped)return;Z[Ns]=!0;let $=Z.handle,X=this,Y=async function(...Q){if(!X._shouldCreateSpans())return $.apply(this,Q);let W=X._reconstructQuery(Z.strings),K=X._sanitizeSqlQuery(W);return O4({name:K||"postgresjs.query",op:"db"},(z)=>{Z1(z,"auto.db.postgresjs"),z.setAttributes({[c1.ATTR_DB_SYSTEM_NAME]:"postgres",[c1.ATTR_DB_QUERY_TEXT]:K});let G=J?J[GG]:void 0;X._setConnectionAttributes(z,G);let H=X.getConfig(),{requestHook:V}=H;if(V)U9.safeExecuteInTheMiddle(()=>V(z,K,G),(B)=>{if(B)z.setAttribute("sentry.hook.error","requestHook failed"),k1&&T.error(`Error in requestHook for ${HG} integration:`,B)},!0);let F=this;F.resolve=new Proxy(F.resolve,{apply:(B,U,L)=>{try{X._setOperationName(z,K,L?.[0]?.command),z.end()}catch(O){k1&&T.error("Error ending span in resolve callback:",O)}return Reflect.apply(B,U,L)}}),F.reject=new Proxy(F.reject,{apply:(B,U,L)=>{try{z.setStatus({code:A0,message:L?.[0]?.message||"unknown_error"}),z.setAttribute(c1.ATTR_DB_RESPONSE_STATUS_CODE,L?.[0]?.code||"unknown"),z.setAttribute(c1.ATTR_ERROR_TYPE,L?.[0]?.name||"unknown"),X._setOperationName(z,K),z.end()}catch(O){k1&&T.error("Error ending span in reject callback:",O)}return Reflect.apply(B,U,L)}});try{return $.apply(this,Q)}catch(B){throw z.setStatus({code:A0,message:B instanceof Error?B.message:"unknown_error"}),z.end(),B}})};Y.__sentryWrapped=!0,Z.handle=Y}_shouldCreateSpans(){let Z=this.getConfig();return YX.trace.getSpan(YX.context.active())!==void 0||!Z.requireParentSpan}_reconstructQuery(Z){if(!Z?.length)return;if(Z.length===1)return Z[0]||void 0;return Z.reduce((J,$,X)=>X===0?$:`${J}$${X}${$}`,"")}_sanitizeSqlQuery(Z){if(!Z)return"Unknown SQL Query";return Z.replace(/--.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/;\s*$/,"").replace(/\s+/g," ").trim().replace(/\bX'[0-9A-Fa-f]*'/gi,"?").replace(/\bB'[01]*'/gi,"?").replace(/'(?:[^']|'')*'/g,"?").replace(/\b0x[0-9A-Fa-f]+/gi,"?").replace(/\b(?:TRUE|FALSE)\b/gi,"?").replace(/-?\b\d+\.?\d*[eE][+-]?\d+\b/g,"?").replace(/-?\b\d+\.\d+\b/g,"?").replace(/-?\.\d+\b/g,"?").replace(/(?<!\$)-?\b\d+\b/g,"?").replace(/\bIN\b\s*\(\s*\?(?:\s*,\s*\?)*\s*\)/gi,"IN (?)").replace(/\bIN\b\s*\(\s*\$\d+(?:\s*,\s*\$\d+)*\s*\)/gi,"IN ($?)")}_patchQueryPrototype(Z){let J=this,$=Z.Query.prototype.handle;return Z.Query.prototype.handle=async function(...X){if(this[Ns])return $.apply(this,X);if(!J._shouldCreateSpans())return $.apply(this,X);let Y=J._reconstructQuery(this.strings),Q=J._sanitizeSqlQuery(Y);return O4({name:Q||"postgresjs.query",op:"db"},(W)=>{Z1(W,"auto.db.postgresjs"),W.setAttributes({[c1.ATTR_DB_SYSTEM_NAME]:"postgres",[c1.ATTR_DB_QUERY_TEXT]:Q});let K=J.getConfig(),{requestHook:z}=K;if(z)U9.safeExecuteInTheMiddle(()=>z(W,Q,void 0),(V)=>{if(V)W.setAttribute("sentry.hook.error","requestHook failed"),k1&&T.error(`Error in requestHook for ${HG} integration:`,V)},!0);let G=this.resolve;this.resolve=new Proxy(G,{apply:(V,F,B)=>{try{J._setOperationName(W,Q,B?.[0]?.command),W.end()}catch(U){k1&&T.error("Error ending span in resolve callback:",U)}return Reflect.apply(V,F,B)}});let H=this.reject;this.reject=new Proxy(H,{apply:(V,F,B)=>{try{W.setStatus({code:A0,message:B?.[0]?.message||"unknown_error"}),W.setAttribute(c1.ATTR_DB_RESPONSE_STATUS_CODE,B?.[0]?.code||"unknown"),W.setAttribute(c1.ATTR_ERROR_TYPE,B?.[0]?.name||"unknown"),J._setOperationName(W,Q),W.end()}catch(U){k1&&T.error("Error ending span in reject callback:",U)}return Reflect.apply(V,F,B)}});try{return $.apply(this,X)}catch(V){throw W.setStatus({code:A0,message:V instanceof Error?V.message:"unknown_error"}),W.end(),V}})},Z.Query.prototype.handle.__sentry_original__=$,Z}_unpatchQueryPrototype(Z){if(Z.Query.prototype.handle.__sentry_original__)Z.Query.prototype.handle=Z.Query.prototype.handle.__sentry_original__;return Z}}var qu0=(Z)=>{return{name:HG,setupOnce(){Rs(Z)}}},Cs=k(qu0);var Y8=v(g(),1);var Is=v(g(),1),VG=v(V0(),1),v7=v(g(),1);var Cu0=process.env.PRISMA_SHOW_ALL_TRACES==="true",Eu0="00-10-10-00";function Pu0(Z){switch(Z){case"client":return v7.SpanKind.CLIENT;case"internal":default:return v7.SpanKind.INTERNAL}}var Iu0=class{tracerProvider;ignoreSpanTypes;constructor({tracerProvider:Z,ignoreSpanTypes:J}){this.tracerProvider=Z,this.ignoreSpanTypes=J}isEnabled(){return!0}getTraceParent(Z){let J=v7.trace.getSpanContext(Z??v7.context.active());if(J)return`00-${J.traceId}-${J.spanId}-0${J.traceFlags}`;return Eu0}dispatchEngineSpans(Z){let J=this.tracerProvider.getTracer("prisma"),$=new Map,X=Z.filter((Y)=>Y.parentId===null);for(let Y of X)Ss(J,Y,Z,$,this.ignoreSpanTypes)}getActiveContext(){return v7.context.active()}runInChildSpan(Z,J){if(typeof Z==="string")Z={name:Z};if(Z.internal&&!Cu0)return J();let $=this.tracerProvider.getTracer("prisma"),X=Z.context??this.getActiveContext(),Y=`prisma:client:${Z.name}`;if(ys(Y,this.ignoreSpanTypes))return J();if(Z.active===!1){let Q=$.startSpan(Y,Z,X);return Es(Q,J(Q,X))}return $.startActiveSpan(Y,Z,(Q)=>Es(Q,J(Q,X)))}};function Ss(Z,J,$,X,Y){if(ys(J.name,Y))return;let Q={attributes:J.attributes,kind:Pu0(J.kind),startTime:J.startTime};Z.startActiveSpan(J.name,Q,(W)=>{if(X.set(J.id,W.spanContext().spanId),J.links)W.addLinks(J.links.flatMap((z)=>{let G=X.get(z);if(!G)return[];return{context:{spanId:G,traceId:W.spanContext().traceId,traceFlags:W.spanContext().traceFlags}}}));let K=$.filter((z)=>z.parentId===J.id);for(let z of K)Ss(Z,z,$,X,Y);W.end(J.endTime)})}function Es(Z,J){if(Su0(J))return J.then(($)=>{return Z.end(),$},($)=>{throw Z.end(),$});return Z.end(),J}function Su0(Z){return Z!=null&&typeof Z.then==="function"}function ys(Z,J){return J.some(($)=>typeof $==="string"?$===Z:$.test(Z))}var ks={name:"@prisma/instrumentation",version:"6.19.0",description:"OpenTelemetry compliant instrumentation for Prisma Client",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{require:{types:"./dist/index.d.ts",default:"./dist/index.js"},import:{types:"./dist/index.d.ts",default:"./dist/index.mjs"}}},license:"Apache-2.0",homepage:"https://www.prisma.io",repository:{type:"git",url:"https://github.com/prisma/prisma.git",directory:"packages/instrumentation"},bugs:"https://github.com/prisma/prisma/issues",devDependencies:{"@prisma/internals":"workspace:*","@types/node":"18.19.76","@opentelemetry/api":"1.9.0",typescript:"5.4.5"},dependencies:{"@opentelemetry/instrumentation":">=0.52.0 <1"},peerDependencies:{"@opentelemetry/api":"^1.8"},files:["dist"],keywords:["prisma","instrumentation","opentelemetry","otel"],scripts:{dev:"DEV=true tsx helpers/build.ts",build:"tsx helpers/build.ts",prepublishOnly:"pnpm run build",test:"vitest run"},sideEffects:!1},oD=ks.version,yu0=oD.split(".")[0],Ps="PRISMA_INSTRUMENTATION",aD=`V${yu0}_PRISMA_INSTRUMENTATION`,ku0=ks.name,xu0="@prisma/client",xs=class extends VG.InstrumentationBase{tracerProvider;constructor(Z={}){super(ku0,oD,Z)}setTracerProvider(Z){this.tracerProvider=Z}init(){return[new VG.InstrumentationNodeModuleDefinition(xu0,[oD])]}enable(){let Z=this._config,J={helper:new Iu0({tracerProvider:this.tracerProvider??Is.trace.getTracerProvider(),ignoreSpanTypes:Z.ignoreSpanTypes??[]})};global[Ps]=J,global[aD]=J}disable(){delete global[Ps],delete global[aD]}isEnabled(){return Boolean(global[aD])}};var vs="Prisma";function vu0(Z){return!!Z&&typeof Z==="object"&&"dispatchEngineSpans"in Z}function hs(){let Z=globalThis.PRISMA_INSTRUMENTATION;return Z&&typeof Z==="object"&&"helper"in Z?Z.helper:void 0}class fs extends xs{constructor(){super()}enable(){super.enable();let Z=hs();if(vu0(Z))Z.createEngineSpan=(J)=>{let $=Y8.trace.getTracer("prismaV5Compatibility"),X=$._idGenerator;if(!X){m1(()=>{console.warn("[Sentry] Could not find _idGenerator on tracer, skipping Prisma v5 compatibility - some Prisma spans may be missing!")});return}try{J.spans.forEach((Y)=>{let Q=hu0(Y.kind),W=Y.parent_span_id,K=Y.span_id,z=Y.trace_id,G=Y.links?.map((V)=>{return{context:{traceId:V.trace_id,spanId:V.span_id,traceFlags:Y8.TraceFlags.SAMPLED}}}),H=Y8.trace.setSpanContext(Y8.context.active(),{traceId:z,spanId:W,traceFlags:Y8.TraceFlags.SAMPLED});Y8.context.with(H,()=>{let V={generateTraceId:()=>{return z},generateSpanId:()=>{return K}};$._idGenerator=V,$.startSpan(Y.name,{kind:Q,links:G,startTime:Y.start_time,attributes:Y.attributes}).end(Y.end_time),$._idGenerator=X})})}finally{$._idGenerator=X}}}}function hu0(Z){switch(Z){case"client":return Y8.SpanKind.CLIENT;case"internal":default:return Y8.SpanKind.INTERNAL}}var fu0=s(vs,(Z)=>{return new fs}),bs=k((Z)=>{return{name:vs,setupOnce(){fu0()},setup(J){if(!hs())return;J.on("spanStart",($)=>{let X=$0($);if(X.description?.startsWith("prisma:"))$.setAttribute(X0,"auto.db.otel.prisma");if(X.description==="prisma:engine:db_query"&&X.data["db.query.text"])$.updateName(X.data["db.query.text"]);if(X.description==="prisma:engine:db_query"&&!X.data["db.system"])$.setAttribute("db.system","prisma")})}}});var Wt=v(Qt(),1);var Kt="Hapi",zt=s(Kt,()=>new Wt.HapiInstrumentation),Kd0=()=>{return{name:Kt,setupOnce(){zt()}}},Gt=k(Kd0);var UG=v(e0(),1);var f7={HONO_TYPE:"hono.type",HONO_NAME:"hono.name"},r3={MIDDLEWARE:"middleware",REQUEST_HANDLER:"request_handler"};var $J=v(g(),1),BG=v(V0(),1);var zd0="@sentry/instrumentation-hono",Gd0="0.0.1";class ZO extends BG.InstrumentationBase{constructor(Z={}){super(zd0,Gd0,Z)}init(){return[new BG.InstrumentationNodeModuleDefinition("hono",[">=4.0.0 <5"],(Z)=>this._patch(Z))]}_patch(Z){let J=this;class $ extends Z.Hono{constructor(...X){super(...X);J._wrap(this,"get",J._patchHandler()),J._wrap(this,"post",J._patchHandler()),J._wrap(this,"put",J._patchHandler()),J._wrap(this,"delete",J._patchHandler()),J._wrap(this,"options",J._patchHandler()),J._wrap(this,"patch",J._patchHandler()),J._wrap(this,"all",J._patchHandler()),J._wrap(this,"on",J._patchOnHandler()),J._wrap(this,"use",J._patchMiddlewareHandler())}}try{Z.Hono=$}catch{return{...Z,Hono:$}}return Z}_patchHandler(){let Z=this;return function(J){return function(...X){if(typeof X[0]==="string"){let Y=X[0];if(X.length===1)return J.apply(this,[Y]);let Q=X.slice(1);return J.apply(this,[Y,...Q.map((W)=>Z._wrapHandler(W))])}return J.apply(this,X.map((Y)=>Z._wrapHandler(Y)))}}}_patchOnHandler(){let Z=this;return function(J){return function(...X){let Y=X.slice(2);return J.apply(this,[...X.slice(0,2),...Y.map((Q)=>Z._wrapHandler(Q))])}}}_patchMiddlewareHandler(){let Z=this;return function(J){return function(...X){if(typeof X[0]==="string"){let Y=X[0];if(X.length===1)return J.apply(this,[Y]);let Q=X.slice(1);return J.apply(this,[Y,...Q.map((W)=>Z._wrapHandler(W))])}return J.apply(this,X.map((Y)=>Z._wrapHandler(Y)))}}}_wrapHandler(Z){let J=this;return function($,X){if(!J.isEnabled())return Z.apply(this,[$,X]);let Y=$.req.path,Q=J.tracer.startSpan(Y);return $J.context.with($J.trace.setSpan($J.context.active(),Q),()=>{return J._safeExecute(()=>{let W=Z.apply(this,[$,X]);if(u4(W))return W.then((K)=>{let z=J._determineHandlerType(K);return Q.setAttributes({[f7.HONO_TYPE]:z,[f7.HONO_NAME]:z===r3.REQUEST_HANDLER?Y:Z.name||"anonymous"}),J.getConfig().responseHook?.(Q),K});else{let K=J._determineHandlerType(W);return Q.setAttributes({[f7.HONO_TYPE]:K,[f7.HONO_NAME]:K===r3.REQUEST_HANDLER?Y:Z.name||"anonymous"}),J.getConfig().responseHook?.(Q),W}},()=>Q.end(),(W)=>{J._handleError(Q,W),Q.end()})})}}_safeExecute(Z,J,$){try{let X=Z();if(u4(X))X.then(()=>J(),(Y)=>$(Y));else J();return X}catch(X){throw $(X),X}}_determineHandlerType(Z){return Z===void 0?r3.MIDDLEWARE:r3.REQUEST_HANDLER}_handleError(Z,J){if(J instanceof Error)Z.setStatus({code:$J.SpanStatusCode.ERROR,message:J.message}),Z.recordException(J)}}var Ht="Hono";function Hd0(Z){let J=$0(Z).data,$=J[f7.HONO_TYPE];if(J[G0]||!$)return;Z.setAttributes({[X0]:"auto.http.otel.hono",[G0]:`${$}.hono`});let X=J[f7.HONO_NAME];if(typeof X==="string")Z.updateName(X);if(y0()===T6()){k1&&T.warn("Isolation scope is default isolation scope - skipping setting transactionName");return}let Y=J[UG.ATTR_HTTP_ROUTE],Q=J[UG.ATTR_HTTP_REQUEST_METHOD];if(typeof Y==="string"&&typeof Q==="string")y0().setTransactionName(`${Q} ${Y}`)}var Vt=s(Ht,()=>new ZO({responseHook:(Z)=>{Hd0(Z)}})),Vd0=()=>{return{name:Ht,setupOnce(){Vt()}}},Ft=k(Vd0);var vt=v(xt(),1),ht=v(e0(),1);var ft="Koa",bt=s(ft,vt.KoaInstrumentation,(Z={})=>{return{ignoreLayersType:Z.ignoreLayersType,requestHook(J,$){Z1(J,"auto.http.otel.koa");let X=$0(J).data,Y=X["koa.type"];if(Y)J.setAttribute(G0,`${Y}.koa`);let Q=X["koa.name"];if(typeof Q==="string")J.updateName(Q||"< unknown >");if(y0()===T6()){k1&&T.warn("Isolation scope is default isolation scope - skipping setting transactionName");return}let W=X[ht.ATTR_HTTP_ROUTE],K=$.context?.request?.method?.toUpperCase()||"GET";if(W)y0().setTransactionName(`${K} ${W}`)}}}),Ad0=(Z={})=>{return{name:ft,setupOnce(){bt(Z)}}},gt=k(Ad0);var We=v(Qe(),1);var Ke="Connect",ze=s(Ke,()=>new We.ConnectInstrumentation),fd0=()=>{return{name:Ke,setupOnce(){ze()}}},Ge=k(fd0);var Ce=v(qe(),1);var td0=new Set(["callProcedure","execSql","execSqlBatch","execBulkLoad","prepare","execute"]),Ee="Tedious",Pe=s(Ee,()=>new Ce.TediousInstrumentation({})),ed0=()=>{let Z;return{name:Ee,setupOnce(){let J=Pe();Z=M3(J)},setup(J){Z?.(()=>J.on("spanStart",($)=>{let{description:X,data:Y}=$0($);if(!X||Y["db.system"]!=="mssql")return;let Q=X.split(" ")[0]||"";if(td0.has(Q))$.setAttribute(X0,"auto.db.otel.tedious")}))}}},Ie=k(ed0);var me=v(ge(),1);var ue="GenericPool",de=s(ue,()=>new me.GenericPoolInstrumentation({})),Xc0=()=>{let Z;return{name:ue,setupOnce(){let J=de();Z=M3(J)},setup(J){Z?.(()=>J.on("spanStart",($)=>{let Y=$0($).description;if(Y==="generic-pool.aquire"||Y==="generic-pool.acquire")$.setAttribute(X0,"auto.db.otel.generic_pool")}))}}},ce=k(Xc0);var B00=v(F00(),1);var U00="Amqplib",fc0={consumeEndHook:(Z)=>{Z1(Z,"auto.amqplib.otel.consumer")},publishHook:(Z)=>{Z1(Z,"auto.amqplib.otel.publisher")}},L00=s(U00,()=>new B00.AmqplibInstrumentation(fc0)),bc0=()=>{return{name:U00,setupOnce(){L00()}}},D00=k(bc0);var JQ="VercelAI";var AG=v(V0(),1);var gc0=[">=3.0.0 <7"],O00=["generateText","streamText","generateObject","streamObject","embed","embedMany"];function mc0(Z){if(typeof Z!=="object"||Z===null)return!1;let J=Z;return"type"in J&&"error"in J&&"toolName"in J&&"toolCallId"in J&&J.type==="tool-error"&&J.error instanceof Error}function uc0(Z){if(typeof Z!=="object"||Z===null||!("content"in Z))return;let J=Z;if(!Array.isArray(J.content))return;for(let $ of J.content)if(mc0($)){let X=AL($.toolCallId);if(X){let Y=X.spanContext();W6((Q)=>{Q.setContext("trace",{trace_id:Y.traceId,span_id:Y.spanId}),Q.setTag("vercel.ai.tool.name",$.toolName),Q.setTag("vercel.ai.tool.callId",$.toolCallId),Q.setLevel("error"),F0($.error,{mechanism:{type:"auto.vercelai.otel",handled:!1}})}),NL($.toolCallId)}else W6((Y)=>{Y.setTag("vercel.ai.tool.name",$.toolName),Y.setTag("vercel.ai.tool.callId",$.toolCallId),Y.setLevel("error"),F0($.error,{mechanism:{type:"auto.vercelai.otel",handled:!1}})})}}function dc0(Z,J,$,X){let Y=Z?.recordInputs!==void 0?Z.recordInputs:J.recordInputs!==void 0?J.recordInputs:$===!0?!0:X,Q=Z?.recordOutputs!==void 0?Z.recordOutputs:J.recordOutputs!==void 0?J.recordOutputs:$===!0?!0:X;return{recordInputs:Y,recordOutputs:Q}}class $Q extends AG.InstrumentationBase{__init(){this._isPatched=!1}__init2(){this._callbacks=[]}constructor(Z={}){super("@sentry/instrumentation-vercel-ai",I0,Z);$Q.prototype.__init.call(this),$Q.prototype.__init2.call(this)}init(){return new AG.InstrumentationNodeModuleDefinition("ai",gc0,this._patch.bind(this))}callWhenPatched(Z){if(this._isPatched)Z();else this._callbacks.push(Z)}_patch(Z){this._isPatched=!0,this._callbacks.forEach(($)=>$()),this._callbacks=[];let J=($)=>{return new Proxy($,{apply:(X,Y,Q)=>{let W=Q[0].experimental_telemetry||{},K=W.isEnabled,z=l(),G=z?.getIntegrationByName(JQ),H=G?.options,V=G?Boolean(z?.getOptions().sendDefaultPii):!1,{recordInputs:F,recordOutputs:B}=dc0(H,W,K,V);return Q[0].experimental_telemetry={...W,isEnabled:K!==void 0?K:!0,recordInputs:F,recordOutputs:B},A6(()=>Reflect.apply(X,Y,Q),(U)=>{if(U&&typeof U==="object")p1(U,"_sentry_active_span",z5())},()=>{},(U)=>{uc0(U)})}})};if(Object.prototype.toString.call(Z)==="[object Module]"){for(let $ of O00)Z[$]=J(Z[$]);return Z}else{let $=O00.reduce((X,Y)=>{return X[Y]=J(Z[Y]),X},{});return{...Z,...$}}}}var _00=s(JQ,()=>new $Q({}));function cc0(Z){return!!Z.getIntegrationByName("Modules")?.getModules?.()?.ai}var lc0=(Z={})=>{let J;return{name:JQ,options:Z,setupOnce(){J=_00()},afterAllSetup($){if(Z.force??cc0($))pK($);else J?.callWhenPatched(()=>pK($))}}},w00=k(lc0);var NG=v(V0(),1);var pc0=[">=4.0.0 <7"];class wO extends NG.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-openai",I0,Z)}init(){return new NG.InstrumentationNodeModuleDefinition("openai",pc0,this._patch.bind(this))}_patch(Z){let J=Z;return J=this._patchClient(J,"OpenAI"),J=this._patchClient(J,"AzureOpenAI"),J}_patchClient(Z,J){let $=Z[J];if(!$)return Z;let X=this.getConfig(),Y=function(...Q){if(mZ(M7))return Reflect.construct($,Q);let W=Reflect.construct($,Q),K=l(),z=Boolean(K?.getOptions().sendDefaultPii),G=X.recordInputs??z,H=X.recordOutputs??z;return aK(W,{recordInputs:G,recordOutputs:H})};Object.setPrototypeOf(Y,$),Object.setPrototypeOf(Y.prototype,$.prototype);for(let Q of Object.getOwnPropertyNames($))if(!["length","name","prototype"].includes(Q)){let W=Object.getOwnPropertyDescriptor($,Q);if(W)Object.defineProperty(Y,Q,W)}try{Z[J]=Y}catch(Q){Object.defineProperty(Z,J,{value:Y,writable:!0,configurable:!0,enumerable:!0})}if(Z.default===$)try{Z.default=Y}catch(Q){Object.defineProperty(Z,"default",{value:Y,writable:!0,configurable:!0,enumerable:!0})}return Z}}var j00=s(M7,(Z)=>new wO(Z)),ic0=(Z={})=>{return{name:M7,setupOnce(){j00(Z)}}},M00=k(ic0);var RG=v(V0(),1);var nc0=[">=0.19.2 <1.0.0"];class jO extends RG.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-anthropic-ai",I0,Z)}init(){return new RG.InstrumentationNodeModuleDefinition("@anthropic-ai/sdk",nc0,this._patch.bind(this))}_patch(Z){let J=Z.Anthropic,$=this.getConfig(),X=function(...Y){if(mZ(T7))return Reflect.construct(J,Y);let Q=Reflect.construct(J,Y),W=l(),K=Boolean(W?.getOptions().sendDefaultPii),z=$.recordInputs??K,G=$.recordOutputs??K;return CL(Q,{recordInputs:z,recordOutputs:G})};Object.setPrototypeOf(X,J),Object.setPrototypeOf(X.prototype,J.prototype);for(let Y of Object.getOwnPropertyNames(J))if(!["length","name","prototype"].includes(Y)){let Q=Object.getOwnPropertyDescriptor(J,Y);if(Q)Object.defineProperty(X,Y,Q)}try{Z.Anthropic=X}catch(Y){Object.defineProperty(Z,"Anthropic",{value:X,writable:!0,configurable:!0,enumerable:!0})}if(Z.default===J)try{Z.default=X}catch(Y){Object.defineProperty(Z,"default",{value:X,writable:!0,configurable:!0,enumerable:!0})}return Z}}var T00=s(T7,(Z)=>new jO(Z)),ac0=(Z={})=>{return{name:T7,options:Z,setupOnce(){T00(Z)}}},A00=k(ac0);var GX=v(V0(),1);var N00=[">=0.10.0 <2"];class MO extends GX.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-google-genai",I0,Z)}init(){return new GX.InstrumentationNodeModuleDefinition("@google/genai",N00,(J)=>this._patch(J),(J)=>J,[new GX.InstrumentationNodeModuleFile("@google/genai/dist/node/index.cjs",N00,(J)=>this._patch(J),(J)=>J)])}_patch(Z){let J=Z.GoogleGenAI,$=this.getConfig();if(typeof J!=="function")return Z;let X=function(...Y){if(mZ(A7))return Reflect.construct(J,Y);let Q=Reflect.construct(J,Y),W=l(),K=Boolean(W?.getOptions().sendDefaultPii),z=$,G=z?.recordInputs??K,H=z?.recordOutputs??K;return SL(Q,{recordInputs:G,recordOutputs:H})};Object.setPrototypeOf(X,J),Object.setPrototypeOf(X.prototype,J.prototype);for(let Y of Object.getOwnPropertyNames(J))if(!["length","name","prototype"].includes(Y)){let Q=Object.getOwnPropertyDescriptor(J,Y);if(Q)Object.defineProperty(X,Y,Q)}return $3(Z,"GoogleGenAI",X),Z}}var R00=s(A7,(Z)=>new MO(Z)),oc0=(Z={})=>{return{name:A7,setupOnce(){R00(Z)}}},q00=k(oc0);var m7=v(V0(),1);var qG=[">=0.1.0 <2.0.0"];function rc0(Z,J){if(!Z)return[J];if(Array.isArray(Z)){if(Z.includes(J))return Z;return[...Z,J]}if(typeof Z==="object")return[Z,J];return Z}function sc0(Z,J,$){return new Proxy(Z,{apply(X,Y,Q){let K=Q[1];if(!K||typeof K!=="object"||Array.isArray(K))K={},Q[1]=K;let z=K.callbacks,G=rc0(z,J);return K.callbacks=G,Reflect.apply(X,Y,Q)}})}class TO extends m7.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-langchain",I0,Z)}init(){let Z=[],J=["@langchain/anthropic","@langchain/openai","@langchain/google-genai","@langchain/mistralai","@langchain/google-vertexai","@langchain/groq"];for(let $ of J)Z.push(new m7.InstrumentationNodeModuleDefinition($,qG,this._patch.bind(this),(X)=>X,[new m7.InstrumentationNodeModuleFile(`${$}/dist/index.cjs`,qG,this._patch.bind(this),(X)=>X)]));return Z.push(new m7.InstrumentationNodeModuleDefinition("langchain",qG,this._patch.bind(this),($)=>$,[new m7.InstrumentationNodeModuleFile("langchain/dist/chat_models/universal.cjs",qG,this._patch.bind(this),($)=>$)])),Z}_patch(Z){XL([M7,T7,A7]);let J=l(),$=Boolean(J?.getOptions().sendDefaultPii),X=this.getConfig(),Y=X?.recordInputs??$,Q=X?.recordOutputs??$,W=rK({recordInputs:Y,recordOutputs:Q});return this._patchRunnableMethods(Z,W),Z}_patchRunnableMethods(Z,J){let $=["ChatAnthropic","ChatOpenAI","ChatGoogleGenerativeAI","ChatMistralAI","ChatVertexAI","ChatGroq","ConfigurableModel"],X=Z.universal_exports??Z,Y=Object.values(X).find((K)=>{return typeof K==="function"&&$.includes(K.name)});if(!Y)return;let Q=Y.prototype,W=["invoke","stream","batch"];for(let K of W){let z=Q[K];if(typeof z==="function")Q[K]=sc0(z,J)}}}var C00=s(oK,(Z)=>new TO(Z)),tc0=(Z={})=>{return{name:oK,setupOnce(){C00(Z)}}},E00=k(tc0);var HX=v(V0(),1);var P00=[">=0.0.0 <2.0.0"];class AO extends HX.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-langgraph",I0,Z)}init(){return new HX.InstrumentationNodeModuleDefinition("@langchain/langgraph",P00,this._patch.bind(this),(J)=>J,[new HX.InstrumentationNodeModuleFile("@langchain/langgraph/dist/index.cjs",P00,this._patch.bind(this),(J)=>J)])}_patch(Z){let J=l(),$=Boolean(J?.getOptions().sendDefaultPii),X=this.getConfig(),Y=X.recordInputs??$,Q=X.recordOutputs??$,W={recordInputs:Y,recordOutputs:Q};if(Z.StateGraph&&typeof Z.StateGraph==="function"){let K=Z.StateGraph;K.prototype.compile=xL(K.prototype.compile,W)}return Z}}var I00=s(sK,(Z)=>new AO(Z)),ec0=(Z={})=>{return{name:sK,setupOnce(){I00(Z)}}},S00=k(ec0);var g00=v(V0(),1);var D9=v(g(),1),O9=v(V0(),1),Q8=v(e0(),1);import*as k00 from"net";function x00(Z,J,$,X,Y){let W=()=>{},K=Y.firestoreSpanCreationHook;if(typeof K==="function")W=(H)=>{O9.safeExecuteInTheMiddle(()=>K(H),(V)=>{if(!V)return;D9.diag.error(V?.message)},!0)};let z=new O9.InstrumentationNodeModuleDefinition("@firebase/firestore",J,(H)=>y00(H,$,X,Z,W)),G=["@firebase/firestore/dist/lite/index.node.cjs.js","@firebase/firestore/dist/lite/index.node.mjs.js","@firebase/firestore/dist/lite/index.rn.esm2017.js","@firebase/firestore/dist/lite/index.cjs.js"];for(let H of G)z.files.push(new O9.InstrumentationNodeModuleFile(H,J,(V)=>y00(V,$,X,Z,W),(V)=>v00(V,X)));return z}function y00(Z,J,$,X,Y){return v00(Z,$),J(Z,"addDoc",Zl0(X,Y)),J(Z,"getDocs",$l0(X,Y)),J(Z,"setDoc",Xl0(X,Y)),J(Z,"deleteDoc",Jl0(X,Y)),Z}function v00(Z,J){for(let $ of["addDoc","getDocs","setDoc","deleteDoc"])if(O9.isWrapped(Z[$]))J(Z,$);return Z}function Zl0(Z,J){return function(X){return function(Y,Q){let W=EG(Z,"addDoc",Y);return J(W),CG(W,()=>{return X(Y,Q)})}}}function Jl0(Z,J){return function(X){return function(Y){let Q=EG(Z,"deleteDoc",Y.parent||Y);return J(Q),CG(Q,()=>{return X(Y)})}}}function $l0(Z,J){return function(X){return function(Y){let Q=EG(Z,"getDocs",Y);return J(Q),CG(Q,()=>{return X(Y)})}}}function Xl0(Z,J){return function(X){return function(Y,Q,W){let K=EG(Z,"setDoc",Y.parent||Y);return J(K),CG(K,()=>{return typeof W<"u"?X(Y,Q,W):X(Y,Q)})}}}function CG(Z,J){return D9.context.with(D9.trace.setSpan(D9.context.active(),Z),()=>{return O9.safeExecuteInTheMiddle(()=>{return J()},($)=>{if($)Z.recordException($);Z.end()},!0)})}function EG(Z,J,$){let X=Z.startSpan(`${J} ${$.path}`,{kind:D9.SpanKind.CLIENT});return Ql0(X,$),X.setAttribute(Q8.ATTR_DB_OPERATION_NAME,J),X}function Yl0(Z){let J,$;if(typeof Z.host==="string")if(Z.host.startsWith("[")){if(Z.host.endsWith("]"))J=Z.host.replace(/^\[|\]$/g,"");else if(Z.host.includes("]:")){let X=Z.host.lastIndexOf(":");if(X!==-1)J=Z.host.slice(1,X).replace(/^\[|\]$/g,""),$=Z.host.slice(X+1)}}else if(k00.isIPv6(Z.host))J=Z.host;else{let X=Z.host.lastIndexOf(":");if(X!==-1)J=Z.host.slice(0,X),$=Z.host.slice(X+1);else J=Z.host}return{address:J,port:$?parseInt($,10):void 0}}function Ql0(Z,J){let $=J.firestore.app,X=$.options,Q=(J.firestore.toJSON()||{}).settings||{},W={[Q8.ATTR_DB_COLLECTION_NAME]:J.path,[Q8.ATTR_DB_NAMESPACE]:$.name,[Q8.ATTR_DB_SYSTEM_NAME]:"firebase.firestore","firebase.firestore.type":J.type,"firebase.firestore.options.projectId":X.projectId,"firebase.firestore.options.appId":X.appId,"firebase.firestore.options.messagingSenderId":X.messagingSenderId,"firebase.firestore.options.storageBucket":X.storageBucket},{address:K,port:z}=Yl0(Q);if(K)W[Q8.ATTR_SERVER_ADDRESS]=K;if(z)W[Q8.ATTR_SERVER_PORT]=z;Z.setAttributes(W)}var w5=v(g(),1),_9=v(V0(),1);function h00(Z,J,$,X,Y){let Q=()=>{},W=()=>{},K=Y.functions?.errorHook,z=Y.functions?.requestHook,G=Y.functions?.responseHook;if(typeof G==="function")W=(F,B)=>{_9.safeExecuteInTheMiddle(()=>G(F,B),(U)=>{if(!U)return;w5.diag.error(U?.message)},!0)};if(typeof z==="function")Q=(F)=>{_9.safeExecuteInTheMiddle(()=>z(F),(B)=>{if(!B)return;w5.diag.error(B?.message)},!0)};let H=new _9.InstrumentationNodeModuleDefinition("firebase-functions",J);return[{name:"firebase-functions/lib/v2/providers/https.js",triggerType:"function"},{name:"firebase-functions/lib/v2/providers/firestore.js",triggerType:"firestore"},{name:"firebase-functions/lib/v2/providers/scheduler.js",triggerType:"scheduler"},{name:"firebase-functions/lib/v2/storage.js",triggerType:"storage"}].forEach(({name:F,triggerType:B})=>{H.files.push(new _9.InstrumentationNodeModuleFile(F,J,(U)=>Wl0(U,$,X,Z,{requestHook:Q,responseHook:W,errorHook:K},B),(U)=>f00(U,X)))}),H}function a4(Z,J,$){return function(Y){return function(...Q){let W=typeof Q[0]==="function"?Q[0]:Q[1],K=typeof Q[0]==="function"?void 0:Q[0];if(!W)return Y.call(this,...Q);let z=async function(...G){let H=process.env.FUNCTION_TARGET||process.env.K_SERVICE||"unknown",V=Z.startSpan(`firebase.function.${$}`,{kind:w5.SpanKind.SERVER}),F={"faas.name":H,"faas.trigger":$,"faas.provider":"firebase"};if(process.env.GCLOUD_PROJECT)F["cloud.project_id"]=process.env.GCLOUD_PROJECT;if(process.env.EVENTARC_CLOUD_EVENT_SOURCE)F["cloud.event_source"]=process.env.EVENTARC_CLOUD_EVENT_SOURCE;return V.setAttributes(F),J?.requestHook?.(V),w5.context.with(w5.trace.setSpan(w5.context.active(),V),async()=>{let B,U;try{U=await W.apply(this,G)}catch(L){B=L}if(J?.responseHook?.(V,B),B)V.recordException(B);if(V.end(),B)throw await J?.errorHook?.(V,B),B;return U})};if(K)return Y.call(this,K,z);else return Y.call(this,z)}}}function Wl0(Z,J,$,X,Y,Q){switch(f00(Z,$),Q){case"function":J(Z,"onRequest",a4(X,Y,"http.request")),J(Z,"onCall",a4(X,Y,"http.call"));break;case"firestore":J(Z,"onDocumentCreated",a4(X,Y,"firestore.document.created")),J(Z,"onDocumentUpdated",a4(X,Y,"firestore.document.updated")),J(Z,"onDocumentDeleted",a4(X,Y,"firestore.document.deleted")),J(Z,"onDocumentWritten",a4(X,Y,"firestore.document.written")),J(Z,"onDocumentCreatedWithAuthContext",a4(X,Y,"firestore.document.created")),J(Z,"onDocumentUpdatedWithAuthContext",a4(X,Y,"firestore.document.updated")),J(Z,"onDocumentDeletedWithAuthContext",a4(X,Y,"firestore.document.deleted")),J(Z,"onDocumentWrittenWithAuthContext",a4(X,Y,"firestore.document.written"));break;case"scheduler":J(Z,"onSchedule",a4(X,Y,"scheduler.scheduled"));break;case"storage":J(Z,"onObjectFinalized",a4(X,Y,"storage.object.finalized")),J(Z,"onObjectArchived",a4(X,Y,"storage.object.archived")),J(Z,"onObjectDeleted",a4(X,Y,"storage.object.deleted")),J(Z,"onObjectMetadataUpdated",a4(X,Y,"storage.object.metadataUpdated"));break}return Z}function f00(Z,J){let $=["onSchedule","onRequest","onCall","onObjectFinalized","onObjectArchived","onObjectDeleted","onObjectMetadataUpdated","onDocumentCreated","onDocumentUpdated","onDocumentDeleted","onDocumentWritten","onDocumentCreatedWithAuthContext","onDocumentUpdatedWithAuthContext","onDocumentDeletedWithAuthContext","onDocumentWrittenWithAuthContext"];for(let X of $)if(_9.isWrapped(Z[X]))J(Z,X);return Z}var b00={},Kl0=[">=3.0.0 <5"],zl0=[">=6.0.0 <7"];class NO extends g00.InstrumentationBase{constructor(Z=b00){super("@sentry/instrumentation-firebase",I0,Z)}setConfig(Z={}){super.setConfig({...b00,...Z})}init(){let Z=[];return Z.push(x00(this.tracer,Kl0,this._wrap,this._unwrap,this.getConfig())),Z.push(h00(this.tracer,zl0,this._wrap,this._unwrap,this.getConfig())),Z}}var m00="Firebase",Gl0={firestoreSpanCreationHook:(Z)=>{Z1(Z,"auto.firebase.otel.firestore"),Z.setAttribute(G0,"db.query")},functions:{requestHook:(Z)=>{Z1(Z,"auto.firebase.otel.functions"),Z.setAttribute(G0,"http.request")},errorHook:async(Z,J)=>{if(J)F0(J,{mechanism:{type:"auto.firebase.otel.functions",handled:!1}}),await PK(2000)}}},u00=s(m00,()=>new NO(Gl0)),Hl0=()=>{return{name:m00,setupOnce(){u00()}}},d00=k(Hl0);function XQ(){return[cp(),Ii(),wn(),Ft(),Ea(),sa(),Oo(),go(),cr(),Ts(),bs(),Gt(),gt(),Ge(),Ie(),ce(),nn(),D00(),za(),E00(),S00(),w00(),M00(),A00(),q00(),Cs(),d00()]}var VX=v(g(),1);var FX=v(e0(),1);var RO=1e6;function c00(Z,J={}){if(Z.getOptions().debug)y2();let[$,X]=Vl0(Z,J);Z.traceProvider=$,Z.asyncLocalStorageLookup=X}function Vl0(Z,J={}){let $=new _z({sampler:new O2(Z),resource:K3().merge(Fz({[FX.ATTR_SERVICE_NAME]:"node",[FX.SEMRESATTRS_SERVICE_NAMESPACE]:"sentry",[FX.ATTR_SERVICE_VERSION]:I0})),forceFlushTimeoutMillis:500,spanProcessors:[new D2({timeout:Fl0(Z.getOptions().maxSpanWaitDuration)}),...J.spanProcessors||[]]});VX.trace.setGlobalTracerProvider($),VX.propagation.setGlobalPropagator(new L2);let X=new Rz;return VX.context.setGlobalContextManager(X),[$,X.getAsyncLocalStorageLookup()]}function Fl0(Z){if(Z==null)return;if(Z>RO)return k1&&T.warn(`\`maxSpanWaitDuration\` is too high, using the maximum value of ${RO}`),RO;else if(Z<=0||Number.isNaN(Z)){k1&&T.warn("`maxSpanWaitDuration` must be a positive number, using default value instead.");return}return Z}function l00(){return Iz().filter((J)=>J.name!=="Http"&&J.name!=="NodeFetch").concat(A3(),R3())}function p00(Z){return[...l00(),...T1(Z)?XQ():[]]}function qO(Z={}){return Bl0(Z,p00)}function Bl0(Z={},J){$9(Z,"node");let $=d2({...Z,defaultIntegrations:Z.defaultIntegrations??J(Z)});if($&&!Z.skipOpenTelemetrySetup)c00($,{spanProcessors:Z.openTelemetrySpanProcessors}),Sz();return $}import*as r00 from"os";var Ul0="BunServer",Ll0=()=>{return{name:Ul0,setupOnce(){Dl0()}}},a00=k(Ll0),i00=!1;function Dl0(){if(i00)return;Bun.serve=new Proxy(Bun.serve,{apply(Z,J,$){n00($[0]);let X=Z.apply(J,$),Y=X.reload.bind(X);return X.reload=(Q)=>{return n00(Q),Y(Q)},X}}),i00=!0}function n00(Z){Ol0(Z),_l0(Z)}function Ol0(Z){if(typeof Z.fetch!=="function")return;Z.fetch=new Proxy(Z.fetch,{apply(J,$,X){return CO(J,$,X)}})}function _l0(Z){if(!Z.routes)return;if(typeof Z.routes!=="object")return;Object.keys(Z.routes).forEach((J)=>{let $=Z.routes[J];if(typeof $==="function")Z.routes[J]=new Proxy($,{apply:(X,Y,Q)=>{return CO(X,Y,Q,J)}});if($ instanceof Response)return;if(typeof $==="object")Object.entries($).forEach(([X,Y])=>{if(typeof Y==="function")Z.routes[J][X]=new Proxy(Y,{apply:(Q,W,K)=>{return CO(Q,W,K,J)}})})})}function CO(Z,J,$,X){return PZ((Y)=>{let Q=$[0],W=Q.method.toUpperCase();if(W==="OPTIONS"||W==="HEAD")return Z.apply(J,$);let K=lY(Q.url),z=wl0(K,Q),G=K?.pathname||"/";if(Q.params){if(Object.keys(Q.params).forEach((H)=>{z[`url.path.parameter.${H}`]=Q.params[H]}),X)z[M1]="route",z["url.template"]=X,G=X}if(X?.endsWith("/*"))z[M1]="route",z["url.template"]=X,G=X;return Object.assign(z,D$(Q.headers.toJSON(),l()?.getOptions().sendDefaultPii??!1)),Y.setSDKProcessingMetadata({normalizedRequest:{url:Q.url,method:Q.method,headers:Q.headers.toJSON(),query_string:K?.search}}),qK({sentryTrace:Q.headers.get("sentry-trace")??"",baggage:Q.headers.get("baggage")},()=>q6({attributes:z,op:"http.server",name:`${Q.method} ${G}`},async(H)=>{try{let V=await Z.apply(J,$);if(V?.status)HK(H,V.status),Y.setContext("response",{headers:V.headers.toJSON(),status_code:V.status});return V}catch(V){throw F0(V,{mechanism:{type:"auto.http.bun.serve",handled:!1}}),V}}))})}function wl0(Z,J){let $={[X0]:"auto.http.bun.serve",[SU]:J.method||"GET",[M1]:"url"};if(Z){if(Z.search)$["url.query"]=Z.search;if(Z.hash)$["url.fragment"]=Z.hash;if(Z.pathname)$["url.path"]=Z.pathname;if(!QL(Z)){if($["url.full"]=Z.href,Z.port)$["url.port"]=Z.port;if(Z.protocol)$["url.scheme"]=Z.protocol;if(Z.hostname)$["url.domain"]=Z.hostname}}return $}function o00(Z){function J($){let X={body:$.body,method:"POST",headers:Z.headers};try{return G7(()=>{return fetch(Z.url,X).then((Y)=>{return{statusCode:Y.status,headers:{"x-sentry-rate-limits":Y.headers.get("X-Sentry-Rate-Limits"),"retry-after":Y.headers.get("Retry-After")}}})})}catch(Y){return Promise.reject(Y)}}return gZ(Z,J)}function s00(Z){return[_$(),O$(),w$(),j$(),M$(),A3(),R3(),p$(),i$(),c$(),d$(),l$(),a00(),...T1(Z)?XQ():[]]}function EO(Z={}){$9(Z,"bun");let J={...Z,platform:"javascript",runtime:{name:"bun",version:Bun.version},serverName:Z.serverName||global.process.env.SENTRY_NAME||r00.hostname()};if(J.transport=J.transport||o00,J.defaultIntegrations===void 0)J.defaultIntegrations=s00(J);return qO(J)}EO({dsn:"https://f0ba950f2a01c32d24ccd8711de778be@o4510345514123264.ingest.us.sentry.io/4510346875043848",tracesSampleRate:1,sendDefaultPii:!1});import{readFileSync as t00}from"fs";import{join as e00}from"path";function T4(){return"3.1.0-beta.3"}function PO(Z){let[J,$]=Z.split("-"),X=(J||"0.0.0").split(".").map(Number),Y=null,Q=0;if($){let W=$.match(/^([a-z]+)\.?(\d+)?$/i);if(W)Y=W[1]||null,Q=parseInt(W[2]||"0",10);else Y=$}return{major:X[0]||0,minor:X[1]||0,patch:X[2]||0,preRelease:Y,preReleaseNum:Q}}function w9(Z){let J=PO(Z);if(!J.preRelease)return"stable";if(J.preRelease.startsWith("alpha"))return"alpha";return"beta"}function YQ(Z,J){try{let $=PO(Z),X=PO(J);if($.major>X.major)return!1;if($.major<X.major)return!1;if(X.preRelease&&!$.preRelease)return!1;if(!X.preRelease&&$.preRelease)return!1;if(X.preRelease&&$.preRelease){if($.minor<X.minor)return!1;if($.minor>X.minor)return!0;if($.patch>X.patch)return!0;if($.patch<X.patch)return!1;return $.preReleaseNum>X.preReleaseNum}if($.minor>X.minor)return!0;if($.minor<X.minor)return!1;if($.patch>X.patch)return!0;return!1}catch($){return!1}}import{parseArgs as Ml0}from"util";var Tl0={debug:{type:"boolean",short:"d",default:!1,description:"Enable debug logging"},"mqtt-port":{type:"string",default:"8884",description:"MQTT broker port"},"terminal-port":{type:"string",default:"3001",description:"Terminal server port"},"router-port":{type:"string",default:"8883",description:"Router port"},username:{type:"string",short:"u",description:"MQTT broker username (required)"},password:{type:"string",short:"p",description:"MQTT broker password (required)"},"ngrok-token":{type:"string",description:"ngrok authentication token (optional)"},"ngrok-domain":{type:"string",description:"ngrok static domain (optional, paid plan)"},"no-auto-update":{type:"boolean",default:!1,description:"Disable auto-update checking"},"terminal-audit":{type:"boolean",default:!1,description:"Enable terminal input audit logging (logs commands, not output)"},"auto-update-check-interval":{type:"string",default:"60",description:"Auto-update check interval in minutes (default: 60)"},help:{type:"boolean",short:"h",default:!1,description:"Show help message"},version:{type:"boolean",short:"v",default:!1,description:"Show version"}};function Z10(){let Z=Ml0({options:Tl0,allowPositionals:!1,strict:!0});if(Z.values.version)console.log(`ccc v${T4()}`),process.exit(0);if(Z.values.help)Al0(),process.exit(0);let J=process.env.CCC_USERNAME||Z.values.username,$=process.env.CCC_PASSWORD||Z.values.password,X=process.env.CCC_NGROK_TOKEN||Z.values["ngrok-token"],Y=process.env.CCC_NGROK_DOMAIN||Z.values["ngrok-domain"];if(!J||!$)console.error("\x1B[31mError: Authentication credentials are required.\x1B[0m"),console.error(""),console.error("These credentials secure the MQTT communication between the app and backend."),console.error(""),console.error("You can provide them via:"),console.error(""),console.error(" Environment variables (recommended for security):"),console.error(" export CCC_USERNAME=myuser"),console.error(" export CCC_PASSWORD=mypassword"),console.error(" export CCC_NGROK_TOKEN=your_token # optional"),console.error(" export CCC_NGROK_DOMAIN=your_domain # optional"),console.error(" ccc"),console.error(""),console.error(" Or CLI arguments:"),console.error(" ccc --username myuser --password mypassword"),console.error(" ccc -u myuser -p mypassword"),console.error(""),process.exit(1);return{debug:Z.values.debug,mqttPort:parseInt(Z.values["mqtt-port"],10),terminalPort:parseInt(Z.values["terminal-port"],10),routerPort:parseInt(Z.values["router-port"],10),username:J,password:$,ngrokToken:X,ngrokDomain:Y,autoUpdate:!Z.values["no-auto-update"],autoUpdateCheckInterval:parseInt(Z.values["auto-update-check-interval"],10),terminalAudit:Z.values["terminal-audit"]}}function Al0(){console.log(`
53
+ >>> no match, partial?`,Z,V,J,F),V===K)return!0}return!1}let U;if(typeof G==="string")U=H===G,this.debug("string match",G,H,U);else U=G.test(H),this.debug("pattern match",G,H,U);if(!U)return!1}if(Q===K&&W===z)return!0;else if(Q===K)return $;else if(W===z)return Q===K-1&&Z[Q]==="";else throw Error("wtf?")}braceExpand(){return Ui(this.pattern,this.options)}parse(Z){E3(Z);let J=this.options;if(Z==="**")return t6;if(Z==="")return"";let $,X=null;if($=Z.match(Sh0))X=J.dot?kh0:yh0;else if($=Z.match(Mh0))X=(J.nocase?J.dot?Rh0:Nh0:J.dot?Ah0:Th0)($[1]);else if($=Z.match(xh0))X=(J.nocase?J.dot?hh0:vh0:J.dot?fh0:bh0)($);else if($=Z.match(qh0))X=J.dot?Eh0:Ch0;else if($=Z.match(Ph0))X=Ih0;let Y=w4.fromGlob(Z,this.options).toMMPattern();if(X&&typeof Y==="object")Reflect.defineProperty(Y,"test",{value:X});return Y}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let Z=this.set;if(!Z.length)return this.regexp=!1,this.regexp;let J=this.options,$=J.noglobstar?uh0:J.dot?dh0:ch0,X=new Set(J.nocase?["i"]:[]),Y=Z.map((K)=>{let z=K.map((G)=>{if(G instanceof RegExp)for(let H of G.flags.split(""))X.add(H);return typeof G==="string"?ah0(G):G===t6?t6:G._src});return z.forEach((G,H)=>{let V=z[H+1],F=z[H-1];if(G!==t6||F===t6)return;if(F===void 0)if(V!==void 0&&V!==t6)z[H+1]="(?:\\/|"+$+"\\/)?"+V;else z[H]=$;else if(V===void 0)z[H-1]=F+"(?:\\/|"+$+")?";else if(V!==t6)z[H-1]=F+"(?:\\/|\\/"+$+"\\/)"+V,z[H+1]=t6}),z.filter((G)=>G!==t6).join("/")}).join("|"),[Q,W]=Z.length>1?["(?:",")"]:["",""];if(Y="^"+Q+Y+W+"$",this.negate)Y="^(?!"+Y+").+$";try{this.regexp=new RegExp(Y,[...X].join(""))}catch(K){this.regexp=!1}return this.regexp}slashSplit(Z){if(this.preserveMultipleSlashes)return Z.split("/");else if(this.isWindows&&/^\/\/[^\/]+/.test(Z))return["",...Z.split(/\/+/)];else return Z.split(/\/+/)}match(Z,J=this.partial){if(this.debug("match",Z,this.pattern),this.comment)return!1;if(this.empty)return Z==="";if(Z==="/"&&J)return!0;let $=this.options;if(this.isWindows)Z=Z.split("\\").join("/");let X=this.slashSplit(Z);this.debug(this.pattern,"split",X);let Y=this.set;this.debug(this.pattern,"set",Y);let Q=X[X.length-1];if(!Q)for(let W=X.length-2;!Q&&W>=0;W--)Q=X[W];for(let W=0;W<Y.length;W++){let K=Y[W],z=X;if($.matchBase&&K.length===1)z=[Q];if(this.matchOne(z,K,J)){if($.flipNegate)return!0;return!this.negate}}if($.flipNegate)return!1;return this.negate}static defaults(Z){return j4.defaults(Z).Minimatch}}j4.AST=w4;j4.Minimatch=I3;j4.escape=ZD;j4.unescape=E7;var Di="@fastify/otel",rh0="0.8.0",sh0=">=4.0.0 <6",Oi=["onRequest","preParsing","preValidation","preHandler","preSerialization","onSend","onResponse","onError"],H1={HOOK_NAME:"hook.name",FASTIFY_TYPE:"fastify.type",HOOK_CALLBACK_NAME:"hook.callback.name",ROOT:"fastify.root"},P7={ROUTE:"route-hook",INSTANCE:"hook",HANDLER:"request-handler"},G9="anonymous",p4=Symbol("fastify otel instance"),I7=Symbol("fastify otel request spans"),S3=Symbol("fastify otel request context"),_i=Symbol("fastify otel addhook original"),wi=Symbol("fastify otel setnotfound original"),bz=Symbol("fastify otel ignore path");class JD extends ji.InstrumentationBase{constructor(Z){super(Di,rh0,Z);if(this.servername=Z?.servername??process.env.OTEL_SERVICE_NAME??"fastify",this[bz]=null,this._logger=d1.diag.createComponentLogger({namespace:Di}),Z?.ignorePaths!=null||process.env.OTEL_FASTIFY_IGNORE_PATHS!=null){let J=Z?.ignorePaths??process.env.OTEL_FASTIFY_IGNORE_PATHS;if((typeof J!=="string"||J.length===0)&&typeof J!=="function")throw TypeError("ignorePaths must be a string or a function");let $=j4;this[bz]=(X)=>{if(typeof J==="function")return J(X);else return $(X.url,J)}}}enable(){if(this._handleInitialization===void 0&&this.getConfig().registerOnInitialization){let Z=this.plugin();this._handleInitialization=(J)=>{J.fastify.register(Z)},Li.subscribe("fastify.initialization",this._handleInitialization)}return super.enable()}disable(){if(this._handleInitialization)Li.unsubscribe("fastify.initialization",this._handleInitialization),this._handleInitialization=void 0;return super.disable()}init(){return[]}plugin(){let Z=this;return J[Symbol.for("skip-override")]=!0,J[Symbol.for("fastify.display-name")]="@fastify/otel",J[Symbol.for("plugin-meta")]={fastify:sh0,name:"@fastify/otel"},J;function J($,X,Y){$.decorate(p4,Z),$.decorate(_i,$.addHook),$.decorate(wi,$.setNotFoundHandler),$.decorateRequest("opentelemetry",function(){let V=this[S3];return{span:this[I7],tracer:Z.tracer,context:V,inject:(B,U)=>{return d1.propagation.inject(V,B,U)},extract:(B,U)=>{return d1.propagation.extract(V,B,U)}}}),$.decorateRequest(I7,null),$.decorateRequest(S3,null),$.addHook("onRoute",function(H){if(Z[bz]?.(H)===!0){Z._logger.debug(`Ignoring route instrumentation ${H.method} ${H.url} because it matches the ignore path`);return}for(let V of Oi)if(H[V]!=null){let F=H[V];if(typeof F==="function")H[V]=G(F,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - route -> ${V}`,[H1.FASTIFY_TYPE]:P7.ROUTE,[o1.ATTR_HTTP_ROUTE]:H.url,[H1.HOOK_CALLBACK_NAME]:F.name?.length>0?F.name:G9});else if(Array.isArray(F)){let B=[];for(let U of F)B.push(G(U,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - route -> ${V}`,[H1.FASTIFY_TYPE]:P7.ROUTE,[o1.ATTR_HTTP_ROUTE]:H.url,[H1.HOOK_CALLBACK_NAME]:U.name?.length>0?U.name:G9}));H[V]=B}}if(H.onSend!=null)H.onSend=Array.isArray(H.onSend)?[...H.onSend,Q]:[H.onSend,Q];else H.onSend=Q;if(H.onError!=null)H.onError=Array.isArray(H.onError)?[...H.onError,W]:[H.onError,W];else H.onError=W;H.handler=G(H.handler,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - route-handler`,[H1.FASTIFY_TYPE]:P7.HANDLER,[o1.ATTR_HTTP_ROUTE]:H.url,[H1.HOOK_CALLBACK_NAME]:H.handler.name.length>0?H.handler.name:G9})}),$.addHook("onRequest",function(H,V,F){if(this[p4].isEnabled()===!1)return F();else if(this[p4][bz]?.({url:H.url,method:H.method})===!0)return this[p4]._logger.debug(`Ignoring request ${H.method} ${H.url} because it matches the ignore path`),F();let B=d1.context.active();if(d1.trace.getSpan(B)==null)B=d1.propagation.extract(B,H.headers);let U=gz.getRPCMetadata(B);if(H.routeOptions.url!=null&&U?.type===gz.RPCType.HTTP)U.route=H.routeOptions.url;let L=this[p4].tracer.startSpan("request",{attributes:{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.ROOT]:"@fastify/otel",[o1.ATTR_HTTP_ROUTE]:H.url,[o1.ATTR_HTTP_REQUEST_METHOD]:H.method}},B);H[S3]=d1.trace.setSpan(B,L),H[I7]=L,d1.context.with(H[S3],()=>{F()})}),$.addHook("onResponse",function(H,V,F){let B=H[I7];if(B!=null)B.setStatus({code:d1.SpanStatusCode.OK,message:"OK"}),B.setAttributes({[o1.ATTR_HTTP_RESPONSE_STATUS_CODE]:404}),B.end();H[I7]=null,F()}),$.addHook=K,$.setNotFoundHandler=z,Y();function Q(H,V,F,B){let U=H[I7];if(U!=null){if(V.statusCode<500)U.setStatus({code:d1.SpanStatusCode.OK,message:"OK"});U.setAttributes({[o1.ATTR_HTTP_RESPONSE_STATUS_CODE]:V.statusCode}),U.end()}H[I7]=null,B(null,F)}function W(H,V,F,B){let U=H[I7];if(U!=null)U.setStatus({code:d1.SpanStatusCode.ERROR,message:F.message}),U.recordException(F);B()}function K(H,V){let F=this[_i];if(Oi.includes(H))return F.call(this,H,G(V,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - ${H}`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:V.name?.length>0?V.name:G9}));else return F.call(this,H,V)}function z(H,V){let F=this[wi];if(typeof H==="function")V=G(H,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - not-found-handler`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:H.name?.length>0?H.name:G9}),F.call(this,V);else{if(H.preValidation!=null)H.preValidation=G(H.preValidation,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - not-found-handler - preValidation`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:H.preValidation.name?.length>0?H.preValidation.name:G9});if(H.preHandler!=null)H.preHandler=G(H.preHandler,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - not-found-handler - preHandler`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:H.preHandler.name?.length>0?H.preHandler.name:G9});V=G(V,{[o1.ATTR_SERVICE_NAME]:$[p4].servername,[H1.HOOK_NAME]:`${this.pluginName} - not-found-handler`,[H1.FASTIFY_TYPE]:P7.INSTANCE,[H1.HOOK_CALLBACK_NAME]:V.name?.length>0?V.name:G9}),F.call(this,H,V)}}function G(H,V={}){return function(...B){let U=this[p4],[L]=B;if(U.isEnabled()===!1)return H.call(this,...B);let O=L[S3]??d1.context.active(),_=U.tracer.startSpan(`handler - ${H.name?.length>0?H.name:this.pluginName??G9}`,{attributes:V},O);return d1.context.with(d1.trace.setSpan(O,_),function(){try{let w=H.call(this,...B);if(typeof w?.then==="function")return w.then((j)=>{return _.end(),j},(j)=>{return _.setStatus({code:d1.SpanStatusCode.ERROR,message:j.message}),_.recordException(j),_.end(),Promise.reject(j)});return _.end(),w}catch(w){throw _.setStatus({code:d1.SpanStatusCode.ERROR,message:w.message}),_.recordException(w),_.end(),w}},this)}}}}}var u8=v(g(),1),uz=v(_1(),1),eZ=v(V0(),1),Ri=v(e0(),1);var H9;(function(Z){Z.FASTIFY_NAME="fastify.name";let $="fastify.type";Z.FASTIFY_TYPE=$;let X="hook.name";Z.HOOK_NAME=X;let Y="plugin.name";Z.PLUGIN_NAME=Y})(H9||(H9={}));var y3;(function(Z){Z.MIDDLEWARE="middleware";let $="request_handler";Z.REQUEST_HANDLER=$})(y3||(y3={}));var k3;(function(Z){Z.MIDDLEWARE="middleware";let $="request handler";Z.REQUEST_HANDLER=$})(k3||(k3={}));var Ti=v(g(),1);var x3=Symbol("opentelemetry.instrumentation.fastify.request_active_span");function $D(Z,J,$,X={}){let Y=J.startSpan($,{attributes:X}),Q=Z[x3]||[];return Q.push(Y),Object.defineProperty(Z,x3,{enumerable:!1,configurable:!0,value:Q}),Y}function mz(Z,J){let $=Z[x3]||[];if(!$.length)return;$.forEach((X)=>{if(J)X.setStatus({code:Ti.SpanStatusCode.ERROR,message:J.message}),X.recordException(J);X.end()}),delete Z[x3]}function Ai(Z,J,$){let X,Y=void 0;try{if(Y=Z(),Mi(Y))Y.then((Q)=>J(void 0,Q),(Q)=>J(Q))}catch(Q){X=Q}finally{if(!Mi(Y)){if(J(X,Y),X)throw X}return Y}}function Mi(Z){return typeof Z==="object"&&Z&&typeof Object.getOwnPropertyDescriptor(Z,"then")?.value==="function"||!1}var th0="0.1.0",eh0="@sentry/instrumentation-fastify-v3",Ni="anonymous",Zf0=new Set(["onTimeout","onRequest","preParsing","preValidation","preSerialization","preHandler","onSend","onResponse","onError"]);class XD extends eZ.InstrumentationBase{constructor(Z={}){super(eh0,th0,Z)}init(){return[new eZ.InstrumentationNodeModuleDefinition("fastify",[">=3.0.0 <4"],(Z)=>{return this._patchConstructor(Z)})]}_hookOnRequest(){let Z=this;return function($,X,Y){if(!Z.isEnabled())return Y();Z._wrap(X,"send",Z._patchSend());let Q=$,W=uz.getRPCMetadata(u8.context.active()),K=Q.routeOptions?Q.routeOptions.url:$.routerPath;if(K&&W?.type===uz.RPCType.HTTP)W.route=K;let z=$.method||"GET";y0().setTransactionName(`${z} ${K}`),Y()}}_wrapHandler(Z,J,$,X){let Y=this;return this._diag.debug("Patching fastify route.handler function"),function(...Q){if(!Y.isEnabled())return $.apply(this,Q);let W=$.name||Z||Ni,K=`${k3.MIDDLEWARE} - ${W}`,z=Q[1],G=$D(z,Y.tracer,K,{[H9.FASTIFY_TYPE]:y3.MIDDLEWARE,[H9.PLUGIN_NAME]:Z,[H9.HOOK_NAME]:J}),H=X&&Q[Q.length-1];if(H)Q[Q.length-1]=function(...V){mz(z),H.apply(this,V)};return u8.context.with(u8.trace.setSpan(u8.context.active(),G),()=>{return Ai(()=>{return $.apply(this,Q)},(V)=>{if(V instanceof Error)G.setStatus({code:u8.SpanStatusCode.ERROR,message:V.message}),G.recordException(V);if(!X)mz(z)})})}}_wrapAddHook(){let Z=this;return this._diag.debug("Patching fastify server.addHook function"),function(J){return function(...X){let Y=X[0],Q=X[1],W=this.pluginName;if(!Zf0.has(Y))return J.apply(this,X);let K=typeof X[X.length-1]==="function"&&Q.constructor.name!=="AsyncFunction";return J.apply(this,[Y,Z._wrapHandler(W,Y,Q,K)])}}}_patchConstructor(Z){let J=this;function $(...X){let Y=Z.fastify.apply(this,X);return Y.addHook("onRequest",J._hookOnRequest()),Y.addHook("preHandler",J._hookPreHandler()),Jf0(),J._wrap(Y,"addHook",J._wrapAddHook()),Y}if(Z.errorCodes!==void 0)$.errorCodes=Z.errorCodes;return $.fastify=$,$.default=$,$}_patchSend(){let Z=this;return this._diag.debug("Patching fastify reply.send function"),function($){return function(...Y){let Q=Y[0];if(!Z.isEnabled())return $.apply(this,Y);return eZ.safeExecuteInTheMiddle(()=>{return $.apply(this,Y)},(W)=>{if(!W&&Q instanceof Error)W=Q;mz(this,W)})}}}_hookPreHandler(){let Z=this;return this._diag.debug("Patching fastify preHandler function"),function($,X,Y){if(!Z.isEnabled())return Y();let Q=$,W=Q.routeOptions?.handler||Q.context?.handler,K=W?.name.startsWith("bound ")?W.name.substring(6):W?.name,z=`${k3.REQUEST_HANDLER} - ${K||this.pluginName||Ni}`,G={[H9.PLUGIN_NAME]:this.pluginName,[H9.FASTIFY_TYPE]:y3.REQUEST_HANDLER,[Ri.SEMATTRS_HTTP_ROUTE]:Q.routeOptions?Q.routeOptions.url:$.routerPath};if(K)G[H9.FASTIFY_NAME]=K;let H=$D(X,Z.tracer,z,G);qi(H);let{requestHook:V}=Z.getConfig();if(V)eZ.safeExecuteInTheMiddle(()=>V(H,{request:$}),(F)=>{if(F)Z._diag.error("request hook failed",F)},!0);return u8.context.with(u8.trace.setSpan(u8.context.active(),H),()=>{Y()})}}}function Jf0(){let Z=l();if(Z)Z.on("spanStart",(J)=>{qi(J)})}function qi(Z){let J=$0(Z).data,$=J["fastify.type"];if(J[G0]||!$)return;Z.setAttributes({[X0]:"auto.http.otel.fastify",[G0]:`${$}.fastify`});let X=J["fastify.name"]||J["plugin.name"]||J["hook.name"];if(typeof X==="string"){let Y=X.replace(/^fastify -> /,"").replace(/^@fastify\/otel -> /,"");Z.updateName(Y)}}var dz="Fastify",Ei=s(`${dz}.v3`,()=>new XD);function $f0(){let Z=l();if(!Z)return;else return Z.getIntegrationByName(dz)}function Ci(Z,J,$,X){let Y=$f0()?.getShouldHandleError()||Si;if(X==="diagnostics-channel")this.diagnosticsChannelExists=!0;if(this.diagnosticsChannelExists&&X==="onError-hook"){k1&&T.warn("Fastify error handler was already registered via diagnostics channel.","You can safely remove `setupFastifyErrorHandler` call and set `shouldHandleError` on the integration options.");return}if(Y(Z,J,$))F0(Z,{mechanism:{handled:!1,type:"auto.function.fastify"}})}var Pi=s(`${dz}.v5`,()=>{let Z=new JD,J=Z.plugin();return YD.subscribe("fastify.initialization",($)=>{let X=$.fastify;X?.register(J).after((Y)=>{if(Y)k1&&T.error("Failed to setup Fastify instrumentation",Y);else if(Yf0(),X)Qf0(X)})}),YD.subscribe("tracing:fastify.request.handler:error",($)=>{let{error:X,request:Y,reply:Q}=$;Ci.call(Ci,X,Y,Q,"diagnostics-channel")}),Z}),Xf0=({shouldHandleError:Z})=>{let J;return{name:dz,setupOnce(){J=Z||Si,Ei(),Pi()},getShouldHandleError(){return J},setShouldHandleError($){J=$}}},Ii=k((Z={})=>Xf0(Z));function Si(Z,J,$){let X=$.statusCode;return X>=500||X<=299}function yi(Z){let J=$0(Z),$=J.description,X=J.data,Y=X["fastify.type"],Q=Y==="hook",W=Y===$?.startsWith("handler -"),K=$==="request"||Y==="request-handler";if(X[G0]||!W&&!K&&!Q)return;let z=Q?"hook":W?"middleware":K?"request-handler":"<unknown>";Z.setAttributes({[X0]:"auto.http.otel.fastify",[G0]:`${z}.fastify`});let G=X["fastify.name"]||X["plugin.name"]||X["hook.name"];if(typeof G==="string"){let H=G.replace(/^fastify -> /,"").replace(/^@fastify\/otel -> /,"");Z.updateName(H)}}function Yf0(){let Z=l();if(Z)Z.on("spanStart",(J)=>{yi(J)})}function Qf0(Z){Z.addHook("onRequest",async(J,$)=>{if(J.opentelemetry){let{span:Q}=J.opentelemetry();if(Q)yi(Q)}let X=J.routeOptions?.url,Y=J.method||"GET";y0().setTransactionName(`${Y} ${X}`)})}var Ln=v(g(),1),Dn=v(Un(),1);var On="Graphql",_n=s(On,Dn.GraphQLInstrumentation,(Z)=>{let J=jn(Z);return{...J,responseHook($,X){if(Z1($,"auto.graphql.otel.graphql"),X.errors?.length&&!$0($).status)$.setStatus({code:Ln.SpanStatusCode.ERROR});let Q=$0($).data,W=Q["graphql.operation.type"],K=Q["graphql.operation.name"];if(J.useOperationNameForRootSpan&&W){let z=S1($),H=$0(z).data[f$]||[],V=K?`${W} ${K}`:`${W}`;if(Array.isArray(H))H.push(V),z.setAttribute(f$,H);else if(typeof H==="string")z.setAttribute(f$,[H,V]);else z.setAttribute(f$,V);if(!$0(z).data["original-description"])z.setAttribute("original-description",$0(z).description);z.updateName(`${$0(z).data["original-description"]} (${vf0(H)})`)}}}}),xf0=(Z={})=>{return{name:On,setupOnce(){_n(jn(Z))}}},wn=k(xf0);function jn(Z){return{ignoreResolveSpans:!0,ignoreTrivialResolveSpans:!0,useOperationNameForRootSpan:!0,...Z}}function vf0(Z){if(Array.isArray(Z)){let J=Z.slice().sort();if(J.length<=5)return J.join(", ");else return`${J.slice(0,5).join(", ")}, +${J.length-5}`}return`${Z}`}var cn=v(dn(),1);var ln="Kafka",pn=s(ln,()=>new cn.KafkaJsInstrumentation({consumerHook(Z){Z1(Z,"auto.kafkajs.otel.consumer")},producerHook(Z){Z1(Z,"auto.kafkajs.otel.producer")}})),Jb0=()=>{return{name:ln,setupOnce(){pn()}}},nn=k(Jb0);var Qa=v(Ya(),1);var Wa="LruMemoizer",Ka=s(Wa,()=>new Qa.LruMemoizerInstrumentation),Qb0=()=>{return{name:Wa,setupOnce(){Ka()}}},za=k(Qb0);var Ra=v(Na(),1);var qa="Mongo",Ca=s(qa,()=>new Ra.MongoDBInstrumentation({dbStatementSerializer:Mb0,responseHook(Z){Z1(Z,"auto.db.otel.mongo")}}));function Mb0(Z){let J=OD(Z);return JSON.stringify(J)}function OD(Z){if(Array.isArray(Z))return Z.map((J)=>OD(J));if(Tb0(Z)){let J={};return Object.entries(Z).map(([$,X])=>[$,OD(X)]).reduce(($,X)=>{if(Nb0(X))$[X[0]]=X[1];return $},J)}return"?"}function Tb0(Z){return typeof Z==="object"&&Z!==null&&!Ab0(Z)}function Ab0(Z){let J=!1;if(typeof Buffer<"u")J=Buffer.isBuffer(Z);return J}function Nb0(Z){return Array.isArray(Z)}var Rb0=()=>{return{name:qa,setupOnce(){Ca()}}},Ea=k(Rb0);var aa=v(na(),1);var oa="Mongoose",ra=s(oa,()=>new aa.MongooseInstrumentation({responseHook(Z){Z1(Z,"auto.db.otel.mongoose")}})),ib0=()=>{return{name:oa,setupOnce(){ra()}}},sa=k(ib0);var Uo=v(Bo(),1);var Lo="Mysql",Do=s(Lo,()=>new Uo.MySQLInstrumentation({})),Og0=()=>{return{name:Lo,setupOnce(){Do()}}},Oo=k(Og0);var ho=v(vo(),1);var fo="Mysql2",bo=s(fo,()=>new ho.MySQL2Instrumentation({responseHook(Z){Z1(Z,"auto.db.otel.mysql2")}})),pg0=()=>{return{name:fo,setupOnce(){bo()}}},go=k(pg0);var gr=v(Qr(),1),mr=v(xr(),1);var Cm0=["get","set","setex"],gD=["get","mget"],Em0=["set","setex"];function l3(Z,J){return Z.includes(J.toLowerCase())}function mD(Z){if(l3(gD,Z))return"cache.get";else if(l3(Em0,Z))return"cache.put";else return}function Pm0(Z,J){return J.some(($)=>Z.startsWith($))}function hr(Z,J){try{if(J.length===0)return;let $=(Y)=>{if(typeof Y==="string"||typeof Y==="number"||Buffer.isBuffer(Y))return[Y.toString()];else if(Array.isArray(Y))return vr(Y.map((Q)=>$(Q)));else return["<unknown>"]},X=J[0];if(l3(Cm0,Z)&&X!=null)return $(X);return vr(J.map((Y)=>$(Y)))}catch{return}}function fr(Z,J,$){if(!mD(Z))return!1;for(let X of J)if(Pm0(X,$))return!0;return!1}function br(Z){let J=($)=>{try{if(Buffer.isBuffer($))return $.byteLength;else if(typeof $==="string")return $.length;else if(typeof $==="number")return $.toString().length;else if($===null||$===void 0)return 0;return JSON.stringify($).length}catch{return}};return Array.isArray(Z)?Z.reduce(($,X)=>{let Y=J(X);return typeof Y==="number"?$!==void 0?$+Y:Y:$},0):J(Z)}function vr(Z){let J=[],$=(X)=>{X.forEach((Y)=>{if(Array.isArray(Y))$(Y);else J.push(Y)})};return $(Z),J}var XG="Redis",p3={},ur=(Z,J,$,X)=>{Z.setAttribute(X0,"auto.db.otel.redis");let Y=hr(J,$),Q=mD(J);if(!Y||!Q||!p3.cachePrefixes||!fr(J,Y,p3.cachePrefixes))return;let W=$0(Z).data["net.peer.name"],K=$0(Z).data["net.peer.port"];if(K&&W)Z.setAttributes({"network.peer.address":W,"network.peer.port":K});let z=br(X);if(z)Z.setAttribute(IU,z);if(l3(gD,J)&&z!==void 0)Z.setAttribute(EU,z>0);Z.setAttributes({[G0]:Q,[PU]:Y});let G=Y.join(", ");Z.updateName(p3.maxCacheKeyLength?Z7(G,p3.maxCacheKeyLength):G)},Im0=s(`${XG}.IORedis`,()=>{return new gr.IORedisInstrumentation({responseHook:ur})}),Sm0=s(`${XG}.Redis`,()=>{return new mr.RedisInstrumentation({responseHook:ur})}),dr=Object.assign(()=>{Im0(),Sm0()},{id:XG}),ym0=(Z={})=>{return{name:XG,setupOnce(){p3=Z,dr()}}},cr=k(ym0);var ws=v(_s(),1);var js="Postgres",Ms=s(js,()=>new ws.PgInstrumentation({requireParentSpan:!0,requestHook(Z){Z1(Z,"auto.db.otel.postgres")}})),Nu0=()=>{return{name:js,setupOnce(){Ms()}}},Ts=k(Nu0);var YX=v(g(),1),U9=v(V0(),1),c1=v(e0(),1);var HG="PostgresJs",As=[">=3.0.0 <4"],Ru0=/^(SELECT|INSERT|UPDATE|DELETE|CREATE|DROP|ALTER)/i,GG=Symbol("sentryPostgresConnectionContext"),nD=Symbol.for("sentry.instrumented.postgresjs"),Ns=Symbol.for("sentry.query.from.instrumented.sql"),Rs=s(HG,(Z)=>new qs({requireParentSpan:Z?.requireParentSpan??!0,requestHook:Z?.requestHook}));class qs extends U9.InstrumentationBase{constructor(Z){super("sentry-postgres-js",I0,Z)}init(){let Z=new U9.InstrumentationNodeModuleDefinition("postgres",As,(J)=>{try{return this._patchPostgres(J)}catch($){return k1&&T.error("Failed to patch postgres module:",$),J}},(J)=>J);return["src","cf/src","cjs/src"].forEach((J)=>{Z.files.push(new U9.InstrumentationNodeModuleFile(`postgres/${J}/query.js`,As,this._patchQueryPrototype.bind(this),this._unpatchQueryPrototype.bind(this)))}),Z}_patchPostgres(Z){let J=typeof Z==="function",$=J?Z:Z.default;if(typeof $!=="function")return k1&&T.warn("postgres module does not export a function. Skipping instrumentation."),Z;let X=this,Y=function(...Q){let W=Reflect.construct($,Q);if(!W||typeof W!=="function")return k1&&T.warn("postgres() did not return a valid instance"),W;return X._instrumentSqlInstance(W)};Object.setPrototypeOf(Y,$),Object.setPrototypeOf(Y.prototype,$.prototype);for(let Q of Object.getOwnPropertyNames($))if(!["length","name","prototype"].includes(Q)){let W=Object.getOwnPropertyDescriptor($,Q);if(W)Object.defineProperty(Y,Q,W)}if(J)return Y;else return $3(Z,"default",Y),Z}_wrapQueryMethod(Z,J,$){let X=this;return function(...Y){let Q=Reflect.apply(Z,J,Y);if(Q&&typeof Q==="object"&&"handle"in Q)X._wrapSingleQueryHandle(Q,$);return Q}}_wrapCallbackMethod(Z,J,$){let X=this;return function(...Y){let Q=$[GG];if(typeof Y[Y.length-1]!=="function"){let H=Reflect.apply(Z,J,Y);if(H&&typeof H.then==="function")return H.then((V)=>{return X._instrumentSqlInstance(V,Q)});return H}let K=Y.length===1?Y[0]:Y[1],z=function(H){let V=X._instrumentSqlInstance(H,Q);return K(V)},G=Y.length===1?[z]:[Y[0],z];return Reflect.apply(Z,J,G)}}_setConnectionAttributes(Z,J){if(!J)return;if(J.ATTR_DB_NAMESPACE)Z.setAttribute(c1.ATTR_DB_NAMESPACE,J.ATTR_DB_NAMESPACE);if(J.ATTR_SERVER_ADDRESS)Z.setAttribute(c1.ATTR_SERVER_ADDRESS,J.ATTR_SERVER_ADDRESS);if(J.ATTR_SERVER_PORT!==void 0){let $=parseInt(J.ATTR_SERVER_PORT,10);if(!isNaN($))Z.setAttribute(c1.ATTR_SERVER_PORT,$)}}_setOperationName(Z,J,$){if($){Z.setAttribute(c1.ATTR_DB_OPERATION_NAME,$);return}let X=J?.match(Ru0);if(X?.[1])Z.setAttribute(c1.ATTR_DB_OPERATION_NAME,X[1].toUpperCase())}_attachConnectionContext(Z,J){let $=Z;if(!$.options||typeof $.options!=="object")return;let X=$.options,Y=X.host?.[0]||"localhost",Q=X.port?.[0]||5432,W={ATTR_DB_NAMESPACE:typeof X.database==="string"&&X.database!==""?X.database:void 0,ATTR_SERVER_ADDRESS:Y,ATTR_SERVER_PORT:String(Q)};J[GG]=W}_instrumentSqlInstance(Z,J){if(Z[nD])return Z;let $=this,X=new Proxy(Z,{apply(Y,Q,W){let K=Reflect.apply(Y,Q,W);if(K&&typeof K==="object"&&"handle"in K)$._wrapSingleQueryHandle(K,X);return K},get(Y,Q){let W=Y[Q];if(typeof Q!=="string"||typeof W!=="function")return W;if(Q==="unsafe"||Q==="file")return $._wrapQueryMethod(W,Y,X);if(Q==="begin"||Q==="reserve")return $._wrapCallbackMethod(W,Y,X);return W}});if(J)X[GG]=J;else this._attachConnectionContext(Z,X);return Z[nD]=!0,X[nD]=!0,X}_wrapSingleQueryHandle(Z,J){if(Z.handle?.__sentryWrapped)return;Z[Ns]=!0;let $=Z.handle,X=this,Y=async function(...Q){if(!X._shouldCreateSpans())return $.apply(this,Q);let W=X._reconstructQuery(Z.strings),K=X._sanitizeSqlQuery(W);return O4({name:K||"postgresjs.query",op:"db"},(z)=>{Z1(z,"auto.db.postgresjs"),z.setAttributes({[c1.ATTR_DB_SYSTEM_NAME]:"postgres",[c1.ATTR_DB_QUERY_TEXT]:K});let G=J?J[GG]:void 0;X._setConnectionAttributes(z,G);let H=X.getConfig(),{requestHook:V}=H;if(V)U9.safeExecuteInTheMiddle(()=>V(z,K,G),(B)=>{if(B)z.setAttribute("sentry.hook.error","requestHook failed"),k1&&T.error(`Error in requestHook for ${HG} integration:`,B)},!0);let F=this;F.resolve=new Proxy(F.resolve,{apply:(B,U,L)=>{try{X._setOperationName(z,K,L?.[0]?.command),z.end()}catch(O){k1&&T.error("Error ending span in resolve callback:",O)}return Reflect.apply(B,U,L)}}),F.reject=new Proxy(F.reject,{apply:(B,U,L)=>{try{z.setStatus({code:A0,message:L?.[0]?.message||"unknown_error"}),z.setAttribute(c1.ATTR_DB_RESPONSE_STATUS_CODE,L?.[0]?.code||"unknown"),z.setAttribute(c1.ATTR_ERROR_TYPE,L?.[0]?.name||"unknown"),X._setOperationName(z,K),z.end()}catch(O){k1&&T.error("Error ending span in reject callback:",O)}return Reflect.apply(B,U,L)}});try{return $.apply(this,Q)}catch(B){throw z.setStatus({code:A0,message:B instanceof Error?B.message:"unknown_error"}),z.end(),B}})};Y.__sentryWrapped=!0,Z.handle=Y}_shouldCreateSpans(){let Z=this.getConfig();return YX.trace.getSpan(YX.context.active())!==void 0||!Z.requireParentSpan}_reconstructQuery(Z){if(!Z?.length)return;if(Z.length===1)return Z[0]||void 0;return Z.reduce((J,$,X)=>X===0?$:`${J}$${X}${$}`,"")}_sanitizeSqlQuery(Z){if(!Z)return"Unknown SQL Query";return Z.replace(/--.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/;\s*$/,"").replace(/\s+/g," ").trim().replace(/\bX'[0-9A-Fa-f]*'/gi,"?").replace(/\bB'[01]*'/gi,"?").replace(/'(?:[^']|'')*'/g,"?").replace(/\b0x[0-9A-Fa-f]+/gi,"?").replace(/\b(?:TRUE|FALSE)\b/gi,"?").replace(/-?\b\d+\.?\d*[eE][+-]?\d+\b/g,"?").replace(/-?\b\d+\.\d+\b/g,"?").replace(/-?\.\d+\b/g,"?").replace(/(?<!\$)-?\b\d+\b/g,"?").replace(/\bIN\b\s*\(\s*\?(?:\s*,\s*\?)*\s*\)/gi,"IN (?)").replace(/\bIN\b\s*\(\s*\$\d+(?:\s*,\s*\$\d+)*\s*\)/gi,"IN ($?)")}_patchQueryPrototype(Z){let J=this,$=Z.Query.prototype.handle;return Z.Query.prototype.handle=async function(...X){if(this[Ns])return $.apply(this,X);if(!J._shouldCreateSpans())return $.apply(this,X);let Y=J._reconstructQuery(this.strings),Q=J._sanitizeSqlQuery(Y);return O4({name:Q||"postgresjs.query",op:"db"},(W)=>{Z1(W,"auto.db.postgresjs"),W.setAttributes({[c1.ATTR_DB_SYSTEM_NAME]:"postgres",[c1.ATTR_DB_QUERY_TEXT]:Q});let K=J.getConfig(),{requestHook:z}=K;if(z)U9.safeExecuteInTheMiddle(()=>z(W,Q,void 0),(V)=>{if(V)W.setAttribute("sentry.hook.error","requestHook failed"),k1&&T.error(`Error in requestHook for ${HG} integration:`,V)},!0);let G=this.resolve;this.resolve=new Proxy(G,{apply:(V,F,B)=>{try{J._setOperationName(W,Q,B?.[0]?.command),W.end()}catch(U){k1&&T.error("Error ending span in resolve callback:",U)}return Reflect.apply(V,F,B)}});let H=this.reject;this.reject=new Proxy(H,{apply:(V,F,B)=>{try{W.setStatus({code:A0,message:B?.[0]?.message||"unknown_error"}),W.setAttribute(c1.ATTR_DB_RESPONSE_STATUS_CODE,B?.[0]?.code||"unknown"),W.setAttribute(c1.ATTR_ERROR_TYPE,B?.[0]?.name||"unknown"),J._setOperationName(W,Q),W.end()}catch(U){k1&&T.error("Error ending span in reject callback:",U)}return Reflect.apply(V,F,B)}});try{return $.apply(this,X)}catch(V){throw W.setStatus({code:A0,message:V instanceof Error?V.message:"unknown_error"}),W.end(),V}})},Z.Query.prototype.handle.__sentry_original__=$,Z}_unpatchQueryPrototype(Z){if(Z.Query.prototype.handle.__sentry_original__)Z.Query.prototype.handle=Z.Query.prototype.handle.__sentry_original__;return Z}}var qu0=(Z)=>{return{name:HG,setupOnce(){Rs(Z)}}},Cs=k(qu0);var Y8=v(g(),1);var Is=v(g(),1),VG=v(V0(),1),v7=v(g(),1);var Cu0=process.env.PRISMA_SHOW_ALL_TRACES==="true",Eu0="00-10-10-00";function Pu0(Z){switch(Z){case"client":return v7.SpanKind.CLIENT;case"internal":default:return v7.SpanKind.INTERNAL}}var Iu0=class{tracerProvider;ignoreSpanTypes;constructor({tracerProvider:Z,ignoreSpanTypes:J}){this.tracerProvider=Z,this.ignoreSpanTypes=J}isEnabled(){return!0}getTraceParent(Z){let J=v7.trace.getSpanContext(Z??v7.context.active());if(J)return`00-${J.traceId}-${J.spanId}-0${J.traceFlags}`;return Eu0}dispatchEngineSpans(Z){let J=this.tracerProvider.getTracer("prisma"),$=new Map,X=Z.filter((Y)=>Y.parentId===null);for(let Y of X)Ss(J,Y,Z,$,this.ignoreSpanTypes)}getActiveContext(){return v7.context.active()}runInChildSpan(Z,J){if(typeof Z==="string")Z={name:Z};if(Z.internal&&!Cu0)return J();let $=this.tracerProvider.getTracer("prisma"),X=Z.context??this.getActiveContext(),Y=`prisma:client:${Z.name}`;if(ys(Y,this.ignoreSpanTypes))return J();if(Z.active===!1){let Q=$.startSpan(Y,Z,X);return Es(Q,J(Q,X))}return $.startActiveSpan(Y,Z,(Q)=>Es(Q,J(Q,X)))}};function Ss(Z,J,$,X,Y){if(ys(J.name,Y))return;let Q={attributes:J.attributes,kind:Pu0(J.kind),startTime:J.startTime};Z.startActiveSpan(J.name,Q,(W)=>{if(X.set(J.id,W.spanContext().spanId),J.links)W.addLinks(J.links.flatMap((z)=>{let G=X.get(z);if(!G)return[];return{context:{spanId:G,traceId:W.spanContext().traceId,traceFlags:W.spanContext().traceFlags}}}));let K=$.filter((z)=>z.parentId===J.id);for(let z of K)Ss(Z,z,$,X,Y);W.end(J.endTime)})}function Es(Z,J){if(Su0(J))return J.then(($)=>{return Z.end(),$},($)=>{throw Z.end(),$});return Z.end(),J}function Su0(Z){return Z!=null&&typeof Z.then==="function"}function ys(Z,J){return J.some(($)=>typeof $==="string"?$===Z:$.test(Z))}var ks={name:"@prisma/instrumentation",version:"6.19.0",description:"OpenTelemetry compliant instrumentation for Prisma Client",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{require:{types:"./dist/index.d.ts",default:"./dist/index.js"},import:{types:"./dist/index.d.ts",default:"./dist/index.mjs"}}},license:"Apache-2.0",homepage:"https://www.prisma.io",repository:{type:"git",url:"https://github.com/prisma/prisma.git",directory:"packages/instrumentation"},bugs:"https://github.com/prisma/prisma/issues",devDependencies:{"@prisma/internals":"workspace:*","@types/node":"18.19.76","@opentelemetry/api":"1.9.0",typescript:"5.4.5"},dependencies:{"@opentelemetry/instrumentation":">=0.52.0 <1"},peerDependencies:{"@opentelemetry/api":"^1.8"},files:["dist"],keywords:["prisma","instrumentation","opentelemetry","otel"],scripts:{dev:"DEV=true tsx helpers/build.ts",build:"tsx helpers/build.ts",prepublishOnly:"pnpm run build",test:"vitest run"},sideEffects:!1},oD=ks.version,yu0=oD.split(".")[0],Ps="PRISMA_INSTRUMENTATION",aD=`V${yu0}_PRISMA_INSTRUMENTATION`,ku0=ks.name,xu0="@prisma/client",xs=class extends VG.InstrumentationBase{tracerProvider;constructor(Z={}){super(ku0,oD,Z)}setTracerProvider(Z){this.tracerProvider=Z}init(){return[new VG.InstrumentationNodeModuleDefinition(xu0,[oD])]}enable(){let Z=this._config,J={helper:new Iu0({tracerProvider:this.tracerProvider??Is.trace.getTracerProvider(),ignoreSpanTypes:Z.ignoreSpanTypes??[]})};global[Ps]=J,global[aD]=J}disable(){delete global[Ps],delete global[aD]}isEnabled(){return Boolean(global[aD])}};var vs="Prisma";function vu0(Z){return!!Z&&typeof Z==="object"&&"dispatchEngineSpans"in Z}function hs(){let Z=globalThis.PRISMA_INSTRUMENTATION;return Z&&typeof Z==="object"&&"helper"in Z?Z.helper:void 0}class fs extends xs{constructor(){super()}enable(){super.enable();let Z=hs();if(vu0(Z))Z.createEngineSpan=(J)=>{let $=Y8.trace.getTracer("prismaV5Compatibility"),X=$._idGenerator;if(!X){m1(()=>{console.warn("[Sentry] Could not find _idGenerator on tracer, skipping Prisma v5 compatibility - some Prisma spans may be missing!")});return}try{J.spans.forEach((Y)=>{let Q=hu0(Y.kind),W=Y.parent_span_id,K=Y.span_id,z=Y.trace_id,G=Y.links?.map((V)=>{return{context:{traceId:V.trace_id,spanId:V.span_id,traceFlags:Y8.TraceFlags.SAMPLED}}}),H=Y8.trace.setSpanContext(Y8.context.active(),{traceId:z,spanId:W,traceFlags:Y8.TraceFlags.SAMPLED});Y8.context.with(H,()=>{let V={generateTraceId:()=>{return z},generateSpanId:()=>{return K}};$._idGenerator=V,$.startSpan(Y.name,{kind:Q,links:G,startTime:Y.start_time,attributes:Y.attributes}).end(Y.end_time),$._idGenerator=X})})}finally{$._idGenerator=X}}}}function hu0(Z){switch(Z){case"client":return Y8.SpanKind.CLIENT;case"internal":default:return Y8.SpanKind.INTERNAL}}var fu0=s(vs,(Z)=>{return new fs}),bs=k((Z)=>{return{name:vs,setupOnce(){fu0()},setup(J){if(!hs())return;J.on("spanStart",($)=>{let X=$0($);if(X.description?.startsWith("prisma:"))$.setAttribute(X0,"auto.db.otel.prisma");if(X.description==="prisma:engine:db_query"&&X.data["db.query.text"])$.updateName(X.data["db.query.text"]);if(X.description==="prisma:engine:db_query"&&!X.data["db.system"])$.setAttribute("db.system","prisma")})}}});var Wt=v(Qt(),1);var Kt="Hapi",zt=s(Kt,()=>new Wt.HapiInstrumentation),Kd0=()=>{return{name:Kt,setupOnce(){zt()}}},Gt=k(Kd0);var UG=v(e0(),1);var f7={HONO_TYPE:"hono.type",HONO_NAME:"hono.name"},r3={MIDDLEWARE:"middleware",REQUEST_HANDLER:"request_handler"};var $J=v(g(),1),BG=v(V0(),1);var zd0="@sentry/instrumentation-hono",Gd0="0.0.1";class ZO extends BG.InstrumentationBase{constructor(Z={}){super(zd0,Gd0,Z)}init(){return[new BG.InstrumentationNodeModuleDefinition("hono",[">=4.0.0 <5"],(Z)=>this._patch(Z))]}_patch(Z){let J=this;class $ extends Z.Hono{constructor(...X){super(...X);J._wrap(this,"get",J._patchHandler()),J._wrap(this,"post",J._patchHandler()),J._wrap(this,"put",J._patchHandler()),J._wrap(this,"delete",J._patchHandler()),J._wrap(this,"options",J._patchHandler()),J._wrap(this,"patch",J._patchHandler()),J._wrap(this,"all",J._patchHandler()),J._wrap(this,"on",J._patchOnHandler()),J._wrap(this,"use",J._patchMiddlewareHandler())}}try{Z.Hono=$}catch{return{...Z,Hono:$}}return Z}_patchHandler(){let Z=this;return function(J){return function(...X){if(typeof X[0]==="string"){let Y=X[0];if(X.length===1)return J.apply(this,[Y]);let Q=X.slice(1);return J.apply(this,[Y,...Q.map((W)=>Z._wrapHandler(W))])}return J.apply(this,X.map((Y)=>Z._wrapHandler(Y)))}}}_patchOnHandler(){let Z=this;return function(J){return function(...X){let Y=X.slice(2);return J.apply(this,[...X.slice(0,2),...Y.map((Q)=>Z._wrapHandler(Q))])}}}_patchMiddlewareHandler(){let Z=this;return function(J){return function(...X){if(typeof X[0]==="string"){let Y=X[0];if(X.length===1)return J.apply(this,[Y]);let Q=X.slice(1);return J.apply(this,[Y,...Q.map((W)=>Z._wrapHandler(W))])}return J.apply(this,X.map((Y)=>Z._wrapHandler(Y)))}}}_wrapHandler(Z){let J=this;return function($,X){if(!J.isEnabled())return Z.apply(this,[$,X]);let Y=$.req.path,Q=J.tracer.startSpan(Y);return $J.context.with($J.trace.setSpan($J.context.active(),Q),()=>{return J._safeExecute(()=>{let W=Z.apply(this,[$,X]);if(u4(W))return W.then((K)=>{let z=J._determineHandlerType(K);return Q.setAttributes({[f7.HONO_TYPE]:z,[f7.HONO_NAME]:z===r3.REQUEST_HANDLER?Y:Z.name||"anonymous"}),J.getConfig().responseHook?.(Q),K});else{let K=J._determineHandlerType(W);return Q.setAttributes({[f7.HONO_TYPE]:K,[f7.HONO_NAME]:K===r3.REQUEST_HANDLER?Y:Z.name||"anonymous"}),J.getConfig().responseHook?.(Q),W}},()=>Q.end(),(W)=>{J._handleError(Q,W),Q.end()})})}}_safeExecute(Z,J,$){try{let X=Z();if(u4(X))X.then(()=>J(),(Y)=>$(Y));else J();return X}catch(X){throw $(X),X}}_determineHandlerType(Z){return Z===void 0?r3.MIDDLEWARE:r3.REQUEST_HANDLER}_handleError(Z,J){if(J instanceof Error)Z.setStatus({code:$J.SpanStatusCode.ERROR,message:J.message}),Z.recordException(J)}}var Ht="Hono";function Hd0(Z){let J=$0(Z).data,$=J[f7.HONO_TYPE];if(J[G0]||!$)return;Z.setAttributes({[X0]:"auto.http.otel.hono",[G0]:`${$}.hono`});let X=J[f7.HONO_NAME];if(typeof X==="string")Z.updateName(X);if(y0()===T6()){k1&&T.warn("Isolation scope is default isolation scope - skipping setting transactionName");return}let Y=J[UG.ATTR_HTTP_ROUTE],Q=J[UG.ATTR_HTTP_REQUEST_METHOD];if(typeof Y==="string"&&typeof Q==="string")y0().setTransactionName(`${Q} ${Y}`)}var Vt=s(Ht,()=>new ZO({responseHook:(Z)=>{Hd0(Z)}})),Vd0=()=>{return{name:Ht,setupOnce(){Vt()}}},Ft=k(Vd0);var vt=v(xt(),1),ht=v(e0(),1);var ft="Koa",bt=s(ft,vt.KoaInstrumentation,(Z={})=>{return{ignoreLayersType:Z.ignoreLayersType,requestHook(J,$){Z1(J,"auto.http.otel.koa");let X=$0(J).data,Y=X["koa.type"];if(Y)J.setAttribute(G0,`${Y}.koa`);let Q=X["koa.name"];if(typeof Q==="string")J.updateName(Q||"< unknown >");if(y0()===T6()){k1&&T.warn("Isolation scope is default isolation scope - skipping setting transactionName");return}let W=X[ht.ATTR_HTTP_ROUTE],K=$.context?.request?.method?.toUpperCase()||"GET";if(W)y0().setTransactionName(`${K} ${W}`)}}}),Ad0=(Z={})=>{return{name:ft,setupOnce(){bt(Z)}}},gt=k(Ad0);var We=v(Qe(),1);var Ke="Connect",ze=s(Ke,()=>new We.ConnectInstrumentation),fd0=()=>{return{name:Ke,setupOnce(){ze()}}},Ge=k(fd0);var Ce=v(qe(),1);var td0=new Set(["callProcedure","execSql","execSqlBatch","execBulkLoad","prepare","execute"]),Ee="Tedious",Pe=s(Ee,()=>new Ce.TediousInstrumentation({})),ed0=()=>{let Z;return{name:Ee,setupOnce(){let J=Pe();Z=M3(J)},setup(J){Z?.(()=>J.on("spanStart",($)=>{let{description:X,data:Y}=$0($);if(!X||Y["db.system"]!=="mssql")return;let Q=X.split(" ")[0]||"";if(td0.has(Q))$.setAttribute(X0,"auto.db.otel.tedious")}))}}},Ie=k(ed0);var me=v(ge(),1);var ue="GenericPool",de=s(ue,()=>new me.GenericPoolInstrumentation({})),Xc0=()=>{let Z;return{name:ue,setupOnce(){let J=de();Z=M3(J)},setup(J){Z?.(()=>J.on("spanStart",($)=>{let Y=$0($).description;if(Y==="generic-pool.aquire"||Y==="generic-pool.acquire")$.setAttribute(X0,"auto.db.otel.generic_pool")}))}}},ce=k(Xc0);var B00=v(F00(),1);var U00="Amqplib",fc0={consumeEndHook:(Z)=>{Z1(Z,"auto.amqplib.otel.consumer")},publishHook:(Z)=>{Z1(Z,"auto.amqplib.otel.publisher")}},L00=s(U00,()=>new B00.AmqplibInstrumentation(fc0)),bc0=()=>{return{name:U00,setupOnce(){L00()}}},D00=k(bc0);var JQ="VercelAI";var AG=v(V0(),1);var gc0=[">=3.0.0 <7"],O00=["generateText","streamText","generateObject","streamObject","embed","embedMany"];function mc0(Z){if(typeof Z!=="object"||Z===null)return!1;let J=Z;return"type"in J&&"error"in J&&"toolName"in J&&"toolCallId"in J&&J.type==="tool-error"&&J.error instanceof Error}function uc0(Z){if(typeof Z!=="object"||Z===null||!("content"in Z))return;let J=Z;if(!Array.isArray(J.content))return;for(let $ of J.content)if(mc0($)){let X=AL($.toolCallId);if(X){let Y=X.spanContext();W6((Q)=>{Q.setContext("trace",{trace_id:Y.traceId,span_id:Y.spanId}),Q.setTag("vercel.ai.tool.name",$.toolName),Q.setTag("vercel.ai.tool.callId",$.toolCallId),Q.setLevel("error"),F0($.error,{mechanism:{type:"auto.vercelai.otel",handled:!1}})}),NL($.toolCallId)}else W6((Y)=>{Y.setTag("vercel.ai.tool.name",$.toolName),Y.setTag("vercel.ai.tool.callId",$.toolCallId),Y.setLevel("error"),F0($.error,{mechanism:{type:"auto.vercelai.otel",handled:!1}})})}}function dc0(Z,J,$,X){let Y=Z?.recordInputs!==void 0?Z.recordInputs:J.recordInputs!==void 0?J.recordInputs:$===!0?!0:X,Q=Z?.recordOutputs!==void 0?Z.recordOutputs:J.recordOutputs!==void 0?J.recordOutputs:$===!0?!0:X;return{recordInputs:Y,recordOutputs:Q}}class $Q extends AG.InstrumentationBase{__init(){this._isPatched=!1}__init2(){this._callbacks=[]}constructor(Z={}){super("@sentry/instrumentation-vercel-ai",I0,Z);$Q.prototype.__init.call(this),$Q.prototype.__init2.call(this)}init(){return new AG.InstrumentationNodeModuleDefinition("ai",gc0,this._patch.bind(this))}callWhenPatched(Z){if(this._isPatched)Z();else this._callbacks.push(Z)}_patch(Z){this._isPatched=!0,this._callbacks.forEach(($)=>$()),this._callbacks=[];let J=($)=>{return new Proxy($,{apply:(X,Y,Q)=>{let W=Q[0].experimental_telemetry||{},K=W.isEnabled,z=l(),G=z?.getIntegrationByName(JQ),H=G?.options,V=G?Boolean(z?.getOptions().sendDefaultPii):!1,{recordInputs:F,recordOutputs:B}=dc0(H,W,K,V);return Q[0].experimental_telemetry={...W,isEnabled:K!==void 0?K:!0,recordInputs:F,recordOutputs:B},A6(()=>Reflect.apply(X,Y,Q),(U)=>{if(U&&typeof U==="object")p1(U,"_sentry_active_span",z5())},()=>{},(U)=>{uc0(U)})}})};if(Object.prototype.toString.call(Z)==="[object Module]"){for(let $ of O00)Z[$]=J(Z[$]);return Z}else{let $=O00.reduce((X,Y)=>{return X[Y]=J(Z[Y]),X},{});return{...Z,...$}}}}var _00=s(JQ,()=>new $Q({}));function cc0(Z){return!!Z.getIntegrationByName("Modules")?.getModules?.()?.ai}var lc0=(Z={})=>{let J;return{name:JQ,options:Z,setupOnce(){J=_00()},afterAllSetup($){if(Z.force??cc0($))pK($);else J?.callWhenPatched(()=>pK($))}}},w00=k(lc0);var NG=v(V0(),1);var pc0=[">=4.0.0 <7"];class wO extends NG.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-openai",I0,Z)}init(){return new NG.InstrumentationNodeModuleDefinition("openai",pc0,this._patch.bind(this))}_patch(Z){let J=Z;return J=this._patchClient(J,"OpenAI"),J=this._patchClient(J,"AzureOpenAI"),J}_patchClient(Z,J){let $=Z[J];if(!$)return Z;let X=this.getConfig(),Y=function(...Q){if(mZ(M7))return Reflect.construct($,Q);let W=Reflect.construct($,Q),K=l(),z=Boolean(K?.getOptions().sendDefaultPii),G=X.recordInputs??z,H=X.recordOutputs??z;return aK(W,{recordInputs:G,recordOutputs:H})};Object.setPrototypeOf(Y,$),Object.setPrototypeOf(Y.prototype,$.prototype);for(let Q of Object.getOwnPropertyNames($))if(!["length","name","prototype"].includes(Q)){let W=Object.getOwnPropertyDescriptor($,Q);if(W)Object.defineProperty(Y,Q,W)}try{Z[J]=Y}catch(Q){Object.defineProperty(Z,J,{value:Y,writable:!0,configurable:!0,enumerable:!0})}if(Z.default===$)try{Z.default=Y}catch(Q){Object.defineProperty(Z,"default",{value:Y,writable:!0,configurable:!0,enumerable:!0})}return Z}}var j00=s(M7,(Z)=>new wO(Z)),ic0=(Z={})=>{return{name:M7,setupOnce(){j00(Z)}}},M00=k(ic0);var RG=v(V0(),1);var nc0=[">=0.19.2 <1.0.0"];class jO extends RG.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-anthropic-ai",I0,Z)}init(){return new RG.InstrumentationNodeModuleDefinition("@anthropic-ai/sdk",nc0,this._patch.bind(this))}_patch(Z){let J=Z.Anthropic,$=this.getConfig(),X=function(...Y){if(mZ(T7))return Reflect.construct(J,Y);let Q=Reflect.construct(J,Y),W=l(),K=Boolean(W?.getOptions().sendDefaultPii),z=$.recordInputs??K,G=$.recordOutputs??K;return CL(Q,{recordInputs:z,recordOutputs:G})};Object.setPrototypeOf(X,J),Object.setPrototypeOf(X.prototype,J.prototype);for(let Y of Object.getOwnPropertyNames(J))if(!["length","name","prototype"].includes(Y)){let Q=Object.getOwnPropertyDescriptor(J,Y);if(Q)Object.defineProperty(X,Y,Q)}try{Z.Anthropic=X}catch(Y){Object.defineProperty(Z,"Anthropic",{value:X,writable:!0,configurable:!0,enumerable:!0})}if(Z.default===J)try{Z.default=X}catch(Y){Object.defineProperty(Z,"default",{value:X,writable:!0,configurable:!0,enumerable:!0})}return Z}}var T00=s(T7,(Z)=>new jO(Z)),ac0=(Z={})=>{return{name:T7,options:Z,setupOnce(){T00(Z)}}},A00=k(ac0);var GX=v(V0(),1);var N00=[">=0.10.0 <2"];class MO extends GX.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-google-genai",I0,Z)}init(){return new GX.InstrumentationNodeModuleDefinition("@google/genai",N00,(J)=>this._patch(J),(J)=>J,[new GX.InstrumentationNodeModuleFile("@google/genai/dist/node/index.cjs",N00,(J)=>this._patch(J),(J)=>J)])}_patch(Z){let J=Z.GoogleGenAI,$=this.getConfig();if(typeof J!=="function")return Z;let X=function(...Y){if(mZ(A7))return Reflect.construct(J,Y);let Q=Reflect.construct(J,Y),W=l(),K=Boolean(W?.getOptions().sendDefaultPii),z=$,G=z?.recordInputs??K,H=z?.recordOutputs??K;return SL(Q,{recordInputs:G,recordOutputs:H})};Object.setPrototypeOf(X,J),Object.setPrototypeOf(X.prototype,J.prototype);for(let Y of Object.getOwnPropertyNames(J))if(!["length","name","prototype"].includes(Y)){let Q=Object.getOwnPropertyDescriptor(J,Y);if(Q)Object.defineProperty(X,Y,Q)}return $3(Z,"GoogleGenAI",X),Z}}var R00=s(A7,(Z)=>new MO(Z)),oc0=(Z={})=>{return{name:A7,setupOnce(){R00(Z)}}},q00=k(oc0);var m7=v(V0(),1);var qG=[">=0.1.0 <2.0.0"];function rc0(Z,J){if(!Z)return[J];if(Array.isArray(Z)){if(Z.includes(J))return Z;return[...Z,J]}if(typeof Z==="object")return[Z,J];return Z}function sc0(Z,J,$){return new Proxy(Z,{apply(X,Y,Q){let K=Q[1];if(!K||typeof K!=="object"||Array.isArray(K))K={},Q[1]=K;let z=K.callbacks,G=rc0(z,J);return K.callbacks=G,Reflect.apply(X,Y,Q)}})}class TO extends m7.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-langchain",I0,Z)}init(){let Z=[],J=["@langchain/anthropic","@langchain/openai","@langchain/google-genai","@langchain/mistralai","@langchain/google-vertexai","@langchain/groq"];for(let $ of J)Z.push(new m7.InstrumentationNodeModuleDefinition($,qG,this._patch.bind(this),(X)=>X,[new m7.InstrumentationNodeModuleFile(`${$}/dist/index.cjs`,qG,this._patch.bind(this),(X)=>X)]));return Z.push(new m7.InstrumentationNodeModuleDefinition("langchain",qG,this._patch.bind(this),($)=>$,[new m7.InstrumentationNodeModuleFile("langchain/dist/chat_models/universal.cjs",qG,this._patch.bind(this),($)=>$)])),Z}_patch(Z){XL([M7,T7,A7]);let J=l(),$=Boolean(J?.getOptions().sendDefaultPii),X=this.getConfig(),Y=X?.recordInputs??$,Q=X?.recordOutputs??$,W=rK({recordInputs:Y,recordOutputs:Q});return this._patchRunnableMethods(Z,W),Z}_patchRunnableMethods(Z,J){let $=["ChatAnthropic","ChatOpenAI","ChatGoogleGenerativeAI","ChatMistralAI","ChatVertexAI","ChatGroq","ConfigurableModel"],X=Z.universal_exports??Z,Y=Object.values(X).find((K)=>{return typeof K==="function"&&$.includes(K.name)});if(!Y)return;let Q=Y.prototype,W=["invoke","stream","batch"];for(let K of W){let z=Q[K];if(typeof z==="function")Q[K]=sc0(z,J)}}}var C00=s(oK,(Z)=>new TO(Z)),tc0=(Z={})=>{return{name:oK,setupOnce(){C00(Z)}}},E00=k(tc0);var HX=v(V0(),1);var P00=[">=0.0.0 <2.0.0"];class AO extends HX.InstrumentationBase{constructor(Z={}){super("@sentry/instrumentation-langgraph",I0,Z)}init(){return new HX.InstrumentationNodeModuleDefinition("@langchain/langgraph",P00,this._patch.bind(this),(J)=>J,[new HX.InstrumentationNodeModuleFile("@langchain/langgraph/dist/index.cjs",P00,this._patch.bind(this),(J)=>J)])}_patch(Z){let J=l(),$=Boolean(J?.getOptions().sendDefaultPii),X=this.getConfig(),Y=X.recordInputs??$,Q=X.recordOutputs??$,W={recordInputs:Y,recordOutputs:Q};if(Z.StateGraph&&typeof Z.StateGraph==="function"){let K=Z.StateGraph;K.prototype.compile=xL(K.prototype.compile,W)}return Z}}var I00=s(sK,(Z)=>new AO(Z)),ec0=(Z={})=>{return{name:sK,setupOnce(){I00(Z)}}},S00=k(ec0);var g00=v(V0(),1);var D9=v(g(),1),O9=v(V0(),1),Q8=v(e0(),1);import*as k00 from"net";function x00(Z,J,$,X,Y){let W=()=>{},K=Y.firestoreSpanCreationHook;if(typeof K==="function")W=(H)=>{O9.safeExecuteInTheMiddle(()=>K(H),(V)=>{if(!V)return;D9.diag.error(V?.message)},!0)};let z=new O9.InstrumentationNodeModuleDefinition("@firebase/firestore",J,(H)=>y00(H,$,X,Z,W)),G=["@firebase/firestore/dist/lite/index.node.cjs.js","@firebase/firestore/dist/lite/index.node.mjs.js","@firebase/firestore/dist/lite/index.rn.esm2017.js","@firebase/firestore/dist/lite/index.cjs.js"];for(let H of G)z.files.push(new O9.InstrumentationNodeModuleFile(H,J,(V)=>y00(V,$,X,Z,W),(V)=>v00(V,X)));return z}function y00(Z,J,$,X,Y){return v00(Z,$),J(Z,"addDoc",Zl0(X,Y)),J(Z,"getDocs",$l0(X,Y)),J(Z,"setDoc",Xl0(X,Y)),J(Z,"deleteDoc",Jl0(X,Y)),Z}function v00(Z,J){for(let $ of["addDoc","getDocs","setDoc","deleteDoc"])if(O9.isWrapped(Z[$]))J(Z,$);return Z}function Zl0(Z,J){return function(X){return function(Y,Q){let W=EG(Z,"addDoc",Y);return J(W),CG(W,()=>{return X(Y,Q)})}}}function Jl0(Z,J){return function(X){return function(Y){let Q=EG(Z,"deleteDoc",Y.parent||Y);return J(Q),CG(Q,()=>{return X(Y)})}}}function $l0(Z,J){return function(X){return function(Y){let Q=EG(Z,"getDocs",Y);return J(Q),CG(Q,()=>{return X(Y)})}}}function Xl0(Z,J){return function(X){return function(Y,Q,W){let K=EG(Z,"setDoc",Y.parent||Y);return J(K),CG(K,()=>{return typeof W<"u"?X(Y,Q,W):X(Y,Q)})}}}function CG(Z,J){return D9.context.with(D9.trace.setSpan(D9.context.active(),Z),()=>{return O9.safeExecuteInTheMiddle(()=>{return J()},($)=>{if($)Z.recordException($);Z.end()},!0)})}function EG(Z,J,$){let X=Z.startSpan(`${J} ${$.path}`,{kind:D9.SpanKind.CLIENT});return Ql0(X,$),X.setAttribute(Q8.ATTR_DB_OPERATION_NAME,J),X}function Yl0(Z){let J,$;if(typeof Z.host==="string")if(Z.host.startsWith("[")){if(Z.host.endsWith("]"))J=Z.host.replace(/^\[|\]$/g,"");else if(Z.host.includes("]:")){let X=Z.host.lastIndexOf(":");if(X!==-1)J=Z.host.slice(1,X).replace(/^\[|\]$/g,""),$=Z.host.slice(X+1)}}else if(k00.isIPv6(Z.host))J=Z.host;else{let X=Z.host.lastIndexOf(":");if(X!==-1)J=Z.host.slice(0,X),$=Z.host.slice(X+1);else J=Z.host}return{address:J,port:$?parseInt($,10):void 0}}function Ql0(Z,J){let $=J.firestore.app,X=$.options,Q=(J.firestore.toJSON()||{}).settings||{},W={[Q8.ATTR_DB_COLLECTION_NAME]:J.path,[Q8.ATTR_DB_NAMESPACE]:$.name,[Q8.ATTR_DB_SYSTEM_NAME]:"firebase.firestore","firebase.firestore.type":J.type,"firebase.firestore.options.projectId":X.projectId,"firebase.firestore.options.appId":X.appId,"firebase.firestore.options.messagingSenderId":X.messagingSenderId,"firebase.firestore.options.storageBucket":X.storageBucket},{address:K,port:z}=Yl0(Q);if(K)W[Q8.ATTR_SERVER_ADDRESS]=K;if(z)W[Q8.ATTR_SERVER_PORT]=z;Z.setAttributes(W)}var w5=v(g(),1),_9=v(V0(),1);function h00(Z,J,$,X,Y){let Q=()=>{},W=()=>{},K=Y.functions?.errorHook,z=Y.functions?.requestHook,G=Y.functions?.responseHook;if(typeof G==="function")W=(F,B)=>{_9.safeExecuteInTheMiddle(()=>G(F,B),(U)=>{if(!U)return;w5.diag.error(U?.message)},!0)};if(typeof z==="function")Q=(F)=>{_9.safeExecuteInTheMiddle(()=>z(F),(B)=>{if(!B)return;w5.diag.error(B?.message)},!0)};let H=new _9.InstrumentationNodeModuleDefinition("firebase-functions",J);return[{name:"firebase-functions/lib/v2/providers/https.js",triggerType:"function"},{name:"firebase-functions/lib/v2/providers/firestore.js",triggerType:"firestore"},{name:"firebase-functions/lib/v2/providers/scheduler.js",triggerType:"scheduler"},{name:"firebase-functions/lib/v2/storage.js",triggerType:"storage"}].forEach(({name:F,triggerType:B})=>{H.files.push(new _9.InstrumentationNodeModuleFile(F,J,(U)=>Wl0(U,$,X,Z,{requestHook:Q,responseHook:W,errorHook:K},B),(U)=>f00(U,X)))}),H}function a4(Z,J,$){return function(Y){return function(...Q){let W=typeof Q[0]==="function"?Q[0]:Q[1],K=typeof Q[0]==="function"?void 0:Q[0];if(!W)return Y.call(this,...Q);let z=async function(...G){let H=process.env.FUNCTION_TARGET||process.env.K_SERVICE||"unknown",V=Z.startSpan(`firebase.function.${$}`,{kind:w5.SpanKind.SERVER}),F={"faas.name":H,"faas.trigger":$,"faas.provider":"firebase"};if(process.env.GCLOUD_PROJECT)F["cloud.project_id"]=process.env.GCLOUD_PROJECT;if(process.env.EVENTARC_CLOUD_EVENT_SOURCE)F["cloud.event_source"]=process.env.EVENTARC_CLOUD_EVENT_SOURCE;return V.setAttributes(F),J?.requestHook?.(V),w5.context.with(w5.trace.setSpan(w5.context.active(),V),async()=>{let B,U;try{U=await W.apply(this,G)}catch(L){B=L}if(J?.responseHook?.(V,B),B)V.recordException(B);if(V.end(),B)throw await J?.errorHook?.(V,B),B;return U})};if(K)return Y.call(this,K,z);else return Y.call(this,z)}}}function Wl0(Z,J,$,X,Y,Q){switch(f00(Z,$),Q){case"function":J(Z,"onRequest",a4(X,Y,"http.request")),J(Z,"onCall",a4(X,Y,"http.call"));break;case"firestore":J(Z,"onDocumentCreated",a4(X,Y,"firestore.document.created")),J(Z,"onDocumentUpdated",a4(X,Y,"firestore.document.updated")),J(Z,"onDocumentDeleted",a4(X,Y,"firestore.document.deleted")),J(Z,"onDocumentWritten",a4(X,Y,"firestore.document.written")),J(Z,"onDocumentCreatedWithAuthContext",a4(X,Y,"firestore.document.created")),J(Z,"onDocumentUpdatedWithAuthContext",a4(X,Y,"firestore.document.updated")),J(Z,"onDocumentDeletedWithAuthContext",a4(X,Y,"firestore.document.deleted")),J(Z,"onDocumentWrittenWithAuthContext",a4(X,Y,"firestore.document.written"));break;case"scheduler":J(Z,"onSchedule",a4(X,Y,"scheduler.scheduled"));break;case"storage":J(Z,"onObjectFinalized",a4(X,Y,"storage.object.finalized")),J(Z,"onObjectArchived",a4(X,Y,"storage.object.archived")),J(Z,"onObjectDeleted",a4(X,Y,"storage.object.deleted")),J(Z,"onObjectMetadataUpdated",a4(X,Y,"storage.object.metadataUpdated"));break}return Z}function f00(Z,J){let $=["onSchedule","onRequest","onCall","onObjectFinalized","onObjectArchived","onObjectDeleted","onObjectMetadataUpdated","onDocumentCreated","onDocumentUpdated","onDocumentDeleted","onDocumentWritten","onDocumentCreatedWithAuthContext","onDocumentUpdatedWithAuthContext","onDocumentDeletedWithAuthContext","onDocumentWrittenWithAuthContext"];for(let X of $)if(_9.isWrapped(Z[X]))J(Z,X);return Z}var b00={},Kl0=[">=3.0.0 <5"],zl0=[">=6.0.0 <7"];class NO extends g00.InstrumentationBase{constructor(Z=b00){super("@sentry/instrumentation-firebase",I0,Z)}setConfig(Z={}){super.setConfig({...b00,...Z})}init(){let Z=[];return Z.push(x00(this.tracer,Kl0,this._wrap,this._unwrap,this.getConfig())),Z.push(h00(this.tracer,zl0,this._wrap,this._unwrap,this.getConfig())),Z}}var m00="Firebase",Gl0={firestoreSpanCreationHook:(Z)=>{Z1(Z,"auto.firebase.otel.firestore"),Z.setAttribute(G0,"db.query")},functions:{requestHook:(Z)=>{Z1(Z,"auto.firebase.otel.functions"),Z.setAttribute(G0,"http.request")},errorHook:async(Z,J)=>{if(J)F0(J,{mechanism:{type:"auto.firebase.otel.functions",handled:!1}}),await PK(2000)}}},u00=s(m00,()=>new NO(Gl0)),Hl0=()=>{return{name:m00,setupOnce(){u00()}}},d00=k(Hl0);function XQ(){return[cp(),Ii(),wn(),Ft(),Ea(),sa(),Oo(),go(),cr(),Ts(),bs(),Gt(),gt(),Ge(),Ie(),ce(),nn(),D00(),za(),E00(),S00(),w00(),M00(),A00(),q00(),Cs(),d00()]}var VX=v(g(),1);var FX=v(e0(),1);var RO=1e6;function c00(Z,J={}){if(Z.getOptions().debug)y2();let[$,X]=Vl0(Z,J);Z.traceProvider=$,Z.asyncLocalStorageLookup=X}function Vl0(Z,J={}){let $=new _z({sampler:new O2(Z),resource:K3().merge(Fz({[FX.ATTR_SERVICE_NAME]:"node",[FX.SEMRESATTRS_SERVICE_NAMESPACE]:"sentry",[FX.ATTR_SERVICE_VERSION]:I0})),forceFlushTimeoutMillis:500,spanProcessors:[new D2({timeout:Fl0(Z.getOptions().maxSpanWaitDuration)}),...J.spanProcessors||[]]});VX.trace.setGlobalTracerProvider($),VX.propagation.setGlobalPropagator(new L2);let X=new Rz;return VX.context.setGlobalContextManager(X),[$,X.getAsyncLocalStorageLookup()]}function Fl0(Z){if(Z==null)return;if(Z>RO)return k1&&T.warn(`\`maxSpanWaitDuration\` is too high, using the maximum value of ${RO}`),RO;else if(Z<=0||Number.isNaN(Z)){k1&&T.warn("`maxSpanWaitDuration` must be a positive number, using default value instead.");return}return Z}function l00(){return Iz().filter((J)=>J.name!=="Http"&&J.name!=="NodeFetch").concat(A3(),R3())}function p00(Z){return[...l00(),...T1(Z)?XQ():[]]}function qO(Z={}){return Bl0(Z,p00)}function Bl0(Z={},J){$9(Z,"node");let $=d2({...Z,defaultIntegrations:Z.defaultIntegrations??J(Z)});if($&&!Z.skipOpenTelemetrySetup)c00($,{spanProcessors:Z.openTelemetrySpanProcessors}),Sz();return $}import*as r00 from"os";var Ul0="BunServer",Ll0=()=>{return{name:Ul0,setupOnce(){Dl0()}}},a00=k(Ll0),i00=!1;function Dl0(){if(i00)return;Bun.serve=new Proxy(Bun.serve,{apply(Z,J,$){n00($[0]);let X=Z.apply(J,$),Y=X.reload.bind(X);return X.reload=(Q)=>{return n00(Q),Y(Q)},X}}),i00=!0}function n00(Z){Ol0(Z),_l0(Z)}function Ol0(Z){if(typeof Z.fetch!=="function")return;Z.fetch=new Proxy(Z.fetch,{apply(J,$,X){return CO(J,$,X)}})}function _l0(Z){if(!Z.routes)return;if(typeof Z.routes!=="object")return;Object.keys(Z.routes).forEach((J)=>{let $=Z.routes[J];if(typeof $==="function")Z.routes[J]=new Proxy($,{apply:(X,Y,Q)=>{return CO(X,Y,Q,J)}});if($ instanceof Response)return;if(typeof $==="object")Object.entries($).forEach(([X,Y])=>{if(typeof Y==="function")Z.routes[J][X]=new Proxy(Y,{apply:(Q,W,K)=>{return CO(Q,W,K,J)}})})})}function CO(Z,J,$,X){return PZ((Y)=>{let Q=$[0],W=Q.method.toUpperCase();if(W==="OPTIONS"||W==="HEAD")return Z.apply(J,$);let K=lY(Q.url),z=wl0(K,Q),G=K?.pathname||"/";if(Q.params){if(Object.keys(Q.params).forEach((H)=>{z[`url.path.parameter.${H}`]=Q.params[H]}),X)z[M1]="route",z["url.template"]=X,G=X}if(X?.endsWith("/*"))z[M1]="route",z["url.template"]=X,G=X;return Object.assign(z,D$(Q.headers.toJSON(),l()?.getOptions().sendDefaultPii??!1)),Y.setSDKProcessingMetadata({normalizedRequest:{url:Q.url,method:Q.method,headers:Q.headers.toJSON(),query_string:K?.search}}),qK({sentryTrace:Q.headers.get("sentry-trace")??"",baggage:Q.headers.get("baggage")},()=>q6({attributes:z,op:"http.server",name:`${Q.method} ${G}`},async(H)=>{try{let V=await Z.apply(J,$);if(V?.status)HK(H,V.status),Y.setContext("response",{headers:V.headers.toJSON(),status_code:V.status});return V}catch(V){throw F0(V,{mechanism:{type:"auto.http.bun.serve",handled:!1}}),V}}))})}function wl0(Z,J){let $={[X0]:"auto.http.bun.serve",[SU]:J.method||"GET",[M1]:"url"};if(Z){if(Z.search)$["url.query"]=Z.search;if(Z.hash)$["url.fragment"]=Z.hash;if(Z.pathname)$["url.path"]=Z.pathname;if(!QL(Z)){if($["url.full"]=Z.href,Z.port)$["url.port"]=Z.port;if(Z.protocol)$["url.scheme"]=Z.protocol;if(Z.hostname)$["url.domain"]=Z.hostname}}return $}function o00(Z){function J($){let X={body:$.body,method:"POST",headers:Z.headers};try{return G7(()=>{return fetch(Z.url,X).then((Y)=>{return{statusCode:Y.status,headers:{"x-sentry-rate-limits":Y.headers.get("X-Sentry-Rate-Limits"),"retry-after":Y.headers.get("Retry-After")}}})})}catch(Y){return Promise.reject(Y)}}return gZ(Z,J)}function s00(Z){return[_$(),O$(),w$(),j$(),M$(),A3(),R3(),p$(),i$(),c$(),d$(),l$(),a00(),...T1(Z)?XQ():[]]}function EO(Z={}){$9(Z,"bun");let J={...Z,platform:"javascript",runtime:{name:"bun",version:Bun.version},serverName:Z.serverName||global.process.env.SENTRY_NAME||r00.hostname()};if(J.transport=J.transport||o00,J.defaultIntegrations===void 0)J.defaultIntegrations=s00(J);return qO(J)}EO({dsn:"https://f0ba950f2a01c32d24ccd8711de778be@o4510345514123264.ingest.us.sentry.io/4510346875043848",tracesSampleRate:1,sendDefaultPii:!1});import{readFileSync as t00}from"fs";import{join as e00}from"path";function T4(){return"3.1.0-beta.4"}function PO(Z){let[J,$]=Z.split("-"),X=(J||"0.0.0").split(".").map(Number),Y=null,Q=0;if($){let W=$.match(/^([a-z]+)\.?(\d+)?$/i);if(W)Y=W[1]||null,Q=parseInt(W[2]||"0",10);else Y=$}return{major:X[0]||0,minor:X[1]||0,patch:X[2]||0,preRelease:Y,preReleaseNum:Q}}function w9(Z){let J=PO(Z);if(!J.preRelease)return"stable";if(J.preRelease.startsWith("alpha"))return"alpha";return"beta"}function YQ(Z,J){try{let $=PO(Z),X=PO(J);if($.major>X.major)return!1;if($.major<X.major)return!1;if(X.preRelease&&!$.preRelease)return!1;if(!X.preRelease&&$.preRelease)return!1;if(X.preRelease&&$.preRelease){if($.minor<X.minor)return!1;if($.minor>X.minor)return!0;if($.patch>X.patch)return!0;if($.patch<X.patch)return!1;return $.preReleaseNum>X.preReleaseNum}if($.minor>X.minor)return!0;if($.minor<X.minor)return!1;if($.patch>X.patch)return!0;return!1}catch($){return!1}}import{parseArgs as Ml0}from"util";var Tl0={debug:{type:"boolean",short:"d",default:!1,description:"Enable debug logging"},"mqtt-port":{type:"string",default:"8884",description:"MQTT broker port"},"terminal-port":{type:"string",default:"3001",description:"Terminal server port"},"router-port":{type:"string",default:"8883",description:"Router port"},username:{type:"string",short:"u",description:"MQTT broker username (required)"},password:{type:"string",short:"p",description:"MQTT broker password (required)"},"ngrok-token":{type:"string",description:"ngrok authentication token (optional)"},"ngrok-domain":{type:"string",description:"ngrok static domain (optional, paid plan)"},"no-auto-update":{type:"boolean",default:!1,description:"Disable auto-update checking"},"terminal-audit":{type:"boolean",default:!1,description:"Enable terminal input audit logging (logs commands, not output)"},"auto-update-check-interval":{type:"string",default:"60",description:"Auto-update check interval in minutes (default: 60)"},help:{type:"boolean",short:"h",default:!1,description:"Show help message"},version:{type:"boolean",short:"v",default:!1,description:"Show version"}};function Z10(){let Z=Ml0({options:Tl0,allowPositionals:!1,strict:!0});if(Z.values.version)console.log(`ccc v${T4()}`),process.exit(0);if(Z.values.help)Al0(),process.exit(0);let J=process.env.CCC_USERNAME||Z.values.username,$=process.env.CCC_PASSWORD||Z.values.password,X=process.env.CCC_NGROK_TOKEN||Z.values["ngrok-token"],Y=process.env.CCC_NGROK_DOMAIN||Z.values["ngrok-domain"];if(!J||!$)console.error("\x1B[31mError: Authentication credentials are required.\x1B[0m"),console.error(""),console.error("These credentials secure the MQTT communication between the app and backend."),console.error(""),console.error("You can provide them via:"),console.error(""),console.error(" Environment variables (recommended for security):"),console.error(" export CCC_USERNAME=myuser"),console.error(" export CCC_PASSWORD=mypassword"),console.error(" export CCC_NGROK_TOKEN=your_token # optional"),console.error(" export CCC_NGROK_DOMAIN=your_domain # optional"),console.error(" ccc"),console.error(""),console.error(" Or CLI arguments:"),console.error(" ccc --username myuser --password mypassword"),console.error(" ccc -u myuser -p mypassword"),console.error(""),process.exit(1);return{debug:Z.values.debug,mqttPort:parseInt(Z.values["mqtt-port"],10),terminalPort:parseInt(Z.values["terminal-port"],10),routerPort:parseInt(Z.values["router-port"],10),username:J,password:$,ngrokToken:X,ngrokDomain:Y,autoUpdate:!Z.values["no-auto-update"],autoUpdateCheckInterval:parseInt(Z.values["auto-update-check-interval"],10),terminalAudit:Z.values["terminal-audit"]}}function Al0(){console.log(`
54
54
  Backend v2 - Clean modular architecture
55
55
 
56
56
  Usage:
@@ -2405,4 +2405,4 @@ ${O.description}
2405
2405
 
2406
2406
  This is a built-in style. Built-in styles cannot be edited.`,rawContent:"",keepCodingInstructions:!1,lastModified:new Date().toISOString()},timestamp:Date.now()};await this.publishResponse(Y,j,X),this.requestsHandled++;return}let Q=this.getOutputStylesDir($.scope,$.projectPath),W=U4.join(Q,`${$.styleName}.md`),K=U4.resolve(W).toLowerCase().replace(/\\/g,"/"),z=U4.resolve(Q).toLowerCase().replace(/\\/g,"/");if(!K.startsWith(z))throw N8.warn("[OutputStyles] Path security check failed",{resolvedPath:K,resolvedBase:z,styleName:$.styleName,scope:$.scope}),Error("Invalid style path");let G=await U1(W);if(G===null)throw Error("Style file not found or unreadable");let H=await R8.stat(W),{frontmatter:V,body:F}=this.parseFrontmatter(G),B=await this.readActiveStyle($.scope,$.projectPath),L={style:{name:$.styleName,displayName:V?.name||$.styleName,description:V?.description||"",scope:$.scope,projectPath:$.projectPath,isActive:B===$.styleName,content:F,rawContent:G,keepCodingInstructions:V?.keepCodingInstructions??!1,lastModified:H.mtime.toISOString()},timestamp:Date.now()};await this.publishResponse(Y,L,X)}catch(Q){let W={timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){N8.error("[OutputStyles] Error handling read style request",{error:this.formatError(J)})}}async handleWriteStyleRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("output-styles/write",X);try{let Q=this.getOutputStylesDir($.scope,$.projectPath);if(!/^[a-z][a-z0-9_-]*$/i.test($.styleName))throw Error("Invalid style name. Use only letters, numbers, hyphens, and underscores.");let W=U4.join(Q,`${$.styleName}.md`),K=U4.resolve(W),z=U4.resolve(Q);if(!K.startsWith(z))throw Error("Invalid style path");await R8.mkdir(Q,{recursive:!0});let H=this.generateFrontmatter({name:$.displayName,description:$.description,keepCodingInstructions:$.keepCodingInstructions})+`
2407
2407
 
2408
- `+$.content;await R8.writeFile(W,H,"utf-8");let V={success:!0,styleName:$.styleName,scope:$.scope,timestamp:Date.now()};await this.publishResponse(Y,V,X)}catch(Q){let W={success:!1,styleName:$.styleName,scope:$.scope,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){N8.error("[OutputStyles] Error handling write style request",{error:this.formatError(J)})}}async handleDeleteStyleRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("output-styles/delete",X);try{let Q=this.getOutputStylesDir($.scope,$.projectPath),W=U4.join(Q,`${$.styleName}.md`),K=U4.resolve(W),z=U4.resolve(Q);if(!K.startsWith(z))throw Error("Invalid style path");if(await R8.unlink(W),await this.readActiveStyle($.scope,$.projectPath)===$.styleName)await this.setActiveStyle($.scope,"default",$.projectPath);let H={success:!0,styleName:$.styleName,scope:$.scope,timestamp:Date.now()};await this.publishResponse(Y,H,X)}catch(Q){let W={success:!1,styleName:$.styleName,scope:$.scope,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){N8.error("[OutputStyles] Error handling delete style request",{error:this.formatError(J)})}}async handleSetActiveStyleRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("output-styles/set-active",X);try{await this.setActiveStyle($.scope,$.styleName,$.projectPath);let Q={success:!0,styleName:$.styleName,scope:$.scope,timestamp:Date.now()};await this.publishResponse(Y,Q,X)}catch(Q){let W={success:!1,styleName:$.styleName,scope:$.scope,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){N8.error("[OutputStyles] Error handling set active style request",{error:this.formatError(J)})}}}import*as L4 from"fs/promises";import*as l1 from"path";var{$:l9}=globalThis.Bun;XZ();var f1=y(),PW={name:"claude-plugins-official",source:{source:"github",repo:"anthropics/claude-plugins-official"}};class tV extends J1{name="Plugins Service";openCodeService;constructor(Z){super();this.openCodeService=Z}get logPrefix(){return"[Plugins]"}getStatus(){return{...super.getStatus()}}async onStart(){await this.ensureDirectories()}registerMQTTHandlers(){this.registerHandler("plugins/marketplaces/list/request",(Z,J)=>{this.handleListMarketplacesRequest(J)}),this.registerHandler("plugins/list/request",(Z,J)=>{this.handleListPluginsRequest(J)}),this.registerHandler("plugins/read/request",(Z,J)=>{this.handleReadPluginRequest(J)}),this.registerHandler("plugins/install/request",(Z,J)=>{this.handleInstallPluginRequest(J)}),this.registerHandler("plugins/uninstall/request",(Z,J)=>{this.handleUninstallPluginRequest(J)}),this.registerHandler("plugins/toggle/request",(Z,J)=>{this.handleTogglePluginRequest(J)}),this.registerHandler("plugins/marketplace/add/request",(Z,J)=>{this.handleAddMarketplaceRequest(J)}),this.registerHandler("plugins/marketplace/remove/request",(Z,J)=>{this.handleRemoveMarketplaceRequest(J)}),this.registerHandler("plugins/marketplace/refresh/request",(Z,J)=>{this.handleRefreshMarketplaceRequest(J)}),f1.info("[Plugins] MQTT handlers registered")}getPluginsDir(){return f9.getPluginsDir("user")}getMarketplaceCacheDir(){return f9.getMarketplaceCacheDir()}getSettingsPath(){return f9.getUserConfigPath("settings")}getInstalledPluginsJsonPath(){return l1.join(this.getPluginsDir(),"installed_plugins.json")}getOpenCodeConfigPath(){return p5()}getPluginCacheDir(){return l1.join(this.getPluginsDir(),"cache")}async ensureDirectories(){let Z=[this.getPluginsDir(),this.getPluginCacheDir(),this.getMarketplaceCacheDir()];for(let J of Z)await L4.mkdir(J,{recursive:!0})}normalizeOpenCodePlugins(Z){return(Array.isArray(Z.plugin)?Z.plugin:Array.isArray(Z.plugins)?Z.plugins:[]).filter(Boolean)}async listOpenCodePlugins(){let Z=this.getOpenCodeConfigPath(),J=await s1(Z);return this.normalizeOpenCodePlugins(J).map((X)=>{if(typeof X==="string")return{name:X,displayName:X,description:"",marketplaceName:"opencode",isInstalled:!0,isEnabled:!0,source:X,provider:"opencode"};let Y=X.name;return{name:Y,displayName:Y,description:X.description||"",version:X.version,author:X.author,category:X.category,tags:X.tags,marketplaceName:"opencode",isInstalled:!0,isEnabled:X.enabled!==!1,source:X.source||Y,provider:"opencode"}}).filter((X)=>!!X.name)}async readOpenCodePlugin(Z){let J=this.getOpenCodeConfigPath(),$=await s1(J),Y=this.normalizeOpenCodePlugins($).find((Q)=>typeof Q==="string"?Q===Z:Q.name===Z);if(!Y)return null;if(typeof Y==="string")return{name:Y,displayName:Y,description:"",marketplaceName:"opencode",isInstalled:!0,isEnabled:!0,source:Y,provider:"opencode",hasCommands:!1,hasSkills:!1,hasAgents:!1,hasHooks:!1,hasMcpServers:!1,hasLspServers:!1};return{name:Y.name,displayName:Y.name,description:Y.description||"",version:Y.version,author:Y.author,category:Y.category,tags:Y.tags,marketplaceName:"opencode",isInstalled:!0,isEnabled:Y.enabled!==!1,source:Y.source||Y.name,provider:"opencode",hasCommands:!1,hasSkills:!1,hasAgents:!1,hasHooks:!1,hasMcpServers:!1,hasLspServers:!1}}async setOpenCodePluginEnabled(Z,J){let $=this.getOpenCodeConfigPath(),X=await s1($),Y=this.normalizeOpenCodePlugins(X),Q=Y.findIndex((W)=>typeof W==="string"?W===Z:W.name===Z);if(J){if(Q===-1)Y.push(Z);else if(typeof Y[Q]!=="string")Y[Q]={...Y[Q],enabled:!0,name:Z}}else if(Q!==-1){let W=Y[Q];if(typeof W==="string")Y.splice(Q,1);else Y[Q]={...W,enabled:!1,name:Z}}await A8($,{...X,plugin:Y})}async readSettings(){return await c9.readConfigOrEmpty(this.getSettingsPath())}async writeSettings(Z){await c9.writeConfig(this.getSettingsPath(),Z)}async getEnabledPlugins(){return(await this.readSettings()).enabledPlugins||{}}async setPluginEnabled(Z,J){let $=await this.readSettings();if(!$.enabledPlugins)$.enabledPlugins={};$.enabledPlugins[Z]=J,await this.writeSettings($)}async getKnownMarketplaces(){let J=(await this.readSettings()).extraKnownMarketplaces||{},$={};for(let[X,Y]of Object.entries(J))if(typeof Y==="object"&&Y!==null&&"source"in Y)$[X]=Y.source;else $[X]=Y;return $}async addKnownMarketplace(Z,J){let $=await this.readSettings();if(!$.extraKnownMarketplaces)$.extraKnownMarketplaces={};$.extraKnownMarketplaces[Z]={source:J},await this.writeSettings($)}async removeKnownMarketplace(Z){let J=await this.readSettings();if(J.extraKnownMarketplaces)delete J.extraKnownMarketplaces[Z],await this.writeSettings(J)}async readInstalledPluginsJson(){let Z=this.getInstalledPluginsJsonPath(),J=await U1(Z);if(!J)return{version:2,plugins:{}};try{let $=JSON.parse(J);return{version:$.version||2,plugins:$.plugins||{}}}catch($){return f1.warn("[Plugins] Failed to parse installed_plugins.json, returning empty",$),{version:2,plugins:{}}}}async writeInstalledPluginsJson(Z){let J=this.getInstalledPluginsJsonPath();await L4.writeFile(J,JSON.stringify(Z,null,2),"utf-8")}async addInstalledPluginRecord(Z,J){let $=await this.readInstalledPluginsJson();if(!$.plugins[Z])$.plugins[Z]=[];let X=$.plugins[Z].findIndex((Y)=>Y.scope===J.scope);if(X>=0)$.plugins[Z][X]=J;else $.plugins[Z].push(J);await this.writeInstalledPluginsJson($)}async removeInstalledPluginRecord(Z,J){let $=await this.readInstalledPluginsJson();if(!$.plugins[Z])return;if(J){if($.plugins[Z]=$.plugins[Z].filter((X)=>X.scope!==J),$.plugins[Z].length===0)delete $.plugins[Z]}else delete $.plugins[Z];await this.writeInstalledPluginsJson($)}async getInstalledPluginRecord(Z){let $=(await this.readInstalledPluginsJson()).plugins[Z];if(!$||$.length===0)return null;return $[0]??null}getMarketplaceCachePath(Z){return l1.join(this.getMarketplaceCacheDir(),Z)}async fetchMarketplace(Z,J){let $=this.getMarketplaceCachePath(Z);try{if(typeof J==="object"&&J.source==="github"){let Q=`https://github.com/${J.repo}.git`,W=J.ref||"main";if(await Z6($))await l9`git -C ${$} fetch origin ${W}`.quiet(),await l9`git -C ${$} reset --hard origin/${W}`.quiet();else await l9`git clone --depth 1 --branch ${W} ${Q} ${$}`.quiet()}else if(typeof J==="object"&&J.source==="url"){let Q=J.url,W=J.ref||"main";if(await Z6($))await l9`git -C ${$} fetch origin ${W}`.quiet(),await l9`git -C ${$} reset --hard origin/${W}`.quiet();else await l9`git clone --depth 1 --branch ${W} ${Q} ${$}`.quiet()}else if(typeof J==="string")return f1.warn("[Plugins] Relative path source not supported for marketplaces"),null;let X=l1.join($,".claude-plugin","marketplace.json"),Y=await U1(X);if(!Y){let Q=l1.join($,"marketplace.json"),W=await U1(Q);if(W)return JSON.parse(W);return f1.warn(`[Plugins] No marketplace.json found for ${Z}`),null}return JSON.parse(Y)}catch(X){return f1.error(`[Plugins] Failed to fetch marketplace ${Z}`,X),null}}async parseMarketplace(Z){let J=this.getMarketplaceCachePath(Z),$=l1.join(J,".claude-plugin","marketplace.json"),X=await U1($);if(!X)$=l1.join(J,"marketplace.json"),X=await U1($);if(!X)return null;try{return JSON.parse(X)}catch(Y){return f1.error(`[Plugins] Failed to parse marketplace.json for ${Z}`,Y),null}}async marketplacePluginToEntry(Z,J,$,X){let Y=`${Z.name}@${J}`;return{name:Z.name,displayName:Z.name,description:Z.description||"",version:Z.version,author:Z.author?.name,category:Z.category,tags:Z.tags,marketplaceName:J,isInstalled:X.has(Y),isEnabled:$[Y]??!1,source:Z.source,provider:"claude"}}async getAllMarketplaces(){let Z=await this.getKnownMarketplaces(),J=[{name:PW.name,source:PW.source,isOfficial:!0}];for(let[$,X]of Object.entries(Z))J.push({name:$,source:X,isOfficial:!1});return J}async getInstalledPlugins(){let Z=new Set,J=await this.readInstalledPluginsJson();for(let[$,X]of Object.entries(J.plugins)){if(!X||X.length===0)continue;for(let Y of X)if(Y.installPath){if(await Z6(Y.installPath)){Z.add($);break}}}return Z}getPluginInstallPath(Z,J,$="1.0.0"){return l1.join(this.getPluginCacheDir(),J,Z,$)}async getPluginInstallPathFromRecord(Z,J){let $=`${Z}@${J}`;return(await this.getInstalledPluginRecord($))?.installPath||null}async getGitCommitSha(Z){try{return(await l9`git -C ${Z} rev-parse HEAD`.quiet()).stdout.toString().trim()||void 0}catch{return}}async installPluginFromMarketplace(Z,J,$="user"){try{let X=await this.parseMarketplace(J);if(!X)return{success:!1,error:"Marketplace not found or not cached"};let Y=X.plugins.find((F)=>F.name===Z);if(!Y)return{success:!1,error:"Plugin not found in marketplace"};let Q=Y.version||"1.0.0",W=this.getPluginInstallPath(Z,J,Q),K=this.getMarketplaceCachePath(J),z=`${Z}@${J}`;await L4.mkdir(l1.dirname(W),{recursive:!0});let G;if(typeof Y.source==="string"){let F=l1.join(K,Y.source);await L4.rm(W,{recursive:!0,force:!0}),await L4.cp(F,W,{recursive:!0}),G=await this.getGitCommitSha(K)}else if(Y.source.source==="github"){let F=`https://github.com/${Y.source.repo}.git`,B=Y.source.ref||"main";await L4.rm(W,{recursive:!0,force:!0}),await l9`git clone --depth 1 --branch ${B} ${F} ${W}`.quiet(),G=await this.getGitCommitSha(W)}else if(Y.source.source==="url"){let F=Y.source.url,B=Y.source.ref||"main";await L4.rm(W,{recursive:!0,force:!0}),await l9`git clone --depth 1 --branch ${B} ${F} ${W}`.quiet(),G=await this.getGitCommitSha(W)}else return{success:!1,error:"Unknown plugin source type"};let H=new Date().toISOString(),V={scope:$,installPath:W,version:Q,installedAt:H,lastUpdated:H,gitCommitSha:G};return await this.addInstalledPluginRecord(z,V),await this.setPluginEnabled(z,!0),f1.info(`[Plugins] Installed ${z} to ${W}`),{success:!0}}catch(X){return f1.error(`[Plugins] Failed to install plugin ${Z}@${J}`,X),{success:!1,error:X instanceof Error?X.message:"Unknown error"}}}async uninstallPlugin(Z,J,$){try{let X=`${Z}@${J}`,Y=await this.getInstalledPluginRecord(X);if(!Y)return{success:!1,error:"Plugin not installed"};if(Y.installPath&&await Z6(Y.installPath))await L4.rm(Y.installPath,{recursive:!0,force:!0});await this.removeInstalledPluginRecord(X,$);let Q=await this.readSettings();if(Q.enabledPlugins&&Q.enabledPlugins[X]!==void 0)delete Q.enabledPlugins[X],await this.writeSettings(Q);return f1.info(`[Plugins] Uninstalled ${X}`),{success:!0}}catch(X){return f1.error(`[Plugins] Failed to uninstall plugin ${Z}@${J}`,X),{success:!1,error:X instanceof Error?X.message:"Unknown error"}}}async readPluginManifest(Z){let J=l1.join(Z,".claude-plugin","plugin.json"),$=await U1(J);if(!$)return null;try{return JSON.parse($)}catch(X){return null}}async getPluginDetail(Z,J){let $=await this.getEnabledPlugins(),X=await this.getInstalledPlugins(),Y=`${Z}@${J}`,W=(await this.parseMarketplace(J))?.plugins.find((_)=>_.name===Z),K=X.has(Y),G=(K?await this.getInstalledPluginRecord(Y):null)?.installPath,H=K&&G?await this.readPluginManifest(G):null,V=!1,F=!1,B=!1,U=!1,L=!1,O=!1;if(K&&G)V=await Z6(l1.join(G,"commands")),F=await Z6(l1.join(G,"skills")),B=await Z6(l1.join(G,"agents")),U=await Z6(l1.join(G,"hooks")),L=await Z6(l1.join(G,".mcp.json"))||await L4.access(l1.join(G,".mcp.json")).then(()=>!0).catch(()=>!1),O=await Z6(l1.join(G,".lsp.json"))||await L4.access(l1.join(G,".lsp.json")).then(()=>!0).catch(()=>!1);return{name:Z,displayName:H?.name||W?.name||Z,description:H?.description||W?.description||"",version:H?.version||W?.version,author:H?.author?.name||W?.author?.name,category:W?.category,tags:W?.tags,marketplaceName:J,isInstalled:K,isEnabled:$[Y]??!1,source:W?.source||Z,provider:"claude",homepage:H?.homepage,repository:H?.repository,license:H?.license,hasCommands:V,hasSkills:F,hasAgents:B,hasHooks:U,hasMcpServers:L,hasLspServers:O,installPath:K?G:void 0}}async handleListMarketplacesRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/marketplaces/list",X);try{if(($.provider||"claude")==="opencode"){let G={marketplaces:[],timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,G,X),this.incrementRequestCount();return}let W=await this.getAllMarketplaces(),K=[];for(let{name:G,source:H,isOfficial:V}of W){let F=await this.parseMarketplace(G),B=0,U,L="Unknown";if(F)B=F.plugins.length,U=F.description,L=F.owner.name;K.push({name:G,description:U,owner:L,source:H,pluginCount:B,isOfficial:V})}let z={marketplaces:K,timestamp:Date.now()};await this.publishResponse(Y,z,X)}catch(Q){let W={marketplaces:[],timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling list marketplaces request",{error:this.formatError(J)})}}async handleListPluginsRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/list",X);try{let Q=$.provider||"claude";if(Q==="opencode"){if($.scope!=="installed"){let F={plugins:[],marketplaceName:$.marketplaceName,timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,F,X),this.incrementRequestCount();return}let V={plugins:await this.listOpenCodePlugins(),marketplaceName:$.marketplaceName,timestamp:Date.now()};await this.publishResponse(Y,V,X),this.incrementRequestCount();return}let W=await this.getEnabledPlugins(),K=await this.getInstalledPlugins(),z=[];if($.scope==="installed")for(let H of K){let V=H.split("@"),F=V[0],B=V[1];if(!F||!B)continue;let U=await this.getPluginDetail(F,B);if(U)z.push({name:U.name,displayName:U.displayName,description:U.description,version:U.version,author:U.author,category:U.category,tags:U.tags,marketplaceName:B,isInstalled:!0,isEnabled:U.isEnabled,source:U.source,provider:Q})}else if($.scope==="marketplace"){let H=await this.getAllMarketplaces(),V=$.marketplaceName?H.filter((F)=>F.name===$.marketplaceName):H;for(let{name:F,source:B}of V){let U=await this.parseMarketplace(F);if(!U&&B)f1.info(`[Plugins] Marketplace cache not found for ${F}, fetching...`),U=await this.fetchMarketplace(F,B);if(!U)continue;for(let L of U.plugins){let O=await this.marketplacePluginToEntry(L,F,W,K);z.push(O)}}}let G={plugins:z,marketplaceName:$.marketplaceName,timestamp:Date.now()};await this.publishResponse(Y,G,X)}catch(Q){let W={plugins:[],timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling list plugins request",{error:this.formatError(J)})}}async handleReadPluginRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/read",X);try{if(($.provider||"claude")==="opencode"){let G={plugin:await this.readOpenCodePlugin($.pluginName)||void 0,timestamp:Date.now()};await this.publishResponse(Y,G,X),this.incrementRequestCount();return}let K={plugin:await this.getPluginDetail($.pluginName,$.marketplaceName)||void 0,timestamp:Date.now()};await this.publishResponse(Y,K,X)}catch(Q){let W={timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling read plugin request",{error:this.formatError(J)})}}async handleInstallPluginRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/install",X);try{if(($.provider||"claude")==="opencode"){let z=await this.installOpenCodePlugin($.pluginName),G={success:z.success,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:z.error,restartRequired:z.success};if(await this.publishResponse(Y,G,X),z.success&&this.openCodeService)this.openCodeService.getProcessManager().restartServer().catch((H)=>{f1.error("[Plugins] Error restarting OpenCode server after plugin install",{error:H instanceof Error?H.message:"Unknown error"})});this.incrementRequestCount();return}let W=await this.installPluginFromMarketplace($.pluginName,$.marketplaceName),K={success:W.success,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:W.error};await this.publishResponse(Y,K,X)}catch(Q){let W={success:!1,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling install plugin request",{error:this.formatError(J)})}}async handleUninstallPluginRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/uninstall",X);try{if(($.provider||"claude")==="opencode"){let z=await this.uninstallOpenCodePlugin($.pluginName),G={success:z.success,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:z.error,restartRequired:z.success};if(await this.publishResponse(Y,G,X),z.success&&this.openCodeService)this.openCodeService.getProcessManager().restartServer().catch((H)=>{f1.error("[Plugins] Error restarting OpenCode server after plugin uninstall",{error:H instanceof Error?H.message:"Unknown error"})});this.incrementRequestCount();return}let W=await this.uninstallPlugin($.pluginName,$.marketplaceName),K={success:W.success,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:W.error};await this.publishResponse(Y,K,X)}catch(Q){let W={success:!1,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling uninstall plugin request",{error:this.formatError(J)})}}async installOpenCodePlugin(Z){try{let J=p5(),$=await s1(J),X=$.plugin||[];if(X.includes(Z))return{success:!0};return X.push(Z),await A8(J,{...$,plugin:X}),{success:!0}}catch(J){return{success:!1,error:J instanceof Error?J.message:"Unknown error"}}}async uninstallOpenCodePlugin(Z){try{let J=p5(),$=await s1(J),X=$.plugin||[],Y=X.indexOf(Z);if(Y===-1)return{success:!0};return X.splice(Y,1),await A8(J,{...$,plugin:X}),{success:!0}}catch(J){return{success:!1,error:J instanceof Error?J.message:"Unknown error"}}}async handleTogglePluginRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/toggle",X);try{if(($.provider||"claude")==="opencode"){await this.setOpenCodePluginEnabled($.pluginName,$.enabled);let z={success:!0,pluginName:$.pluginName,marketplaceName:$.marketplaceName,enabled:$.enabled,timestamp:Date.now()};await this.publishResponse(Y,z,X),this.incrementRequestCount();return}let W=`${$.pluginName}@${$.marketplaceName}`;await this.setPluginEnabled(W,$.enabled);let K={success:!0,pluginName:$.pluginName,marketplaceName:$.marketplaceName,enabled:$.enabled,timestamp:Date.now()};await this.publishResponse(Y,K,X)}catch(Q){let W={success:!1,pluginName:$.pluginName,marketplaceName:$.marketplaceName,enabled:$.enabled,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling toggle plugin request",{error:this.formatError(J)})}}async handleAddMarketplaceRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/marketplace/add",X);try{if(($.provider||"claude")==="opencode"){let V={success:!1,timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,V,X),this.incrementRequestCount();return}let W="temp_"+Date.now();if(typeof $.source==="object"&&$.source.source==="github")W=$.source.repo.split("/").pop()||W;let K=await this.fetchMarketplace(W,$.source);if(!K){let V={success:!1,timestamp:Date.now(),error:"Failed to fetch or parse marketplace"};await this.publishResponse(Y,V,X);return}let z=K.name;if(W!==z){let V=this.getMarketplaceCachePath(W),F=this.getMarketplaceCachePath(z);await L4.rm(F,{recursive:!0,force:!0}),await L4.rename(V,F)}await this.addKnownMarketplace(z,$.source);let H={success:!0,marketplace:{name:z,description:K.description,owner:K.owner.name,source:$.source,pluginCount:K.plugins.length,isOfficial:!1},timestamp:Date.now()};await this.publishResponse(Y,H,X)}catch(Q){let W={success:!1,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling add marketplace request",{error:this.formatError(J)})}}async handleRemoveMarketplaceRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/marketplace/remove",X);try{if(($.provider||"claude")==="opencode"){let K={success:!1,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,K,X),this.incrementRequestCount();return}if($.marketplaceName===PW.name){let K={success:!1,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:"Cannot remove official marketplace"};await this.publishResponse(Y,K,X);return}await this.removeKnownMarketplace($.marketplaceName);let W={success:!0,marketplaceName:$.marketplaceName,timestamp:Date.now()};await this.publishResponse(Y,W,X)}catch(Q){let W={success:!1,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling remove marketplace request",{error:this.formatError(J)})}}async handleRefreshMarketplaceRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/marketplace/refresh",X);try{if(($.provider||"claude")==="opencode"){let G={success:!1,marketplaceName:$.marketplaceName,pluginCount:0,timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,G,X),this.incrementRequestCount();return}let W=null;if($.marketplaceName===PW.name)W=PW.source;else W=(await this.getKnownMarketplaces())[$.marketplaceName]||null;if(!W){let G={success:!1,marketplaceName:$.marketplaceName,pluginCount:0,timestamp:Date.now(),error:"Marketplace not found"};await this.publishResponse(Y,G,X);return}let K=await this.fetchMarketplace($.marketplaceName,W);if(!K){let G={success:!1,marketplaceName:$.marketplaceName,pluginCount:0,timestamp:Date.now(),error:"Failed to fetch marketplace"};await this.publishResponse(Y,G,X);return}let z={success:!0,marketplaceName:$.marketplaceName,pluginCount:K.plugins.length,timestamp:Date.now()};await this.publishResponse(Y,z,X)}catch(Q){let W={success:!1,marketplaceName:$.marketplaceName,pluginCount:0,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling refresh marketplace request",{error:this.formatError(J)})}}}import*as EM from"path";import*as LK0 from"os";import*as p9 from"fs";var VZ=y(),CM=EM.join(LK0.homedir(),".ccc"),qM=EM.join(CM,"forwarded-ports.json");class eV extends J1{name="Port Forward Service";get logPrefix(){return"[PortForward]"}ngrokService=null;router=null;forwardedPorts=[];activePort=null;switchQueue=Promise.resolve();setNgrokService(Z){this.ngrokService=Z}setRouter(Z){this.router=Z}async onStart(){let Z=this.loadPersistedData();if(this.forwardedPorts=Z.forwardedPorts,Z.activePort&&this.forwardedPorts.some((J)=>J.projectId===Z.activePort.projectId&&J.port===Z.activePort.port)){let{projectId:J,port:$,ssl:X}=Z.activePort;VZ.info(`[PortForward] Restoring active port ${$} for project ${J}`),this.doSwitch(J,$,X)}VZ.info(`[PortForward] Started with ${this.forwardedPorts.length} persisted ports`)}async onStop(){if(this.router)this.router.clearDefaultRoute()}getStatus(){return{...super.getStatus(),forwardedPorts:[...this.forwardedPorts]}}registerMQTTHandlers(){this.registerHandler("ports/forward/request",async(Z,J)=>{let $=await this.parseMessage(J);if(!$)return;this.handleForward($.data,$.profileId)}),this.registerHandler("ports/remove/request",async(Z,J)=>{let $=await this.parseMessage(J);if(!$)return;this.handleRemove($.data,$.profileId)}),this.registerHandler("ports/list/request",async(Z,J)=>{let $=await this.parseMessage(J);if(!$)return;this.handleList($.data,$.profileId)}),this.registerHandler("ports/switch/request",async(Z,J)=>{let $=await this.parseMessage(J);if(!$)return;this.handleSwitch($.data,$.profileId)})}async handleForward(Z,J){let{projectId:$,ports:X,ssl:Y,portSsl:Q,clientId:W}=Z;for(let G of X){let H=Q?.[String(G)]??Y,V=this.forwardedPorts.findIndex((F)=>F.projectId===$&&F.port===G);if(V>=0)this.forwardedPorts[V].ssl=H;else this.forwardedPorts.push({projectId:$,port:G,ssl:H})}if(!this.activePort&&X.length>0){let G=X[0],H=Q?.[String(G)]??Y??!1;this.doSwitch($,G,H)}this.persistData();let K=this.router?.getStatus().port,z={projectId:$,ports:X,sharedProxyPort:K,status:"ok",timestamp:Date.now()};await this.publishResponse(`ports/forward/${W}/response`,z,J),VZ.info(`[PortForward] Forwarded ports ${X.join(", ")} for project ${$}`)}async handleRemove(Z,J){let{projectId:$,ports:X,clientId:Y}=Z;for(let W of X)this.forwardedPorts=this.forwardedPorts.filter((K)=>!(K.projectId===$&&K.port===W));if(this.activePort&&X.includes(this.activePort.port)&&this.activePort.projectId===$){let W=this.forwardedPorts.filter((K)=>K.projectId===$);if(W.length>0){let K=W[0];this.doSwitch(K.projectId,K.port,K.ssl??!1)}else this.activePort=null,this.router?.clearDefaultRoute()}this.persistData();let Q={projectId:$,ports:X,sharedProxyPort:this.router?.getStatus().port,status:"ok",timestamp:Date.now()};await this.publishResponse(`ports/remove/${Y}/response`,Q,J),VZ.info(`[PortForward] Removed ports ${X.join(", ")} for project ${$}`)}async handleList(Z,J){let{projectId:$,clientId:X}=Z,Y=this.forwardedPorts.filter((W)=>W.projectId===$).map((W)=>W.port),Q={projectId:$,ports:Y,timestamp:Date.now()};await this.publishResponse(`ports/list/${X}/response`,Q,J)}handleSwitch(Z,J){let{projectId:$,port:X,ssl:Y,clientId:Q}=Z;this.switchQueue=this.switchQueue.then(async()=>{try{let W=Y??this.forwardedPorts.find((z)=>z.projectId===$&&z.port===X)?.ssl??!1;this.doSwitch($,X,W);let K={projectId:$,port:X,proxyPort:this.router?.getStatus().port,devTunnelUrl:this.ngrokService?.getUrl()??void 0,status:"ok",timestamp:Date.now()};await this.publishResponse(`ports/switch/${Q}/response`,K,J)}catch(W){VZ.error(`[PortForward] Switch to port ${X} failed`,W);let K={projectId:$,port:X,proxyPort:this.router?.getStatus().port,status:"error",error:W.message||"Switch failed",timestamp:Date.now()};await this.publishResponse(`ports/switch/${Q}/response`,K,J)}})}doSwitch(Z,J,$){if(VZ.info(`[PortForward] Switching to port ${J} (ssl: ${$}) for project ${Z}`),this.router)this.router.setDefaultRoute(`localhost:${J}`,$);this.activePort={projectId:Z,port:J,ssl:$},this.persistData()}loadPersistedData(){try{if(p9.existsSync(qM)){let Z=p9.readFileSync(qM,"utf-8"),J=JSON.parse(Z);if(Array.isArray(J))return{forwardedPorts:J};return{forwardedPorts:J.forwardedPorts||[],activePort:J.activePort||void 0}}}catch(Z){VZ.warn("[PortForward] Failed to load persisted ports, starting fresh",Z)}return{forwardedPorts:[]}}persistData(){try{if(!p9.existsSync(CM))p9.mkdirSync(CM,{recursive:!0});let Z={forwardedPorts:this.forwardedPorts,activePort:this.activePort??void 0};p9.writeFileSync(qM,JSON.stringify(Z,null,2))}catch(Z){VZ.error("[PortForward] Failed to persist ports",Z)}}}var i9=y(),n9="[MQTTHandshake]";class PM{mqttClient;constructor(Z){this.mqttClient=Z}async start(){await x0.generateKeyPair(),this.mqttClient.subscribe("crypto/+/key-exchange",async(Z,J)=>{let X=Z.split("/")[1];try{let{encryptedKey:Y,profileId:Q}=JSON.parse(J.toString());if(!Y){i9.warn(`${n9} Key exchange missing encryptedKey from ${X}`);return}if(!Q){i9.warn(`${n9} Key exchange missing profileId from ${X}`);return}await x0.receiveClientKey(Q,Y),await this.mqttClient.publish(`crypto/${X}/ready`,JSON.stringify({ready:!0}),{qos:1}),i9.info(`${n9} Handshake complete \u2014 key stored under profileId: ${Q} (mqtt: ${X})`)}catch(Y){i9.error(`${n9} Handshake failed for ${X}`,{error:Y instanceof Error?Y.message:String(Y)})}}),this.mqttClient.subscribe("crypto/+/handshake/request",(Z)=>{let J=Z.split("/")[1]||"";i9.debug(`${n9} Handshake requested by ${J}`),this.publishPublicKey(J)}),i9.info(`${n9} Handshake service started`)}publishPublicKey(Z){let J=x0.getRSAPublicKeyPem();if(!J){i9.warn(`${n9} RSA keypair not ready, cannot send public key to ${Z}`);return}this.mqttClient.publish(`crypto/${Z}/handshake`,JSON.stringify({publicKey:J,backendVersion:T4()}),{qos:1}).then(()=>{i9.debug(`${n9} Published RSA public key to ${Z}`)}).catch(($)=>{i9.error(`${n9} Failed to publish public key to ${Z}`,{error:$ instanceof Error?$.message:String($)})})}}class IM{services=[];startedServices=[];logger=y();addService(Z){this.services.push(Z)}addOptionalService(Z,J){if(J)this.services.push(Z)}getServiceByName(Z){return this.services.find((J)=>J.name===Z)}async startAll(){for(let Z of this.services)try{this.logger.debug(`Starting ${Z.name}...`),await Z.start(),this.startedServices.push(Z)}catch(J){throw this.logger.error(`Failed to start ${Z.name}`,J),await this.stopAll(),J}this.logger.info("All services started successfully")}async stopAll(){for(let Z=this.startedServices.length-1;Z>=0;Z--){let J=this.startedServices[Z];try{this.logger.debug(`Stopping ${J?.name}...`),await J?.stop()}catch($){this.logger.error(`Failed to stop ${J?.name}`,$)}}this.startedServices=[],this.logger.info("All services stopped")}getStatus(){return this.services.map((Z)=>Z.getStatus())}printStatus(){let Z=this.getStatus();this.logger.info("=== Backend Status ===");for(let J of Z){let $=J.running?"\u2713":"\u2717";if(this.logger.info(`${$} ${J.name}`),"port"in J&&J.port)this.logger.info(` Port: ${J.port}`);if("routes"in J&&J.routes)this.logger.info(` Routes: ${J.routes.map((X)=>`${X.path}->${X.target}`).join(", ")}`);if(J.startedAt)this.logger.info(` Started: ${J.startedAt.toISOString()}`);if(J.error)this.logger.info(` Error: ${J.error}`)}this.logger.info("=====================")}}import DK0 from"os";function OK0(){let Z=DK0.networkInterfaces(),J=/^(wlan|wlp|wifi|wi-fi|en0)/i,$=/^(eth|enp|en1|ethernet)/i;for(let[X,Y]of Object.entries(Z))if(J.test(X)&&Y){let Q=Y.find((W)=>W.family==="IPv4"&&!W.internal);if(Q)return Q.address}for(let[X,Y]of Object.entries(Z))if($.test(X)&&Y){let Q=Y.find((W)=>W.family==="IPv4"&&!W.internal);if(Q)return Q.address}for(let X of Object.values(Z))if(X){let Y=X.find((Q)=>Q.family==="IPv4"&&!Q.internal);if(Y)return Y.address}return null}function _K0(){let Z=DK0.hostname().toLowerCase();if(Z.endsWith(".local"))Z=Z.slice(0,-6);return Z=Z.replace(/\./g,"-"),Z||"ccc-server"}var wK0=process.argv.slice(2);if(wK0.includes("--version")||wK0.includes("-v"))console.log(`ccc v${T4()}`),process.exit(0);function KX1(Z){let J=y();try{if(process.stdin.isTTY)process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.on("data",($)=>{let X=$.toString().toLowerCase();if(X==="q")Z.display();if(X==="\x03")process.emit("SIGINT")}),J.debug('Keypress listener enabled (press "q" to redisplay QR codes)')}catch($){J.warn("Could not setup keypress listener",$)}}async function zX1(){let Z=null;try{W10();let J=Z10();$10(J.debug);let $=y();$.info("Backend v2 starting...");let X=J10(J);if(J.debug){let a0={...X,mqtt:{...X.mqtt,auth:X.mqtt.auth?{username:X.mqtt.auth.username?"[REDACTED]":void 0,password:X.mqtt.auth.password?"[REDACTED]":void 0}:void 0},ngrok:X.ngrok?{...X.ngrok,authToken:X.ngrok.authToken?"[REDACTED]":void 0}:void 0,qrcode:{...X.qrcode,username:X.qrcode.username?"[REDACTED]":void 0,password:X.qrcode.password?"[REDACTED]":void 0}};$.debug("Configuration",a0)}let Y=new SH(X.mqtt),Q=new JV({host:"localhost",port:X.mqtt.port,username:X.mqtt.auth?.username,password:X.mqtt.auth?.password}),W=new XV(X.terminal),K=new FW(X.router),z=new LV(X.autoUpdate),G=new wV,H=new jV,V=new TV(W),F=new nX(X.claudeAgent),B=new TW(X.opencodeAgent),U=new bV,L=new gV,O=new dV,_=new cV,w=new pV(B),j=new nV,A=new aV,R=new oV,N=new sV,P=new tV(B),m=new iV,a=new eV,L0=new PM(Q);Y.setHandshakeService(L0),Z=new IM,Z.addService(Y),Z.addService(Q),Z.addService(W),Z.addService(K),Z.addService(z),Z.addService(G),Z.addService(H),Z.addService(V),Z.addService(F),Z.addService(B),Z.addService(U),Z.addService(L),Z.addService(O),Z.addService(_),Z.addService(w),Z.addService(j),Z.addService(A),Z.addService(R),Z.addService(N),Z.addService(P),Z.addService(m),Z.addService(a);let m0;if(X.ngrok)m0=new YV(X.ngrok),Z.addOptionalService(m0,!0);if(G.setMQTTClient(Q),G.setClaudeAgentService(F),G.setOpenCodeAgentService(B),H.setMQTTClient(Q),V.setMQTTClient(Q),F.setMQTTClient(Q),F.setSessionsService(G),B.setMQTTClient(Q),B.setSessionsService(G),U.setMQTTClient(Q),L.setMQTTClient(Q),O.setMQTTClient(Q),O.setClaudeAgentService(F),O.setOpenCodeAgentService(B),_.setMQTTClient(Q),w.setMQTTClient(Q),j.setMQTTClient(Q),A.setMQTTClient(Q),R.setMQTTClient(Q),N.setMQTTClient(Q),P.setMQTTClient(Q),m.setMQTTClient(Q),a.setMQTTClient(Q),a.setRouter(K),m0)a.setNgrokService(m0);await Z.startAll(),await L0.start();let S0=Z.getServiceByName("CCC Ngrok Service"),z0,E0=OK0(),P0=E0?`${E0}:${X.router.port}`:void 0;if(S0&&S0.getStatus().active)z0=S0.getUrl()||void 0;let $1=_K0(),c0={...X.qrcode,profileName:$1,ipBasedUrl:P0,ngrokUrl:z0},e1=new zV(c0);if(Z.addService(e1),await e1.start(),Z.printStatus(),P0&&!z0)console.log(""),console.log("\x1B[33m"+"=".repeat(60)+"\x1B[0m"),console.log("\x1B[33m SECURITY NOTICE: HTTP Connection (Unencrypted)\x1B[0m"),console.log("\x1B[33m"+"=".repeat(60)+"\x1B[0m"),console.log(""),console.log("\x1B[32m SAFE if you are on:\x1B[0m"),console.log(" - Your home/private network"),console.log(" - A trusted VPN connection"),console.log(" - localhost only"),console.log(""),console.log("\x1B[31m NOT SAFE if:\x1B[0m"),console.log(" - You are on public WiFi (coffee shop, airport, etc.)"),console.log(" - The network has untrusted users"),console.log(""),console.log(" For secure public access:"),console.log(" - Use built-in ngrok (\x1B[36m--ngrok-token\x1B[0m) for automatic HTTPS"),console.log(" - Or use Cloudflare Tunnels, Tailscale, or similar solutions"),console.log(" - Enable \x1B[36mUse SSL\x1B[0m in the mobile app with a domain-based URL"),console.log("\x1B[33m"+"=".repeat(60)+"\x1B[0m"),console.log("");else if(z0)console.log(""),console.log("\x1B[32m Secure HTTPS connection via ngrok is active.\x1B[0m"),console.log("\x1B[32m Your traffic is encrypted end-to-end.\x1B[0m"),console.log("");$.info("Backend v2 is ready"),KX1(e1);let s0=!1,a9=async(a0)=>{if(s0){$.warn("Shutdown already in progress, ignoring signal");return}s0=!0,$.info(`Received ${a0}, shutting down...`),Q.markShuttingDown();try{await Z.stopAll(),process.exit(0)}catch(C){$.error("Error during shutdown",C),process.exit(1)}};process.once("SIGINT",()=>a9("SIGINT")),process.once("SIGTERM",()=>a9("SIGTERM")),process.on("uncaughtException",async(a0)=>{if(a0&&a0.code==="ERR_SOCKET_CLOSED"){$.debug("Ignoring socket closed error (expected during PTY cleanup)");return}$.error("Uncaught exception",a0);try{Q?.markShuttingDown(),await Z?.stopAll()}catch{}process.exit(1)}),process.on("unhandledRejection",(a0)=>{$.error("Unhandled rejection",a0)})}catch(J){if(y().error("Fatal error",J),Z)try{await Z.stopAll()}catch{}process.exit(1)}}zX1();
2408
+ `+$.content;await R8.writeFile(W,H,"utf-8");let V={success:!0,styleName:$.styleName,scope:$.scope,timestamp:Date.now()};await this.publishResponse(Y,V,X)}catch(Q){let W={success:!1,styleName:$.styleName,scope:$.scope,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){N8.error("[OutputStyles] Error handling write style request",{error:this.formatError(J)})}}async handleDeleteStyleRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("output-styles/delete",X);try{let Q=this.getOutputStylesDir($.scope,$.projectPath),W=U4.join(Q,`${$.styleName}.md`),K=U4.resolve(W),z=U4.resolve(Q);if(!K.startsWith(z))throw Error("Invalid style path");if(await R8.unlink(W),await this.readActiveStyle($.scope,$.projectPath)===$.styleName)await this.setActiveStyle($.scope,"default",$.projectPath);let H={success:!0,styleName:$.styleName,scope:$.scope,timestamp:Date.now()};await this.publishResponse(Y,H,X)}catch(Q){let W={success:!1,styleName:$.styleName,scope:$.scope,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){N8.error("[OutputStyles] Error handling delete style request",{error:this.formatError(J)})}}async handleSetActiveStyleRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("output-styles/set-active",X);try{await this.setActiveStyle($.scope,$.styleName,$.projectPath);let Q={success:!0,styleName:$.styleName,scope:$.scope,timestamp:Date.now()};await this.publishResponse(Y,Q,X)}catch(Q){let W={success:!1,styleName:$.styleName,scope:$.scope,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){N8.error("[OutputStyles] Error handling set active style request",{error:this.formatError(J)})}}}import*as L4 from"fs/promises";import*as l1 from"path";var{$:l9}=globalThis.Bun;XZ();var f1=y(),PW={name:"claude-plugins-official",source:{source:"github",repo:"anthropics/claude-plugins-official"}};class tV extends J1{name="Plugins Service";openCodeService;constructor(Z){super();this.openCodeService=Z}get logPrefix(){return"[Plugins]"}getStatus(){return{...super.getStatus()}}async onStart(){await this.ensureDirectories()}registerMQTTHandlers(){this.registerHandler("plugins/marketplaces/list/request",(Z,J)=>{this.handleListMarketplacesRequest(J)}),this.registerHandler("plugins/list/request",(Z,J)=>{this.handleListPluginsRequest(J)}),this.registerHandler("plugins/read/request",(Z,J)=>{this.handleReadPluginRequest(J)}),this.registerHandler("plugins/install/request",(Z,J)=>{this.handleInstallPluginRequest(J)}),this.registerHandler("plugins/uninstall/request",(Z,J)=>{this.handleUninstallPluginRequest(J)}),this.registerHandler("plugins/toggle/request",(Z,J)=>{this.handleTogglePluginRequest(J)}),this.registerHandler("plugins/marketplace/add/request",(Z,J)=>{this.handleAddMarketplaceRequest(J)}),this.registerHandler("plugins/marketplace/remove/request",(Z,J)=>{this.handleRemoveMarketplaceRequest(J)}),this.registerHandler("plugins/marketplace/refresh/request",(Z,J)=>{this.handleRefreshMarketplaceRequest(J)}),f1.info("[Plugins] MQTT handlers registered")}getPluginsDir(){return f9.getPluginsDir("user")}getMarketplaceCacheDir(){return f9.getMarketplaceCacheDir()}getSettingsPath(){return f9.getUserConfigPath("settings")}getInstalledPluginsJsonPath(){return l1.join(this.getPluginsDir(),"installed_plugins.json")}getOpenCodeConfigPath(){return p5()}getPluginCacheDir(){return l1.join(this.getPluginsDir(),"cache")}async ensureDirectories(){let Z=[this.getPluginsDir(),this.getPluginCacheDir(),this.getMarketplaceCacheDir()];for(let J of Z)await L4.mkdir(J,{recursive:!0})}normalizeOpenCodePlugins(Z){return(Array.isArray(Z.plugin)?Z.plugin:Array.isArray(Z.plugins)?Z.plugins:[]).filter(Boolean)}async listOpenCodePlugins(){let Z=this.getOpenCodeConfigPath(),J=await s1(Z);return this.normalizeOpenCodePlugins(J).map((X)=>{if(typeof X==="string")return{name:X,displayName:X,description:"",marketplaceName:"opencode",isInstalled:!0,isEnabled:!0,source:X,provider:"opencode"};let Y=X.name;return{name:Y,displayName:Y,description:X.description||"",version:X.version,author:X.author,category:X.category,tags:X.tags,marketplaceName:"opencode",isInstalled:!0,isEnabled:X.enabled!==!1,source:X.source||Y,provider:"opencode"}}).filter((X)=>!!X.name)}async readOpenCodePlugin(Z){let J=this.getOpenCodeConfigPath(),$=await s1(J),Y=this.normalizeOpenCodePlugins($).find((Q)=>typeof Q==="string"?Q===Z:Q.name===Z);if(!Y)return null;if(typeof Y==="string")return{name:Y,displayName:Y,description:"",marketplaceName:"opencode",isInstalled:!0,isEnabled:!0,source:Y,provider:"opencode",hasCommands:!1,hasSkills:!1,hasAgents:!1,hasHooks:!1,hasMcpServers:!1,hasLspServers:!1};return{name:Y.name,displayName:Y.name,description:Y.description||"",version:Y.version,author:Y.author,category:Y.category,tags:Y.tags,marketplaceName:"opencode",isInstalled:!0,isEnabled:Y.enabled!==!1,source:Y.source||Y.name,provider:"opencode",hasCommands:!1,hasSkills:!1,hasAgents:!1,hasHooks:!1,hasMcpServers:!1,hasLspServers:!1}}async setOpenCodePluginEnabled(Z,J){let $=this.getOpenCodeConfigPath(),X=await s1($),Y=this.normalizeOpenCodePlugins(X),Q=Y.findIndex((W)=>typeof W==="string"?W===Z:W.name===Z);if(J){if(Q===-1)Y.push(Z);else if(typeof Y[Q]!=="string")Y[Q]={...Y[Q],enabled:!0,name:Z}}else if(Q!==-1){let W=Y[Q];if(typeof W==="string")Y.splice(Q,1);else Y[Q]={...W,enabled:!1,name:Z}}await A8($,{...X,plugin:Y})}async readSettings(){return await c9.readConfigOrEmpty(this.getSettingsPath())}async writeSettings(Z){await c9.writeConfig(this.getSettingsPath(),Z)}async getEnabledPlugins(){return(await this.readSettings()).enabledPlugins||{}}async setPluginEnabled(Z,J){let $=await this.readSettings();if(!$.enabledPlugins)$.enabledPlugins={};$.enabledPlugins[Z]=J,await this.writeSettings($)}async getKnownMarketplaces(){let J=(await this.readSettings()).extraKnownMarketplaces||{},$={};for(let[X,Y]of Object.entries(J))if(typeof Y==="object"&&Y!==null&&"source"in Y)$[X]=Y.source;else $[X]=Y;return $}async addKnownMarketplace(Z,J){let $=await this.readSettings();if(!$.extraKnownMarketplaces)$.extraKnownMarketplaces={};$.extraKnownMarketplaces[Z]={source:J},await this.writeSettings($)}async removeKnownMarketplace(Z){let J=await this.readSettings();if(J.extraKnownMarketplaces)delete J.extraKnownMarketplaces[Z],await this.writeSettings(J)}async readInstalledPluginsJson(){let Z=this.getInstalledPluginsJsonPath(),J=await U1(Z);if(!J)return{version:2,plugins:{}};try{let $=JSON.parse(J);return{version:$.version||2,plugins:$.plugins||{}}}catch($){return f1.warn("[Plugins] Failed to parse installed_plugins.json, returning empty",$),{version:2,plugins:{}}}}async writeInstalledPluginsJson(Z){let J=this.getInstalledPluginsJsonPath();await L4.writeFile(J,JSON.stringify(Z,null,2),"utf-8")}async addInstalledPluginRecord(Z,J){let $=await this.readInstalledPluginsJson();if(!$.plugins[Z])$.plugins[Z]=[];let X=$.plugins[Z].findIndex((Y)=>Y.scope===J.scope);if(X>=0)$.plugins[Z][X]=J;else $.plugins[Z].push(J);await this.writeInstalledPluginsJson($)}async removeInstalledPluginRecord(Z,J){let $=await this.readInstalledPluginsJson();if(!$.plugins[Z])return;if(J){if($.plugins[Z]=$.plugins[Z].filter((X)=>X.scope!==J),$.plugins[Z].length===0)delete $.plugins[Z]}else delete $.plugins[Z];await this.writeInstalledPluginsJson($)}async getInstalledPluginRecord(Z){let $=(await this.readInstalledPluginsJson()).plugins[Z];if(!$||$.length===0)return null;return $[0]??null}getMarketplaceCachePath(Z){return l1.join(this.getMarketplaceCacheDir(),Z)}async fetchMarketplace(Z,J){let $=this.getMarketplaceCachePath(Z);try{if(typeof J==="object"&&J.source==="github"){let Q=`https://github.com/${J.repo}.git`,W=J.ref||"main";if(await Z6($))await l9`git -C ${$} fetch origin ${W}`.quiet(),await l9`git -C ${$} reset --hard origin/${W}`.quiet();else await l9`git clone --depth 1 --branch ${W} ${Q} ${$}`.quiet()}else if(typeof J==="object"&&J.source==="url"){let Q=J.url,W=J.ref||"main";if(await Z6($))await l9`git -C ${$} fetch origin ${W}`.quiet(),await l9`git -C ${$} reset --hard origin/${W}`.quiet();else await l9`git clone --depth 1 --branch ${W} ${Q} ${$}`.quiet()}else if(typeof J==="string")return f1.warn("[Plugins] Relative path source not supported for marketplaces"),null;let X=l1.join($,".claude-plugin","marketplace.json"),Y=await U1(X);if(!Y){let Q=l1.join($,"marketplace.json"),W=await U1(Q);if(W)return JSON.parse(W);return f1.warn(`[Plugins] No marketplace.json found for ${Z}`),null}return JSON.parse(Y)}catch(X){return f1.error(`[Plugins] Failed to fetch marketplace ${Z}`,X),null}}async parseMarketplace(Z){let J=this.getMarketplaceCachePath(Z),$=l1.join(J,".claude-plugin","marketplace.json"),X=await U1($);if(!X)$=l1.join(J,"marketplace.json"),X=await U1($);if(!X)return null;try{return JSON.parse(X)}catch(Y){return f1.error(`[Plugins] Failed to parse marketplace.json for ${Z}`,Y),null}}async marketplacePluginToEntry(Z,J,$,X){let Y=`${Z.name}@${J}`;return{name:Z.name,displayName:Z.name,description:Z.description||"",version:Z.version,author:Z.author?.name,category:Z.category,tags:Z.tags,marketplaceName:J,isInstalled:X.has(Y),isEnabled:$[Y]??!1,source:Z.source,provider:"claude"}}async getAllMarketplaces(){let Z=await this.getKnownMarketplaces(),J=[{name:PW.name,source:PW.source,isOfficial:!0}];for(let[$,X]of Object.entries(Z))J.push({name:$,source:X,isOfficial:!1});return J}async getInstalledPlugins(){let Z=new Set,J=await this.readInstalledPluginsJson();for(let[$,X]of Object.entries(J.plugins)){if(!X||X.length===0)continue;for(let Y of X)if(Y.installPath){if(await Z6(Y.installPath)){Z.add($);break}}}return Z}getPluginInstallPath(Z,J,$="1.0.0"){return l1.join(this.getPluginCacheDir(),J,Z,$)}async getPluginInstallPathFromRecord(Z,J){let $=`${Z}@${J}`;return(await this.getInstalledPluginRecord($))?.installPath||null}async getGitCommitSha(Z){try{return(await l9`git -C ${Z} rev-parse HEAD`.quiet()).stdout.toString().trim()||void 0}catch{return}}async installPluginFromMarketplace(Z,J,$="user"){try{let X=await this.parseMarketplace(J);if(!X)return{success:!1,error:"Marketplace not found or not cached"};let Y=X.plugins.find((F)=>F.name===Z);if(!Y)return{success:!1,error:"Plugin not found in marketplace"};let Q=Y.version||"1.0.0",W=this.getPluginInstallPath(Z,J,Q),K=this.getMarketplaceCachePath(J),z=`${Z}@${J}`;await L4.mkdir(l1.dirname(W),{recursive:!0});let G;if(typeof Y.source==="string"){let F=l1.join(K,Y.source);await L4.rm(W,{recursive:!0,force:!0}),await L4.cp(F,W,{recursive:!0}),G=await this.getGitCommitSha(K)}else if(Y.source.source==="github"){let F=`https://github.com/${Y.source.repo}.git`,B=Y.source.ref||"main";await L4.rm(W,{recursive:!0,force:!0}),await l9`git clone --depth 1 --branch ${B} ${F} ${W}`.quiet(),G=await this.getGitCommitSha(W)}else if(Y.source.source==="url"){let F=Y.source.url,B=Y.source.ref||"main";await L4.rm(W,{recursive:!0,force:!0}),await l9`git clone --depth 1 --branch ${B} ${F} ${W}`.quiet(),G=await this.getGitCommitSha(W)}else return{success:!1,error:"Unknown plugin source type"};let H=new Date().toISOString(),V={scope:$,installPath:W,version:Q,installedAt:H,lastUpdated:H,gitCommitSha:G};return await this.addInstalledPluginRecord(z,V),await this.setPluginEnabled(z,!0),f1.info(`[Plugins] Installed ${z} to ${W}`),{success:!0}}catch(X){return f1.error(`[Plugins] Failed to install plugin ${Z}@${J}`,X),{success:!1,error:X instanceof Error?X.message:"Unknown error"}}}async uninstallPlugin(Z,J,$){try{let X=`${Z}@${J}`,Y=await this.getInstalledPluginRecord(X);if(!Y)return{success:!1,error:"Plugin not installed"};if(Y.installPath&&await Z6(Y.installPath))await L4.rm(Y.installPath,{recursive:!0,force:!0});await this.removeInstalledPluginRecord(X,$);let Q=await this.readSettings();if(Q.enabledPlugins&&Q.enabledPlugins[X]!==void 0)delete Q.enabledPlugins[X],await this.writeSettings(Q);return f1.info(`[Plugins] Uninstalled ${X}`),{success:!0}}catch(X){return f1.error(`[Plugins] Failed to uninstall plugin ${Z}@${J}`,X),{success:!1,error:X instanceof Error?X.message:"Unknown error"}}}async readPluginManifest(Z){let J=l1.join(Z,".claude-plugin","plugin.json"),$=await U1(J);if(!$)return null;try{return JSON.parse($)}catch(X){return null}}async getPluginDetail(Z,J){let $=await this.getEnabledPlugins(),X=await this.getInstalledPlugins(),Y=`${Z}@${J}`,W=(await this.parseMarketplace(J))?.plugins.find((_)=>_.name===Z),K=X.has(Y),G=(K?await this.getInstalledPluginRecord(Y):null)?.installPath,H=K&&G?await this.readPluginManifest(G):null,V=!1,F=!1,B=!1,U=!1,L=!1,O=!1;if(K&&G)V=await Z6(l1.join(G,"commands")),F=await Z6(l1.join(G,"skills")),B=await Z6(l1.join(G,"agents")),U=await Z6(l1.join(G,"hooks")),L=await Z6(l1.join(G,".mcp.json"))||await L4.access(l1.join(G,".mcp.json")).then(()=>!0).catch(()=>!1),O=await Z6(l1.join(G,".lsp.json"))||await L4.access(l1.join(G,".lsp.json")).then(()=>!0).catch(()=>!1);return{name:Z,displayName:H?.name||W?.name||Z,description:H?.description||W?.description||"",version:H?.version||W?.version,author:H?.author?.name||W?.author?.name,category:W?.category,tags:W?.tags,marketplaceName:J,isInstalled:K,isEnabled:$[Y]??!1,source:W?.source||Z,provider:"claude",homepage:H?.homepage,repository:H?.repository,license:H?.license,hasCommands:V,hasSkills:F,hasAgents:B,hasHooks:U,hasMcpServers:L,hasLspServers:O,installPath:K?G:void 0}}async handleListMarketplacesRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/marketplaces/list",X);try{if(($.provider||"claude")==="opencode"){let G={marketplaces:[],timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,G,X),this.incrementRequestCount();return}let W=await this.getAllMarketplaces(),K=[];for(let{name:G,source:H,isOfficial:V}of W){let F=await this.parseMarketplace(G),B=0,U,L="Unknown";if(F)B=F.plugins.length,U=F.description,L=F.owner.name;K.push({name:G,description:U,owner:L,source:H,pluginCount:B,isOfficial:V})}let z={marketplaces:K,timestamp:Date.now()};await this.publishResponse(Y,z,X)}catch(Q){let W={marketplaces:[],timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling list marketplaces request",{error:this.formatError(J)})}}async handleListPluginsRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/list",X);try{let Q=$.provider||"claude";if(Q==="opencode"){if($.scope!=="installed"){let F={plugins:[],marketplaceName:$.marketplaceName,timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,F,X),this.incrementRequestCount();return}let V={plugins:await this.listOpenCodePlugins(),marketplaceName:$.marketplaceName,timestamp:Date.now()};await this.publishResponse(Y,V,X),this.incrementRequestCount();return}let W=await this.getEnabledPlugins(),K=await this.getInstalledPlugins(),z=[];if($.scope==="installed")for(let H of K){let V=H.split("@"),F=V[0],B=V[1];if(!F||!B)continue;let U=await this.getPluginDetail(F,B);if(U)z.push({name:U.name,displayName:U.displayName,description:U.description,version:U.version,author:U.author,category:U.category,tags:U.tags,marketplaceName:B,isInstalled:!0,isEnabled:U.isEnabled,source:U.source,provider:Q})}else if($.scope==="marketplace"){let H=await this.getAllMarketplaces(),V=$.marketplaceName?H.filter((F)=>F.name===$.marketplaceName):H;for(let{name:F,source:B}of V){let U=await this.parseMarketplace(F);if(!U&&B)f1.info(`[Plugins] Marketplace cache not found for ${F}, fetching...`),U=await this.fetchMarketplace(F,B);if(!U)continue;for(let L of U.plugins){let O=await this.marketplacePluginToEntry(L,F,W,K);z.push(O)}}}let G={plugins:z,marketplaceName:$.marketplaceName,timestamp:Date.now()};await this.publishResponse(Y,G,X)}catch(Q){let W={plugins:[],timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling list plugins request",{error:this.formatError(J)})}}async handleReadPluginRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/read",X);try{if(($.provider||"claude")==="opencode"){let G={plugin:await this.readOpenCodePlugin($.pluginName)||void 0,timestamp:Date.now()};await this.publishResponse(Y,G,X),this.incrementRequestCount();return}let K={plugin:await this.getPluginDetail($.pluginName,$.marketplaceName)||void 0,timestamp:Date.now()};await this.publishResponse(Y,K,X)}catch(Q){let W={timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling read plugin request",{error:this.formatError(J)})}}async handleInstallPluginRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/install",X);try{if(($.provider||"claude")==="opencode"){let z=await this.installOpenCodePlugin($.pluginName),G={success:z.success,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:z.error,restartRequired:z.success};if(await this.publishResponse(Y,G,X),z.success&&this.openCodeService)this.openCodeService.getProcessManager().restartServer().catch((H)=>{f1.error("[Plugins] Error restarting OpenCode server after plugin install",{error:H instanceof Error?H.message:"Unknown error"})});this.incrementRequestCount();return}let W=await this.installPluginFromMarketplace($.pluginName,$.marketplaceName),K={success:W.success,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:W.error};await this.publishResponse(Y,K,X)}catch(Q){let W={success:!1,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling install plugin request",{error:this.formatError(J)})}}async handleUninstallPluginRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/uninstall",X);try{if(($.provider||"claude")==="opencode"){let z=await this.uninstallOpenCodePlugin($.pluginName),G={success:z.success,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:z.error,restartRequired:z.success};if(await this.publishResponse(Y,G,X),z.success&&this.openCodeService)this.openCodeService.getProcessManager().restartServer().catch((H)=>{f1.error("[Plugins] Error restarting OpenCode server after plugin uninstall",{error:H instanceof Error?H.message:"Unknown error"})});this.incrementRequestCount();return}let W=await this.uninstallPlugin($.pluginName,$.marketplaceName),K={success:W.success,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:W.error};await this.publishResponse(Y,K,X)}catch(Q){let W={success:!1,pluginName:$.pluginName,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling uninstall plugin request",{error:this.formatError(J)})}}async installOpenCodePlugin(Z){try{let J=p5(),$=await s1(J),X=$.plugin||[];if(X.includes(Z))return{success:!0};return X.push(Z),await A8(J,{...$,plugin:X}),{success:!0}}catch(J){return{success:!1,error:J instanceof Error?J.message:"Unknown error"}}}async uninstallOpenCodePlugin(Z){try{let J=p5(),$=await s1(J),X=$.plugin||[],Y=X.indexOf(Z);if(Y===-1)return{success:!0};return X.splice(Y,1),await A8(J,{...$,plugin:X}),{success:!0}}catch(J){return{success:!1,error:J instanceof Error?J.message:"Unknown error"}}}async handleTogglePluginRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/toggle",X);try{if(($.provider||"claude")==="opencode"){await this.setOpenCodePluginEnabled($.pluginName,$.enabled);let z={success:!0,pluginName:$.pluginName,marketplaceName:$.marketplaceName,enabled:$.enabled,timestamp:Date.now()};await this.publishResponse(Y,z,X),this.incrementRequestCount();return}let W=`${$.pluginName}@${$.marketplaceName}`;await this.setPluginEnabled(W,$.enabled);let K={success:!0,pluginName:$.pluginName,marketplaceName:$.marketplaceName,enabled:$.enabled,timestamp:Date.now()};await this.publishResponse(Y,K,X)}catch(Q){let W={success:!1,pluginName:$.pluginName,marketplaceName:$.marketplaceName,enabled:$.enabled,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling toggle plugin request",{error:this.formatError(J)})}}async handleAddMarketplaceRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/marketplace/add",X);try{if(($.provider||"claude")==="opencode"){let V={success:!1,timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,V,X),this.incrementRequestCount();return}let W="temp_"+Date.now();if(typeof $.source==="object"&&$.source.source==="github")W=$.source.repo.split("/").pop()||W;let K=await this.fetchMarketplace(W,$.source);if(!K){let V={success:!1,timestamp:Date.now(),error:"Failed to fetch or parse marketplace"};await this.publishResponse(Y,V,X);return}let z=K.name;if(W!==z){let V=this.getMarketplaceCachePath(W),F=this.getMarketplaceCachePath(z);await L4.rm(F,{recursive:!0,force:!0}),await L4.rename(V,F)}await this.addKnownMarketplace(z,$.source);let H={success:!0,marketplace:{name:z,description:K.description,owner:K.owner.name,source:$.source,pluginCount:K.plugins.length,isOfficial:!1},timestamp:Date.now()};await this.publishResponse(Y,H,X)}catch(Q){let W={success:!1,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling add marketplace request",{error:this.formatError(J)})}}async handleRemoveMarketplaceRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/marketplace/remove",X);try{if(($.provider||"claude")==="opencode"){let K={success:!1,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,K,X),this.incrementRequestCount();return}if($.marketplaceName===PW.name){let K={success:!1,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:"Cannot remove official marketplace"};await this.publishResponse(Y,K,X);return}await this.removeKnownMarketplace($.marketplaceName);let W={success:!0,marketplaceName:$.marketplaceName,timestamp:Date.now()};await this.publishResponse(Y,W,X)}catch(Q){let W={success:!1,marketplaceName:$.marketplaceName,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling remove marketplace request",{error:this.formatError(J)})}}async handleRefreshMarketplaceRequest(Z){try{let J=await this.parseMessage(Z);if(!J)return;let{data:$,profileId:X}=J,Y=this.buildResponseTopic("plugins/marketplace/refresh",X);try{if(($.provider||"claude")==="opencode"){let G={success:!1,marketplaceName:$.marketplaceName,pluginCount:0,timestamp:Date.now(),error:"OpenCode does not support marketplaces"};await this.publishResponse(Y,G,X),this.incrementRequestCount();return}let W=null;if($.marketplaceName===PW.name)W=PW.source;else W=(await this.getKnownMarketplaces())[$.marketplaceName]||null;if(!W){let G={success:!1,marketplaceName:$.marketplaceName,pluginCount:0,timestamp:Date.now(),error:"Marketplace not found"};await this.publishResponse(Y,G,X);return}let K=await this.fetchMarketplace($.marketplaceName,W);if(!K){let G={success:!1,marketplaceName:$.marketplaceName,pluginCount:0,timestamp:Date.now(),error:"Failed to fetch marketplace"};await this.publishResponse(Y,G,X);return}let z={success:!0,marketplaceName:$.marketplaceName,pluginCount:K.plugins.length,timestamp:Date.now()};await this.publishResponse(Y,z,X)}catch(Q){let W={success:!1,marketplaceName:$.marketplaceName,pluginCount:0,timestamp:Date.now(),error:this.formatError(Q)};await this.publishResponse(Y,W,X)}this.incrementRequestCount()}catch(J){f1.error("[Plugins] Error handling refresh marketplace request",{error:this.formatError(J)})}}}import*as EM from"path";import*as LK0 from"os";import*as p9 from"fs";var VZ=y(),CM=EM.join(LK0.homedir(),".ccc"),qM=EM.join(CM,"forwarded-ports.json");class eV extends J1{name="Port Forward Service";get logPrefix(){return"[PortForward]"}ngrokService=null;router=null;forwardedPorts=[];activePort=null;switchQueue=Promise.resolve();setNgrokService(Z){this.ngrokService=Z}setRouter(Z){this.router=Z}async onStart(){let Z=this.loadPersistedData();if(this.forwardedPorts=Z.forwardedPorts,Z.activePort&&this.forwardedPorts.some((J)=>J.projectId===Z.activePort.projectId&&J.port===Z.activePort.port)){let{projectId:J,port:$,ssl:X}=Z.activePort;VZ.info(`[PortForward] Restoring active port ${$} for project ${J}`),this.doSwitch(J,$,X)}VZ.info(`[PortForward] Started with ${this.forwardedPorts.length} persisted ports`)}async onStop(){if(this.router)this.router.clearDefaultRoute()}getStatus(){return{...super.getStatus(),forwardedPorts:[...this.forwardedPorts]}}registerMQTTHandlers(){this.registerHandler("ports/forward/request",async(Z,J)=>{let $=await this.parseMessage(J);if(!$)return;this.handleForward($.data,$.profileId)}),this.registerHandler("ports/remove/request",async(Z,J)=>{let $=await this.parseMessage(J);if(!$)return;this.handleRemove($.data,$.profileId)}),this.registerHandler("ports/list/request",async(Z,J)=>{let $=await this.parseMessage(J);if(!$)return;this.handleList($.data,$.profileId)}),this.registerHandler("ports/switch/request",async(Z,J)=>{let $=await this.parseMessage(J);if(!$)return;this.handleSwitch($.data,$.profileId)})}async handleForward(Z,J){let{projectId:$,ports:X,ssl:Y,portSsl:Q,clientId:W}=Z;for(let G of X){let H=Q?.[String(G)]??Y,V=this.forwardedPorts.findIndex((F)=>F.projectId===$&&F.port===G);if(V>=0)this.forwardedPorts[V].ssl=H;else this.forwardedPorts.push({projectId:$,port:G,ssl:H})}if(!this.activePort&&X.length>0){let G=X[0],H=Q?.[String(G)]??Y??!1;this.doSwitch($,G,H)}this.persistData();let K=this.router?.getStatus().port,z={projectId:$,ports:X,sharedProxyPort:K,status:"ok",timestamp:Date.now()};await this.publishResponse(`ports/forward/${W}/response`,z,J),VZ.info(`[PortForward] Forwarded ports ${X.join(", ")} for project ${$}`)}async handleRemove(Z,J){let{projectId:$,ports:X,clientId:Y}=Z;for(let W of X)this.forwardedPorts=this.forwardedPorts.filter((K)=>!(K.projectId===$&&K.port===W));if(this.activePort&&X.includes(this.activePort.port)&&this.activePort.projectId===$){let W=this.forwardedPorts.filter((K)=>K.projectId===$);if(W.length>0){let K=W[0];this.doSwitch(K.projectId,K.port,K.ssl??!1)}else this.activePort=null,this.router?.clearDefaultRoute()}this.persistData();let Q={projectId:$,ports:X,sharedProxyPort:this.router?.getStatus().port,status:"ok",timestamp:Date.now()};await this.publishResponse(`ports/remove/${Y}/response`,Q,J),VZ.info(`[PortForward] Removed ports ${X.join(", ")} for project ${$}`)}async handleList(Z,J){let{projectId:$,clientId:X}=Z,Y=this.forwardedPorts.filter((W)=>W.projectId===$).map((W)=>W.port),Q={projectId:$,ports:Y,timestamp:Date.now()};await this.publishResponse(`ports/list/${X}/response`,Q,J)}handleSwitch(Z,J){let{projectId:$,port:X,ssl:Y,clientId:Q}=Z;this.switchQueue=this.switchQueue.then(async()=>{try{let W=Y??this.forwardedPorts.find((z)=>z.projectId===$&&z.port===X)?.ssl??!1;this.doSwitch($,X,W);let K={projectId:$,port:X,proxyPort:this.router?.getStatus().port,devTunnelUrl:this.ngrokService?.getUrl()??void 0,status:"ok",timestamp:Date.now()};await this.publishResponse(`ports/switch/${Q}/response`,K,J)}catch(W){VZ.error(`[PortForward] Switch to port ${X} failed`,W);let K={projectId:$,port:X,proxyPort:this.router?.getStatus().port,status:"error",error:W.message||"Switch failed",timestamp:Date.now()};await this.publishResponse(`ports/switch/${Q}/response`,K,J)}})}doSwitch(Z,J,$){if(VZ.info(`[PortForward] Switching to port ${J} (ssl: ${$}) for project ${Z}`),this.router)this.router.setDefaultRoute(`localhost:${J}`,$);this.activePort={projectId:Z,port:J,ssl:$},this.persistData()}loadPersistedData(){try{if(p9.existsSync(qM)){let Z=p9.readFileSync(qM,"utf-8"),J=JSON.parse(Z);if(Array.isArray(J))return{forwardedPorts:J};return{forwardedPorts:J.forwardedPorts||[],activePort:J.activePort||void 0}}}catch(Z){VZ.warn("[PortForward] Failed to load persisted ports, starting fresh",Z)}return{forwardedPorts:[]}}persistData(){try{if(!p9.existsSync(CM))p9.mkdirSync(CM,{recursive:!0});let Z={forwardedPorts:this.forwardedPorts,activePort:this.activePort??void 0};p9.writeFileSync(qM,JSON.stringify(Z,null,2))}catch(Z){VZ.error("[PortForward] Failed to persist ports",Z)}}}var i9=y(),n9="[MQTTHandshake]";class PM{mqttClient;constructor(Z){this.mqttClient=Z}async start(){await x0.generateKeyPair(),this.mqttClient.subscribe("crypto/+/key-exchange",async(Z,J)=>{let X=Z.split("/")[1];try{let{encryptedKey:Y,profileId:Q}=JSON.parse(J.toString());if(!Y){i9.warn(`${n9} Key exchange missing encryptedKey from ${X}`);return}if(!Q){i9.warn(`${n9} Key exchange missing profileId from ${X}`);return}await x0.receiveClientKey(Q,Y),await this.mqttClient.publish(`crypto/${X}/ready`,JSON.stringify({ready:!0}),{qos:1}),i9.info(`${n9} Handshake complete \u2014 key stored under profileId: ${Q} (mqtt: ${X})`)}catch(Y){i9.error(`${n9} Handshake failed for ${X}`,{error:Y instanceof Error?Y.message:String(Y)})}}),this.mqttClient.subscribe("crypto/+/handshake/request",(Z)=>{let J=Z.split("/")[1]||"";i9.debug(`${n9} Handshake requested by ${J}`),this.publishPublicKey(J)}),i9.info(`${n9} Handshake service started`),setTimeout(()=>{this.mqttClient.publish("crypto/rekey",JSON.stringify({reason:"backend_restart",timestamp:Date.now()}),{qos:1}).catch(()=>{})},1000)}publishPublicKey(Z){let J=x0.getRSAPublicKeyPem();if(!J){i9.warn(`${n9} RSA keypair not ready, cannot send public key to ${Z}`);return}this.mqttClient.publish(`crypto/${Z}/handshake`,JSON.stringify({publicKey:J,backendVersion:T4()}),{qos:1}).then(()=>{i9.debug(`${n9} Published RSA public key to ${Z}`)}).catch(($)=>{i9.error(`${n9} Failed to publish public key to ${Z}`,{error:$ instanceof Error?$.message:String($)})})}}class IM{services=[];startedServices=[];logger=y();addService(Z){this.services.push(Z)}addOptionalService(Z,J){if(J)this.services.push(Z)}getServiceByName(Z){return this.services.find((J)=>J.name===Z)}async startAll(){for(let Z of this.services)try{this.logger.debug(`Starting ${Z.name}...`),await Z.start(),this.startedServices.push(Z)}catch(J){throw this.logger.error(`Failed to start ${Z.name}`,J),await this.stopAll(),J}this.logger.info("All services started successfully")}async stopAll(){for(let Z=this.startedServices.length-1;Z>=0;Z--){let J=this.startedServices[Z];try{this.logger.debug(`Stopping ${J?.name}...`),await J?.stop()}catch($){this.logger.error(`Failed to stop ${J?.name}`,$)}}this.startedServices=[],this.logger.info("All services stopped")}getStatus(){return this.services.map((Z)=>Z.getStatus())}printStatus(){let Z=this.getStatus();this.logger.info("=== Backend Status ===");for(let J of Z){let $=J.running?"\u2713":"\u2717";if(this.logger.info(`${$} ${J.name}`),"port"in J&&J.port)this.logger.info(` Port: ${J.port}`);if("routes"in J&&J.routes)this.logger.info(` Routes: ${J.routes.map((X)=>`${X.path}->${X.target}`).join(", ")}`);if(J.startedAt)this.logger.info(` Started: ${J.startedAt.toISOString()}`);if(J.error)this.logger.info(` Error: ${J.error}`)}this.logger.info("=====================")}}import DK0 from"os";function OK0(){let Z=DK0.networkInterfaces(),J=/^(wlan|wlp|wifi|wi-fi|en0)/i,$=/^(eth|enp|en1|ethernet)/i;for(let[X,Y]of Object.entries(Z))if(J.test(X)&&Y){let Q=Y.find((W)=>W.family==="IPv4"&&!W.internal);if(Q)return Q.address}for(let[X,Y]of Object.entries(Z))if($.test(X)&&Y){let Q=Y.find((W)=>W.family==="IPv4"&&!W.internal);if(Q)return Q.address}for(let X of Object.values(Z))if(X){let Y=X.find((Q)=>Q.family==="IPv4"&&!Q.internal);if(Y)return Y.address}return null}function _K0(){let Z=DK0.hostname().toLowerCase();if(Z.endsWith(".local"))Z=Z.slice(0,-6);return Z=Z.replace(/\./g,"-"),Z||"ccc-server"}var wK0=process.argv.slice(2);if(wK0.includes("--version")||wK0.includes("-v"))console.log(`ccc v${T4()}`),process.exit(0);function KX1(Z){let J=y();try{if(process.stdin.isTTY)process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.on("data",($)=>{let X=$.toString().toLowerCase();if(X==="q")Z.display();if(X==="\x03")process.emit("SIGINT")}),J.debug('Keypress listener enabled (press "q" to redisplay QR codes)')}catch($){J.warn("Could not setup keypress listener",$)}}async function zX1(){let Z=null;try{W10();let J=Z10();$10(J.debug);let $=y();$.info("Backend v2 starting...");let X=J10(J);if(J.debug){let a0={...X,mqtt:{...X.mqtt,auth:X.mqtt.auth?{username:X.mqtt.auth.username?"[REDACTED]":void 0,password:X.mqtt.auth.password?"[REDACTED]":void 0}:void 0},ngrok:X.ngrok?{...X.ngrok,authToken:X.ngrok.authToken?"[REDACTED]":void 0}:void 0,qrcode:{...X.qrcode,username:X.qrcode.username?"[REDACTED]":void 0,password:X.qrcode.password?"[REDACTED]":void 0}};$.debug("Configuration",a0)}let Y=new SH(X.mqtt),Q=new JV({host:"localhost",port:X.mqtt.port,username:X.mqtt.auth?.username,password:X.mqtt.auth?.password}),W=new XV(X.terminal),K=new FW(X.router),z=new LV(X.autoUpdate),G=new wV,H=new jV,V=new TV(W),F=new nX(X.claudeAgent),B=new TW(X.opencodeAgent),U=new bV,L=new gV,O=new dV,_=new cV,w=new pV(B),j=new nV,A=new aV,R=new oV,N=new sV,P=new tV(B),m=new iV,a=new eV,L0=new PM(Q);Y.setHandshakeService(L0),Z=new IM,Z.addService(Y),Z.addService(Q),Z.addService(W),Z.addService(K),Z.addService(z),Z.addService(G),Z.addService(H),Z.addService(V),Z.addService(F),Z.addService(B),Z.addService(U),Z.addService(L),Z.addService(O),Z.addService(_),Z.addService(w),Z.addService(j),Z.addService(A),Z.addService(R),Z.addService(N),Z.addService(P),Z.addService(m),Z.addService(a);let m0;if(X.ngrok)m0=new YV(X.ngrok),Z.addOptionalService(m0,!0);if(G.setMQTTClient(Q),G.setClaudeAgentService(F),G.setOpenCodeAgentService(B),H.setMQTTClient(Q),V.setMQTTClient(Q),F.setMQTTClient(Q),F.setSessionsService(G),B.setMQTTClient(Q),B.setSessionsService(G),U.setMQTTClient(Q),L.setMQTTClient(Q),O.setMQTTClient(Q),O.setClaudeAgentService(F),O.setOpenCodeAgentService(B),_.setMQTTClient(Q),w.setMQTTClient(Q),j.setMQTTClient(Q),A.setMQTTClient(Q),R.setMQTTClient(Q),N.setMQTTClient(Q),P.setMQTTClient(Q),m.setMQTTClient(Q),a.setMQTTClient(Q),a.setRouter(K),m0)a.setNgrokService(m0);await Z.startAll(),await L0.start();let S0=Z.getServiceByName("CCC Ngrok Service"),z0,E0=OK0(),P0=E0?`${E0}:${X.router.port}`:void 0;if(S0&&S0.getStatus().active)z0=S0.getUrl()||void 0;let $1=_K0(),c0={...X.qrcode,profileName:$1,ipBasedUrl:P0,ngrokUrl:z0},e1=new zV(c0);if(Z.addService(e1),await e1.start(),Z.printStatus(),P0&&!z0)console.log(""),console.log("\x1B[33m"+"=".repeat(60)+"\x1B[0m"),console.log("\x1B[33m SECURITY NOTICE: HTTP Connection (Unencrypted)\x1B[0m"),console.log("\x1B[33m"+"=".repeat(60)+"\x1B[0m"),console.log(""),console.log("\x1B[32m SAFE if you are on:\x1B[0m"),console.log(" - Your home/private network"),console.log(" - A trusted VPN connection"),console.log(" - localhost only"),console.log(""),console.log("\x1B[31m NOT SAFE if:\x1B[0m"),console.log(" - You are on public WiFi (coffee shop, airport, etc.)"),console.log(" - The network has untrusted users"),console.log(""),console.log(" For secure public access:"),console.log(" - Use built-in ngrok (\x1B[36m--ngrok-token\x1B[0m) for automatic HTTPS"),console.log(" - Or use Cloudflare Tunnels, Tailscale, or similar solutions"),console.log(" - Enable \x1B[36mUse SSL\x1B[0m in the mobile app with a domain-based URL"),console.log("\x1B[33m"+"=".repeat(60)+"\x1B[0m"),console.log("");else if(z0)console.log(""),console.log("\x1B[32m Secure HTTPS connection via ngrok is active.\x1B[0m"),console.log("\x1B[32m Your traffic is encrypted end-to-end.\x1B[0m"),console.log("");$.info("Backend v2 is ready"),KX1(e1);let s0=!1,a9=async(a0)=>{if(s0){$.warn("Shutdown already in progress, ignoring signal");return}s0=!0,$.info(`Received ${a0}, shutting down...`),Q.markShuttingDown();try{await Z.stopAll(),process.exit(0)}catch(C){$.error("Error during shutdown",C),process.exit(1)}};process.once("SIGINT",()=>a9("SIGINT")),process.once("SIGTERM",()=>a9("SIGTERM")),process.on("uncaughtException",async(a0)=>{if(a0&&a0.code==="ERR_SOCKET_CLOSED"){$.debug("Ignoring socket closed error (expected during PTY cleanup)");return}$.error("Uncaught exception",a0);try{Q?.markShuttingDown(),await Z?.stopAll()}catch{}process.exit(1)}),process.on("unhandledRejection",(a0)=>{$.error("Unhandled rejection",a0)})}catch(J){if(y().error("Fatal error",J),Z)try{await Z.stopAll()}catch{}process.exit(1)}}zX1();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naarang/ccc",
3
- "version": "3.1.0-beta.3",
3
+ "version": "3.1.0-beta.4",
4
4
  "description": "Code Chat Connect - Control Claude Code from your mobile device",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",