@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
package/dist/teneo-sdk.js
CHANGED
|
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
8
8
|
exports.TeneoSDK = exports.AgentCommandSchema = exports.SendMessageOptionsSchema = void 0;
|
|
9
9
|
const eventemitter3_1 = require("eventemitter3");
|
|
10
10
|
const zod_1 = require("zod");
|
|
11
|
+
const accounts_1 = require("viem/accounts");
|
|
11
12
|
const types_1 = require("./types");
|
|
12
13
|
const events_1 = require("./types/events");
|
|
13
14
|
const error_codes_1 = require("./types/error-codes");
|
|
@@ -17,6 +18,7 @@ const response_formatter_1 = require("./formatters/response-formatter");
|
|
|
17
18
|
const managers_1 = require("./managers");
|
|
18
19
|
const logger_1 = require("./utils/logger");
|
|
19
20
|
const validation_1 = require("./types/validation");
|
|
21
|
+
const secure_private_key_1 = require("./utils/secure-private-key");
|
|
20
22
|
// Zod schemas for SDK-specific interfaces
|
|
21
23
|
exports.SendMessageOptionsSchema = zod_1.z.object({
|
|
22
24
|
room: validation_1.RoomIdSchema.optional(),
|
|
@@ -31,6 +33,22 @@ exports.AgentCommandSchema = zod_1.z.object({
|
|
|
31
33
|
room: validation_1.RoomIdSchema.optional()
|
|
32
34
|
});
|
|
33
35
|
class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
36
|
+
config;
|
|
37
|
+
logger;
|
|
38
|
+
isDestroyed = false;
|
|
39
|
+
secureKey;
|
|
40
|
+
// Core components
|
|
41
|
+
wsClient;
|
|
42
|
+
webhookHandler;
|
|
43
|
+
responseFormatter;
|
|
44
|
+
// Managers
|
|
45
|
+
connection;
|
|
46
|
+
rooms;
|
|
47
|
+
roomManagement;
|
|
48
|
+
agentRoom;
|
|
49
|
+
agents;
|
|
50
|
+
messages;
|
|
51
|
+
_admin;
|
|
34
52
|
/**
|
|
35
53
|
* Creates a new instance of the Teneo Protocol SDK.
|
|
36
54
|
* Initializes all core components, managers, and validates the provided configuration.
|
|
@@ -81,7 +99,6 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
81
99
|
*/
|
|
82
100
|
constructor(config) {
|
|
83
101
|
super();
|
|
84
|
-
this.isDestroyed = false;
|
|
85
102
|
try {
|
|
86
103
|
// Validate partial config first
|
|
87
104
|
const partialConfig = types_1.PartialSDKConfigSchema.parse(config);
|
|
@@ -91,6 +108,15 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
91
108
|
this.config = (0, types_1.validateConfig)(fullConfig);
|
|
92
109
|
// Initialize logger
|
|
93
110
|
this.logger = this.config.logger ?? this.createDefaultLogger();
|
|
111
|
+
// Store secure key for payment client
|
|
112
|
+
if (config.privateKey) {
|
|
113
|
+
if (typeof config.privateKey === "object" && "use" in config.privateKey) {
|
|
114
|
+
this.secureKey = config.privateKey;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.secureKey = new secure_private_key_1.SecurePrivateKey(config.privateKey);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
94
120
|
// Initialize core components
|
|
95
121
|
this.wsClient = new websocket_client_1.WebSocketClient(this.config);
|
|
96
122
|
this.webhookHandler = new webhook_handler_1.WebhookHandler(this.config, this.logger);
|
|
@@ -101,12 +127,34 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
101
127
|
// Initialize managers
|
|
102
128
|
this.connection = new managers_1.ConnectionManager(this.wsClient, this.logger);
|
|
103
129
|
this.rooms = new managers_1.RoomManager(this.wsClient, this.logger);
|
|
130
|
+
this.roomManagement = new managers_1.RoomManagementManager(this.wsClient, this.logger);
|
|
131
|
+
this.agentRoom = new managers_1.AgentRoomManager(this.wsClient, this.logger, this.roomManagement);
|
|
104
132
|
this.wsClient.setRoomManager(this.rooms); // Enable subscription tracking in handlers
|
|
133
|
+
this.wsClient.setRoomManagementManager(this.roomManagement); // Enable room CRUD in handlers (v2.0.0)
|
|
134
|
+
this.wsClient.setAgentRoomManager(this.agentRoom); // Enable agent-room operations in handlers (v2.0.0)
|
|
105
135
|
this.agents = new managers_1.AgentRegistry(this.logger);
|
|
136
|
+
this.agents.setWebSocketClient(this.wsClient); // Enable getAgentDetails requests
|
|
137
|
+
this._admin = new managers_1.AdminManager(this.wsClient, this.logger);
|
|
138
|
+
this.wsClient.setAdminManager(this._admin); // Enable admin handlers
|
|
139
|
+
this.wsClient.setAgentRegistry(this.agents); // Enable agent details handler
|
|
106
140
|
this.messages = new managers_1.MessageRouter(this.wsClient, this.webhookHandler, this.responseFormatter, this.logger, {
|
|
107
141
|
messageTimeout: this.config.messageTimeout,
|
|
108
|
-
responseFormat: this.config.responseFormat
|
|
142
|
+
responseFormat: this.config.responseFormat,
|
|
143
|
+
autoApproveQuotes: this.config.autoApproveQuotes,
|
|
144
|
+
maxPricePerRequest: this.config.maxPricePerRequest,
|
|
145
|
+
quoteTimeout: this.config.quoteTimeout,
|
|
146
|
+
wsUrl: this.config.wsUrl,
|
|
147
|
+
paymentNetwork: this.config.paymentNetwork,
|
|
148
|
+
paymentAsset: this.config.paymentAsset
|
|
109
149
|
});
|
|
150
|
+
// Set up payment client if private key is configured (v2.2.0)
|
|
151
|
+
if (this.config.privateKey) {
|
|
152
|
+
const secureKey = this.config.privateKey instanceof secure_private_key_1.SecurePrivateKey
|
|
153
|
+
? this.config.privateKey
|
|
154
|
+
: new secure_private_key_1.SecurePrivateKey(this.config.privateKey);
|
|
155
|
+
const walletAddress = this.config.walletAddress || this.deriveWalletAddress(this.config.privateKey);
|
|
156
|
+
this.messages.setPaymentClient(secureKey, walletAddress);
|
|
157
|
+
}
|
|
110
158
|
// Set up event forwarding
|
|
111
159
|
this.setupEventForwarding();
|
|
112
160
|
this.logger.info("TeneoSDK initialized", { wsUrl: this.config.wsUrl });
|
|
@@ -119,7 +167,7 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
119
167
|
}
|
|
120
168
|
}
|
|
121
169
|
/**
|
|
122
|
-
* Establishes a connection to the Teneo
|
|
170
|
+
* Establishes a connection to the Teneo Protocol via WebSocket.
|
|
123
171
|
* Handles authentication automatically and joins any configured auto-join rooms.
|
|
124
172
|
* Emits 'connection:open', 'auth:success', and 'ready' events on successful connection.
|
|
125
173
|
*
|
|
@@ -132,7 +180,7 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
132
180
|
* ```typescript
|
|
133
181
|
* const sdk = new TeneoSDK({ wsUrl: 'wss://example.com', privateKey: '0x...' });
|
|
134
182
|
* await sdk.connect();
|
|
135
|
-
* console.log('Connected to Teneo
|
|
183
|
+
* console.log('Connected to Teneo Protocol');
|
|
136
184
|
* ```
|
|
137
185
|
*/
|
|
138
186
|
async connect() {
|
|
@@ -140,7 +188,7 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
140
188
|
throw new events_1.SDKError("SDK has been destroyed", error_codes_1.ErrorCode.SDK_DESTROYED, null, false);
|
|
141
189
|
}
|
|
142
190
|
try {
|
|
143
|
-
this.logger.info("Connecting to Teneo
|
|
191
|
+
this.logger.info("Connecting to Teneo Protocol");
|
|
144
192
|
await this.connection.connect();
|
|
145
193
|
// Auto-join rooms if configured
|
|
146
194
|
if (this.config.autoJoinRooms && this.config.autoJoinRooms.length > 0) {
|
|
@@ -148,26 +196,26 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
148
196
|
await this.rooms.subscribeToRoom(room);
|
|
149
197
|
}
|
|
150
198
|
}
|
|
151
|
-
this.logger.info("Successfully connected to Teneo
|
|
199
|
+
this.logger.info("Successfully connected to Teneo Protocol");
|
|
152
200
|
}
|
|
153
201
|
catch (error) {
|
|
154
|
-
this.logger.error("Failed to connect to Teneo
|
|
202
|
+
this.logger.error("Failed to connect to Teneo Protocol", error);
|
|
155
203
|
throw error;
|
|
156
204
|
}
|
|
157
205
|
}
|
|
158
206
|
/**
|
|
159
|
-
* Disconnects from the Teneo
|
|
207
|
+
* Disconnects from the Teneo Protocol and cleans up all active connections.
|
|
160
208
|
* Clears all timers, pending messages, and stops automatic reconnection attempts.
|
|
161
209
|
* Emits 'disconnect' event after disconnection is complete.
|
|
162
210
|
*
|
|
163
211
|
* @example
|
|
164
212
|
* ```typescript
|
|
165
213
|
* sdk.disconnect();
|
|
166
|
-
* console.log('Disconnected from Teneo
|
|
214
|
+
* console.log('Disconnected from Teneo Protocol');
|
|
167
215
|
* ```
|
|
168
216
|
*/
|
|
169
217
|
disconnect() {
|
|
170
|
-
this.logger.info("Disconnecting from Teneo
|
|
218
|
+
this.logger.info("Disconnecting from Teneo Protocol");
|
|
171
219
|
this.connection.disconnect();
|
|
172
220
|
}
|
|
173
221
|
/**
|
|
@@ -230,38 +278,64 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
230
278
|
return this.messages.sendDirectCommand(command, waitForResponse);
|
|
231
279
|
}
|
|
232
280
|
/**
|
|
233
|
-
*
|
|
234
|
-
*
|
|
281
|
+
* Requests a quote for a task from the coordinator.
|
|
282
|
+
* The quote includes agent selection, pricing, and expiration.
|
|
283
|
+
* Does NOT auto-approve - use confirmQuote() to execute.
|
|
284
|
+
*/
|
|
285
|
+
async requestQuote(content, room) {
|
|
286
|
+
return this.messages.requestQuote(content, room);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Confirms a pending quote and executes the task with payment.
|
|
290
|
+
* Attaches x402 payment header if payment client is configured.
|
|
291
|
+
*/
|
|
292
|
+
async confirmQuote(taskId, options) {
|
|
293
|
+
return this.messages.confirmQuote(taskId, options);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Gets a pending quote by task ID.
|
|
297
|
+
*/
|
|
298
|
+
getPendingQuote(taskId) {
|
|
299
|
+
return this.messages.getPendingQuote(taskId);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Subscribes to a public room in the Teneo Protocol.
|
|
303
|
+
* This is only needed for public rooms - private rooms are automatically subscribed.
|
|
235
304
|
* Emits 'room:subscribed' event when successfully subscribed.
|
|
236
305
|
*
|
|
237
|
-
* @param roomId - The ID of the room to subscribe to
|
|
306
|
+
* @param roomId - The ID of the public room to subscribe to
|
|
238
307
|
* @returns Promise that resolves when the room has been subscribed
|
|
239
308
|
* @throws {SDKError} If not connected to the network (ErrorCode.NOT_CONNECTED)
|
|
240
309
|
* @throws {ValidationError} If roomId is empty or invalid
|
|
241
310
|
*
|
|
242
311
|
* @example
|
|
243
312
|
* ```typescript
|
|
244
|
-
*
|
|
245
|
-
*
|
|
313
|
+
* // Subscribe to a public room
|
|
314
|
+
* await sdk.subscribeToRoom('public-announcements');
|
|
315
|
+
* console.log('Subscribed to public room');
|
|
316
|
+
*
|
|
317
|
+
* // Note: Private rooms don't need subscription - you're always subscribed
|
|
246
318
|
* ```
|
|
247
319
|
*/
|
|
248
320
|
async subscribeToRoom(roomId) {
|
|
249
321
|
return this.rooms.subscribeToRoom(roomId);
|
|
250
322
|
}
|
|
251
323
|
/**
|
|
252
|
-
* Unsubscribes from a
|
|
253
|
-
* You will no longer receive messages from
|
|
324
|
+
* Unsubscribes from a public room in the Teneo Protocol.
|
|
325
|
+
* You will no longer receive messages from this public room.
|
|
254
326
|
* Emits 'room:unsubscribed' event when successfully unsubscribed.
|
|
255
327
|
*
|
|
256
|
-
*
|
|
328
|
+
* Note: This only applies to public rooms. Private rooms cannot be unsubscribed from.
|
|
329
|
+
*
|
|
330
|
+
* @param roomId - The ID of the public room to unsubscribe from
|
|
257
331
|
* @returns Promise that resolves when the room has been unsubscribed
|
|
258
332
|
* @throws {SDKError} If not connected to the network (ErrorCode.NOT_CONNECTED)
|
|
259
333
|
* @throws {ValidationError} If roomId is empty or invalid
|
|
260
334
|
*
|
|
261
335
|
* @example
|
|
262
336
|
* ```typescript
|
|
263
|
-
* await sdk.unsubscribeFromRoom('
|
|
264
|
-
* console.log('Unsubscribed from
|
|
337
|
+
* await sdk.unsubscribeFromRoom('public-announcements');
|
|
338
|
+
* console.log('Unsubscribed from public room');
|
|
265
339
|
* ```
|
|
266
340
|
*/
|
|
267
341
|
async unsubscribeFromRoom(roomId) {
|
|
@@ -304,7 +378,7 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
304
378
|
return this.rooms.getSubscribedRooms();
|
|
305
379
|
}
|
|
306
380
|
/**
|
|
307
|
-
* Gets a list of all available agents in the Teneo
|
|
381
|
+
* Gets a list of all available agents in the Teneo Protocol.
|
|
308
382
|
* The list is automatically updated when new agents join or leave.
|
|
309
383
|
* Returns a read-only array to prevent external modification.
|
|
310
384
|
*
|
|
@@ -409,7 +483,80 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
409
483
|
return this.agents.findByStatus(status);
|
|
410
484
|
}
|
|
411
485
|
/**
|
|
412
|
-
*
|
|
486
|
+
* Fetches detailed information about a specific agent from the server.
|
|
487
|
+
* Makes a request to the server for full agent details including capabilities,
|
|
488
|
+
* commands, pricing, and more.
|
|
489
|
+
*
|
|
490
|
+
* @param agentId - The unique identifier of the agent
|
|
491
|
+
* @returns Promise that resolves with full agent details
|
|
492
|
+
* @throws {SDKError} If not connected or request times out
|
|
493
|
+
* @throws {ValidationError} If agentId is invalid
|
|
494
|
+
*
|
|
495
|
+
* @example
|
|
496
|
+
* ```typescript
|
|
497
|
+
* const details = await sdk.getAgentDetails('weather-agent-001');
|
|
498
|
+
* console.log(`Agent: ${details.agent_name}`);
|
|
499
|
+
* console.log(`Capabilities: ${details.capabilities?.length}`);
|
|
500
|
+
* console.log(`Status: ${details.status}`);
|
|
501
|
+
* ```
|
|
502
|
+
*/
|
|
503
|
+
async getAgentDetails(agentId) {
|
|
504
|
+
return this.agents.getAgentDetails(agentId);
|
|
505
|
+
}
|
|
506
|
+
// ============================================================================
|
|
507
|
+
// ADMIN API (Admin-Only Features)
|
|
508
|
+
// ============================================================================
|
|
509
|
+
/**
|
|
510
|
+
* Gets the admin manager for admin-only features.
|
|
511
|
+
* Returns undefined if the current user is not an admin.
|
|
512
|
+
* Use this to access admin APIs like listing all agents, user counts, etc.
|
|
513
|
+
*
|
|
514
|
+
* @returns The AdminManager instance if user is admin, undefined otherwise
|
|
515
|
+
*
|
|
516
|
+
* @example
|
|
517
|
+
* ```typescript
|
|
518
|
+
* if (sdk.admin?.isAdmin) {
|
|
519
|
+
* // List all agents in the network
|
|
520
|
+
* const result = await sdk.admin.listAllAgents({ limit: 20 });
|
|
521
|
+
* console.log(`Found ${result.total} agents`);
|
|
522
|
+
*
|
|
523
|
+
* result.agents.forEach(agent => {
|
|
524
|
+
* console.log(`${agent.agent_name}: verified=${agent.is_verified}, banned=${agent.is_banned}`);
|
|
525
|
+
* });
|
|
526
|
+
*
|
|
527
|
+
* // Get user count
|
|
528
|
+
* const userCount = sdk.admin.getLastUserCount();
|
|
529
|
+
* console.log(`Online users: ${userCount?.count}`);
|
|
530
|
+
*
|
|
531
|
+
* // Listen for user count updates
|
|
532
|
+
* sdk.admin.on('user_count', (data) => {
|
|
533
|
+
* console.log(`User count updated: ${data.count}`);
|
|
534
|
+
* });
|
|
535
|
+
* }
|
|
536
|
+
* ```
|
|
537
|
+
*/
|
|
538
|
+
get admin() {
|
|
539
|
+
return this._admin.isAdmin ? this._admin : undefined;
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Lists all agents in the network (admin only, convenience method).
|
|
543
|
+
* Returns paginated list of agents with full admin information.
|
|
544
|
+
*
|
|
545
|
+
* @param options - Pagination and filter options
|
|
546
|
+
* @returns Promise that resolves with agents list
|
|
547
|
+
* @throws {SDKError} If not connected or not an admin
|
|
548
|
+
*
|
|
549
|
+
* @example
|
|
550
|
+
* ```typescript
|
|
551
|
+
* const result = await sdk.listAllAgents({ limit: 50, filter: 'weather' });
|
|
552
|
+
* console.log(`Found ${result.total} agents matching 'weather'`);
|
|
553
|
+
* ```
|
|
554
|
+
*/
|
|
555
|
+
async listAllAgents(options = {}) {
|
|
556
|
+
return this._admin.listAllAgents(options);
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* Gets a list of all available rooms in the Teneo Protocol.
|
|
413
560
|
* Includes rooms you have access to based on your authentication.
|
|
414
561
|
* Returns a read-only array to prevent external modification.
|
|
415
562
|
*
|
|
@@ -448,6 +595,418 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
448
595
|
getRoom(roomId) {
|
|
449
596
|
return this.rooms.getRoom(roomId);
|
|
450
597
|
}
|
|
598
|
+
// ============================================================================
|
|
599
|
+
// ROOM MANAGEMENT API (v2.0.0)
|
|
600
|
+
// ============================================================================
|
|
601
|
+
/**
|
|
602
|
+
* Creates a new private or public room.
|
|
603
|
+
* Checks room limit before creating (for private rooms).
|
|
604
|
+
* Emits 'room:created' event on success, 'room:create_error' on failure.
|
|
605
|
+
*
|
|
606
|
+
* @param options - Room creation options
|
|
607
|
+
* @param options.name - Room name (1-100 characters)
|
|
608
|
+
* @param options.description - Optional room description (max 500 characters)
|
|
609
|
+
* @param options.isPublic - Whether room is public (default: false)
|
|
610
|
+
* @returns Promise that resolves with created room info
|
|
611
|
+
* @throws {SDKError} If not connected, over limit, or validation fails
|
|
612
|
+
*
|
|
613
|
+
* @example
|
|
614
|
+
* ```typescript
|
|
615
|
+
* const room = await sdk.createRoom({
|
|
616
|
+
* name: 'My Project Room',
|
|
617
|
+
* description: 'Collaboration space for my project',
|
|
618
|
+
* isPublic: false
|
|
619
|
+
* });
|
|
620
|
+
* console.log(`Created room: ${room.id}`);
|
|
621
|
+
* ```
|
|
622
|
+
*/
|
|
623
|
+
async createRoom(options) {
|
|
624
|
+
return this.roomManagement.createRoom(options);
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Updates an existing room's name and/or description.
|
|
628
|
+
* User must own the room to update it.
|
|
629
|
+
* Emits 'room:updated' event on success, 'room:update_error' on failure.
|
|
630
|
+
*
|
|
631
|
+
* @param roomId - ID of room to update
|
|
632
|
+
* @param updates - Fields to update
|
|
633
|
+
* @param updates.name - New room name (1-100 characters)
|
|
634
|
+
* @param updates.description - New room description (max 500 characters)
|
|
635
|
+
* @returns Promise that resolves with updated room info
|
|
636
|
+
* @throws {SDKError} If not connected, not owner, or validation fails
|
|
637
|
+
*
|
|
638
|
+
* @example
|
|
639
|
+
* ```typescript
|
|
640
|
+
* const room = await sdk.updateRoom('room-123', {
|
|
641
|
+
* name: 'Updated Room Name',
|
|
642
|
+
* description: 'New description'
|
|
643
|
+
* });
|
|
644
|
+
* ```
|
|
645
|
+
*/
|
|
646
|
+
async updateRoom(roomId, updates) {
|
|
647
|
+
return this.roomManagement.updateRoom(roomId, updates);
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* Deletes a room permanently.
|
|
651
|
+
* User must own the room to delete it.
|
|
652
|
+
* Emits 'room:deleted' event on success, 'room:delete_error' on failure.
|
|
653
|
+
*
|
|
654
|
+
* @param roomId - ID of room to delete
|
|
655
|
+
* @returns Promise that resolves when room is deleted
|
|
656
|
+
* @throws {SDKError} If not connected or not owner
|
|
657
|
+
*
|
|
658
|
+
* @example
|
|
659
|
+
* ```typescript
|
|
660
|
+
* await sdk.deleteRoom('room-123');
|
|
661
|
+
* console.log('Room deleted successfully');
|
|
662
|
+
* ```
|
|
663
|
+
*/
|
|
664
|
+
async deleteRoom(roomId) {
|
|
665
|
+
return this.roomManagement.deleteRoom(roomId);
|
|
666
|
+
}
|
|
667
|
+
/**
|
|
668
|
+
* Gets all rooms owned by the current user.
|
|
669
|
+
* Synchronous method that returns cached data from authentication.
|
|
670
|
+
*
|
|
671
|
+
* @returns Array of owned room info
|
|
672
|
+
*
|
|
673
|
+
* @example
|
|
674
|
+
* ```typescript
|
|
675
|
+
* const myRooms = sdk.getOwnedRooms();
|
|
676
|
+
* console.log(`I own ${myRooms.length} rooms`);
|
|
677
|
+
* myRooms.forEach(room => {
|
|
678
|
+
* console.log(`- ${room.name} (${room.id})`);
|
|
679
|
+
* });
|
|
680
|
+
* ```
|
|
681
|
+
*/
|
|
682
|
+
getOwnedRooms() {
|
|
683
|
+
return this.roomManagement.getOwnedRooms();
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* Gets all rooms the user is a member of (but doesn't own).
|
|
687
|
+
* Synchronous method that returns cached data from authentication.
|
|
688
|
+
*
|
|
689
|
+
* @returns Array of shared room info
|
|
690
|
+
*
|
|
691
|
+
* @example
|
|
692
|
+
* ```typescript
|
|
693
|
+
* const sharedRooms = sdk.getSharedRooms();
|
|
694
|
+
* console.log(`I'm a member of ${sharedRooms.length} shared rooms`);
|
|
695
|
+
* ```
|
|
696
|
+
*/
|
|
697
|
+
getSharedRooms() {
|
|
698
|
+
return this.roomManagement.getSharedRooms();
|
|
699
|
+
}
|
|
700
|
+
/**
|
|
701
|
+
* Gets all rooms the user has access to (both owned and shared).
|
|
702
|
+
* Convenience method that combines getOwnedRooms() and getSharedRooms().
|
|
703
|
+
* Synchronous method that returns cached data from authentication.
|
|
704
|
+
*
|
|
705
|
+
* @returns Array of all room info (owned + shared)
|
|
706
|
+
*
|
|
707
|
+
* @example
|
|
708
|
+
* ```typescript
|
|
709
|
+
* const allRooms = sdk.getAllRooms();
|
|
710
|
+
* console.log(`I have access to ${allRooms.length} total rooms`);
|
|
711
|
+
*
|
|
712
|
+
* // You can filter by ownership if needed
|
|
713
|
+
* const myRooms = allRooms.filter(r => r.is_owner);
|
|
714
|
+
* const sharedWithMe = allRooms.filter(r => !r.is_owner);
|
|
715
|
+
* ```
|
|
716
|
+
*/
|
|
717
|
+
getAllRooms() {
|
|
718
|
+
return this.roomManagement.getAllRooms();
|
|
719
|
+
}
|
|
720
|
+
/**
|
|
721
|
+
* Gets the maximum number of private rooms the user can create.
|
|
722
|
+
* Based on user's subscription/plan.
|
|
723
|
+
*
|
|
724
|
+
* @returns Maximum private room limit
|
|
725
|
+
*
|
|
726
|
+
* @example
|
|
727
|
+
* ```typescript
|
|
728
|
+
* const limit = sdk.getRoomLimit();
|
|
729
|
+
* const current = sdk.getOwnedRoomCount();
|
|
730
|
+
* console.log(`Using ${current}/${limit} room slots`);
|
|
731
|
+
* ```
|
|
732
|
+
*/
|
|
733
|
+
getRoomLimit() {
|
|
734
|
+
return this.roomManagement.getRoomLimit();
|
|
735
|
+
}
|
|
736
|
+
/**
|
|
737
|
+
* Gets the current count of owned private rooms.
|
|
738
|
+
*
|
|
739
|
+
* @returns Number of rooms user owns
|
|
740
|
+
*
|
|
741
|
+
* @example
|
|
742
|
+
* ```typescript
|
|
743
|
+
* const count = sdk.getOwnedRoomCount();
|
|
744
|
+
* if (sdk.canCreateRoom()) {
|
|
745
|
+
* console.log(`Can create ${sdk.getRoomLimit() - count} more rooms`);
|
|
746
|
+
* }
|
|
747
|
+
* ```
|
|
748
|
+
*/
|
|
749
|
+
getOwnedRoomCount() {
|
|
750
|
+
return this.roomManagement.getOwnedRoomCount();
|
|
751
|
+
}
|
|
752
|
+
/**
|
|
753
|
+
* Checks if user can create another private room.
|
|
754
|
+
* Compares current owned room count against limit.
|
|
755
|
+
*
|
|
756
|
+
* @returns True if under limit, false otherwise
|
|
757
|
+
*
|
|
758
|
+
* @example
|
|
759
|
+
* ```typescript
|
|
760
|
+
* if (sdk.canCreateRoom()) {
|
|
761
|
+
* await sdk.createRoom({ name: 'New Room' });
|
|
762
|
+
* } else {
|
|
763
|
+
* console.log('Room limit reached! Upgrade your plan.');
|
|
764
|
+
* }
|
|
765
|
+
* ```
|
|
766
|
+
*/
|
|
767
|
+
canCreateRoom() {
|
|
768
|
+
return this.roomManagement.canCreateRoom();
|
|
769
|
+
}
|
|
770
|
+
// ============================================================================
|
|
771
|
+
// AGENT ROOM MANAGEMENT API (v2.0.0)
|
|
772
|
+
// ============================================================================
|
|
773
|
+
/**
|
|
774
|
+
* Adds an agent to a room. Only room owners can add agents.
|
|
775
|
+
* Emits 'agent_room:agent_added' on success, 'agent_room:add_error' on failure.
|
|
776
|
+
*
|
|
777
|
+
* @param roomId - ID of the room to add the agent to
|
|
778
|
+
* @param agentId - ID of the agent to add
|
|
779
|
+
* @returns Promise that resolves when agent is added
|
|
780
|
+
* @throws {SDKError} If not connected, not owner, or agent already in room
|
|
781
|
+
*
|
|
782
|
+
* @example
|
|
783
|
+
* ```typescript
|
|
784
|
+
* await sdk.addAgentToRoom('room-123', 'weather-agent');
|
|
785
|
+
* console.log('Agent added to room');
|
|
786
|
+
* ```
|
|
787
|
+
*/
|
|
788
|
+
async addAgentToRoom(roomId, agentId) {
|
|
789
|
+
return this.agentRoom.addAgentToRoom(roomId, agentId);
|
|
790
|
+
}
|
|
791
|
+
/**
|
|
792
|
+
* Removes an agent from a room. Only room owners can remove agents.
|
|
793
|
+
* Emits 'agent_room:agent_removed' on success, 'agent_room:remove_error' on failure.
|
|
794
|
+
*
|
|
795
|
+
* @param roomId - ID of the room to remove the agent from
|
|
796
|
+
* @param agentId - ID of the agent to remove
|
|
797
|
+
* @returns Promise that resolves when agent is removed
|
|
798
|
+
* @throws {SDKError} If not connected, not owner, or agent not in room
|
|
799
|
+
*
|
|
800
|
+
* @example
|
|
801
|
+
* ```typescript
|
|
802
|
+
* await sdk.removeAgentFromRoom('room-123', 'weather-agent');
|
|
803
|
+
* console.log('Agent removed from room');
|
|
804
|
+
* ```
|
|
805
|
+
*/
|
|
806
|
+
async removeAgentFromRoom(roomId, agentId) {
|
|
807
|
+
return this.agentRoom.removeAgentFromRoom(roomId, agentId);
|
|
808
|
+
}
|
|
809
|
+
/**
|
|
810
|
+
* Lists all agents in a room.
|
|
811
|
+
* Results are cached for 5 minutes for performance.
|
|
812
|
+
* Emits 'agent_room:agents_listed' when list is received.
|
|
813
|
+
*
|
|
814
|
+
* @param roomId - ID of the room to list agents for
|
|
815
|
+
* @param useCache - Whether to use cached data if available (default: true)
|
|
816
|
+
* @returns Promise that resolves to array of agents in the room
|
|
817
|
+
* @throws {SDKError} If not connected
|
|
818
|
+
*
|
|
819
|
+
* @example
|
|
820
|
+
* ```typescript
|
|
821
|
+
* const agents = await sdk.listRoomAgents('room-123');
|
|
822
|
+
* console.log(`Room has ${agents.length} agents`);
|
|
823
|
+
* agents.forEach(agent => {
|
|
824
|
+
* console.log(`- ${agent.agent_name} (${agent.status})`);
|
|
825
|
+
* });
|
|
826
|
+
* ```
|
|
827
|
+
*/
|
|
828
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
829
|
+
async listRoomAgents(roomId, useCache = true) {
|
|
830
|
+
return this.agentRoom.listRoomAgents(roomId, useCache);
|
|
831
|
+
}
|
|
832
|
+
/**
|
|
833
|
+
* Lists all agents available to be added to a room.
|
|
834
|
+
* Shows agents not currently in the room.
|
|
835
|
+
* Results are cached for 5 minutes for performance.
|
|
836
|
+
* Emits 'agent_room:available_agents_listed' when list is received.
|
|
837
|
+
*
|
|
838
|
+
* @param roomId - ID of the room to check available agents for
|
|
839
|
+
* @param useCache - Whether to use cached data if available (default: true)
|
|
840
|
+
* @returns Promise that resolves to array of available agents
|
|
841
|
+
* @throws {SDKError} If not connected
|
|
842
|
+
*
|
|
843
|
+
* @example
|
|
844
|
+
* ```typescript
|
|
845
|
+
* const available = await sdk.listAvailableAgents('room-123');
|
|
846
|
+
* console.log(`${available.length} agents available to add`);
|
|
847
|
+
* ```
|
|
848
|
+
*/
|
|
849
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
850
|
+
async listAvailableAgents(roomId, useCache = true) {
|
|
851
|
+
return this.agentRoom.listAvailableAgents(roomId, useCache);
|
|
852
|
+
}
|
|
853
|
+
/**
|
|
854
|
+
* Gets agents in a room from cache (synchronous).
|
|
855
|
+
* Returns undefined if not cached. Use listRoomAgents() to fetch.
|
|
856
|
+
*
|
|
857
|
+
* @param roomId - ID of the room
|
|
858
|
+
* @returns Array of agents if cached, undefined otherwise
|
|
859
|
+
*
|
|
860
|
+
* @example
|
|
861
|
+
* ```typescript
|
|
862
|
+
* const agents = sdk.getRoomAgents('room-123');
|
|
863
|
+
* if (agents) {
|
|
864
|
+
* console.log(`${agents.length} agents (cached)`);
|
|
865
|
+
* } else {
|
|
866
|
+
* await sdk.listRoomAgents('room-123'); // Fetch from server
|
|
867
|
+
* }
|
|
868
|
+
* ```
|
|
869
|
+
*/
|
|
870
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
871
|
+
getRoomAgents(roomId) {
|
|
872
|
+
return this.agentRoom.getRoomAgents(roomId);
|
|
873
|
+
}
|
|
874
|
+
/**
|
|
875
|
+
* Gets available agents for a room from cache (synchronous).
|
|
876
|
+
* Returns undefined if not cached. Use listAvailableAgents() to fetch.
|
|
877
|
+
*
|
|
878
|
+
* @param roomId - ID of the room
|
|
879
|
+
* @returns Array of available agents if cached, undefined otherwise
|
|
880
|
+
*
|
|
881
|
+
* @example
|
|
882
|
+
* ```typescript
|
|
883
|
+
* const available = sdk.getAvailableAgents('room-123');
|
|
884
|
+
* if (available) {
|
|
885
|
+
* console.log(`${available.length} agents available (cached)`);
|
|
886
|
+
* }
|
|
887
|
+
* ```
|
|
888
|
+
*/
|
|
889
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
890
|
+
getAvailableAgents(roomId) {
|
|
891
|
+
return this.agentRoom.getAvailableAgents(roomId);
|
|
892
|
+
}
|
|
893
|
+
/**
|
|
894
|
+
* Checks if an agent is in a room (synchronous, from cache).
|
|
895
|
+
* Returns undefined if room data not cached.
|
|
896
|
+
*
|
|
897
|
+
* @param roomId - ID of the room
|
|
898
|
+
* @param agentId - ID of the agent
|
|
899
|
+
* @returns True if agent is in room, false if not, undefined if not cached
|
|
900
|
+
*
|
|
901
|
+
* @example
|
|
902
|
+
* ```typescript
|
|
903
|
+
* const inRoom = sdk.isAgentInRoom('room-123', 'weather-agent');
|
|
904
|
+
* if (inRoom === true) {
|
|
905
|
+
* console.log('Agent is in room');
|
|
906
|
+
* } else if (inRoom === false) {
|
|
907
|
+
* console.log('Agent is not in room');
|
|
908
|
+
* } else {
|
|
909
|
+
* console.log('Room data not cached');
|
|
910
|
+
* }
|
|
911
|
+
* ```
|
|
912
|
+
*/
|
|
913
|
+
isAgentInRoom(roomId, agentId) {
|
|
914
|
+
return this.agentRoom.isAgentInRoom(roomId, agentId);
|
|
915
|
+
}
|
|
916
|
+
/**
|
|
917
|
+
* Gets the count of agents in a room (synchronous, from cache).
|
|
918
|
+
* Returns undefined if room data not cached.
|
|
919
|
+
*
|
|
920
|
+
* @param roomId - ID of the room
|
|
921
|
+
* @returns Number of agents in room, or undefined if not cached
|
|
922
|
+
*
|
|
923
|
+
* @example
|
|
924
|
+
* ```typescript
|
|
925
|
+
* const count = sdk.getRoomAgentCount('room-123');
|
|
926
|
+
* if (count !== undefined) {
|
|
927
|
+
* console.log(`Room has ${count} agents`);
|
|
928
|
+
* }
|
|
929
|
+
* ```
|
|
930
|
+
*/
|
|
931
|
+
getRoomAgentCount(roomId) {
|
|
932
|
+
return this.agentRoom.getRoomAgentCount(roomId);
|
|
933
|
+
}
|
|
934
|
+
/**
|
|
935
|
+
* Invalidates the agent-room cache for a specific room.
|
|
936
|
+
* Forces the next listRoomAgents() or listAvailableAgents() call to fetch fresh data.
|
|
937
|
+
* Useful after bulk operations or when you know the cache is stale.
|
|
938
|
+
*
|
|
939
|
+
* @param roomId - ID of the room to invalidate cache for
|
|
940
|
+
*
|
|
941
|
+
* @example
|
|
942
|
+
* ```typescript
|
|
943
|
+
* // After adding/removing agents
|
|
944
|
+
* await sdk.addAgentToRoom('room-123', 'agent-456');
|
|
945
|
+
* sdk.invalidateAgentRoomCache('room-123');
|
|
946
|
+
* const freshAgents = await sdk.listRoomAgents('room-123');
|
|
947
|
+
* ```
|
|
948
|
+
*/
|
|
949
|
+
invalidateAgentRoomCache(roomId) {
|
|
950
|
+
this.agentRoom.invalidateCache(roomId);
|
|
951
|
+
}
|
|
952
|
+
/**
|
|
953
|
+
* Updates user preferences on the server.
|
|
954
|
+
* Server-side enforcement of max price per request - prevents quotes/payments exceeding the limit.
|
|
955
|
+
*
|
|
956
|
+
* @param preferences - User preferences to update
|
|
957
|
+
* @param preferences.maxPricePerRequest - Max price per request in USDC (e.g., 0.01 = $0.01), or null to remove limit
|
|
958
|
+
* @returns Promise that resolves when preferences are updated
|
|
959
|
+
* @throws {SDKError} If update fails or times out
|
|
960
|
+
*
|
|
961
|
+
* @example
|
|
962
|
+
* ```typescript
|
|
963
|
+
* // Set a spending limit of $0.05 per request
|
|
964
|
+
* await sdk.setUserPreferences({ maxPricePerRequest: 0.05 });
|
|
965
|
+
*
|
|
966
|
+
* // Remove the spending limit
|
|
967
|
+
* await sdk.setUserPreferences({ maxPricePerRequest: null });
|
|
968
|
+
* ```
|
|
969
|
+
*/
|
|
970
|
+
async setUserPreferences(preferences) {
|
|
971
|
+
if (this.isDestroyed) {
|
|
972
|
+
throw new events_1.SDKError("SDK has been destroyed", error_codes_1.ErrorCode.SDK_DESTROYED, null, false);
|
|
973
|
+
}
|
|
974
|
+
const message = {
|
|
975
|
+
type: "set_user_preferences",
|
|
976
|
+
data: {
|
|
977
|
+
max_price_per_request: preferences.maxPricePerRequest
|
|
978
|
+
}
|
|
979
|
+
};
|
|
980
|
+
return new Promise((resolve, reject) => {
|
|
981
|
+
const timeout = setTimeout(() => {
|
|
982
|
+
cleanup();
|
|
983
|
+
reject(new events_1.SDKError("Set user preferences request timed out", error_codes_1.ErrorCode.TIMEOUT_ERROR));
|
|
984
|
+
}, 30000);
|
|
985
|
+
const handleResponse = (msg) => {
|
|
986
|
+
if (msg.type === "user_preferences_updated") {
|
|
987
|
+
cleanup();
|
|
988
|
+
if (msg.data?.success) {
|
|
989
|
+
this.emit("preferences:updated", {
|
|
990
|
+
maxPricePerRequest: msg.data.max_price_per_request
|
|
991
|
+
});
|
|
992
|
+
resolve();
|
|
993
|
+
}
|
|
994
|
+
else {
|
|
995
|
+
reject(new events_1.SDKError(msg.data?.message || "Failed to update preferences", error_codes_1.ErrorCode.MESSAGE_ERROR));
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
};
|
|
999
|
+
const cleanup = () => {
|
|
1000
|
+
clearTimeout(timeout);
|
|
1001
|
+
this.wsClient.off("message:received", handleResponse);
|
|
1002
|
+
};
|
|
1003
|
+
this.wsClient.on("message:received", handleResponse);
|
|
1004
|
+
this.wsClient.sendMessage(message).catch((error) => {
|
|
1005
|
+
cleanup();
|
|
1006
|
+
reject(error);
|
|
1007
|
+
});
|
|
1008
|
+
});
|
|
1009
|
+
}
|
|
451
1010
|
/**
|
|
452
1011
|
* Configures webhook URL and headers for receiving real-time event notifications.
|
|
453
1012
|
* Webhooks allow you to receive events at your server endpoint via HTTP POST requests.
|
|
@@ -534,7 +1093,7 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
534
1093
|
* This is a convenience getter that returns only the connection status.
|
|
535
1094
|
* For detailed state information, use getConnectionState().
|
|
536
1095
|
*
|
|
537
|
-
* @returns True if connected to the Teneo
|
|
1096
|
+
* @returns True if connected to the Teneo Protocol, false otherwise
|
|
538
1097
|
*
|
|
539
1098
|
* @example
|
|
540
1099
|
* ```typescript
|
|
@@ -554,7 +1113,7 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
554
1113
|
* This is a convenience getter that returns only the authentication status.
|
|
555
1114
|
* For detailed auth information, use getAuthState().
|
|
556
1115
|
*
|
|
557
|
-
* @returns True if authenticated with the Teneo
|
|
1116
|
+
* @returns True if authenticated with the Teneo Protocol, false otherwise
|
|
558
1117
|
*
|
|
559
1118
|
* @example
|
|
560
1119
|
* ```typescript
|
|
@@ -828,6 +1387,7 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
828
1387
|
this.rooms.destroy();
|
|
829
1388
|
this.agents.destroy();
|
|
830
1389
|
this.messages.destroy();
|
|
1390
|
+
this._admin.destroy();
|
|
831
1391
|
// Destroy other components
|
|
832
1392
|
this.webhookHandler.destroy();
|
|
833
1393
|
this.removeAllListeners();
|
|
@@ -849,12 +1409,28 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
849
1409
|
this.connection.on("auth:success", (state) => {
|
|
850
1410
|
this.logger.debug("Received auth:success event in SDK", {
|
|
851
1411
|
authenticated: state?.authenticated,
|
|
852
|
-
hasRooms: !!state?.roomObjects
|
|
1412
|
+
hasRooms: !!state?.roomObjects,
|
|
1413
|
+
ownedRooms: state?.privateRoomIds?.length || 0,
|
|
1414
|
+
sharedRooms: state?.sharedRoomIds?.length || 0
|
|
853
1415
|
});
|
|
854
1416
|
// Update rooms from auth state
|
|
855
1417
|
if (state.roomObjects) {
|
|
856
1418
|
this.rooms.updateRoomsFromAuth(state.roomObjects);
|
|
857
1419
|
}
|
|
1420
|
+
// Ensure RoomManagementManager is synced with auth state
|
|
1421
|
+
if (state.roomObjects && state.roomObjects.length > 0) {
|
|
1422
|
+
const ownedRooms = state.roomObjects.filter((r) => r.is_owner);
|
|
1423
|
+
const sharedRooms = state.roomObjects.filter((r) => !r.is_owner);
|
|
1424
|
+
this.roomManagement.setOwnedRooms(ownedRooms);
|
|
1425
|
+
this.roomManagement.setSharedRooms(sharedRooms);
|
|
1426
|
+
if (state.maxPrivateRooms) {
|
|
1427
|
+
this.roomManagement.setRoomLimit(state.maxPrivateRooms);
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
// Set up payment client for x402 payments
|
|
1431
|
+
if (this.secureKey && state.walletAddress) {
|
|
1432
|
+
this.messages.setPaymentClient(this.secureKey, state.walletAddress);
|
|
1433
|
+
}
|
|
858
1434
|
this.emit("auth:success", state);
|
|
859
1435
|
});
|
|
860
1436
|
this.connection.on("auth:error", (error) => this.emit("auth:error", error));
|
|
@@ -866,6 +1442,11 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
866
1442
|
// Forward agent events from MessageRouter
|
|
867
1443
|
this.messages.on("agent:selected", (data) => this.emit("agent:selected", data));
|
|
868
1444
|
this.messages.on("agent:response", (response) => this.emit("agent:response", response));
|
|
1445
|
+
// Forward quote and payment events from MessageRouter (v2.2.0)
|
|
1446
|
+
this.messages.on("quote:received", (quote) => this.emit("quote:received", quote));
|
|
1447
|
+
this.messages.on("payment:blocked", (data) => this.emit("payment:blocked", data));
|
|
1448
|
+
this.messages.on("payment:attached", (data) => this.emit("payment:attached", data));
|
|
1449
|
+
this.messages.on("payment:error", (error) => this.emit("payment:error", error));
|
|
869
1450
|
// Forward coordinator events from MessageRouter
|
|
870
1451
|
this.messages.on("coordinator:processing", (request) => this.emit("coordinator:processing", request));
|
|
871
1452
|
this.messages.on("coordinator:selected", (agentId, reasoning) => this.emit("coordinator:selected", agentId, reasoning));
|
|
@@ -877,6 +1458,121 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
877
1458
|
// Forward room events from WebSocketClient (emitted by room subscription handlers)
|
|
878
1459
|
this.wsClient.on("room:subscribed", (data) => this.emit("room:subscribed", data));
|
|
879
1460
|
this.wsClient.on("room:unsubscribed", (data) => this.emit("room:unsubscribed", data));
|
|
1461
|
+
// Forward room management events from WebSocketClient (emitted by handlers) (v2.0.0)
|
|
1462
|
+
// These events are emitted by message handlers, so we listen on wsClient
|
|
1463
|
+
// We forward to RoomManagementManager first (for promise resolution), then emit on SDK
|
|
1464
|
+
this.wsClient.on("room:created", (room) => {
|
|
1465
|
+
// Update RoomManagementManager cache
|
|
1466
|
+
this.roomManagement.upsertRoom(room);
|
|
1467
|
+
// Emit on RoomManagementManager for promise resolution (see createRoom method)
|
|
1468
|
+
this.roomManagement.emit("room:created", room);
|
|
1469
|
+
// Emit on SDK for external listeners
|
|
1470
|
+
this.emit("room:created", room);
|
|
1471
|
+
});
|
|
1472
|
+
this.wsClient.on("room:updated", (room) => {
|
|
1473
|
+
// Update RoomManagementManager cache
|
|
1474
|
+
this.roomManagement.upsertRoom(room);
|
|
1475
|
+
// Emit on RoomManagementManager for promise resolution (see updateRoom method)
|
|
1476
|
+
this.roomManagement.emit("room:updated", room);
|
|
1477
|
+
// Emit on SDK for external listeners
|
|
1478
|
+
this.emit("room:updated", room);
|
|
1479
|
+
});
|
|
1480
|
+
this.wsClient.on("room:deleted", (roomId) => {
|
|
1481
|
+
// Remove from RoomManagementManager cache
|
|
1482
|
+
this.roomManagement.removeRoom(roomId);
|
|
1483
|
+
// Emit on RoomManagementManager for promise resolution (see deleteRoom method)
|
|
1484
|
+
this.roomManagement.emit("room:deleted", roomId);
|
|
1485
|
+
// Emit on SDK for external listeners
|
|
1486
|
+
this.emit("room:deleted", roomId);
|
|
1487
|
+
});
|
|
1488
|
+
this.wsClient.on("room:create_error", (error) => {
|
|
1489
|
+
// Emit on RoomManagementManager for promise rejection
|
|
1490
|
+
this.roomManagement.emit("room:create_error", error);
|
|
1491
|
+
// Emit on SDK for external listeners
|
|
1492
|
+
this.emit("room:create_error", error);
|
|
1493
|
+
});
|
|
1494
|
+
this.wsClient.on("room:update_error", (error, roomId) => {
|
|
1495
|
+
// Emit on RoomManagementManager for promise rejection
|
|
1496
|
+
this.roomManagement.emit("room:update_error", error, roomId);
|
|
1497
|
+
// Emit on SDK for external listeners
|
|
1498
|
+
this.emit("room:update_error", error, roomId);
|
|
1499
|
+
});
|
|
1500
|
+
this.wsClient.on("room:delete_error", (error, roomId) => {
|
|
1501
|
+
// Emit on RoomManagementManager for promise rejection
|
|
1502
|
+
this.roomManagement.emit("room:delete_error", error, roomId);
|
|
1503
|
+
// Emit on SDK for external listeners
|
|
1504
|
+
this.emit("room:delete_error", error, roomId);
|
|
1505
|
+
});
|
|
1506
|
+
// Forward agent room management events from WebSocketClient (emitted by handlers) (v2.0.0)
|
|
1507
|
+
// These events are emitted by message handlers, so we listen on wsClient
|
|
1508
|
+
// We forward to AgentRoomManager first (for promise resolution), then emit on SDK
|
|
1509
|
+
this.wsClient.on("agent_room:agent_added", (roomId, agentId) => {
|
|
1510
|
+
// Emit on AgentRoomManager for promise resolution (see addAgentToRoom method)
|
|
1511
|
+
this.agentRoom.emit("agent_room:agent_added", roomId, agentId);
|
|
1512
|
+
// Emit on SDK for external listeners
|
|
1513
|
+
this.emit("agent_room:agent_added", roomId, agentId);
|
|
1514
|
+
});
|
|
1515
|
+
this.wsClient.on("agent_room:agent_removed", (roomId, agentId) => {
|
|
1516
|
+
// Emit on AgentRoomManager for promise resolution (see removeAgentFromRoom method)
|
|
1517
|
+
this.agentRoom.emit("agent_room:agent_removed", roomId, agentId);
|
|
1518
|
+
// Emit on SDK for external listeners
|
|
1519
|
+
this.emit("agent_room:agent_removed", roomId, agentId);
|
|
1520
|
+
});
|
|
1521
|
+
this.wsClient.on("agent_room:agents_listed", (roomId, agents) => {
|
|
1522
|
+
// Emit on AgentRoomManager for promise resolution
|
|
1523
|
+
this.agentRoom.emit("agent_room:agents_listed", roomId, agents);
|
|
1524
|
+
// Emit on SDK for external listeners
|
|
1525
|
+
this.emit("agent_room:agents_listed", roomId, agents);
|
|
1526
|
+
});
|
|
1527
|
+
this.wsClient.on("agent_room:available_agents_listed", (agents) => {
|
|
1528
|
+
// Emit on AgentRoomManager for promise resolution
|
|
1529
|
+
this.agentRoom.emit("agent_room:available_agents_listed", agents);
|
|
1530
|
+
// Emit on SDK for external listeners
|
|
1531
|
+
this.emit("agent_room:available_agents_listed", agents);
|
|
1532
|
+
});
|
|
1533
|
+
this.wsClient.on("agent_room:status_update", (data) => {
|
|
1534
|
+
// Emit on SDK for external listeners
|
|
1535
|
+
this.emit("agent_room:status_update", data);
|
|
1536
|
+
});
|
|
1537
|
+
this.wsClient.on("agent_room:add_error", (error, roomId) => {
|
|
1538
|
+
// Emit on AgentRoomManager for promise rejection
|
|
1539
|
+
this.agentRoom.emit("agent_room:add_error", error, roomId);
|
|
1540
|
+
// Emit on SDK for external listeners
|
|
1541
|
+
this.emit("agent_room:add_error", error, roomId);
|
|
1542
|
+
});
|
|
1543
|
+
this.wsClient.on("agent_room:remove_error", (error, roomId) => {
|
|
1544
|
+
// Emit on AgentRoomManager for promise rejection
|
|
1545
|
+
this.agentRoom.emit("agent_room:remove_error", error, roomId);
|
|
1546
|
+
// Emit on SDK for external listeners
|
|
1547
|
+
this.emit("agent_room:remove_error", error, roomId);
|
|
1548
|
+
});
|
|
1549
|
+
this.wsClient.on("agent_room:list_error", (error, roomId) => {
|
|
1550
|
+
// Emit on AgentRoomManager for promise rejection
|
|
1551
|
+
this.agentRoom.emit("agent_room:list_error", error, roomId);
|
|
1552
|
+
// Emit on SDK for external listeners
|
|
1553
|
+
this.emit("agent_room:list_error", error, roomId);
|
|
1554
|
+
});
|
|
1555
|
+
this.wsClient.on("agent_room:list_available_error", (error) => {
|
|
1556
|
+
// Emit on AgentRoomManager for promise rejection
|
|
1557
|
+
this.agentRoom.emit("agent_room:list_available_error", error);
|
|
1558
|
+
// Emit on SDK for external listeners
|
|
1559
|
+
this.emit("agent_room:list_available_error", error);
|
|
1560
|
+
});
|
|
1561
|
+
// Forward admin events from AdminManager
|
|
1562
|
+
this._admin.on("user_count", (data) => {
|
|
1563
|
+
this.emit("admin:user_count", data);
|
|
1564
|
+
});
|
|
1565
|
+
this._admin.on("status_changed", (isAdmin) => {
|
|
1566
|
+
this.emit("admin:status_changed", isAdmin);
|
|
1567
|
+
});
|
|
1568
|
+
// Forward rate limit notifications from WebSocketClient (emitted by handlers)
|
|
1569
|
+
this.wsClient.on("rate_limit", (notification) => {
|
|
1570
|
+
this.emit("rate_limit", notification);
|
|
1571
|
+
});
|
|
1572
|
+
// Forward user authenticated events from WebSocketClient (emitted by handlers)
|
|
1573
|
+
this.wsClient.on("user:authenticated", (data) => {
|
|
1574
|
+
this.emit("user:authenticated", data);
|
|
1575
|
+
});
|
|
880
1576
|
// Forward webhook events from WebhookHandler
|
|
881
1577
|
this.webhookHandler.on("webhook:sent", (payload, url) => this.emit("webhook:sent", payload, url));
|
|
882
1578
|
this.webhookHandler.on("webhook:success", (response, url) => this.emit("webhook:success", response, url));
|
|
@@ -886,8 +1582,12 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
886
1582
|
this.connection.on("error", (error) => {
|
|
887
1583
|
this.emit("error", error);
|
|
888
1584
|
// Fire and forget - don't block event emission
|
|
1585
|
+
// Defensive check: ensure error has toJSON method (SDKError instances do)
|
|
1586
|
+
const errorPayload = typeof error.toJSON === "function"
|
|
1587
|
+
? error.toJSON()
|
|
1588
|
+
: { message: error.message, name: error.name, code: error.code };
|
|
889
1589
|
this.webhookHandler
|
|
890
|
-
.sendWebhook("error",
|
|
1590
|
+
.sendWebhook("error", errorPayload, { code: error.code })
|
|
891
1591
|
.catch((webhookError) => {
|
|
892
1592
|
this.logger.error("Failed to send webhook for error event", webhookError);
|
|
893
1593
|
});
|
|
@@ -902,6 +1602,15 @@ class TeneoSDK extends eventemitter3_1.EventEmitter {
|
|
|
902
1602
|
createDefaultLogger() {
|
|
903
1603
|
return (0, logger_1.createPinoLogger)(this.config.logLevel ?? "info", "TeneoSDK");
|
|
904
1604
|
}
|
|
1605
|
+
/**
|
|
1606
|
+
* Derive wallet address from private key
|
|
1607
|
+
*/
|
|
1608
|
+
deriveWalletAddress(privateKey) {
|
|
1609
|
+
if (privateKey instanceof secure_private_key_1.SecurePrivateKey) {
|
|
1610
|
+
return privateKey.use((key) => (0, accounts_1.privateKeyToAccount)(key).address);
|
|
1611
|
+
}
|
|
1612
|
+
return (0, accounts_1.privateKeyToAccount)(privateKey).address;
|
|
1613
|
+
}
|
|
905
1614
|
/**
|
|
906
1615
|
* Creates a new SDK configuration builder for fluent configuration.
|
|
907
1616
|
* The builder pattern provides a more intuitive way to configure the SDK
|