@creezio/mcp-facade 0.22.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/README.md +420 -0
- package/dist/.creezio-src-hash.json +4 -0
- package/dist/admin/adapters.d.ts +10 -0
- package/dist/admin/adapters.d.ts.map +1 -0
- package/dist/admin/adapters.js +21 -0
- package/dist/admin/adapters.js.map +1 -0
- package/dist/admin/http-routes.d.ts +11 -0
- package/dist/admin/http-routes.d.ts.map +1 -0
- package/dist/admin/http-routes.js +66 -0
- package/dist/admin/http-routes.js.map +1 -0
- package/dist/admin/index.d.ts +12 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +8 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/mcp-admin.d.ts +165 -0
- package/dist/admin/mcp-admin.d.ts.map +1 -0
- package/dist/admin/mcp-admin.js +419 -0
- package/dist/admin/mcp-admin.js.map +1 -0
- package/dist/admin/tool-policy-guard.d.ts +106 -0
- package/dist/admin/tool-policy-guard.d.ts.map +1 -0
- package/dist/admin/tool-policy-guard.js +187 -0
- package/dist/admin/tool-policy-guard.js.map +1 -0
- package/dist/admin/types.d.ts +62 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +6 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/brand-facade.d.ts +41 -0
- package/dist/brand-facade.d.ts.map +1 -0
- package/dist/brand-facade.js +67 -0
- package/dist/brand-facade.js.map +1 -0
- package/dist/core-tools.d.ts +22 -0
- package/dist/core-tools.d.ts.map +1 -0
- package/dist/core-tools.js +93 -0
- package/dist/core-tools.js.map +1 -0
- package/dist/dyn-import.d.ts +13 -0
- package/dist/dyn-import.d.ts.map +1 -0
- package/dist/dyn-import.js +2 -0
- package/dist/dyn-import.js.map +1 -0
- package/dist/facade.d.ts +40 -0
- package/dist/facade.d.ts.map +1 -0
- package/dist/facade.js +334 -0
- package/dist/facade.js.map +1 -0
- package/dist/hono-bind.d.ts +48 -0
- package/dist/hono-bind.d.ts.map +1 -0
- package/dist/hono-bind.js +70 -0
- package/dist/hono-bind.js.map +1 -0
- package/dist/hono-proxy.d.ts +63 -0
- package/dist/hono-proxy.d.ts.map +1 -0
- package/dist/hono-proxy.js +185 -0
- package/dist/hono-proxy.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/jwt.d.ts +20 -0
- package/dist/jwt.d.ts.map +1 -0
- package/dist/jwt.js +84 -0
- package/dist/jwt.js.map +1 -0
- package/dist/module-ops-tools.d.ts +43 -0
- package/dist/module-ops-tools.d.ts.map +1 -0
- package/dist/module-ops-tools.js +301 -0
- package/dist/module-ops-tools.js.map +1 -0
- package/dist/namespace.d.ts +23 -0
- package/dist/namespace.d.ts.map +1 -0
- package/dist/namespace.js +51 -0
- package/dist/namespace.js.map +1 -0
- package/dist/oauth/cors-policy.d.ts +3 -0
- package/dist/oauth/cors-policy.d.ts.map +1 -0
- package/dist/oauth/cors-policy.js +25 -0
- package/dist/oauth/cors-policy.js.map +1 -0
- package/dist/oauth/hono-app.d.ts +18 -0
- package/dist/oauth/hono-app.d.ts.map +1 -0
- package/dist/oauth/hono-app.js +175 -0
- package/dist/oauth/hono-app.js.map +1 -0
- package/dist/oauth/index.d.ts +9 -0
- package/dist/oauth/index.d.ts.map +1 -0
- package/dist/oauth/index.js +6 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth/rate-limit.d.ts +11 -0
- package/dist/oauth/rate-limit.d.ts.map +1 -0
- package/dist/oauth/rate-limit.js +32 -0
- package/dist/oauth/rate-limit.js.map +1 -0
- package/dist/oauth/routes.d.ts +8 -0
- package/dist/oauth/routes.d.ts.map +1 -0
- package/dist/oauth/routes.js +671 -0
- package/dist/oauth/routes.js.map +1 -0
- package/dist/oauth/store.d.ts +113 -0
- package/dist/oauth/store.d.ts.map +1 -0
- package/dist/oauth/store.js +390 -0
- package/dist/oauth/store.js.map +1 -0
- package/dist/oauth/types.d.ts +97 -0
- package/dist/oauth/types.d.ts.map +1 -0
- package/dist/oauth/types.js +5 -0
- package/dist/oauth/types.js.map +1 -0
- package/dist/open-external-tab-host-tools.d.ts +67 -0
- package/dist/open-external-tab-host-tools.d.ts.map +1 -0
- package/dist/open-external-tab-host-tools.js +92 -0
- package/dist/open-external-tab-host-tools.js.map +1 -0
- package/dist/policy.d.ts +59 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +88 -0
- package/dist/policy.js.map +1 -0
- package/dist/runtime.d.ts +22 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +20 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +163 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist-cjs/admin/adapters.js +27 -0
- package/dist-cjs/admin/adapters.js.map +1 -0
- package/dist-cjs/admin/http-routes.js +69 -0
- package/dist-cjs/admin/http-routes.js.map +1 -0
- package/dist-cjs/admin/index.js +40 -0
- package/dist-cjs/admin/index.js.map +1 -0
- package/dist-cjs/admin/mcp-admin.js +441 -0
- package/dist-cjs/admin/mcp-admin.js.map +1 -0
- package/dist-cjs/admin/tool-policy-guard.js +193 -0
- package/dist-cjs/admin/tool-policy-guard.js.map +1 -0
- package/dist-cjs/admin/types.js +7 -0
- package/dist-cjs/admin/types.js.map +1 -0
- package/dist-cjs/brand-facade.js +70 -0
- package/dist-cjs/brand-facade.js.map +1 -0
- package/dist-cjs/core-tools.js +97 -0
- package/dist-cjs/core-tools.js.map +1 -0
- package/dist-cjs/dyn-import.js +5 -0
- package/dist-cjs/dyn-import.js.map +1 -0
- package/dist-cjs/facade.js +337 -0
- package/dist-cjs/facade.js.map +1 -0
- package/dist-cjs/hono-bind.js +74 -0
- package/dist-cjs/hono-bind.js.map +1 -0
- package/dist-cjs/hono-proxy.js +189 -0
- package/dist-cjs/hono-proxy.js.map +1 -0
- package/dist-cjs/index.js +120 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/jwt.js +91 -0
- package/dist-cjs/jwt.js.map +1 -0
- package/dist-cjs/module-ops-tools.js +308 -0
- package/dist-cjs/module-ops-tools.js.map +1 -0
- package/dist-cjs/namespace.js +56 -0
- package/dist-cjs/namespace.js.map +1 -0
- package/dist-cjs/oauth/cors-policy.js +29 -0
- package/dist-cjs/oauth/cors-policy.js.map +1 -0
- package/dist-cjs/oauth/hono-app.js +178 -0
- package/dist-cjs/oauth/hono-app.js.map +1 -0
- package/dist-cjs/oauth/index.js +48 -0
- package/dist-cjs/oauth/index.js.map +1 -0
- package/dist-cjs/oauth/rate-limit.js +37 -0
- package/dist-cjs/oauth/rate-limit.js.map +1 -0
- package/dist-cjs/oauth/routes.js +674 -0
- package/dist-cjs/oauth/routes.js.map +1 -0
- package/dist-cjs/oauth/store.js +418 -0
- package/dist-cjs/oauth/store.js.map +1 -0
- package/dist-cjs/oauth/types.js +6 -0
- package/dist-cjs/oauth/types.js.map +1 -0
- package/dist-cjs/open-external-tab-host-tools.js +96 -0
- package/dist-cjs/open-external-tab-host-tools.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/policy.js +93 -0
- package/dist-cjs/policy.js.map +1 -0
- package/dist-cjs/runtime.js +24 -0
- package/dist-cjs/runtime.js.map +1 -0
- package/dist-cjs/types.js +3 -0
- package/dist-cjs/types.js.map +1 -0
- package/package.json +92 -0
- package/ui/index.ts +5 -0
- package/ui/mcp-admin-client.tsx +270 -0
- package/ui/primitives/badge.tsx +37 -0
- package/ui/primitives/button.tsx +44 -0
- package/ui/primitives/card.tsx +44 -0
- package/ui/primitives/cn.ts +6 -0
- package/ui/primitives/input.tsx +19 -0
- package/ui/primitives/tabs.tsx +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/oauth/routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,2BAA2B,EAC3B,UAAU,EACV,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGtE,MAAM,sBAAsB,GAAG;;;wDAGyB,CAAC;AAEzD,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACvC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,GAAG,WAAW,MAAM,CAAC;IACjE,MAAM,iBAAiB,GACrB,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,sBAAsB,CAAC;IAC7D,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,aAAa,CAAC;IACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,QAAQ,IAAI,EAAE,GAAG,MAAM,CAAC;IAE/D,SAAS,kBAAkB,CAAC,CAAU;QACpC,OAAO,CAAC,CAAC,IAAI,CACX;YACE,KAAK,EAAE,yBAAyB;YAChC,iBAAiB,EACf,6EAA6E;SAChF,EACD,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,SAAS,2BAA2B;QAClC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,sBAAsB,EAAE,GAAG,IAAI,kBAAkB;YACjD,cAAc,EAAE,GAAG,IAAI,cAAc;YACrC,qBAAqB,EAAE,GAAG,IAAI,iBAAiB;YAC/C,gBAAgB,EAAE,CAAC,SAAS,CAAC;YAC7B,wBAAwB,EAAE,CAAC,MAAM,CAAC;YAClC,wBAAwB,EAAE,CAAC,OAAO,CAAC;YACnC,qBAAqB,EAAE,CAAC,oBAAoB,EAAE,eAAe,CAAC;YAC9D,qCAAqC,EAAE;gBACrC,oBAAoB;gBACpB,qBAAqB;gBACrB,MAAM;aACP;YACD,gCAAgC,EAAE,CAAC,MAAM,CAAC;YAC1C,qBAAqB,EAAE,GAAG,IAAI,GAAG,iBAAiB,EAAE;SACrD,CAAC;IACJ,CAAC;IAED,SAAS,yBAAyB;QAChC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,OAAO;YACL,QAAQ,EAAE,cAAc,EAAE;YAC1B,qBAAqB,EAAE,CAAC,IAAI,CAAC;YAC7B,gBAAgB,EAAE,CAAC,SAAS,CAAC;YAC7B,wBAAwB,EAAE,CAAC,QAAQ,CAAC;YACpC,aAAa,EAAE,YAAY;YAC3B,sBAAsB,EAAE,GAAG,IAAI,GAAG,iBAAiB,EAAE;SACtD,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,IAAI;QACd,yCAAyC;QACzC,6CAA6C;QAC7C,wCAAwC;KACzC,EAAE,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,OAAO,CAAC,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,2BAA2B,CAAC,CAAC,CAAC;oBAAE,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBACjE,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,IAAI;QACd,uCAAuC;QACvC,2CAA2C;QAC3C,sCAAsC;KACvC,EAAE,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,OAAO,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,2BAA2B,CAAC,CAAC,CAAC;oBAAE,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBACjE,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,kBAAkB,CAAC,GAAY;QACtC,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,CACL,CAAC,CAAC,QAAQ,KAAK,QAAQ;gBACvB,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO;oBACrB,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAC9D,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9C,MAAM,QAAQ,GACZ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;YACtD,SAAS,CAAC;QACZ,MAAM,IAAI,GAAG,iBAAiB,CAAC,WAAW,QAAQ,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACnE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE,qBAAqB;gBAC5B,iBAAiB,EAAE,gCAAgC;aACpD,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACrB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,IAA6B,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,cAAc,EAAE,EACvE,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YACpD,CAAC,CAAC,IAAI,CAAC,aAAa;YACpB,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE,sBAAsB;gBAC7B,iBAAiB,EAAE,mDAAmD;aACvE,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAClB,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAC5B,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE,yBAAyB;gBAChC,iBAAiB,EAAE,mBAAmB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC9D,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC;YAC/C,WAAW,EACT,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YACrE,aAAa,EAAE,YAAwB;YACvC,0BAA0B,EACxB,OAAO,IAAI,CAAC,0BAA0B,KAAK,QAAQ;gBACjD,CAAC,CAAC,IAAI,CAAC,0BAA0B;gBACjC,CAAC,CAAC,SAAS;YACf,KAAK,EAAE,cAAc;SACtB,CAAC,CAAC;QACH,iBAAiB,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,IAAI,CACX;YACE,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAClD,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS;YAC5C,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,0BAA0B,EAAE,MAAM,CAAC,0BAA0B;YAC7D,WAAW,EAAE,CAAC,oBAAoB,EAAE,eAAe,CAAC;YACpD,cAAc,EAAE,CAAC,MAAM,CAAC;YACxB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS;SACjC,EACD,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAaH,SAAS,mBAAmB,CAC1B,GAAuC;QAEvC,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;YAC9B,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;YACpC,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;YACtC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;YAC7B,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;YACxC,qBAAqB,EAAE,GAAG,CAAC,qBAAqB,IAAI,EAAE;YACtD,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC;IAED,SAAS,UAAU,CAAC,CAAS;QAC3B,OAAO,CAAC;aACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;aACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,SAAS,iBAAiB,CACxB,WAAmB,EACnB,KAAa,EACb,KAAa,EACb,WAAoB;QAEpB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnC,IAAI,WAAW;YAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;QACtE,IAAI,KAAK;YAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,QAAQ,CACf,KAAa,EACb,MAAoE;QAEpE,MAAM,IAAI,GAAqD,EAAE,KAAK,EAAE,CAAC;QACzE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,SAAS;gBAAE,SAAS;YAC9B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACd,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,YAAY,CAAC,WAAmB;QACvC,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAQD,SAAS,WAAW,CAAC,CAAkB,EAAE,IAAiB;QACxD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,MAAM,GACV;YACE,WAAW;YACX,cAAc;YACd,eAAe;YACf,OAAO;YACP,OAAO;YACP,gBAAgB;YAChB,uBAAuB;YACvB,UAAU;SAEb;aACE,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,8BAA8B,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAClE;aACA,IAAI,CAAC,YAAY,CAAC,CAAC;QACtB,IAAI,UAAU,GAAG,kBAAkB,CAAC;QACpC,IAAI,CAAC;YACH,UAAU,GAAG,GAAG,UAAU,EAAE,kBAAkB,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QACD,MAAM,gBAAgB,GAAG,QAAQ;YAC/B,CAAC,CAAC;qCAC6B,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;WACxD;YACL,CAAC,CAAC;;;uGAG+F,CAAC;QACpG,OAAO;;;;;qBAKU,UAAU,CAAC,UAAU,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA+B9D,UAAU,CAAC,WAAW,CAAC;0CACS,UAAU,CAAC,UAAU,CAAC;MAC1D,KAAK,CAAC,CAAC,CAAC,sBAAsB,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;;;UAIxD,iBAAiB;;;kCAGO,UAAU,CAAC,UAAU,CAAC;UAC9C,MAAM;UACN,gBAAgB;;;;;;;;QAQlB,CAAC;IACP,CAAC;IAED,SAAS,qBAAqB,CAC5B,CAAkB;QAKlB,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;YACnD,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,6CAA6C;aACvD,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAC/C,CAAC;QACF,IACE,CAAC,cAAc;YACf,CAAC,cAAc;iBACZ,KAAK,CAAC,KAAK,CAAC;iBACZ,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACvE,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,eAAe;gBACtB,WAAW,EAAE,mBAAmB,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE;aAC5D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;YAC/B,OAAO;gBACL,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,2BAA2B;gBAClC,WAAW,EAAE,2BAA2B;aACzC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,qBAAqB,KAAK,MAAM,EAAE,CAAC;YAC5D,OAAO;gBACL,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,iBAAiB;gBACxB,WAAW,EACT,qEAAqE;aACxE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO;gBACL,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,sBAAsB,cAAc,EAAE,EAAE;aACtD,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;IACvE,CAAC;IAED,WAAW,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9C,IAAI,CAAC,aAAa,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACxE,IAAI,CAAC;YACH,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,CAAC,IAAI,CACX,6EAA6E,EAC7E,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;QACD,MAAM,CAAC,GAAG,mBAAmB,CAAC;YAC5B,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;YACnC,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;YACzC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;YAC3C,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;YAC3B,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;YAC3B,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC;YAC7C,qBAAqB,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC;YAC3D,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC5B,QAAQ,CAAC,sBAAsB,EAAE;gBAC/B,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1C,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;aAC5C,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAChC,QAAQ,CAAC,sBAAsB,EAAE;gBAC/B,MAAM,EAAE,CAAC,CAAC,KAAK;gBACf,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1C,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;aAC5C,CAAC,CAAC;YACH,OAAO,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnE,QAAQ,CAAC,eAAe,EAAE;YACxB,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1C,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;YAC3C,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC;YAClC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,CAAC,CAAC,qBAAqB,KAAK,MAAM;SACzC,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/C,IAAI,CAAC,aAAa,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACxE,IAAI,CAAC;YACH,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,CAAC,IAAI,CACX,6EAA6E,EAC7E,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,mBAAmB,CAAC;YAC5B,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAChC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YACtC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;YACxC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;YAC1C,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC;YACxD,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAChC,OAAO,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE,CAAC;YACpC,QAAQ,CAAC,gBAAgB,EAAE;gBACzB,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1C,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;aAC5C,CAAC,CAAC;YACH,OAAO,iBAAiB,CACtB,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,KAAK,EACP,eAAe,EACf,cAAc,CACf,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnE,IAAI,OAAO,GAAqC,IAAI,CAAC;QACrD,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,MAAM,GAAkB,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,GAAG,SAAS,CAAC;YACpB,SAAS,GAAG,YAAY,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACpE,MAAM,QAAQ,GACZ,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACvB,QAAQ,CAAC,wBAAwB,EAAE;oBACjC,MAAM,EAAE,qBAAqB;oBAC7B,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC1C,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;iBAC5C,CAAC,CAAC;gBACH,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;gBAC3C,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;gBACtC,OAAO,CAAC,CAAC,IAAI,CACX,WAAW,CAAC,CAAC,EAAE;oBACb,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,YAAY,EAAE,IAAI;oBAClB,KAAK,EAAE,qCAAqC;iBAC7C,CAAC,EACF,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,aAAa,CAAC;YACxB,SAAS,GAAG,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC;YACpC,MAAM,GAAG,IAAI,EAAE,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC;YACzD,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBACvC,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE;wBAC1C,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM;wBACtB,QAAQ,EAAE,SAAS;qBACpB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CACV,6DAA6D,EAC7D,CAAC,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC;QAC1D,MAAM,IAAI,GAAG,cAAc,CAAC;YAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,SAAS;YAC3B,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;YAC5B,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QAEH,QAAQ,CAAC,mBAAmB,EAAE;YAC5B,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1C,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;YAC3C,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YACrD,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,KAAK;YAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,SAAS,UAAU,CACjB,CAAU,EACV,KAAa,EACb,WAAmB,EACnB,SAAoB,GAAG;QAEvB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE;YAC/D,eAAe,EAAE,UAAU;YAC3B,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;IACL,CAAC;IAED,SAAS,kBAAkB,CACzB,QAAgB,EAChB,gBAAwB,EACxB,WAA+B;QAI/B,IAAI,EAAE,GAAG,QAAQ,CAAC;QAClB,IAAI,MAAM,GAAkB,gBAAgB,IAAI,IAAI,CAAC;QACrD,IAAI,WAAW,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAClE,MAAM,CACP,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;oBACZ,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC/C,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;QACjE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;QAC9D,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3C,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACrB,OAAO,UAAU,CACf,CAAC,EACD,yBAAyB,EACzB,6BAA6B,CAC9B,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,OAAO,UAAU,CACf,CAAC,EACD,yBAAyB,EACzB,6EAA6E,CAC9E,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;QACD,IAAI,IAAI,GAA4B,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACpC,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAA4B,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,UAAU,CACf,CAAC,EACD,iBAAiB,EACjB,uCAAuC,CACxC,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEzC,MAAM,IAAI,GAAG,kBAAkB,CAC7B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EACrB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EACzB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAC9B,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAE5E,IAAI,SAAS,KAAK,oBAAoB,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3C,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI;gBAAE,OAAO,UAAU,CAAC,CAAC,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,UAAU,CACf,CAAC,EACD,iBAAiB,EACjB,6BAA6B,CAC9B,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,QAAQ,CAAC,cAAc,EAAE;oBACvB,KAAK,EAAE,oBAAoB;oBAC3B,MAAM,EAAE,sBAAsB;oBAC9B,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC9C,CAAC,CAAC;gBACH,OAAO,UAAU,CACf,CAAC,EACD,eAAe,EACf,sCAAsC,CACvC,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzC,QAAQ,CAAC,cAAc,EAAE;oBACvB,KAAK,EAAE,oBAAoB;oBAC3B,MAAM,EAAE,iBAAiB;oBACzB,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC9C,CAAC,CAAC;gBACH,OAAO,UAAU,CACf,CAAC,EACD,eAAe,EACf,gCAAgC,CACjC,CAAC;YACJ,CAAC;YACD,IAAI,WAAW,IAAI,WAAW,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC;gBACxD,QAAQ,CAAC,cAAc,EAAE;oBACvB,KAAK,EAAE,oBAAoB;oBAC3B,MAAM,EAAE,uBAAuB;oBAC/B,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC7C,aAAa,EAAE,YAAY,CAAC,WAAW,CAAC;oBACxC,aAAa,EAAE,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC;iBAClD,CAAC,CAAC;gBACH,OAAO,UAAU,CACf,CAAC,EACD,eAAe,EACf,2CAA2C,CAC5C,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtD,QAAQ,CAAC,cAAc,EAAE;oBACvB,KAAK,EAAE,oBAAoB;oBAC3B,MAAM,EAAE,cAAc;oBACtB,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC9C,CAAC,CAAC;gBACH,OAAO,UAAU,CAAC,CAAC,EAAE,eAAe,EAAE,6BAA6B,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,QAAQ,CAAC,cAAc,EAAE;oBACvB,KAAK,EAAE,oBAAoB;oBAC3B,MAAM,EAAE,kBAAkB;oBAC1B,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC9C,CAAC,CAAC;gBACH,OAAO,UAAU,CACf,CAAC,EACD,gBAAgB,EAChB,sBAAsB,cAAc,EAAE,EAAE,CACzC,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,cAAc,EAAE;oBACvB,KAAK,EAAE,oBAAoB;oBAC3B,MAAM,EAAE,oBAAoB;oBAC5B,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC9C,CAAC,CAAC;gBACH,OAAO,UAAU,CACf,CAAC,EACD,eAAe,EACf,sCAAsC,CACvC,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,eAAe,CACvC,IAAI,CAAC,SAAS,EACd,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,OAAO,CACjB,CAAC;YACF,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,YAAY,GAAG,kBAAkB,CACrC,IAAI,CAAC,SAAS,EACd,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,OAAO,CACjB,CAAC;YACF,QAAQ,CAAC,UAAU,EAAE;gBACnB,KAAK,EAAE,oBAAoB;gBAC3B,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC7C,YAAY,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;aACrD,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,YAAY,EAAE,WAAW;gBACzB,UAAU,EAAE,QAAQ;gBACpB,UAAU,EAAE,kBAAkB;gBAC9B,aAAa,EAAE,YAAY;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,EACD,GAAG,EACH,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CACpD,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,OAAO,UAAU,CAAC,CAAC,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,UAAU,CACf,CAAC,EACD,eAAe,EACf,2CAA2C,CAC5C,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzC,OAAO,UAAU,CACf,CAAC,EACD,eAAe,EACf,yCAAyC,CAC1C,CAAC;YACJ,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,eAAe,CACvC,IAAI,CAAC,SAAS,EACd,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,OAAO,CAChB,CAAC;YACF,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,YAAY,EAAE,WAAW;gBACzB,UAAU,EAAE,QAAQ;gBACpB,UAAU,EAAE,kBAAkB;gBAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,EACD,GAAG,EACH,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CACpD,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CACf,CAAC,EACD,wBAAwB,EACxB,qCAAqC,CACtC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { McpOAuthAdapters } from "./types.js";
|
|
2
|
+
/** `crm` reste accepté pour les clients déjà connectés (accès complet). */
|
|
3
|
+
export declare const MCP_SCOPE_LEGACY = "crm";
|
|
4
|
+
export declare const MCP_SCOPE_READ = "crm:read";
|
|
5
|
+
export declare const MCP_SCOPE_WRITE = "crm:write";
|
|
6
|
+
export declare const MCP_SCOPES: readonly ["crm:read", "crm:write"];
|
|
7
|
+
export declare const MCP_SCOPE: string;
|
|
8
|
+
export declare const ACCESS_TOKEN_TTL_S: number;
|
|
9
|
+
export declare const REFRESH_TOKEN_TTL_S: number;
|
|
10
|
+
export declare function configureMcpOAuth(next: McpOAuthAdapters): void;
|
|
11
|
+
export declare function getMcpOAuthAdapters(): McpOAuthAdapters;
|
|
12
|
+
export declare function resetMcpOAuthAdaptersForTests(): void;
|
|
13
|
+
/** Desktop sans URL publique (tunnel non configuré). */
|
|
14
|
+
export declare class McpPublicUrlRequiredError extends Error {
|
|
15
|
+
readonly code: "mcp_public_url_required";
|
|
16
|
+
constructor(message?: string);
|
|
17
|
+
}
|
|
18
|
+
export declare function isMcpPublicUrlRequiredError(err: unknown): err is McpPublicUrlRequiredError;
|
|
19
|
+
/**
|
|
20
|
+
* Origine publique MCP (issuer) sans lever d'erreur.
|
|
21
|
+
* Priorité : adapter → MCP_PUBLIC_URL → APP_PUBLIC_URL → (hors desktop) APP_BASE_URL.
|
|
22
|
+
* Jamais de fallback domaine marque hardcodé.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveMcpPublicUrl(): string | null;
|
|
25
|
+
/** URL publique de base (issuer OAuth + préfixe resource). */
|
|
26
|
+
export declare function mcpBaseUrl(): string;
|
|
27
|
+
/** Identifiant canonique de la ressource MCP (RFC 8707). */
|
|
28
|
+
export declare function mcpResourceUrl(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Normalise loopback (127.0.0.1 / ::1 → localhost) pour comparer resource.
|
|
31
|
+
*/
|
|
32
|
+
export declare function canonicalizeMcpUrl(url: string): string;
|
|
33
|
+
/** Validation resource (RFC 8707) — accepte absent, ou l'URL canonique /mcp. */
|
|
34
|
+
export declare function resourceAcceptable(resource: string): boolean;
|
|
35
|
+
export declare function mcpOauthReady(): boolean;
|
|
36
|
+
export declare function normalizeMcpScopes(scope: string | null | undefined): string | null;
|
|
37
|
+
export type McpOAuthClient = {
|
|
38
|
+
client_id: string;
|
|
39
|
+
client_secret_hash: string | null;
|
|
40
|
+
client_name: string | null;
|
|
41
|
+
redirect_uris: string[];
|
|
42
|
+
token_endpoint_auth_method: string;
|
|
43
|
+
scope: string | null;
|
|
44
|
+
enabled?: number;
|
|
45
|
+
revoked_at?: string | null;
|
|
46
|
+
};
|
|
47
|
+
export type RegisterClientInput = {
|
|
48
|
+
client_name?: string;
|
|
49
|
+
redirect_uris: string[];
|
|
50
|
+
token_endpoint_auth_method?: string;
|
|
51
|
+
scope?: string;
|
|
52
|
+
};
|
|
53
|
+
/** Enregistre un client — retourne le secret en clair (une seule fois) si confidentiel. */
|
|
54
|
+
export declare function registerClient(input: RegisterClientInput): {
|
|
55
|
+
client: McpOAuthClient;
|
|
56
|
+
client_secret: string | null;
|
|
57
|
+
};
|
|
58
|
+
export declare function getClient(clientId: string): McpOAuthClient | null;
|
|
59
|
+
/** Vérifie le secret client (client_secret_post / client_secret_basic). */
|
|
60
|
+
export declare function verifyClientSecret(client: McpOAuthClient, secret: string | null): boolean;
|
|
61
|
+
export type CreateCodeInput = {
|
|
62
|
+
client_id: string;
|
|
63
|
+
redirect_uri: string;
|
|
64
|
+
scope: string;
|
|
65
|
+
resource: string | null;
|
|
66
|
+
code_challenge: string;
|
|
67
|
+
/** Utilisateur CRM ayant donné son consentement. */
|
|
68
|
+
user_id?: string | null;
|
|
69
|
+
};
|
|
70
|
+
/** Crée un authorization code (usage unique, TTL 10 min) — retourné en clair. */
|
|
71
|
+
export declare function createAuthCode(input: CreateCodeInput): string;
|
|
72
|
+
export type ConsumedCode = {
|
|
73
|
+
client_id: string;
|
|
74
|
+
redirect_uri: string;
|
|
75
|
+
scope: string;
|
|
76
|
+
resource: string | null;
|
|
77
|
+
code_challenge: string;
|
|
78
|
+
user_id: string | null;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Lecture d'un code encore valide (sans le consommer) — pour valider PKCE /
|
|
82
|
+
* redirect_uri / client avant usage unique.
|
|
83
|
+
*/
|
|
84
|
+
export declare function peekAuthCode(code: string): ConsumedCode | null;
|
|
85
|
+
/** Consomme un code (usage unique, atomique) — null si inconnu/expiré/déjà utilisé. */
|
|
86
|
+
export declare function consumeAuthCode(code: string): ConsumedCode | null;
|
|
87
|
+
/** Vérifie PKCE S256 : BASE64URL(SHA256(verifier)) === challenge. */
|
|
88
|
+
export declare function verifyPkceS256(verifier: string, challenge: string): boolean;
|
|
89
|
+
export declare function createRefreshToken(clientId: string, scope: string, resource: string | null, userId?: string | null): string;
|
|
90
|
+
export type RotatedRefresh = {
|
|
91
|
+
client_id: string;
|
|
92
|
+
scope: string;
|
|
93
|
+
resource: string | null;
|
|
94
|
+
user_id: string | null;
|
|
95
|
+
refresh_token: string;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Échange un refresh token : rotation atomique.
|
|
99
|
+
*/
|
|
100
|
+
export declare function rotateRefreshToken(token: string): RotatedRefresh | null;
|
|
101
|
+
export declare function signAccessToken(clientId: string, scope: string, userId?: string | null): Promise<string>;
|
|
102
|
+
export type McpAccessToken = {
|
|
103
|
+
client_id: string;
|
|
104
|
+
scope: string;
|
|
105
|
+
user_id: string | null;
|
|
106
|
+
};
|
|
107
|
+
/** Vérifie signature + issuer + audience — null si invalide/expiré. */
|
|
108
|
+
export declare function verifyAccessToken(token: string): Promise<McpAccessToken | null>;
|
|
109
|
+
/** Purge opportuniste des codes expirés (appelée au fil de l'eau). */
|
|
110
|
+
export declare function pruneExpiredCodes(): void;
|
|
111
|
+
/** Touch last_used_at client (migration admin optionnelle). */
|
|
112
|
+
export declare function touchOAuthClientLastUsed(clientId: string): void;
|
|
113
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/oauth/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store OAuth 2.1 MCP (PKCE S256, DCR, refresh rotation) — SoT kit.
|
|
3
|
+
* Port TempoFlow gold ; DB / JWT secret / URL publique injectables.
|
|
4
|
+
*/
|
|
5
|
+
import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
|
|
6
|
+
import { SignJWT, jwtVerify } from "jose";
|
|
7
|
+
/* ------------------------------------------------------------------ */
|
|
8
|
+
/* Constantes */
|
|
9
|
+
/* ------------------------------------------------------------------ */
|
|
10
|
+
/** `crm` reste accepté pour les clients déjà connectés (accès complet). */
|
|
11
|
+
export const MCP_SCOPE_LEGACY = "crm";
|
|
12
|
+
export const MCP_SCOPE_READ = "crm:read";
|
|
13
|
+
export const MCP_SCOPE_WRITE = "crm:write";
|
|
14
|
+
export const MCP_SCOPES = [MCP_SCOPE_READ, MCP_SCOPE_WRITE];
|
|
15
|
+
export const MCP_SCOPE = MCP_SCOPES.join(" ");
|
|
16
|
+
export const ACCESS_TOKEN_TTL_S = 60 * 60 * 24; // 24 h
|
|
17
|
+
export const REFRESH_TOKEN_TTL_S = 60 * 60 * 24 * 30; // 30 jours
|
|
18
|
+
const AUTH_CODE_TTL_S = 60 * 10; // 10 min
|
|
19
|
+
/** Fenêtre de grâce après rotation : le client peut rejouer l'échange (retry réseau). */
|
|
20
|
+
const REFRESH_ROTATION_GRACE_S = 120;
|
|
21
|
+
let adapters = null;
|
|
22
|
+
export function configureMcpOAuth(next) {
|
|
23
|
+
adapters = next;
|
|
24
|
+
}
|
|
25
|
+
export function getMcpOAuthAdapters() {
|
|
26
|
+
if (!adapters) {
|
|
27
|
+
throw new Error("@creezio/mcp-facade: configureMcpOAuth({ getWriteDb, tableExists }) requis");
|
|
28
|
+
}
|
|
29
|
+
return adapters;
|
|
30
|
+
}
|
|
31
|
+
export function resetMcpOAuthAdaptersForTests() {
|
|
32
|
+
adapters = null;
|
|
33
|
+
}
|
|
34
|
+
function queryOne(sql, params = []) {
|
|
35
|
+
const row = getMcpOAuthAdapters()
|
|
36
|
+
.getWriteDb()
|
|
37
|
+
.prepare(sql)
|
|
38
|
+
.get(...params);
|
|
39
|
+
return row ?? null;
|
|
40
|
+
}
|
|
41
|
+
/** Desktop sans URL publique (tunnel non configuré). */
|
|
42
|
+
export class McpPublicUrlRequiredError extends Error {
|
|
43
|
+
code = "mcp_public_url_required";
|
|
44
|
+
constructor(message = "tunnel requis — configurez l'accès mobile (APP_PUBLIC_URL / MCP_PUBLIC_URL)") {
|
|
45
|
+
super(message);
|
|
46
|
+
this.name = "McpPublicUrlRequiredError";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function isMcpPublicUrlRequiredError(err) {
|
|
50
|
+
return (err instanceof McpPublicUrlRequiredError ||
|
|
51
|
+
(typeof err === "object" &&
|
|
52
|
+
err !== null &&
|
|
53
|
+
err.code === "mcp_public_url_required"));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Origine publique MCP (issuer) sans lever d'erreur.
|
|
57
|
+
* Priorité : adapter → MCP_PUBLIC_URL → APP_PUBLIC_URL → (hors desktop) APP_BASE_URL.
|
|
58
|
+
* Jamais de fallback domaine marque hardcodé.
|
|
59
|
+
*/
|
|
60
|
+
export function resolveMcpPublicUrl() {
|
|
61
|
+
const custom = adapters?.resolvePublicUrl?.();
|
|
62
|
+
if (custom != null) {
|
|
63
|
+
const trimmed = custom.trim();
|
|
64
|
+
return trimmed ? trimmed.replace(/\/+$/, "") : null;
|
|
65
|
+
}
|
|
66
|
+
const explicit = (process.env.MCP_PUBLIC_URL ||
|
|
67
|
+
process.env.APP_PUBLIC_URL ||
|
|
68
|
+
"").trim();
|
|
69
|
+
if (explicit)
|
|
70
|
+
return explicit.replace(/\/+$/, "");
|
|
71
|
+
if ((process.env.DESKTOP_LOCAL || "").trim() === "1")
|
|
72
|
+
return null;
|
|
73
|
+
const base = (process.env.APP_BASE_URL || "").trim();
|
|
74
|
+
return base ? base.replace(/\/+$/, "") : null;
|
|
75
|
+
}
|
|
76
|
+
/** URL publique de base (issuer OAuth + préfixe resource). */
|
|
77
|
+
export function mcpBaseUrl() {
|
|
78
|
+
const url = resolveMcpPublicUrl();
|
|
79
|
+
if (url)
|
|
80
|
+
return url;
|
|
81
|
+
throw new McpPublicUrlRequiredError();
|
|
82
|
+
}
|
|
83
|
+
/** Identifiant canonique de la ressource MCP (RFC 8707). */
|
|
84
|
+
export function mcpResourceUrl() {
|
|
85
|
+
return `${mcpBaseUrl()}/mcp`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Normalise loopback (127.0.0.1 / ::1 → localhost) pour comparer resource.
|
|
89
|
+
*/
|
|
90
|
+
export function canonicalizeMcpUrl(url) {
|
|
91
|
+
const trimmed = url.trim().replace(/\/+$/, "");
|
|
92
|
+
try {
|
|
93
|
+
const u = new URL(trimmed);
|
|
94
|
+
if (u.hostname === "127.0.0.1" ||
|
|
95
|
+
u.hostname === "[::1]" ||
|
|
96
|
+
u.hostname === "::1") {
|
|
97
|
+
u.hostname = "localhost";
|
|
98
|
+
}
|
|
99
|
+
return `${u.origin}${u.pathname.replace(/\/+$/, "")}${u.search}`;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return trimmed;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/** Validation resource (RFC 8707) — accepte absent, ou l'URL canonique /mcp. */
|
|
106
|
+
export function resourceAcceptable(resource) {
|
|
107
|
+
if (!resource)
|
|
108
|
+
return true;
|
|
109
|
+
let canonical;
|
|
110
|
+
let base;
|
|
111
|
+
try {
|
|
112
|
+
canonical = canonicalizeMcpUrl(mcpResourceUrl());
|
|
113
|
+
base = canonicalizeMcpUrl(mcpBaseUrl());
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
return resource
|
|
119
|
+
.split(",")
|
|
120
|
+
.map((r) => canonicalizeMcpUrl(r))
|
|
121
|
+
.every((r) => !r || r === canonical || r === base);
|
|
122
|
+
}
|
|
123
|
+
function getMcpSecret() {
|
|
124
|
+
const fromAdapter = adapters?.getJwtSecret?.();
|
|
125
|
+
const secret = (fromAdapter || process.env.MCP_JWT_SECRET || "").trim();
|
|
126
|
+
if (!secret)
|
|
127
|
+
throw new Error("MCP_JWT_SECRET non configuré");
|
|
128
|
+
return new TextEncoder().encode(secret);
|
|
129
|
+
}
|
|
130
|
+
export function mcpOauthReady() {
|
|
131
|
+
try {
|
|
132
|
+
const a = getMcpOAuthAdapters();
|
|
133
|
+
return (a.tableExists("mcp_oauth_clients") &&
|
|
134
|
+
a.tableExists("mcp_oauth_codes") &&
|
|
135
|
+
a.tableExists("mcp_oauth_refresh_tokens"));
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function sha256(value) {
|
|
142
|
+
return createHash("sha256").update(value, "utf8").digest("hex");
|
|
143
|
+
}
|
|
144
|
+
function safeEqualHex(a, b) {
|
|
145
|
+
const ba = Buffer.from(a, "hex");
|
|
146
|
+
const bb = Buffer.from(b, "hex");
|
|
147
|
+
return ba.length === bb.length && timingSafeEqual(ba, bb);
|
|
148
|
+
}
|
|
149
|
+
const nowS = () => Math.floor(Date.now() / 1000);
|
|
150
|
+
export function normalizeMcpScopes(scope) {
|
|
151
|
+
const requested = new Set(String(scope || MCP_SCOPE)
|
|
152
|
+
.split(/\s+/)
|
|
153
|
+
.filter(Boolean));
|
|
154
|
+
if (requested.has(MCP_SCOPE_LEGACY))
|
|
155
|
+
return MCP_SCOPE_LEGACY;
|
|
156
|
+
if (Array.from(requested).some((item) => !MCP_SCOPES.includes(item))) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
if (requested.has(MCP_SCOPE_WRITE))
|
|
160
|
+
requested.add(MCP_SCOPE_READ);
|
|
161
|
+
return (Array.from(MCP_SCOPES)
|
|
162
|
+
.filter((item) => requested.has(item))
|
|
163
|
+
.join(" ") || MCP_SCOPE_READ);
|
|
164
|
+
}
|
|
165
|
+
const ALLOWED_AUTH_METHODS = new Set([
|
|
166
|
+
"none",
|
|
167
|
+
"client_secret_post",
|
|
168
|
+
"client_secret_basic",
|
|
169
|
+
]);
|
|
170
|
+
/** Enregistre un client — retourne le secret en clair (une seule fois) si confidentiel. */
|
|
171
|
+
export function registerClient(input) {
|
|
172
|
+
const method = ALLOWED_AUTH_METHODS.has(input.token_endpoint_auth_method || "")
|
|
173
|
+
? input.token_endpoint_auth_method
|
|
174
|
+
: "client_secret_post";
|
|
175
|
+
const clientId = `mcp_${randomBytes(16).toString("base64url")}`;
|
|
176
|
+
const clientSecret = method === "none" ? null : randomBytes(32).toString("base64url");
|
|
177
|
+
const client = {
|
|
178
|
+
client_id: clientId,
|
|
179
|
+
client_secret_hash: clientSecret ? sha256(clientSecret) : null,
|
|
180
|
+
client_name: input.client_name?.slice(0, 200) || null,
|
|
181
|
+
redirect_uris: input.redirect_uris,
|
|
182
|
+
token_endpoint_auth_method: method,
|
|
183
|
+
scope: normalizeMcpScopes(input.scope) || MCP_SCOPE,
|
|
184
|
+
};
|
|
185
|
+
getMcpOAuthAdapters()
|
|
186
|
+
.getWriteDb()
|
|
187
|
+
.prepare(`INSERT INTO mcp_oauth_clients
|
|
188
|
+
(client_id, client_secret_hash, client_name, redirect_uris,
|
|
189
|
+
token_endpoint_auth_method, grant_types, scope)
|
|
190
|
+
VALUES (?, ?, ?, ?, ?, 'authorization_code,refresh_token', ?)`)
|
|
191
|
+
.run(client.client_id, client.client_secret_hash, client.client_name, JSON.stringify(client.redirect_uris), client.token_endpoint_auth_method, client.scope);
|
|
192
|
+
return { client, client_secret: clientSecret };
|
|
193
|
+
}
|
|
194
|
+
export function getClient(clientId) {
|
|
195
|
+
if (!clientId || !mcpOauthReady())
|
|
196
|
+
return null;
|
|
197
|
+
const row = queryOne(`SELECT * FROM mcp_oauth_clients WHERE client_id = ?`, [clientId]);
|
|
198
|
+
if (!row)
|
|
199
|
+
return null;
|
|
200
|
+
if (row.enabled === 0 || row.revoked_at)
|
|
201
|
+
return null;
|
|
202
|
+
let uris = [];
|
|
203
|
+
try {
|
|
204
|
+
uris = JSON.parse(row.redirect_uris);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
uris = [];
|
|
208
|
+
}
|
|
209
|
+
return { ...row, redirect_uris: uris };
|
|
210
|
+
}
|
|
211
|
+
/** Vérifie le secret client (client_secret_post / client_secret_basic). */
|
|
212
|
+
export function verifyClientSecret(client, secret) {
|
|
213
|
+
if (client.token_endpoint_auth_method === "none")
|
|
214
|
+
return true;
|
|
215
|
+
if (!client.client_secret_hash || !secret)
|
|
216
|
+
return false;
|
|
217
|
+
return safeEqualHex(sha256(secret), client.client_secret_hash);
|
|
218
|
+
}
|
|
219
|
+
/** Crée un authorization code (usage unique, TTL 10 min) — retourné en clair. */
|
|
220
|
+
export function createAuthCode(input) {
|
|
221
|
+
const code = randomBytes(32).toString("base64url");
|
|
222
|
+
getMcpOAuthAdapters()
|
|
223
|
+
.getWriteDb()
|
|
224
|
+
.prepare(`INSERT INTO mcp_oauth_codes
|
|
225
|
+
(code_hash, client_id, redirect_uri, scope, resource,
|
|
226
|
+
code_challenge, code_challenge_method, expires_at, user_id)
|
|
227
|
+
VALUES (?, ?, ?, ?, ?, ?, 'S256', ?, ?)`)
|
|
228
|
+
.run(sha256(code), input.client_id, input.redirect_uri, input.scope, input.resource, input.code_challenge, nowS() + AUTH_CODE_TTL_S, input.user_id || null);
|
|
229
|
+
return code;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Lecture d'un code encore valide (sans le consommer) — pour valider PKCE /
|
|
233
|
+
* redirect_uri / client avant usage unique.
|
|
234
|
+
*/
|
|
235
|
+
export function peekAuthCode(code) {
|
|
236
|
+
if (!code || !mcpOauthReady())
|
|
237
|
+
return null;
|
|
238
|
+
const hash = sha256(code);
|
|
239
|
+
const row = queryOne(`SELECT client_id, redirect_uri, scope, resource, code_challenge, user_id, used_at, expires_at
|
|
240
|
+
FROM mcp_oauth_codes WHERE code_hash = ?`, [hash]);
|
|
241
|
+
if (!row || row.used_at != null || row.expires_at <= nowS())
|
|
242
|
+
return null;
|
|
243
|
+
return {
|
|
244
|
+
client_id: row.client_id,
|
|
245
|
+
redirect_uri: row.redirect_uri,
|
|
246
|
+
scope: row.scope,
|
|
247
|
+
resource: row.resource,
|
|
248
|
+
code_challenge: row.code_challenge,
|
|
249
|
+
user_id: row.user_id ?? null,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/** Consomme un code (usage unique, atomique) — null si inconnu/expiré/déjà utilisé. */
|
|
253
|
+
export function consumeAuthCode(code) {
|
|
254
|
+
if (!code || !mcpOauthReady())
|
|
255
|
+
return null;
|
|
256
|
+
const hash = sha256(code);
|
|
257
|
+
const db = getMcpOAuthAdapters().getWriteDb();
|
|
258
|
+
const claim = db
|
|
259
|
+
.prepare(`UPDATE mcp_oauth_codes SET used_at = ?
|
|
260
|
+
WHERE code_hash = ? AND used_at IS NULL AND expires_at > ?`)
|
|
261
|
+
.run(nowS(), hash, nowS());
|
|
262
|
+
if (claim.changes !== 1)
|
|
263
|
+
return null;
|
|
264
|
+
const row = queryOne(`SELECT client_id, redirect_uri, scope, resource, code_challenge, user_id
|
|
265
|
+
FROM mcp_oauth_codes WHERE code_hash = ?`, [hash]);
|
|
266
|
+
return row ?? null;
|
|
267
|
+
}
|
|
268
|
+
/** Vérifie PKCE S256 : BASE64URL(SHA256(verifier)) === challenge. */
|
|
269
|
+
export function verifyPkceS256(verifier, challenge) {
|
|
270
|
+
if (!verifier || verifier.length < 43 || verifier.length > 128)
|
|
271
|
+
return false;
|
|
272
|
+
const computed = createHash("sha256")
|
|
273
|
+
.update(verifier, "utf8")
|
|
274
|
+
.digest("base64url");
|
|
275
|
+
const a = Buffer.from(computed);
|
|
276
|
+
const b = Buffer.from(challenge);
|
|
277
|
+
return a.length === b.length && timingSafeEqual(a, b);
|
|
278
|
+
}
|
|
279
|
+
/* ------------------------------------------------------------------ */
|
|
280
|
+
/* Refresh tokens (rotation + grâce) */
|
|
281
|
+
/* ------------------------------------------------------------------ */
|
|
282
|
+
export function createRefreshToken(clientId, scope, resource, userId) {
|
|
283
|
+
const token = `mcp_rt_${randomBytes(32).toString("base64url")}`;
|
|
284
|
+
getMcpOAuthAdapters()
|
|
285
|
+
.getWriteDb()
|
|
286
|
+
.prepare(`INSERT INTO mcp_oauth_refresh_tokens (token_hash, client_id, scope, resource, expires_at, user_id)
|
|
287
|
+
VALUES (?, ?, ?, ?, ?, ?)`)
|
|
288
|
+
.run(sha256(token), clientId, scope, resource, nowS() + REFRESH_TOKEN_TTL_S, userId || null);
|
|
289
|
+
return token;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Échange un refresh token : rotation atomique.
|
|
293
|
+
*/
|
|
294
|
+
export function rotateRefreshToken(token) {
|
|
295
|
+
if (!token || !mcpOauthReady())
|
|
296
|
+
return null;
|
|
297
|
+
const hash = sha256(token);
|
|
298
|
+
const row = queryOne(`SELECT client_id, scope, resource, user_id, expires_at, rotated_at, revoked_at
|
|
299
|
+
FROM mcp_oauth_refresh_tokens WHERE token_hash = ?`, [hash]);
|
|
300
|
+
if (!row || row.revoked_at)
|
|
301
|
+
return null;
|
|
302
|
+
if (row.expires_at <= nowS())
|
|
303
|
+
return null;
|
|
304
|
+
if (row.rotated_at && nowS() - row.rotated_at > REFRESH_ROTATION_GRACE_S) {
|
|
305
|
+
return null;
|
|
306
|
+
}
|
|
307
|
+
const db = getMcpOAuthAdapters().getWriteDb();
|
|
308
|
+
const issue = () => {
|
|
309
|
+
if (!row.rotated_at) {
|
|
310
|
+
db.prepare(`UPDATE mcp_oauth_refresh_tokens SET rotated_at = ? WHERE token_hash = ?`).run(nowS(), hash);
|
|
311
|
+
}
|
|
312
|
+
return createRefreshToken(row.client_id, row.scope, row.resource, row.user_id);
|
|
313
|
+
};
|
|
314
|
+
const run = typeof db.transaction === "function"
|
|
315
|
+
? db.transaction(issue)
|
|
316
|
+
: issue;
|
|
317
|
+
return {
|
|
318
|
+
client_id: row.client_id,
|
|
319
|
+
scope: row.scope,
|
|
320
|
+
resource: row.resource,
|
|
321
|
+
user_id: row.user_id ?? null,
|
|
322
|
+
refresh_token: run(),
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
/* ------------------------------------------------------------------ */
|
|
326
|
+
/* Access tokens (JWT HS256 — MCP_JWT_SECRET) */
|
|
327
|
+
/* ------------------------------------------------------------------ */
|
|
328
|
+
export async function signAccessToken(clientId, scope, userId) {
|
|
329
|
+
const uid = userId?.trim() || null;
|
|
330
|
+
const claims = { scope, client_id: clientId };
|
|
331
|
+
if (uid)
|
|
332
|
+
claims.uid = uid;
|
|
333
|
+
return new SignJWT(claims)
|
|
334
|
+
.setProtectedHeader({ alg: "HS256", typ: "at+jwt" })
|
|
335
|
+
.setIssuer(mcpBaseUrl())
|
|
336
|
+
.setAudience(mcpResourceUrl())
|
|
337
|
+
.setSubject(uid || clientId)
|
|
338
|
+
.setIssuedAt()
|
|
339
|
+
.setJti(randomBytes(12).toString("base64url"))
|
|
340
|
+
.setExpirationTime(`${ACCESS_TOKEN_TTL_S}s`)
|
|
341
|
+
.sign(getMcpSecret());
|
|
342
|
+
}
|
|
343
|
+
/** Vérifie signature + issuer + audience — null si invalide/expiré. */
|
|
344
|
+
export async function verifyAccessToken(token) {
|
|
345
|
+
try {
|
|
346
|
+
const { payload } = await jwtVerify(token, getMcpSecret(), {
|
|
347
|
+
issuer: mcpBaseUrl(),
|
|
348
|
+
audience: mcpResourceUrl(),
|
|
349
|
+
});
|
|
350
|
+
const clientId = String(payload.client_id || "");
|
|
351
|
+
const uidClaim = typeof payload.uid === "string" && payload.uid ? payload.uid : null;
|
|
352
|
+
const userId = uidClaim ||
|
|
353
|
+
(payload.sub && String(payload.sub) !== clientId
|
|
354
|
+
? String(payload.sub)
|
|
355
|
+
: null);
|
|
356
|
+
return {
|
|
357
|
+
client_id: clientId || String(payload.sub || ""),
|
|
358
|
+
scope: String(payload.scope || ""),
|
|
359
|
+
user_id: userId,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
catch {
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
/** Purge opportuniste des codes expirés (appelée au fil de l'eau). */
|
|
367
|
+
export function pruneExpiredCodes() {
|
|
368
|
+
try {
|
|
369
|
+
getMcpOAuthAdapters()
|
|
370
|
+
.getWriteDb()
|
|
371
|
+
.prepare(`DELETE FROM mcp_oauth_codes WHERE expires_at < ?`)
|
|
372
|
+
.run(nowS() - 3600);
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
/* non bloquant */
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/** Touch last_used_at client (migration admin optionnelle). */
|
|
379
|
+
export function touchOAuthClientLastUsed(clientId) {
|
|
380
|
+
try {
|
|
381
|
+
getMcpOAuthAdapters()
|
|
382
|
+
.getWriteDb()
|
|
383
|
+
.prepare(`UPDATE mcp_oauth_clients SET last_used_at = datetime('now') WHERE client_id = ?`)
|
|
384
|
+
.run(clientId);
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
/* migration admin absente : ne jamais casser OAuth */
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/oauth/store.ts"],"names":[],"mappings":"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"}
|