@teneo-protocol/sdk 2.0.0 → 2.2.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/.eslintrc.json +11 -2
- package/.github/CODEOWNERS +2 -0
- package/.github/ISSUE_TEMPLATE/01-bug.yml +85 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/workflows/claude-code-review.yml +8 -3
- package/.github/workflows/claude-reviewer.yml +6 -4
- package/.github/workflows/publish-npm.yml +1 -0
- package/.github/workflows/push-to-main.yml +1 -1
- package/.github/workflows/top-issue.yml +102 -0
- package/CHANGELOG.md +69 -0
- package/CONCEPTS.md +747 -0
- package/README.md +178 -8
- package/dist/constants.js +8 -8
- package/dist/constants.js.map +1 -1
- package/dist/core/websocket-client.d.ts +15 -3
- package/dist/core/websocket-client.d.ts.map +1 -1
- package/dist/core/websocket-client.js +52 -13
- package/dist/core/websocket-client.js.map +1 -1
- package/dist/formatters/response-formatter.js +4 -0
- package/dist/formatters/response-formatter.js.map +1 -1
- package/dist/handlers/message-handler-registry.js +2 -1
- package/dist/handlers/message-handler-registry.js.map +1 -1
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1666 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js +38 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-selected-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agents-list-handler.js +2 -5
- package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -1
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +439 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js +36 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.js +6 -5
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-required-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.js +6 -5
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
- package/dist/handlers/message-handlers/base-handler.d.ts +4 -4
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/base-handler.js +3 -1
- package/dist/handlers/message-handlers/base-handler.js.map +1 -1
- package/dist/handlers/message-handlers/challenge-handler.js +3 -2
- package/dist/handlers/message-handlers/challenge-handler.js.map +1 -1
- package/dist/handlers/message-handlers/error-message-handler.js +2 -5
- package/dist/handlers/message-handlers/error-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/index.d.ts +6 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.js +33 -1
- package/dist/handlers/message-handlers/index.js.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.js +2 -5
- package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.js +2 -5
- package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +4 -201
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +5 -7
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.js +4 -10
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts +94 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js +35 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/regular-message-handler.js +4 -6
- package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/room-operation-response-handler.js +2 -5
- package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/task-quote-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/task-quote-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-quote-handler.js +29 -0
- package/dist/handlers/message-handlers/task-quote-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.js +2 -5
- package/dist/handlers/message-handlers/task-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/types.d.ts +21 -9
- package/dist/handlers/message-handlers/types.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts +40 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js +28 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts +49 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.js +31 -0
- package/dist/handlers/message-handlers/user-count-handler.js.map +1 -0
- package/dist/handlers/webhook-handler.d.ts +1 -1
- package/dist/handlers/webhook-handler.d.ts.map +1 -1
- package/dist/handlers/webhook-handler.js +14 -5
- package/dist/handlers/webhook-handler.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -3
- package/dist/index.js.map +1 -1
- package/dist/managers/admin-manager.d.ts +116 -0
- package/dist/managers/admin-manager.d.ts.map +1 -0
- package/dist/managers/admin-manager.js +169 -0
- package/dist/managers/admin-manager.js.map +1 -0
- package/dist/managers/agent-registry.d.ts +52 -1
- package/dist/managers/agent-registry.d.ts.map +1 -1
- package/dist/managers/agent-registry.js +145 -6
- package/dist/managers/agent-registry.js.map +1 -1
- package/dist/managers/agent-room-manager.d.ts +1 -7
- package/dist/managers/agent-room-manager.d.ts.map +1 -1
- package/dist/managers/agent-room-manager.js +83 -36
- package/dist/managers/agent-room-manager.js.map +1 -1
- package/dist/managers/connection-manager.js +2 -0
- package/dist/managers/connection-manager.js.map +1 -1
- package/dist/managers/index.d.ts +2 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/index.js +3 -1
- package/dist/managers/index.js.map +1 -1
- package/dist/managers/message-router.d.ts +56 -5
- package/dist/managers/message-router.d.ts.map +1 -1
- package/dist/managers/message-router.js +155 -8
- package/dist/managers/message-router.js.map +1 -1
- package/dist/managers/room-management-manager.d.ts.map +1 -1
- package/dist/managers/room-management-manager.js +9 -7
- package/dist/managers/room-management-manager.js.map +1 -1
- package/dist/managers/room-manager.d.ts +7 -5
- package/dist/managers/room-manager.d.ts.map +1 -1
- package/dist/managers/room-manager.js +14 -10
- package/dist/managers/room-manager.js.map +1 -1
- package/dist/payments/index.d.ts +5 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +21 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/payments/payment-client.d.ts +74 -0
- package/dist/payments/payment-client.d.ts.map +1 -0
- package/dist/payments/payment-client.js +207 -0
- package/dist/payments/payment-client.js.map +1 -0
- package/dist/teneo-sdk.d.ts +135 -21
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +268 -26
- package/dist/teneo-sdk.js.map +1 -1
- package/dist/types/categories.d.ts +22 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +40 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/config.d.ts +79 -8
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +62 -5
- package/dist/types/config.js.map +1 -1
- package/dist/types/error-codes.d.ts +8 -0
- package/dist/types/error-codes.d.ts.map +1 -1
- package/dist/types/error-codes.js +9 -0
- package/dist/types/error-codes.js.map +1 -1
- package/dist/types/events.d.ts +44 -0
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js +19 -1
- package/dist/types/events.js.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +33 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +11203 -407
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +251 -8
- package/dist/types/messages.js.map +1 -1
- package/dist/utils/bounded-queue.d.ts.map +1 -1
- package/dist/utils/bounded-queue.js +5 -2
- package/dist/utils/bounded-queue.js.map +1 -1
- package/dist/utils/circuit-breaker.js +11 -4
- package/dist/utils/circuit-breaker.js.map +1 -1
- package/dist/utils/deduplication-cache.js +3 -1
- package/dist/utils/deduplication-cache.js.map +1 -1
- package/dist/utils/event-waiter.d.ts +3 -3
- package/dist/utils/event-waiter.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pricing-resolver.d.ts +26 -0
- package/dist/utils/pricing-resolver.d.ts.map +1 -0
- package/dist/utils/pricing-resolver.js +85 -0
- package/dist/utils/pricing-resolver.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -1
- package/dist/utils/rate-limiter.js +6 -0
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/retry-policy.js +1 -0
- package/dist/utils/retry-policy.js.map +1 -1
- package/dist/utils/secure-private-key.js +3 -1
- package/dist/utils/secure-private-key.js.map +1 -1
- package/dist/utils/signature-verifier.d.ts.map +1 -1
- package/dist/utils/signature-verifier.js +3 -1
- package/dist/utils/signature-verifier.js.map +1 -1
- package/examples/.env.example +1 -1
- package/examples/agent-room-management-example.ts +10 -9
- package/examples/basic-usage.ts +3 -4
- package/examples/claude-agent-x-follower/.env.example +1 -1
- package/examples/claude-agent-x-follower/QUICKSTART.md +2 -2
- package/examples/claude-agent-x-follower/README.md +2 -2
- package/examples/claude-agent-x-follower/index.ts +120 -96
- package/examples/n8n-teneo/.env.example +1 -1
- package/examples/n8n-teneo/README.md +1 -1
- package/examples/n8n-teneo/index.ts +54 -44
- package/examples/nestjs-dashboard/.env.example +11 -0
- package/examples/nestjs-dashboard/README.md +297 -0
- package/examples/nestjs-dashboard/nest-cli.json +10 -0
- package/examples/nestjs-dashboard/package.json +44 -0
- package/examples/nestjs-dashboard/pnpm-lock.yaml +3079 -0
- package/examples/nestjs-dashboard/src/app.controller.ts +24 -0
- package/examples/nestjs-dashboard/src/app.module.ts +15 -0
- package/examples/nestjs-dashboard/src/main.ts +32 -0
- package/examples/nestjs-dashboard/src/public/dashboard.html +1144 -0
- package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +54 -0
- package/examples/nestjs-dashboard/src/teneo/events.controller.ts +65 -0
- package/examples/nestjs-dashboard/src/teneo/messages.controller.ts +47 -0
- package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +258 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.module.ts +13 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +484 -0
- package/examples/nestjs-dashboard/tsconfig.json +22 -0
- package/examples/openai-teneo/.env.example +1 -1
- package/examples/openai-teneo/README.md +2 -2
- package/examples/openai-teneo/index.ts +82 -71
- package/examples/production-dashboard/.env.example +1 -1
- package/examples/production-dashboard/README.md +1 -1
- package/examples/production-dashboard/server.ts +2 -2
- package/examples/room-management-example.ts +5 -8
- package/examples/usage/.env.example +1 -1
- package/examples/usage/01-connect.ts +3 -4
- package/examples/usage/02-list-agents.ts +2 -3
- package/examples/usage/03-pick-agent.ts +2 -3
- package/examples/usage/04-find-by-capability.ts +2 -3
- package/examples/usage/05-webhook-example.ts +2 -3
- package/examples/usage/06-simple-api-server.ts +2 -3
- package/examples/usage/07-event-listener.ts +2 -3
- package/examples/webhook-integration.ts +1 -1
- package/examples/x-influencer-battle-server.ts +2 -2
- package/package.json +4 -1
- package/src/core/websocket-client.test.ts +8 -3
- package/src/core/websocket-client.ts +36 -6
- package/src/formatters/response-formatter.test.ts +2 -0
- package/src/formatters/response-formatter.ts +3 -3
- package/src/handlers/message-handlers/agent-details-response-handler.ts +42 -0
- package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +2 -8
- package/src/handlers/message-handlers/agent-status-update-handler.ts +3 -9
- package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +5 -0
- package/src/handlers/message-handlers/auth-success-handler.ts +6 -1
- package/src/handlers/message-handlers/base-handler.ts +20 -7
- package/src/handlers/message-handlers/index.ts +34 -0
- package/src/handlers/message-handlers/list-room-agents-handler.ts +2 -5
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +6 -4
- package/src/handlers/message-handlers/rate-limit-notification-handler.ts +45 -0
- package/src/handlers/message-handlers/regular-message-handler.ts +3 -2
- package/src/handlers/message-handlers/room-operation-response-handler.ts +3 -6
- package/src/handlers/message-handlers/subscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/task-quote-handler.ts +31 -0
- package/src/handlers/message-handlers/types.ts +37 -9
- package/src/handlers/message-handlers/unsubscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/user-authenticated-handler.ts +31 -0
- package/src/handlers/message-handlers/user-count-handler.ts +34 -0
- package/src/handlers/webhook-handler.test.ts +3 -2
- package/src/handlers/webhook-handler.ts +13 -7
- package/src/index.ts +22 -1
- package/src/managers/admin-manager.ts +249 -0
- package/src/managers/agent-registry.test.ts +2 -1
- package/src/managers/agent-registry.ts +170 -2
- package/src/managers/agent-room-manager.ts +98 -42
- package/src/managers/index.ts +13 -1
- package/src/managers/message-router.ts +215 -17
- package/src/managers/room-management-manager.ts +4 -7
- package/src/managers/room-manager.ts +11 -15
- package/src/payments/index.ts +22 -0
- package/src/payments/payment-client.ts +240 -0
- package/src/teneo-sdk.ts +302 -27
- package/src/types/categories.ts +45 -0
- package/src/types/config.ts +70 -2
- package/src/types/error-codes.ts +10 -0
- package/src/types/events.test.ts +1 -0
- package/src/types/events.ts +43 -0
- package/src/types/index.ts +56 -0
- package/src/types/messages.test.ts +2 -1
- package/src/types/messages.ts +309 -6
- package/src/utils/bounded-queue.test.ts +1 -1
- package/src/utils/bounded-queue.ts +2 -1
- package/src/utils/circuit-breaker.test.ts +1 -1
- package/src/utils/deduplication-cache.test.ts +1 -1
- package/src/utils/event-waiter.test.ts +1 -1
- package/src/utils/event-waiter.ts +3 -3
- package/src/utils/index.ts +7 -0
- package/src/utils/logger.ts +8 -8
- package/src/utils/pricing-resolver.ts +128 -0
- package/src/utils/rate-limiter.test.ts +1 -1
- package/src/utils/rate-limiter.ts +1 -0
- package/src/utils/signature-verifier.test.ts +2 -2
- package/src/utils/signature-verifier.ts +3 -2
- package/tests/.env.example +7 -0
- package/tests/direct-agent-test.ts +151 -0
- package/tests/integration/real-server.test.ts +2 -0
- package/tests/integration/room-management.test.ts +10 -8
- package/tests/integration/websocket.test.ts +4 -1
- package/tests/payment-flow-test.ts +147 -0
- package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +17 -29
- package/tests/unit/handlers/agent-status-update-handler.test.ts +2 -6
- package/tests/unit/handlers/auth-success-handler-rooms.test.ts +1 -3
- package/tests/unit/handlers/list-available-agents-handler.test.ts +4 -12
- package/tests/unit/handlers/list-room-agents-handler.test.ts +2 -6
- package/tests/unit/handlers/room-operation-response-handler.test.ts +9 -36
- package/tests/unit/managers/agent-room-manager.test.ts +9 -16
- package/tests/unit/managers/room-management-manager.test.ts +21 -39
- package/tsconfig.json +2 -2
- package/vitest.config.ts +1 -0
|
@@ -55,9 +55,11 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
55
55
|
private signatureVerifier?: SignatureVerifier;
|
|
56
56
|
private deduplicationCache?: DeduplicationCache;
|
|
57
57
|
private reconnectPolicy: RetryPolicy;
|
|
58
|
-
private roomManager?:
|
|
59
|
-
private roomManagementManager?:
|
|
60
|
-
private agentRoomManager?:
|
|
58
|
+
private roomManager?: import("../managers/room-manager").RoomManager; // Reference to RoomManager for handler context
|
|
59
|
+
private roomManagementManager?: import("../managers/room-management-manager").RoomManagementManager; // Reference to RoomManagementManager for handler context (v2.0.0)
|
|
60
|
+
private agentRoomManager?: import("../managers/agent-room-manager").AgentRoomManager; // Reference to AgentRoomManager for handler context (v2.0.0)
|
|
61
|
+
private adminManager?: import("../managers/admin-manager").AdminManager; // Reference to AdminManager for admin handlers
|
|
62
|
+
private agentRegistry?: import("../managers/agent-registry").AgentRegistry; // Reference to AgentRegistry for agent details handler
|
|
61
63
|
private intentionalDisconnect: boolean = false; // Track intentional disconnect to prevent reconnection
|
|
62
64
|
|
|
63
65
|
private connectionState: ConnectionState = {
|
|
@@ -75,6 +77,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
75
77
|
private pendingMessages = new Map<
|
|
76
78
|
string,
|
|
77
79
|
{
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
78
81
|
resolve: (value: any) => void;
|
|
79
82
|
reject: (error: Error) => void;
|
|
80
83
|
timeout: NodeJS.Timeout;
|
|
@@ -161,6 +164,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
161
164
|
// Initialize signature verifier if configured (SEC-2)
|
|
162
165
|
if (this.config.validateSignatures) {
|
|
163
166
|
this.signatureVerifier = new SignatureVerifier({
|
|
167
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
164
168
|
trustedAddresses: this.config.trustedAgentAddresses as any[],
|
|
165
169
|
requireSignaturesFor: this.config.requireSignaturesFor,
|
|
166
170
|
strictMode: this.config.strictSignatureValidation
|
|
@@ -209,7 +213,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
209
213
|
* Set the RoomManager instance for handler context
|
|
210
214
|
* Called by TeneoSDK after initialization
|
|
211
215
|
*/
|
|
212
|
-
public setRoomManager(roomManager:
|
|
216
|
+
public setRoomManager(roomManager: import("../managers/room-manager").RoomManager): void {
|
|
213
217
|
this.roomManager = roomManager;
|
|
214
218
|
}
|
|
215
219
|
|
|
@@ -217,7 +221,9 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
217
221
|
* Sets the room management manager for room CRUD operations (v2.0.0)
|
|
218
222
|
* @internal
|
|
219
223
|
*/
|
|
220
|
-
public setRoomManagementManager(
|
|
224
|
+
public setRoomManagementManager(
|
|
225
|
+
roomManagementManager: import("../managers/room-management-manager").RoomManagementManager
|
|
226
|
+
): void {
|
|
221
227
|
this.roomManagementManager = roomManagementManager;
|
|
222
228
|
}
|
|
223
229
|
|
|
@@ -225,10 +231,28 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
225
231
|
* Sets the agent room manager for agent-room operations (v2.0.0)
|
|
226
232
|
* @internal
|
|
227
233
|
*/
|
|
228
|
-
public setAgentRoomManager(
|
|
234
|
+
public setAgentRoomManager(
|
|
235
|
+
agentRoomManager: import("../managers/agent-room-manager").AgentRoomManager
|
|
236
|
+
): void {
|
|
229
237
|
this.agentRoomManager = agentRoomManager;
|
|
230
238
|
}
|
|
231
239
|
|
|
240
|
+
/**
|
|
241
|
+
* Sets the admin manager for admin-only features
|
|
242
|
+
* @internal
|
|
243
|
+
*/
|
|
244
|
+
public setAdminManager(adminManager: import("../managers/admin-manager").AdminManager): void {
|
|
245
|
+
this.adminManager = adminManager;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Sets the agent registry for agent details lookups
|
|
250
|
+
* @internal
|
|
251
|
+
*/
|
|
252
|
+
public setAgentRegistry(agentRegistry: import("../managers/agent-registry").AgentRegistry): void {
|
|
253
|
+
this.agentRegistry = agentRegistry;
|
|
254
|
+
}
|
|
255
|
+
|
|
232
256
|
/**
|
|
233
257
|
* Establishes a WebSocket connection to the Teneo server.
|
|
234
258
|
* Handles connection timeout, authentication challenge-response flow,
|
|
@@ -544,6 +568,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
544
568
|
* console.log('Response received:', response);
|
|
545
569
|
* ```
|
|
546
570
|
*/
|
|
571
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
547
572
|
public async sendMessageWithResponse<T = any>(
|
|
548
573
|
message: BaseMessage,
|
|
549
574
|
timeout?: number
|
|
@@ -663,6 +688,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
663
688
|
*/
|
|
664
689
|
private createHandlerContext(): HandlerContext {
|
|
665
690
|
return {
|
|
691
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
666
692
|
emit: (event: string, ...args: any[]) => this.emit(event as any, ...args),
|
|
667
693
|
sendWebhook: async () => {
|
|
668
694
|
// Webhooks are handled by WebhookHandler in TeneoSDK
|
|
@@ -672,11 +698,15 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
672
698
|
logger: this.logger,
|
|
673
699
|
getConnectionState: () => this.getConnectionState(),
|
|
674
700
|
getAuthState: () => this.getAuthState(),
|
|
701
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
675
702
|
updateConnectionState: (update: any) => this.updateConnectionState(update),
|
|
703
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
676
704
|
updateAuthState: (update: any) => this.updateAuthState(update),
|
|
677
705
|
roomManager: this.roomManager,
|
|
678
706
|
roomManagementManager: this.roomManagementManager,
|
|
679
707
|
agentRoomManager: this.agentRoomManager,
|
|
708
|
+
adminManager: this.adminManager,
|
|
709
|
+
agentRegistry: this.agentRegistry,
|
|
680
710
|
account: this.account,
|
|
681
711
|
sendMessage: (message: BaseMessage) => this.sendMessage(message)
|
|
682
712
|
};
|
|
@@ -29,6 +29,7 @@ describe("ResponseFormatter", () => {
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
it("should validate format option", () => {
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
33
|
expect(() => new ResponseFormatter({ format: "invalid" as any })).toThrow();
|
|
33
34
|
});
|
|
34
35
|
});
|
|
@@ -303,6 +304,7 @@ describe("ResponseFormatter", () => {
|
|
|
303
304
|
|
|
304
305
|
it("should handle unknown message types", () => {
|
|
305
306
|
const unknown: BaseMessage = {
|
|
307
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
306
308
|
type: "unknown" as any,
|
|
307
309
|
content: "Unknown content",
|
|
308
310
|
data: { key: "value" }
|
|
@@ -296,7 +296,7 @@ export class ResponseFormatter {
|
|
|
296
296
|
/**
|
|
297
297
|
* Format raw message (no transformation)
|
|
298
298
|
*/
|
|
299
|
-
private formatRaw(message: BaseMessage):
|
|
299
|
+
private formatRaw(message: BaseMessage): BaseMessage {
|
|
300
300
|
return message;
|
|
301
301
|
}
|
|
302
302
|
|
|
@@ -467,7 +467,7 @@ export class ResponseFormatter {
|
|
|
467
467
|
/**
|
|
468
468
|
* Format JSON object for display
|
|
469
469
|
*/
|
|
470
|
-
private formatJSON(obj:
|
|
470
|
+
private formatJSON(obj: unknown, indent = 0): string {
|
|
471
471
|
if (obj === null || obj === undefined) {
|
|
472
472
|
return "null";
|
|
473
473
|
}
|
|
@@ -497,7 +497,7 @@ export class ResponseFormatter {
|
|
|
497
497
|
/**
|
|
498
498
|
* Format array for display
|
|
499
499
|
*/
|
|
500
|
-
private formatArray(arr:
|
|
500
|
+
private formatArray(arr: unknown[], indent = 0): string {
|
|
501
501
|
if (arr.length === 0) {
|
|
502
502
|
return "[]";
|
|
503
503
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for agent_details_response messages
|
|
3
|
+
* Processes detailed agent information from the server
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { AgentDetailsResponseMessage, AgentDetailsResponseMessageSchema } from "../../types";
|
|
7
|
+
import { BaseMessageHandler } from "./base-handler";
|
|
8
|
+
import { HandlerContext } from "./types";
|
|
9
|
+
|
|
10
|
+
export class AgentDetailsResponseHandler extends BaseMessageHandler<AgentDetailsResponseMessage> {
|
|
11
|
+
readonly type = "agent_details_response" as const;
|
|
12
|
+
readonly schema = AgentDetailsResponseMessageSchema;
|
|
13
|
+
|
|
14
|
+
protected handleValidated(message: AgentDetailsResponseMessage, context: HandlerContext): void {
|
|
15
|
+
if (!message.data?.agent) {
|
|
16
|
+
context.logger.warn("Received agent_details_response without agent data");
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const { agent } = message.data;
|
|
21
|
+
|
|
22
|
+
context.logger.debug("Handling agent_details_response", {
|
|
23
|
+
agentId: agent.agent_id,
|
|
24
|
+
agentName: agent.agent_name
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Delegate to agent registry if available
|
|
28
|
+
const agentRegistry = context.agentRegistry;
|
|
29
|
+
if (agentRegistry && typeof agentRegistry.handleAgentDetails === "function") {
|
|
30
|
+
agentRegistry.handleAgentDetails(agent);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
context.logger.info("Agent details received", {
|
|
34
|
+
agentId: agent.agent_id,
|
|
35
|
+
agentName: agent.agent_name,
|
|
36
|
+
status: agent.status
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Send webhook
|
|
40
|
+
this.sendWebhook(context, "agent_details_response", { agent });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
* Processes responses from agent-room operations (add, remove)
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
AgentRoomOperationResponse,
|
|
8
|
-
AgentRoomOperationResponseSchema
|
|
9
|
-
} from "../../types";
|
|
6
|
+
import { AgentRoomOperationResponse, AgentRoomOperationResponseSchema } from "../../types";
|
|
10
7
|
import { BaseMessageHandler } from "./base-handler";
|
|
11
8
|
import { HandlerContext } from "./types";
|
|
12
9
|
import { SDKError } from "../../types/events";
|
|
@@ -16,10 +13,7 @@ export class AgentRoomOperationResponseHandler extends BaseMessageHandler<AgentR
|
|
|
16
13
|
readonly type = "agent_room_operation_response" as const;
|
|
17
14
|
readonly schema = AgentRoomOperationResponseSchema;
|
|
18
15
|
|
|
19
|
-
protected handleValidated(
|
|
20
|
-
message: AgentRoomOperationResponse,
|
|
21
|
-
context: HandlerContext
|
|
22
|
-
): void {
|
|
16
|
+
protected handleValidated(message: AgentRoomOperationResponse, context: HandlerContext): void {
|
|
23
17
|
const { success, message: errorMessage, room_id, agent_id } = message.data;
|
|
24
18
|
|
|
25
19
|
context.logger.debug("Handling agent_room_operation_response", {
|
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
* Processes real-time agent status updates for rooms
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
AgentStatusUpdateMessage,
|
|
8
|
-
AgentStatusUpdateMessageSchema
|
|
9
|
-
} from "../../types";
|
|
6
|
+
import { AgentStatusUpdateMessage, AgentStatusUpdateMessageSchema } from "../../types";
|
|
10
7
|
import { BaseMessageHandler } from "./base-handler";
|
|
11
8
|
import { HandlerContext } from "./types";
|
|
12
9
|
|
|
@@ -14,10 +11,7 @@ export class AgentStatusUpdateHandler extends BaseMessageHandler<AgentStatusUpda
|
|
|
14
11
|
readonly type = "agent_status_update" as const;
|
|
15
12
|
readonly schema = AgentStatusUpdateMessageSchema;
|
|
16
13
|
|
|
17
|
-
protected handleValidated(
|
|
18
|
-
message: AgentStatusUpdateMessage,
|
|
19
|
-
context: HandlerContext
|
|
20
|
-
): void {
|
|
14
|
+
protected handleValidated(message: AgentStatusUpdateMessage, context: HandlerContext): void {
|
|
21
15
|
const { room_id, agent_id, status, agent } = message.data;
|
|
22
16
|
|
|
23
17
|
context.logger.debug("Handling agent_status_update", {
|
|
@@ -28,7 +22,7 @@ export class AgentStatusUpdateHandler extends BaseMessageHandler<AgentStatusUpda
|
|
|
28
22
|
});
|
|
29
23
|
|
|
30
24
|
// Invalidate cache for this room via agent room manager
|
|
31
|
-
const agentRoomManager =
|
|
25
|
+
const agentRoomManager = context.agentRoomManager;
|
|
32
26
|
if (agentRoomManager && typeof agentRoomManager.handleStatusUpdate === "function") {
|
|
33
27
|
agentRoomManager.handleStatusUpdate(room_id, agent_id, status);
|
|
34
28
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for all_agents_response messages (Admin only)
|
|
3
|
+
* Processes paginated agent list for admin users
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { AllAgentsResponse, AllAgentsResponseSchema } from "../../types";
|
|
7
|
+
import { BaseMessageHandler } from "./base-handler";
|
|
8
|
+
import { HandlerContext } from "./types";
|
|
9
|
+
|
|
10
|
+
export class AllAgentsResponseHandler extends BaseMessageHandler<AllAgentsResponse> {
|
|
11
|
+
readonly type = "all_agents_response" as const;
|
|
12
|
+
readonly schema = AllAgentsResponseSchema;
|
|
13
|
+
|
|
14
|
+
protected handleValidated(message: AllAgentsResponse, context: HandlerContext): void {
|
|
15
|
+
const { agents, total, offset, has_more, filter } = message.data;
|
|
16
|
+
|
|
17
|
+
context.logger.debug("Handling all_agents_response", {
|
|
18
|
+
count: agents.length,
|
|
19
|
+
total,
|
|
20
|
+
offset,
|
|
21
|
+
hasMore: has_more
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Delegate to admin manager if available
|
|
25
|
+
const adminManager = context.adminManager;
|
|
26
|
+
if (adminManager && typeof adminManager.handleAllAgentsResponse === "function") {
|
|
27
|
+
adminManager.handleAllAgentsResponse(message.data, message.request_id);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
context.logger.info("All agents response received", {
|
|
31
|
+
count: agents.length,
|
|
32
|
+
total,
|
|
33
|
+
filter
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Send webhook
|
|
37
|
+
this.sendWebhook(context, "all_agents_response", message.data);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -93,6 +93,11 @@ export class AuthMessageHandler extends BaseMessageHandler<AuthMessage> {
|
|
|
93
93
|
// Get updated auth state
|
|
94
94
|
const authState = context.getAuthState();
|
|
95
95
|
|
|
96
|
+
// Update admin manager with admin status
|
|
97
|
+
if (context.adminManager) {
|
|
98
|
+
context.adminManager.setAdminStatus(message.data?.is_admin_whitelisted ?? false);
|
|
99
|
+
}
|
|
100
|
+
|
|
96
101
|
// Emit events
|
|
97
102
|
this.emit(context, "auth:success", authState);
|
|
98
103
|
this.emit(context, "ready");
|
|
@@ -48,8 +48,13 @@ export class AuthSuccessHandler extends BaseMessageHandler<AuthSuccessMessage> {
|
|
|
48
48
|
// Get updated auth state
|
|
49
49
|
const authState = context.getAuthState();
|
|
50
50
|
|
|
51
|
+
// Update admin manager with admin status
|
|
52
|
+
if (context.adminManager) {
|
|
53
|
+
context.adminManager.setAdminStatus(message.data.is_admin_whitelisted ?? false);
|
|
54
|
+
}
|
|
55
|
+
|
|
51
56
|
// Initialize room management manager with room data (v2.0.0)
|
|
52
|
-
const roomMgmt =
|
|
57
|
+
const roomMgmt = context.roomManagementManager;
|
|
53
58
|
if (roomMgmt) {
|
|
54
59
|
// Set room limit
|
|
55
60
|
if (message.data.max_private_rooms) {
|
|
@@ -71,31 +71,44 @@ export abstract class BaseMessageHandler<T extends BaseMessage = BaseMessage>
|
|
|
71
71
|
/**
|
|
72
72
|
* Helper: emit event
|
|
73
73
|
*/
|
|
74
|
-
protected emit(context: HandlerContext, event: string, ...args:
|
|
74
|
+
protected emit(context: HandlerContext, event: string, ...args: unknown[]): void {
|
|
75
75
|
context.emit(event, ...args);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
79
|
* Helper: send webhook (fire-and-forget pattern)
|
|
80
80
|
*/
|
|
81
|
-
protected sendWebhook(
|
|
81
|
+
protected sendWebhook(
|
|
82
|
+
context: HandlerContext,
|
|
83
|
+
type: string,
|
|
84
|
+
data: Record<string, unknown>,
|
|
85
|
+
metadata?: Record<string, unknown>
|
|
86
|
+
): void {
|
|
82
87
|
// Fire and forget - don't block event emission
|
|
83
|
-
context
|
|
84
|
-
|
|
85
|
-
|
|
88
|
+
context
|
|
89
|
+
.sendWebhook(type as Parameters<typeof context.sendWebhook>[0], data, metadata)
|
|
90
|
+
.catch((error) => {
|
|
91
|
+
context.logger.error(`Failed to send webhook for ${this.type}`, error);
|
|
92
|
+
});
|
|
86
93
|
}
|
|
87
94
|
|
|
88
95
|
/**
|
|
89
96
|
* Helper: update connection state
|
|
90
97
|
*/
|
|
91
|
-
protected updateConnectionState(
|
|
98
|
+
protected updateConnectionState(
|
|
99
|
+
context: HandlerContext,
|
|
100
|
+
update: Partial<import("./types").ConnectionState>
|
|
101
|
+
): void {
|
|
92
102
|
context.updateConnectionState(update);
|
|
93
103
|
}
|
|
94
104
|
|
|
95
105
|
/**
|
|
96
106
|
* Helper: update auth state
|
|
97
107
|
*/
|
|
98
|
-
protected updateAuthState(
|
|
108
|
+
protected updateAuthState(
|
|
109
|
+
context: HandlerContext,
|
|
110
|
+
update: Partial<import("./types").AuthState>
|
|
111
|
+
): void {
|
|
99
112
|
context.updateAuthState(update);
|
|
100
113
|
}
|
|
101
114
|
}
|
|
@@ -9,6 +9,7 @@ export * from "./base-handler";
|
|
|
9
9
|
|
|
10
10
|
// Export all handlers
|
|
11
11
|
export { TaskResponseHandler } from "./task-response-handler";
|
|
12
|
+
export { TaskQuoteHandler } from "./task-quote-handler";
|
|
12
13
|
export { AgentSelectedHandler } from "./agent-selected-handler";
|
|
13
14
|
export { ChallengeHandler } from "./challenge-handler";
|
|
14
15
|
export { AuthMessageHandler } from "./auth-message-handler";
|
|
@@ -28,8 +29,22 @@ export { ListRoomAgentsHandler } from "./list-room-agents-handler";
|
|
|
28
29
|
export { ListAvailableAgentsHandler } from "./list-available-agents-handler";
|
|
29
30
|
export { AgentStatusUpdateHandler } from "./agent-status-update-handler";
|
|
30
31
|
|
|
32
|
+
// Agent Details handler
|
|
33
|
+
export { AgentDetailsResponseHandler } from "./agent-details-response-handler";
|
|
34
|
+
|
|
35
|
+
// Rate Limit handler
|
|
36
|
+
export { RateLimitNotificationHandler } from "./rate-limit-notification-handler";
|
|
37
|
+
|
|
38
|
+
// Admin handlers
|
|
39
|
+
export { AllAgentsResponseHandler } from "./all-agents-response-handler";
|
|
40
|
+
export { UserCountHandler } from "./user-count-handler";
|
|
41
|
+
|
|
42
|
+
// Presence handler
|
|
43
|
+
export { UserAuthenticatedHandler } from "./user-authenticated-handler";
|
|
44
|
+
|
|
31
45
|
// Import for convenience function
|
|
32
46
|
import { TaskResponseHandler } from "./task-response-handler";
|
|
47
|
+
import { TaskQuoteHandler } from "./task-quote-handler";
|
|
33
48
|
import { AgentSelectedHandler } from "./agent-selected-handler";
|
|
34
49
|
import { ChallengeHandler } from "./challenge-handler";
|
|
35
50
|
import { AuthMessageHandler } from "./auth-message-handler";
|
|
@@ -48,6 +63,11 @@ import { AgentRoomOperationResponseHandler } from "./agent-room-operation-respon
|
|
|
48
63
|
import { ListRoomAgentsHandler } from "./list-room-agents-handler";
|
|
49
64
|
import { ListAvailableAgentsHandler } from "./list-available-agents-handler";
|
|
50
65
|
import { AgentStatusUpdateHandler } from "./agent-status-update-handler";
|
|
66
|
+
import { AgentDetailsResponseHandler } from "./agent-details-response-handler";
|
|
67
|
+
import { RateLimitNotificationHandler } from "./rate-limit-notification-handler";
|
|
68
|
+
import { AllAgentsResponseHandler } from "./all-agents-response-handler";
|
|
69
|
+
import { UserCountHandler } from "./user-count-handler";
|
|
70
|
+
import { UserAuthenticatedHandler } from "./user-authenticated-handler";
|
|
51
71
|
import { MessageHandler } from "./types";
|
|
52
72
|
|
|
53
73
|
/**
|
|
@@ -68,6 +88,7 @@ export function getDefaultHandlers(
|
|
|
68
88
|
|
|
69
89
|
// Agent/coordinator handlers
|
|
70
90
|
new TaskResponseHandler(),
|
|
91
|
+
new TaskQuoteHandler(),
|
|
71
92
|
new AgentSelectedHandler(),
|
|
72
93
|
new AgentsListHandler(),
|
|
73
94
|
|
|
@@ -89,6 +110,19 @@ export function getDefaultHandlers(
|
|
|
89
110
|
new ListAvailableAgentsHandler(),
|
|
90
111
|
new AgentStatusUpdateHandler(),
|
|
91
112
|
|
|
113
|
+
// Agent Details handler
|
|
114
|
+
new AgentDetailsResponseHandler(),
|
|
115
|
+
|
|
116
|
+
// Rate Limit handler
|
|
117
|
+
new RateLimitNotificationHandler(),
|
|
118
|
+
|
|
119
|
+
// Admin handlers
|
|
120
|
+
new AllAgentsResponseHandler(),
|
|
121
|
+
new UserCountHandler(),
|
|
122
|
+
|
|
123
|
+
// Presence handler
|
|
124
|
+
new UserAuthenticatedHandler(),
|
|
125
|
+
|
|
92
126
|
// Keepalive handlers
|
|
93
127
|
new PingHandler(),
|
|
94
128
|
new PongHandler()
|
|
@@ -14,10 +14,7 @@ export class ListRoomAgentsHandler extends BaseMessageHandler<RoomAgentsResponse
|
|
|
14
14
|
readonly type = "room_agents_response" as const;
|
|
15
15
|
readonly schema = RoomAgentsResponseSchema;
|
|
16
16
|
|
|
17
|
-
protected handleValidated(
|
|
18
|
-
message: RoomAgentsResponse,
|
|
19
|
-
context: HandlerContext
|
|
20
|
-
): void {
|
|
17
|
+
protected handleValidated(message: RoomAgentsResponse, context: HandlerContext): void {
|
|
21
18
|
const { room_id, agents } = message.data;
|
|
22
19
|
|
|
23
20
|
context.logger.debug("Handling room_agents_response", {
|
|
@@ -43,7 +40,7 @@ export class ListRoomAgentsHandler extends BaseMessageHandler<RoomAgentsResponse
|
|
|
43
40
|
});
|
|
44
41
|
|
|
45
42
|
// Cache via agent room manager if available
|
|
46
|
-
const agentRoomManager =
|
|
43
|
+
const agentRoomManager = context.agentRoomManager;
|
|
47
44
|
if (agentRoomManager && typeof agentRoomManager.cacheRoomAgents === "function") {
|
|
48
45
|
agentRoomManager.cacheRoomAgents(room_id, agentList);
|
|
49
46
|
}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Handler for
|
|
2
|
+
* Handler for room_list_response messages
|
|
3
3
|
* Processes room list from server
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { z } from "zod";
|
|
6
7
|
import { ListRoomsResponse, ListRoomsResponseSchema } from "../../types";
|
|
7
8
|
import { BaseMessageHandler } from "./base-handler";
|
|
8
9
|
import { HandlerContext } from "./types";
|
|
9
10
|
|
|
10
11
|
export class ListRoomsResponseHandler extends BaseMessageHandler<ListRoomsResponse> {
|
|
11
|
-
readonly type = "
|
|
12
|
-
|
|
12
|
+
readonly type = "room_list_response" as const;
|
|
13
|
+
// Cast needed due to Zod transform creating input/output type mismatch
|
|
14
|
+
readonly schema = ListRoomsResponseSchema as z.ZodType<ListRoomsResponse>;
|
|
13
15
|
|
|
14
16
|
protected handleValidated(message: ListRoomsResponse, context: HandlerContext): void {
|
|
15
|
-
context.logger.debug("Handling
|
|
17
|
+
context.logger.debug("Handling room_list_response", {
|
|
16
18
|
roomCount: message.data.rooms.length
|
|
17
19
|
});
|
|
18
20
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for rate_limit_notification messages
|
|
3
|
+
* Processes rate limit notifications from the server
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { RateLimitNotificationMessage, RateLimitNotificationMessageSchema } from "../../types";
|
|
7
|
+
import { BaseMessageHandler } from "./base-handler";
|
|
8
|
+
import { HandlerContext } from "./types";
|
|
9
|
+
|
|
10
|
+
export class RateLimitNotificationHandler extends BaseMessageHandler<RateLimitNotificationMessage> {
|
|
11
|
+
readonly type = "rate_limit_notification" as const;
|
|
12
|
+
readonly schema = RateLimitNotificationMessageSchema;
|
|
13
|
+
|
|
14
|
+
protected handleValidated(message: RateLimitNotificationMessage, context: HandlerContext): void {
|
|
15
|
+
const {
|
|
16
|
+
title,
|
|
17
|
+
message: msg,
|
|
18
|
+
cta_text,
|
|
19
|
+
cta_link,
|
|
20
|
+
message_type,
|
|
21
|
+
limit_type,
|
|
22
|
+
reset_at
|
|
23
|
+
} = message.data;
|
|
24
|
+
|
|
25
|
+
context.logger.warn("Rate limit notification received", {
|
|
26
|
+
title,
|
|
27
|
+
limitType: limit_type,
|
|
28
|
+
resetAt: reset_at
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Emit rate limit event with camelCase conversion
|
|
32
|
+
this.emit(context, "rate_limit", {
|
|
33
|
+
title,
|
|
34
|
+
message: msg,
|
|
35
|
+
ctaText: cta_text,
|
|
36
|
+
ctaLink: cta_link,
|
|
37
|
+
messageType: message_type,
|
|
38
|
+
limitType: limit_type,
|
|
39
|
+
resetAt: reset_at
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Send webhook
|
|
43
|
+
this.sendWebhook(context, "rate_limit_notification", message.data);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Processes messages from agents (when they send 'message' instead of 'task_response')
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { UserMessage, UserMessageSchema } from "../../types";
|
|
6
|
+
import { UserMessage, UserMessageSchema, TaskResponseMessage } from "../../types";
|
|
7
7
|
import { AgentResponse } from "../../types/events";
|
|
8
8
|
import { BaseMessageHandler } from "./base-handler";
|
|
9
9
|
import { HandlerContext } from "./types";
|
|
@@ -54,7 +54,8 @@ export class RegularMessageHandler extends BaseMessageHandler<UserMessage> {
|
|
|
54
54
|
contentType: message.content_type || "text/plain",
|
|
55
55
|
success: true,
|
|
56
56
|
timestamp: new Date(),
|
|
57
|
-
|
|
57
|
+
// Cast to TaskResponseMessage for request correlation (message format is compatible)
|
|
58
|
+
raw: message as unknown as TaskResponseMessage,
|
|
58
59
|
humanized:
|
|
59
60
|
typeof message.content === "string" ? message.content : JSON.stringify(message.content)
|
|
60
61
|
};
|
|
@@ -13,10 +13,7 @@ export class RoomOperationResponseHandler extends BaseMessageHandler<RoomOperati
|
|
|
13
13
|
readonly type = "room_operation_response" as const;
|
|
14
14
|
readonly schema = RoomOperationResponseSchema;
|
|
15
15
|
|
|
16
|
-
protected handleValidated(
|
|
17
|
-
message: RoomOperationResponse,
|
|
18
|
-
context: HandlerContext
|
|
19
|
-
): void {
|
|
16
|
+
protected handleValidated(message: RoomOperationResponse, context: HandlerContext): void {
|
|
20
17
|
const { success, message: errorMessage, room_id, room } = message.data;
|
|
21
18
|
|
|
22
19
|
context.logger.debug("Handling room_operation_response", {
|
|
@@ -62,7 +59,7 @@ export class RoomOperationResponseHandler extends BaseMessageHandler<RoomOperati
|
|
|
62
59
|
// For now, handlers will emit both and listeners filter by room_id
|
|
63
60
|
|
|
64
61
|
// Update cache via room management manager if available
|
|
65
|
-
const roomManager =
|
|
62
|
+
const roomManager = context.roomManagementManager;
|
|
66
63
|
if (roomManager && typeof roomManager.upsertRoom === "function") {
|
|
67
64
|
roomManager.upsertRoom(room);
|
|
68
65
|
}
|
|
@@ -83,7 +80,7 @@ export class RoomOperationResponseHandler extends BaseMessageHandler<RoomOperati
|
|
|
83
80
|
context.logger.info("Room deleted", { roomId: room_id });
|
|
84
81
|
|
|
85
82
|
// Remove from cache
|
|
86
|
-
const roomManager =
|
|
83
|
+
const roomManager = context.roomManagementManager;
|
|
87
84
|
if (roomManager && typeof roomManager.removeRoom === "function") {
|
|
88
85
|
roomManager.removeRoom(room_id);
|
|
89
86
|
}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Processes room subscription confirmations
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { SubscribeResponse, SubscribeResponseSchema } from "../../types";
|
|
6
|
+
import { SubscribeResponse, SubscribeResponseSchema, ErrorCode } from "../../types";
|
|
7
|
+
import { SDKError } from "../../types/events";
|
|
7
8
|
import { BaseMessageHandler } from "./base-handler";
|
|
8
9
|
import { HandlerContext } from "./types";
|
|
9
10
|
|
|
@@ -41,7 +42,16 @@ export class SubscribeResponseHandler extends BaseMessageHandler<SubscribeRespon
|
|
|
41
42
|
});
|
|
42
43
|
|
|
43
44
|
// Emit error event
|
|
44
|
-
this.emit(
|
|
45
|
+
this.emit(
|
|
46
|
+
context,
|
|
47
|
+
"error",
|
|
48
|
+
new SDKError(
|
|
49
|
+
`Subscription failed: ${message.data.message}`,
|
|
50
|
+
ErrorCode.OPERATION_FAILED,
|
|
51
|
+
{ roomId: message.data.room_id },
|
|
52
|
+
true
|
|
53
|
+
)
|
|
54
|
+
);
|
|
45
55
|
}
|
|
46
56
|
}
|
|
47
57
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for task_quote messages (v2.2.0)
|
|
3
|
+
* Processes quotes from the coordinator for the quote-approve payment flow
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { TaskQuoteMessage, TaskQuoteMessageSchema } from "../../types";
|
|
8
|
+
import { BaseMessageHandler } from "./base-handler";
|
|
9
|
+
import { HandlerContext } from "./types";
|
|
10
|
+
|
|
11
|
+
export class TaskQuoteHandler extends BaseMessageHandler<TaskQuoteMessage> {
|
|
12
|
+
readonly type = "task_quote" as const;
|
|
13
|
+
readonly schema = TaskQuoteMessageSchema as z.ZodSchema<TaskQuoteMessage>;
|
|
14
|
+
|
|
15
|
+
protected handleValidated(message: TaskQuoteMessage, context: HandlerContext): void {
|
|
16
|
+
context.logger.debug("Handling task_quote message", {
|
|
17
|
+
taskId: message.data.task_id,
|
|
18
|
+
agentId: message.data.agent_id,
|
|
19
|
+
price: message.data.pricing?.pricePerUnit
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// Emit quote:received event for MessageRouter to pick up
|
|
23
|
+
this.emit(context, "quote:received", message);
|
|
24
|
+
|
|
25
|
+
// Send webhook (fire-and-forget)
|
|
26
|
+
this.sendWebhook(context, "task_quote", message.data, {
|
|
27
|
+
taskId: message.data.task_id,
|
|
28
|
+
agentId: message.data.agent_id
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|