@teneo-protocol/sdk 2.2.2 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/config.yml +1 -1
- package/CHANGELOG.md +366 -15
- package/CONCEPTS.md +182 -44
- package/README.md +524 -94
- package/dist/constants.d.ts +3 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +5 -3
- package/dist/constants.js.map +1 -1
- package/dist/core/websocket-client.d.ts.map +1 -1
- package/dist/core/websocket-client.js +9 -5
- package/dist/core/websocket-client.js.map +1 -1
- package/dist/formatters/response-formatter.d.ts +6 -6
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1080 -756
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-details-response-handler.js +2 -2
- package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-error-handler.d.ts +91 -0
- package/dist/handlers/message-handlers/agent-error-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-error-handler.js +44 -0
- package/dist/handlers/message-handlers/agent-error-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +1080 -756
- 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 -7
- package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -1
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +135 -54
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/all-agents-response-handler.js +2 -2
- package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-error-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/auth-error-handler.d.ts.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 -1
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-required-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/auth-required-handler.d.ts.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 -1
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
- package/dist/handlers/message-handlers/base-handler.d.ts +2 -1
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/base-handler.js +24 -4
- package/dist/handlers/message-handlers/base-handler.js.map +1 -1
- package/dist/handlers/message-handlers/challenge-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/error-message-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.d.ts +4 -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 +1116 -756
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.js +23 -10
- package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +1080 -756
- 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 -6
- package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +2 -5
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts +52 -4
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.js +23 -4
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js +3 -2
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -1
- package/dist/handlers/message-handlers/regular-message-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +12 -6
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/success-handler.d.ts +82 -0
- package/dist/handlers/message-handlers/success-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/success-handler.js +24 -0
- package/dist/handlers/message-handlers/success-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-confirmed-handler.d.ts +110 -0
- package/dist/handlers/message-handlers/task-confirmed-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-confirmed-handler.js +46 -0
- package/dist/handlers/message-handlers/task-confirmed-handler.js.map +1 -0
- package/dist/handlers/message-handlers/trigger-wallet-tx-handler.d.ts +244 -0
- package/dist/handlers/message-handlers/trigger-wallet-tx-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/trigger-wallet-tx-handler.js +58 -0
- package/dist/handlers/message-handlers/trigger-wallet-tx-handler.js.map +1 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +12 -6
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/user-authenticated-handler.js +2 -2
- package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -1
- package/dist/handlers/message-handlers/user-count-handler.js +2 -2
- package/dist/handlers/message-handlers/user-count-handler.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -4
- package/dist/index.js.map +1 -1
- package/dist/managers/admin-manager.d.ts +3 -1
- package/dist/managers/admin-manager.d.ts.map +1 -1
- package/dist/managers/admin-manager.js +4 -3
- package/dist/managers/admin-manager.js.map +1 -1
- package/dist/managers/agent-room-manager.d.ts +89 -11
- package/dist/managers/agent-room-manager.d.ts.map +1 -1
- package/dist/managers/agent-room-manager.js +99 -35
- package/dist/managers/agent-room-manager.js.map +1 -1
- package/dist/managers/index.d.ts +1 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/index.js.map +1 -1
- package/dist/managers/message-router.d.ts +45 -5
- package/dist/managers/message-router.d.ts.map +1 -1
- package/dist/managers/message-router.js +96 -24
- package/dist/managers/message-router.js.map +1 -1
- package/dist/managers/room-manager.d.ts +29 -7
- package/dist/managers/room-manager.d.ts.map +1 -1
- package/dist/managers/room-manager.js +37 -11
- package/dist/managers/room-manager.js.map +1 -1
- package/dist/payments/index.d.ts +3 -1
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +17 -3
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/networks.d.ts +59 -0
- package/dist/payments/networks.d.ts.map +1 -0
- package/dist/payments/networks.js +192 -0
- package/dist/payments/networks.js.map +1 -0
- package/dist/payments/payment-client.d.ts +55 -10
- package/dist/payments/payment-client.d.ts.map +1 -1
- package/dist/payments/payment-client.js +172 -51
- package/dist/payments/payment-client.js.map +1 -1
- package/dist/teneo-sdk.d.ts +215 -41
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +361 -84
- package/dist/teneo-sdk.js.map +1 -1
- package/dist/types/config.d.ts +334 -25
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +114 -22
- package/dist/types/config.js.map +1 -1
- package/dist/types/events.d.ts +60 -14
- 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 +11 -4
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +13110 -7451
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +195 -44
- package/dist/types/messages.js.map +1 -1
- package/dist/utils/pricing-resolver.d.ts +1 -1
- package/dist/utils/pricing-resolver.d.ts.map +1 -1
- package/dist/utils/pricing-resolver.js +9 -1
- package/dist/utils/pricing-resolver.js.map +1 -1
- package/examples/agent-room-management-example.ts +5 -5
- package/examples/basic-usage.ts +26 -6
- package/examples/claude-agent-x-follower/index.ts +1 -1
- package/examples/minimal-chat.ts +4 -3
- package/examples/n8n-teneo/index.ts +2 -2
- package/examples/nestjs-dashboard/README.md +1 -1
- package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +3 -3
- package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +5 -5
- package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +8 -8
- package/examples/openai-teneo/index.ts +1 -1
- package/examples/payment-flow.ts +143 -0
- package/examples/production-dashboard/README.md +6 -8
- package/examples/production-dashboard/server.ts +22 -10
- package/examples/room-management-example.ts +2 -2
- package/examples/usage/01-connect.ts +0 -3
- package/examples/usage/02-list-agents.ts +0 -2
- package/examples/usage/03-pick-agent.ts +3 -4
- package/examples/usage/04-find-by-capability.ts +10 -12
- package/examples/usage/05-webhook-example.ts +2 -4
- package/examples/usage/06-simple-api-server.ts +13 -9
- package/examples/usage/07-event-listener.ts +1 -13
- package/examples/usage/README.md +33 -7
- package/examples/webhook-integration.ts +9 -9
- package/examples/x-influencer-battle-server.ts +1 -1
- package/package.json +1 -1
- package/scripts/diagnose-connection.ts +86 -0
- package/scripts/investigate-payload.ts +163 -0
- package/scripts/list-agents.ts +58 -0
- package/scripts/live-multi-network-test.ts +230 -0
- package/src/constants.ts +5 -3
- package/src/core/websocket-client.ts +10 -9
- package/src/handlers/message-handlers/agent-details-response-handler.ts +2 -2
- package/src/handlers/message-handlers/agent-error-handler.ts +47 -0
- package/src/handlers/message-handlers/agent-status-update-handler.ts +2 -7
- package/src/handlers/message-handlers/all-agents-response-handler.ts +2 -2
- package/src/handlers/message-handlers/auth-message-handler.ts +7 -1
- package/src/handlers/message-handlers/auth-success-handler.ts +7 -1
- package/src/handlers/message-handlers/base-handler.ts +24 -4
- package/src/handlers/message-handlers/index.ts +24 -0
- package/src/handlers/message-handlers/list-available-agents-handler.ts +24 -11
- package/src/handlers/message-handlers/list-room-agents-handler.ts +2 -6
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +2 -5
- package/src/handlers/message-handlers/ping-pong-handler.ts +29 -4
- package/src/handlers/message-handlers/rate-limit-notification-handler.ts +3 -2
- package/src/handlers/message-handlers/success-handler.ts +26 -0
- package/src/handlers/message-handlers/task-confirmed-handler.ts +49 -0
- package/src/handlers/message-handlers/trigger-wallet-tx-handler.ts +62 -0
- package/src/handlers/message-handlers/user-authenticated-handler.ts +2 -2
- package/src/handlers/message-handlers/user-count-handler.ts +2 -2
- package/src/index.ts +12 -4
- package/src/managers/admin-manager.ts +6 -3
- package/src/managers/agent-room-manager.ts +155 -26
- package/src/managers/index.ts +6 -1
- package/src/managers/message-router.ts +122 -27
- package/src/managers/room-manager.ts +39 -11
- package/src/payments/index.ts +20 -5
- package/src/payments/networks.ts +208 -0
- package/src/payments/payment-client.ts +211 -56
- package/src/teneo-sdk.ts +402 -71
- package/src/types/config.test.ts +24 -4
- package/src/types/config.ts +123 -25
- package/src/types/events.ts +36 -2
- package/src/types/index.ts +16 -3
- package/src/types/messages.ts +235 -60
- package/src/utils/pricing-resolver.ts +10 -2
- package/tests/direct-agent-test.ts +1 -1
- package/tests/integration/real-server.test.ts +1 -1
- package/tests/integration/websocket.test.ts +3 -3
- package/tests/multi-network-payment.test.ts +309 -0
- package/tests/multi-network.test.ts +296 -0
- package/tests/payment-flow-test.ts +6 -4
- package/tests/unit/handlers/agent-error-handler.test.ts +388 -0
- package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +9 -6
- package/tests/unit/handlers/agent-status-update-handler.test.ts +11 -16
- package/tests/unit/handlers/list-available-agents-handler.test.ts +11 -14
- package/tests/unit/handlers/list-room-agents-handler.test.ts +11 -15
- package/tests/unit/handlers/room-operation-response-handler.test.ts +9 -6
- package/tests/unit/handlers/trigger-wallet-tx-handler.test.ts +431 -0
- package/tests/unit/managers/admin-manager.test.ts +183 -0
- package/tests/unit/managers/agent-room-manager.test.ts +189 -33
- package/tests/unit/sdk-new-methods.test.ts +221 -0
package/examples/usage/README.md
CHANGED
|
@@ -32,7 +32,7 @@ PRIVATE_KEY=your_ethereum_private_key_here
|
|
|
32
32
|
WS_URL=wss://your-teneo-server.com/ws
|
|
33
33
|
|
|
34
34
|
# Optional
|
|
35
|
-
DEFAULT_ROOM=
|
|
35
|
+
DEFAULT_ROOM=your-room-id
|
|
36
36
|
WALLET_ADDRESS=0x... # Auto-derived if not provided
|
|
37
37
|
LOG_LEVEL=info
|
|
38
38
|
```
|
|
@@ -279,6 +279,20 @@ We recommend following this learning path:
|
|
|
279
279
|
|
|
280
280
|
## 🔧 Common Patterns
|
|
281
281
|
|
|
282
|
+
### Understanding Message Routing
|
|
283
|
+
|
|
284
|
+
The SDK supports two routing approaches depending on your environment:
|
|
285
|
+
|
|
286
|
+
**Coordinator Environments:**
|
|
287
|
+
- Natural language messages work: `"Get bitcoin info"`
|
|
288
|
+
- Coordinator automatically selects the best agent
|
|
289
|
+
- Direct commands also work for explicit agent selection
|
|
290
|
+
|
|
291
|
+
**Non-Coordinator Environments:**
|
|
292
|
+
- Must use direct command syntax: `"@Agent Name command params"`
|
|
293
|
+
- Example: `"@X Platform Agent search bitcoin 5"`
|
|
294
|
+
- Required for all messages in these environments
|
|
295
|
+
|
|
282
296
|
### Pattern 1: Basic Message Flow
|
|
283
297
|
|
|
284
298
|
```typescript
|
|
@@ -287,7 +301,7 @@ await sdk.connect();
|
|
|
287
301
|
|
|
288
302
|
// Send and wait for response
|
|
289
303
|
const response = await sdk.sendMessage('hello', {
|
|
290
|
-
room:
|
|
304
|
+
room: roomId,
|
|
291
305
|
waitForResponse: true,
|
|
292
306
|
timeout: 30000
|
|
293
307
|
});
|
|
@@ -297,19 +311,31 @@ console.log(response.humanized);
|
|
|
297
311
|
|
|
298
312
|
### Pattern 2: Direct Agent Command
|
|
299
313
|
|
|
314
|
+
Direct commands work in all environments and are **required** in non-coordinator environments.
|
|
315
|
+
|
|
300
316
|
```typescript
|
|
301
317
|
// Find agent by capability
|
|
302
|
-
const agents = sdk.
|
|
318
|
+
const agents = sdk.findAvailableAgentsByCapability('weather');
|
|
303
319
|
const weatherAgent = agents[0];
|
|
304
320
|
|
|
305
|
-
//
|
|
321
|
+
// Option 1: Use @mention syntax (recommended)
|
|
322
|
+
const response = await sdk.sendMessage('@Weather Agent forecast for NYC', {
|
|
323
|
+
room: roomId,
|
|
324
|
+
waitForResponse: true
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
// Option 2: Use sendDirectCommand
|
|
306
328
|
const response = await sdk.sendDirectCommand({
|
|
307
|
-
agent: weatherAgent.
|
|
329
|
+
agent: weatherAgent.name, // Use full agent name
|
|
308
330
|
command: 'forecast for NYC',
|
|
309
|
-
room:
|
|
331
|
+
room: roomId
|
|
310
332
|
}, true);
|
|
311
333
|
```
|
|
312
334
|
|
|
335
|
+
**When to use:**
|
|
336
|
+
- **Required** in non-coordinator environments
|
|
337
|
+
- **Optional** in coordinator environments (explicit agent selection)
|
|
338
|
+
|
|
313
339
|
### Pattern 3: Event-Driven
|
|
314
340
|
|
|
315
341
|
```typescript
|
|
@@ -319,7 +345,7 @@ sdk.on('agent:response', (response) => {
|
|
|
319
345
|
});
|
|
320
346
|
|
|
321
347
|
// Fire and forget
|
|
322
|
-
await sdk.sendMessage('hello', { room:
|
|
348
|
+
await sdk.sendMessage('hello', { room: roomId });
|
|
323
349
|
```
|
|
324
350
|
|
|
325
351
|
## 🐛 Troubleshooting
|
|
@@ -66,7 +66,7 @@ async function main() {
|
|
|
66
66
|
const sdk = new TeneoSDK({
|
|
67
67
|
wsUrl: process.env.WS_URL || "ws://localhost:8080/ws",
|
|
68
68
|
privateKey: process.env.PRIVATE_KEY,
|
|
69
|
-
|
|
69
|
+
autoJoinPublicRooms: [process.env.ROOM_ID || "your-room-id"],
|
|
70
70
|
|
|
71
71
|
// Webhook configuration
|
|
72
72
|
webhookUrl: "http://localhost:3000/webhook",
|
|
@@ -106,20 +106,20 @@ async function main() {
|
|
|
106
106
|
console.log("[SDK] Connecting to Teneo Protocol...");
|
|
107
107
|
await sdk.connect();
|
|
108
108
|
|
|
109
|
-
// Wait for ready
|
|
110
|
-
await new Promise<void>((resolve) => {
|
|
111
|
-
sdk.once("ready", resolve);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
109
|
console.log("[SDK] Connected and ready!");
|
|
115
110
|
|
|
116
111
|
// Send some test messages
|
|
117
112
|
console.log("\n[SDK] Sending test messages...\n");
|
|
118
113
|
|
|
119
114
|
// These will trigger webhooks
|
|
120
|
-
|
|
121
|
-
await sdk.sendMessage("
|
|
122
|
-
await sdk.sendMessage("
|
|
115
|
+
// WITH COORDINATOR: Natural language
|
|
116
|
+
await sdk.sendMessage("What is blockchain technology?", { room: process.env.ROOM_ID || "your-room-id" });
|
|
117
|
+
await sdk.sendMessage("Explain quantum computing in simple terms", { room: process.env.ROOM_ID || "your-room-id" });
|
|
118
|
+
|
|
119
|
+
// WITHOUT COORDINATOR: Direct command (use @Agent Name syntax)
|
|
120
|
+
// await sdk.sendMessage("@X Platform Agent search bitcoin 5", { room: process.env.ROOM_ID || "your-room-id" });
|
|
121
|
+
|
|
122
|
+
await sdk.sendMessage("How does machine learning work?", { room: process.env.ROOM_ID || "your-room-id" });
|
|
123
123
|
|
|
124
124
|
// Check webhook queue status
|
|
125
125
|
const webhookStatus = sdk.getWebhookStatus();
|
|
@@ -55,7 +55,7 @@ async function initSDK() {
|
|
|
55
55
|
const config = new SDKConfigBuilder()
|
|
56
56
|
.withWebSocketUrl(WS_URL)
|
|
57
57
|
.withAuthentication(PRIVATE_KEY, WALLET_ADDRESS)
|
|
58
|
-
.
|
|
58
|
+
.withAutoJoinPublicRooms([ROOM]) // Auto-join rooms on connect
|
|
59
59
|
.withReconnection(true, 5000, 10) // Enable reconnection
|
|
60
60
|
.withResponseFormat("both", true) // Get both raw and humanized responses with metadata
|
|
61
61
|
.withLogging("debug") // Enable debug logging
|
package/package.json
CHANGED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnose connection and message flow
|
|
3
|
+
* Run with: npx tsx scripts/diagnose-connection.ts
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { TeneoSDK, SDKConfigBuilder } from "../src";
|
|
7
|
+
import { SecurePrivateKey } from "../src/utils/secure-private-key";
|
|
8
|
+
|
|
9
|
+
const WS_URL = process.env.TENEO_WS_URL || "wss://backend.developer.chatroom.teneo-protocol.ai/ws";
|
|
10
|
+
const TEST_PRIVATE_KEY = process.env.TENEO_PRIVATE_KEY || "0xYOUR_PRIVATE_KEY_HERE";
|
|
11
|
+
|
|
12
|
+
async function diagnose() {
|
|
13
|
+
console.log("=".repeat(60));
|
|
14
|
+
console.log("CONNECTION DIAGNOSTIC");
|
|
15
|
+
console.log("=".repeat(60));
|
|
16
|
+
|
|
17
|
+
const secureKey = new SecurePrivateKey(TEST_PRIVATE_KEY);
|
|
18
|
+
|
|
19
|
+
const config = new SDKConfigBuilder()
|
|
20
|
+
.withWebSocketUrl(WS_URL)
|
|
21
|
+
.withAuthentication(secureKey)
|
|
22
|
+
.withLogging("debug")
|
|
23
|
+
.withPayments({ autoApprove: false })
|
|
24
|
+
.build();
|
|
25
|
+
|
|
26
|
+
const sdk = new TeneoSDK(config);
|
|
27
|
+
|
|
28
|
+
// Listen to all events
|
|
29
|
+
const events = [
|
|
30
|
+
"connected", "disconnected", "authenticated", "error",
|
|
31
|
+
"message:received", "message:sent", "message:error",
|
|
32
|
+
"agent:response", "agent:selected", "agents:list"
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
for (const event of events) {
|
|
36
|
+
sdk.on(event as any, (data: any) => {
|
|
37
|
+
console.log(`\n[EVENT: ${event}]`);
|
|
38
|
+
if (typeof data === "object") {
|
|
39
|
+
console.log(JSON.stringify(data, null, 2).substring(0, 500));
|
|
40
|
+
} else {
|
|
41
|
+
console.log(data);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
console.log("\nConnecting...");
|
|
48
|
+
await sdk.connect();
|
|
49
|
+
console.log("\nConnected!");
|
|
50
|
+
|
|
51
|
+
// Get auth state
|
|
52
|
+
const authState = sdk.getAuthState();
|
|
53
|
+
console.log("\nAuth State:", JSON.stringify(authState, null, 2));
|
|
54
|
+
|
|
55
|
+
// Get connection state
|
|
56
|
+
const connState = sdk.getConnectionState();
|
|
57
|
+
console.log("\nConnection State:", JSON.stringify(connState, null, 2));
|
|
58
|
+
|
|
59
|
+
// Wait for agents list
|
|
60
|
+
console.log("\nWaiting for agents list (10s)...");
|
|
61
|
+
await new Promise(resolve => setTimeout(resolve, 10000));
|
|
62
|
+
|
|
63
|
+
// Try to send a simple message (fire and forget)
|
|
64
|
+
console.log("\nSending test message (fire and forget)...");
|
|
65
|
+
try {
|
|
66
|
+
await sdk.sendMessage("hello", { room: "public" });
|
|
67
|
+
console.log("Message sent successfully");
|
|
68
|
+
} catch (err) {
|
|
69
|
+
console.log("Send error:", err);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Wait for any response
|
|
73
|
+
console.log("\nWaiting for response (15s)...");
|
|
74
|
+
await new Promise(resolve => setTimeout(resolve, 15000));
|
|
75
|
+
|
|
76
|
+
await sdk.disconnect();
|
|
77
|
+
console.log("\nDisconnected");
|
|
78
|
+
|
|
79
|
+
} catch (error) {
|
|
80
|
+
console.error("Error:", error);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
process.exit(0);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
diagnose().catch(console.error);
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Investigate WebSocket payload sizes from the Teneo server
|
|
3
|
+
* Run with: npx tsx scripts/investigate-payload.ts
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import WebSocket from "ws";
|
|
7
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
8
|
+
|
|
9
|
+
const WS_URL = process.env.TENEO_WS_URL || "wss://backend.developer.chatroom.teneo-protocol.ai/ws";
|
|
10
|
+
|
|
11
|
+
// Set via environment variable
|
|
12
|
+
const TEST_PRIVATE_KEY = process.env.TENEO_PRIVATE_KEY || "0xYOUR_PRIVATE_KEY_HERE";
|
|
13
|
+
|
|
14
|
+
console.log("Connecting to:", WS_URL);
|
|
15
|
+
console.log("Max payload set to 10MB\n");
|
|
16
|
+
|
|
17
|
+
const account = privateKeyToAccount(TEST_PRIVATE_KEY);
|
|
18
|
+
console.log("Wallet address:", account.address, "\n");
|
|
19
|
+
|
|
20
|
+
const ws = new WebSocket(WS_URL, {
|
|
21
|
+
maxPayload: 10 * 1024 * 1024 // 10MB max
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
let messageCount = 0;
|
|
25
|
+
let totalBytes = 0;
|
|
26
|
+
const messageSizes: { type: string; size: number; preview: string }[] = [];
|
|
27
|
+
let authStarted = false;
|
|
28
|
+
|
|
29
|
+
ws.on("open", () => {
|
|
30
|
+
console.log("✅ Connected\n");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
ws.on("message", async (data: Buffer) => {
|
|
34
|
+
messageCount++;
|
|
35
|
+
const size = data.length;
|
|
36
|
+
totalBytes += size;
|
|
37
|
+
|
|
38
|
+
let parsed: any;
|
|
39
|
+
let type = "unknown";
|
|
40
|
+
let preview = "";
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
parsed = JSON.parse(data.toString());
|
|
44
|
+
type = parsed.type || parsed.action || "json";
|
|
45
|
+
|
|
46
|
+
if (parsed.type === "room_history") {
|
|
47
|
+
const historyLength = parsed.data?.history?.length || 0;
|
|
48
|
+
preview = `${historyLength} messages in history`;
|
|
49
|
+
} else if (parsed.type === "auth_success") {
|
|
50
|
+
preview = `wallet: ${parsed.data?.address?.substring(0, 10)}...`;
|
|
51
|
+
} else if (parsed.type === "challenge") {
|
|
52
|
+
preview = `challenge: ${parsed.data?.challenge?.substring(0, 20)}...`;
|
|
53
|
+
} else {
|
|
54
|
+
preview = JSON.stringify(parsed).substring(0, 100);
|
|
55
|
+
}
|
|
56
|
+
} catch {
|
|
57
|
+
preview = data.toString().substring(0, 100);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const sizeStr = formatBytes(size);
|
|
61
|
+
messageSizes.push({ type, size, preview });
|
|
62
|
+
|
|
63
|
+
console.log(`Message #${messageCount}: ${type}`);
|
|
64
|
+
console.log(` Size: ${sizeStr}`);
|
|
65
|
+
console.log(` Preview: ${preview}`);
|
|
66
|
+
console.log("");
|
|
67
|
+
|
|
68
|
+
// Handle auth flow using correct SDK message format
|
|
69
|
+
if (parsed?.type === "auth_required" && !authStarted) {
|
|
70
|
+
authStarted = true;
|
|
71
|
+
console.log("📤 Requesting challenge...\n");
|
|
72
|
+
ws.send(JSON.stringify({
|
|
73
|
+
type: "request_challenge",
|
|
74
|
+
data: {
|
|
75
|
+
userType: "user",
|
|
76
|
+
address: account.address
|
|
77
|
+
}
|
|
78
|
+
}));
|
|
79
|
+
} else if (parsed?.type === "challenge") {
|
|
80
|
+
const challenge = parsed.data?.challenge;
|
|
81
|
+
console.log("📤 Signing challenge and authenticating...\n");
|
|
82
|
+
const messageToSign = `Teneo authentication challenge: ${challenge}`;
|
|
83
|
+
const signature = await account.signMessage({ message: messageToSign });
|
|
84
|
+
ws.send(JSON.stringify({
|
|
85
|
+
type: "auth",
|
|
86
|
+
data: {
|
|
87
|
+
address: account.address,
|
|
88
|
+
signature,
|
|
89
|
+
message: messageToSign,
|
|
90
|
+
userType: "user"
|
|
91
|
+
}
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// After receiving enough messages post-auth, close and summarize
|
|
96
|
+
if (messageCount >= 15 || totalBytes > 100 * 1024 * 1024) {
|
|
97
|
+
summarize();
|
|
98
|
+
ws.close();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
ws.on("error", (err) => {
|
|
103
|
+
console.error("❌ Error:", err.message);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
ws.on("close", (code, reason) => {
|
|
107
|
+
console.log(`\nConnection closed: ${code} ${reason}`);
|
|
108
|
+
if (messageCount > 1) summarize();
|
|
109
|
+
process.exit(0);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
function formatBytes(bytes: number): string {
|
|
113
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
114
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;
|
|
115
|
+
return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function summarize() {
|
|
119
|
+
console.log("\n" + "=".repeat(60));
|
|
120
|
+
console.log("PAYLOAD SIZE INVESTIGATION SUMMARY");
|
|
121
|
+
console.log("=".repeat(60));
|
|
122
|
+
console.log(`Total messages received: ${messageCount}`);
|
|
123
|
+
console.log(`Total bytes received: ${formatBytes(totalBytes)}`);
|
|
124
|
+
console.log("\nBy message type:");
|
|
125
|
+
|
|
126
|
+
const byType: Record<string, { count: number; totalSize: number }> = {};
|
|
127
|
+
for (const msg of messageSizes) {
|
|
128
|
+
if (!byType[msg.type]) {
|
|
129
|
+
byType[msg.type] = { count: 0, totalSize: 0 };
|
|
130
|
+
}
|
|
131
|
+
byType[msg.type].count++;
|
|
132
|
+
byType[msg.type].totalSize += msg.size;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
for (const [type, stats] of Object.entries(byType)) {
|
|
136
|
+
console.log(` ${type}: ${stats.count} messages, ${formatBytes(stats.totalSize)}`);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
console.log("\nLargest messages:");
|
|
140
|
+
const sorted = [...messageSizes].sort((a, b) => b.size - a.size).slice(0, 5);
|
|
141
|
+
for (const msg of sorted) {
|
|
142
|
+
console.log(` ${msg.type}: ${formatBytes(msg.size)} - ${msg.preview.substring(0, 50)}`);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Check if any message exceeded 2MB (original limit)
|
|
146
|
+
const over2mb = messageSizes.filter(m => m.size > 2 * 1024 * 1024);
|
|
147
|
+
if (over2mb.length > 0) {
|
|
148
|
+
console.log("\n⚠️ Messages exceeding original 2MB limit:");
|
|
149
|
+
for (const msg of over2mb) {
|
|
150
|
+
console.log(` ${msg.type}: ${formatBytes(msg.size)}`);
|
|
151
|
+
}
|
|
152
|
+
} else {
|
|
153
|
+
console.log("\n✅ No messages exceeded the original 2MB limit");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Timeout after 30 seconds
|
|
158
|
+
setTimeout(() => {
|
|
159
|
+
console.log("\n⏰ Timeout - closing connection");
|
|
160
|
+
summarize();
|
|
161
|
+
ws.close();
|
|
162
|
+
process.exit(0);
|
|
163
|
+
}, 30000);
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List available agents
|
|
3
|
+
* Run with: npx tsx scripts/list-agents.ts
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { TeneoSDK, SDKConfigBuilder } from "../src";
|
|
7
|
+
import { SecurePrivateKey } from "../src/utils/secure-private-key";
|
|
8
|
+
|
|
9
|
+
const WS_URL = process.env.TENEO_WS_URL || "wss://backend.developer.chatroom.teneo-protocol.ai/ws";
|
|
10
|
+
const TEST_PRIVATE_KEY = process.env.TENEO_PRIVATE_KEY || "0xYOUR_PRIVATE_KEY_HERE";
|
|
11
|
+
|
|
12
|
+
async function listAgents() {
|
|
13
|
+
console.log("Listing available agents...\n");
|
|
14
|
+
|
|
15
|
+
const secureKey = new SecurePrivateKey(TEST_PRIVATE_KEY);
|
|
16
|
+
|
|
17
|
+
const config = new SDKConfigBuilder()
|
|
18
|
+
.withWebSocketUrl(WS_URL)
|
|
19
|
+
.withAuthentication(secureKey)
|
|
20
|
+
.withLogging("warn")
|
|
21
|
+
.build();
|
|
22
|
+
|
|
23
|
+
const sdk = new TeneoSDK(config);
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
await sdk.connect();
|
|
27
|
+
console.log("Connected!\n");
|
|
28
|
+
|
|
29
|
+
// Wait for agents list
|
|
30
|
+
await new Promise(resolve => setTimeout(resolve, 3000));
|
|
31
|
+
|
|
32
|
+
// Get auth state for rooms
|
|
33
|
+
const authState = sdk.getAuthState();
|
|
34
|
+
console.log("User's rooms:", authState.rooms);
|
|
35
|
+
console.log("Private room:", authState.privateRoomIds?.[0] || "none");
|
|
36
|
+
console.log();
|
|
37
|
+
|
|
38
|
+
// Get available agents
|
|
39
|
+
const agents = sdk.agents.getAgents();
|
|
40
|
+
console.log(`Available agents (${agents.length}):\n`);
|
|
41
|
+
|
|
42
|
+
for (const agent of agents) {
|
|
43
|
+
console.log(`- ${agent.name} (${agent.id})`);
|
|
44
|
+
console.log(` Description: ${agent.description?.substring(0, 100)}...`);
|
|
45
|
+
console.log(` Online: ${agent.isOnline}`);
|
|
46
|
+
console.log(` Rooms: ${agent.rooms?.join(", ") || "N/A"}`);
|
|
47
|
+
console.log();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await sdk.disconnect();
|
|
51
|
+
} catch (error) {
|
|
52
|
+
console.error("Error:", error);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
process.exit(0);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
listAgents().catch(console.error);
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live Multi-Network Test
|
|
3
|
+
* Tests direct agent requests and coordinator requests across PEAQ, Base, and Avalanche
|
|
4
|
+
* Run with: npx tsx scripts/live-multi-network-test.ts
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { TeneoSDK, SDKConfigBuilder } from "../src";
|
|
8
|
+
import { SecurePrivateKey } from "../src/utils/secure-private-key";
|
|
9
|
+
|
|
10
|
+
const WS_URL = process.env.TENEO_WS_URL || "wss://backend.developer.chatroom.teneo-protocol.ai/ws";
|
|
11
|
+
const TEST_PRIVATE_KEY = process.env.TENEO_PRIVATE_KEY || "0xYOUR_PRIVATE_KEY_HERE";
|
|
12
|
+
|
|
13
|
+
interface TestResult {
|
|
14
|
+
network: string;
|
|
15
|
+
type: "direct" | "coordinator";
|
|
16
|
+
success: boolean;
|
|
17
|
+
response?: string;
|
|
18
|
+
txHash?: string;
|
|
19
|
+
error?: string;
|
|
20
|
+
duration: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const results: TestResult[] = [];
|
|
24
|
+
|
|
25
|
+
async function runTest() {
|
|
26
|
+
console.log("=".repeat(70));
|
|
27
|
+
console.log("LIVE MULTI-NETWORK TEST");
|
|
28
|
+
console.log("=".repeat(70));
|
|
29
|
+
console.log(`WebSocket: ${WS_URL}`);
|
|
30
|
+
console.log(`Networks: PEAQ (3338), Base (8453), Avalanche (43114)\n`);
|
|
31
|
+
|
|
32
|
+
const secureKey = new SecurePrivateKey(TEST_PRIVATE_KEY);
|
|
33
|
+
|
|
34
|
+
// Test each network
|
|
35
|
+
// Test all networks
|
|
36
|
+
const networks = ["peaq", "base", "avalanche"] as const;
|
|
37
|
+
|
|
38
|
+
for (const network of networks) {
|
|
39
|
+
console.log(`\n${"=".repeat(70)}`);
|
|
40
|
+
console.log(`TESTING NETWORK: ${network.toUpperCase()}`);
|
|
41
|
+
console.log("=".repeat(70));
|
|
42
|
+
|
|
43
|
+
let sdk: TeneoSDK | null = null;
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
// Create SDK with network configuration
|
|
47
|
+
// Enable auto-approve for payments (wallet has USDC)
|
|
48
|
+
const config = new SDKConfigBuilder()
|
|
49
|
+
.withWebSocketUrl(WS_URL)
|
|
50
|
+
.withAuthentication(secureKey)
|
|
51
|
+
.withNetwork(network)
|
|
52
|
+
.withLogging("warn")
|
|
53
|
+
.withPayments({ autoApprove: true })
|
|
54
|
+
.build();
|
|
55
|
+
|
|
56
|
+
sdk = new TeneoSDK(config);
|
|
57
|
+
|
|
58
|
+
// Connect and authenticate
|
|
59
|
+
console.log(`\nConnecting to ${network}...`);
|
|
60
|
+
await sdk.connect();
|
|
61
|
+
console.log(`Connected and authenticated on ${network}`);
|
|
62
|
+
|
|
63
|
+
// Wait for agents list
|
|
64
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
65
|
+
|
|
66
|
+
// Get the user's private room
|
|
67
|
+
const authState = sdk.getAuthState();
|
|
68
|
+
const privateRoom = authState.privateRoomIds?.[0] || authState.rooms?.[0] || "public";
|
|
69
|
+
console.log(`Using room: ${privateRoom}`);
|
|
70
|
+
|
|
71
|
+
// Test 1: Direct agent request
|
|
72
|
+
console.log(`\n--- Direct Request (@x-agent-enterprise-v2) ---`);
|
|
73
|
+
const directStart = Date.now();
|
|
74
|
+
try {
|
|
75
|
+
const directResponse = await sdk.sendMessage(
|
|
76
|
+
"@x-agent-enterprise-v2 user @elonmusk",
|
|
77
|
+
{
|
|
78
|
+
room: privateRoom,
|
|
79
|
+
waitForResponse: true,
|
|
80
|
+
timeout: 60000
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
const directDuration = Date.now() - directStart;
|
|
85
|
+
const directResult: TestResult = {
|
|
86
|
+
network,
|
|
87
|
+
type: "direct",
|
|
88
|
+
success: true,
|
|
89
|
+
response: typeof directResponse === "string"
|
|
90
|
+
? directResponse.substring(0, 200) + "..."
|
|
91
|
+
: JSON.stringify(directResponse).substring(0, 200) + "...",
|
|
92
|
+
duration: directDuration
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// Try to extract tx hash from response
|
|
96
|
+
if (typeof directResponse === "object" && directResponse !== null) {
|
|
97
|
+
const respObj = directResponse as Record<string, unknown>;
|
|
98
|
+
if (respObj.txHash) directResult.txHash = String(respObj.txHash);
|
|
99
|
+
if (respObj.payment_tx_hash) directResult.txHash = String(respObj.payment_tx_hash);
|
|
100
|
+
if (respObj.paymentTxHash) directResult.txHash = String(respObj.paymentTxHash);
|
|
101
|
+
// Check nested metadata
|
|
102
|
+
const metadata = respObj.metadata as Record<string, unknown> | undefined;
|
|
103
|
+
if (metadata?.txHash) directResult.txHash = String(metadata.txHash);
|
|
104
|
+
if (metadata?.payment_tx_hash) directResult.txHash = String(metadata.payment_tx_hash);
|
|
105
|
+
}
|
|
106
|
+
// Log full response for debugging
|
|
107
|
+
console.log("Full response:", JSON.stringify(directResponse, null, 2).substring(0, 1000));
|
|
108
|
+
|
|
109
|
+
results.push(directResult);
|
|
110
|
+
console.log(`Response (${directDuration}ms):`);
|
|
111
|
+
console.log(directResult.response);
|
|
112
|
+
if (directResult.txHash) console.log(`TX Hash: ${directResult.txHash}`);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
const directDuration = Date.now() - directStart;
|
|
115
|
+
results.push({
|
|
116
|
+
network,
|
|
117
|
+
type: "direct",
|
|
118
|
+
success: false,
|
|
119
|
+
error: error instanceof Error ? error.message : String(error),
|
|
120
|
+
duration: directDuration
|
|
121
|
+
});
|
|
122
|
+
console.log(`Error (${directDuration}ms): ${error instanceof Error ? error.message : error}`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Wait between requests
|
|
126
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
127
|
+
|
|
128
|
+
// Test 2: Coordinator request
|
|
129
|
+
console.log(`\n--- Coordinator Request ---`);
|
|
130
|
+
const coordStart = Date.now();
|
|
131
|
+
try {
|
|
132
|
+
const coordResponse = await sdk.sendMessage(
|
|
133
|
+
"give me 1 post from @elonmusk on x",
|
|
134
|
+
{
|
|
135
|
+
room: privateRoom,
|
|
136
|
+
waitForResponse: true,
|
|
137
|
+
timeout: 60000
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
const coordDuration = Date.now() - coordStart;
|
|
142
|
+
const coordResult: TestResult = {
|
|
143
|
+
network,
|
|
144
|
+
type: "coordinator",
|
|
145
|
+
success: true,
|
|
146
|
+
response: typeof coordResponse === "string"
|
|
147
|
+
? coordResponse.substring(0, 200) + "..."
|
|
148
|
+
: JSON.stringify(coordResponse).substring(0, 200) + "...",
|
|
149
|
+
duration: coordDuration
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
// Try to extract tx hash from response
|
|
153
|
+
if (typeof coordResponse === "object" && coordResponse !== null) {
|
|
154
|
+
const respObj = coordResponse as Record<string, unknown>;
|
|
155
|
+
if (respObj.txHash) coordResult.txHash = String(respObj.txHash);
|
|
156
|
+
if (respObj.payment_tx_hash) coordResult.txHash = String(respObj.payment_tx_hash);
|
|
157
|
+
if (respObj.paymentTxHash) coordResult.txHash = String(respObj.paymentTxHash);
|
|
158
|
+
// Check nested metadata
|
|
159
|
+
const metadata = respObj.metadata as Record<string, unknown> | undefined;
|
|
160
|
+
if (metadata?.txHash) coordResult.txHash = String(metadata.txHash);
|
|
161
|
+
if (metadata?.payment_tx_hash) coordResult.txHash = String(metadata.payment_tx_hash);
|
|
162
|
+
}
|
|
163
|
+
// Log full response for debugging
|
|
164
|
+
console.log("Full response:", JSON.stringify(coordResponse, null, 2).substring(0, 1000));
|
|
165
|
+
|
|
166
|
+
results.push(coordResult);
|
|
167
|
+
console.log(`Response (${coordDuration}ms):`);
|
|
168
|
+
console.log(coordResult.response);
|
|
169
|
+
if (coordResult.txHash) console.log(`TX Hash: ${coordResult.txHash}`);
|
|
170
|
+
} catch (error) {
|
|
171
|
+
const coordDuration = Date.now() - coordStart;
|
|
172
|
+
results.push({
|
|
173
|
+
network,
|
|
174
|
+
type: "coordinator",
|
|
175
|
+
success: false,
|
|
176
|
+
error: error instanceof Error ? error.message : String(error),
|
|
177
|
+
duration: coordDuration
|
|
178
|
+
});
|
|
179
|
+
console.log(`Error (${coordDuration}ms): ${error instanceof Error ? error.message : error}`);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
} catch (error) {
|
|
183
|
+
console.error(`Failed to test ${network}:`, error instanceof Error ? error.message : error);
|
|
184
|
+
} finally {
|
|
185
|
+
if (sdk) {
|
|
186
|
+
await sdk.disconnect();
|
|
187
|
+
console.log(`\nDisconnected from ${network}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Wait between networks
|
|
192
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Print summary
|
|
196
|
+
console.log(`\n${"=".repeat(70)}`);
|
|
197
|
+
console.log("TEST RESULTS SUMMARY");
|
|
198
|
+
console.log("=".repeat(70));
|
|
199
|
+
|
|
200
|
+
console.log("\n| Network | Type | Success | Duration | TX Hash |");
|
|
201
|
+
console.log("|------------|-------------|---------|----------|---------|");
|
|
202
|
+
|
|
203
|
+
for (const result of results) {
|
|
204
|
+
const txHash = result.txHash ? result.txHash.substring(0, 10) + "..." : "N/A";
|
|
205
|
+
console.log(
|
|
206
|
+
`| ${result.network.padEnd(10)} | ${result.type.padEnd(11)} | ${result.success ? "YES " : "NO "} | ${(result.duration + "ms").padEnd(8)} | ${txHash} |`
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Print detailed results
|
|
211
|
+
console.log("\n--- Detailed Results ---\n");
|
|
212
|
+
for (const result of results) {
|
|
213
|
+
console.log(`${result.network.toUpperCase()} - ${result.type}:`);
|
|
214
|
+
if (result.success) {
|
|
215
|
+
console.log(` Response: ${result.response}`);
|
|
216
|
+
if (result.txHash) console.log(` TX Hash: ${result.txHash}`);
|
|
217
|
+
} else {
|
|
218
|
+
console.log(` Error: ${result.error}`);
|
|
219
|
+
}
|
|
220
|
+
console.log();
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Exit
|
|
224
|
+
process.exit(results.every(r => r.success) ? 0 : 1);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
runTest().catch(error => {
|
|
228
|
+
console.error("Test failed:", error);
|
|
229
|
+
process.exit(1);
|
|
230
|
+
});
|