@uptimizr/collector-server 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +179 -6
- package/README.md +69 -0
- package/dist/__tests__/support/registryRequests.d.ts +2 -1
- package/dist/__tests__/support/registryRequests.d.ts.map +1 -1
- package/dist/__tests__/support/registryRequests.js +17 -1
- package/dist/__tests__/support/registryRequests.js.map +1 -1
- package/dist/__tests__/support/subscriptionFixtures.d.ts +63 -0
- package/dist/__tests__/support/subscriptionFixtures.d.ts.map +1 -0
- package/dist/__tests__/support/subscriptionFixtures.js +17 -0
- package/dist/__tests__/support/subscriptionFixtures.js.map +1 -0
- package/dist/agentReport.d.ts +256 -0
- package/dist/agentReport.d.ts.map +1 -0
- package/dist/agentReport.js +861 -0
- package/dist/agentReport.js.map +1 -0
- package/dist/app.d.ts +13 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +112 -5
- package/dist/app.js.map +1 -1
- package/dist/audit.d.ts +5 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +24 -4
- package/dist/audit.js.map +1 -1
- package/dist/auth.d.ts +41 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +47 -0
- package/dist/auth.js.map +1 -1
- package/dist/cli.js +99 -2
- package/dist/cli.js.map +1 -1
- package/dist/clickhouseStore.d.ts.map +1 -1
- package/dist/clickhouseStore.js +44 -2
- package/dist/clickhouseStore.js.map +1 -1
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -1
- package/dist/connectionLimiter.d.ts +23 -0
- package/dist/connectionLimiter.d.ts.map +1 -0
- package/dist/connectionLimiter.js +24 -0
- package/dist/connectionLimiter.js.map +1 -0
- package/dist/duckdbStore.d.ts.map +1 -1
- package/dist/duckdbStore.js +44 -1
- package/dist/duckdbStore.js.map +1 -1
- package/dist/internalDispatch.d.ts +36 -0
- package/dist/internalDispatch.d.ts.map +1 -0
- package/dist/internalDispatch.js +50 -0
- package/dist/internalDispatch.js.map +1 -0
- package/dist/memoryStore.d.ts.map +1 -1
- package/dist/memoryStore.js +314 -1
- package/dist/memoryStore.js.map +1 -1
- package/dist/mssqlStore.d.ts.map +1 -1
- package/dist/mssqlStore.js +44 -2
- package/dist/mssqlStore.js.map +1 -1
- package/dist/postgresStore.d.ts.map +1 -1
- package/dist/postgresStore.js +44 -2
- package/dist/postgresStore.js.map +1 -1
- package/dist/projectMetadata.d.ts +82 -0
- package/dist/projectMetadata.d.ts.map +1 -0
- package/dist/projectMetadata.js +50 -0
- package/dist/projectMetadata.js.map +1 -0
- package/dist/routes/context.d.ts +135 -0
- package/dist/routes/context.d.ts.map +1 -0
- package/dist/routes/context.js +306 -0
- package/dist/routes/context.js.map +1 -0
- package/dist/routes/insights.d.ts +36 -0
- package/dist/routes/insights.d.ts.map +1 -0
- package/dist/routes/insights.js +810 -0
- package/dist/routes/insights.js.map +1 -0
- package/dist/routes/live.d.ts +8 -0
- package/dist/routes/live.d.ts.map +1 -1
- package/dist/routes/live.js +8 -7
- package/dist/routes/live.js.map +1 -1
- package/dist/routes/mcp.d.ts +36 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +262 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/meta.d.ts +16 -2
- package/dist/routes/meta.d.ts.map +1 -1
- package/dist/routes/meta.js +699 -10
- package/dist/routes/meta.js.map +1 -1
- package/dist/routes/metadata.d.ts +31 -0
- package/dist/routes/metadata.d.ts.map +1 -0
- package/dist/routes/metadata.js +163 -0
- package/dist/routes/metadata.js.map +1 -0
- package/dist/routes/narrative.d.ts +36 -0
- package/dist/routes/narrative.d.ts.map +1 -0
- package/dist/routes/narrative.js +95 -0
- package/dist/routes/narrative.js.map +1 -0
- package/dist/routes/panels.d.ts +44 -0
- package/dist/routes/panels.d.ts.map +1 -0
- package/dist/routes/panels.js +108 -0
- package/dist/routes/panels.js.map +1 -0
- package/dist/routes/query-dsl.d.ts +50 -0
- package/dist/routes/query-dsl.d.ts.map +1 -0
- package/dist/routes/query-dsl.js +359 -0
- package/dist/routes/query-dsl.js.map +1 -0
- package/dist/routes/query.d.ts +36 -0
- package/dist/routes/query.d.ts.map +1 -1
- package/dist/routes/query.js +101 -13
- package/dist/routes/query.js.map +1 -1
- package/dist/routes/subscriptions.d.ts +52 -0
- package/dist/routes/subscriptions.d.ts.map +1 -0
- package/dist/routes/subscriptions.js +290 -0
- package/dist/routes/subscriptions.js.map +1 -0
- package/dist/store.d.ts +113 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/subscriptions/cli.d.ts +36 -0
- package/dist/subscriptions/cli.d.ts.map +1 -0
- package/dist/subscriptions/cli.js +143 -0
- package/dist/subscriptions/cli.js.map +1 -0
- package/dist/subscriptions/delivery.d.ts +101 -0
- package/dist/subscriptions/delivery.d.ts.map +1 -0
- package/dist/subscriptions/delivery.js +165 -0
- package/dist/subscriptions/delivery.js.map +1 -0
- package/dist/subscriptions/evaluate.d.ts +119 -0
- package/dist/subscriptions/evaluate.d.ts.map +1 -0
- package/dist/subscriptions/evaluate.js +326 -0
- package/dist/subscriptions/evaluate.js.map +1 -0
- package/dist/subscriptions/scheduler.d.ts +97 -0
- package/dist/subscriptions/scheduler.d.ts.map +1 -0
- package/dist/subscriptions/scheduler.js +332 -0
- package/dist/subscriptions/scheduler.js.map +1 -0
- package/dist/subscriptions/stream.d.ts +40 -0
- package/dist/subscriptions/stream.d.ts.map +1 -0
- package/dist/subscriptions/stream.js +38 -0
- package/dist/subscriptions/stream.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +25 -0
- package/dist/version.js.map +1 -0
- package/dist/webhookSignature.d.ts +64 -0
- package/dist/webhookSignature.d.ts.map +1 -0
- package/dist/webhookSignature.js +91 -0
- package/dist/webhookSignature.js.map +1 -0
- package/llms.txt +38 -1
- package/package.json +17 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentReport.js","sourceRoot":"","sources":["../src/agentReport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,GAWT,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAI9B;IAHX,YACE,OAAe;IACf,mDAAmD;IAC1C,WAAmB,IAAI,CAAC,KAAK;QAEtC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,aAAQ,GAAR,QAAQ,CAAqB;QAGtC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,6DAA6D;IAC7D,EAAE,EAAE,CAAC;IACL,kDAAkD;IAClD,KAAK,EAAE,CAAC;IACR,0DAA0D;IAC1D,QAAQ,EAAE,CAAC;IACX,iFAAiF;IACjF,UAAU,EAAE,CAAC;CACL,CAAC;AAKX,0EAA0E;AAC1E,MAAM,cAAc,GAA2C;IAC7D,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,gFAAgF;AAChF,MAAM,iBAAiB,GAA2C;IAChE,SAAS,EAAE,8BAA8B;IACzC,MAAM,EAAE,2BAA2B;CACpC,CAAC;AAEF;;;GAGG;AACH,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,sFAAsF;AACtF,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAkFvD,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,oEAAoE;AACpE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,KAAK;IACL,MAAM;IACN,SAAS;IACT,WAAW;CACZ,CAAC,CAAC;AAEH,wBAAwB;AACxB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;AAO/D;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAuB;IAC1D,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS;QAC3B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,gBAAgB,CACxB,uBAAuB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;gBAC5C,gFAAgF,CACnF,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,EAAE,GAAG,CAAC;gBAAE,MAAM,IAAI,gBAAgB,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAC;YACpE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,gBAAgB,CACxB,kBAAkB,IAAI,2DAA2D,CAClF,CAAC;QACJ,CAAC;QACD,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,gBAAgB,CAAC,uBAAuB,IAAI,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACnB,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,wCAAwC;AACxC,MAAM,YAAY,GAA2B;IAC3C,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,WAAW;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,KAA6B,EAC7B,KAAa,EACb,aAAa,GAAG,cAAc;IAE9B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,gBAAgB,CAAC,oDAAoD,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,KAAK,CAAC;QACxD,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;QACnF,IAAI,KAAK,IAAI,KAAK;YAAE,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;QAClF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,aAAa,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,gBAAgB,CACxB,mEAAmE;YACjE,4BAA4B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU;QAChC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QAC/C,CAAC,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB,EAAE,IAAY;IACzD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,gBAAgB,CAAC,GAAG,IAAI,+CAA+C,KAAK,KAAK,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,WAAW,GAAG;IAClB,gFAAgF;IAChF,qFAAqF;IACrF,8EAA8E;CAC/E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;;;;GAMG;AACH,MAAM,oBAAoB,GACxB,sFAAsF;IACtF,wFAAwF;IACxF,wFAAwF,CAAC;AAE3F,mFAAmF;AACnF,MAAM,mBAAmB,GAAG;IAC1B,gDAAgD;IAChD,gEAAgE;IAChE,kEAAkE;IAClE,+EAA+E;IAC/E,uEAAuE;IACvE,8EAA8E;IAC9E,kCAAkC;CACnC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAKvC;IACC,MAAM,KAAK,GAAG;QACZ,WAAW;QACX,EAAE;QACF,0BAA0B;QAC1B,EAAE;QACF,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC;QACpC,EAAE;QACF,wBAAwB,OAAO,CAAC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG;YAC3E,8EAA8E;YAC9E,oCAAoC;KACvC,CAAC;IACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CACR,iBAAiB,OAAO,CAAC,KAAK,kBAAkB,OAAO,CAAC,KAAK,wBAAwB;YACnF,8CAA8C,CACjD,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAaD;;;;;;;;GAQG;AACH,SAAS,gBAAgB,CACvB,MAAuB,EACvB,KAAqB,EACrB,MAA8B;IAE9B,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,MAAoB;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,MAAM,CAAC,SAAS,IAAI,KAAK,UAAU,MAAM,CAAC,CAAC;gBAC3C,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5C,MAAM,CAAC,SAAS,IAAI,KAAK,UAAU,SAAU,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtE,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAQD;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CACzB,QAAqB,EACrB,KAAoB,EACpB,MAA8B;IAE9B,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,OAAwB;YACrC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,KAAK,CAAC,KAAK,GAAG;oBACZ,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;oBAChF,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;iBACpF,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACnC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACtC,MAAM,CAAC,YAAY,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,YAAY,IAAI,mBAAmB,QAAQ,CAAC,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,WAAW,CAAC,IAAyC;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AAC9D,CAAC;AAED,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG,CAAC,qBAAqB,EAAE,8BAA8B,CAAC,CAAC;AAEpF;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAiC,EACjC,KAA8B;IAE9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgE,CAAC;IAC1F,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;gBAC3C,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAEtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9F,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI;YACjC,SAAS,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE;YACjC,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI;YACpC,EAAE,EAAE,CAAC,MAAM;YACX,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YACtC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;SACpC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,yEAAyE;AACzE,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,+EAA+E;AAC/E,SAAS,GAAG,CAAC,EAAU;IACrB,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;IACxE,MAAM,KAAK,GAAa;QACtB,KAAK,MAAM,CAAC,KAAK,EAAE;QACnB,EAAE;QACF,IAAI,KAAK,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;YACxE,aAAa,MAAM,CAAC,UAAU,uCAAuC,MAAM,CAAC,KAAK,KAAK;QACxF,EAAE;KACH,CAAC;IAEF,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CACvF,CAAC;IAEF,KAAK,CAAC,IAAI,CACR,EAAE,EACF,WAAW,EACX,EAAE,EACF,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAC3B,CAAC,CAAC,yEAAyE;QAC3E,CAAC,CAAC,kBAAkB,MAAM,CAAC,SAAS,CAAC,MAAM,gDAAgD,CAC9F,CAAC;IAEF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,EAAE,EACF,8CAA8C,EAC9C,iCAAiC,CAClC,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,KAAK,CAAC;YACzE,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,SAAS,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1F,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;gBACrF,GAAG,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CACrC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,KAAK,CAAC,IAAI,CACR,EAAE,EACF,QAAQ,EACR,EAAE,EACF,cAAc,MAAM,CAAC,KAAK,IAAI,EAC9B,gBAAgB,MAAM,CAAC,YAAY,EAAE,EACrC,eAAe,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,EAChE,qBAAqB,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,QAAQ,EAAE;QACvD,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,CAAC,EACpE,sBACE,MAAM,CAAC,OAAO,CAAC,SAAS;QACtB,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,0CAA0C;QACnE,CAAC,CAAC,mDACN,EAAE,EACF,eAAe,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EACxD,aACE,KAAK;QACH,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,SAAS,KAAK,CAAC,YAAY,IAAI,GAAG,oCAAoC;QACnG,CAAC,CAAC,+BACN,EAAE,EACF,EAAE,CACH,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAAwB;IACnE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,OAAwB;YACrC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CACrC,CAAC,OAAO,EAA8C,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CACjF,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK;qBAClC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;qBAClC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACrB,EAAE,EAAE,YAAY,KAAK,EAAE;oBACvB,IAAI;oBACJ,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,EAAE,OAAO,CAAC;iBACvD,CAAC,CAAC,CAAC;gBACN,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;YACrE,CAAC;YAED,MAAM,IAAI,GAAG,OAAO;iBACjB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,OAAO,CAAC,IAAI,qBAAqB,OAAO,CAAC,OAAO,UAAU,CAAC;iBACrF,IAAI,CAAC,MAAM,CAAC,CAAC;YAChB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EACL,uEAAuE;oBACvE,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,4DAA4D;oBACnF,qFAAqF;oBACrF,IAAI;aACP,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,SAAS,eAAe,CAAC,IAAc,EAAE,OAAwB;IAC/D,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW;QAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACnE,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW;QAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACnE,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW;QAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,GAAsB;IACpD,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,uBAAuB,IAAI,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QACxD,MAAM,IAAI,gBAAgB,CACxB,sEAAsE;YACpE,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,IAAI,CAChE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC;IACvB,MAAM,WAAW,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;IACtF,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,sBAAsB,IAAI,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,gBAAgB,CACxB,kDAAkD;YAChD,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,aAAa,IAAI,GAAG;YACpF,8EAA8E,CACjF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC;QAC/D,QAAQ,EAAE,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC;QACxE,MAAM;KACP,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,SAAS,qBAAqB,CAC5B,MAAwB,EACxB,OAAwB,EACxB,SAAuB;IAEvB,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAC7E,OAAO,oBAAoB,CAAC;QAC1B,GAAG,EAAE,MAAM,CAAC,IAAI;QAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,mBAAmB;QAC9B,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,sCAAsC;AACtC,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,2FAA2F;QAC3F,EAAE;QACF,QAAQ;QACR,kDAAkD;QAClD,uCAAuC;QACvC,EAAE;QACF,UAAU;QACV,+EAA+E;QAC/E,sDAAsD;QACtD,0FAA0F;QAC1F,+FAA+F;QAC/F,8DAA8D;QAC9D,qEAAqE;QACrE,uFAAuF;QACvF,kEAAkE;QAClE,iFAAiF;QACjF,uDAAuD;QACvD,yDAAyD,iBAAiB,GAAG;QAC7E,6EAA6E;QAC7E,uCAAuC;QACvC,EAAE;QACF,cAAc;QACd,6FAA6F;QAC7F,uFAAuF;QACvF,+FAA+F;QAC/F,oEAAoE;QACpE,8EAA8E;QAC9E,4FAA4F;QAC5F,4EAA4E;QAC5E,oFAAoF;QACpF,EAAE;QACF,aAAa;QACb,KAAK,IAAI,CAAC,EAAE,8CAA8C;QAC1D,KAAK,IAAI,CAAC,KAAK,8CAA8C;QAC7D,KAAK,IAAI,CAAC,QAAQ,oDAAoD;QACtE,KAAK,IAAI,CAAC,UAAU,qEAAqE;QACzF,EAAE;QACF,gFAAgF;QAChF,oFAAoF;KACrF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,KAAK,GAAa,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;aACpB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,uBAAuB,CAAC;YACzD,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC;QACvE,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,4EAA4E;AAC5E,SAAS,UAAU,CAAC,GAAsB,EAAE,IAAY,EAAE,IAAY;IACpE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,gBAAgB,CAAC,GAAG,IAAI,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,KAAK,UAAU,kBAAkB,CAC/B,MAAuB,EACvB,KAAa,EACb,MAA8B;IAE9B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACpD,OAAO,sBAAsB,CAAC,QAAiC,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4EAA4E;QAC5E,qEAAqE;QACrE,MAAM,CAAC,kCAAmC,GAAa,CAAC,OAAO,0BAA0B,CAAC,CAAC;QAC3F,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,SAAS,IAAI,CACX,MAAc,EACd,OAAe,EACf,IAA8D,EAC9D,KAAa;IAEb,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,KAAK,OAAO,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,eAAe,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,cAAc,CAC3B,MAAc,EACd,QAAgB,EAChB,MAAuB,EACvB,IAA2D;IAE3D,4EAA4E;IAC5E,sBAAsB;IACtB,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,CAAC;IACxD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,CAAC,uBAAuB,CAAC,EAAE,aAAa,EAAE;KAC3C,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,wBAAwB,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,CACT,+EAA+E;YAC7E,qDAAqD,CACxD,CAAC;IACJ,CAAC;IAED,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,gBAAgB,CACxB,uBAAuB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,YAAa,GAAa,CAAC,OAAO,EAAE,EACpF,IAAI,CAAC,QAAQ,CACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,gBAAgB,CACxB,uBAAuB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,aAAa,QAAQ,CAAC,MAAM,GAAG,EAC/E,IAAI,CAAC,QAAQ,CACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,yBAAyB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAuB,EACvB,YAAsC,EAAE;IAExC,MAAM,IAAI,GAAoB;QAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;QACnD,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC;QAClE,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAClC,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC;QACtE,GAAG,SAAS;KACb,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,gBAAgB,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAChC,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAuB,EAAE,IAAqB;IACnE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEvD,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,gBAAgB,CACxB,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,gBAAgB,CACxB,iBAAiB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe;YACvD,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnD,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;YACnD,MAAM,IAAI,gBAAgB,CAAC,UAAU,KAAK,CAAC,IAAI,yBAAyB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,4EAA4E;IAC5E,4EAA4E;IAC5E,+EAA+E;IAC/E,8CAA8C;IAC9C,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,gBAAgB,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAC7B,IAAI,CAAC,GAAG,EACR,wBAAwB,EACxB,yDAAyD,CAC1D,CAAC;IACF,MAAM,MAAM,GAAG,UAAU,CACvB,IAAI,CAAC,GAAG,EACR,kBAAkB,EAClB,iFAAiF,CAClF,CAAC;IACF,4EAA4E;IAC5E,+EAA+E;IAC/E,IAAI,CAAC,MAAM,CACT,0EAA0E;QACxE,sDAAsD,CACzD,CAAC;IAEF,MAAM,KAAK,GAAG,SAAS,CAAC;IACxB,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/E,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,uBAAuB,CAAC;QAC3C,KAAK;QACL,MAAM;QACN,KAAK;QACL,cAAc;KACf,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAExE,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CACT;YACE,uBAAuB,KAAK,CAAC,IAAI,IAAI;YACrC,EAAE;YACF,cAAc,YAAY,EAAE;YAC5B,cAAc,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG;YAC1E,cAAc,KAAK,IAAI,OAAO,EAAE;YAChC,cAAc,IAAI,CAAC,GAAG,CAAC,uBAAuB,IAAI,WAAW,eAAe;YAC5E,cAAc,QAAQ,EAAE;YACxB,oBAAoB,KAAK,CAAC,MAAM,6BAA6B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACtF,EAAE;YACF,kBAAkB;YAClB,EAAE;YACF,YAAY;YACZ,EAAE;YACF,cAAc;YACd,EAAE;YACF,QAAQ;YACR,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACF,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,eAAe,GAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACzE,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACvD,MAAM,QAAQ,GAAmB;QAC/B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;QACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;KACpC,CAAC;IAEF,IAAI,CAAC,MAAM,CACT,aAAa,KAAK,CAAC,IAAI,YAAY,YAAY,GAAG;QAChD,QAAQ,cAAc,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK,GAAG,CAC1D,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC;YACtB,QAAQ,EAAE,kBAAkB,CAC1B,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,eAAe,CAAC,EACpD,KAAK,EACL,IAAI,CAAC,MAAM,CACZ;YACD,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACpD,KAAK;YACL,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qEAAqE;QACrE,uDAAuD;QACvD,MAAM,IAAI,gBAAgB,CACxB,OAAO,cAAc,CAAC,IAAI,qBAAsB,GAAa,CAAC,OAAO,EAAE,EACvE,IAAI,CAAC,QAAQ,CACd,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE9B,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAoB;QAC9B,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,IAAI,IAAI;QACpB,MAAM;QACN,YAAY;QACZ,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE;QACpE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC;QACzB,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;QAC3B,UAAU,EAAE,UAAU,GAAG,SAAS;QAClC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ;QACR,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE;QAC3E,SAAS;QACT,MAAM,EAAE,MAAM,CAAC,OAAO;KACvB,CAAC;IACF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CACT,KAAK,MAAM,CAAC,MAAM,OAAO,SAAS,CAAC,MAAM,kDAAkD,CAC5F,CAAC;QACF,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC,EAAE,CAAC;AACjB,CAAC;AAED,mEAAmE;AACnE,SAAS,aAAa,CAAC,GAAuB;IAC5C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,iBAAiB,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,gBAAgB,CAAC,gDAAgD,GAAG,KAAK,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/app.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type FastifyInstance } from "fastify";
|
|
|
2
2
|
import type { CollectorConfig } from "./config.js";
|
|
3
3
|
import type { CollectorStore } from "./store.js";
|
|
4
4
|
import { type LiveBus } from "./liveBus.js";
|
|
5
|
+
import { type ProjectMetadataProvider } from "./projectMetadata.js";
|
|
5
6
|
export interface BuildAppDeps {
|
|
6
7
|
store: CollectorStore;
|
|
7
8
|
config: CollectorConfig;
|
|
@@ -10,8 +11,20 @@ export interface BuildAppDeps {
|
|
|
10
11
|
* in-process bus is created from `config.liveWindowMs` when omitted.
|
|
11
12
|
*/
|
|
12
13
|
liveBus?: LiveBus;
|
|
14
|
+
/**
|
|
15
|
+
* Outbound HTTP for subscription webhooks (#311). Injectable so a test can
|
|
16
|
+
* assert the signed body without a real socket; defaults to global `fetch`.
|
|
17
|
+
*/
|
|
18
|
+
fetchImpl?: typeof fetch;
|
|
13
19
|
/** Pass `true` (or Fastify logger options) to enable request logging. */
|
|
14
20
|
logger?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Source of the glossary and recent annotations the project context document
|
|
23
|
+
* reports (ADR 0051 §5). Defaults to reading them from `store` through the
|
|
24
|
+
* metadata write path of #310 — see `projectMetadata.ts`. Injectable so a
|
|
25
|
+
* test can supply its own without a store.
|
|
26
|
+
*/
|
|
27
|
+
projectMetadata?: ProjectMetadataProvider;
|
|
15
28
|
}
|
|
16
29
|
/**
|
|
17
30
|
* Build the collector Fastify instance. Pure factory — takes its dependencies so
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAIA,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAMxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAIA,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAMxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAoB1F,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,uBAAuB,CAAC;CAC3C;AA0BD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAoM3E"}
|
package/dist/app.js
CHANGED
|
@@ -5,13 +5,26 @@ import fastifyStatic from "@fastify/static";
|
|
|
5
5
|
import Fastify, {} from "fastify";
|
|
6
6
|
import { serializerCompiler, validatorCompiler, } from "fastify-type-provider-zod";
|
|
7
7
|
import { createLiveBus } from "./liveBus.js";
|
|
8
|
-
import { attachApiKey } from "./auth.js";
|
|
8
|
+
import { attachApiKey, normalizeMcpBearer } from "./auth.js";
|
|
9
|
+
import { storeProjectMetadata } from "./projectMetadata.js";
|
|
9
10
|
import { registerAuditHooks, startAuditRetention } from "./audit.js";
|
|
10
11
|
import { buildDashboardCsp } from "./csp.js";
|
|
12
|
+
import { isInternalDispatch, newInternalDispatchToken } from "./internalDispatch.js";
|
|
11
13
|
import { collectRoutes } from "./routes/collect.js";
|
|
14
|
+
import { contextRoutes } from "./routes/context.js";
|
|
15
|
+
import { insightRoutes } from "./routes/insights.js";
|
|
12
16
|
import { liveRoutes } from "./routes/live.js";
|
|
17
|
+
import { mcpRoutes } from "./routes/mcp.js";
|
|
13
18
|
import { collectRouteSchemas, metaRoutes } from "./routes/meta.js";
|
|
19
|
+
import { metadataRoutes } from "./routes/metadata.js";
|
|
20
|
+
import { panelRoutes } from "./routes/panels.js";
|
|
21
|
+
import { narrativeRoutes } from "./routes/narrative.js";
|
|
14
22
|
import { queryRoutes } from "./routes/query.js";
|
|
23
|
+
import { queryDslRoutes } from "./routes/query-dsl.js";
|
|
24
|
+
import { subscriptionRoutes } from "./routes/subscriptions.js";
|
|
25
|
+
import { createSubscriptionScheduler } from "./subscriptions/scheduler.js";
|
|
26
|
+
import { createSubscriptionStream } from "./subscriptions/stream.js";
|
|
27
|
+
import { createConnectionLimiter } from "./connectionLimiter.js";
|
|
15
28
|
/**
|
|
16
29
|
* Strip the live-SSE `?token=` from a logged URL. The token is a short-lived
|
|
17
30
|
* bearer credential; it must never land in access logs (or proxy logs).
|
|
@@ -60,13 +73,26 @@ export async function buildApp(deps) {
|
|
|
60
73
|
const contentSecurityPolicy = config.dashboardDir && config.cspMode === "strict"
|
|
61
74
|
? buildDashboardCsp(config.dashboardDir, config.corsOrigins)
|
|
62
75
|
: false;
|
|
76
|
+
// Per-process marker for the reads the hosted MCP transport dispatches to this
|
|
77
|
+
// same app (#313). Minted only when that transport is on; see
|
|
78
|
+
// `internalDispatch.ts` for why it exists and why it must be unguessable.
|
|
79
|
+
const internalDispatchToken = config.mcpHttpEnabled ? newInternalDispatchToken() : undefined;
|
|
63
80
|
await app.register(helmet, config.dashboardDir ? { contentSecurityPolicy } : {});
|
|
64
81
|
await app.register(cors, {
|
|
65
82
|
origin: config.corsOrigins.length > 0 ? config.corsOrigins : false,
|
|
66
83
|
// @fastify/cors defaults `methods` to GET,HEAD,POST — which omits PUT and so
|
|
67
84
|
// breaks the browser preflight for scene-proxy registration
|
|
68
|
-
// (PUT /api/v1/scenes/:id/representation).
|
|
69
|
-
|
|
85
|
+
// (PUT /api/v1/scenes/:id/representation). DELETE is needed for the metadata
|
|
86
|
+
// write path (#310: removing an annotation, a term, a saved analysis) and for
|
|
87
|
+
// ending an MCP session over `/mcp` (#313). List the verbs the HTTP API uses.
|
|
88
|
+
methods: ["GET", "HEAD", "POST", "PUT", "DELETE"],
|
|
89
|
+
// Streamable HTTP returns the session id in a response header the client has
|
|
90
|
+
// to echo back; a browser cannot read it unless it is explicitly exposed.
|
|
91
|
+
...(config.mcpHttpEnabled ? { exposedHeaders: ["Mcp-Session-Id"] } : {}),
|
|
92
|
+
// `allowedHeaders` is deliberately left unset: the plugin then reflects the
|
|
93
|
+
// browser's `Access-Control-Request-Headers`, which already covers the MCP
|
|
94
|
+
// request headers (`Mcp-Session-Id`, `Mcp-Protocol-Version`, `Last-Event-ID`)
|
|
95
|
+
// without narrowing what every other client may send today.
|
|
70
96
|
// The SDK ingests via `navigator.sendBeacon`, which always sends in
|
|
71
97
|
// credentials mode `include`. With a non-safelisted `application/json` body
|
|
72
98
|
// that triggers a credentialed CORS preflight, so the response must echo
|
|
@@ -84,7 +110,12 @@ export async function buildApp(deps) {
|
|
|
84
110
|
// rate-limit plugin installs, so registration order here is load-bearing.
|
|
85
111
|
app.decorateRequest("resolvedKey", null);
|
|
86
112
|
app.decorateRequest("auditRowCount", null);
|
|
113
|
+
app.decorateRequest("auditParams", null);
|
|
87
114
|
app.addHook("onRequest", async (request) => {
|
|
115
|
+
// MCP clients send `Authorization: Bearer <key>`; fold it into `x-api-key`
|
|
116
|
+
// first so there is still one key-resolution path (#313).
|
|
117
|
+
if (config.mcpHttpEnabled)
|
|
118
|
+
normalizeMcpBearer(request);
|
|
88
119
|
await attachApiKey(request, store);
|
|
89
120
|
});
|
|
90
121
|
await app.register(rateLimit, {
|
|
@@ -96,10 +127,15 @@ export async function buildApp(deps) {
|
|
|
96
127
|
// `normalizeIP` is exactly what the plugin's own default key generator uses,
|
|
97
128
|
// so requests without a per-key budget keep their existing IPv6-aware bucket.
|
|
98
129
|
keyGenerator: (request) => request.resolvedKey?.rateLimit ? `key:${request.resolvedKey.keyId}` : normalizeIP(request.ip),
|
|
130
|
+
// A read the collector dispatched to itself for an MCP tool call is already
|
|
131
|
+
// paid for: the `POST /mcp` that carried the call went through this same
|
|
132
|
+
// limiter on the caller's bucket. Charging the inner read again would halve
|
|
133
|
+
// every key's effective allowance over the hosted transport.
|
|
134
|
+
allowList: (request) => isInternalDispatch(request, internalDispatchToken),
|
|
99
135
|
});
|
|
100
136
|
// Audit every authenticated, non-dashboard request (ADR 0051 §7). Registered
|
|
101
137
|
// after the rate limiter so a throttled request is still recorded.
|
|
102
|
-
registerAuditHooks(app, store, config);
|
|
138
|
+
registerAuditHooks(app, store, config, internalDispatchToken);
|
|
103
139
|
const stopAuditRetention = startAuditRetention(app, store, config);
|
|
104
140
|
app.addHook("onClose", async () => stopAuditRetention());
|
|
105
141
|
// Record every route's Zod schemas as they are registered, so the generated
|
|
@@ -110,8 +146,79 @@ export async function buildApp(deps) {
|
|
|
110
146
|
const routeSchemas = collectRouteSchemas(app);
|
|
111
147
|
app.get("/health", async () => ({ status: "ok" }));
|
|
112
148
|
await app.register(collectRoutes, { store, config, liveBus });
|
|
113
|
-
|
|
149
|
+
// One SSE budget for the whole collector: the live endpoints and the
|
|
150
|
+
// conditional-subscription stream hold the same kind of socket, so
|
|
151
|
+
// `LIVE_MAX_CONNECTIONS` bounds their total rather than each of them.
|
|
152
|
+
const sseConnections = createConnectionLimiter(config.liveMaxConnections);
|
|
153
|
+
await app.register(liveRoutes, { store, config, liveBus, connections: sseConnections });
|
|
114
154
|
await app.register(queryRoutes, { store, config });
|
|
155
|
+
// The query DSL (ADR 0051 §3): one route that can run any registry metric.
|
|
156
|
+
await app.register(queryDslRoutes, { store });
|
|
157
|
+
// The metadata write path (#310) is its own plugin so the read API above stays
|
|
158
|
+
// exactly what it is — aggregate and read-only — and so the `annotate`-gated
|
|
159
|
+
// surface is one file to inspect.
|
|
160
|
+
await app.register(metadataRoutes, { store });
|
|
161
|
+
// Declarative panel specs (#315) — the same `annotate`-gated surface, kept
|
|
162
|
+
// in its own plugin so what the dashboard can be asked to *render* is one
|
|
163
|
+
// file to inspect.
|
|
164
|
+
await app.register(panelRoutes, { store });
|
|
165
|
+
// Collector-hosted MCP over Streamable HTTP (ADR 0051 §7). Opt-in: without
|
|
166
|
+
// `COLLECTOR_MCP_HTTP` the route does not exist.
|
|
167
|
+
if (config.mcpHttpEnabled && internalDispatchToken != null) {
|
|
168
|
+
await app.register(mcpRoutes, { store, config, internalDispatchToken });
|
|
169
|
+
}
|
|
170
|
+
// Session narrative (#314): its own plugin so it does not inherit the query
|
|
171
|
+
// plugin's `format` hook, which knows only the three shared envelopes.
|
|
172
|
+
await app.register(narrativeRoutes, { store, config });
|
|
173
|
+
// The project context document (#308). Its glossary and recent annotations
|
|
174
|
+
// come from the metadata write path (#310) through the narrow provider seam,
|
|
175
|
+
// which now has a real default reading the store.
|
|
176
|
+
await app.register(contextRoutes, {
|
|
177
|
+
store,
|
|
178
|
+
config,
|
|
179
|
+
metadata: deps.projectMetadata ?? storeProjectMetadata(store),
|
|
180
|
+
});
|
|
181
|
+
// Derived reads over the query surface (ADR 0051 §4): `baseline` and `movers`.
|
|
182
|
+
// Its own plugin so the envelope hook and the metric-resolution 400s stay
|
|
183
|
+
// scoped to the two insight routes.
|
|
184
|
+
await app.register(insightRoutes, { store });
|
|
185
|
+
// Conditional subscriptions (ADR 0051 §6): the CRUD resource, the firing log
|
|
186
|
+
// and the SSE stream. The scheduler behind them is created unconditionally —
|
|
187
|
+
// the routes need it for `POST …/test` even when evaluation is off — but only
|
|
188
|
+
// `reload()` installs timers, and that is gated on `COLLECTOR_SUBSCRIPTIONS`.
|
|
189
|
+
const subscriptionStream = createSubscriptionStream();
|
|
190
|
+
const scheduler = createSubscriptionScheduler({
|
|
191
|
+
store,
|
|
192
|
+
config,
|
|
193
|
+
liveBus,
|
|
194
|
+
stream: subscriptionStream,
|
|
195
|
+
log: app.log,
|
|
196
|
+
fetchImpl: deps.fetchImpl,
|
|
197
|
+
});
|
|
198
|
+
await app.register(subscriptionRoutes, {
|
|
199
|
+
store,
|
|
200
|
+
config,
|
|
201
|
+
scheduler,
|
|
202
|
+
stream: subscriptionStream,
|
|
203
|
+
connections: sseConnections,
|
|
204
|
+
});
|
|
205
|
+
app.addHook("onClose", async () => {
|
|
206
|
+
scheduler.stop();
|
|
207
|
+
subscriptionStream.stop();
|
|
208
|
+
});
|
|
209
|
+
if (config.subscriptions) {
|
|
210
|
+
// After `ready()`, so a store that is still migrating on boot is not read
|
|
211
|
+
// mid-migration; a failure only logs, because an unreadable subscription
|
|
212
|
+
// table must not stop the collector serving.
|
|
213
|
+
app.addHook("onReady", async () => {
|
|
214
|
+
try {
|
|
215
|
+
await scheduler.reload();
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
app.log.warn({ err }, "failed to start the subscription scheduler");
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
115
222
|
await app.register(metaRoutes, { routeSchemas });
|
|
116
223
|
// All-in-one: serve a pre-built static dashboard from `dashboardDir`. The API
|
|
117
224
|
// routes above (`/health`, `/api/v1/*`) are matched first; everything else
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,OAAO,EAAE,EAAwB,MAAM,SAAS,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAElB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/audit.d.ts
CHANGED
|
@@ -7,8 +7,12 @@ import type { CollectorStore } from "./store.js";
|
|
|
7
7
|
* - `preSerialization` captures the row count when a handler returned an array
|
|
8
8
|
* (streamed/hijacked responses simply have none);
|
|
9
9
|
* - `onResponse` writes the row for authenticated, non-dashboard requests.
|
|
10
|
+
*
|
|
11
|
+
* `internalDispatchToken` is the per-process token the hosted MCP transport
|
|
12
|
+
* marks its own in-process reads with; when supplied, those rows are tagged
|
|
13
|
+
* `mcp-http`. It is `undefined` unless `COLLECTOR_MCP_HTTP` is on.
|
|
10
14
|
*/
|
|
11
|
-
export declare function registerAuditHooks(app: FastifyInstance, store: CollectorStore, config: CollectorConfig): void;
|
|
15
|
+
export declare function registerAuditHooks(app: FastifyInstance, store: CollectorStore, config: CollectorConfig, internalDispatchToken?: string): void;
|
|
12
16
|
/**
|
|
13
17
|
* Start the retention sweep: delete audit rows older than
|
|
14
18
|
* `config.auditRetentionDays` now, then every {@link PRUNE_INTERVAL_MS}. The
|
package/dist/audit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkCjD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,eAAe,EACvB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,IAAI,CAyCN;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,eAAe,GACtB,MAAM,IAAI,CAkBZ"}
|
package/dist/audit.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { serializeAuditParams } from "@uptimizr/db";
|
|
2
|
-
import { isDashboardRequest } from "./auth.js";
|
|
2
|
+
import { isDashboardRequest, MCP_ROUTE_URL } from "./auth.js";
|
|
3
|
+
import { isInternalDispatch } from "./internalDispatch.js";
|
|
3
4
|
/**
|
|
4
5
|
* Agent audit log plumbing (#309, ADR 0051 §7).
|
|
5
6
|
*
|
|
@@ -7,6 +8,15 @@ import { isDashboardRequest } from "./auth.js";
|
|
|
7
8
|
* session is recorded: which key, which endpoint, the (bounded, redacted)
|
|
8
9
|
* parameters, the row count, the duration and the status.
|
|
9
10
|
*
|
|
11
|
+
* A request the collector dispatched to itself for an MCP session (#313) is the
|
|
12
|
+
* same row with `surface: "mcp-http"` — it *is* the tool call, so recording it
|
|
13
|
+
* where every other read is recorded keeps one log rather than two. The
|
|
14
|
+
* successful `/mcp` envelope requests around it are **not** recorded: a JSON-RPC
|
|
15
|
+
* envelope names no endpoint and carries no parameters, so a row per protocol
|
|
16
|
+
* message would be pure noise next to the tool call it already produced. A
|
|
17
|
+
* *refused* `/mcp` request still is — a key turned away at the MCP door is
|
|
18
|
+
* exactly what a project owner wants to see.
|
|
19
|
+
*
|
|
10
20
|
* Two invariants hold everywhere in here:
|
|
11
21
|
*
|
|
12
22
|
* - **It never blocks the response.** The row is written from an `onResponse`
|
|
@@ -24,8 +34,12 @@ const MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
|
24
34
|
* - `preSerialization` captures the row count when a handler returned an array
|
|
25
35
|
* (streamed/hijacked responses simply have none);
|
|
26
36
|
* - `onResponse` writes the row for authenticated, non-dashboard requests.
|
|
37
|
+
*
|
|
38
|
+
* `internalDispatchToken` is the per-process token the hosted MCP transport
|
|
39
|
+
* marks its own in-process reads with; when supplied, those rows are tagged
|
|
40
|
+
* `mcp-http`. It is `undefined` unless `COLLECTOR_MCP_HTTP` is on.
|
|
27
41
|
*/
|
|
28
|
-
export function registerAuditHooks(app, store, config) {
|
|
42
|
+
export function registerAuditHooks(app, store, config, internalDispatchToken) {
|
|
29
43
|
app.addHook("preSerialization", async (request, _reply, payload) => {
|
|
30
44
|
if (Array.isArray(payload))
|
|
31
45
|
request.auditRowCount = payload.length;
|
|
@@ -37,6 +51,10 @@ export function registerAuditHooks(app, store, config) {
|
|
|
37
51
|
return;
|
|
38
52
|
if (!config.auditDashboardRequests && isDashboardRequest(request))
|
|
39
53
|
return;
|
|
54
|
+
// A successful MCP protocol message is not an endpoint read; its tool call
|
|
55
|
+
// is already recorded as `mcp-http`. Refusals are kept (see above).
|
|
56
|
+
if (request.routeOptions.url === MCP_ROUTE_URL && reply.statusCode < 400)
|
|
57
|
+
return;
|
|
40
58
|
// `reply.elapsedTime` is the ms between the request arriving and the
|
|
41
59
|
// response being sent — exactly the duration the audit log wants.
|
|
42
60
|
const durationMs = Math.round(reply.elapsedTime);
|
|
@@ -45,11 +63,13 @@ export function registerAuditHooks(app, store, config) {
|
|
|
45
63
|
.recordAudit({
|
|
46
64
|
projectId: resolved.projectId,
|
|
47
65
|
keyId: resolved.keyId,
|
|
48
|
-
surface: "http",
|
|
66
|
+
surface: isInternalDispatch(request, internalDispatchToken) ? "mcp-http" : "http",
|
|
49
67
|
// The route pattern (`/api/v1/sessions/:id/events`), not the raw URL:
|
|
50
68
|
// it groups cleanly and cannot carry a querystring credential.
|
|
51
69
|
toolOrPath: request.routeOptions.url ?? new URL(request.url, "http://x").pathname,
|
|
52
|
-
|
|
70
|
+
// A route that carries its request in the body (the query DSL) records
|
|
71
|
+
// it explicitly; everything else is described by its querystring.
|
|
72
|
+
params: serializeAuditParams(request.auditParams ?? request.query),
|
|
53
73
|
rowCount: request.auditRowCount,
|
|
54
74
|
durationMs,
|
|
55
75
|
status: reply.statusCode,
|
package/dist/audit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FastifyReply, FastifyRequest } from "fastify";
|
|
2
|
-
import type { ApiKeyCapability, ResolvedApiKey } from "@uptimizr/db";
|
|
2
|
+
import type { ApiKeyCapability, MetadataAuthorKind, ResolvedApiKey } from "@uptimizr/db";
|
|
3
3
|
import type { CollectorStore } from "./store.js";
|
|
4
4
|
/**
|
|
5
5
|
* Request-boundary authentication and capability checks for the collector
|
|
@@ -28,6 +28,13 @@ declare module "fastify" {
|
|
|
28
28
|
resolvedKey: ResolvedApiKey | null;
|
|
29
29
|
/** Rows in the response body, when it serialized to an array (audit log). */
|
|
30
30
|
auditRowCount: number | null;
|
|
31
|
+
/**
|
|
32
|
+
* What the audit log should record as this request's parameters, when the
|
|
33
|
+
* querystring is not the whole story. `POST /api/v1/query` carries its
|
|
34
|
+
* query in the body (ADR 0051 §3), so without this the audit trail would
|
|
35
|
+
* show a bare path and nothing about what was asked for.
|
|
36
|
+
*/
|
|
37
|
+
auditParams: unknown;
|
|
31
38
|
}
|
|
32
39
|
}
|
|
33
40
|
/** Header a first-party UI sets to identify itself (see `isDashboardRequest`). */
|
|
@@ -47,6 +54,39 @@ export declare const CLIENT_HEADER = "x-uptimizr-client";
|
|
|
47
54
|
* authenticated request without exception.
|
|
48
55
|
*/
|
|
49
56
|
export declare function isDashboardRequest(request: FastifyRequest): boolean;
|
|
57
|
+
/** The route the bearer-header alias below is accepted on, and only that one. */
|
|
58
|
+
export declare const MCP_ROUTE_URL = "/mcp";
|
|
59
|
+
/**
|
|
60
|
+
* Accept `Authorization: Bearer <key>` as an alias for `x-api-key` **on the
|
|
61
|
+
* hosted MCP route only** (ADR 0051 §7, design sketch §G.1).
|
|
62
|
+
*
|
|
63
|
+
* MCP clients configure a remote server as a URL plus headers and send the
|
|
64
|
+
* bearer form the MCP specification describes; the rest of the collector has
|
|
65
|
+
* always used `x-api-key`. Normalising one into the other here — in the same
|
|
66
|
+
* `onRequest` hook, *before* {@link attachApiKey} — keeps exactly one
|
|
67
|
+
* key-resolution path, so the capability check, the audit row and the per-key
|
|
68
|
+
* rate-limit bucket all work for a bearer-authenticated MCP client too.
|
|
69
|
+
*
|
|
70
|
+
* Scoped to `/mcp` on purpose: this is an alias for one route, not a new
|
|
71
|
+
* site-wide authentication scheme. An explicit `x-api-key` always wins, and a
|
|
72
|
+
* malformed or empty bearer value is ignored rather than rejected, so the usual
|
|
73
|
+
* "no key → 401" path handles it.
|
|
74
|
+
*/
|
|
75
|
+
export declare function normalizeMcpBearer(request: FastifyRequest): void;
|
|
76
|
+
/**
|
|
77
|
+
* Who a metadata write (#310, ADR 0051 §5) is attributed to.
|
|
78
|
+
*
|
|
79
|
+
* It reuses the surface marker the audit log already distinguishes on rather
|
|
80
|
+
* than inventing a second notion of "who": the dashboard's own session is a
|
|
81
|
+
* **person** clicking in a UI, and everything else holding an `annotate` key —
|
|
82
|
+
* an MCP client, the in-browser assistant writing up its own answer, a
|
|
83
|
+
* scheduled report — is an **agent**.
|
|
84
|
+
*
|
|
85
|
+
* It is derived from the request, never read from the payload, so a stored row
|
|
86
|
+
* cannot claim an authorship its writer did not send. Like the audit filter it
|
|
87
|
+
* is an honest label, not a security boundary.
|
|
88
|
+
*/
|
|
89
|
+
export declare function metadataAuthorKind(request: FastifyRequest): MetadataAuthorKind;
|
|
50
90
|
/**
|
|
51
91
|
* Resolve the request's `x-api-key` into {@link FastifyRequest.resolvedKey}.
|
|
52
92
|
* Never replies and never throws: an absent, unknown or revoked key simply
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB;;;;;WAKG;QACH,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;QACnC,6EAA6E;QAC7E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B;;;;;WAKG;QACH,WAAW,EAAE,OAAO,CAAC;KACtB;CACF;AAED,kFAAkF;AAClF,eAAO,MAAM,aAAa,sBAAsB,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAEnE;AAED,iFAAiF;AACjF,eAAO,MAAM,aAAa,SAAS,CAAC;AAEpC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAQhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CAE9E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhG;AAUD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmBhC"}
|
package/dist/auth.js
CHANGED
|
@@ -17,6 +17,53 @@ export const CLIENT_HEADER = "x-uptimizr-client";
|
|
|
17
17
|
export function isDashboardRequest(request) {
|
|
18
18
|
return request.headers[CLIENT_HEADER] === "dashboard";
|
|
19
19
|
}
|
|
20
|
+
/** The route the bearer-header alias below is accepted on, and only that one. */
|
|
21
|
+
export const MCP_ROUTE_URL = "/mcp";
|
|
22
|
+
/**
|
|
23
|
+
* Accept `Authorization: Bearer <key>` as an alias for `x-api-key` **on the
|
|
24
|
+
* hosted MCP route only** (ADR 0051 §7, design sketch §G.1).
|
|
25
|
+
*
|
|
26
|
+
* MCP clients configure a remote server as a URL plus headers and send the
|
|
27
|
+
* bearer form the MCP specification describes; the rest of the collector has
|
|
28
|
+
* always used `x-api-key`. Normalising one into the other here — in the same
|
|
29
|
+
* `onRequest` hook, *before* {@link attachApiKey} — keeps exactly one
|
|
30
|
+
* key-resolution path, so the capability check, the audit row and the per-key
|
|
31
|
+
* rate-limit bucket all work for a bearer-authenticated MCP client too.
|
|
32
|
+
*
|
|
33
|
+
* Scoped to `/mcp` on purpose: this is an alias for one route, not a new
|
|
34
|
+
* site-wide authentication scheme. An explicit `x-api-key` always wins, and a
|
|
35
|
+
* malformed or empty bearer value is ignored rather than rejected, so the usual
|
|
36
|
+
* "no key → 401" path handles it.
|
|
37
|
+
*/
|
|
38
|
+
export function normalizeMcpBearer(request) {
|
|
39
|
+
if (request.routeOptions.url !== MCP_ROUTE_URL)
|
|
40
|
+
return;
|
|
41
|
+
const existing = request.headers["x-api-key"];
|
|
42
|
+
if (typeof existing === "string" && existing.length > 0)
|
|
43
|
+
return;
|
|
44
|
+
const authorization = request.headers.authorization;
|
|
45
|
+
if (typeof authorization !== "string")
|
|
46
|
+
return;
|
|
47
|
+
const match = /^Bearer[ \t]+(\S+)$/i.exec(authorization.trim());
|
|
48
|
+
if (match)
|
|
49
|
+
request.headers["x-api-key"] = match[1];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Who a metadata write (#310, ADR 0051 §5) is attributed to.
|
|
53
|
+
*
|
|
54
|
+
* It reuses the surface marker the audit log already distinguishes on rather
|
|
55
|
+
* than inventing a second notion of "who": the dashboard's own session is a
|
|
56
|
+
* **person** clicking in a UI, and everything else holding an `annotate` key —
|
|
57
|
+
* an MCP client, the in-browser assistant writing up its own answer, a
|
|
58
|
+
* scheduled report — is an **agent**.
|
|
59
|
+
*
|
|
60
|
+
* It is derived from the request, never read from the payload, so a stored row
|
|
61
|
+
* cannot claim an authorship its writer did not send. Like the audit filter it
|
|
62
|
+
* is an honest label, not a security boundary.
|
|
63
|
+
*/
|
|
64
|
+
export function metadataAuthorKind(request) {
|
|
65
|
+
return isDashboardRequest(request) ? "user" : "agent";
|
|
66
|
+
}
|
|
20
67
|
/**
|
|
21
68
|
* Resolve the request's `x-api-key` into {@link FastifyRequest.resolvedKey}.
|
|
22
69
|
* Never replies and never throws: an absent, unknown or revoked key simply
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|