@teneo-protocol/sdk 1.0.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.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 +9 -6
- package/.github/workflows/push-to-main.yml +1 -1
- package/.github/workflows/top-issue.yml +102 -0
- package/CHANGELOG.md +334 -0
- package/CONCEPTS.md +747 -0
- package/README.md +577 -54
- package/dist/constants.js +8 -8
- package/dist/constants.js.map +1 -1
- package/dist/core/websocket-client.d.ts +25 -1
- package/dist/core/websocket-client.d.ts.map +1 -1
- package/dist/core/websocket-client.js +74 -15
- 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 +76 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +67 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts +92 -38
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts.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 +1687 -0
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-status-update-handler.js +48 -0
- package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -0
- 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.d.ts +45 -31
- package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -1
- 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 +6 -0
- package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.js +71 -10
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-required-handler.d.ts +49 -31
- package/dist/handlers/message-handlers/auth-required-handler.d.ts.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 +6 -0
- package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.js +52 -9
- 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.d.ts +45 -31
- package/dist/handlers/message-handlers/challenge-handler.d.ts.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.d.ts +49 -31
- package/dist/handlers/message-handlers/error-message-handler.d.ts.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 +11 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.js +55 -1
- package/dist/handlers/message-handlers/index.js.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +1660 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.js +35 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +1669 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.js +48 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +2 -110
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +4 -6
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts +62 -58
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts.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 +31 -29
- 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 +328 -0
- package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/room-operation-response-handler.js +89 -0
- package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +53 -31
- 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 -7
- package/dist/handlers/message-handlers/types.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +53 -31
- 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 +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2
- 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 +216 -0
- package/dist/managers/agent-room-manager.d.ts.map +1 -0
- package/dist/managers/agent-room-manager.js +555 -0
- package/dist/managers/agent-room-manager.js.map +1 -0
- package/dist/managers/connection-manager.js +2 -0
- package/dist/managers/connection-manager.js.map +1 -1
- package/dist/managers/index.d.ts +4 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/index.js +7 -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 +213 -0
- package/dist/managers/room-management-manager.d.ts.map +1 -0
- package/dist/managers/room-management-manager.js +442 -0
- package/dist/managers/room-management-manager.js.map +1 -0
- package/dist/managers/room-manager.d.ts +11 -9
- 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 +467 -33
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +735 -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 +134 -54
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +70 -9
- package/dist/types/config.js.map +1 -1
- package/dist/types/error-codes.d.ts +10 -0
- package/dist/types/error-codes.d.ts.map +1 -1
- package/dist/types/error-codes.js +12 -0
- package/dist/types/error-codes.js.map +1 -1
- package/dist/types/events.d.ts +176 -68
- 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 +57 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +22225 -2592
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +537 -28
- 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 +2 -2
- package/examples/agent-room-management-example.ts +335 -0
- package/examples/basic-usage.ts +3 -4
- package/examples/claude-agent-x-follower/.env.example +3 -3
- package/examples/claude-agent-x-follower/QUICKSTART.md +3 -3
- package/examples/claude-agent-x-follower/README.md +3 -3
- package/examples/claude-agent-x-follower/index.ts +120 -96
- package/examples/n8n-teneo/.env.example +3 -3
- package/examples/n8n-teneo/README.md +2 -2
- 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 +3 -3
- package/examples/openai-teneo/README.md +3 -3
- package/examples/openai-teneo/index.ts +82 -71
- package/examples/production-dashboard/.env.example +3 -3
- package/examples/production-dashboard/README.md +90 -13
- package/examples/production-dashboard/public/dashboard.html +1173 -601
- package/examples/production-dashboard/server.ts +349 -7
- package/examples/room-management-example.ts +282 -0
- package/examples/usage/.env.example +2 -2
- 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/usage/README.md +1 -1
- package/examples/webhook-integration.ts +1 -1
- package/examples/x-influencer-battle-server.ts +2 -2
- package/package.json +12 -1
- package/src/core/websocket-client.test.ts +8 -3
- package/src/core/websocket-client.ts +58 -4
- 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 +77 -0
- package/src/handlers/message-handlers/agent-status-update-handler.ts +52 -0
- package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +78 -5
- package/src/handlers/message-handlers/auth-success-handler.ts +63 -6
- package/src/handlers/message-handlers/base-handler.ts +20 -7
- package/src/handlers/message-handlers/index.ts +53 -0
- package/src/handlers/message-handlers/list-available-agents-handler.ts +41 -0
- package/src/handlers/message-handlers/list-room-agents-handler.ts +58 -0
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +4 -2
- 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 +102 -0
- 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 +41 -7
- 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 +21 -0
- 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 +665 -0
- package/src/managers/index.ts +15 -1
- package/src/managers/message-router.ts +215 -17
- package/src/managers/room-management-manager.ts +520 -0
- package/src/managers/room-manager.ts +15 -20
- package/src/payments/index.ts +22 -0
- package/src/payments/payment-client.ts +240 -0
- package/src/teneo-sdk.ts +806 -30
- package/src/types/categories.ts +45 -0
- package/src/types/config.ts +80 -7
- package/src/types/error-codes.ts +14 -0
- package/src/types/events.test.ts +1 -0
- package/src/types/events.ts +67 -0
- package/src/types/index.ts +111 -0
- package/src/types/messages.test.ts +2 -1
- package/src/types/messages.ts +677 -42
- 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 +516 -0
- package/tests/integration/websocket.test.ts +5 -2
- package/tests/payment-flow-test.ts +147 -0
- package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +382 -0
- package/tests/unit/handlers/agent-status-update-handler.test.ts +403 -0
- package/tests/unit/handlers/auth-success-handler-rooms.test.ts +697 -0
- package/tests/unit/handlers/list-available-agents-handler.test.ts +248 -0
- package/tests/unit/handlers/list-room-agents-handler.test.ts +290 -0
- package/tests/unit/handlers/room-operation-response-handler.test.ts +500 -0
- package/tests/unit/managers/agent-room-manager.test.ts +527 -0
- package/tests/unit/managers/room-management-manager.test.ts +420 -0
- package/tsconfig.json +2 -2
- package/vitest.config.ts +1 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Teneo SDK Examples - Environment Configuration
|
|
2
2
|
# Copy this file to .env and fill in your actual values
|
|
3
3
|
|
|
4
|
-
# Required: WebSocket URL for Teneo
|
|
5
|
-
WS_URL=wss://
|
|
4
|
+
# Required: WebSocket URL for Teneo Protocol
|
|
5
|
+
WS_URL=wss://your-teneo-server.com/ws
|
|
6
6
|
|
|
7
7
|
# Required: Your Ethereum private key (keep this secret!)
|
|
8
8
|
PRIVATE_KEY=your-private-key-here
|
|
@@ -14,8 +14,7 @@ import "dotenv/config";
|
|
|
14
14
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
15
15
|
|
|
16
16
|
// Load configuration from environment
|
|
17
|
-
const WS_URL =
|
|
18
|
-
process.env.WS_URL || "wss://dev-rooms-websocket-ai-core-o9fmb.ondigitalocean.app/ws";
|
|
17
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
19
18
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
20
19
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
21
20
|
|
|
@@ -80,8 +79,8 @@ async function main() {
|
|
|
80
79
|
console.log("✅ Event listeners configured\n");
|
|
81
80
|
|
|
82
81
|
try {
|
|
83
|
-
// Step 4: Connect to Teneo
|
|
84
|
-
console.log("⚙️ Step 4: Connecting to Teneo
|
|
82
|
+
// Step 4: Connect to Teneo Protocol
|
|
83
|
+
console.log("⚙️ Step 4: Connecting to Teneo Protocol...");
|
|
85
84
|
await sdk.connect();
|
|
86
85
|
console.log("✅ Connected and authenticated!\n");
|
|
87
86
|
|
|
@@ -14,8 +14,7 @@ import "dotenv/config";
|
|
|
14
14
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
15
15
|
|
|
16
16
|
// Load configuration from environment
|
|
17
|
-
const WS_URL =
|
|
18
|
-
process.env.WS_URL || "wss://dev-rooms-websocket-ai-core-o9fmb.ondigitalocean.app/ws";
|
|
17
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
19
18
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
20
19
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
21
20
|
|
|
@@ -44,7 +43,7 @@ async function main() {
|
|
|
44
43
|
|
|
45
44
|
try {
|
|
46
45
|
// Connect to Teneo
|
|
47
|
-
console.log("🔌 Connecting to Teneo
|
|
46
|
+
console.log("🔌 Connecting to Teneo Protocol...");
|
|
48
47
|
await sdk.connect();
|
|
49
48
|
console.log("✅ Connected!\n");
|
|
50
49
|
|
|
@@ -15,8 +15,7 @@ import "dotenv/config";
|
|
|
15
15
|
import { TeneoSDK, SDKConfigBuilder, FormattedResponse } from "../../dist/index.js";
|
|
16
16
|
|
|
17
17
|
// Load configuration from environment
|
|
18
|
-
const WS_URL =
|
|
19
|
-
process.env.WS_URL || "wss://dev-rooms-websocket-ai-core-o9fmb.ondigitalocean.app/ws";
|
|
18
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
20
19
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
21
20
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
22
21
|
|
|
@@ -52,7 +51,7 @@ async function main() {
|
|
|
52
51
|
|
|
53
52
|
try {
|
|
54
53
|
// Connect
|
|
55
|
-
console.log("🔌 Connecting to Teneo
|
|
54
|
+
console.log("🔌 Connecting to Teneo Protocol...");
|
|
56
55
|
await sdk.connect();
|
|
57
56
|
console.log("✅ Connected!\n");
|
|
58
57
|
|
|
@@ -15,8 +15,7 @@ import "dotenv/config";
|
|
|
15
15
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
16
16
|
|
|
17
17
|
// Load configuration from environment
|
|
18
|
-
const WS_URL =
|
|
19
|
-
process.env.WS_URL || "wss://dev-rooms-websocket-ai-core-o9fmb.ondigitalocean.app/ws";
|
|
18
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
20
19
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
21
20
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
22
21
|
|
|
@@ -40,7 +39,7 @@ async function main() {
|
|
|
40
39
|
|
|
41
40
|
try {
|
|
42
41
|
// Connect
|
|
43
|
-
console.log("🔌 Connecting to Teneo
|
|
42
|
+
console.log("🔌 Connecting to Teneo Protocol...");
|
|
44
43
|
await sdk.connect();
|
|
45
44
|
console.log("✅ Connected!\n");
|
|
46
45
|
|
|
@@ -26,8 +26,7 @@ import express from "express";
|
|
|
26
26
|
import type { Request, Response } from "express";
|
|
27
27
|
|
|
28
28
|
// Load configuration from environment
|
|
29
|
-
const WS_URL =
|
|
30
|
-
process.env.WS_URL || "wss://dev-rooms-websocket-ai-core-o9fmb.ondigitalocean.app/ws";
|
|
29
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
31
30
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
32
31
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
33
32
|
const WEBHOOK_PORT = parseInt(process.env.WEBHOOK_PORT || "3001");
|
|
@@ -177,7 +176,7 @@ async function main() {
|
|
|
177
176
|
|
|
178
177
|
try {
|
|
179
178
|
// Step 4: Connect to Teneo
|
|
180
|
-
console.log("⚙️ Step 4: Connecting to Teneo
|
|
179
|
+
console.log("⚙️ Step 4: Connecting to Teneo Protocol...");
|
|
181
180
|
await sdk.connect();
|
|
182
181
|
console.log("✅ Connected!\n");
|
|
183
182
|
|
|
@@ -21,8 +21,7 @@ import type { Request, Response } from "express";
|
|
|
21
21
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
22
22
|
|
|
23
23
|
// Load configuration from environment
|
|
24
|
-
const WS_URL =
|
|
25
|
-
process.env.WS_URL || "wss://dev-rooms-websocket-ai-core-o9fmb.ondigitalocean.app/ws";
|
|
24
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
26
25
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
27
26
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
28
27
|
const PORT = parseInt(process.env.PORT || "3000");
|
|
@@ -78,7 +77,7 @@ sdk.on("error", (error) => {
|
|
|
78
77
|
});
|
|
79
78
|
|
|
80
79
|
// Connect to Teneo
|
|
81
|
-
console.log("🔌 Connecting to Teneo
|
|
80
|
+
console.log("🔌 Connecting to Teneo Protocol...");
|
|
82
81
|
await sdk.connect();
|
|
83
82
|
console.log("✅ Connected!\n");
|
|
84
83
|
|
|
@@ -15,8 +15,7 @@ import "dotenv/config";
|
|
|
15
15
|
import { TeneoSDK, SDKConfigBuilder } from "../../dist/index.js";
|
|
16
16
|
|
|
17
17
|
// Load configuration from environment
|
|
18
|
-
const WS_URL =
|
|
19
|
-
process.env.WS_URL || "wss://dev-rooms-websocket-ai-core-o9fmb.ondigitalocean.app/ws";
|
|
18
|
+
const WS_URL = process.env.WS_URL || "wss://your-teneo-server.com/ws";
|
|
20
19
|
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
|
|
21
20
|
const DEFAULT_ROOM = process.env.DEFAULT_ROOM || "general";
|
|
22
21
|
|
|
@@ -336,7 +335,7 @@ async function main() {
|
|
|
336
335
|
// ============================================================================
|
|
337
336
|
|
|
338
337
|
try {
|
|
339
|
-
console.log("📡 Connecting to Teneo
|
|
338
|
+
console.log("📡 Connecting to Teneo Protocol...\n");
|
|
340
339
|
console.log("=".repeat(80));
|
|
341
340
|
console.log("Listening to all events... (will run for 30 seconds)");
|
|
342
341
|
console.log("=".repeat(80) + "\n");
|
package/examples/usage/README.md
CHANGED
|
@@ -29,7 +29,7 @@ Create a `.env` file in the project root or export these variables:
|
|
|
29
29
|
```bash
|
|
30
30
|
# Required
|
|
31
31
|
PRIVATE_KEY=your_ethereum_private_key_here
|
|
32
|
-
WS_URL=wss://
|
|
32
|
+
WS_URL=wss://your-teneo-server.com/ws
|
|
33
33
|
|
|
34
34
|
# Optional
|
|
35
35
|
DEFAULT_ROOM=general
|
|
@@ -64,7 +64,7 @@ async function initSDK() {
|
|
|
64
64
|
|
|
65
65
|
// Set up event listeners
|
|
66
66
|
sdk.on("connection:open", () => {
|
|
67
|
-
console.log("[SDK] Connected to Teneo
|
|
67
|
+
console.log("[SDK] Connected to Teneo Protocol");
|
|
68
68
|
});
|
|
69
69
|
|
|
70
70
|
sdk.on("auth:success", (state) => {
|
|
@@ -137,7 +137,7 @@ wss.on("connection", (ws: WebSocket) => {
|
|
|
137
137
|
ws.send(
|
|
138
138
|
JSON.stringify({
|
|
139
139
|
type: "error",
|
|
140
|
-
message: "Not connected to Teneo
|
|
140
|
+
message: "Not connected to Teneo Protocol"
|
|
141
141
|
})
|
|
142
142
|
);
|
|
143
143
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teneo-protocol/sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "TypeScript SDK for external platforms to interact with Teneo agents",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,13 +15,24 @@
|
|
|
15
15
|
],
|
|
16
16
|
"author": "Teneo Protocol",
|
|
17
17
|
"license": "AGPL-3.0",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/TeneoProtocolAI/teneo-sdk.git"
|
|
21
|
+
},
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/TeneoProtocolAI/teneo-sdk/issues"
|
|
24
|
+
},
|
|
25
|
+
"homepage": "https://github.com/TeneoProtocolAI/teneo-sdk#readme",
|
|
18
26
|
"dependencies": {
|
|
27
|
+
"@hono/node-server": "^1.19.6",
|
|
19
28
|
"eventemitter3": "^5.0.1",
|
|
29
|
+
"hono": "^4.10.4",
|
|
20
30
|
"node-fetch": "^3.3.2",
|
|
21
31
|
"pino": "^8.17.2",
|
|
22
32
|
"uuid": "^9.0.1",
|
|
23
33
|
"viem": "^2.37.11",
|
|
24
34
|
"ws": "^8.16.0",
|
|
35
|
+
"x402": "^0.7.3",
|
|
25
36
|
"zod": "^3.22.4"
|
|
26
37
|
},
|
|
27
38
|
"devDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
2
|
import { WebSocketClient } from "./websocket-client";
|
|
3
|
-
import { ConnectionError
|
|
3
|
+
import { ConnectionError } from "../types/events";
|
|
4
4
|
import type { SDKConfig } from "../types/config";
|
|
5
5
|
import WebSocket from "ws";
|
|
6
6
|
import { privateKeyToAccount } from "viem/accounts";
|
|
@@ -21,10 +21,13 @@ vi.mock("viem/accounts", () => ({
|
|
|
21
21
|
describe("WebSocketClient", () => {
|
|
22
22
|
let client: WebSocketClient;
|
|
23
23
|
let mockConfig: SDKConfig;
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
25
|
let mockWs: any;
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
27
|
let mockAccount: any;
|
|
26
28
|
|
|
27
29
|
// Helper to simulate successful authentication
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
31
|
const simulateAuth = (client: any) => {
|
|
29
32
|
// Update auth state to bypass authentication wait
|
|
30
33
|
client.updateAuthState({ authenticated: true });
|
|
@@ -49,9 +52,11 @@ describe("WebSocketClient", () => {
|
|
|
49
52
|
mockWs = {
|
|
50
53
|
on: vi.fn(),
|
|
51
54
|
once: vi.fn(),
|
|
52
|
-
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
send: vi.fn((data: unknown, callback?: () => void) => callback && callback()),
|
|
53
57
|
close: vi.fn(),
|
|
54
|
-
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
+
ping: vi.fn((callback?: () => void) => callback && callback()),
|
|
55
60
|
terminate: vi.fn(),
|
|
56
61
|
readyState: WebSocket.OPEN,
|
|
57
62
|
CONNECTING: 0,
|
|
@@ -55,7 +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?:
|
|
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
|
|
59
63
|
private intentionalDisconnect: boolean = false; // Track intentional disconnect to prevent reconnection
|
|
60
64
|
|
|
61
65
|
private connectionState: ConnectionState = {
|
|
@@ -73,6 +77,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
73
77
|
private pendingMessages = new Map<
|
|
74
78
|
string,
|
|
75
79
|
{
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
81
|
resolve: (value: any) => void;
|
|
77
82
|
reject: (error: Error) => void;
|
|
78
83
|
timeout: NodeJS.Timeout;
|
|
@@ -159,6 +164,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
159
164
|
// Initialize signature verifier if configured (SEC-2)
|
|
160
165
|
if (this.config.validateSignatures) {
|
|
161
166
|
this.signatureVerifier = new SignatureVerifier({
|
|
167
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
162
168
|
trustedAddresses: this.config.trustedAgentAddresses as any[],
|
|
163
169
|
requireSignaturesFor: this.config.requireSignaturesFor,
|
|
164
170
|
strictMode: this.config.strictSignatureValidation
|
|
@@ -207,10 +213,46 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
207
213
|
* Set the RoomManager instance for handler context
|
|
208
214
|
* Called by TeneoSDK after initialization
|
|
209
215
|
*/
|
|
210
|
-
public setRoomManager(roomManager:
|
|
216
|
+
public setRoomManager(roomManager: import("../managers/room-manager").RoomManager): void {
|
|
211
217
|
this.roomManager = roomManager;
|
|
212
218
|
}
|
|
213
219
|
|
|
220
|
+
/**
|
|
221
|
+
* Sets the room management manager for room CRUD operations (v2.0.0)
|
|
222
|
+
* @internal
|
|
223
|
+
*/
|
|
224
|
+
public setRoomManagementManager(
|
|
225
|
+
roomManagementManager: import("../managers/room-management-manager").RoomManagementManager
|
|
226
|
+
): void {
|
|
227
|
+
this.roomManagementManager = roomManagementManager;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Sets the agent room manager for agent-room operations (v2.0.0)
|
|
232
|
+
* @internal
|
|
233
|
+
*/
|
|
234
|
+
public setAgentRoomManager(
|
|
235
|
+
agentRoomManager: import("../managers/agent-room-manager").AgentRoomManager
|
|
236
|
+
): void {
|
|
237
|
+
this.agentRoomManager = agentRoomManager;
|
|
238
|
+
}
|
|
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
|
+
|
|
214
256
|
/**
|
|
215
257
|
* Establishes a WebSocket connection to the Teneo server.
|
|
216
258
|
* Handles connection timeout, authentication challenge-response flow,
|
|
@@ -296,7 +338,11 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
296
338
|
if (parseResult.success) {
|
|
297
339
|
this.handleMessage(parseResult.data as BaseMessage);
|
|
298
340
|
} else {
|
|
299
|
-
|
|
341
|
+
// Use warn instead of error - allows SDK to be more resilient
|
|
342
|
+
this.logger.warn("Received message with unknown or invalid format", {
|
|
343
|
+
type: rawMessage?.type,
|
|
344
|
+
error: parseResult.error?.message
|
|
345
|
+
});
|
|
300
346
|
this.emit(
|
|
301
347
|
"message:error",
|
|
302
348
|
new ValidationError("Invalid message format", parseResult.error),
|
|
@@ -494,7 +540,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
494
540
|
this.logger.error("Failed to send message", error);
|
|
495
541
|
reject(error);
|
|
496
542
|
} else {
|
|
497
|
-
this.logger.debug("Message sent",
|
|
543
|
+
this.logger.debug("Message sent", validatedMessage);
|
|
498
544
|
this.emit("message:sent", validatedMessage);
|
|
499
545
|
resolve();
|
|
500
546
|
}
|
|
@@ -522,6 +568,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
522
568
|
* console.log('Response received:', response);
|
|
523
569
|
* ```
|
|
524
570
|
*/
|
|
571
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
525
572
|
public async sendMessageWithResponse<T = any>(
|
|
526
573
|
message: BaseMessage,
|
|
527
574
|
timeout?: number
|
|
@@ -641,6 +688,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
641
688
|
*/
|
|
642
689
|
private createHandlerContext(): HandlerContext {
|
|
643
690
|
return {
|
|
691
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
644
692
|
emit: (event: string, ...args: any[]) => this.emit(event as any, ...args),
|
|
645
693
|
sendWebhook: async () => {
|
|
646
694
|
// Webhooks are handled by WebhookHandler in TeneoSDK
|
|
@@ -650,9 +698,15 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
650
698
|
logger: this.logger,
|
|
651
699
|
getConnectionState: () => this.getConnectionState(),
|
|
652
700
|
getAuthState: () => this.getAuthState(),
|
|
701
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
653
702
|
updateConnectionState: (update: any) => this.updateConnectionState(update),
|
|
703
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
654
704
|
updateAuthState: (update: any) => this.updateAuthState(update),
|
|
655
705
|
roomManager: this.roomManager,
|
|
706
|
+
roomManagementManager: this.roomManagementManager,
|
|
707
|
+
agentRoomManager: this.agentRoomManager,
|
|
708
|
+
adminManager: this.adminManager,
|
|
709
|
+
agentRegistry: this.agentRegistry,
|
|
656
710
|
account: this.account,
|
|
657
711
|
sendMessage: (message: BaseMessage) => this.sendMessage(message)
|
|
658
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
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for agent_room_operation_response messages (v2.0.0)
|
|
3
|
+
* Processes responses from agent-room operations (add, remove)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { AgentRoomOperationResponse, AgentRoomOperationResponseSchema } from "../../types";
|
|
7
|
+
import { BaseMessageHandler } from "./base-handler";
|
|
8
|
+
import { HandlerContext } from "./types";
|
|
9
|
+
import { SDKError } from "../../types/events";
|
|
10
|
+
import { ErrorCode } from "../../types/error-codes";
|
|
11
|
+
|
|
12
|
+
export class AgentRoomOperationResponseHandler extends BaseMessageHandler<AgentRoomOperationResponse> {
|
|
13
|
+
readonly type = "agent_room_operation_response" as const;
|
|
14
|
+
readonly schema = AgentRoomOperationResponseSchema;
|
|
15
|
+
|
|
16
|
+
protected handleValidated(message: AgentRoomOperationResponse, context: HandlerContext): void {
|
|
17
|
+
const { success, message: errorMessage, room_id, agent_id } = message.data;
|
|
18
|
+
|
|
19
|
+
context.logger.debug("Handling agent_room_operation_response", {
|
|
20
|
+
success,
|
|
21
|
+
roomId: room_id,
|
|
22
|
+
agentId: agent_id
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
if (!success) {
|
|
26
|
+
// Operation failed - emit error events
|
|
27
|
+
const error = new SDKError(
|
|
28
|
+
errorMessage || "Agent room operation failed",
|
|
29
|
+
ErrorCode.OPERATION_FAILED
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
context.logger.error("Agent room operation failed", {
|
|
33
|
+
roomId: room_id,
|
|
34
|
+
agentId: agent_id,
|
|
35
|
+
error: errorMessage
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Emit both add and remove error events - listeners will filter by room/agent ID
|
|
39
|
+
this.emit(context, "agent_room:add_error", error, room_id);
|
|
40
|
+
this.emit(context, "agent_room:remove_error", error, room_id);
|
|
41
|
+
|
|
42
|
+
// Send webhook
|
|
43
|
+
this.sendWebhook(context, "agent_room_operation_error", {
|
|
44
|
+
success: false,
|
|
45
|
+
message: errorMessage,
|
|
46
|
+
room_id,
|
|
47
|
+
agent_id
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Operation succeeded
|
|
54
|
+
if (room_id && agent_id) {
|
|
55
|
+
context.logger.info("Agent room operation succeeded", {
|
|
56
|
+
roomId: room_id,
|
|
57
|
+
agentId: agent_id
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Emit success events
|
|
61
|
+
// The promise handlers in AgentRoomManager will filter by room_id and agent_id
|
|
62
|
+
this.emit(context, "agent_room:agent_added", room_id, agent_id);
|
|
63
|
+
this.emit(context, "agent_room:agent_removed", room_id, agent_id);
|
|
64
|
+
|
|
65
|
+
// Send webhook
|
|
66
|
+
this.sendWebhook(context, "agent_room_operation", {
|
|
67
|
+
success: true,
|
|
68
|
+
room_id,
|
|
69
|
+
agent_id,
|
|
70
|
+
message: "Agent room operation completed successfully"
|
|
71
|
+
});
|
|
72
|
+
} else {
|
|
73
|
+
// Unexpected: success but missing required fields
|
|
74
|
+
context.logger.warn("Agent room operation succeeded but missing room_id or agent_id");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for agent_status_update messages (v2.0.0)
|
|
3
|
+
* Processes real-time agent status updates for rooms
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { AgentStatusUpdateMessage, AgentStatusUpdateMessageSchema } from "../../types";
|
|
7
|
+
import { BaseMessageHandler } from "./base-handler";
|
|
8
|
+
import { HandlerContext } from "./types";
|
|
9
|
+
|
|
10
|
+
export class AgentStatusUpdateHandler extends BaseMessageHandler<AgentStatusUpdateMessage> {
|
|
11
|
+
readonly type = "agent_status_update" as const;
|
|
12
|
+
readonly schema = AgentStatusUpdateMessageSchema;
|
|
13
|
+
|
|
14
|
+
protected handleValidated(message: AgentStatusUpdateMessage, context: HandlerContext): void {
|
|
15
|
+
const { room_id, agent_id, status, agent } = message.data;
|
|
16
|
+
|
|
17
|
+
context.logger.debug("Handling agent_status_update", {
|
|
18
|
+
roomId: room_id,
|
|
19
|
+
agentId: agent_id,
|
|
20
|
+
status,
|
|
21
|
+
hasAgent: !!agent
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Invalidate cache for this room via agent room manager
|
|
25
|
+
const agentRoomManager = context.agentRoomManager;
|
|
26
|
+
if (agentRoomManager && typeof agentRoomManager.handleStatusUpdate === "function") {
|
|
27
|
+
agentRoomManager.handleStatusUpdate(room_id, agent_id, status);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
context.logger.info("Agent status updated", {
|
|
31
|
+
roomId: room_id,
|
|
32
|
+
agentId: agent_id,
|
|
33
|
+
status
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Emit status update event
|
|
37
|
+
this.emit(context, "agent_room:status_update", {
|
|
38
|
+
roomId: room_id,
|
|
39
|
+
agentId: agent_id,
|
|
40
|
+
status,
|
|
41
|
+
agent
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Send webhook
|
|
45
|
+
this.sendWebhook(context, "agent_status_update", {
|
|
46
|
+
room_id,
|
|
47
|
+
agent_id,
|
|
48
|
+
status,
|
|
49
|
+
agent
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -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
|
+
}
|