@teneo-protocol/sdk 1.0.0 → 2.0.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/.github/workflows/publish-npm.yml +8 -6
- package/CHANGELOG.md +265 -0
- package/README.md +406 -53
- package/dist/core/websocket-client.d.ts +13 -0
- package/dist/core/websocket-client.d.ts.map +1 -1
- package/dist/core/websocket-client.js +34 -3
- package/dist/core/websocket-client.js.map +1 -1
- 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 +70 -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-status-update-handler.d.ts +904 -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 +51 -0
- package/dist/handlers/message-handlers/agent-status-update-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-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 +65 -5
- 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-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 +46 -4
- package/dist/handlers/message-handlers/auth-success-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/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/index.d.ts +5 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.js +23 -1
- package/dist/handlers/message-handlers/index.js.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +877 -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 +38 -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 +886 -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 +51 -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 +178 -89
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.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/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 +1 -0
- 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 +92 -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/types.d.ts +2 -0
- 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/managers/agent-room-manager.d.ts +222 -0
- package/dist/managers/agent-room-manager.d.ts.map +1 -0
- package/dist/managers/agent-room-manager.js +508 -0
- package/dist/managers/agent-room-manager.js.map +1 -0
- package/dist/managers/index.d.ts +2 -0
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/index.js +5 -1
- package/dist/managers/index.js.map +1 -1
- package/dist/managers/message-router.d.ts +1 -1
- package/dist/managers/message-router.d.ts.map +1 -1
- package/dist/managers/message-router.js +41 -4
- 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 +440 -0
- package/dist/managers/room-management-manager.js.map +1 -0
- package/dist/managers/room-manager.d.ts +4 -4
- package/dist/managers/room-manager.d.ts.map +1 -1
- package/dist/managers/room-manager.js +1 -1
- package/dist/managers/room-manager.js.map +1 -1
- package/dist/teneo-sdk.d.ts +362 -14
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +497 -7
- package/dist/teneo-sdk.js.map +1 -1
- package/dist/types/config.d.ts +63 -54
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +9 -5
- package/dist/types/config.js.map +1 -1
- package/dist/types/error-codes.d.ts +2 -0
- package/dist/types/error-codes.d.ts.map +1 -1
- package/dist/types/error-codes.js +3 -0
- package/dist/types/error-codes.js.map +1 -1
- package/dist/types/events.d.ts +132 -68
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +27 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +11396 -2559
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +294 -27
- package/dist/types/messages.js.map +1 -1
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/types/validation.js +1 -1
- package/dist/types/validation.js.map +1 -1
- package/dist/utils/bounded-queue.d.ts +1 -1
- package/dist/utils/bounded-queue.js +6 -6
- package/dist/utils/circuit-breaker.d.ts.map +1 -1
- package/dist/utils/circuit-breaker.js.map +1 -1
- package/dist/utils/event-waiter.d.ts.map +1 -1
- package/dist/utils/event-waiter.js +2 -1
- package/dist/utils/event-waiter.js.map +1 -1
- package/dist/utils/rate-limiter.d.ts.map +1 -1
- package/dist/utils/rate-limiter.js +4 -6
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/secure-private-key.d.ts.map +1 -1
- package/dist/utils/secure-private-key.js +9 -15
- package/dist/utils/secure-private-key.js.map +1 -1
- package/dist/utils/signature-verifier.d.ts +2 -2
- package/dist/utils/signature-verifier.d.ts.map +1 -1
- package/dist/utils/signature-verifier.js +5 -5
- package/dist/utils/signature-verifier.js.map +1 -1
- package/examples/.env.example +1 -1
- package/examples/agent-room-management-example.ts +334 -0
- package/examples/claude-agent-x-follower/.env.example +117 -0
- package/examples/claude-agent-x-follower/QUICKSTART.md +243 -0
- package/examples/claude-agent-x-follower/README.md +540 -0
- package/examples/claude-agent-x-follower/index.ts +248 -0
- package/examples/claude-agent-x-follower/package.json +37 -0
- package/examples/claude-agent-x-follower/tsconfig.json +20 -0
- package/examples/n8n-teneo/.env.example +127 -0
- package/examples/n8n-teneo/Dockerfile +42 -0
- package/examples/n8n-teneo/README.md +564 -0
- package/examples/n8n-teneo/docker-compose.yml +71 -0
- package/examples/n8n-teneo/index.ts +177 -0
- package/examples/n8n-teneo/package.json +22 -0
- package/examples/n8n-teneo/tsconfig.json +12 -0
- package/examples/n8n-teneo/workflows/x-timeline.json +66 -0
- package/examples/openai-teneo/.env.example +130 -0
- package/examples/openai-teneo/README.md +635 -0
- package/examples/openai-teneo/index.ts +280 -0
- package/examples/openai-teneo/package.json +24 -0
- package/examples/openai-teneo/tsconfig.json +16 -0
- package/examples/production-dashboard/.env.example +5 -3
- package/examples/production-dashboard/README.md +839 -0
- package/examples/production-dashboard/pnpm-lock.yaml +92 -0
- package/examples/production-dashboard/public/dashboard.html +1150 -504
- package/examples/production-dashboard/server.ts +428 -12
- package/examples/room-management-example.ts +285 -0
- package/examples/usage/.env.example +17 -0
- package/examples/usage/01-connect.ts +116 -0
- package/examples/usage/02-list-agents.ts +153 -0
- package/examples/usage/03-pick-agent.ts +201 -0
- package/examples/usage/04-find-by-capability.ts +237 -0
- package/examples/usage/05-webhook-example.ts +319 -0
- package/examples/usage/06-simple-api-server.ts +396 -0
- package/examples/usage/07-event-listener.ts +402 -0
- package/examples/usage/README.md +383 -0
- package/examples/usage/package.json +42 -0
- package/package.json +13 -3
- package/src/core/websocket-client.ts +43 -9
- package/src/formatters/response-formatter.test.ts +8 -2
- package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +83 -0
- package/src/handlers/message-handlers/agent-status-update-handler.ts +58 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +73 -5
- package/src/handlers/message-handlers/auth-success-handler.ts +58 -6
- package/src/handlers/message-handlers/index.ts +19 -0
- package/src/handlers/message-handlers/list-available-agents-handler.ts +41 -0
- package/src/handlers/message-handlers/list-room-agents-handler.ts +61 -0
- package/src/handlers/message-handlers/regular-message-handler.ts +1 -0
- package/src/handlers/message-handlers/room-operation-response-handler.ts +105 -0
- package/src/handlers/message-handlers/types.ts +6 -0
- package/src/handlers/webhook-handler.test.ts +13 -10
- package/src/managers/agent-room-manager.ts +609 -0
- package/src/managers/index.ts +2 -0
- package/src/managers/message-router.ts +48 -6
- package/src/managers/room-management-manager.ts +523 -0
- package/src/managers/room-manager.ts +12 -6
- package/src/teneo-sdk.ts +543 -10
- package/src/types/config.ts +13 -6
- package/src/types/error-codes.ts +4 -0
- package/src/types/events.ts +24 -0
- package/src/types/index.ts +55 -0
- package/src/types/messages.ts +374 -41
- package/src/types/validation.ts +4 -1
- package/src/utils/bounded-queue.ts +9 -9
- package/src/utils/circuit-breaker.ts +4 -1
- package/src/utils/deduplication-cache.test.ts +2 -6
- package/src/utils/event-waiter.test.ts +4 -1
- package/src/utils/event-waiter.ts +5 -7
- package/src/utils/rate-limiter.test.ts +5 -17
- package/src/utils/rate-limiter.ts +6 -9
- package/src/utils/secure-private-key.test.ts +66 -59
- package/src/utils/secure-private-key.ts +10 -16
- package/src/utils/signature-verifier.test.ts +75 -70
- package/src/utils/signature-verifier.ts +7 -8
- package/src/utils/ssrf-validator.test.ts +3 -3
- package/tests/integration/room-management.test.ts +514 -0
- package/tests/integration/websocket.test.ts +1 -1
- package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +394 -0
- package/tests/unit/handlers/agent-status-update-handler.test.ts +407 -0
- package/tests/unit/handlers/auth-success-handler-rooms.test.ts +699 -0
- package/tests/unit/handlers/list-available-agents-handler.test.ts +256 -0
- package/tests/unit/handlers/list-room-agents-handler.test.ts +294 -0
- package/tests/unit/handlers/room-operation-response-handler.test.ts +527 -0
- package/tests/unit/managers/agent-room-manager.test.ts +534 -0
- package/tests/unit/managers/room-management-manager.test.ts +438 -0
package/README.md
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
**Connect your app to the Teneo AI Agent Network**
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/@teneo-protocol/sdk)
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](https://nodejs.org/)
|
|
8
|
-
[](/)
|
|
9
9
|
|
|
10
10
|
The Teneo Protocol SDK lets you connect your application to a **decentralized network of specialized AI agents**. Instead of calling a single AI model, your app taps into an entire ecosystem where:
|
|
11
11
|
|
|
@@ -30,7 +30,7 @@ import { TeneoSDK } from "@teneo-protocol/sdk";
|
|
|
30
30
|
|
|
31
31
|
// 1. Initialize with your Ethereum private key
|
|
32
32
|
const sdk = new TeneoSDK({
|
|
33
|
-
wsUrl: "wss://
|
|
33
|
+
wsUrl: "wss://your-teneo-server.com/ws",
|
|
34
34
|
privateKey: "your_private_key_here" // No 0x prefix
|
|
35
35
|
});
|
|
36
36
|
|
|
@@ -47,12 +47,42 @@ await sdk.sendMessage("Give me the last 5 tweets from @elonmusk");
|
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
**That's it!** The coordinator automatically:
|
|
50
|
+
|
|
50
51
|
1. Routes your message to the right agent
|
|
51
52
|
2. Gets the response
|
|
52
53
|
3. Delivers it via the event you're listening to
|
|
53
54
|
|
|
54
55
|
---
|
|
55
56
|
|
|
57
|
+
## ✨ What's New in v2.0
|
|
58
|
+
|
|
59
|
+
Version 2.0 introduces powerful **room management** and **agent customization** capabilities:
|
|
60
|
+
|
|
61
|
+
### 🏠 Multi-Room Management
|
|
62
|
+
|
|
63
|
+
- **Create multiple rooms** for different contexts (crypto, gaming, research, etc.)
|
|
64
|
+
- **Update and delete** your owned rooms
|
|
65
|
+
- **Track room limits** based on your subscription tier
|
|
66
|
+
- **Invite members** to your rooms (coming soon)
|
|
67
|
+
|
|
68
|
+
### 🤖 Agent Room Management
|
|
69
|
+
|
|
70
|
+
- **Customize which agents** are available in each room
|
|
71
|
+
- **Add/remove agents** from your owned rooms
|
|
72
|
+
- **List room agents** with caching for performance
|
|
73
|
+
- **Real-time agent status updates** for room availability
|
|
74
|
+
|
|
75
|
+
### 📊 Enhanced APIs
|
|
76
|
+
|
|
77
|
+
- 8 new room management methods
|
|
78
|
+
- 8 new agent-room management methods
|
|
79
|
+
- 14 new events for room and agent operations
|
|
80
|
+
- Intelligent caching with 5-minute TTL
|
|
81
|
+
|
|
82
|
+
[Jump to Room Management API](#-room-management-api) | [Jump to Agent Room Management API](#-agent-room-management-api)
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
56
86
|
## How It Works
|
|
57
87
|
|
|
58
88
|
### 1. Agent Network Architecture
|
|
@@ -88,6 +118,7 @@ Unlike traditional APIs with API keys, Teneo uses **Ethereum wallet signatures**
|
|
|
88
118
|
```
|
|
89
119
|
|
|
90
120
|
This enables:
|
|
121
|
+
|
|
91
122
|
- 🔐 **No API keys to manage** - Your wallet IS your identity
|
|
92
123
|
|
|
93
124
|
---
|
|
@@ -104,23 +135,35 @@ pnpm run build
|
|
|
104
135
|
|
|
105
136
|
# Set credentials
|
|
106
137
|
export PRIVATE_KEY=your_private_key
|
|
107
|
-
export TENEO_WS_URL=wss://
|
|
138
|
+
export TENEO_WS_URL=wss://your-teneo-server.com/ws
|
|
108
139
|
```
|
|
109
140
|
|
|
110
|
-
###
|
|
141
|
+
### Production Dashboard Example
|
|
142
|
+
|
|
143
|
+
The **Production Dashboard** is a comprehensive example showcasing **ALL SDK features** in a real-world web application:
|
|
111
144
|
|
|
112
145
|
```bash
|
|
113
|
-
|
|
146
|
+
pnpm example:dashboard
|
|
147
|
+
# or
|
|
148
|
+
cd examples/production-dashboard && bun run server.ts
|
|
114
149
|
```
|
|
115
150
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
- ✅ Room management
|
|
120
|
-
- ✅ Sending messages
|
|
121
|
-
- ✅ Event listeners
|
|
122
|
-
- ✅ Secure private key handling
|
|
151
|
+
Then open: **[http://localhost:3000](http://localhost:3000)**
|
|
152
|
+
|
|
153
|
+
**What it demonstrates:**
|
|
123
154
|
|
|
155
|
+
- ✅ **Full WebSocket Integration** - Connection, authentication, auto-reconnection
|
|
156
|
+
- ✅ **Room Management (v2.0)** - Create, update, delete rooms with ownership tracking
|
|
157
|
+
- ✅ **Agent-Room Management (v2.0)** - Add/remove agents, list room agents with caching
|
|
158
|
+
- ✅ **Message Sending** - Coordinator-based and direct agent commands
|
|
159
|
+
- ✅ **Real-time Updates** - Server-Sent Events (SSE) for live dashboard
|
|
160
|
+
- ✅ **Agent Discovery** - List agents with capabilities and status
|
|
161
|
+
- ✅ **Secure Private Key Handling** - AES-256-GCM encryption in memory
|
|
162
|
+
- ✅ **Webhook Integration** - Real-time event streaming with circuit breaker
|
|
163
|
+
- ✅ **Health Monitoring** - `/health` and `/metrics` endpoints
|
|
164
|
+
- ✅ **Complete Event System** - All SDK events with real-time UI updates
|
|
165
|
+
|
|
166
|
+
Built with **Hono** (fast web framework) and **Bun** (fast JavaScript runtime). See `examples/production-dashboard/README.md` for details.
|
|
124
167
|
|
|
125
168
|
---
|
|
126
169
|
|
|
@@ -139,14 +182,11 @@ const sdk = new TeneoSDK({
|
|
|
139
182
|
await sdk.connect();
|
|
140
183
|
|
|
141
184
|
// Wait for response (blocks until agent responds or timeout)
|
|
142
|
-
const response = await sdk.sendMessage(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
format: "both" // Get both raw data and humanized text
|
|
148
|
-
}
|
|
149
|
-
);
|
|
185
|
+
const response = await sdk.sendMessage("Give me the last 5 tweets from @elonmusk?", {
|
|
186
|
+
waitForResponse: true,
|
|
187
|
+
timeout: 30000, // 30 seconds
|
|
188
|
+
format: "both" // Get both raw data and humanized text
|
|
189
|
+
});
|
|
150
190
|
|
|
151
191
|
console.log("Agent:", response.agentName);
|
|
152
192
|
console.log("Answer:", response.humanized);
|
|
@@ -184,7 +224,6 @@ console.log("Active rooms:", rooms);
|
|
|
184
224
|
// Output: Active rooms: ['Crawler Room', 'KOL tracker']
|
|
185
225
|
```
|
|
186
226
|
|
|
187
|
-
|
|
188
227
|
### Example 3: Webhook Integration
|
|
189
228
|
|
|
190
229
|
Receive agent responses via HTTP POST to your server:
|
|
@@ -221,7 +260,7 @@ const sdk = new TeneoSDK({
|
|
|
221
260
|
privateKey: process.env.PRIVATE_KEY!,
|
|
222
261
|
webhookUrl: "https://your-webhook.com/",
|
|
223
262
|
webhookHeaders: {
|
|
224
|
-
|
|
263
|
+
Authorization: "Bearer your-secret-token"
|
|
225
264
|
}
|
|
226
265
|
});
|
|
227
266
|
|
|
@@ -243,6 +282,310 @@ console.log("Circuit state:", status.circuitState); // OPEN/CLOSED/HALF_OPEN
|
|
|
243
282
|
|
|
244
283
|
---
|
|
245
284
|
|
|
285
|
+
## 🏠 Room Management API
|
|
286
|
+
|
|
287
|
+
Create and manage multiple rooms for different contexts and use cases.
|
|
288
|
+
|
|
289
|
+
### Creating Rooms
|
|
290
|
+
|
|
291
|
+
```typescript
|
|
292
|
+
// Create a new room
|
|
293
|
+
const room = await sdk.createRoom({
|
|
294
|
+
name: "Crypto Research",
|
|
295
|
+
description: "Room for crypto analysis"
|
|
296
|
+
});
|
|
297
|
+
console.log(`Created room: ${room.id}`);
|
|
298
|
+
|
|
299
|
+
// Check if you can create more rooms
|
|
300
|
+
if (sdk.canCreateRoom()) {
|
|
301
|
+
await sdk.createRoom({ name: "Gaming Room" });
|
|
302
|
+
} else {
|
|
303
|
+
console.log(`Room limit reached: ${sdk.getOwnedRoomCount()}/${sdk.getRoomLimit()}`);
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Querying Rooms
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
// Get all owned rooms (rooms you created)
|
|
311
|
+
const ownedRooms = sdk.getOwnedRooms();
|
|
312
|
+
console.log(`You own ${ownedRooms.length} rooms:`);
|
|
313
|
+
ownedRooms.forEach((room) => {
|
|
314
|
+
console.log(` - ${room.name} (${room.is_public ? "Public" : "Private"})`);
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
// Get shared rooms (rooms you were invited to)
|
|
318
|
+
const sharedRooms = sdk.getSharedRooms();
|
|
319
|
+
console.log(`You have access to ${sharedRooms.length} shared rooms`);
|
|
320
|
+
|
|
321
|
+
// Get all rooms (owned + shared)
|
|
322
|
+
const allRooms = sdk.getAllRooms();
|
|
323
|
+
console.log(`Total rooms accessible: ${allRooms.length}`);
|
|
324
|
+
|
|
325
|
+
// Get specific room by ID
|
|
326
|
+
const room = sdk.getRoomById("room-123");
|
|
327
|
+
if (room) {
|
|
328
|
+
console.log(`Room: ${room.name}`);
|
|
329
|
+
console.log(`Created by: ${room.created_by}`);
|
|
330
|
+
console.log(`You are ${room.is_owner ? "owner" : "member"}`);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Check room limits
|
|
334
|
+
console.log(`Room capacity: ${sdk.getOwnedRoomCount()}/${sdk.getRoomLimit()}`);
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Updating Rooms
|
|
338
|
+
|
|
339
|
+
```typescript
|
|
340
|
+
// Update room details (owner only)
|
|
341
|
+
const updated = await sdk.updateRoom("room-123", {
|
|
342
|
+
name: "Updated Room Name",
|
|
343
|
+
description: "New description"
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
console.log(`Room updated: ${updated.name}`);
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Deleting Rooms
|
|
350
|
+
|
|
351
|
+
```typescript
|
|
352
|
+
// Delete a room you own
|
|
353
|
+
await sdk.deleteRoom("room-123");
|
|
354
|
+
console.log("Room deleted");
|
|
355
|
+
|
|
356
|
+
// Listen for deletion events
|
|
357
|
+
sdk.on("room:deleted", (roomId) => {
|
|
358
|
+
console.log(`Room ${roomId} was deleted`);
|
|
359
|
+
});
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### Room Events
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
// Room lifecycle events
|
|
366
|
+
sdk.on("room:created", (room) => {
|
|
367
|
+
console.log(`✅ Created: ${room.name}`);
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
sdk.on("room:updated", (room) => {
|
|
371
|
+
console.log(`📝 Updated: ${room.name}`);
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
sdk.on("room:deleted", (roomId) => {
|
|
375
|
+
console.log(`🗑️ Deleted: ${roomId}`);
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
// Error handling
|
|
379
|
+
sdk.on("room:create_error", (error) => {
|
|
380
|
+
console.error(`Failed to create room: ${error.message}`);
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
sdk.on("room:update_error", (error, roomId) => {
|
|
384
|
+
console.error(`Failed to update room ${roomId}: ${error.message}`);
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
sdk.on("room:delete_error", (error, roomId) => {
|
|
388
|
+
console.error(`Failed to delete room ${roomId}: ${error.message}`);
|
|
389
|
+
});
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## 🤖 Agent Room Management API
|
|
395
|
+
|
|
396
|
+
Customize which agents are available in each of your rooms.
|
|
397
|
+
|
|
398
|
+
### Adding Agents to Rooms
|
|
399
|
+
|
|
400
|
+
```typescript
|
|
401
|
+
// Add an agent to your room (owner only)
|
|
402
|
+
await sdk.addAgentToRoom("room-123", "agent-456");
|
|
403
|
+
console.log("Agent added to room");
|
|
404
|
+
|
|
405
|
+
// Listen for confirmation
|
|
406
|
+
sdk.on("agent_room:agent_added", (roomId, agentId) => {
|
|
407
|
+
console.log(`✅ Agent ${agentId} added to room ${roomId}`);
|
|
408
|
+
});
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### Removing Agents from Rooms
|
|
412
|
+
|
|
413
|
+
```typescript
|
|
414
|
+
// Remove an agent from your room (owner only)
|
|
415
|
+
await sdk.removeAgentFromRoom("room-123", "agent-456");
|
|
416
|
+
console.log("Agent removed from room");
|
|
417
|
+
|
|
418
|
+
// Listen for confirmation
|
|
419
|
+
sdk.on("agent_room:agent_removed", (roomId, agentId) => {
|
|
420
|
+
console.log(`🗑️ Agent ${agentId} removed from room ${roomId}`);
|
|
421
|
+
});
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### Listing Room Agents
|
|
425
|
+
|
|
426
|
+
```typescript
|
|
427
|
+
// List all agents in a room (with 5-minute cache)
|
|
428
|
+
const roomAgents = await sdk.listRoomAgents("room-123");
|
|
429
|
+
console.log(`${roomAgents.length} agents in this room:`);
|
|
430
|
+
roomAgents.forEach((agent) => {
|
|
431
|
+
console.log(` - ${agent.agent_name} (${agent.status})`);
|
|
432
|
+
if (agent.capabilities) {
|
|
433
|
+
console.log(` Capabilities: ${agent.capabilities.map((c) => c.name).join(", ")}`);
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
// Force refresh (bypass cache)
|
|
438
|
+
const freshAgents = await sdk.listRoomAgents("room-123", false);
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### Listing Available Agents
|
|
442
|
+
|
|
443
|
+
```typescript
|
|
444
|
+
// List agents NOT yet in the room (available to add)
|
|
445
|
+
const available = await sdk.listAvailableAgents("room-123");
|
|
446
|
+
console.log(`${available.length} agents available to add:`);
|
|
447
|
+
available.forEach((agent) => {
|
|
448
|
+
console.log(` - ${agent.agent_name}`);
|
|
449
|
+
if (agent.description) {
|
|
450
|
+
console.log(` ${agent.description}`);
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Query Methods (Synchronous - from cache)
|
|
456
|
+
|
|
457
|
+
```typescript
|
|
458
|
+
// Check if specific agent is in room (instant, no network call)
|
|
459
|
+
const isInRoom = sdk.isAgentInRoom("room-123", "agent-456");
|
|
460
|
+
if (isInRoom === true) {
|
|
461
|
+
console.log("Agent is in the room");
|
|
462
|
+
} else if (isInRoom === false) {
|
|
463
|
+
console.log("Agent is NOT in the room");
|
|
464
|
+
} else {
|
|
465
|
+
console.log("Cache not available - call listRoomAgents() first");
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
// Get room agent count (instant)
|
|
469
|
+
const count = sdk.getRoomAgentCount("room-123");
|
|
470
|
+
if (count !== undefined) {
|
|
471
|
+
console.log(`Room has ${count} agents`);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
// Get cached room agents (instant)
|
|
475
|
+
const cached = sdk.getRoomAgents("room-123");
|
|
476
|
+
if (cached) {
|
|
477
|
+
console.log("Agents:", cached.map((a) => a.agent_name).join(", "));
|
|
478
|
+
} else {
|
|
479
|
+
console.log("No cached data - call listRoomAgents() first");
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// Get cached available agents (instant)
|
|
483
|
+
const cachedAvailable = sdk.getAvailableAgents("room-123");
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
### Cache Management
|
|
487
|
+
|
|
488
|
+
```typescript
|
|
489
|
+
// Caching behavior:
|
|
490
|
+
// - listRoomAgents() and listAvailableAgents() cache results for 5 minutes
|
|
491
|
+
// - Cache automatically invalidated when you add/remove agents
|
|
492
|
+
// - Cache automatically invalidated on agent status updates
|
|
493
|
+
|
|
494
|
+
// Manual cache invalidation (if needed)
|
|
495
|
+
sdk.invalidateAgentRoomCache("room-123");
|
|
496
|
+
console.log("Cache cleared for room-123");
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### Agent Room Events
|
|
500
|
+
|
|
501
|
+
```typescript
|
|
502
|
+
// Agent add/remove events
|
|
503
|
+
sdk.on("agent_room:agent_added", (roomId, agentId) => {
|
|
504
|
+
console.log(`✅ Agent ${agentId} added to ${roomId}`);
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
sdk.on("agent_room:agent_removed", (roomId, agentId) => {
|
|
508
|
+
console.log(`🗑️ Agent ${agentId} removed from ${roomId}`);
|
|
509
|
+
});
|
|
510
|
+
|
|
511
|
+
// List events
|
|
512
|
+
sdk.on("agent_room:agents_listed", (roomId, agents) => {
|
|
513
|
+
console.log(`📋 ${agents.length} agents in room ${roomId}`);
|
|
514
|
+
});
|
|
515
|
+
|
|
516
|
+
sdk.on("agent_room:available_agents_listed", (agents) => {
|
|
517
|
+
console.log(`📋 ${agents.length} agents available to add`);
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
// Status updates (real-time)
|
|
521
|
+
sdk.on("agent_room:status_update", (data) => {
|
|
522
|
+
console.log(`🔄 Agent ${data.agentId} status updated in room ${data.roomId}`);
|
|
523
|
+
console.log(` New status: ${data.status}`);
|
|
524
|
+
});
|
|
525
|
+
|
|
526
|
+
// Error handling
|
|
527
|
+
sdk.on("agent_room:add_error", (error, roomId) => {
|
|
528
|
+
console.error(`Failed to add agent to ${roomId}: ${error.message}`);
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
sdk.on("agent_room:remove_error", (error, roomId) => {
|
|
532
|
+
console.error(`Failed to remove agent from ${roomId}: ${error.message}`);
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
sdk.on("agent_room:list_error", (error, roomId) => {
|
|
536
|
+
console.error(`Failed to list agents in ${roomId}: ${error.message}`);
|
|
537
|
+
});
|
|
538
|
+
|
|
539
|
+
sdk.on("agent_room:list_available_error", (error, roomId) => {
|
|
540
|
+
console.error(`Failed to list available agents for ${roomId}: ${error.message}`);
|
|
541
|
+
});
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### Complete Example: Room Setup
|
|
545
|
+
|
|
546
|
+
```typescript
|
|
547
|
+
// Complete workflow: Create room and customize agents
|
|
548
|
+
async function setupCustomRoom() {
|
|
549
|
+
// 1. Create a new room
|
|
550
|
+
const room = await sdk.createRoom({
|
|
551
|
+
name: "My Custom Room",
|
|
552
|
+
description: "Specialized agent room"
|
|
553
|
+
});
|
|
554
|
+
console.log(`✅ Created room: ${room.id}`);
|
|
555
|
+
|
|
556
|
+
// 2. See what agents are available
|
|
557
|
+
const available = await sdk.listAvailableAgents(room.id);
|
|
558
|
+
console.log(`${available.length} agents available`);
|
|
559
|
+
|
|
560
|
+
// 3. Add specific agents you want
|
|
561
|
+
const cryptoAgent = available.find((a) => a.agent_name?.includes("Crypto"));
|
|
562
|
+
if (cryptoAgent) {
|
|
563
|
+
await sdk.addAgentToRoom(room.id, cryptoAgent.agent_id);
|
|
564
|
+
console.log(`✅ Added ${cryptoAgent.agent_name}`);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
const analyticsAgent = available.find((a) => a.agent_name?.includes("Analytics"));
|
|
568
|
+
if (analyticsAgent) {
|
|
569
|
+
await sdk.addAgentToRoom(room.id, analyticsAgent.agent_id);
|
|
570
|
+
console.log(`✅ Added ${analyticsAgent.agent_name}`);
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
// 4. Verify room configuration
|
|
574
|
+
const roomAgents = await sdk.listRoomAgents(room.id);
|
|
575
|
+
console.log(`\n🎯 Room configured with ${roomAgents.length} agents:`);
|
|
576
|
+
roomAgents.forEach((agent) => {
|
|
577
|
+
console.log(` - ${agent.agent_name}`);
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
// 5. Now send messages to this room
|
|
581
|
+
await sdk.sendMessage("Analyze BTC price trends", { room: room.id });
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
setupCustomRoom();
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
246
589
|
## 🎨 Event System
|
|
247
590
|
|
|
248
591
|
The SDK is fully event-driven. Subscribe to what matters:
|
|
@@ -254,7 +597,9 @@ sdk.on("connection:open", () => console.log("🔌 WebSocket connected"));
|
|
|
254
597
|
sdk.on("connection:close", (code, reason) => console.log(`❌ Disconnected: ${reason}`));
|
|
255
598
|
sdk.on("connection:reconnecting", (attempt) => console.log(`🔄 Reconnecting (attempt ${attempt})`));
|
|
256
599
|
|
|
257
|
-
sdk.on("auth:challenge", (challenge) =>
|
|
600
|
+
sdk.on("auth:challenge", (challenge) =>
|
|
601
|
+
console.log("🔐 Challenge received, signing with wallet...")
|
|
602
|
+
);
|
|
258
603
|
sdk.on("auth:success", (state) => {
|
|
259
604
|
console.log(`✅ Authenticated as ${state.walletAddress}`);
|
|
260
605
|
console.log(`Whitelisted: ${state.isWhitelisted}`);
|
|
@@ -277,7 +622,7 @@ sdk.on("agent:response", (response) => {
|
|
|
277
622
|
|
|
278
623
|
sdk.on("agent:list", (agents) => {
|
|
279
624
|
console.log(`📋 Agent list updated: ${agents.length} agents available`);
|
|
280
|
-
agents.forEach(agent => {
|
|
625
|
+
agents.forEach((agent) => {
|
|
281
626
|
console.log(` - ${agent.name}: ${agent.capabilities?.join(", ")}`);
|
|
282
627
|
});
|
|
283
628
|
});
|
|
@@ -304,7 +649,7 @@ sdk.on("room:unsubscribed", (data) => {
|
|
|
304
649
|
|
|
305
650
|
```typescript
|
|
306
651
|
const sdk = new TeneoSDK({
|
|
307
|
-
wsUrl: "wss://
|
|
652
|
+
wsUrl: "wss://your-teneo-server.com/ws",
|
|
308
653
|
privateKey: "your_key", // No 0x prefix
|
|
309
654
|
defaultRoom: "general",
|
|
310
655
|
reconnect: true,
|
|
@@ -322,7 +667,7 @@ const secureKey = new SecurePrivateKey(process.env.PRIVATE_KEY!);
|
|
|
322
667
|
|
|
323
668
|
const config = new SDKConfigBuilder()
|
|
324
669
|
// Required
|
|
325
|
-
.withWebSocketUrl("wss://
|
|
670
|
+
.withWebSocketUrl("wss://your-teneo-server.com/ws")
|
|
326
671
|
.withAuthentication(secureKey) // Encrypted key
|
|
327
672
|
|
|
328
673
|
// Rooms
|
|
@@ -331,15 +676,15 @@ const config = new SDKConfigBuilder()
|
|
|
331
676
|
// Reconnection strategy
|
|
332
677
|
.withReconnectionStrategy({
|
|
333
678
|
type: "exponential",
|
|
334
|
-
baseDelay: 3000,
|
|
335
|
-
maxDelay: 120000,
|
|
679
|
+
baseDelay: 3000, // Start at 3 seconds
|
|
680
|
+
maxDelay: 120000, // Cap at 2 minutes
|
|
336
681
|
maxAttempts: 20,
|
|
337
|
-
jitter: true
|
|
682
|
+
jitter: true // Prevent thundering herd
|
|
338
683
|
})
|
|
339
684
|
|
|
340
685
|
// Webhook with retry
|
|
341
686
|
.withWebhook("https://your-server.com/webhook", {
|
|
342
|
-
|
|
687
|
+
Authorization: "Bearer token"
|
|
343
688
|
})
|
|
344
689
|
.withWebhookRetryStrategy({
|
|
345
690
|
type: "exponential",
|
|
@@ -350,7 +695,7 @@ const config = new SDKConfigBuilder()
|
|
|
350
695
|
|
|
351
696
|
// Response formatting
|
|
352
697
|
.withResponseFormat({
|
|
353
|
-
format: "both",
|
|
698
|
+
format: "both", // 'raw' | 'humanized' | 'both'
|
|
354
699
|
includeMetadata: true
|
|
355
700
|
})
|
|
356
701
|
|
|
@@ -362,7 +707,7 @@ const config = new SDKConfigBuilder()
|
|
|
362
707
|
})
|
|
363
708
|
|
|
364
709
|
// Performance
|
|
365
|
-
.withRateLimit(10, 20)
|
|
710
|
+
.withRateLimit(10, 20) // 10 msg/sec, burst 20
|
|
366
711
|
.withMessageDeduplication(true, 60000, 10000)
|
|
367
712
|
.withLogging("debug")
|
|
368
713
|
|
|
@@ -376,7 +721,7 @@ const sdk = new TeneoSDK(config);
|
|
|
376
721
|
Create `.env`:
|
|
377
722
|
|
|
378
723
|
```bash
|
|
379
|
-
TENEO_WS_URL=wss://
|
|
724
|
+
TENEO_WS_URL=wss://your-teneo-server.com/ws
|
|
380
725
|
PRIVATE_KEY=your_private_key_without_0x
|
|
381
726
|
WALLET_ADDRESS=0xYourWalletAddress
|
|
382
727
|
DEFAULT_ROOM=general
|
|
@@ -448,11 +793,11 @@ console.log("Circuit state:", status.circuitState);
|
|
|
448
793
|
|
|
449
794
|
Configurable exponential backoff, linear, or constant delays:
|
|
450
795
|
|
|
451
|
-
| Strategy
|
|
452
|
-
|
|
453
|
-
| **Exponential** | `base * mult^attempt` | 2s, 4s, 8s, 16s, 32s
|
|
454
|
-
| **Linear**
|
|
455
|
-
| **Constant**
|
|
796
|
+
| Strategy | Formula | Example (base=2s, mult=2) |
|
|
797
|
+
| --------------- | --------------------- | ------------------------- |
|
|
798
|
+
| **Exponential** | `base * mult^attempt` | 2s, 4s, 8s, 16s, 32s |
|
|
799
|
+
| **Linear** | `base * attempt` | 2s, 4s, 6s, 8s, 10s |
|
|
800
|
+
| **Constant** | `base` | 2s, 2s, 2s, 2s, 2s |
|
|
456
801
|
|
|
457
802
|
```typescript
|
|
458
803
|
const config = new SDKConfigBuilder()
|
|
@@ -461,7 +806,7 @@ const config = new SDKConfigBuilder()
|
|
|
461
806
|
baseDelay: 3000,
|
|
462
807
|
maxDelay: 120000,
|
|
463
808
|
maxAttempts: 20,
|
|
464
|
-
jitter: true
|
|
809
|
+
jitter: true // Add 0-1000ms randomness
|
|
465
810
|
})
|
|
466
811
|
.build();
|
|
467
812
|
```
|
|
@@ -473,9 +818,9 @@ Prevents duplicate message processing with TTL-based cache:
|
|
|
473
818
|
```typescript
|
|
474
819
|
const config = new SDKConfigBuilder()
|
|
475
820
|
.withMessageDeduplication(
|
|
476
|
-
true,
|
|
477
|
-
300000,
|
|
478
|
-
10000
|
|
821
|
+
true, // Enable
|
|
822
|
+
300000, // 5 minute TTL
|
|
823
|
+
10000 // Cache up to 10k message IDs
|
|
479
824
|
)
|
|
480
825
|
.build();
|
|
481
826
|
|
|
@@ -569,6 +914,7 @@ if (dedup) {
|
|
|
569
914
|
### Issue: "ERR_REQUIRE_ESM" Error
|
|
570
915
|
|
|
571
916
|
**Problem:**
|
|
917
|
+
|
|
572
918
|
```
|
|
573
919
|
Error [ERR_REQUIRE_ESM]: require() of ES Module node-fetch not supported
|
|
574
920
|
```
|
|
@@ -585,6 +931,7 @@ npx ts-node your-app.ts
|
|
|
585
931
|
```
|
|
586
932
|
|
|
587
933
|
**Alternative:** Install node-fetch v2:
|
|
934
|
+
|
|
588
935
|
```bash
|
|
589
936
|
npm install node-fetch@2.7.0
|
|
590
937
|
npm run build
|
|
@@ -596,19 +943,22 @@ npm run build
|
|
|
596
943
|
|
|
597
944
|
**Solutions:**
|
|
598
945
|
|
|
599
|
-
1. **Check private key format (64 hex characters,
|
|
946
|
+
1. **Check private key format (64 hex characters, + 0x prefix):**
|
|
947
|
+
|
|
600
948
|
```typescript
|
|
601
949
|
// ✅ Good
|
|
602
|
-
privateKey: "
|
|
950
|
+
privateKey: "0xdafe885a73d87dc34b7933068423b40a646adf5cef45954265e9a1b9be6bad9d";
|
|
603
951
|
```
|
|
604
952
|
|
|
605
953
|
2. **Verify key length:**
|
|
954
|
+
|
|
606
955
|
```bash
|
|
607
956
|
echo -n "your_key" | wc -c
|
|
608
|
-
# Should output: 64
|
|
957
|
+
# Should output: 64 + 0x prefix
|
|
609
958
|
```
|
|
610
959
|
|
|
611
960
|
3. **Enable debug logging:**
|
|
961
|
+
|
|
612
962
|
```typescript
|
|
613
963
|
const sdk = new TeneoSDK({
|
|
614
964
|
wsUrl: "...",
|
|
@@ -620,6 +970,7 @@ npm run build
|
|
|
620
970
|
### Issue: Rate Limiting
|
|
621
971
|
|
|
622
972
|
**Problem:**
|
|
973
|
+
|
|
623
974
|
```
|
|
624
975
|
RateLimitError: Rate limit exceeded
|
|
625
976
|
```
|
|
@@ -630,7 +981,7 @@ RateLimitError: Rate limit exceeded
|
|
|
630
981
|
```typescript
|
|
631
982
|
for (const message of messages) {
|
|
632
983
|
await sdk.sendMessage(message);
|
|
633
|
-
await new Promise(r => setTimeout(r, 200)); // 200ms delay
|
|
984
|
+
await new Promise((r) => setTimeout(r, 200)); // 200ms delay
|
|
634
985
|
}
|
|
635
986
|
```
|
|
636
987
|
|
|
@@ -639,16 +990,18 @@ RateLimitError: Rate limit exceeded
|
|
|
639
990
|
**Solutions:**
|
|
640
991
|
|
|
641
992
|
1. **Verify HTTPS (except localhost):**
|
|
993
|
+
|
|
642
994
|
```typescript
|
|
643
995
|
// ✅ Good
|
|
644
|
-
webhookUrl: "https://your-server.com/webhook"
|
|
645
|
-
webhookUrl: "http://localhost:3000/webhook"
|
|
996
|
+
webhookUrl: "https://your-server.com/webhook";
|
|
997
|
+
webhookUrl: "http://localhost:3000/webhook";
|
|
646
998
|
|
|
647
999
|
// ❌ Bad
|
|
648
|
-
webhookUrl: "http://your-server.com/webhook"
|
|
1000
|
+
webhookUrl: "http://your-server.com/webhook";
|
|
649
1001
|
```
|
|
650
1002
|
|
|
651
1003
|
2. **Test manually:**
|
|
1004
|
+
|
|
652
1005
|
```bash
|
|
653
1006
|
curl -X POST https://your-server.com/webhook \
|
|
654
1007
|
-H "Content-Type: application/json" \
|
|
@@ -676,8 +1029,9 @@ npm run test:integration # Integration tests
|
|
|
676
1029
|
```
|
|
677
1030
|
|
|
678
1031
|
**Test Results:**
|
|
679
|
-
|
|
680
|
-
- ✅
|
|
1032
|
+
|
|
1033
|
+
- ✅ 671 unit tests passing
|
|
1034
|
+
- ✅ 100% pass rate (Phase 0-2 complete)
|
|
681
1035
|
- ✅ Comprehensive coverage
|
|
682
1036
|
|
|
683
1037
|
---
|
|
@@ -701,7 +1055,6 @@ We welcome contributions!
|
|
|
701
1055
|
|
|
702
1056
|
AGPL-3.0 License
|
|
703
1057
|
|
|
704
|
-
|
|
705
1058
|
<div align="center">
|
|
706
1059
|
|
|
707
1060
|
**Built with ❤️ by the [Teneo Team](https://teneo.pro)**
|
|
@@ -18,6 +18,9 @@ export declare class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
18
18
|
private deduplicationCache?;
|
|
19
19
|
private reconnectPolicy;
|
|
20
20
|
private roomManager?;
|
|
21
|
+
private roomManagementManager?;
|
|
22
|
+
private agentRoomManager?;
|
|
23
|
+
private intentionalDisconnect;
|
|
21
24
|
private connectionState;
|
|
22
25
|
private authState;
|
|
23
26
|
private messageQueue;
|
|
@@ -31,6 +34,16 @@ export declare class WebSocketClient extends EventEmitter<SDKEvents> {
|
|
|
31
34
|
* Called by TeneoSDK after initialization
|
|
32
35
|
*/
|
|
33
36
|
setRoomManager(roomManager: any): void;
|
|
37
|
+
/**
|
|
38
|
+
* Sets the room management manager for room CRUD operations (v2.0.0)
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
setRoomManagementManager(roomManagementManager: any): void;
|
|
42
|
+
/**
|
|
43
|
+
* Sets the agent room manager for agent-room operations (v2.0.0)
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
setAgentRoomManager(agentRoomManager: any): void;
|
|
34
47
|
/**
|
|
35
48
|
* Establishes a WebSocket connection to the Teneo server.
|
|
36
49
|
* Handles connection timeout, authentication challenge-response flow,
|