@teneo-protocol/sdk 2.0.0 → 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 +1 -0
- package/.github/workflows/push-to-main.yml +1 -1
- package/.github/workflows/top-issue.yml +102 -0
- package/CHANGELOG.md +69 -0
- package/CONCEPTS.md +747 -0
- package/README.md +178 -8
- package/dist/constants.js +8 -8
- package/dist/constants.js.map +1 -1
- package/dist/core/websocket-client.d.ts +15 -3
- package/dist/core/websocket-client.d.ts.map +1 -1
- package/dist/core/websocket-client.js +52 -13
- package/dist/core/websocket-client.js.map +1 -1
- package/dist/formatters/response-formatter.js +4 -0
- package/dist/formatters/response-formatter.js.map +1 -1
- package/dist/handlers/message-handler-registry.js +2 -1
- package/dist/handlers/message-handler-registry.js.map +1 -1
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1666 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js +38 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-selected-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agents-list-handler.js +2 -5
- package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -1
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +439 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js +36 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.js +6 -5
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-required-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.js +6 -5
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
- package/dist/handlers/message-handlers/base-handler.d.ts +4 -4
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/base-handler.js +3 -1
- package/dist/handlers/message-handlers/base-handler.js.map +1 -1
- package/dist/handlers/message-handlers/challenge-handler.js +3 -2
- package/dist/handlers/message-handlers/challenge-handler.js.map +1 -1
- package/dist/handlers/message-handlers/error-message-handler.js +2 -5
- package/dist/handlers/message-handlers/error-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/index.d.ts +6 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.js +33 -1
- package/dist/handlers/message-handlers/index.js.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.js +2 -5
- package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +783 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.js +2 -5
- package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +2 -199
- 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.js +4 -10
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts +94 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js +35 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/regular-message-handler.js +4 -6
- package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/room-operation-response-handler.js +2 -5
- package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/task-quote-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/task-quote-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-quote-handler.js +29 -0
- package/dist/handlers/message-handlers/task-quote-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.js +2 -5
- package/dist/handlers/message-handlers/task-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/types.d.ts +21 -9
- package/dist/handlers/message-handlers/types.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts +40 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js +28 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts +49 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.js +31 -0
- package/dist/handlers/message-handlers/user-count-handler.js.map +1 -0
- package/dist/handlers/webhook-handler.d.ts +1 -1
- package/dist/handlers/webhook-handler.d.ts.map +1 -1
- package/dist/handlers/webhook-handler.js +14 -5
- package/dist/handlers/webhook-handler.js.map +1 -1
- package/dist/index.d.ts +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 +1 -7
- package/dist/managers/agent-room-manager.d.ts.map +1 -1
- package/dist/managers/agent-room-manager.js +83 -36
- package/dist/managers/agent-room-manager.js.map +1 -1
- package/dist/managers/connection-manager.js +2 -0
- package/dist/managers/connection-manager.js.map +1 -1
- package/dist/managers/index.d.ts +2 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/index.js +3 -1
- package/dist/managers/index.js.map +1 -1
- package/dist/managers/message-router.d.ts +56 -5
- package/dist/managers/message-router.d.ts.map +1 -1
- package/dist/managers/message-router.js +155 -8
- package/dist/managers/message-router.js.map +1 -1
- package/dist/managers/room-management-manager.d.ts.map +1 -1
- package/dist/managers/room-management-manager.js +9 -7
- package/dist/managers/room-management-manager.js.map +1 -1
- package/dist/managers/room-manager.d.ts +7 -5
- package/dist/managers/room-manager.d.ts.map +1 -1
- package/dist/managers/room-manager.js +14 -10
- package/dist/managers/room-manager.js.map +1 -1
- package/dist/payments/index.d.ts +5 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +21 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/payments/payment-client.d.ts +74 -0
- package/dist/payments/payment-client.d.ts.map +1 -0
- package/dist/payments/payment-client.js +207 -0
- package/dist/payments/payment-client.js.map +1 -0
- package/dist/teneo-sdk.d.ts +135 -21
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +268 -26
- package/dist/teneo-sdk.js.map +1 -1
- package/dist/types/categories.d.ts +22 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +40 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/config.d.ts +79 -8
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +62 -5
- package/dist/types/config.js.map +1 -1
- package/dist/types/error-codes.d.ts +8 -0
- package/dist/types/error-codes.d.ts.map +1 -1
- package/dist/types/error-codes.js +9 -0
- package/dist/types/error-codes.js.map +1 -1
- package/dist/types/events.d.ts +44 -0
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js +19 -1
- package/dist/types/events.js.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +33 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +11219 -423
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +249 -7
- package/dist/types/messages.js.map +1 -1
- package/dist/utils/bounded-queue.d.ts.map +1 -1
- package/dist/utils/bounded-queue.js +5 -2
- package/dist/utils/bounded-queue.js.map +1 -1
- package/dist/utils/circuit-breaker.js +11 -4
- package/dist/utils/circuit-breaker.js.map +1 -1
- package/dist/utils/deduplication-cache.js +3 -1
- package/dist/utils/deduplication-cache.js.map +1 -1
- package/dist/utils/event-waiter.d.ts +3 -3
- package/dist/utils/event-waiter.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pricing-resolver.d.ts +26 -0
- package/dist/utils/pricing-resolver.d.ts.map +1 -0
- package/dist/utils/pricing-resolver.js +85 -0
- package/dist/utils/pricing-resolver.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -1
- package/dist/utils/rate-limiter.js +6 -0
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/retry-policy.js +1 -0
- package/dist/utils/retry-policy.js.map +1 -1
- package/dist/utils/secure-private-key.js +3 -1
- package/dist/utils/secure-private-key.js.map +1 -1
- package/dist/utils/signature-verifier.d.ts.map +1 -1
- package/dist/utils/signature-verifier.js +3 -1
- package/dist/utils/signature-verifier.js.map +1 -1
- package/examples/.env.example +1 -1
- package/examples/agent-room-management-example.ts +10 -9
- package/examples/basic-usage.ts +3 -4
- package/examples/claude-agent-x-follower/.env.example +1 -1
- package/examples/claude-agent-x-follower/QUICKSTART.md +2 -2
- package/examples/claude-agent-x-follower/README.md +2 -2
- package/examples/claude-agent-x-follower/index.ts +120 -96
- package/examples/n8n-teneo/.env.example +1 -1
- package/examples/n8n-teneo/README.md +1 -1
- package/examples/n8n-teneo/index.ts +54 -44
- package/examples/nestjs-dashboard/.env.example +11 -0
- package/examples/nestjs-dashboard/README.md +297 -0
- package/examples/nestjs-dashboard/nest-cli.json +10 -0
- package/examples/nestjs-dashboard/package.json +44 -0
- package/examples/nestjs-dashboard/pnpm-lock.yaml +3079 -0
- package/examples/nestjs-dashboard/src/app.controller.ts +24 -0
- package/examples/nestjs-dashboard/src/app.module.ts +15 -0
- package/examples/nestjs-dashboard/src/main.ts +32 -0
- package/examples/nestjs-dashboard/src/public/dashboard.html +1144 -0
- package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +54 -0
- package/examples/nestjs-dashboard/src/teneo/events.controller.ts +65 -0
- package/examples/nestjs-dashboard/src/teneo/messages.controller.ts +47 -0
- package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +258 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.module.ts +13 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +484 -0
- package/examples/nestjs-dashboard/tsconfig.json +22 -0
- package/examples/openai-teneo/.env.example +1 -1
- package/examples/openai-teneo/README.md +2 -2
- package/examples/openai-teneo/index.ts +82 -71
- package/examples/production-dashboard/.env.example +1 -1
- package/examples/production-dashboard/README.md +1 -1
- package/examples/production-dashboard/server.ts +2 -2
- package/examples/room-management-example.ts +5 -8
- package/examples/usage/.env.example +1 -1
- package/examples/usage/01-connect.ts +3 -4
- package/examples/usage/02-list-agents.ts +2 -3
- package/examples/usage/03-pick-agent.ts +2 -3
- package/examples/usage/04-find-by-capability.ts +2 -3
- package/examples/usage/05-webhook-example.ts +2 -3
- package/examples/usage/06-simple-api-server.ts +2 -3
- package/examples/usage/07-event-listener.ts +2 -3
- package/examples/webhook-integration.ts +1 -1
- package/examples/x-influencer-battle-server.ts +2 -2
- package/package.json +4 -1
- package/src/core/websocket-client.test.ts +8 -3
- package/src/core/websocket-client.ts +36 -6
- package/src/formatters/response-formatter.test.ts +2 -0
- package/src/formatters/response-formatter.ts +3 -3
- package/src/handlers/message-handlers/agent-details-response-handler.ts +42 -0
- package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +2 -8
- package/src/handlers/message-handlers/agent-status-update-handler.ts +3 -9
- package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +5 -0
- package/src/handlers/message-handlers/auth-success-handler.ts +6 -1
- package/src/handlers/message-handlers/base-handler.ts +20 -7
- package/src/handlers/message-handlers/index.ts +34 -0
- package/src/handlers/message-handlers/list-room-agents-handler.ts +2 -5
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +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 +3 -6
- package/src/handlers/message-handlers/subscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/task-quote-handler.ts +31 -0
- package/src/handlers/message-handlers/types.ts +37 -9
- package/src/handlers/message-handlers/unsubscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/user-authenticated-handler.ts +31 -0
- package/src/handlers/message-handlers/user-count-handler.ts +34 -0
- package/src/handlers/webhook-handler.test.ts +3 -2
- package/src/handlers/webhook-handler.ts +13 -7
- package/src/index.ts +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 +98 -42
- package/src/managers/index.ts +13 -1
- package/src/managers/message-router.ts +215 -17
- package/src/managers/room-management-manager.ts +4 -7
- package/src/managers/room-manager.ts +11 -15
- package/src/payments/index.ts +22 -0
- package/src/payments/payment-client.ts +240 -0
- package/src/teneo-sdk.ts +302 -27
- package/src/types/categories.ts +45 -0
- package/src/types/config.ts +70 -2
- package/src/types/error-codes.ts +10 -0
- package/src/types/events.test.ts +1 -0
- package/src/types/events.ts +43 -0
- package/src/types/index.ts +56 -0
- package/src/types/messages.test.ts +2 -1
- package/src/types/messages.ts +307 -5
- package/src/utils/bounded-queue.test.ts +1 -1
- package/src/utils/bounded-queue.ts +2 -1
- package/src/utils/circuit-breaker.test.ts +1 -1
- package/src/utils/deduplication-cache.test.ts +1 -1
- package/src/utils/event-waiter.test.ts +1 -1
- package/src/utils/event-waiter.ts +3 -3
- package/src/utils/index.ts +7 -0
- package/src/utils/logger.ts +8 -8
- package/src/utils/pricing-resolver.ts +128 -0
- package/src/utils/rate-limiter.test.ts +1 -1
- package/src/utils/rate-limiter.ts +1 -0
- package/src/utils/signature-verifier.test.ts +2 -2
- package/src/utils/signature-verifier.ts +3 -2
- package/tests/.env.example +7 -0
- package/tests/direct-agent-test.ts +151 -0
- package/tests/integration/real-server.test.ts +2 -0
- package/tests/integration/room-management.test.ts +10 -8
- package/tests/integration/websocket.test.ts +4 -1
- package/tests/payment-flow-test.ts +147 -0
- package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +17 -29
- package/tests/unit/handlers/agent-status-update-handler.test.ts +2 -6
- package/tests/unit/handlers/auth-success-handler-rooms.test.ts +1 -3
- package/tests/unit/handlers/list-available-agents-handler.test.ts +4 -12
- package/tests/unit/handlers/list-room-agents-handler.test.ts +2 -6
- package/tests/unit/handlers/room-operation-response-handler.test.ts +9 -36
- package/tests/unit/managers/agent-room-manager.test.ts +9 -16
- package/tests/unit/managers/room-management-manager.test.ts +21 -39
- package/tsconfig.json +2 -2
- package/vitest.config.ts +1 -0
package/src/teneo-sdk.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import { EventEmitter } from "eventemitter3";
|
|
8
8
|
import { z } from "zod";
|
|
9
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
9
10
|
import {
|
|
10
11
|
SDKConfig,
|
|
11
12
|
PartialSDKConfig,
|
|
@@ -17,6 +18,7 @@ import {
|
|
|
17
18
|
validateConfig,
|
|
18
19
|
DEFAULT_CONFIG,
|
|
19
20
|
ResponseFormatSchema,
|
|
21
|
+
AgentRoomInfo,
|
|
20
22
|
type HealthStatus
|
|
21
23
|
} from "./types";
|
|
22
24
|
import { SDKEvents, SDKError } from "./types/events";
|
|
@@ -36,13 +38,24 @@ import {
|
|
|
36
38
|
AgentRegistry,
|
|
37
39
|
MessageRouter,
|
|
38
40
|
SendMessageOptions,
|
|
39
|
-
AgentCommand
|
|
41
|
+
AgentCommand,
|
|
42
|
+
QuoteResult,
|
|
43
|
+
AdminManager,
|
|
44
|
+
ListAllAgentsOptions,
|
|
45
|
+
AllAgentsResult
|
|
40
46
|
} from "./managers";
|
|
41
47
|
import { createPinoLogger } from "./utils/logger";
|
|
42
48
|
import { RoomIdSchema, AgentIdSchema, AgentCommandContentSchema } from "./types/validation";
|
|
49
|
+
import { SecurePrivateKey } from "./utils/secure-private-key";
|
|
43
50
|
|
|
44
51
|
// Re-export types for external use
|
|
45
|
-
export type {
|
|
52
|
+
export type {
|
|
53
|
+
SendMessageOptions,
|
|
54
|
+
AgentCommand,
|
|
55
|
+
QuoteResult,
|
|
56
|
+
ListAllAgentsOptions,
|
|
57
|
+
AllAgentsResult
|
|
58
|
+
};
|
|
46
59
|
|
|
47
60
|
// Zod schemas for SDK-specific interfaces
|
|
48
61
|
export const SendMessageOptionsSchema = z.object({
|
|
@@ -63,6 +76,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
63
76
|
private config: SDKConfig;
|
|
64
77
|
private readonly logger: Logger;
|
|
65
78
|
private isDestroyed = false;
|
|
79
|
+
private secureKey?: SecurePrivateKey;
|
|
66
80
|
|
|
67
81
|
// Core components
|
|
68
82
|
private readonly wsClient: WebSocketClient;
|
|
@@ -76,6 +90,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
76
90
|
private readonly agentRoom: AgentRoomManager;
|
|
77
91
|
private readonly agents: AgentRegistry;
|
|
78
92
|
private readonly messages: MessageRouter;
|
|
93
|
+
private readonly _admin: AdminManager;
|
|
79
94
|
|
|
80
95
|
/**
|
|
81
96
|
* Creates a new instance of the Teneo Protocol SDK.
|
|
@@ -141,6 +156,15 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
141
156
|
// Initialize logger
|
|
142
157
|
this.logger = this.config.logger ?? this.createDefaultLogger();
|
|
143
158
|
|
|
159
|
+
// Store secure key for payment client
|
|
160
|
+
if (config.privateKey) {
|
|
161
|
+
if (typeof config.privateKey === "object" && "use" in config.privateKey) {
|
|
162
|
+
this.secureKey = config.privateKey;
|
|
163
|
+
} else {
|
|
164
|
+
this.secureKey = new SecurePrivateKey(config.privateKey as string);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
144
168
|
// Initialize core components
|
|
145
169
|
this.wsClient = new WebSocketClient(this.config);
|
|
146
170
|
this.webhookHandler = new WebhookHandler(this.config, this.logger);
|
|
@@ -158,6 +182,10 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
158
182
|
this.wsClient.setRoomManagementManager(this.roomManagement); // Enable room CRUD in handlers (v2.0.0)
|
|
159
183
|
this.wsClient.setAgentRoomManager(this.agentRoom); // Enable agent-room operations in handlers (v2.0.0)
|
|
160
184
|
this.agents = new AgentRegistry(this.logger);
|
|
185
|
+
this.agents.setWebSocketClient(this.wsClient); // Enable getAgentDetails requests
|
|
186
|
+
this._admin = new AdminManager(this.wsClient, this.logger);
|
|
187
|
+
this.wsClient.setAdminManager(this._admin); // Enable admin handlers
|
|
188
|
+
this.wsClient.setAgentRegistry(this.agents); // Enable agent details handler
|
|
161
189
|
this.messages = new MessageRouter(
|
|
162
190
|
this.wsClient,
|
|
163
191
|
this.webhookHandler,
|
|
@@ -165,10 +193,27 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
165
193
|
this.logger,
|
|
166
194
|
{
|
|
167
195
|
messageTimeout: this.config.messageTimeout,
|
|
168
|
-
responseFormat: this.config.responseFormat
|
|
196
|
+
responseFormat: this.config.responseFormat,
|
|
197
|
+
autoApproveQuotes: this.config.autoApproveQuotes,
|
|
198
|
+
maxPricePerRequest: this.config.maxPricePerRequest,
|
|
199
|
+
quoteTimeout: this.config.quoteTimeout,
|
|
200
|
+
wsUrl: this.config.wsUrl,
|
|
201
|
+
paymentNetwork: this.config.paymentNetwork,
|
|
202
|
+
paymentAsset: this.config.paymentAsset
|
|
169
203
|
}
|
|
170
204
|
);
|
|
171
205
|
|
|
206
|
+
// Set up payment client if private key is configured (v2.2.0)
|
|
207
|
+
if (this.config.privateKey) {
|
|
208
|
+
const secureKey =
|
|
209
|
+
this.config.privateKey instanceof SecurePrivateKey
|
|
210
|
+
? this.config.privateKey
|
|
211
|
+
: new SecurePrivateKey(this.config.privateKey);
|
|
212
|
+
const walletAddress =
|
|
213
|
+
this.config.walletAddress || this.deriveWalletAddress(this.config.privateKey);
|
|
214
|
+
this.messages.setPaymentClient(secureKey, walletAddress);
|
|
215
|
+
}
|
|
216
|
+
|
|
172
217
|
// Set up event forwarding
|
|
173
218
|
this.setupEventForwarding();
|
|
174
219
|
|
|
@@ -182,7 +227,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
182
227
|
}
|
|
183
228
|
|
|
184
229
|
/**
|
|
185
|
-
* Establishes a connection to the Teneo
|
|
230
|
+
* Establishes a connection to the Teneo Protocol via WebSocket.
|
|
186
231
|
* Handles authentication automatically and joins any configured auto-join rooms.
|
|
187
232
|
* Emits 'connection:open', 'auth:success', and 'ready' events on successful connection.
|
|
188
233
|
*
|
|
@@ -195,7 +240,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
195
240
|
* ```typescript
|
|
196
241
|
* const sdk = new TeneoSDK({ wsUrl: 'wss://example.com', privateKey: '0x...' });
|
|
197
242
|
* await sdk.connect();
|
|
198
|
-
* console.log('Connected to Teneo
|
|
243
|
+
* console.log('Connected to Teneo Protocol');
|
|
199
244
|
* ```
|
|
200
245
|
*/
|
|
201
246
|
public async connect(): Promise<void> {
|
|
@@ -204,7 +249,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
204
249
|
}
|
|
205
250
|
|
|
206
251
|
try {
|
|
207
|
-
this.logger.info("Connecting to Teneo
|
|
252
|
+
this.logger.info("Connecting to Teneo Protocol");
|
|
208
253
|
await this.connection.connect();
|
|
209
254
|
|
|
210
255
|
// Auto-join rooms if configured
|
|
@@ -214,26 +259,26 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
214
259
|
}
|
|
215
260
|
}
|
|
216
261
|
|
|
217
|
-
this.logger.info("Successfully connected to Teneo
|
|
262
|
+
this.logger.info("Successfully connected to Teneo Protocol");
|
|
218
263
|
} catch (error) {
|
|
219
|
-
this.logger.error("Failed to connect to Teneo
|
|
264
|
+
this.logger.error("Failed to connect to Teneo Protocol", error);
|
|
220
265
|
throw error;
|
|
221
266
|
}
|
|
222
267
|
}
|
|
223
268
|
|
|
224
269
|
/**
|
|
225
|
-
* Disconnects from the Teneo
|
|
270
|
+
* Disconnects from the Teneo Protocol and cleans up all active connections.
|
|
226
271
|
* Clears all timers, pending messages, and stops automatic reconnection attempts.
|
|
227
272
|
* Emits 'disconnect' event after disconnection is complete.
|
|
228
273
|
*
|
|
229
274
|
* @example
|
|
230
275
|
* ```typescript
|
|
231
276
|
* sdk.disconnect();
|
|
232
|
-
* console.log('Disconnected from Teneo
|
|
277
|
+
* console.log('Disconnected from Teneo Protocol');
|
|
233
278
|
* ```
|
|
234
279
|
*/
|
|
235
280
|
public disconnect(): void {
|
|
236
|
-
this.logger.info("Disconnecting from Teneo
|
|
281
|
+
this.logger.info("Disconnecting from Teneo Protocol");
|
|
237
282
|
this.connection.disconnect();
|
|
238
283
|
}
|
|
239
284
|
|
|
@@ -305,19 +350,49 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
305
350
|
}
|
|
306
351
|
|
|
307
352
|
/**
|
|
308
|
-
*
|
|
309
|
-
*
|
|
353
|
+
* Requests a quote for a task from the coordinator.
|
|
354
|
+
* The quote includes agent selection, pricing, and expiration.
|
|
355
|
+
* Does NOT auto-approve - use confirmQuote() to execute.
|
|
356
|
+
*/
|
|
357
|
+
public async requestQuote(content: string, room: string): Promise<QuoteResult> {
|
|
358
|
+
return this.messages.requestQuote(content, room);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Confirms a pending quote and executes the task with payment.
|
|
363
|
+
* Attaches x402 payment header if payment client is configured.
|
|
364
|
+
*/
|
|
365
|
+
public async confirmQuote(
|
|
366
|
+
taskId: string,
|
|
367
|
+
options?: { waitForResponse?: boolean; timeout?: number }
|
|
368
|
+
): Promise<FormattedResponse | void> {
|
|
369
|
+
return this.messages.confirmQuote(taskId, options);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Gets a pending quote by task ID.
|
|
374
|
+
*/
|
|
375
|
+
public getPendingQuote(taskId: string): QuoteResult | undefined {
|
|
376
|
+
return this.messages.getPendingQuote(taskId);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Subscribes to a public room in the Teneo Protocol.
|
|
381
|
+
* This is only needed for public rooms - private rooms are automatically subscribed.
|
|
310
382
|
* Emits 'room:subscribed' event when successfully subscribed.
|
|
311
383
|
*
|
|
312
|
-
* @param roomId - The ID of the room to subscribe to
|
|
384
|
+
* @param roomId - The ID of the public room to subscribe to
|
|
313
385
|
* @returns Promise that resolves when the room has been subscribed
|
|
314
386
|
* @throws {SDKError} If not connected to the network (ErrorCode.NOT_CONNECTED)
|
|
315
387
|
* @throws {ValidationError} If roomId is empty or invalid
|
|
316
388
|
*
|
|
317
389
|
* @example
|
|
318
390
|
* ```typescript
|
|
319
|
-
*
|
|
320
|
-
*
|
|
391
|
+
* // Subscribe to a public room
|
|
392
|
+
* await sdk.subscribeToRoom('public-announcements');
|
|
393
|
+
* console.log('Subscribed to public room');
|
|
394
|
+
*
|
|
395
|
+
* // Note: Private rooms don't need subscription - you're always subscribed
|
|
321
396
|
* ```
|
|
322
397
|
*/
|
|
323
398
|
public async subscribeToRoom(roomId: string): Promise<void> {
|
|
@@ -325,19 +400,21 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
325
400
|
}
|
|
326
401
|
|
|
327
402
|
/**
|
|
328
|
-
* Unsubscribes from a
|
|
329
|
-
* You will no longer receive messages from
|
|
403
|
+
* Unsubscribes from a public room in the Teneo Protocol.
|
|
404
|
+
* You will no longer receive messages from this public room.
|
|
330
405
|
* Emits 'room:unsubscribed' event when successfully unsubscribed.
|
|
331
406
|
*
|
|
332
|
-
*
|
|
407
|
+
* Note: This only applies to public rooms. Private rooms cannot be unsubscribed from.
|
|
408
|
+
*
|
|
409
|
+
* @param roomId - The ID of the public room to unsubscribe from
|
|
333
410
|
* @returns Promise that resolves when the room has been unsubscribed
|
|
334
411
|
* @throws {SDKError} If not connected to the network (ErrorCode.NOT_CONNECTED)
|
|
335
412
|
* @throws {ValidationError} If roomId is empty or invalid
|
|
336
413
|
*
|
|
337
414
|
* @example
|
|
338
415
|
* ```typescript
|
|
339
|
-
* await sdk.unsubscribeFromRoom('
|
|
340
|
-
* console.log('Unsubscribed from
|
|
416
|
+
* await sdk.unsubscribeFromRoom('public-announcements');
|
|
417
|
+
* console.log('Unsubscribed from public room');
|
|
341
418
|
* ```
|
|
342
419
|
*/
|
|
343
420
|
public async unsubscribeFromRoom(roomId: string): Promise<void> {
|
|
@@ -383,7 +460,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
383
460
|
}
|
|
384
461
|
|
|
385
462
|
/**
|
|
386
|
-
* Gets a list of all available agents in the Teneo
|
|
463
|
+
* Gets a list of all available agents in the Teneo Protocol.
|
|
387
464
|
* The list is automatically updated when new agents join or leave.
|
|
388
465
|
* Returns a read-only array to prevent external modification.
|
|
389
466
|
*
|
|
@@ -493,7 +570,84 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
493
570
|
}
|
|
494
571
|
|
|
495
572
|
/**
|
|
496
|
-
*
|
|
573
|
+
* Fetches detailed information about a specific agent from the server.
|
|
574
|
+
* Makes a request to the server for full agent details including capabilities,
|
|
575
|
+
* commands, pricing, and more.
|
|
576
|
+
*
|
|
577
|
+
* @param agentId - The unique identifier of the agent
|
|
578
|
+
* @returns Promise that resolves with full agent details
|
|
579
|
+
* @throws {SDKError} If not connected or request times out
|
|
580
|
+
* @throws {ValidationError} If agentId is invalid
|
|
581
|
+
*
|
|
582
|
+
* @example
|
|
583
|
+
* ```typescript
|
|
584
|
+
* const details = await sdk.getAgentDetails('weather-agent-001');
|
|
585
|
+
* console.log(`Agent: ${details.agent_name}`);
|
|
586
|
+
* console.log(`Capabilities: ${details.capabilities?.length}`);
|
|
587
|
+
* console.log(`Status: ${details.status}`);
|
|
588
|
+
* ```
|
|
589
|
+
*/
|
|
590
|
+
public async getAgentDetails(agentId: string): Promise<AgentRoomInfo> {
|
|
591
|
+
return this.agents.getAgentDetails(agentId);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
// ============================================================================
|
|
595
|
+
// ADMIN API (Admin-Only Features)
|
|
596
|
+
// ============================================================================
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* Gets the admin manager for admin-only features.
|
|
600
|
+
* Returns undefined if the current user is not an admin.
|
|
601
|
+
* Use this to access admin APIs like listing all agents, user counts, etc.
|
|
602
|
+
*
|
|
603
|
+
* @returns The AdminManager instance if user is admin, undefined otherwise
|
|
604
|
+
*
|
|
605
|
+
* @example
|
|
606
|
+
* ```typescript
|
|
607
|
+
* if (sdk.admin?.isAdmin) {
|
|
608
|
+
* // List all agents in the network
|
|
609
|
+
* const result = await sdk.admin.listAllAgents({ limit: 20 });
|
|
610
|
+
* console.log(`Found ${result.total} agents`);
|
|
611
|
+
*
|
|
612
|
+
* result.agents.forEach(agent => {
|
|
613
|
+
* console.log(`${agent.agent_name}: verified=${agent.is_verified}, banned=${agent.is_banned}`);
|
|
614
|
+
* });
|
|
615
|
+
*
|
|
616
|
+
* // Get user count
|
|
617
|
+
* const userCount = sdk.admin.getLastUserCount();
|
|
618
|
+
* console.log(`Online users: ${userCount?.count}`);
|
|
619
|
+
*
|
|
620
|
+
* // Listen for user count updates
|
|
621
|
+
* sdk.admin.on('user_count', (data) => {
|
|
622
|
+
* console.log(`User count updated: ${data.count}`);
|
|
623
|
+
* });
|
|
624
|
+
* }
|
|
625
|
+
* ```
|
|
626
|
+
*/
|
|
627
|
+
public get admin(): AdminManager | undefined {
|
|
628
|
+
return this._admin.isAdmin ? this._admin : undefined;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* Lists all agents in the network (admin only, convenience method).
|
|
633
|
+
* Returns paginated list of agents with full admin information.
|
|
634
|
+
*
|
|
635
|
+
* @param options - Pagination and filter options
|
|
636
|
+
* @returns Promise that resolves with agents list
|
|
637
|
+
* @throws {SDKError} If not connected or not an admin
|
|
638
|
+
*
|
|
639
|
+
* @example
|
|
640
|
+
* ```typescript
|
|
641
|
+
* const result = await sdk.listAllAgents({ limit: 50, filter: 'weather' });
|
|
642
|
+
* console.log(`Found ${result.total} agents matching 'weather'`);
|
|
643
|
+
* ```
|
|
644
|
+
*/
|
|
645
|
+
public async listAllAgents(options: ListAllAgentsOptions = {}): Promise<AllAgentsResult> {
|
|
646
|
+
return this._admin.listAllAgents(options);
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
/**
|
|
650
|
+
* Gets a list of all available rooms in the Teneo Protocol.
|
|
497
651
|
* Includes rooms you have access to based on your authentication.
|
|
498
652
|
* Returns a read-only array to prevent external modification.
|
|
499
653
|
*
|
|
@@ -784,6 +938,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
784
938
|
* });
|
|
785
939
|
* ```
|
|
786
940
|
*/
|
|
941
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
787
942
|
public async listRoomAgents(roomId: string, useCache: boolean = true): Promise<any[]> {
|
|
788
943
|
return this.agentRoom.listRoomAgents(roomId, useCache);
|
|
789
944
|
}
|
|
@@ -805,6 +960,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
805
960
|
* console.log(`${available.length} agents available to add`);
|
|
806
961
|
* ```
|
|
807
962
|
*/
|
|
963
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
808
964
|
public async listAvailableAgents(roomId: string, useCache: boolean = true): Promise<any[]> {
|
|
809
965
|
return this.agentRoom.listAvailableAgents(roomId, useCache);
|
|
810
966
|
}
|
|
@@ -826,6 +982,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
826
982
|
* }
|
|
827
983
|
* ```
|
|
828
984
|
*/
|
|
985
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
829
986
|
public getRoomAgents(roomId: string): any[] | undefined {
|
|
830
987
|
return this.agentRoom.getRoomAgents(roomId);
|
|
831
988
|
}
|
|
@@ -845,6 +1002,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
845
1002
|
* }
|
|
846
1003
|
* ```
|
|
847
1004
|
*/
|
|
1005
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
848
1006
|
public getAvailableAgents(roomId: string): any[] | undefined {
|
|
849
1007
|
return this.agentRoom.getAvailableAgents(roomId);
|
|
850
1008
|
}
|
|
@@ -911,6 +1069,79 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
911
1069
|
this.agentRoom.invalidateCache(roomId);
|
|
912
1070
|
}
|
|
913
1071
|
|
|
1072
|
+
/**
|
|
1073
|
+
* Updates user preferences on the server.
|
|
1074
|
+
* Server-side enforcement of max price per request - prevents quotes/payments exceeding the limit.
|
|
1075
|
+
*
|
|
1076
|
+
* @param preferences - User preferences to update
|
|
1077
|
+
* @param preferences.maxPricePerRequest - Max price per request in USDC (e.g., 0.01 = $0.01), or null to remove limit
|
|
1078
|
+
* @returns Promise that resolves when preferences are updated
|
|
1079
|
+
* @throws {SDKError} If update fails or times out
|
|
1080
|
+
*
|
|
1081
|
+
* @example
|
|
1082
|
+
* ```typescript
|
|
1083
|
+
* // Set a spending limit of $0.05 per request
|
|
1084
|
+
* await sdk.setUserPreferences({ maxPricePerRequest: 0.05 });
|
|
1085
|
+
*
|
|
1086
|
+
* // Remove the spending limit
|
|
1087
|
+
* await sdk.setUserPreferences({ maxPricePerRequest: null });
|
|
1088
|
+
* ```
|
|
1089
|
+
*/
|
|
1090
|
+
public async setUserPreferences(preferences: {
|
|
1091
|
+
maxPricePerRequest?: number | null;
|
|
1092
|
+
}): Promise<void> {
|
|
1093
|
+
if (this.isDestroyed) {
|
|
1094
|
+
throw new SDKError("SDK has been destroyed", ErrorCode.SDK_DESTROYED, null, false);
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
const message = {
|
|
1098
|
+
type: "set_user_preferences" as const,
|
|
1099
|
+
data: {
|
|
1100
|
+
max_price_per_request: preferences.maxPricePerRequest
|
|
1101
|
+
}
|
|
1102
|
+
};
|
|
1103
|
+
|
|
1104
|
+
return new Promise((resolve, reject) => {
|
|
1105
|
+
const timeout = setTimeout(() => {
|
|
1106
|
+
cleanup();
|
|
1107
|
+
reject(new SDKError("Set user preferences request timed out", ErrorCode.TIMEOUT_ERROR));
|
|
1108
|
+
}, 30000);
|
|
1109
|
+
|
|
1110
|
+
const handleResponse = (msg: {
|
|
1111
|
+
type: string;
|
|
1112
|
+
data?: { success?: boolean; message?: string; max_price_per_request?: number | null };
|
|
1113
|
+
}) => {
|
|
1114
|
+
if (msg.type === "user_preferences_updated") {
|
|
1115
|
+
cleanup();
|
|
1116
|
+
if (msg.data?.success) {
|
|
1117
|
+
this.emit("preferences:updated", {
|
|
1118
|
+
maxPricePerRequest: msg.data.max_price_per_request
|
|
1119
|
+
});
|
|
1120
|
+
resolve();
|
|
1121
|
+
} else {
|
|
1122
|
+
reject(
|
|
1123
|
+
new SDKError(
|
|
1124
|
+
msg.data?.message || "Failed to update preferences",
|
|
1125
|
+
ErrorCode.MESSAGE_ERROR
|
|
1126
|
+
)
|
|
1127
|
+
);
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
};
|
|
1131
|
+
|
|
1132
|
+
const cleanup = () => {
|
|
1133
|
+
clearTimeout(timeout);
|
|
1134
|
+
this.wsClient.off("message:received", handleResponse);
|
|
1135
|
+
};
|
|
1136
|
+
|
|
1137
|
+
this.wsClient.on("message:received", handleResponse);
|
|
1138
|
+
this.wsClient.sendMessage(message).catch((error) => {
|
|
1139
|
+
cleanup();
|
|
1140
|
+
reject(error);
|
|
1141
|
+
});
|
|
1142
|
+
});
|
|
1143
|
+
}
|
|
1144
|
+
|
|
914
1145
|
/**
|
|
915
1146
|
* Configures webhook URL and headers for receiving real-time event notifications.
|
|
916
1147
|
* Webhooks allow you to receive events at your server endpoint via HTTP POST requests.
|
|
@@ -1000,7 +1231,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
1000
1231
|
* This is a convenience getter that returns only the connection status.
|
|
1001
1232
|
* For detailed state information, use getConnectionState().
|
|
1002
1233
|
*
|
|
1003
|
-
* @returns True if connected to the Teneo
|
|
1234
|
+
* @returns True if connected to the Teneo Protocol, false otherwise
|
|
1004
1235
|
*
|
|
1005
1236
|
* @example
|
|
1006
1237
|
* ```typescript
|
|
@@ -1021,7 +1252,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
1021
1252
|
* This is a convenience getter that returns only the authentication status.
|
|
1022
1253
|
* For detailed auth information, use getAuthState().
|
|
1023
1254
|
*
|
|
1024
|
-
* @returns True if authenticated with the Teneo
|
|
1255
|
+
* @returns True if authenticated with the Teneo Protocol, false otherwise
|
|
1025
1256
|
*
|
|
1026
1257
|
* @example
|
|
1027
1258
|
* ```typescript
|
|
@@ -1306,6 +1537,7 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
1306
1537
|
this.rooms.destroy();
|
|
1307
1538
|
this.agents.destroy();
|
|
1308
1539
|
this.messages.destroy();
|
|
1540
|
+
this._admin.destroy();
|
|
1309
1541
|
|
|
1310
1542
|
// Destroy other components
|
|
1311
1543
|
this.webhookHandler.destroy();
|
|
@@ -1346,7 +1578,6 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
1346
1578
|
}
|
|
1347
1579
|
|
|
1348
1580
|
// Ensure RoomManagementManager is synced with auth state
|
|
1349
|
-
// This handles cases where auth handlers might have already set it, but ensures consistency
|
|
1350
1581
|
if (state.roomObjects && state.roomObjects.length > 0) {
|
|
1351
1582
|
const ownedRooms = state.roomObjects.filter((r) => r.is_owner);
|
|
1352
1583
|
const sharedRooms = state.roomObjects.filter((r) => !r.is_owner);
|
|
@@ -1358,6 +1589,11 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
1358
1589
|
}
|
|
1359
1590
|
}
|
|
1360
1591
|
|
|
1592
|
+
// Set up payment client for x402 payments
|
|
1593
|
+
if (this.secureKey && state.walletAddress) {
|
|
1594
|
+
this.messages.setPaymentClient(this.secureKey, state.walletAddress);
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1361
1597
|
this.emit("auth:success", state);
|
|
1362
1598
|
});
|
|
1363
1599
|
this.connection.on("auth:error", (error) => this.emit("auth:error", error));
|
|
@@ -1374,6 +1610,12 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
1374
1610
|
this.messages.on("agent:selected", (data) => this.emit("agent:selected", data));
|
|
1375
1611
|
this.messages.on("agent:response", (response) => this.emit("agent:response", response));
|
|
1376
1612
|
|
|
1613
|
+
// Forward quote and payment events from MessageRouter (v2.2.0)
|
|
1614
|
+
this.messages.on("quote:received", (quote) => this.emit("quote:received", quote));
|
|
1615
|
+
this.messages.on("payment:blocked", (data) => this.emit("payment:blocked", data));
|
|
1616
|
+
this.messages.on("payment:attached", (data) => this.emit("payment:attached", data));
|
|
1617
|
+
this.messages.on("payment:error", (error) => this.emit("payment:error", error));
|
|
1618
|
+
|
|
1377
1619
|
// Forward coordinator events from MessageRouter
|
|
1378
1620
|
this.messages.on("coordinator:processing", (request) =>
|
|
1379
1621
|
this.emit("coordinator:processing", request)
|
|
@@ -1494,6 +1736,24 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
1494
1736
|
this.emit("agent_room:list_available_error", error);
|
|
1495
1737
|
});
|
|
1496
1738
|
|
|
1739
|
+
// Forward admin events from AdminManager
|
|
1740
|
+
this._admin.on("user_count", (data) => {
|
|
1741
|
+
this.emit("admin:user_count", data);
|
|
1742
|
+
});
|
|
1743
|
+
this._admin.on("status_changed", (isAdmin) => {
|
|
1744
|
+
this.emit("admin:status_changed", isAdmin);
|
|
1745
|
+
});
|
|
1746
|
+
|
|
1747
|
+
// Forward rate limit notifications from WebSocketClient (emitted by handlers)
|
|
1748
|
+
this.wsClient.on("rate_limit", (notification) => {
|
|
1749
|
+
this.emit("rate_limit", notification);
|
|
1750
|
+
});
|
|
1751
|
+
|
|
1752
|
+
// Forward user authenticated events from WebSocketClient (emitted by handlers)
|
|
1753
|
+
this.wsClient.on("user:authenticated", (data) => {
|
|
1754
|
+
this.emit("user:authenticated", data);
|
|
1755
|
+
});
|
|
1756
|
+
|
|
1497
1757
|
// Forward webhook events from WebhookHandler
|
|
1498
1758
|
this.webhookHandler.on("webhook:sent", (payload, url) =>
|
|
1499
1759
|
this.emit("webhook:sent", payload, url)
|
|
@@ -1510,8 +1770,13 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
1510
1770
|
this.connection.on("error", (error) => {
|
|
1511
1771
|
this.emit("error", error);
|
|
1512
1772
|
// Fire and forget - don't block event emission
|
|
1773
|
+
// Defensive check: ensure error has toJSON method (SDKError instances do)
|
|
1774
|
+
const errorPayload =
|
|
1775
|
+
typeof error.toJSON === "function"
|
|
1776
|
+
? error.toJSON()
|
|
1777
|
+
: { message: error.message, name: error.name, code: error.code };
|
|
1513
1778
|
this.webhookHandler
|
|
1514
|
-
.sendWebhook("error",
|
|
1779
|
+
.sendWebhook("error", errorPayload, { code: error.code })
|
|
1515
1780
|
.catch((webhookError) => {
|
|
1516
1781
|
this.logger.error("Failed to send webhook for error event", webhookError);
|
|
1517
1782
|
});
|
|
@@ -1529,6 +1794,16 @@ export class TeneoSDK extends EventEmitter<SDKEvents> {
|
|
|
1529
1794
|
return createPinoLogger(this.config.logLevel ?? "info", "TeneoSDK");
|
|
1530
1795
|
}
|
|
1531
1796
|
|
|
1797
|
+
/**
|
|
1798
|
+
* Derive wallet address from private key
|
|
1799
|
+
*/
|
|
1800
|
+
private deriveWalletAddress(privateKey: string | SecurePrivateKey): string {
|
|
1801
|
+
if (privateKey instanceof SecurePrivateKey) {
|
|
1802
|
+
return privateKey.use((key) => privateKeyToAccount(key as `0x${string}`).address);
|
|
1803
|
+
}
|
|
1804
|
+
return privateKeyToAccount(privateKey as `0x${string}`).address;
|
|
1805
|
+
}
|
|
1806
|
+
|
|
1532
1807
|
/**
|
|
1533
1808
|
* Creates a new SDK configuration builder for fluent configuration.
|
|
1534
1809
|
* The builder pattern provides a more intuitive way to configure the SDK
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent category constants and Zod schemas
|
|
3
|
+
* Enables agents to be tagged with up to 2 categories for better discoverability
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Predefined agent categories for classification
|
|
10
|
+
*/
|
|
11
|
+
export const AGENT_CATEGORIES = [
|
|
12
|
+
"Trading",
|
|
13
|
+
"Finance",
|
|
14
|
+
"Crypto",
|
|
15
|
+
"Social Media",
|
|
16
|
+
"Lead Generation",
|
|
17
|
+
"E-Commerce",
|
|
18
|
+
"SEO",
|
|
19
|
+
"News",
|
|
20
|
+
"Real Estate",
|
|
21
|
+
"Travel",
|
|
22
|
+
"Automation",
|
|
23
|
+
"Developer Tools",
|
|
24
|
+
"AI",
|
|
25
|
+
"Integrations",
|
|
26
|
+
"Open Source",
|
|
27
|
+
"Jobs",
|
|
28
|
+
"Price Lists",
|
|
29
|
+
"Other"
|
|
30
|
+
] as const;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Maximum number of categories an agent can have
|
|
34
|
+
*/
|
|
35
|
+
export const MAX_CATEGORIES = 2;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Zod schema for validating a single agent category
|
|
39
|
+
*/
|
|
40
|
+
export const AgentCategorySchema = z.enum(AGENT_CATEGORIES);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* TypeScript type for a single agent category
|
|
44
|
+
*/
|
|
45
|
+
export type AgentCategory = z.infer<typeof AgentCategorySchema>;
|