@teneo-protocol/sdk 2.2.2 → 3.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/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 +756 -756
- 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 +756 -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.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 +792 -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 +756 -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 +2 -0
- package/dist/managers/admin-manager.d.ts.map +1 -1
- package/dist/managers/admin-manager.js +3 -2
- 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 +214 -40
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +360 -83
- 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 +9801 -7222
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +180 -40
- 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 +5 -2
- 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 +401 -70
- 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 +221 -57
- 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/CONCEPTS.md
CHANGED
|
@@ -114,7 +114,7 @@ sdk.on("auth:success", (state) => {
|
|
|
114
114
|
});
|
|
115
115
|
|
|
116
116
|
sdk.on("auth:error", (error) => {
|
|
117
|
-
console.error("Authentication failed:", error
|
|
117
|
+
console.error("Authentication failed:", error);
|
|
118
118
|
});
|
|
119
119
|
```
|
|
120
120
|
|
|
@@ -129,13 +129,13 @@ Rooms are isolated spaces where you send messages and receive responses from age
|
|
|
129
129
|
| Type | Subscription | Ownership | Use Case |
|
|
130
130
|
|------|-------------|-----------|----------|
|
|
131
131
|
| **Private** | Automatic | You own it | Personal workspace, private conversations |
|
|
132
|
-
| **Public** | Manual (`
|
|
132
|
+
| **Public** | Manual (`subscribeToPublicRoom()`) | System/shared | Community channels, announcements |
|
|
133
133
|
| **Shared** | Automatic | Someone invited you | Collaboration, team rooms |
|
|
134
134
|
|
|
135
135
|
### Private Rooms
|
|
136
136
|
|
|
137
137
|
- **You create them** with `createRoom()`
|
|
138
|
-
- **You're always subscribed** - no need to call `
|
|
138
|
+
- **You're always subscribed** - no need to call `subscribeToPublicRoom()`
|
|
139
139
|
- **You control agents** - add/remove agents as needed
|
|
140
140
|
- **Subject to limits** - typically 1-10 rooms based on your plan
|
|
141
141
|
|
|
@@ -161,10 +161,10 @@ console.log(`Rooms: ${sdk.getOwnedRoomCount()}/${sdk.getRoomLimit()}`);
|
|
|
161
161
|
|
|
162
162
|
```typescript
|
|
163
163
|
// Subscribe to a public room
|
|
164
|
-
await sdk.
|
|
164
|
+
await sdk.subscribeToPublicRoom("public-room-id");
|
|
165
165
|
|
|
166
166
|
// Unsubscribe when done
|
|
167
|
-
await sdk.
|
|
167
|
+
await sdk.unsubscribeFromPublicRoom("public-room-id");
|
|
168
168
|
```
|
|
169
169
|
|
|
170
170
|
### Room Lifecycle
|
|
@@ -239,7 +239,7 @@ Your Message: "What's the weather in Tokyo?"
|
|
|
239
239
|
sdk.on("agent:selected", (selection) => {
|
|
240
240
|
console.log(`Selected: ${selection.agentName}`);
|
|
241
241
|
console.log(`Reason: ${selection.reasoning}`);
|
|
242
|
-
console.log(`Capabilities: ${selection.capabilities.join(", ")}`);
|
|
242
|
+
console.log(`Capabilities: ${selection.capabilities?.map(c => c.name).join(", ")}`);
|
|
243
243
|
});
|
|
244
244
|
```
|
|
245
245
|
|
|
@@ -312,13 +312,15 @@ details.capabilities?.forEach(cap => {
|
|
|
312
312
|
|
|
313
313
|
// Commands
|
|
314
314
|
details.commands?.forEach(cmd => {
|
|
315
|
-
console.log(`- ${cmd.
|
|
315
|
+
console.log(`- ${cmd.trigger}: ${cmd.description}`);
|
|
316
316
|
});
|
|
317
317
|
|
|
318
|
-
// Pricing (if paid agent)
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
318
|
+
// Pricing (per command, if paid agent)
|
|
319
|
+
details.commands?.forEach(cmd => {
|
|
320
|
+
if (cmd.pricePerUnit) {
|
|
321
|
+
console.log(`${cmd.trigger}: ${cmd.pricePerUnit} per ${cmd.taskUnit}`);
|
|
322
|
+
}
|
|
323
|
+
});
|
|
322
324
|
```
|
|
323
325
|
|
|
324
326
|
### Agent Events
|
|
@@ -354,7 +356,7 @@ Understanding how messages flow through the system helps you debug and optimize
|
|
|
354
356
|
### Complete Flow: sendMessage to Response
|
|
355
357
|
|
|
356
358
|
```
|
|
357
|
-
sdk.sendMessage("What's 2+2?", { room:
|
|
359
|
+
sdk.sendMessage("What's 2+2?", { room: roomId })
|
|
358
360
|
│
|
|
359
361
|
▼
|
|
360
362
|
┌─────────────────────────────────────┐
|
|
@@ -370,7 +372,7 @@ sdk.sendMessage("What's 2+2?", { room: "math-room" })
|
|
|
370
372
|
│ { │
|
|
371
373
|
│ type: "message", │
|
|
372
374
|
│ content: "What's 2+2?", │
|
|
373
|
-
│ room:
|
|
375
|
+
│ room: roomId, │
|
|
374
376
|
│ from: "0xYourWallet" │
|
|
375
377
|
│ } │
|
|
376
378
|
└─────────────────┬───────────────────┘
|
|
@@ -451,10 +453,22 @@ Some agents charge for their services using the X402 payment protocol. The flow
|
|
|
451
453
|
|
|
452
454
|
The SDK includes a `PaymentSigner` that **automatically creates x402 payment headers** when you confirm a task. No manual payment encoding needed!
|
|
453
455
|
|
|
454
|
-
-
|
|
455
|
-
-
|
|
456
|
+
- Supports **multiple EVM networks** with **USDC** stablecoin (PEAQ, Base, Avalanche, and more)
|
|
457
|
+
- **Dynamic network configuration** fetched from backend automatically
|
|
458
|
+
- Payment headers are signed using your private key with **x402 v2.5 settlement router** integration
|
|
456
459
|
- The SDK handles all the complexity for you
|
|
457
460
|
|
|
461
|
+
### Multi-Network Support
|
|
462
|
+
|
|
463
|
+
Networks are configured dynamically from the backend, enabling payments across multiple chains:
|
|
464
|
+
|
|
465
|
+
- **PEAQ Mainnet** (chainId: 3338) - Original network
|
|
466
|
+
- **Base Mainnet** (chainId: 8453) - Layer 2 with lower fees
|
|
467
|
+
- **Avalanche Mainnet** (chainId: 43114) - High-throughput chain
|
|
468
|
+
- **Future networks** added server-side without SDK updates
|
|
469
|
+
|
|
470
|
+
The SDK automatically fetches network configurations during `connect()` and selects the appropriate network based on the agent's requirements. See the [Multi-Network Support](#) section in the README for more details.
|
|
471
|
+
|
|
458
472
|
### Payment Flow
|
|
459
473
|
|
|
460
474
|
```
|
|
@@ -485,54 +499,177 @@ The SDK includes a `PaymentSigner` that **automatically creates x402 payment hea
|
|
|
485
499
|
"Here's your analysis..."
|
|
486
500
|
```
|
|
487
501
|
|
|
488
|
-
###
|
|
502
|
+
### API Reference
|
|
503
|
+
|
|
504
|
+
#### `requestQuote(content, room)` → `Promise<QuoteResult>`
|
|
505
|
+
|
|
506
|
+
Requests a price quote from the coordinator without auto-approval.
|
|
489
507
|
|
|
490
508
|
```typescript
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
509
|
+
const quote = await sdk.requestQuote(
|
|
510
|
+
"Analyze Bitcoin trends for the past week",
|
|
511
|
+
roomId
|
|
512
|
+
);
|
|
513
|
+
```
|
|
496
514
|
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
515
|
+
**Returns `QuoteResult`:**
|
|
516
|
+
```typescript
|
|
517
|
+
{
|
|
518
|
+
taskId: string; // Unique task identifier
|
|
519
|
+
agentId: string; // Selected agent ID
|
|
520
|
+
agentName: string; // Agent display name
|
|
521
|
+
agentWallet: string; // Agent's payment wallet address
|
|
522
|
+
command: string; // The command to be executed
|
|
523
|
+
pricing: {
|
|
524
|
+
pricePerUnit: number; // Price in micro-USDC
|
|
525
|
+
priceType: string; // e.g., "per_request"
|
|
526
|
+
currency: string; // e.g., "USDC"
|
|
527
|
+
timeUnit?: string; // e.g., "hour", "day"
|
|
528
|
+
network?: string; // e.g., "peaq", "base", "avalanche"
|
|
529
|
+
};
|
|
530
|
+
expiresAt: Date; // Quote expiration time
|
|
531
|
+
// x402 v2.5 Settlement Router fields
|
|
532
|
+
settlementRouter: string; // Router contract address
|
|
533
|
+
salt: string; // Unique transaction salt
|
|
534
|
+
facilitatorFee: string; // Facilitator fee amount
|
|
535
|
+
hook: string; // Transfer hook address
|
|
536
|
+
hookData?: string; // Optional hook data (default: "0x")
|
|
537
|
+
}
|
|
538
|
+
```
|
|
500
539
|
|
|
501
|
-
|
|
502
|
-
await sdk.confirmTask({ taskId: quote.task_id });
|
|
540
|
+
#### `confirmQuote(taskId, options?)` → `Promise<FormattedResponse | void>`
|
|
503
541
|
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
542
|
+
Confirms a pending quote and executes the task with payment. The SDK auto-signs the x402 payment header.
|
|
543
|
+
|
|
544
|
+
```typescript
|
|
545
|
+
// Fire and forget
|
|
546
|
+
await sdk.confirmQuote(quote.taskId);
|
|
547
|
+
|
|
548
|
+
// Wait for the agent's response
|
|
549
|
+
const response = await sdk.confirmQuote(quote.taskId, {
|
|
550
|
+
waitForResponse: true, // Block until agent responds
|
|
551
|
+
timeout: 30000 // Timeout in ms (default: 30000)
|
|
509
552
|
});
|
|
553
|
+
|
|
554
|
+
console.log(response.humanized);
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
#### `getPendingQuote(taskId)` → `QuoteResult | undefined`
|
|
558
|
+
|
|
559
|
+
Retrieves a pending quote that hasn't been confirmed yet.
|
|
560
|
+
|
|
561
|
+
```typescript
|
|
562
|
+
const quote = sdk.getPendingQuote("task-123");
|
|
563
|
+
if (quote) {
|
|
564
|
+
console.log(`Pending: ${quote.agentName} at ${quote.pricing.pricePerUnit} USDC`);
|
|
565
|
+
}
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
### Complete Payment Example
|
|
569
|
+
|
|
570
|
+
```typescript
|
|
571
|
+
import { TeneoSDK } from "@teneo-protocol/sdk";
|
|
572
|
+
|
|
573
|
+
const sdk = new TeneoSDK(
|
|
574
|
+
TeneoSDK.builder()
|
|
575
|
+
.withWebSocketUrl("wss://backend.developer.chatroom.teneo-protocol.ai/ws")
|
|
576
|
+
.withAuthentication(process.env.PRIVATE_KEY!)
|
|
577
|
+
.withPayments({
|
|
578
|
+
autoApprove: false, // Manual approval
|
|
579
|
+
maxPricePerRequest: 1000000 // Max 1 USDC (in micro-units)
|
|
580
|
+
})
|
|
581
|
+
.build()
|
|
582
|
+
);
|
|
583
|
+
|
|
584
|
+
await sdk.connect();
|
|
585
|
+
|
|
586
|
+
// Get a room to work with
|
|
587
|
+
const rooms = sdk.getRooms();
|
|
588
|
+
const roomId = rooms[0].id;
|
|
589
|
+
|
|
590
|
+
// 1. Request a quote
|
|
591
|
+
const quote = await sdk.requestQuote(
|
|
592
|
+
"Analyze Bitcoin trends for the past week",
|
|
593
|
+
roomId
|
|
594
|
+
);
|
|
595
|
+
|
|
596
|
+
console.log(`Agent: ${quote.agentName}`);
|
|
597
|
+
console.log(`Price: ${quote.pricing.pricePerUnit} micro-USDC`);
|
|
598
|
+
console.log(`Expires: ${quote.expiresAt}`);
|
|
599
|
+
|
|
600
|
+
// 2. Check price and confirm
|
|
601
|
+
if (quote.pricing.pricePerUnit <= 500000) {
|
|
602
|
+
// Confirm and wait for the response
|
|
603
|
+
const response = await sdk.confirmQuote(quote.taskId, {
|
|
604
|
+
waitForResponse: true,
|
|
605
|
+
timeout: 30000
|
|
606
|
+
});
|
|
607
|
+
|
|
608
|
+
console.log("Result:", response.humanized);
|
|
609
|
+
} else {
|
|
610
|
+
console.log("Too expensive, skipping");
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
sdk.disconnect();
|
|
510
614
|
```
|
|
511
615
|
|
|
512
616
|
### Payment Events
|
|
513
617
|
|
|
514
618
|
```typescript
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
console.log(`
|
|
619
|
+
// Quote received from agent
|
|
620
|
+
sdk.on("quote:received", (quote) => {
|
|
621
|
+
console.log(`Quote: ${quote.data.pricing.pricePerUnit} USDC`);
|
|
622
|
+
console.log(`Expires: ${quote.data.expires_at}`);
|
|
518
623
|
});
|
|
519
624
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
console.log(
|
|
625
|
+
// Payment attached to request
|
|
626
|
+
sdk.on("payment:attached", (data) => {
|
|
627
|
+
console.log(`Paid ${data.amount} to agent ${data.agentId}`);
|
|
523
628
|
});
|
|
524
629
|
|
|
630
|
+
// Payment blocked by price limit
|
|
631
|
+
sdk.on("payment:blocked", (data) => {
|
|
632
|
+
console.warn(`Blocked: agent charges ${data.agentPrice}, max is ${data.maxPrice}`);
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
// Payment errors
|
|
525
636
|
sdk.on("payment:error", (error) => {
|
|
526
637
|
console.error(`Payment failed: ${error.message}`);
|
|
527
638
|
});
|
|
528
639
|
```
|
|
529
640
|
|
|
641
|
+
### Configuration
|
|
642
|
+
|
|
643
|
+
Payment behavior can be configured two ways:
|
|
644
|
+
|
|
645
|
+
```typescript
|
|
646
|
+
// Builder pattern
|
|
647
|
+
TeneoSDK.builder()
|
|
648
|
+
.withPayments({
|
|
649
|
+
autoApprove: true, // Auto-confirm quotes
|
|
650
|
+
maxPricePerRequest: 1000000, // Max 1 USDC per request
|
|
651
|
+
quoteTimeout: 30000 // 30s timeout for quotes
|
|
652
|
+
})
|
|
653
|
+
.build();
|
|
654
|
+
|
|
655
|
+
// Plain config object
|
|
656
|
+
new TeneoSDK({
|
|
657
|
+
wsUrl: "wss://...",
|
|
658
|
+
privateKey: "0x...",
|
|
659
|
+
autoApproveQuotes: true, // Same as autoApprove in builder
|
|
660
|
+
maxPricePerRequest: 1000000,
|
|
661
|
+
quoteTimeout: 30000
|
|
662
|
+
});
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
> **Note:** `autoApprove` (builder) and `autoApproveQuotes` (config object) control the same behavior.
|
|
666
|
+
|
|
530
667
|
### Free vs Paid Tasks
|
|
531
668
|
|
|
532
669
|
- **Free**: Message → Coordinator → Agent → Response (direct)
|
|
533
670
|
- **Paid**: Message → Coordinator → Quote → Confirm → Agent → Response
|
|
534
671
|
|
|
535
|
-
You'll know it's a paid task when you receive a `
|
|
672
|
+
You'll know it's a paid task when you receive a `quote:received` event instead of going directly to `agent:response`.
|
|
536
673
|
|
|
537
674
|
---
|
|
538
675
|
|
|
@@ -588,8 +725,9 @@ The SDK is fully event-driven. Here's the complete event reference:
|
|
|
588
725
|
|
|
589
726
|
| Event | When | Data |
|
|
590
727
|
|-------|------|------|
|
|
591
|
-
| `
|
|
592
|
-
| `payment:
|
|
728
|
+
| `quote:received` | Quote received | `(quote)` |
|
|
729
|
+
| `payment:attached` | Payment attached to request | `(data)` |
|
|
730
|
+
| `payment:blocked` | Payment blocked (price too high) | `(data)` |
|
|
593
731
|
| `payment:error` | Payment error | `(error)` |
|
|
594
732
|
|
|
595
733
|
### Lifecycle Events
|
|
@@ -623,9 +761,9 @@ The SDK is fully event-driven. Here's the complete event reference:
|
|
|
623
761
|
```
|
|
624
762
|
1. message:sent ─── Your message sent
|
|
625
763
|
2. agent:selected ─── Coordinator picked agent
|
|
626
|
-
3.
|
|
764
|
+
3. quote:received ─── Quote received
|
|
627
765
|
... user confirms payment ...
|
|
628
|
-
4. payment:
|
|
766
|
+
4. payment:attached ─── Payment attached and validated
|
|
629
767
|
5. agent:response ─── Agent responded
|
|
630
768
|
```
|
|
631
769
|
|
|
@@ -705,7 +843,7 @@ const sdk = new TeneoSDK({
|
|
|
705
843
|
const sdk = new TeneoSDK({
|
|
706
844
|
wsUrl: "...",
|
|
707
845
|
privateKey: "...",
|
|
708
|
-
|
|
846
|
+
reconnectStrategy: {
|
|
709
847
|
type: "exponential",
|
|
710
848
|
baseDelay: 3000, // 3s initial
|
|
711
849
|
maxDelay: 120000, // 2 minute max
|
|
@@ -728,7 +866,7 @@ sdk.on("connection:reconnected", () => {
|
|
|
728
866
|
|
|
729
867
|
```typescript
|
|
730
868
|
// Disconnect cleanly
|
|
731
|
-
|
|
869
|
+
sdk.disconnect();
|
|
732
870
|
|
|
733
871
|
// Or destroy completely (removes all listeners)
|
|
734
872
|
sdk.destroy();
|