@aalis/plugin-webui-server 0.14.0 → 0.15.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 +5 -1
- package/dist/admin-channel.d.ts +10 -0
- package/dist/admin-channel.d.ts.map +1 -0
- package/dist/admin-channel.js +57 -0
- package/dist/admin-channel.js.map +1 -0
- package/dist/attention.d.ts +36 -0
- package/dist/attention.d.ts.map +1 -0
- package/dist/attention.js +73 -0
- package/dist/attention.js.map +1 -0
- package/dist/auth.d.ts +22 -3
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +192 -68
- package/dist/auth.js.map +1 -1
- package/dist/client-discovery.d.ts +7 -3
- package/dist/client-discovery.d.ts.map +1 -1
- package/dist/client-discovery.js +9 -3
- package/dist/client-discovery.js.map +1 -1
- package/dist/client-switch-page.d.ts +2 -0
- package/dist/client-switch-page.d.ts.map +1 -1
- package/dist/client-switch-page.js +37 -36
- package/dist/client-switch-page.js.map +1 -1
- package/dist/gate.d.ts +3 -3
- package/dist/gate.js +3 -3
- package/dist/index.d.ts +21 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +577 -1018
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +18 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +198 -0
- package/dist/layout.js.map +1 -0
- package/dist/logs.d.ts +10 -0
- package/dist/logs.d.ts.map +1 -0
- package/dist/logs.js +50 -0
- package/dist/logs.js.map +1 -0
- package/dist/page-check.d.ts +56 -0
- package/dist/page-check.d.ts.map +1 -0
- package/dist/page-check.js +369 -0
- package/dist/page-check.js.map +1 -0
- package/dist/page-files.d.ts +13 -0
- package/dist/page-files.d.ts.map +1 -0
- package/dist/page-files.js +39 -0
- package/dist/page-files.js.map +1 -0
- package/dist/pages.d.ts +60 -0
- package/dist/pages.d.ts.map +1 -0
- package/dist/pages.js +470 -0
- package/dist/pages.js.map +1 -0
- package/dist/route.d.ts +11 -0
- package/dist/route.d.ts.map +1 -0
- package/dist/route.js +13 -0
- package/dist/route.js.map +1 -0
- package/dist/routes/files.d.ts +8 -9
- package/dist/routes/files.d.ts.map +1 -1
- package/dist/routes/files.js +32 -119
- package/dist/routes/files.js.map +1 -1
- package/dist/routes/frames.d.ts +4 -0
- package/dist/routes/frames.d.ts.map +1 -0
- package/dist/routes/frames.js +103 -0
- package/dist/routes/frames.js.map +1 -0
- package/dist/routes/marketplace.d.ts +46 -129
- package/dist/routes/marketplace.d.ts.map +1 -1
- package/dist/routes/marketplace.js +138 -86
- package/dist/routes/marketplace.js.map +1 -1
- package/dist/routes/media.d.ts +7 -0
- package/dist/routes/media.d.ts.map +1 -0
- package/dist/routes/media.js +63 -0
- package/dist/routes/media.js.map +1 -0
- package/dist/routes/pages.d.ts +20 -0
- package/dist/routes/pages.d.ts.map +1 -0
- package/dist/routes/pages.js +86 -0
- package/dist/routes/pages.js.map +1 -0
- package/dist/routes/pipe-to-response.d.ts +9 -0
- package/dist/routes/pipe-to-response.d.ts.map +1 -0
- package/dist/routes/pipe-to-response.js +16 -0
- package/dist/routes/pipe-to-response.js.map +1 -0
- package/dist/routes/plugins.d.ts +22 -24
- package/dist/routes/plugins.d.ts.map +1 -1
- package/dist/routes/plugins.js +384 -361
- package/dist/routes/plugins.js.map +1 -1
- package/dist/routes/proxy.d.ts.map +1 -1
- package/dist/routes/proxy.js +2 -1
- package/dist/routes/proxy.js.map +1 -1
- package/dist/session-transport.d.ts +6 -0
- package/dist/session-transport.d.ts.map +1 -0
- package/dist/session-transport.js +32 -0
- package/dist/session-transport.js.map +1 -0
- package/package.json +34 -31
- package/dist/protocol.d.ts +0 -113
- package/dist/protocol.d.ts.map +0 -1
- package/dist/protocol.js +0 -59
- package/dist/protocol.js.map +0 -1
- package/dist/routes/uploaded-files.d.ts +0 -20
- package/dist/routes/uploaded-files.d.ts.map +0 -1
- package/dist/routes/uploaded-files.js +0 -161
- package/dist/routes/uploaded-files.js.map +0 -1
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI1D,OAAO,EAAE,cAAc,EAAuB,cAAc,EAAsB,MAAM,kBAAkB,CAAC;AAE3G,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,4CAA4C;AAC5C,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/C,qDAAqD;AACrD,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAElD;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAa,EAAE,QAAgB;IAClD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtE,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,sBAAsB;AACtB,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,GAAqC;IACjE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,GAAG,QAAQ,KAAK,IAAI,EAAE,CAAC;IACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,GAAqC;IACnE,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3C,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA0B,EAAE,IAAY;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC;YAAE,SAAS;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,KAAa,EAAE,SAAiB;IACpE,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,gDAAgD,SAAS,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,GAAG,IAAI,iDAAiD,CAAC;AAClE,CAAC;AAED,8CAA8C;AAC9C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAE/C,uCAAuC;AACvC,MAAM,YAAY,GAAG;;;;;;;;CAQpB,CAAC;AAEF,kCAAkC;AAClC,MAAM,WAAW,GAAG,CAAC,EAAkB,EAAE,EAAE,CACzC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;KACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;KAC1C,IAAI,CAAC,GAAG,CAAC,CAAC;AAEf;;;GAGG;AACH,MAAM,WAAW,GAAG,iCAAiC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC;6CACxC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC;;;;;;;;;;;;yDAYrB,CAAC;AAE1D,6BAA6B;AAC7B,SAAS,aAAa,CAAC,MAAe;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,mBAAmB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,OAAO;;;;EAIP,WAAW;;;;;EAKX,IAAI;;;;;eAKS,iBAAiB,2BAA2B,CAAC;AAC5D,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;AACnH,CAAC;AAcD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAsB;IACrD,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,uBAAuB;IAE5D,mDAAmD;IACnD,mCAAmC;IACnC,8EAA8E;IAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8C,CAAC;IAEvE,0CAA0C;IAC1C,SAAS,SAAS,CAAC,OAAe;QAChC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,OAAO,GAAG,GAAG;gBAAE,MAAM;YAC/B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,8CAA8C;IAC9C,SAAS,aAAa,CAAC,OAAe;QACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,IAAI,2BAA2B;YAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC,CAAC;QAC1G,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,uBAAuB,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,2CAA2C;IAC3C,SAAS,YAAY,CAAC,GAAqB,EAAE,MAAc;QACzD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChB,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAC3D,CAAC;IAED,SAAS,WAAW,CAAC,GAAqC;QACxD,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACvE,OAAO,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,SAAS,QAAQ,CAAC,GAAqC;QACrD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,GAAoB,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;IAE3E,SAAS,OAAO,CAAC,UAA2B;QAC1C,wDAAwD;QACxD,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAChC,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,EAAE,CAAC;YACtE,GAAG;iBACA,MAAM,CAAC,GAAG,CAAC;iBACX,IAAI,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAA0B,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,aAAa;QACb,KAAK,CAAC,UAAU,EAAE,wBAAwB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACxD,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,gFAAgF;QAChF,gBAAgB;QAChB,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAClF,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,sBAAsB,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,EAAE,CAAC;YAClF,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACvC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;YACzB,IAAI,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC/B,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACzB,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;gBAC/E,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1F,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YACD,aAAa,CAAC,OAAO,CAAC,CAAC;YACvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,KAAK,CAAC,UAAU,EAAE,sBAAsB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACrD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAI,GAAG,CAAC,IAAwC,IAAI,EAAE,CAAC;YACjE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;YACzB,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;gBACrE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACzB,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;gBAC/E,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,OAAO,CAAC,CAAC;gBACvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,sBAAsB;QACtB,KAAK,CAAC,UAAU,EAAE,sBAAsB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,KAAK,CAAC,UAAU,EAAE,uBAAuB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACvD,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;YAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,4DAA4D;QAC5D,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAChC,IAAI,WAAW,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAA0B,CAAC,CAAC;gBAC3E,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,cAAc,CAAC,GAAoB;QAC1C,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,IAAoB;IAC3D,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1E,2EAA2E;YAC3E,yDAAyD;YACzD,8DAA8D;YAC9D,qEAAqE;YACrE,iCAAiC;YACjC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC5B,0CAA0C;YAC5C,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;QACF,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACxC,aAAa,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC"}
|
|
@@ -28,14 +28,18 @@ export interface LocalScanEntry {
|
|
|
28
28
|
/** 该包的 keywords。离线降级路径靠它筛出 aalis 组件——缺了这些包就整批看不见。 */
|
|
29
29
|
keywords?: string[];
|
|
30
30
|
description?: string;
|
|
31
|
+
/** 声明提供的服务({@link declaredProvides}):市场按服务搜靠它 */
|
|
32
|
+
provides: string[];
|
|
31
33
|
/** `dependencies/peer/optional` 的并集**包名**(不含版本区间)。 */
|
|
32
34
|
deps: string[];
|
|
33
35
|
}
|
|
36
|
+
/** package.json 的 `aalis.service.provides` 里的字符串;没声明或写法不对时为空。本地与安装源上的清单同一读法 */
|
|
37
|
+
export declare function declaredProvides(pkg: unknown): string[];
|
|
34
38
|
/**
|
|
35
39
|
* 扫描本地物理存在的包 → `name → {version, deps}`(与 discoverClients 共用 scanDirs/env)。
|
|
36
40
|
* 三用,一次扫盘:① keys 即「本地已装包名」,补市场已装判定(require.resolve 在 pnpm 工作区
|
|
37
41
|
* 从仓库根解析不到未提升的工作区包);② `deps` 供依赖图(谁依赖谁)——**只取依赖名、不看版本
|
|
38
|
-
* 区间**(`workspace:^`/`^1.0.0` 一律按名),故无需 semver;③ `version`/`keywords`/`description` 供市场卡片:
|
|
42
|
+
* 区间**(`workspace:^`/`^1.0.0` 一律按名),故无需 semver;③ `version`/`keywords`/`description`/`provides` 供市场卡片:
|
|
39
43
|
* 工作区包这条路径 require.resolve 走不通,不带 version 就只能退回显示 npm latest;不带
|
|
40
44
|
* keywords 则**离线降级列表整批看不见它们**(toLocalPackages 按 keywords 筛 aalis 组件)。
|
|
41
45
|
* scope 无关(不挑 @aalis)。纯函数便于单测。
|
|
@@ -44,8 +48,8 @@ export declare function collectLocalPackageDeps(scanDirs: string[], env: Pick<Di
|
|
|
44
48
|
/**
|
|
45
49
|
* 从本轮发现结果里挑出**尚未登记**的候选。
|
|
46
50
|
*
|
|
47
|
-
* 前端发现要能重复跑(装完一个 `aalis-interface`
|
|
48
|
-
*
|
|
51
|
+
* 前端发现要能重复跑(装完一个 `aalis-interface` 包后立刻重跑,否则它不出现在服务偏好的
|
|
52
|
+
* 可选项里、必须重启才看得见)。而重复 `fork().provide('webui-client', …)` 会在服务容器里
|
|
49
53
|
* 堆同名重复项 —— 所以幂等是硬要求,不是优化。纯函数,便于单测。
|
|
50
54
|
*/
|
|
51
55
|
export declare function pickFreshClients<T extends {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-discovery.d.ts","sourceRoot":"","sources":["../src/client-discovery.ts"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,qBAAqB;IACrB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACrC,oCAAoC;IACpC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACjC,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,mDAAmD;IACnD,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACpD;AASD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,YAAY,GAAG,eAAe,EAAE,CA2B1G;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC,GAC1E,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"client-discovery.d.ts","sourceRoot":"","sources":["../src/client-discovery.ts"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,qBAAqB;IACrB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACrC,oCAAoC;IACpC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACjC,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,mDAAmD;IACnD,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACpD;AASD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,YAAY,GAAG,eAAe,EAAE,CA2B1G;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sDAAsD;IACtD,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAGvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC,GAC1E,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAkC7B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAGjH"}
|
package/dist/client-discovery.js
CHANGED
|
@@ -39,11 +39,16 @@ export function discoverClients(scanDirs, depIds, env) {
|
|
|
39
39
|
consider(env.resolvePkgJson(id));
|
|
40
40
|
return out.sort((a, b) => a.id.localeCompare(b.id));
|
|
41
41
|
}
|
|
42
|
+
/** package.json 的 `aalis.service.provides` 里的字符串;没声明或写法不对时为空。本地与安装源上的清单同一读法 */
|
|
43
|
+
export function declaredProvides(pkg) {
|
|
44
|
+
const provides = pkg?.aalis?.service?.provides;
|
|
45
|
+
return Array.isArray(provides) ? provides.filter((item) => typeof item === 'string') : [];
|
|
46
|
+
}
|
|
42
47
|
/**
|
|
43
48
|
* 扫描本地物理存在的包 → `name → {version, deps}`(与 discoverClients 共用 scanDirs/env)。
|
|
44
49
|
* 三用,一次扫盘:① keys 即「本地已装包名」,补市场已装判定(require.resolve 在 pnpm 工作区
|
|
45
50
|
* 从仓库根解析不到未提升的工作区包);② `deps` 供依赖图(谁依赖谁)——**只取依赖名、不看版本
|
|
46
|
-
* 区间**(`workspace:^`/`^1.0.0` 一律按名),故无需 semver;③ `version`/`keywords`/`description` 供市场卡片:
|
|
51
|
+
* 区间**(`workspace:^`/`^1.0.0` 一律按名),故无需 semver;③ `version`/`keywords`/`description`/`provides` 供市场卡片:
|
|
47
52
|
* 工作区包这条路径 require.resolve 走不通,不带 version 就只能退回显示 npm latest;不带
|
|
48
53
|
* keywords 则**离线降级列表整批看不见它们**(toLocalPackages 按 keywords 筛 aalis 组件)。
|
|
49
54
|
* scope 无关(不挑 @aalis)。纯函数便于单测。
|
|
@@ -68,6 +73,7 @@ export function collectLocalPackageDeps(scanDirs, env) {
|
|
|
68
73
|
? pkg.keywords.filter((k) => typeof k === 'string')
|
|
69
74
|
: undefined,
|
|
70
75
|
description: typeof pkg.description === 'string' ? pkg.description : undefined,
|
|
76
|
+
provides: declaredProvides(pkg),
|
|
71
77
|
deps: [...deps],
|
|
72
78
|
});
|
|
73
79
|
}
|
|
@@ -77,8 +83,8 @@ export function collectLocalPackageDeps(scanDirs, env) {
|
|
|
77
83
|
/**
|
|
78
84
|
* 从本轮发现结果里挑出**尚未登记**的候选。
|
|
79
85
|
*
|
|
80
|
-
* 前端发现要能重复跑(装完一个 `aalis-interface`
|
|
81
|
-
*
|
|
86
|
+
* 前端发现要能重复跑(装完一个 `aalis-interface` 包后立刻重跑,否则它不出现在服务偏好的
|
|
87
|
+
* 可选项里、必须重启才看得见)。而重复 `fork().provide('webui-client', …)` 会在服务容器里
|
|
82
88
|
* 堆同名重复项 —— 所以幂等是硬要求,不是优化。纯函数,便于单测。
|
|
83
89
|
*/
|
|
84
90
|
export function pickFreshClients(known, discovered) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-discovery.js","sourceRoot":"","sources":["../src/client-discovery.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,yEAAyE;AACzE,iCAAiC;AACjC,8EAA8E;AA2B9E;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,MAAgB,EAAE,GAAiB;IACrF,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,MAAM,QAAQ,GAAG,CAAC,WAA+B,EAAQ,EAAE;QACzD,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO;QACzD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAwB,CAAC;QAC7D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QACrG,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAE,OAAO;QACzD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,KAAK,GACT,CAAC,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC;YACxD,CAAC,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC;QACX,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,kEAAkE;IAClE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACpC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,wDAAwD;IACxD,KAAK,MAAM,EAAE,IAAI,MAAM;QAAE,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1D,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;
|
|
1
|
+
{"version":3,"file":"client-discovery.js","sourceRoot":"","sources":["../src/client-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** 前端切换恢复页的脚本:文档级 CSP 只许同源脚本,由 `/__clients.js` 给出 */
|
|
2
|
+
export declare const CLIENT_SWITCH_SCRIPT = "(function () {\n var SVC = 'webui-client';\n var PREFER = '/api/services/' + SVC + '/prefer';\n var sel = document.getElementById('client');\n var btn = document.getElementById('go');\n var msg = document.getElementById('msg');\n function setMsg(t, err) { msg.textContent = t; msg.className = err ? 'err' : 'ok'; }\n function load() {\n fetch('/api/services', { headers: { Accept: 'application/json' } })\n .then(function (r) {\n if (!r.ok) throw new Error('\u8BFB\u53D6\u670D\u52A1\u5217\u8868\u5931\u8D25\uFF08HTTP ' + r.status + '\uFF09');\n return r.json();\n })\n .then(function (data) {\n var svc = data && data.services && data.services[SVC];\n var providers = (svc && svc.providers) || [];\n if (!providers.length) {\n setMsg('\u672A\u53D1\u73B0\u4EFB\u4F55\u524D\u7AEF\uFF08webui-client provider\uFF09\u3002\u8BF7\u5148\u5B89\u88C5\u4E00\u4E2A aalis.client \u5305\u3002', true);\n btn.disabled = true;\n sel.innerHTML = '';\n return;\n }\n var active = (svc && svc.preferred) || providers[0].contextId;\n sel.innerHTML = '';\n providers.forEach(function (p) {\n var o = document.createElement('option');\n o.value = p.contextId;\n o.textContent = (p.displayName || p.label || p.contextId) + (p.contextId === active ? '\uFF08\u5F53\u524D\uFF09' : '');\n if (p.contextId === active) o.selected = true;\n sel.appendChild(o);\n });\n })\n .catch(function (e) { setMsg(String((e && e.message) || e), true); });\n }\n btn.addEventListener('click', function () {\n var contextId = sel.value;\n if (!contextId) return;\n btn.disabled = true;\n setMsg('\u5207\u6362\u4E2D\u2026', false);\n fetch(PREFER, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ contextId: contextId })\n })\n .then(function (r) {\n if (r.ok) { setMsg('\u5DF2\u5207\u6362\uFF0C\u6B63\u5728\u8DF3\u8F6C\u2026', false); location.href = '/'; return; }\n return r.json().catch(function () { return {}; }).then(function (j) {\n var detail = (j && j.error) || ('HTTP ' + r.status);\n var hint = (r.status === 401 || r.status === 403) ? '\uFF08\u9700\u8981 owner \u6743\u9650\uFF1A\u8BF7\u7528\u4E00\u952E\u767B\u5F55\u94FE\u63A5\u6253\u5F00 WebUI \u540E\u518D\u8BD5\uFF09' : '';\n setMsg('\u5207\u6362\u5931\u8D25\uFF1A' + detail + hint, true);\n btn.disabled = false;\n });\n })\n .catch(function (e) { setMsg('\u5207\u6362\u8BF7\u6C42\u51FA\u9519\uFF1A' + String((e && e.message) || e), true); btn.disabled = false; });\n });\n load();\n})();\n";
|
|
1
3
|
/** 渲染前端切换恢复页的完整 HTML 文档(无运行时入参,数据由页面自身 fetch)。 */
|
|
2
4
|
export declare function renderClientSwitchPage(): string;
|
|
3
5
|
//# sourceMappingURL=client-switch-page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-switch-page.d.ts","sourceRoot":"","sources":["../src/client-switch-page.ts"],"names":[],"mappings":"AAYA,kDAAkD;AAClD,wBAAgB,sBAAsB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"client-switch-page.d.ts","sourceRoot":"","sources":["../src/client-switch-page.ts"],"names":[],"mappings":"AAYA,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,ysFAyDhC,CAAC;AAEF,kDAAkD;AAClD,wBAAgB,sBAAsB,IAAI,MAAM,CAkC/C"}
|
|
@@ -4,45 +4,13 @@
|
|
|
4
4
|
// 前端(如第三方裸前端),就没有切回去的入口(只能改 aalis.config.yaml + 重启)。本页由
|
|
5
5
|
// webui-server 直接托管在 `/__clients`,无论当前活跃前端多裸都可达,是「永不卡死」的恢复入口。
|
|
6
6
|
//
|
|
7
|
-
//
|
|
7
|
+
// 零新增后端逻辑:静态 HTML 加同源的脚本(`/__clients.js`),fetch 复用既有接口(同源 cookie 自动鉴权)——
|
|
8
8
|
// · 列表:GET /api/services (取 webui-client 服务的 providers + preferred)
|
|
9
9
|
// · 切换:POST /api/services/webui-client/prefer (owner 闸,body {contextId})
|
|
10
10
|
// 全局 auth 中间件已要求登录方可到达本路由(未认证 GET 直接回登录页),故本页无需自加 gate;
|
|
11
11
|
// 切换动作仍受既有 owner 闸约束。抽成纯函数仅为便于单测——route 只 res.type('html').send(它)。
|
|
12
|
-
/**
|
|
13
|
-
export function
|
|
14
|
-
return `<!doctype html>
|
|
15
|
-
<html lang="zh-CN">
|
|
16
|
-
<head>
|
|
17
|
-
<meta charset="utf-8" />
|
|
18
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
19
|
-
<title>切换前端 · Aalis</title>
|
|
20
|
-
<style>
|
|
21
|
-
:root { color-scheme: light dark; }
|
|
22
|
-
body { font: 15px/1.6 system-ui, -apple-system, sans-serif; max-width: 32rem; margin: 8vh auto; padding: 0 1.2rem; }
|
|
23
|
-
h1 { font-size: 1.25rem; margin: 0 0 .25rem; }
|
|
24
|
-
p.hint { color: #888; margin: .25rem 0 1.25rem; }
|
|
25
|
-
label { display: block; font-weight: 600; margin-bottom: .4rem; }
|
|
26
|
-
select, button { font: inherit; padding: .55rem .7rem; border-radius: .5rem; }
|
|
27
|
-
select { width: 100%; box-sizing: border-box; }
|
|
28
|
-
button { margin-top: 1rem; cursor: pointer; border: 1px solid currentColor; background: transparent; }
|
|
29
|
-
button:disabled { opacity: .5; cursor: default; }
|
|
30
|
-
#msg { margin-top: 1rem; min-height: 1.4em; }
|
|
31
|
-
#msg.err { color: #c0392b; }
|
|
32
|
-
#msg.ok { color: #2e7d32; }
|
|
33
|
-
code { font-family: ui-monospace, monospace; }
|
|
34
|
-
</style>
|
|
35
|
-
</head>
|
|
36
|
-
<body>
|
|
37
|
-
<h1>切换前端</h1>
|
|
38
|
-
<p class="hint">这是 Aalis 的前端恢复入口,由 webui-server 直接提供、独立于当前前端——即使当前前端没有切换界面,你也能在这里切回去。</p>
|
|
39
|
-
<label for="client">可用前端(webui-client)</label>
|
|
40
|
-
<select id="client"><option>加载中…</option></select>
|
|
41
|
-
<button id="go" type="button">切换并刷新</button>
|
|
42
|
-
<div id="msg"></div>
|
|
43
|
-
<p class="hint">切回原来的前端:在上面选中它,再点「切换并刷新」。</p>
|
|
44
|
-
<script>
|
|
45
|
-
(function () {
|
|
12
|
+
/** 前端切换恢复页的脚本:文档级 CSP 只许同源脚本,由 `/__clients.js` 给出 */
|
|
13
|
+
export const CLIENT_SWITCH_SCRIPT = `(function () {
|
|
46
14
|
var SVC = 'webui-client';
|
|
47
15
|
var PREFER = '/api/services/' + SVC + '/prefer';
|
|
48
16
|
var sel = document.getElementById('client');
|
|
@@ -99,7 +67,40 @@ export function renderClientSwitchPage() {
|
|
|
99
67
|
});
|
|
100
68
|
load();
|
|
101
69
|
})();
|
|
102
|
-
|
|
70
|
+
`;
|
|
71
|
+
/** 渲染前端切换恢复页的完整 HTML 文档(无运行时入参,数据由页面自身 fetch)。 */
|
|
72
|
+
export function renderClientSwitchPage() {
|
|
73
|
+
return `<!doctype html>
|
|
74
|
+
<html lang="zh-CN">
|
|
75
|
+
<head>
|
|
76
|
+
<meta charset="utf-8" />
|
|
77
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
78
|
+
<title>切换前端 · Aalis</title>
|
|
79
|
+
<style>
|
|
80
|
+
:root { color-scheme: light dark; }
|
|
81
|
+
body { font: 15px/1.6 system-ui, -apple-system, sans-serif; max-width: 32rem; margin: 8vh auto; padding: 0 1.2rem; }
|
|
82
|
+
h1 { font-size: 1.25rem; margin: 0 0 .25rem; }
|
|
83
|
+
p.hint { color: #888; margin: .25rem 0 1.25rem; }
|
|
84
|
+
label { display: block; font-weight: 600; margin-bottom: .4rem; }
|
|
85
|
+
select, button { font: inherit; padding: .55rem .7rem; border-radius: .5rem; }
|
|
86
|
+
select { width: 100%; box-sizing: border-box; }
|
|
87
|
+
button { margin-top: 1rem; cursor: pointer; border: 1px solid currentColor; background: transparent; }
|
|
88
|
+
button:disabled { opacity: .5; cursor: default; }
|
|
89
|
+
#msg { margin-top: 1rem; min-height: 1.4em; }
|
|
90
|
+
#msg.err { color: #c0392b; }
|
|
91
|
+
#msg.ok { color: #2e7d32; }
|
|
92
|
+
code { font-family: ui-monospace, monospace; }
|
|
93
|
+
</style>
|
|
94
|
+
</head>
|
|
95
|
+
<body>
|
|
96
|
+
<h1>切换前端</h1>
|
|
97
|
+
<p class="hint">这是 Aalis 的前端恢复入口,由 webui-server 直接提供、独立于当前前端——即使当前前端没有切换界面,你也能在这里切回去。</p>
|
|
98
|
+
<label for="client">可用前端(webui-client)</label>
|
|
99
|
+
<select id="client"><option>加载中…</option></select>
|
|
100
|
+
<button id="go" type="button">切换并刷新</button>
|
|
101
|
+
<div id="msg"></div>
|
|
102
|
+
<p class="hint">切回原来的前端:在上面选中它,再点「切换并刷新」。</p>
|
|
103
|
+
<script src="/__clients.js"></script>
|
|
103
104
|
</body>
|
|
104
105
|
</html>`;
|
|
105
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-switch-page.js","sourceRoot":"","sources":["../src/client-switch-page.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,gDAAgD;AAChD,wDAAwD;AACxD,8DAA8D;AAC9D,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"client-switch-page.js","sourceRoot":"","sources":["../src/client-switch-page.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,gDAAgD;AAChD,wDAAwD;AACxD,8DAA8D;AAC9D,EAAE;AACF,yEAAyE;AACzE,6FAA6F;AAC7F,8EAA8E;AAC9E,wDAAwD;AACxD,oEAAoE;AAEpE,qDAAqD;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDnC,CAAC;AAEF,kDAAkD;AAClD,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgCD,CAAC;AACT,CAAC"}
|
package/dist/gate.d.ts
CHANGED
|
@@ -19,12 +19,12 @@ type GateMiddleware = (req: GateRequest, res: GateResponse, next: () => void) =>
|
|
|
19
19
|
/**
|
|
20
20
|
* REST 路由 owner 闸工厂(单 owner 终态)。
|
|
21
21
|
*
|
|
22
|
-
* 单 token 模式下「持 token ⟺ webui:console ⟺ owner」,故连接级认证(auth.
|
|
22
|
+
* 单 token 模式下「持 token ⟺ webui:console ⟺ owner」,故连接级认证(auth.ts 挂上的认证
|
|
23
23
|
* 校验 token,未认证一律 401)即等价于 owner 鉴权。本闸是 REST 层的显式 owner 复核
|
|
24
|
-
*
|
|
24
|
+
* (防御纵深,与连接级认证同义):身份解析得到即放行,否则 403。
|
|
25
25
|
*
|
|
26
26
|
* 多账户 / 能力委托已剥离,故不再有 per-route capability 与档位裁决——所有需登录的
|
|
27
|
-
* REST 路由统一是 owner-only
|
|
27
|
+
* REST 路由统一是 owner-only。页面/状态等只读路由同样在连接级认证之后,对
|
|
28
28
|
* 单 owner 无区别。
|
|
29
29
|
*/
|
|
30
30
|
export declare function createRouteGate(identify: IdentifyFn): () => GateMiddleware;
|
package/dist/gate.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* REST 路由 owner 闸工厂(单 owner 终态)。
|
|
3
3
|
*
|
|
4
|
-
* 单 token 模式下「持 token ⟺ webui:console ⟺ owner」,故连接级认证(auth.
|
|
4
|
+
* 单 token 模式下「持 token ⟺ webui:console ⟺ owner」,故连接级认证(auth.ts 挂上的认证
|
|
5
5
|
* 校验 token,未认证一律 401)即等价于 owner 鉴权。本闸是 REST 层的显式 owner 复核
|
|
6
|
-
*
|
|
6
|
+
* (防御纵深,与连接级认证同义):身份解析得到即放行,否则 403。
|
|
7
7
|
*
|
|
8
8
|
* 多账户 / 能力委托已剥离,故不再有 per-route capability 与档位裁决——所有需登录的
|
|
9
|
-
* REST 路由统一是 owner-only
|
|
9
|
+
* REST 路由统一是 owner-only。页面/状态等只读路由同样在连接级认证之后,对
|
|
10
10
|
* 单 owner 无区别。
|
|
11
11
|
*/
|
|
12
12
|
export function createRouteGate(identify) {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
import { type PlatformAdapter } from '@aalis/api-platform';
|
|
2
|
-
import type { StorageService } from '@aalis/api-storage';
|
|
3
|
-
/**
|
|
4
|
-
* 会话归属的平台名:取 sessionId 首个 `:` 前的前缀,命中**已注册平台名**才采信,否则 `'webui'`。
|
|
5
|
-
*
|
|
6
|
-
* WebUI 是管理面,订阅的会话可以属于任何平台(`onebot:123`)。它发 `token:request` 时若
|
|
7
|
-
* 一律报 `'webui'`,消费方(plugin-agent)就按 webui 档解析模型与会话配置,把别人的预算
|
|
8
|
-
* 快照算进错的上下文窗口。前缀不认识时才落回 `'webui'`——CLI 的 `cli-default` 这类不带
|
|
9
|
-
* 前缀的会话,以及 webui 自己的会话,都归在这一档。
|
|
10
|
-
*
|
|
11
|
-
* 纯函数:平台名集合由调用方从 `getPlatformNames(platform)` 取(adapter 可热插拔,每次现取)。
|
|
12
|
-
*/
|
|
13
|
-
export declare function resolveSessionPlatform(sessionId: string, known: ReadonlySet<string>): string;
|
|
14
1
|
declare const _default: import("@aalis/core").PluginDefinition<{
|
|
15
2
|
events: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Events, import("@aalis/core").Events>;
|
|
16
3
|
logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
|
|
@@ -18,21 +5,29 @@ declare const _default: import("@aalis/core").PluginDefinition<{
|
|
|
18
5
|
config: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Readonly<Record<string, unknown>>, Readonly<Record<string, unknown>>>;
|
|
19
6
|
provide: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Provide, import("@aalis/core").Provide>;
|
|
20
7
|
services: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Services, import("@aalis/core").Services>;
|
|
21
|
-
hostConfig: import("@aalis/core").OptionalUse<import("@aalis/api-host-config").HostConfig, import("@aalis/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
8
|
+
hostConfig: import("@aalis/core").OptionalUse<import("@aalis/api-host-config").HostConfig, import("@aalis/api-host-config").HostConfig>;
|
|
9
|
+
/** 日志页的历史(/api/logs/*)与 /admin 上的实时推送 */
|
|
10
|
+
logs: import("@aalis/core").OptionalUse<import("@aalis/api-host-logs").HostLogs, import("@aalis/api-host-logs").HostLogs>;
|
|
11
|
+
paths: import("@aalis/core").OptionalUse<import("@aalis/api-host-paths").HostPaths, import("@aalis/api-host-paths").HostPaths>;
|
|
12
|
+
app: import("@aalis/core").OptionalUse<import("@aalis/core").AppService, import("@aalis/core").AppService>;
|
|
13
|
+
plugins: import("@aalis/core").OptionalUse<import("@aalis/core").PluginManagerService, import("@aalis/core").PluginManagerService>;
|
|
14
|
+
source: import("@aalis/core").OptionalUse<import("@aalis/api-plugin-source").PluginSourceService, import("@aalis/api-plugin-source").PluginSourceService>;
|
|
15
|
+
packageManager: import("@aalis/core").OptionalUse<import("@aalis/api-package-manager").PackageManagerService, import("@aalis/api-package-manager").PackageManagerService>;
|
|
16
|
+
storage: import("@aalis/core").OptionalUse<import("@aalis/api-storage").StorageService, import("@aalis/api-storage").BoundStorage>;
|
|
28
17
|
commands: import("@aalis/core").OptionalUse<import("@aalis/api-commands").CommandService, import("@aalis/api-commands").BoundCommands>;
|
|
29
|
-
platform: import("@aalis/core").OptionalUse<PlatformAdapter, import("@aalis/
|
|
30
|
-
process: import("@aalis/core").OptionalUse<import("@aalis/api-process").ProcessService, import("@aalis/
|
|
31
|
-
|
|
18
|
+
platform: import("@aalis/core").OptionalUse<import("@aalis/api-platform").PlatformAdapter, import("@aalis/api-platform").PlatformAdapter>;
|
|
19
|
+
process: import("@aalis/core").OptionalUse<import("@aalis/api-process").ProcessService, import("@aalis/api-process").ProcessService>;
|
|
20
|
+
/** /session 的连接接到它;每条连接到达时现取,不在时关闭连接并写明原因。会话文件的下载请它核验句柄 */
|
|
21
|
+
sessionProtocol: import("@aalis/core").OptionalUse<import("@aalis/api-session-protocol").SessionProtocolService, import("@aalis/api-session-protocol").SessionProtocolService>;
|
|
22
|
+
/** 登记 webui 审批面:/session 连接上的在场上报与应答记在这个登记身份名下。推出未结的审批进「需要处理」 */
|
|
23
|
+
approvals: import("@aalis/core").OptionalUse<import("@aalis/api-approval").ApprovalService, import("@aalis/api-approval").BoundApprovals>;
|
|
24
|
+
/** 会话面板:调用前核会话存在、按会话种类判断适用的页面 */
|
|
25
|
+
sessions: import("@aalis/core").OptionalUse<import("@aalis/api-session-manager").SessionManagerService, import("@aalis/api-session-manager").BoundSessionManager>;
|
|
32
26
|
tools: import("@aalis/core").OptionalUse<import("@aalis/api-tools").ToolService, import("@aalis/api-tools").BoundTools>;
|
|
33
|
-
llm: import("@aalis/core").OptionalUse<import("@aalis/api-llm").LLMModel, import("@aalis/
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
llm: import("@aalis/core").OptionalUse<import("@aalis/api-llm").LLMModel, import("@aalis/api-llm").LLMModel>;
|
|
28
|
+
/** 插件经贡献点 webui:theme 提供的主题(GET /api/themes) */
|
|
29
|
+
contributions: import("@aalis/core").OptionalUse<import("@aalis/api-contributions").ContributionRegistry, import("@aalis/api-contributions").Contributions>;
|
|
30
|
+
archive: import("@aalis/core").OptionalUse<import("@aalis/api-message-archive").MessageArchiveService, import("@aalis/api-message-archive").MessageArchiveService>;
|
|
36
31
|
}>;
|
|
37
32
|
export default _default;
|
|
38
33
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;IA4RE,yCAAyC;;;;;;;;;;;IAYzC,2DAA2D;;IAE3D,iEAAiE;;IAEjE,iCAAiC;;;;IAIjC,gDAAgD;;;;AAOlD,wBAQG"}
|