@gizmodata/hardcharger-mcp 0.0.0 → 2.1.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/CHANGELOG.md +129 -0
- package/LICENSE +201 -0
- package/NOTICE +8 -0
- package/README.md +490 -3
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +75 -0
- package/dist/cli.js.map +1 -0
- package/dist/connection.d.ts +260 -0
- package/dist/connection.js +797 -0
- package/dist/connection.js.map +1 -0
- package/dist/format.d.ts +56 -0
- package/dist/format.js +240 -0
- package/dist/format.js.map +1 -0
- package/dist/oauth-facade.d.ts +50 -0
- package/dist/oauth-facade.js +223 -0
- package/dist/oauth-facade.js.map +1 -0
- package/dist/oauth.d.ts +94 -0
- package/dist/oauth.js +228 -0
- package/dist/oauth.js.map +1 -0
- package/dist/params.d.ts +61 -0
- package/dist/params.js +200 -0
- package/dist/params.js.map +1 -0
- package/dist/registry.d.ts +45 -0
- package/dist/registry.js +91 -0
- package/dist/registry.js.map +1 -0
- package/dist/server.d.ts +38 -0
- package/dist/server.js +753 -0
- package/dist/server.js.map +1 -0
- package/dist/sessions.d.ts +52 -0
- package/dist/sessions.js +113 -0
- package/dist/sessions.js.map +1 -0
- package/dist/sql-guard.d.ts +62 -0
- package/dist/sql-guard.js +460 -0
- package/dist/sql-guard.js.map +1 -0
- package/dist/sso.d.ts +29 -0
- package/dist/sso.js +145 -0
- package/dist/sso.js.map +1 -0
- package/dist/transports.d.ts +29 -0
- package/dist/transports.js +308 -0
- package/dist/transports.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +65 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,4CAA4C;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAIL,gBAAgB,EAChB,oBAAoB,EACpB,OAAO,IAAI,kBAAkB,EAC7B,QAAQ,GACT,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,EAAoB,MAAM,cAAc,CAAC;AAwDvD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,GAAG;IACZ,YAAY,EAAE,GAAG;IACjB,mBAAmB,EAAE,EAAE;IACvB,cAAc,EAAE,SAAS;IACzB,kBAAkB,EAAE,IAAI;IACxB,WAAW,EAAE,GAAG;CACR,CAAC;AAEX,yGAAyG;AACzG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,CAAU,CAAC;AAElD,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAE9C,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CAAC,GAAuB;IAC7C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,OAAO,CAAC,KAAK,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,GAAuB,EAAE,QAAiB;IACnF,IAAI,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,CAAC,GAAG,GAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,6BAA6B,GAAG,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,GAAuB,EACvB,QAAgB,EAChB,EAAE,GAAG,EAAE,GAAG,EAAiC;IAE3C,IAAI,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,QAAQ,GAAG,EAAE,CAAC;QAC5E,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,uBAAuB,KAAK,UAAU,GAAG,KAAK,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,GAAuB;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAI,CAAC,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,GAAW;IAC3D,IAAI,IAAS,CAAC;IACd,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnG,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACxD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;AACrF,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CACtB,GAAsB,EACtB,MAAc,EACd,WAAmB,EACnB,OAA4D;IAE5D,MAAM,CAAC,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC;IAChD,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,WAAW,CACnB,oBAAoB,IAAI,MAAM,MAAM,kEAAkE,CACvG,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,MAAM,KAAK,EAAE,MAAM,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACtF,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAE9C,MAAM,WAAW,GAAG,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAC;IAC1F,IAAI,WAAW,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,WAAW,CAAC,eAAe,IAAI,MAAM,MAAM,gBAAgB,MAAM,gCAAgC,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,WAAW,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,IAAI,WAAW,CACnB,eAAe,IAAI,iBAAiB,MAAM,YAAY,MAAM,eAAe,MAAM,kBAAkB,CACpG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,WAAW,CAAC,eAAe,IAAI,MAAM,MAAM,iBAAiB,MAAM,gCAAgC,CAAC,CAAC;IAChH,CAAC;IACD,MAAM,cAAc,GAAG,YAAY,KAAK,SAAS,CAAC;IAClD,IAAI,CAAC,cAAc,IAAI,YAAY,KAAK,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAClE,MAAM,IAAI,WAAW,CACnB,eAAe,IAAI,MAAM,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,cAAc;YACjG,OAAO,MAAM,sBAAsB,CACtC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,WAAW,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACjF,MAAM,IAAI,WAAW,CACnB,eAAe,IAAI,MAAM,MAAM,gCAAgC,MAAM,cAAc,MAAM,YAAY;YACnG,GAAG,MAAM,mCAAmC,MAAM,eAAe,MAAM,+BAA+B;YACtG,8EAA8E,CACjF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI;QACJ,GAAG,MAAM;QACT,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC5C,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC5C,KAAK;QACL,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,aAAa,EAAE,YAAY,CAAC,GAAG,MAAM,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACpF,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC9C,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC5C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;KACjD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,wBAAwB,EAAE,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IAC5F,MAAM,mBAAmB,GAAG,YAAY,CACtC,mCAAmC,EACnC,GAAG,CAAC,iCAAiC,EACrC,QAAQ,CAAC,mBAAmB,EAC5B,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CACvB,CAAC;IACF,MAAM,OAAO,GAAG,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC;IAEnD,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,CAC7B,GAAG,EACH,cAAc,EACd,QAAQ,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,QAAQ,CAAC,cAAc,EACpE,OAAO,CACR,CAAC;IACF,IAAI,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAgD,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3F,GAAG,EAAE,IAAI;QACT,WAAW,EAAE,SAAS,IAAI,EAAE;KAC7B,CAAC,CAAC,CAAC;IACJ,KAAK,MAAM,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9E,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,WAAW,CAAC,6BAA6B,GAAG,kEAAkE,CAAC,CAAC;QAC5H,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,SAAS,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,WAAW,CACnB,+FAA+F;YAC7F,qFAAqF,CACxF,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,WAAW,CAAC,oBAAoB,CAAC,CAAC,IAAI,wDAAwD,CAAC,CAAC;QAC5G,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,cAAc,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3D,MAAM,IAAI,WAAW,CACnB,kIAAkI,CACnI,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW;QACX,WAAW,EAAE,YAAY,CAAC,0BAA0B,EAAE,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC;QAC1F,OAAO,EAAE,YAAY,CAAC,sBAAsB,EAAE,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QAClH,YAAY,EAAE,YAAY,CAAC,4BAA4B,EAAE,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC,YAAY,EAAE;YAC9G,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,MAAM;SACZ,CAAC;QACF,mBAAmB;QACnB,cAAc;QACd,QAAQ;QACR,qBAAqB,EAAE,YAAY,CACjC,sCAAsC,EACtC,GAAG,CAAC,oCAAoC,EACxC,QAAQ,CAAC,kBAAkB,EAC3B,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CACvB;QACD,cAAc,EAAE,YAAY,CAAC,8BAA8B,EAAE,GAAG,CAAC,4BAA4B,EAAE,QAAQ,CAAC,WAAW,EAAE;YACnH,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,MAAM;SACZ,CAAC;QACF,SAAS;KACV,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,SAAS,SAAS,CAAC,GAAuB;IACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,CAAC;SACL,KAAK,CAAC,SAAS,CAAC;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,GAAuB,EAAE,EAAE,SAAS,EAA0B;IACjG,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,kCAAkC,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,GAAG,CAAC,IAAI;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,sCAAsC,CAAC,KAAK,CAAC,CAAC;IACzF,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAElG;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAsB;IAC/C,MAAM,SAAS,GAAG,YAAY,CAAC,sCAAsC,EAAE,GAAG,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;IACxH,MAAM,MAAM,GAAG,aAAa,CAAC,8BAA8B,EAAE,GAAG,CAAC,4BAA4B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9G,MAAM,SAAS,GAAG,aAAa,CAAC,4BAA4B,EAAE,GAAG,CAAC,0BAA0B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7G,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,GAAG,KAAK,sCAAsC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACrH,MAAM,IAAI,WAAW,CAAC,GAAG,GAAG,4EAA4E,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,WAAW,CACnB,gHAAgH;YAC9G,iGAAiG,CACpG,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,gCAAgC,EAAE,GAAG,CAAC,8BAA8B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACnH,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACnE,OAAO;QACL,SAAS;QACT,MAAM;QACN,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzD,OAAO;QACP,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,4BAA4B,CAAC;QACnD,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC;QACzE,gBAAgB,EAAE,SAAS,CAAC,GAAG,CAAC,uCAAuC,CAAC;QACxE,UAAU,EAAE,YAAY,CAAC,mCAAmC,EAAE,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC;KAC5G,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CACxB,MAAqE;IAErE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC/C,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACrD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAkC;IAC5E,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACnC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,OAAO,KAAK,CAAC;YAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CACH,sBAAsB,OAAO,kEAAkE;YAC7F,sBAAsB,CACzB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,iFAAiF;AACjF,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,4EAA4E;AAC5E,MAAM,mBAAmB,GAAG,KAAK,CAAC;AASlC,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,OAAO,GAAG,YAAY,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAEjG;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,IAAI,KAAK,oBAAoB,CAAC,YAAY;QAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAE,GAAwB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9H,OAAO,CACL,IAAI,KAAK,oBAAoB,CAAC,eAAe;QAC7C,IAAI,KAAK,oBAAoB,CAAC,sBAAsB;QACpD,IAAI,KAAK,oBAAoB,CAAC,oBAAoB,CACnD,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAS,iBAAiB,CAAC,GAAY;IACrC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,oBAAoB,CAAC,oBAAoB;QAAE,OAAO,KAAK,CAAC;IAC/E,MAAM,IAAI,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAE,GAA2B,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;IAC9G,OAAO,4EAA4E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjG,CAAC;AA4BD,kFAAkF;AAClF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,qBAAqB;IACrB,uBAAuB;IACvB,0BAA0B;IAC1B,kCAAkC;IAClC,2BAA2B;IAC3B,0BAA0B;IAC1B,uCAAuC;IACvC,yBAAyB;IACzB,wBAAwB;CAChB,CAAC;AAOX,SAAS,OAAO,CAAC,IAAY,EAAE,IAAY;IACzC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,WAAW,CAAC,mBAAmB,IAAI,SAAS,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAqB;IAkBrB;IACQ;IAlBX,MAAM,GAAsB,IAAI,CAAC;IACjC,UAAU,GAA+B,IAAI,CAAC;IAC9C,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5C,SAAS,GAAqB,EAAE,CAAC;IACjC,QAAQ,GAAa,EAAE,CAAC;IACxB,UAAU,CAAa;IAC/B,2EAA2E;IAC3E,WAAW,GAAgB,IAAI,CAAC;IAChC,kGAAkG;IAC1F,cAAc,GAAG,CAAC,CAAC;IAC3B,kGAAkG;IAClG,UAAU,GAAG,CAAC,CAAC;IACf,sGAAsG;IAC9F,cAAc,GAA+B,IAAI,CAAC;IACzC,UAAU,CAA0C;IAErE,YACW,MAAwB,EAChB,MAAiC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EACzE,QAAyB,EAAE;QAFlB,WAAM,GAAN,MAAM,CAAkB;QAChB,QAAG,GAAH,GAAG,CAAqD;QAGzE,IAAI,CAAC,UAAU,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;QACnF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,IAAI,kBAAkB,CAAC;IACxD,CAAC;IAED,kEAAkE;IAClE,iBAAiB;QACf,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,IAAgB;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACrG,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,OAAO,GAA4B,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YACjD,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC9C,MAAM,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,CAAa;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,UAAU,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACtC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,oEAAoE;IACpE,OAAO;QACL,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,4DAA4D;IAC5D,aAAa;QACX,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACvE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACpF,CAAC;IAED,gFAAgF;IAChF,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,0FAA0F;IAC1F,mBAAmB;QACjB,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,qGAAqG;IACrG,KAAK,CAAC,yBAAyB;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAClD,OAAO,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,6FAA6F;IAC7F,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,cAAc,CAAC,SAA2B;QAC9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,iGAAiG;IACjG,YAAY;QACV,MAAM,MAAM,GAAwB,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6FAA6F;IACrF,UAAU;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC/B,MAAM,GAAG,GAAuC,EAAE,CAAC;QACnD,IAAI,GAAG,CAAC,YAAY;YAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QACtE,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,GAAG,CAAC,aAAa;YAAE,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;IAED,mEAAmE;IACnE,aAAa;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,MAAM,OAAO,GAAmB;YAC9B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,MAAM,EAAE;gBACN,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACxB,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;aAClH;SACF,CAAC;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QACzC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QAC7C,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;YAChC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,CAAC;aAAM,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC;QACnC,CAAC;aAAM,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC;QAC5B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,6DAA6D;IACrD,KAAK,CAAC,IAAI;QAChB,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;YACnF,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI,kEAAkE;gBAC/F,6CAA6C,CAChD,CAAC;QACJ,CAAC;QACD,IAAI,MAAkB,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG;oBAC3G,uGAAuG,EACzG,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,oBAAoB,CAAC,MAAkB;QACnD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO;YAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACvE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACpE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAClD,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzG,SAAS,GAAG,wBAAwB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1D,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3F,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,gDAAgD,MAAM,4CAA4C,SAAS,IAAI,GAAG,EAAE,CACrH,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,8BAA8B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,2FAA2F;IACnF,KAAK,CAAC,mBAAmB,CAAC,MAAkB;QAClD,MAAM,KAAK,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,iEAAiE,KAAK,GAAG,CAAC,CAAC;YAC5G,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;YACxC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;wBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,kDAAkD,IAAI,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9H,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,sBAAsB;QACpB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,GAAG;QACP,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE;iBAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACV,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChB,OAAO,CAAC,CAAC;YACX,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,oEAAoE;IACpE,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,mBAAmB,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAI,EAAuD,EAAE,UAAsB,EAAE;QAC5F,MAAM,IAAI,GAAG,KAAK,IAAgB,EAAE;YAClC,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,SAAS,CAAC;gBACR,OAAO,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;gBACnF,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,GAAG,YAAY,iBAAiB;wBAAE,MAAM,GAAG,CAAC;oBAChD,IAAI,OAAO,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;wBACzC,IAAI,CAAC,GAAG,CACN,sCAAsC,SAAS,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CACxI,CAAC;wBACF,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;wBACnB,SAAS;oBACX,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAI,EAAmC,EAAE,cAAuB;QACxF,MAAM,OAAO,GAAG,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;QAClE,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9F,sFAAsF;QACtF,2CAA2C;QAC3C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,UAAsC,CAAC;QAC3C,IAAI,UAAsC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACjD,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3B,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC/B,4DAA4D;gBAC5D,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC3B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;gBACxD,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC1B,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,wBAAwB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAChH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,IAAI,KAAK,mBAAmB,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,KAAK,qBAAqB,CAAC,EAAE,CAAC;gBAC1H,MAAM,YAAY,CAAC;YACrB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,IAAI,UAAU;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,UAAU;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,GAAW,EAAE,MAAoB,EAAE,OAAoB;QAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;YAC/B,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9D,IAAI,CAAC;oBACH,OAAO,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7D,CAAC;wBAAS,CAAC;oBACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,GAAW,EAAE,MAA+B,EAAE,OAAe,EAAE,OAAoB;QAC7F,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;YAC/B,oFAAoF;YACpF,MAAM,WAAW,GAAG,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACtE,IAAI,QAAgE,CAAC;YACrE,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC;gBACX,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;oBAC5B,QAAQ,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;oBACxD,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC9C,CAAC;gBACD,MAAM,OAAO,GAAkB,EAAE,CAAC;gBAClC,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,IAAI,CAAC;oBACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBACjC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACpB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC;wBACtB,IAAI,IAAI,GAAG,OAAO;4BAAE,MAAM,CAAC,oBAAoB;oBACjD,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC9C,CAAC;gBACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBACzF,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,EAAE,CAAC;YAChG,CAAC;oBAAS,CAAC;gBACT,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;IAED,6GAA6G;IAC7G,MAAM,CAAC,GAAW,EAAE,MAAoB,EAAE,OAAoB;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;YAC/B,IAAI,KAAoB,CAAC;YACzB,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9D,IAAI,CAAC;oBACH,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,CAAC;wBAAS,CAAC;oBACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;QACrB,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;CACF;AAED,SAAS,gBAAgB,CAAC,GAAe;IACvC,MAAM,GAAG,GAA0D,EAAE,CAAC;IACtE,IAAI,GAAG,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IACxC,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS;QAAE,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB,CAAC;IAC1F,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { DataType, type Field, type Table } from "apache-arrow";
|
|
2
|
+
export interface FormatOptions {
|
|
3
|
+
/** Maximum number of rows to render. */
|
|
4
|
+
maxRows: number;
|
|
5
|
+
/** Maximum characters per cell before truncation with `…`. */
|
|
6
|
+
maxCellChars: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ColumnInfo {
|
|
9
|
+
name: string;
|
|
10
|
+
/** Arrow type rendered as a string, e.g. `Int64`, `Utf8`, `Decimal[10e+2]`. */
|
|
11
|
+
type: string;
|
|
12
|
+
}
|
|
13
|
+
export interface FormattedResult {
|
|
14
|
+
columns: ColumnInfo[];
|
|
15
|
+
/** JSON-safe row values (bigint -> number/string, dates -> ISO, binary -> base64). */
|
|
16
|
+
rows: unknown[][];
|
|
17
|
+
/** Rows actually rendered (<= maxRows). */
|
|
18
|
+
rowCount: number;
|
|
19
|
+
/** True when the source table held more rows than `rowCount`. */
|
|
20
|
+
truncated: boolean;
|
|
21
|
+
/** Markdown table of the rendered rows. */
|
|
22
|
+
markdown: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Truncates `text` to `maxChars` Unicode code points (never splitting a
|
|
26
|
+
* surrogate pair), appending `…` when anything was removed.
|
|
27
|
+
*/
|
|
28
|
+
export declare function truncateText(text: string, maxChars: number): string;
|
|
29
|
+
/** Escapes a cell for use inside a Markdown table row. */
|
|
30
|
+
export declare function escapeMarkdownCell(text: string): string;
|
|
31
|
+
/** Renders a Markdown table. Cells must already be escaped/truncated strings. */
|
|
32
|
+
export declare function toMarkdownTable(headers: string[], rows: string[][]): string;
|
|
33
|
+
/** Formats an unscaled decimal (as a decimal-digit string) with `scale` digits. */
|
|
34
|
+
export declare function formatDecimal(unscaled: string, scale: number): string;
|
|
35
|
+
/**
|
|
36
|
+
* Converts one Arrow cell to a JSON-safe value using the column type for
|
|
37
|
+
* temporal / decimal / binary rendering.
|
|
38
|
+
*/
|
|
39
|
+
export declare function cellToJson(value: unknown, type: DataType): unknown;
|
|
40
|
+
/** Renders a JSON-safe cell value as display text (no truncation). */
|
|
41
|
+
export declare function cellToText(json: unknown): string;
|
|
42
|
+
/** Human-readable Arrow type name for a field. */
|
|
43
|
+
export declare function fieldTypeName(field: Field): string;
|
|
44
|
+
/**
|
|
45
|
+
* Renders up to `maxRows` rows of an Arrow table as Markdown and JSON.
|
|
46
|
+
* Reads column vectors row-by-row and stops at the cap — it never
|
|
47
|
+
* materializes the whole table into JS objects.
|
|
48
|
+
*/
|
|
49
|
+
export declare function formatTable(table: Table, options: FormatOptions): FormattedResult;
|
|
50
|
+
/** Footer line appended to query results. */
|
|
51
|
+
export declare function resultFooter(input: {
|
|
52
|
+
rowCount: number;
|
|
53
|
+
truncated: boolean;
|
|
54
|
+
maxRows: number;
|
|
55
|
+
elapsedMs: number;
|
|
56
|
+
}): string;
|
package/dist/format.js
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
// Arrow -> Markdown / JSON rendering with cell truncation and row caps.
|
|
2
|
+
import { DataType, } from "apache-arrow";
|
|
3
|
+
const ELLIPSIS = "…";
|
|
4
|
+
/**
|
|
5
|
+
* Truncates `text` to `maxChars` Unicode code points (never splitting a
|
|
6
|
+
* surrogate pair), appending `…` when anything was removed.
|
|
7
|
+
*/
|
|
8
|
+
export function truncateText(text, maxChars) {
|
|
9
|
+
if (maxChars <= 0)
|
|
10
|
+
return text.length === 0 ? "" : ELLIPSIS;
|
|
11
|
+
const points = Array.from(text);
|
|
12
|
+
if (points.length <= maxChars)
|
|
13
|
+
return text;
|
|
14
|
+
return points.slice(0, maxChars).join("") + ELLIPSIS;
|
|
15
|
+
}
|
|
16
|
+
/** Escapes a cell for use inside a Markdown table row. */
|
|
17
|
+
export function escapeMarkdownCell(text) {
|
|
18
|
+
return text.replace(/\\/g, "\\\\").replace(/\|/g, "\\|").replace(/\r?\n/g, "\\n");
|
|
19
|
+
}
|
|
20
|
+
/** Renders a Markdown table. Cells must already be escaped/truncated strings. */
|
|
21
|
+
export function toMarkdownTable(headers, rows) {
|
|
22
|
+
const head = `| ${headers.map(escapeMarkdownCell).join(" | ")} |`;
|
|
23
|
+
const sep = `| ${headers.map(() => "---").join(" | ")} |`;
|
|
24
|
+
const body = rows.map((r) => `| ${r.join(" | ")} |`);
|
|
25
|
+
return [head, sep, ...body].join("\n");
|
|
26
|
+
}
|
|
27
|
+
const BIGINT_SAFE = (v) => v >= BigInt(Number.MIN_SAFE_INTEGER) && v <= BigInt(Number.MAX_SAFE_INTEGER)
|
|
28
|
+
? Number(v)
|
|
29
|
+
: v.toString();
|
|
30
|
+
function pad(n, width = 2) {
|
|
31
|
+
return String(n).padStart(width, "0");
|
|
32
|
+
}
|
|
33
|
+
function isoDate(ms) {
|
|
34
|
+
const d = new Date(ms);
|
|
35
|
+
return `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())}`;
|
|
36
|
+
}
|
|
37
|
+
function isoTimestamp(ms, withZone) {
|
|
38
|
+
const d = new Date(ms);
|
|
39
|
+
if (Number.isNaN(d.getTime()))
|
|
40
|
+
return String(ms);
|
|
41
|
+
const base = `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())}` +
|
|
42
|
+
`T${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}:${pad(d.getUTCSeconds())}`;
|
|
43
|
+
const millis = d.getUTCMilliseconds();
|
|
44
|
+
const frac = millis ? `.${pad(millis, 3)}` : "";
|
|
45
|
+
return `${base}${frac}${withZone ? "Z" : ""}`;
|
|
46
|
+
}
|
|
47
|
+
/** Renders a Time value given the Arrow time unit (0=s,1=ms,2=us,3=ns). */
|
|
48
|
+
function isoTime(value, unit) {
|
|
49
|
+
const perSecond = [1n, 1000n, 1000000n, 1000000000n][unit] ?? 1n;
|
|
50
|
+
const v = typeof value === "bigint" ? value : BigInt(Math.trunc(value));
|
|
51
|
+
const totalSeconds = v / perSecond;
|
|
52
|
+
const fraction = v % perSecond;
|
|
53
|
+
const h = totalSeconds / 3600n;
|
|
54
|
+
const m = (totalSeconds % 3600n) / 60n;
|
|
55
|
+
const s = totalSeconds % 60n;
|
|
56
|
+
let out = `${pad(Number(h))}:${pad(Number(m))}:${pad(Number(s))}`;
|
|
57
|
+
if (fraction !== 0n) {
|
|
58
|
+
const digits = [0, 3, 6, 9][unit] ?? 0;
|
|
59
|
+
out += `.${fraction.toString().padStart(digits, "0").replace(/0+$/, "")}`;
|
|
60
|
+
}
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
/** Formats an unscaled decimal (as a decimal-digit string) with `scale` digits. */
|
|
64
|
+
export function formatDecimal(unscaled, scale) {
|
|
65
|
+
let digits = unscaled;
|
|
66
|
+
let sign = "";
|
|
67
|
+
if (digits.startsWith("-")) {
|
|
68
|
+
sign = "-";
|
|
69
|
+
digits = digits.slice(1);
|
|
70
|
+
}
|
|
71
|
+
if (scale <= 0)
|
|
72
|
+
return sign + digits;
|
|
73
|
+
digits = digits.padStart(scale + 1, "0");
|
|
74
|
+
const intPart = digits.slice(0, digits.length - scale);
|
|
75
|
+
const fracPart = digits.slice(digits.length - scale);
|
|
76
|
+
return `${sign}${intPart}.${fracPart}`;
|
|
77
|
+
}
|
|
78
|
+
/** Converts an Arrow decimal cell value (BigNum / bigint / number) to its unscaled digit string. */
|
|
79
|
+
function decimalUnscaled(value) {
|
|
80
|
+
if (typeof value === "bigint")
|
|
81
|
+
return value.toString();
|
|
82
|
+
if (typeof value === "number")
|
|
83
|
+
return BigInt(Math.trunc(value)).toString();
|
|
84
|
+
const asObj = value;
|
|
85
|
+
// apache-arrow BN objects stringify to their (signed) integer value.
|
|
86
|
+
if (asObj && typeof asObj.toString === "function") {
|
|
87
|
+
const s = asObj.toString();
|
|
88
|
+
if (/^-?\d+$/.test(s))
|
|
89
|
+
return s;
|
|
90
|
+
}
|
|
91
|
+
return String(value);
|
|
92
|
+
}
|
|
93
|
+
function bytesToBase64(bytes) {
|
|
94
|
+
return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString("base64");
|
|
95
|
+
}
|
|
96
|
+
function jsonReplacer(_key, v) {
|
|
97
|
+
if (typeof v === "bigint")
|
|
98
|
+
return BIGINT_SAFE(v);
|
|
99
|
+
if (v instanceof Uint8Array)
|
|
100
|
+
return bytesToBase64(v);
|
|
101
|
+
return v;
|
|
102
|
+
}
|
|
103
|
+
/** Recursively converts nested Arrow values (Vector / StructRow / MapRow) to plain JSON. */
|
|
104
|
+
function nestedToJson(value) {
|
|
105
|
+
if (value === null || value === undefined)
|
|
106
|
+
return null;
|
|
107
|
+
if (typeof value === "bigint")
|
|
108
|
+
return BIGINT_SAFE(value);
|
|
109
|
+
if (value instanceof Uint8Array)
|
|
110
|
+
return bytesToBase64(value);
|
|
111
|
+
if (value instanceof Date)
|
|
112
|
+
return value.toISOString();
|
|
113
|
+
if (typeof value !== "object")
|
|
114
|
+
return value;
|
|
115
|
+
const obj = value;
|
|
116
|
+
if (typeof obj.toJSON === "function") {
|
|
117
|
+
return nestedToJson(obj.toJSON());
|
|
118
|
+
}
|
|
119
|
+
if (Array.isArray(value))
|
|
120
|
+
return value.map(nestedToJson);
|
|
121
|
+
if (typeof obj.toArray === "function") {
|
|
122
|
+
return Array.from(obj.toArray(), nestedToJson);
|
|
123
|
+
}
|
|
124
|
+
const out = {};
|
|
125
|
+
for (const [k, v] of Object.entries(value)) {
|
|
126
|
+
out[k] = nestedToJson(v);
|
|
127
|
+
}
|
|
128
|
+
return out;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Converts one Arrow cell to a JSON-safe value using the column type for
|
|
132
|
+
* temporal / decimal / binary rendering.
|
|
133
|
+
*/
|
|
134
|
+
export function cellToJson(value, type) {
|
|
135
|
+
if (value === null || value === undefined)
|
|
136
|
+
return null;
|
|
137
|
+
if (DataType.isDecimal(type)) {
|
|
138
|
+
return formatDecimal(decimalUnscaled(value), type.scale);
|
|
139
|
+
}
|
|
140
|
+
if (DataType.isDate(type)) {
|
|
141
|
+
const ms = typeof value === "bigint" ? Number(value) : value;
|
|
142
|
+
return isoDate(ms);
|
|
143
|
+
}
|
|
144
|
+
if (DataType.isTimestamp(type)) {
|
|
145
|
+
const ms = typeof value === "bigint" ? Number(value) : value;
|
|
146
|
+
return isoTimestamp(ms, Boolean(type.timezone));
|
|
147
|
+
}
|
|
148
|
+
if (DataType.isTime(type)) {
|
|
149
|
+
return isoTime(value, type.unit);
|
|
150
|
+
}
|
|
151
|
+
if (DataType.isInterval(type) || DataType.isDuration(type)) {
|
|
152
|
+
return intervalToString(value);
|
|
153
|
+
}
|
|
154
|
+
if (DataType.isBinary(type) || DataType.isLargeBinary(type) || DataType.isFixedSizeBinary(type)) {
|
|
155
|
+
return bytesToBase64(value);
|
|
156
|
+
}
|
|
157
|
+
if (typeof value === "bigint")
|
|
158
|
+
return BIGINT_SAFE(value);
|
|
159
|
+
if (typeof value === "number" || typeof value === "string" || typeof value === "boolean") {
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
return nestedToJson(value);
|
|
163
|
+
}
|
|
164
|
+
function intervalToString(value) {
|
|
165
|
+
// MONTH_DAY_NANO intervals arrive as Int32Array [months, days, nanosLo, nanosHi];
|
|
166
|
+
// DAY_TIME as [days, millis]; YEAR_MONTH as a number of months.
|
|
167
|
+
if (value instanceof Int32Array || Array.isArray(value)) {
|
|
168
|
+
const arr = Array.from(value);
|
|
169
|
+
if (arr.length === 4) {
|
|
170
|
+
const nanos = BigInt.asUintN(32, BigInt(arr[2])) + (BigInt(arr[3]) << 32n);
|
|
171
|
+
const seconds = Number(nanos) / 1e9;
|
|
172
|
+
return `${arr[0]} months ${arr[1]} days ${seconds} seconds`;
|
|
173
|
+
}
|
|
174
|
+
if (arr.length === 2) {
|
|
175
|
+
return `${arr[0]} days ${arr[1] / 1000} seconds`;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (typeof value === "number")
|
|
179
|
+
return `${value} months`;
|
|
180
|
+
if (typeof value === "bigint")
|
|
181
|
+
return value.toString();
|
|
182
|
+
return nestedToJson(value) === null ? "NULL" : JSON.stringify(nestedToJson(value), jsonReplacer);
|
|
183
|
+
}
|
|
184
|
+
/** Renders a JSON-safe cell value as display text (no truncation). */
|
|
185
|
+
export function cellToText(json) {
|
|
186
|
+
if (json === null || json === undefined)
|
|
187
|
+
return "NULL";
|
|
188
|
+
if (typeof json === "string")
|
|
189
|
+
return json;
|
|
190
|
+
if (typeof json === "number" || typeof json === "boolean" || typeof json === "bigint") {
|
|
191
|
+
return String(json);
|
|
192
|
+
}
|
|
193
|
+
return JSON.stringify(json, jsonReplacer);
|
|
194
|
+
}
|
|
195
|
+
/** Human-readable Arrow type name for a field. */
|
|
196
|
+
export function fieldTypeName(field) {
|
|
197
|
+
return String(field.type);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Renders up to `maxRows` rows of an Arrow table as Markdown and JSON.
|
|
201
|
+
* Reads column vectors row-by-row and stops at the cap — it never
|
|
202
|
+
* materializes the whole table into JS objects.
|
|
203
|
+
*/
|
|
204
|
+
export function formatTable(table, options) {
|
|
205
|
+
const fields = table.schema.fields;
|
|
206
|
+
const columns = fields.map((f) => ({ name: f.name, type: fieldTypeName(f) }));
|
|
207
|
+
const total = table.numRows;
|
|
208
|
+
const limit = Math.max(0, Math.min(options.maxRows, total));
|
|
209
|
+
const vectors = fields.map((_, i) => table.getChildAt(i));
|
|
210
|
+
const rows = [];
|
|
211
|
+
const textRows = [];
|
|
212
|
+
for (let r = 0; r < limit; r++) {
|
|
213
|
+
const jsonRow = [];
|
|
214
|
+
const textRow = [];
|
|
215
|
+
for (let c = 0; c < fields.length; c++) {
|
|
216
|
+
const raw = vectors[c]?.get(r);
|
|
217
|
+
const json = cellToJson(raw, fields[c].type);
|
|
218
|
+
jsonRow.push(json);
|
|
219
|
+
textRow.push(escapeMarkdownCell(truncateText(cellToText(json), options.maxCellChars)));
|
|
220
|
+
}
|
|
221
|
+
rows.push(jsonRow);
|
|
222
|
+
textRows.push(textRow);
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
columns,
|
|
226
|
+
rows,
|
|
227
|
+
rowCount: rows.length,
|
|
228
|
+
truncated: total > limit,
|
|
229
|
+
markdown: toMarkdownTable(columns.map((c) => c.name), textRows),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/** Footer line appended to query results. */
|
|
233
|
+
export function resultFooter(input) {
|
|
234
|
+
const rows = `${input.rowCount} row${input.rowCount === 1 ? "" : "s"} returned`;
|
|
235
|
+
const trunc = input.truncated
|
|
236
|
+
? ` (truncated: more rows exist beyond max_rows=${input.maxRows})`
|
|
237
|
+
: "";
|
|
238
|
+
return `${rows}${trunc} · ${input.elapsedMs} ms`;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as http from "node:http";
|
|
2
|
+
/** Scopes that name no resource; a refresh carrying only these has nothing to renew against. */
|
|
3
|
+
export declare const OIDC_SCOPES: Set<string>;
|
|
4
|
+
/** Path under the public origin where the facade lives. */
|
|
5
|
+
export declare const FACADE_PATH = "/oauth";
|
|
6
|
+
/** Facade issuer URL for a public MCP URL: same origin, FACADE_PATH. */
|
|
7
|
+
export declare function facadeIssuer(publicUrl: string): string;
|
|
8
|
+
/** Discovery paths at which the facade's metadata is served (OpenID Connect and RFC 8414, both placements). */
|
|
9
|
+
export declare function facadeMetadataPaths(): string[];
|
|
10
|
+
/** Token endpoint path of the facade. */
|
|
11
|
+
export declare function facadeTokenPath(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Scope value for a refresh_token grant: what the client sent plus the
|
|
14
|
+
* configured resource scope(s) and offline_access, without duplicates.
|
|
15
|
+
* Returns the client's own value untouched when it already names a resource.
|
|
16
|
+
*/
|
|
17
|
+
export declare function refreshScope(requested: string | null, configured: string[]): {
|
|
18
|
+
scope: string;
|
|
19
|
+
injected: boolean;
|
|
20
|
+
};
|
|
21
|
+
export interface FacadeOptions {
|
|
22
|
+
/** Test hook: replaces global fetch for discovery and the upstream token endpoint. */
|
|
23
|
+
fetch?: typeof fetch;
|
|
24
|
+
log?: (message: string) => void;
|
|
25
|
+
}
|
|
26
|
+
/** Serves the rewritten metadata and proxies the token endpoint for one provider. */
|
|
27
|
+
export declare class OAuthFacade {
|
|
28
|
+
readonly config: {
|
|
29
|
+
publicUrl: string;
|
|
30
|
+
upstreamIssuer: string;
|
|
31
|
+
scopes: string[];
|
|
32
|
+
};
|
|
33
|
+
readonly issuer: string;
|
|
34
|
+
private cached;
|
|
35
|
+
private loading;
|
|
36
|
+
private readonly fetchImpl;
|
|
37
|
+
private readonly log;
|
|
38
|
+
constructor(config: {
|
|
39
|
+
publicUrl: string;
|
|
40
|
+
upstreamIssuer: string;
|
|
41
|
+
scopes: string[];
|
|
42
|
+
}, options?: FacadeOptions);
|
|
43
|
+
/** The provider's discovery document with issuer and token_endpoint pointing at this facade. */
|
|
44
|
+
metadata(): Promise<Record<string, unknown>>;
|
|
45
|
+
/** Handles GET on a metadata path. */
|
|
46
|
+
handleMetadata(req: http.IncomingMessage, res: http.ServerResponse): Promise<void>;
|
|
47
|
+
/** Handles POST on the token path: forwards to the provider, fixing up refresh_token grants. */
|
|
48
|
+
handleToken(req: http.IncomingMessage, res: http.ServerResponse): Promise<void>;
|
|
49
|
+
private upstream;
|
|
50
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
// Authorization-server facade for providers whose refresh flow needs help.
|
|
2
|
+
//
|
|
3
|
+
// Claude refreshes an expiring access token by POSTing grant_type=
|
|
4
|
+
// refresh_token to the provider's token endpoint with only the OpenID
|
|
5
|
+
// Connect scopes (openid profile offline_access). Microsoft Entra ID then
|
|
6
|
+
// answers AADSTS90009 ("requesting a token for itself") because the request
|
|
7
|
+
// names no resource, and the connector dies at every access-token expiry.
|
|
8
|
+
// (anthropics/claude-ai-mcp#840 has the full forensic trail.)
|
|
9
|
+
//
|
|
10
|
+
// With HARDCHARGER_MCP_OAUTH_TOKEN_PROXY=true the MCP server publishes an
|
|
11
|
+
// authorization-server metadata document of its own, under
|
|
12
|
+
// <public origin>/oauth, that is the provider's document with two fields
|
|
13
|
+
// changed: `issuer` (this facade) and `token_endpoint` (this server). The
|
|
14
|
+
// token proxy forwards every request to the provider's token endpoint
|
|
15
|
+
// verbatim, except that a refresh_token grant also gets the configured API
|
|
16
|
+
// scope(s) and offline_access so the provider knows which resource to mint
|
|
17
|
+
// the new token for and returns a successor refresh token. Authorization
|
|
18
|
+
// still happens at the provider; tokens are never logged or stored.
|
|
19
|
+
import * as http from "node:http";
|
|
20
|
+
import { OFFLINE_ACCESS_SCOPE, discoverMetadata } from "./oauth.js";
|
|
21
|
+
/** Scopes that name no resource; a refresh carrying only these has nothing to renew against. */
|
|
22
|
+
export const OIDC_SCOPES = new Set(["openid", "profile", "email", OFFLINE_ACCESS_SCOPE]);
|
|
23
|
+
/** Path under the public origin where the facade lives. */
|
|
24
|
+
export const FACADE_PATH = "/oauth";
|
|
25
|
+
/** Largest token request body accepted (form-encoded credentials and a refresh token). */
|
|
26
|
+
const MAX_TOKEN_BODY_BYTES = 64 * 1024;
|
|
27
|
+
/** How long the provider's discovery document is cached. */
|
|
28
|
+
const METADATA_TTL_MS = 60 * 60 * 1000;
|
|
29
|
+
/** Time allowed for the provider's token endpoint (Claude waits 30s for a refresh). */
|
|
30
|
+
const UPSTREAM_TIMEOUT_MS = 20_000;
|
|
31
|
+
/** Facade issuer URL for a public MCP URL: same origin, FACADE_PATH. */
|
|
32
|
+
export function facadeIssuer(publicUrl) {
|
|
33
|
+
return `${new URL(publicUrl).origin}${FACADE_PATH}`;
|
|
34
|
+
}
|
|
35
|
+
/** Discovery paths at which the facade's metadata is served (OpenID Connect and RFC 8414, both placements). */
|
|
36
|
+
export function facadeMetadataPaths() {
|
|
37
|
+
return [
|
|
38
|
+
`${FACADE_PATH}/.well-known/openid-configuration`,
|
|
39
|
+
`${FACADE_PATH}/.well-known/oauth-authorization-server`,
|
|
40
|
+
`/.well-known/oauth-authorization-server${FACADE_PATH}`,
|
|
41
|
+
`/.well-known/openid-configuration${FACADE_PATH}`,
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
/** Token endpoint path of the facade. */
|
|
45
|
+
export function facadeTokenPath() {
|
|
46
|
+
return `${FACADE_PATH}/token`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Scope value for a refresh_token grant: what the client sent plus the
|
|
50
|
+
* configured resource scope(s) and offline_access, without duplicates.
|
|
51
|
+
* Returns the client's own value untouched when it already names a resource.
|
|
52
|
+
*/
|
|
53
|
+
export function refreshScope(requested, configured) {
|
|
54
|
+
const sent = (requested ?? "").split(/\s+/u).filter((s) => s !== "");
|
|
55
|
+
if (sent.some((s) => !OIDC_SCOPES.has(s)))
|
|
56
|
+
return { scope: sent.join(" "), injected: false };
|
|
57
|
+
const merged = [...sent];
|
|
58
|
+
for (const s of [...configured.filter((c) => !OIDC_SCOPES.has(c)), OFFLINE_ACCESS_SCOPE])
|
|
59
|
+
if (!merged.includes(s))
|
|
60
|
+
merged.push(s);
|
|
61
|
+
return { scope: merged.join(" "), injected: merged.length !== sent.length };
|
|
62
|
+
}
|
|
63
|
+
function readBody(req, limit) {
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
const chunks = [];
|
|
66
|
+
let size = 0;
|
|
67
|
+
req.on("data", (chunk) => {
|
|
68
|
+
size += chunk.length;
|
|
69
|
+
if (size > limit) {
|
|
70
|
+
reject(new Error(`request body exceeds ${limit} bytes`));
|
|
71
|
+
req.destroy();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
chunks.push(chunk);
|
|
75
|
+
});
|
|
76
|
+
req.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
|
|
77
|
+
req.on("error", reject);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/** One-line, secret-free description of a token response for the log. */
|
|
81
|
+
function describeTokenResponse(status, body) {
|
|
82
|
+
let parsed;
|
|
83
|
+
try {
|
|
84
|
+
parsed = JSON.parse(body);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return `HTTP ${status} (non-JSON body)`;
|
|
88
|
+
}
|
|
89
|
+
if (status >= 200 && status < 300) {
|
|
90
|
+
const refresh = typeof parsed.refresh_token === "string" ? "yes" : "no";
|
|
91
|
+
const expires = typeof parsed.expires_in === "number" ? `${parsed.expires_in}s` : "?";
|
|
92
|
+
return `HTTP ${status} (refresh_token ${refresh}, expires_in ${expires})`;
|
|
93
|
+
}
|
|
94
|
+
const error = typeof parsed.error === "string" ? parsed.error : "error";
|
|
95
|
+
const desc = typeof parsed.error_description === "string" ? parsed.error_description.split(/\r?\n/u)[0].slice(0, 200) : "";
|
|
96
|
+
return `HTTP ${status} ${error}${desc ? `: ${desc}` : ""}`;
|
|
97
|
+
}
|
|
98
|
+
/** Serves the rewritten metadata and proxies the token endpoint for one provider. */
|
|
99
|
+
export class OAuthFacade {
|
|
100
|
+
config;
|
|
101
|
+
issuer;
|
|
102
|
+
cached;
|
|
103
|
+
loading;
|
|
104
|
+
fetchImpl;
|
|
105
|
+
log;
|
|
106
|
+
constructor(config, options = {}) {
|
|
107
|
+
this.config = config;
|
|
108
|
+
this.issuer = facadeIssuer(config.publicUrl);
|
|
109
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
110
|
+
this.log = options.log ?? ((m) => console.error(m));
|
|
111
|
+
}
|
|
112
|
+
/** The provider's discovery document with issuer and token_endpoint pointing at this facade. */
|
|
113
|
+
async metadata() {
|
|
114
|
+
const upstream = await this.upstream();
|
|
115
|
+
return { ...upstream, issuer: this.issuer, token_endpoint: `${new URL(this.config.publicUrl).origin}${facadeTokenPath()}` };
|
|
116
|
+
}
|
|
117
|
+
/** Handles GET on a metadata path. */
|
|
118
|
+
async handleMetadata(req, res) {
|
|
119
|
+
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
120
|
+
res.writeHead(405, { allow: "GET" });
|
|
121
|
+
res.end();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
const doc = await this.metadata();
|
|
126
|
+
res.writeHead(200, { "content-type": "application/json", "cache-control": "public, max-age=300" });
|
|
127
|
+
res.end(JSON.stringify(doc));
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
this.log(`[hardcharger-mcp] OAuth facade: discovery failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
131
|
+
res.writeHead(502, { "content-type": "application/json" });
|
|
132
|
+
res.end(JSON.stringify({ error: "server_error", error_description: "authorization server discovery failed" }));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/** Handles POST on the token path: forwards to the provider, fixing up refresh_token grants. */
|
|
136
|
+
async handleToken(req, res) {
|
|
137
|
+
if (req.method !== "POST") {
|
|
138
|
+
res.writeHead(405, { allow: "POST" });
|
|
139
|
+
res.end();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const contentType = (req.headers["content-type"] ?? "").split(";")[0].trim().toLowerCase();
|
|
143
|
+
if (contentType !== "application/x-www-form-urlencoded") {
|
|
144
|
+
res.writeHead(415, { "content-type": "application/json" });
|
|
145
|
+
res.end(JSON.stringify({ error: "invalid_request", error_description: "expected application/x-www-form-urlencoded" }));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
let params;
|
|
149
|
+
try {
|
|
150
|
+
params = new URLSearchParams(await readBody(req, MAX_TOKEN_BODY_BYTES));
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
res.writeHead(400, { "content-type": "application/json" });
|
|
154
|
+
res.end(JSON.stringify({ error: "invalid_request", error_description: err instanceof Error ? err.message : String(err) }));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const grant = params.get("grant_type") ?? "?";
|
|
158
|
+
let injected = false;
|
|
159
|
+
if (grant === "refresh_token") {
|
|
160
|
+
const fixed = refreshScope(params.get("scope"), this.config.scopes);
|
|
161
|
+
injected = fixed.injected;
|
|
162
|
+
if (injected)
|
|
163
|
+
params.set("scope", fixed.scope);
|
|
164
|
+
}
|
|
165
|
+
let upstreamTokenEndpoint;
|
|
166
|
+
try {
|
|
167
|
+
const doc = await this.upstream();
|
|
168
|
+
if (typeof doc.token_endpoint !== "string")
|
|
169
|
+
throw new Error("provider metadata has no token_endpoint");
|
|
170
|
+
upstreamTokenEndpoint = doc.token_endpoint;
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
this.log(`[hardcharger-mcp] OAuth facade: ${grant} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
174
|
+
res.writeHead(502, { "content-type": "application/json" });
|
|
175
|
+
res.end(JSON.stringify({ error: "server_error", error_description: "authorization server discovery failed" }));
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const headers = {
|
|
179
|
+
"content-type": "application/x-www-form-urlencoded",
|
|
180
|
+
accept: "application/json",
|
|
181
|
+
};
|
|
182
|
+
// client_secret_basic: pass the client's credentials through untouched.
|
|
183
|
+
if (typeof req.headers.authorization === "string")
|
|
184
|
+
headers.authorization = req.headers.authorization;
|
|
185
|
+
try {
|
|
186
|
+
const upstream = await this.fetchImpl(upstreamTokenEndpoint, {
|
|
187
|
+
method: "POST",
|
|
188
|
+
headers,
|
|
189
|
+
body: params.toString(),
|
|
190
|
+
signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS),
|
|
191
|
+
});
|
|
192
|
+
const body = await upstream.text();
|
|
193
|
+
this.log(`[hardcharger-mcp] OAuth facade: ${grant}${injected ? " (scope added)" : ""} -> ${describeTokenResponse(upstream.status, body)}`);
|
|
194
|
+
res.writeHead(upstream.status, {
|
|
195
|
+
"content-type": upstream.headers.get("content-type") ?? "application/json",
|
|
196
|
+
"cache-control": "no-store",
|
|
197
|
+
pragma: "no-cache",
|
|
198
|
+
});
|
|
199
|
+
res.end(body);
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
this.log(`[hardcharger-mcp] OAuth facade: ${grant} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
203
|
+
res.writeHead(502, { "content-type": "application/json" });
|
|
204
|
+
res.end(JSON.stringify({ error: "server_error", error_description: "authorization server unreachable" }));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
upstream() {
|
|
208
|
+
if (this.cached && Date.now() - this.cached.at < METADATA_TTL_MS)
|
|
209
|
+
return Promise.resolve(this.cached.doc);
|
|
210
|
+
if (!this.loading) {
|
|
211
|
+
this.loading = discoverMetadata(this.config.upstreamIssuer, this.fetchImpl)
|
|
212
|
+
.then((doc) => {
|
|
213
|
+
this.cached = { doc, at: Date.now() };
|
|
214
|
+
return doc;
|
|
215
|
+
})
|
|
216
|
+
.finally(() => {
|
|
217
|
+
this.loading = undefined;
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
return this.loading;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=oauth-facade.js.map
|