lightclaw2 0.0.1
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 +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/src/channel.d.ts +11 -0
- package/dist/src/channel.d.ts.map +1 -0
- package/dist/src/channel.js +255 -0
- package/dist/src/channel.js.map +1 -0
- package/dist/src/config.d.ts +29 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +99 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/dedup.d.ts +7 -0
- package/dist/src/dedup.d.ts.map +1 -0
- package/dist/src/dedup.js +52 -0
- package/dist/src/dedup.js.map +1 -0
- package/dist/src/gateway.d.ts +16 -0
- package/dist/src/gateway.d.ts.map +1 -0
- package/dist/src/gateway.js +283 -0
- package/dist/src/gateway.js.map +1 -0
- package/dist/src/inbound.d.ts +18 -0
- package/dist/src/inbound.d.ts.map +1 -0
- package/dist/src/inbound.js +252 -0
- package/dist/src/inbound.js.map +1 -0
- package/dist/src/media.d.ts +12 -0
- package/dist/src/media.d.ts.map +1 -0
- package/dist/src/media.js +87 -0
- package/dist/src/media.js.map +1 -0
- package/dist/src/outbound.d.ts +28 -0
- package/dist/src/outbound.d.ts.map +1 -0
- package/dist/src/outbound.js +172 -0
- package/dist/src/outbound.js.map +1 -0
- package/dist/src/runtime.d.ts +4 -0
- package/dist/src/runtime.d.ts.map +1 -0
- package/dist/src/runtime.js +11 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/session-history.d.ts +88 -0
- package/dist/src/session-history.d.ts.map +1 -0
- package/dist/src/session-history.js +545 -0
- package/dist/src/session-history.js.map +1 -0
- package/dist/src/socket-handlers.d.ts +21 -0
- package/dist/src/socket-handlers.d.ts.map +1 -0
- package/dist/src/socket-handlers.js +120 -0
- package/dist/src/socket-handlers.js.map +1 -0
- package/dist/src/socket-registry.d.ts +53 -0
- package/dist/src/socket-registry.d.ts.map +1 -0
- package/dist/src/socket-registry.js +115 -0
- package/dist/src/socket-registry.js.map +1 -0
- package/dist/src/types.d.ts +100 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +10 -0
- package/dist/src/types.js.map +1 -0
- package/node_modules/@socket.io/component-emitter/LICENSE +24 -0
- package/node_modules/@socket.io/component-emitter/Readme.md +79 -0
- package/node_modules/@socket.io/component-emitter/lib/cjs/index.d.ts +179 -0
- package/node_modules/@socket.io/component-emitter/lib/cjs/index.js +176 -0
- package/node_modules/@socket.io/component-emitter/lib/cjs/package.json +4 -0
- package/node_modules/@socket.io/component-emitter/lib/esm/index.d.ts +179 -0
- package/node_modules/@socket.io/component-emitter/lib/esm/index.js +169 -0
- package/node_modules/@socket.io/component-emitter/lib/esm/package.json +4 -0
- package/node_modules/@socket.io/component-emitter/package.json +28 -0
- package/node_modules/debug/LICENSE +20 -0
- package/node_modules/debug/README.md +481 -0
- package/node_modules/debug/package.json +64 -0
- package/node_modules/debug/src/browser.js +272 -0
- package/node_modules/debug/src/common.js +292 -0
- package/node_modules/debug/src/index.js +10 -0
- package/node_modules/debug/src/node.js +263 -0
- package/node_modules/engine.io-client/LICENSE +22 -0
- package/node_modules/engine.io-client/README.md +331 -0
- package/node_modules/engine.io-client/build/cjs/browser-entrypoint.d.ts +3 -0
- package/node_modules/engine.io-client/build/cjs/browser-entrypoint.js +4 -0
- package/node_modules/engine.io-client/build/cjs/contrib/has-cors.d.ts +1 -0
- package/node_modules/engine.io-client/build/cjs/contrib/has-cors.js +14 -0
- package/node_modules/engine.io-client/build/cjs/contrib/parseqs.d.ts +15 -0
- package/node_modules/engine.io-client/build/cjs/contrib/parseqs.js +38 -0
- package/node_modules/engine.io-client/build/cjs/contrib/parseuri.d.ts +1 -0
- package/node_modules/engine.io-client/build/cjs/contrib/parseuri.js +67 -0
- package/node_modules/engine.io-client/build/cjs/globals.d.ts +4 -0
- package/node_modules/engine.io-client/build/cjs/globals.js +26 -0
- package/node_modules/engine.io-client/build/cjs/globals.node.d.ts +21 -0
- package/node_modules/engine.io-client/build/cjs/globals.node.js +97 -0
- package/node_modules/engine.io-client/build/cjs/index.d.ts +15 -0
- package/node_modules/engine.io-client/build/cjs/index.js +32 -0
- package/node_modules/engine.io-client/build/cjs/package.json +10 -0
- package/node_modules/engine.io-client/build/cjs/socket.d.ts +482 -0
- package/node_modules/engine.io-client/build/cjs/socket.js +765 -0
- package/node_modules/engine.io-client/build/cjs/transport.d.ts +106 -0
- package/node_modules/engine.io-client/build/cjs/transport.js +153 -0
- package/node_modules/engine.io-client/build/cjs/transports/index.d.ts +8 -0
- package/node_modules/engine.io-client/build/cjs/transports/index.js +11 -0
- package/node_modules/engine.io-client/build/cjs/transports/polling-fetch.d.ts +15 -0
- package/node_modules/engine.io-client/build/cjs/transports/polling-fetch.js +60 -0
- package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.d.ts +108 -0
- package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.js +285 -0
- package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.node.d.ts +11 -0
- package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.node.js +44 -0
- package/node_modules/engine.io-client/build/cjs/transports/polling.d.ts +52 -0
- package/node_modules/engine.io-client/build/cjs/transports/polling.js +165 -0
- package/node_modules/engine.io-client/build/cjs/transports/websocket.d.ts +36 -0
- package/node_modules/engine.io-client/build/cjs/transports/websocket.js +136 -0
- package/node_modules/engine.io-client/build/cjs/transports/websocket.node.d.ts +14 -0
- package/node_modules/engine.io-client/build/cjs/transports/websocket.node.js +68 -0
- package/node_modules/engine.io-client/build/cjs/transports/webtransport.d.ts +18 -0
- package/node_modules/engine.io-client/build/cjs/transports/webtransport.js +94 -0
- package/node_modules/engine.io-client/build/cjs/util.d.ts +7 -0
- package/node_modules/engine.io-client/build/cjs/util.js +65 -0
- package/node_modules/engine.io-client/build/esm/browser-entrypoint.d.ts +3 -0
- package/node_modules/engine.io-client/build/esm/browser-entrypoint.js +2 -0
- package/node_modules/engine.io-client/build/esm/contrib/has-cors.d.ts +1 -0
- package/node_modules/engine.io-client/build/esm/contrib/has-cors.js +11 -0
- package/node_modules/engine.io-client/build/esm/contrib/parseqs.d.ts +15 -0
- package/node_modules/engine.io-client/build/esm/contrib/parseqs.js +34 -0
- package/node_modules/engine.io-client/build/esm/contrib/parseuri.d.ts +1 -0
- package/node_modules/engine.io-client/build/esm/contrib/parseuri.js +64 -0
- package/node_modules/engine.io-client/build/esm/globals.d.ts +4 -0
- package/node_modules/engine.io-client/build/esm/globals.js +22 -0
- package/node_modules/engine.io-client/build/esm/globals.node.d.ts +21 -0
- package/node_modules/engine.io-client/build/esm/globals.node.js +91 -0
- package/node_modules/engine.io-client/build/esm/index.d.ts +15 -0
- package/node_modules/engine.io-client/build/esm/index.js +15 -0
- package/node_modules/engine.io-client/build/esm/package.json +10 -0
- package/node_modules/engine.io-client/build/esm/socket.d.ts +482 -0
- package/node_modules/engine.io-client/build/esm/socket.js +727 -0
- package/node_modules/engine.io-client/build/esm/transport.d.ts +106 -0
- package/node_modules/engine.io-client/build/esm/transport.js +142 -0
- package/node_modules/engine.io-client/build/esm/transports/index.d.ts +8 -0
- package/node_modules/engine.io-client/build/esm/transports/index.js +8 -0
- package/node_modules/engine.io-client/build/esm/transports/polling-fetch.d.ts +15 -0
- package/node_modules/engine.io-client/build/esm/transports/polling-fetch.js +56 -0
- package/node_modules/engine.io-client/build/esm/transports/polling-xhr.d.ts +108 -0
- package/node_modules/engine.io-client/build/esm/transports/polling-xhr.js +271 -0
- package/node_modules/engine.io-client/build/esm/transports/polling-xhr.node.d.ts +11 -0
- package/node_modules/engine.io-client/build/esm/transports/polling-xhr.node.js +17 -0
- package/node_modules/engine.io-client/build/esm/transports/polling.d.ts +52 -0
- package/node_modules/engine.io-client/build/esm/transports/polling.js +145 -0
- package/node_modules/engine.io-client/build/esm/transports/websocket.d.ts +36 -0
- package/node_modules/engine.io-client/build/esm/transports/websocket.js +125 -0
- package/node_modules/engine.io-client/build/esm/transports/websocket.node.d.ts +14 -0
- package/node_modules/engine.io-client/build/esm/transports/websocket.node.js +41 -0
- package/node_modules/engine.io-client/build/esm/transports/webtransport.d.ts +18 -0
- package/node_modules/engine.io-client/build/esm/transports/webtransport.js +80 -0
- package/node_modules/engine.io-client/build/esm/util.d.ts +7 -0
- package/node_modules/engine.io-client/build/esm/util.js +59 -0
- package/node_modules/engine.io-client/build/esm-debug/browser-entrypoint.d.ts +3 -0
- package/node_modules/engine.io-client/build/esm-debug/browser-entrypoint.js +2 -0
- package/node_modules/engine.io-client/build/esm-debug/contrib/has-cors.d.ts +1 -0
- package/node_modules/engine.io-client/build/esm-debug/contrib/has-cors.js +11 -0
- package/node_modules/engine.io-client/build/esm-debug/contrib/parseqs.d.ts +15 -0
- package/node_modules/engine.io-client/build/esm-debug/contrib/parseqs.js +34 -0
- package/node_modules/engine.io-client/build/esm-debug/contrib/parseuri.d.ts +1 -0
- package/node_modules/engine.io-client/build/esm-debug/contrib/parseuri.js +64 -0
- package/node_modules/engine.io-client/build/esm-debug/globals.d.ts +4 -0
- package/node_modules/engine.io-client/build/esm-debug/globals.js +22 -0
- package/node_modules/engine.io-client/build/esm-debug/globals.node.d.ts +21 -0
- package/node_modules/engine.io-client/build/esm-debug/globals.node.js +91 -0
- package/node_modules/engine.io-client/build/esm-debug/index.d.ts +15 -0
- package/node_modules/engine.io-client/build/esm-debug/index.js +15 -0
- package/node_modules/engine.io-client/build/esm-debug/package.json +10 -0
- package/node_modules/engine.io-client/build/esm-debug/socket.d.ts +482 -0
- package/node_modules/engine.io-client/build/esm-debug/socket.js +756 -0
- package/node_modules/engine.io-client/build/esm-debug/transport.d.ts +106 -0
- package/node_modules/engine.io-client/build/esm-debug/transport.js +145 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/index.d.ts +8 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/index.js +8 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-fetch.d.ts +15 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-fetch.js +56 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.d.ts +108 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.js +276 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.d.ts +11 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.js +17 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/polling.d.ts +52 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/polling.js +158 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/websocket.d.ts +36 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/websocket.js +128 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/websocket.node.d.ts +14 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/websocket.node.js +41 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/webtransport.d.ts +18 -0
- package/node_modules/engine.io-client/build/esm-debug/transports/webtransport.js +87 -0
- package/node_modules/engine.io-client/build/esm-debug/util.d.ts +7 -0
- package/node_modules/engine.io-client/build/esm-debug/util.js +59 -0
- package/node_modules/engine.io-client/dist/engine.io.esm.min.js +7 -0
- package/node_modules/engine.io-client/dist/engine.io.esm.min.js.map +1 -0
- package/node_modules/engine.io-client/dist/engine.io.js +3064 -0
- package/node_modules/engine.io-client/dist/engine.io.js.map +1 -0
- package/node_modules/engine.io-client/dist/engine.io.min.js +7 -0
- package/node_modules/engine.io-client/dist/engine.io.min.js.map +1 -0
- package/node_modules/engine.io-client/node_modules/ws/LICENSE +20 -0
- package/node_modules/engine.io-client/node_modules/ws/README.md +548 -0
- package/node_modules/engine.io-client/node_modules/ws/browser.js +8 -0
- package/node_modules/engine.io-client/node_modules/ws/index.js +13 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js +131 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/constants.js +18 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/event-target.js +292 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/extension.js +203 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/limiter.js +55 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js +528 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/receiver.js +706 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/sender.js +602 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/stream.js +161 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/subprotocol.js +62 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/validation.js +152 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js +550 -0
- package/node_modules/engine.io-client/node_modules/ws/lib/websocket.js +1388 -0
- package/node_modules/engine.io-client/node_modules/ws/package.json +69 -0
- package/node_modules/engine.io-client/node_modules/ws/wrapper.mjs +8 -0
- package/node_modules/engine.io-client/package.json +95 -0
- package/node_modules/engine.io-parser/LICENSE +22 -0
- package/node_modules/engine.io-parser/Readme.md +158 -0
- package/node_modules/engine.io-parser/build/cjs/commons.d.ts +14 -0
- package/node_modules/engine.io-parser/build/cjs/commons.js +19 -0
- package/node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.d.ts +2 -0
- package/node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js +48 -0
- package/node_modules/engine.io-parser/build/cjs/decodePacket.browser.d.ts +2 -0
- package/node_modules/engine.io-parser/build/cjs/decodePacket.browser.js +66 -0
- package/node_modules/engine.io-parser/build/cjs/decodePacket.d.ts +2 -0
- package/node_modules/engine.io-parser/build/cjs/decodePacket.js +59 -0
- package/node_modules/engine.io-parser/build/cjs/encodePacket.browser.d.ts +4 -0
- package/node_modules/engine.io-parser/build/cjs/encodePacket.browser.js +72 -0
- package/node_modules/engine.io-parser/build/cjs/encodePacket.d.ts +3 -0
- package/node_modules/engine.io-parser/build/cjs/encodePacket.js +38 -0
- package/node_modules/engine.io-parser/build/cjs/index.d.ts +9 -0
- package/node_modules/engine.io-parser/build/cjs/index.js +164 -0
- package/node_modules/engine.io-parser/build/cjs/package.json +8 -0
- package/node_modules/engine.io-parser/build/esm/commons.d.ts +14 -0
- package/node_modules/engine.io-parser/build/esm/commons.js +14 -0
- package/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.d.ts +2 -0
- package/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js +43 -0
- package/node_modules/engine.io-parser/build/esm/decodePacket.browser.d.ts +2 -0
- package/node_modules/engine.io-parser/build/esm/decodePacket.browser.js +62 -0
- package/node_modules/engine.io-parser/build/esm/decodePacket.d.ts +2 -0
- package/node_modules/engine.io-parser/build/esm/decodePacket.js +55 -0
- package/node_modules/engine.io-parser/build/esm/encodePacket.browser.d.ts +4 -0
- package/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +68 -0
- package/node_modules/engine.io-parser/build/esm/encodePacket.d.ts +3 -0
- package/node_modules/engine.io-parser/build/esm/encodePacket.js +33 -0
- package/node_modules/engine.io-parser/build/esm/index.d.ts +9 -0
- package/node_modules/engine.io-parser/build/esm/index.js +156 -0
- package/node_modules/engine.io-parser/build/esm/package.json +8 -0
- package/node_modules/engine.io-parser/package.json +46 -0
- package/node_modules/ms/index.js +162 -0
- package/node_modules/ms/license.md +21 -0
- package/node_modules/ms/package.json +38 -0
- package/node_modules/ms/readme.md +59 -0
- package/node_modules/socket.io-client/LICENSE +21 -0
- package/node_modules/socket.io-client/README.md +29 -0
- package/node_modules/socket.io-client/build/cjs/browser-entrypoint.d.ts +2 -0
- package/node_modules/socket.io-client/build/cjs/browser-entrypoint.js +4 -0
- package/node_modules/socket.io-client/build/cjs/contrib/backo2.d.ts +12 -0
- package/node_modules/socket.io-client/build/cjs/contrib/backo2.js +69 -0
- package/node_modules/socket.io-client/build/cjs/index.d.ts +29 -0
- package/node_modules/socket.io-client/build/cjs/index.js +76 -0
- package/node_modules/socket.io-client/build/cjs/manager.d.ts +295 -0
- package/node_modules/socket.io-client/build/cjs/manager.js +416 -0
- package/node_modules/socket.io-client/build/cjs/on.d.ts +2 -0
- package/node_modules/socket.io-client/build/cjs/on.js +9 -0
- package/node_modules/socket.io-client/build/cjs/socket.d.ts +593 -0
- package/node_modules/socket.io-client/build/cjs/socket.js +909 -0
- package/node_modules/socket.io-client/build/cjs/url.d.ts +33 -0
- package/node_modules/socket.io-client/build/cjs/url.js +69 -0
- package/node_modules/socket.io-client/build/esm/browser-entrypoint.d.ts +2 -0
- package/node_modules/socket.io-client/build/esm/browser-entrypoint.js +2 -0
- package/node_modules/socket.io-client/build/esm/contrib/backo2.d.ts +12 -0
- package/node_modules/socket.io-client/build/esm/contrib/backo2.js +66 -0
- package/node_modules/socket.io-client/build/esm/index.d.ts +29 -0
- package/node_modules/socket.io-client/build/esm/index.js +58 -0
- package/node_modules/socket.io-client/build/esm/manager.d.ts +295 -0
- package/node_modules/socket.io-client/build/esm/manager.js +367 -0
- package/node_modules/socket.io-client/build/esm/on.d.ts +2 -0
- package/node_modules/socket.io-client/build/esm/on.js +6 -0
- package/node_modules/socket.io-client/build/esm/package.json +5 -0
- package/node_modules/socket.io-client/build/esm/socket.d.ts +593 -0
- package/node_modules/socket.io-client/build/esm/socket.js +880 -0
- package/node_modules/socket.io-client/build/esm/url.d.ts +33 -0
- package/node_modules/socket.io-client/build/esm/url.js +59 -0
- package/node_modules/socket.io-client/build/esm-debug/browser-entrypoint.d.ts +2 -0
- package/node_modules/socket.io-client/build/esm-debug/browser-entrypoint.js +2 -0
- package/node_modules/socket.io-client/build/esm-debug/contrib/backo2.d.ts +12 -0
- package/node_modules/socket.io-client/build/esm-debug/contrib/backo2.js +66 -0
- package/node_modules/socket.io-client/build/esm-debug/index.d.ts +29 -0
- package/node_modules/socket.io-client/build/esm-debug/index.js +62 -0
- package/node_modules/socket.io-client/build/esm-debug/manager.d.ts +295 -0
- package/node_modules/socket.io-client/build/esm-debug/manager.js +386 -0
- package/node_modules/socket.io-client/build/esm-debug/on.d.ts +2 -0
- package/node_modules/socket.io-client/build/esm-debug/on.js +6 -0
- package/node_modules/socket.io-client/build/esm-debug/package.json +5 -0
- package/node_modules/socket.io-client/build/esm-debug/socket.d.ts +593 -0
- package/node_modules/socket.io-client/build/esm-debug/socket.js +902 -0
- package/node_modules/socket.io-client/build/esm-debug/url.d.ts +33 -0
- package/node_modules/socket.io-client/build/esm-debug/url.js +63 -0
- package/node_modules/socket.io-client/dist/socket.io.esm.min.js +7 -0
- package/node_modules/socket.io-client/dist/socket.io.esm.min.js.map +1 -0
- package/node_modules/socket.io-client/dist/socket.io.js +4955 -0
- package/node_modules/socket.io-client/dist/socket.io.js.map +1 -0
- package/node_modules/socket.io-client/dist/socket.io.min.js +7 -0
- package/node_modules/socket.io-client/dist/socket.io.min.js.map +1 -0
- package/node_modules/socket.io-client/dist/socket.io.msgpack.min.js +7 -0
- package/node_modules/socket.io-client/dist/socket.io.msgpack.min.js.map +1 -0
- package/node_modules/socket.io-client/package.json +101 -0
- package/node_modules/socket.io-parser/LICENSE +20 -0
- package/node_modules/socket.io-parser/Readme.md +81 -0
- package/node_modules/socket.io-parser/build/cjs/binary.d.ts +20 -0
- package/node_modules/socket.io-parser/build/cjs/binary.js +87 -0
- package/node_modules/socket.io-parser/build/cjs/index.d.ts +91 -0
- package/node_modules/socket.io-parser/build/cjs/index.js +359 -0
- package/node_modules/socket.io-parser/build/cjs/is-binary.d.ts +7 -0
- package/node_modules/socket.io-parser/build/cjs/is-binary.js +54 -0
- package/node_modules/socket.io-parser/build/cjs/package.json +3 -0
- package/node_modules/socket.io-parser/build/esm/binary.d.ts +20 -0
- package/node_modules/socket.io-parser/build/esm/binary.js +83 -0
- package/node_modules/socket.io-parser/build/esm/index.d.ts +91 -0
- package/node_modules/socket.io-parser/build/esm/index.js +348 -0
- package/node_modules/socket.io-parser/build/esm/is-binary.d.ts +7 -0
- package/node_modules/socket.io-parser/build/esm/is-binary.js +50 -0
- package/node_modules/socket.io-parser/build/esm/package.json +3 -0
- package/node_modules/socket.io-parser/build/esm-debug/binary.d.ts +20 -0
- package/node_modules/socket.io-parser/build/esm-debug/binary.js +83 -0
- package/node_modules/socket.io-parser/build/esm-debug/index.d.ts +91 -0
- package/node_modules/socket.io-parser/build/esm-debug/index.js +353 -0
- package/node_modules/socket.io-parser/build/esm-debug/is-binary.d.ts +7 -0
- package/node_modules/socket.io-parser/build/esm-debug/is-binary.js +50 -0
- package/node_modules/socket.io-parser/build/esm-debug/package.json +3 -0
- package/node_modules/socket.io-parser/package.json +44 -0
- package/node_modules/xmlhttprequest-ssl/LICENSE +22 -0
- package/node_modules/xmlhttprequest-ssl/README.md +67 -0
- package/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js +689 -0
- package/node_modules/xmlhttprequest-ssl/package.json +40 -0
- package/openclaw.plugin.json +17 -0
- package/package.json +61 -0
- package/skills/lightclaw-cron/SKILL.md +381 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LightClaw — Socket.IO 事件处理器
|
|
3
|
+
*
|
|
4
|
+
* 将 socket 事件监听(message:private、history:request、sessions:request)
|
|
5
|
+
* 从 gateway 主逻辑中解耦。
|
|
6
|
+
*/
|
|
7
|
+
import { CHANNEL_KEY } from "./config.js";
|
|
8
|
+
import { isDuplicate, isHistoryRequestThrottled, generateMsgId } from "./dedup.js";
|
|
9
|
+
import { getAssistantRuntime } from "./runtime.js";
|
|
10
|
+
import { readSessionHistoryTail, listSessions } from "./session-history.js";
|
|
11
|
+
/**
|
|
12
|
+
* 绑定所有 Socket.IO 事件监听器
|
|
13
|
+
*/
|
|
14
|
+
export function bindSocketHandlers(socket, deps) {
|
|
15
|
+
const { account, botClientId, log, enqueueMessage, onEvent } = deps;
|
|
16
|
+
// ---- 接收用户消息 ----
|
|
17
|
+
socket.on("message:private", (data) => {
|
|
18
|
+
// 回环防御:过滤自身发出的消息
|
|
19
|
+
if (data.from === botClientId)
|
|
20
|
+
return;
|
|
21
|
+
// 跳过控制消息(typing / stream 信号),只处理真实用户消息
|
|
22
|
+
if (data.kind && data.kind !== "text")
|
|
23
|
+
return;
|
|
24
|
+
// 无内容跳过
|
|
25
|
+
const hasContent = data.content?.trim();
|
|
26
|
+
const hasFiles = data.files && data.files.length > 0;
|
|
27
|
+
if (!hasContent && !hasFiles)
|
|
28
|
+
return;
|
|
29
|
+
// 去重
|
|
30
|
+
if (isDuplicate(data.msgId))
|
|
31
|
+
return;
|
|
32
|
+
// 通知框架收到入站事件(更新 lastEventAt,防止 stale-socket 误判)
|
|
33
|
+
onEvent?.();
|
|
34
|
+
log?.info(`[${CHANNEL_KEY}] Message from ${data.from}: "${(data.content || "").slice(0, 60)}" files=${data.files?.length ?? 0}`);
|
|
35
|
+
enqueueMessage({
|
|
36
|
+
senderId: data.from,
|
|
37
|
+
text: data.content || "",
|
|
38
|
+
messageId: data.msgId,
|
|
39
|
+
files: data.files ?? [],
|
|
40
|
+
timestamp: data.timestamp,
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
// ---- 历史消息请求 ----
|
|
44
|
+
socket.on("message:history:request", (data) => {
|
|
45
|
+
if (!data?.from) {
|
|
46
|
+
log?.warn(`[${CHANNEL_KEY}] History request missing userId, ignoring`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// 回环防御:忽略 bot 自身发出的请求
|
|
50
|
+
if (data.from === botClientId)
|
|
51
|
+
return;
|
|
52
|
+
// 去重:如果有 msgId,走消息级去重
|
|
53
|
+
if (data.msgId && isDuplicate(data.msgId)) {
|
|
54
|
+
log?.warn(`[${CHANNEL_KEY}] Duplicate history request (msgId), ignoring`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// 节流:同一用户在短时间内只处理一次 history 请求
|
|
58
|
+
if (isHistoryRequestThrottled(data.from)) {
|
|
59
|
+
log?.warn(`[${CHANNEL_KEY}] Throttled history request from ${data.from}, ignoring`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// 通知框架收到入站事件(更新 lastEventAt,防止 stale-socket 误判)
|
|
63
|
+
onEvent?.();
|
|
64
|
+
try {
|
|
65
|
+
const pluginRuntime = getAssistantRuntime();
|
|
66
|
+
const currentCfg = pluginRuntime.config.loadConfig();
|
|
67
|
+
const route = pluginRuntime.channel.routing.resolveAgentRoute({
|
|
68
|
+
cfg: currentCfg,
|
|
69
|
+
channel: CHANNEL_KEY,
|
|
70
|
+
accountId: account.accountId,
|
|
71
|
+
peer: { kind: "direct", id: data.from },
|
|
72
|
+
});
|
|
73
|
+
const sessionKey = route?.sessionKey ?? `${CHANNEL_KEY}:dm:${data.from}`;
|
|
74
|
+
const messages = readSessionHistoryTail(sessionKey, {
|
|
75
|
+
limit: data.limit ?? 100,
|
|
76
|
+
chatOnly: data.chatOnly ?? true,
|
|
77
|
+
});
|
|
78
|
+
log?.info(`[${CHANNEL_KEY}] History request: userId=${data.from} sessionKey=${sessionKey} found=${messages.length}。messages:${JSON.stringify(messages)}`);
|
|
79
|
+
socket.emit("message:history:response", {
|
|
80
|
+
msgId: generateMsgId(),
|
|
81
|
+
from: botClientId,
|
|
82
|
+
to: data.from,
|
|
83
|
+
sessionKey,
|
|
84
|
+
messages: messages.filter(msg => !!msg.content.trim()),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
log?.error(`[${CHANNEL_KEY}] History request error: ${err}`);
|
|
89
|
+
socket.emit("message:history:response", {
|
|
90
|
+
msgId: generateMsgId(),
|
|
91
|
+
from: botClientId,
|
|
92
|
+
to: data.from,
|
|
93
|
+
sessionKey: "",
|
|
94
|
+
messages: [],
|
|
95
|
+
error: err instanceof Error ? err.message : String(err),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// ---- 会话列表请求 ----
|
|
100
|
+
socket.on("sessions:request", (data) => {
|
|
101
|
+
// 通知框架收到入站事件(更新 lastEventAt,防止 stale-socket 误判)
|
|
102
|
+
onEvent?.();
|
|
103
|
+
try {
|
|
104
|
+
const sessions = listSessions();
|
|
105
|
+
socket.emit("sessions:response", {
|
|
106
|
+
requestId: data.requestId,
|
|
107
|
+
sessions,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
log?.error(`[${CHANNEL_KEY}] Sessions list error: ${err}`);
|
|
112
|
+
socket.emit("sessions:response", {
|
|
113
|
+
requestId: data.requestId,
|
|
114
|
+
sessions: [],
|
|
115
|
+
error: err instanceof Error ? err.message : String(err),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=socket-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-handlers.js","sourceRoot":"","sources":["../../src/socket-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LightClaw — Socket 注册表
|
|
3
|
+
*
|
|
4
|
+
* 让 gateway 启动时注册 socket 实例,
|
|
5
|
+
* outbound 在需要发送消息时可以通过 WS 连接直接发送,
|
|
6
|
+
* 无需走 REST API。
|
|
7
|
+
*
|
|
8
|
+
* 断线缓冲:
|
|
9
|
+
* 当 socket 暂时断开(Socket.IO 自动重连中)时,outbound 消息
|
|
10
|
+
* 会被缓冲在 pendingMessages 队列中,重连后自动 flush 发送。
|
|
11
|
+
* 仅在 gateway 彻底销毁(cleanup)时才删除 entry。
|
|
12
|
+
*/
|
|
13
|
+
import type { Socket } from "socket.io-client";
|
|
14
|
+
import type { PrivateMessageData } from "./types.js";
|
|
15
|
+
interface SocketEntry {
|
|
16
|
+
socket: Socket;
|
|
17
|
+
botClientId: string;
|
|
18
|
+
/** 断线期间缓冲的待发消息 */
|
|
19
|
+
pendingMessages: PrivateMessageData[];
|
|
20
|
+
}
|
|
21
|
+
/** 注册 socket(gateway 首次连接时调用) */
|
|
22
|
+
export declare function registerSocket(accountId: string, socket: Socket, botClientId: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* 注销 socket(gateway 彻底销毁时调用)。
|
|
25
|
+
* 注意:普通断线重连不应调用此函数,只在 cleanup 时调用。
|
|
26
|
+
*/
|
|
27
|
+
export declare function unregisterSocket(accountId: string): void;
|
|
28
|
+
/** 获取可用的 socket(仅在 connected 时返回) */
|
|
29
|
+
export declare function getSocket(accountId: string): Pick<SocketEntry, "socket" | "botClientId"> | undefined;
|
|
30
|
+
/** 检查 account 是否有注册的 entry(不管是否 connected) */
|
|
31
|
+
export declare function hasEntry(accountId: string): boolean;
|
|
32
|
+
/** 获取 botClientId(不管 socket 是否 connected) */
|
|
33
|
+
export declare function getBotClientId(accountId: string): string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* 缓冲一条消息(socket 断开期间由 outbound 调用)。
|
|
36
|
+
* 返回 true 表示成功缓冲,false 表示该 account 没有注册的 entry。
|
|
37
|
+
*/
|
|
38
|
+
export declare function bufferMessage(accountId: string, message: PrivateMessageData): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* flush 所有缓冲消息(重连成功后由 gateway 调用)。
|
|
41
|
+
* 返回发送成功 / 失败的计数。
|
|
42
|
+
*/
|
|
43
|
+
export declare function flushPendingMessages(accountId: string, log?: {
|
|
44
|
+
info: (msg: string) => void;
|
|
45
|
+
warn: (msg: string) => void;
|
|
46
|
+
}): {
|
|
47
|
+
sent: number;
|
|
48
|
+
failed: number;
|
|
49
|
+
};
|
|
50
|
+
/** 获取缓冲队列长度(调试/监控用) */
|
|
51
|
+
export declare function getPendingCount(accountId: string): number;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=socket-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-registry.d.ts","sourceRoot":"","sources":["../../src/socket-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAarD,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,eAAe,EAAE,kBAAkB,EAAE,CAAC;CACvC;AASD,iCAAiC;AACjC,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAS3F;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAExD;AAMD,qCAAqC;AACrC,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,aAAa,CAAC,GAAG,SAAS,CAIpG;AAED,8CAA8C;AAC9C,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpE;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAUrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA8BlC;AAED,uBAAuB;AACvB,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LightClaw — Socket 注册表
|
|
3
|
+
*
|
|
4
|
+
* 让 gateway 启动时注册 socket 实例,
|
|
5
|
+
* outbound 在需要发送消息时可以通过 WS 连接直接发送,
|
|
6
|
+
* 无需走 REST API。
|
|
7
|
+
*
|
|
8
|
+
* 断线缓冲:
|
|
9
|
+
* 当 socket 暂时断开(Socket.IO 自动重连中)时,outbound 消息
|
|
10
|
+
* 会被缓冲在 pendingMessages 队列中,重连后自动 flush 发送。
|
|
11
|
+
* 仅在 gateway 彻底销毁(cleanup)时才删除 entry。
|
|
12
|
+
*/
|
|
13
|
+
// ============================================================
|
|
14
|
+
// 常量
|
|
15
|
+
// ============================================================
|
|
16
|
+
/** 每个 account 最大缓冲消息数 */
|
|
17
|
+
const MAX_PENDING_MESSAGES = 200;
|
|
18
|
+
/** accountId → SocketEntry */
|
|
19
|
+
const registry = new Map();
|
|
20
|
+
// ============================================================
|
|
21
|
+
// 注册 / 注销
|
|
22
|
+
// ============================================================
|
|
23
|
+
/** 注册 socket(gateway 首次连接时调用) */
|
|
24
|
+
export function registerSocket(accountId, socket, botClientId) {
|
|
25
|
+
const existing = registry.get(accountId);
|
|
26
|
+
if (existing) {
|
|
27
|
+
// 重连场景:更新 socket 引用,保留 pending 队列
|
|
28
|
+
existing.socket = socket;
|
|
29
|
+
existing.botClientId = botClientId;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
registry.set(accountId, { socket, botClientId, pendingMessages: [] });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 注销 socket(gateway 彻底销毁时调用)。
|
|
37
|
+
* 注意:普通断线重连不应调用此函数,只在 cleanup 时调用。
|
|
38
|
+
*/
|
|
39
|
+
export function unregisterSocket(accountId) {
|
|
40
|
+
registry.delete(accountId);
|
|
41
|
+
}
|
|
42
|
+
// ============================================================
|
|
43
|
+
// 查询
|
|
44
|
+
// ============================================================
|
|
45
|
+
/** 获取可用的 socket(仅在 connected 时返回) */
|
|
46
|
+
export function getSocket(accountId) {
|
|
47
|
+
const entry = registry.get(accountId);
|
|
48
|
+
if (entry && entry.socket.connected)
|
|
49
|
+
return entry;
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
/** 检查 account 是否有注册的 entry(不管是否 connected) */
|
|
53
|
+
export function hasEntry(accountId) {
|
|
54
|
+
return registry.has(accountId);
|
|
55
|
+
}
|
|
56
|
+
/** 获取 botClientId(不管 socket 是否 connected) */
|
|
57
|
+
export function getBotClientId(accountId) {
|
|
58
|
+
return registry.get(accountId)?.botClientId;
|
|
59
|
+
}
|
|
60
|
+
// ============================================================
|
|
61
|
+
// 断线缓冲
|
|
62
|
+
// ============================================================
|
|
63
|
+
/**
|
|
64
|
+
* 缓冲一条消息(socket 断开期间由 outbound 调用)。
|
|
65
|
+
* 返回 true 表示成功缓冲,false 表示该 account 没有注册的 entry。
|
|
66
|
+
*/
|
|
67
|
+
export function bufferMessage(accountId, message) {
|
|
68
|
+
const entry = registry.get(accountId);
|
|
69
|
+
if (!entry)
|
|
70
|
+
return false;
|
|
71
|
+
if (entry.pendingMessages.length >= MAX_PENDING_MESSAGES) {
|
|
72
|
+
// 队列满了,丢弃最早的消息
|
|
73
|
+
entry.pendingMessages.shift();
|
|
74
|
+
}
|
|
75
|
+
entry.pendingMessages.push(message);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* flush 所有缓冲消息(重连成功后由 gateway 调用)。
|
|
80
|
+
* 返回发送成功 / 失败的计数。
|
|
81
|
+
*/
|
|
82
|
+
export function flushPendingMessages(accountId, log) {
|
|
83
|
+
const entry = registry.get(accountId);
|
|
84
|
+
if (!entry)
|
|
85
|
+
return { sent: 0, failed: 0 };
|
|
86
|
+
const pending = entry.pendingMessages.splice(0); // 取出全部并清空
|
|
87
|
+
if (pending.length === 0)
|
|
88
|
+
return { sent: 0, failed: 0 };
|
|
89
|
+
let sent = 0;
|
|
90
|
+
let failed = 0;
|
|
91
|
+
for (const msg of pending) {
|
|
92
|
+
if (!entry.socket.connected) {
|
|
93
|
+
// socket 又断了,把剩余消息放回去
|
|
94
|
+
entry.pendingMessages.unshift(...pending.slice(sent + failed));
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
entry.socket.emit("message:private", msg);
|
|
99
|
+
sent++;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
failed++;
|
|
103
|
+
log?.warn(`[socket-registry] Failed to flush buffered message: msgId=${msg.msgId}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (sent > 0 || failed > 0) {
|
|
107
|
+
log?.info(`[socket-registry] Flushed pending messages: sent=${sent}, failed=${failed}`);
|
|
108
|
+
}
|
|
109
|
+
return { sent, failed };
|
|
110
|
+
}
|
|
111
|
+
/** 获取缓冲队列长度(调试/监控用) */
|
|
112
|
+
export function getPendingCount(accountId) {
|
|
113
|
+
return registry.get(accountId)?.pendingMessages.length ?? 0;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=socket-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-registry.js","sourceRoot":"","sources":["../../src/socket-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LightClaw OpenClaw Channel Plugin — 类型定义
|
|
3
|
+
*
|
|
4
|
+
* 用户实际消息格式:
|
|
5
|
+
* { msgId, from, to, content, files, timestamp }
|
|
6
|
+
*
|
|
7
|
+
* files 格式为 FileAttachment[],每个文件包含 name, mimeType, bytes(data URL)。
|
|
8
|
+
*/
|
|
9
|
+
/** 用户上传的文件(files[] 数组中的元素) */
|
|
10
|
+
export interface FileAttachment {
|
|
11
|
+
/** 文件名 */
|
|
12
|
+
name: string;
|
|
13
|
+
/** MIME 类型 */
|
|
14
|
+
mimeType: string;
|
|
15
|
+
/** base64 data URL(如 "data:text/plain;base64,...") */
|
|
16
|
+
bytes: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* message:private 事件的 data 结构
|
|
20
|
+
*
|
|
21
|
+
* 入站(用户 → 插件):{ msgId, from, to, content, files, timestamp }
|
|
22
|
+
* 出站(插件 → 用户):同结构,可附带 kind 用于流式/typing 控制
|
|
23
|
+
*/
|
|
24
|
+
export interface PrivateMessageData {
|
|
25
|
+
/** 消息唯一 ID */
|
|
26
|
+
msgId: string;
|
|
27
|
+
/** 发送者 ID */
|
|
28
|
+
from: string;
|
|
29
|
+
/** 接收者 ID */
|
|
30
|
+
to: string;
|
|
31
|
+
/** 消息文本内容(仅发送文件时可为空字符串) */
|
|
32
|
+
content: string;
|
|
33
|
+
/** 消息时间戳(ms) */
|
|
34
|
+
timestamp: number;
|
|
35
|
+
/** 文件列表({name, mimeType, bytes} 格式,bytes 为 data URL) */
|
|
36
|
+
files?: FileAttachment[];
|
|
37
|
+
/** 消息子类型:流式/typing 控制(出站使用) */
|
|
38
|
+
kind?: "text" | "stream_chunk" | "stream_end" | "typing_start" | "typing_stop";
|
|
39
|
+
/** 回复对应的原始消息 ID */
|
|
40
|
+
replyToMsgId?: string;
|
|
41
|
+
}
|
|
42
|
+
/** 原始配置(config.yaml 中的内容) */
|
|
43
|
+
export interface AssistantAccountConfig {
|
|
44
|
+
/** API Key / Token */
|
|
45
|
+
apiKey?: string;
|
|
46
|
+
/** REST API 基础地址(用于 outbound 主动发送) */
|
|
47
|
+
apiBaseUrl?: string;
|
|
48
|
+
/** 是否启用 */
|
|
49
|
+
enabled?: boolean;
|
|
50
|
+
/** 账户名称 */
|
|
51
|
+
name?: string;
|
|
52
|
+
/** DM 策略 */
|
|
53
|
+
dmPolicy?: "open" | "allowlist" | "disabled";
|
|
54
|
+
/** 允许的用户 ID 列表(* 表示所有人) */
|
|
55
|
+
allowFrom?: string[];
|
|
56
|
+
/** 自定义系统提示词 */
|
|
57
|
+
systemPrompt?: string;
|
|
58
|
+
}
|
|
59
|
+
/** 解析后的完整账户(含默认值和环境变量 fallback) */
|
|
60
|
+
export interface ResolvedAssistantAccount {
|
|
61
|
+
accountId: string;
|
|
62
|
+
apiKey: string;
|
|
63
|
+
apiBaseUrl: string;
|
|
64
|
+
enabled: boolean;
|
|
65
|
+
name?: string;
|
|
66
|
+
dmPolicy: "open" | "allowlist" | "disabled";
|
|
67
|
+
allowFrom: string[];
|
|
68
|
+
systemPrompt?: string;
|
|
69
|
+
secretSource: "config" | "env" | "none";
|
|
70
|
+
}
|
|
71
|
+
export interface GatewayContext {
|
|
72
|
+
account: ResolvedAssistantAccount;
|
|
73
|
+
abortSignal: AbortSignal;
|
|
74
|
+
cfg: unknown;
|
|
75
|
+
onReady?: () => void;
|
|
76
|
+
onDisconnect?: () => void;
|
|
77
|
+
onError?: (error: Error) => void;
|
|
78
|
+
/** 收到任何入站事件时调用,用于通知框架更新 lastEventAt,防止 health-monitor 误判 stale-socket */
|
|
79
|
+
onEvent?: () => void;
|
|
80
|
+
log?: {
|
|
81
|
+
info: (msg: string) => void;
|
|
82
|
+
warn: (msg: string) => void;
|
|
83
|
+
error: (msg: string) => void;
|
|
84
|
+
debug?: (msg: string) => void;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/** 消息队列项 — 直接使用用户的 files[] 格式 */
|
|
88
|
+
export interface QueuedMessage {
|
|
89
|
+
/** 发送者 ID */
|
|
90
|
+
senderId: string;
|
|
91
|
+
/** 消息文本 */
|
|
92
|
+
text: string;
|
|
93
|
+
/** 消息 ID */
|
|
94
|
+
messageId: string;
|
|
95
|
+
/** 文件附件({name, mimeType, bytes} 格式) */
|
|
96
|
+
files: FileAttachment[];
|
|
97
|
+
/** 时间戳 */
|
|
98
|
+
timestamp: number;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
(The MIT License)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2014 Component contributors <dev@component.io>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person
|
|
6
|
+
obtaining a copy of this software and associated documentation
|
|
7
|
+
files (the "Software"), to deal in the Software without
|
|
8
|
+
restriction, including without limitation the rights to use,
|
|
9
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the
|
|
11
|
+
Software is furnished to do so, subject to the following
|
|
12
|
+
conditions:
|
|
13
|
+
|
|
14
|
+
The above copyright notice and this permission notice shall be
|
|
15
|
+
included in all copies or substantial portions of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
18
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
19
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
20
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
21
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
22
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
23
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
24
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# `@socket.io/component-emitter`
|
|
2
|
+
|
|
3
|
+
Event emitter component.
|
|
4
|
+
|
|
5
|
+
This project is a fork of the [`component-emitter`](https://github.com/sindresorhus/component-emitter) project, with [Socket.IO](https://socket.io/)-specific TypeScript typings.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
$ npm i @socket.io/component-emitter
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## API
|
|
14
|
+
|
|
15
|
+
### Emitter(obj)
|
|
16
|
+
|
|
17
|
+
The `Emitter` may also be used as a mixin. For example
|
|
18
|
+
a "plain" object may become an emitter, or you may
|
|
19
|
+
extend an existing prototype.
|
|
20
|
+
|
|
21
|
+
As an `Emitter` instance:
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
import { Emitter } from '@socket.io/component-emitter';
|
|
25
|
+
|
|
26
|
+
var emitter = new Emitter;
|
|
27
|
+
emitter.emit('something');
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
As a mixin:
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
import { Emitter } from '@socket.io/component-emitter';
|
|
34
|
+
|
|
35
|
+
var user = { name: 'tobi' };
|
|
36
|
+
Emitter(user);
|
|
37
|
+
|
|
38
|
+
user.emit('im a user');
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
As a prototype mixin:
|
|
42
|
+
|
|
43
|
+
```js
|
|
44
|
+
import { Emitter } from '@socket.io/component-emitter';
|
|
45
|
+
|
|
46
|
+
Emitter(User.prototype);
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Emitter#on(event, fn)
|
|
50
|
+
|
|
51
|
+
Register an `event` handler `fn`.
|
|
52
|
+
|
|
53
|
+
### Emitter#once(event, fn)
|
|
54
|
+
|
|
55
|
+
Register a single-shot `event` handler `fn`,
|
|
56
|
+
removed immediately after it is invoked the
|
|
57
|
+
first time.
|
|
58
|
+
|
|
59
|
+
### Emitter#off(event, fn)
|
|
60
|
+
|
|
61
|
+
* Pass `event` and `fn` to remove a listener.
|
|
62
|
+
* Pass `event` to remove all listeners on that event.
|
|
63
|
+
* Pass nothing to remove all listeners on all events.
|
|
64
|
+
|
|
65
|
+
### Emitter#emit(event, ...)
|
|
66
|
+
|
|
67
|
+
Emit an `event` with variable option args.
|
|
68
|
+
|
|
69
|
+
### Emitter#listeners(event)
|
|
70
|
+
|
|
71
|
+
Return an array of callbacks, or an empty array.
|
|
72
|
+
|
|
73
|
+
### Emitter#hasListeners(event)
|
|
74
|
+
|
|
75
|
+
Check if this emitter has `event` handlers.
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
MIT
|