@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/src/types/messages.ts
CHANGED
|
@@ -68,10 +68,12 @@ export const MessageTypeSchema = z.enum([
|
|
|
68
68
|
"request_task",
|
|
69
69
|
"task_quote",
|
|
70
70
|
"confirm_task",
|
|
71
|
+
"task_confirmed",
|
|
71
72
|
|
|
72
73
|
// System
|
|
73
74
|
"agents",
|
|
74
75
|
"error",
|
|
76
|
+
"success",
|
|
75
77
|
"ping",
|
|
76
78
|
"pong",
|
|
77
79
|
"capabilities",
|
|
@@ -109,9 +111,8 @@ export const MessageTypeSchema = z.enum([
|
|
|
109
111
|
"room_agents_response",
|
|
110
112
|
"available_agents_response",
|
|
111
113
|
|
|
112
|
-
// Room Ping System (
|
|
114
|
+
// Room Ping System (1 type - pong reuses "pong" type with room data)
|
|
113
115
|
"room_ping",
|
|
114
|
-
"room_pong",
|
|
115
116
|
|
|
116
117
|
// Admin Messages (7 types)
|
|
117
118
|
"list_all_agents",
|
|
@@ -124,7 +125,17 @@ export const MessageTypeSchema = z.enum([
|
|
|
124
125
|
|
|
125
126
|
// User Preferences (2 types)
|
|
126
127
|
"set_user_preferences",
|
|
127
|
-
"user_preferences_updated"
|
|
128
|
+
"user_preferences_updated",
|
|
129
|
+
|
|
130
|
+
// API Key Preferences
|
|
131
|
+
"set_api_key_preference",
|
|
132
|
+
|
|
133
|
+
// Agent Error
|
|
134
|
+
"agent_error",
|
|
135
|
+
|
|
136
|
+
// Wallet Transaction Flow
|
|
137
|
+
"trigger_wallet_tx",
|
|
138
|
+
"tx_result"
|
|
128
139
|
]);
|
|
129
140
|
|
|
130
141
|
export const ContentTypeSchema = z.enum([
|
|
@@ -151,20 +162,31 @@ export const CapabilitySchema = z.object({
|
|
|
151
162
|
description: z.string().optional()
|
|
152
163
|
});
|
|
153
164
|
|
|
165
|
+
// Command pricing fields — flat on the command object, matching server Go struct.
|
|
166
|
+
// Kept as a standalone schema for use by pricing-resolver.
|
|
154
167
|
export const CommandPricingSchema = z.object({
|
|
155
168
|
priceType: z.string().optional(),
|
|
156
169
|
pricePerUnit: z.number().optional(),
|
|
157
170
|
taskUnit: z.string().optional(),
|
|
158
|
-
timeUnit: z.enum(["
|
|
171
|
+
timeUnit: z.enum(["second", "minute", "hour"]).optional()
|
|
159
172
|
});
|
|
160
173
|
|
|
161
174
|
export type CommandPricing = z.infer<typeof CommandPricingSchema>;
|
|
162
175
|
|
|
176
|
+
// Command schema — pricing fields are flat (not nested), matching server Go struct.
|
|
163
177
|
export const CommandSchema = z.object({
|
|
164
178
|
trigger: z.string(),
|
|
165
179
|
argument: z.string().optional(),
|
|
166
180
|
description: z.string().optional(),
|
|
167
|
-
|
|
181
|
+
// Pricing fields (flat, matching server Command struct)
|
|
182
|
+
pricePerUnit: z.number().optional(),
|
|
183
|
+
priceType: z.string().optional(),
|
|
184
|
+
taskUnit: z.string().optional(),
|
|
185
|
+
timeUnit: z.enum(["second", "minute", "hour"]).optional(),
|
|
186
|
+
// Extended fields from server
|
|
187
|
+
hasVariants: z.boolean().optional(),
|
|
188
|
+
variants: z.array(z.any()).optional(),
|
|
189
|
+
parameters: z.array(z.any()).optional()
|
|
168
190
|
});
|
|
169
191
|
|
|
170
192
|
export const RoomSchema = z.object({
|
|
@@ -193,20 +215,30 @@ export const RoomInfoSchema = z
|
|
|
193
215
|
})
|
|
194
216
|
.passthrough(); // Allow extra fields backend might add
|
|
195
217
|
|
|
196
|
-
export const AgentSchema = z
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
218
|
+
export const AgentSchema = z
|
|
219
|
+
.object({
|
|
220
|
+
id: z.string(),
|
|
221
|
+
name: z.string(),
|
|
222
|
+
description: z.string().optional(),
|
|
223
|
+
room: z.string().optional(),
|
|
224
|
+
rooms: z.array(z.string()).optional(), // Server sends plural rooms array
|
|
225
|
+
capabilities: z.array(CapabilitySchema).optional(),
|
|
226
|
+
commands: z.array(CommandSchema).optional(),
|
|
227
|
+
status: AgentStatusSchema,
|
|
228
|
+
image: z.string().optional(),
|
|
229
|
+
// Accept both server field names and SDK field names
|
|
230
|
+
type: AgentTypeSchema.optional(), // server sends "type"
|
|
231
|
+
agentType: AgentTypeSchema.optional(), // SDK alias
|
|
232
|
+
nlp_fallback: stringToBoolean.optional(), // server sends "nlp_fallback"
|
|
233
|
+
nlpFallback: stringToBoolean.optional(), // SDK alias
|
|
234
|
+
webhookUrl: z.string().url().optional(),
|
|
235
|
+
categories: z.array(AgentCategorySchema).max(MAX_CATEGORIES).optional()
|
|
236
|
+
})
|
|
237
|
+
.transform((data) => ({
|
|
238
|
+
...data,
|
|
239
|
+
agentType: data.agentType ?? data.type,
|
|
240
|
+
nlpFallback: data.nlpFallback ?? data.nlp_fallback
|
|
241
|
+
}));
|
|
210
242
|
|
|
211
243
|
// Base message schema
|
|
212
244
|
export const BaseMessageSchema = z
|
|
@@ -223,7 +255,9 @@ export const BaseMessageSchema = z
|
|
|
223
255
|
publicKey: z.string().optional(),
|
|
224
256
|
reasoning: z.string().optional(),
|
|
225
257
|
task_id: z.string().optional(),
|
|
226
|
-
id: z.string().optional() // Added for message tracking
|
|
258
|
+
id: z.string().optional(), // Added for message tracking
|
|
259
|
+
payment: z.string().optional(), // x402 payment payload
|
|
260
|
+
request_id: z.string().optional() // Request-response correlation
|
|
227
261
|
})
|
|
228
262
|
.passthrough(); // Allow message-specific fields to pass through
|
|
229
263
|
|
|
@@ -247,7 +281,8 @@ export const ChallengeMessageSchema = BaseMessageSchema.extend({
|
|
|
247
281
|
export const CheckCachedAuthMessageSchema = BaseMessageSchema.extend({
|
|
248
282
|
type: z.literal("check_cached_auth"),
|
|
249
283
|
data: z.object({
|
|
250
|
-
address: z.string()
|
|
284
|
+
address: z.string(),
|
|
285
|
+
session_token: z.string().optional() // 64-char hex token for fast re-auth (24h validity)
|
|
251
286
|
})
|
|
252
287
|
});
|
|
253
288
|
|
|
@@ -282,7 +317,12 @@ export const AuthMessageSchema = BaseMessageSchema.extend({
|
|
|
282
317
|
private_rooms: z.array(RoomSchema).optional(),
|
|
283
318
|
private_room_id: z.string().optional(),
|
|
284
319
|
cached_auth: stringToBoolean.optional(),
|
|
285
|
-
max_private_rooms: z.number().optional()
|
|
320
|
+
max_private_rooms: z.number().optional(),
|
|
321
|
+
// Auth enhancement fields (audit #6, #7, #9)
|
|
322
|
+
jwt_token: z.string().optional(), // JWT token for KeyVault API authentication
|
|
323
|
+
session_token: z.string().optional(), // 64-char hex token for fast re-auth (24h validity)
|
|
324
|
+
whitelist_verified: z.union([z.boolean(), z.string()]).optional(), // Whitelist verification status
|
|
325
|
+
user_count: z.number().optional() // Total user count (admin only)
|
|
286
326
|
})
|
|
287
327
|
.optional()
|
|
288
328
|
});
|
|
@@ -299,7 +339,12 @@ export const AuthSuccessMessageSchema = BaseMessageSchema.extend({
|
|
|
299
339
|
rooms: z.array(RoomInfoSchema).optional().nullable(), // v2.0.0: Uses RoomInfo with is_owner field
|
|
300
340
|
private_room_id: z.string().optional(), // DEPRECATED: Use rooms array instead
|
|
301
341
|
cached_auth: stringToBoolean.optional(), // Admin field, optional
|
|
302
|
-
max_private_rooms: z.number().optional() // NEW in v2.0.0: Max rooms user can create
|
|
342
|
+
max_private_rooms: z.number().optional(), // NEW in v2.0.0: Max rooms user can create
|
|
343
|
+
// Auth enhancement fields (audit #6, #7, #9)
|
|
344
|
+
jwt_token: z.string().optional(), // JWT token for KeyVault API authentication
|
|
345
|
+
session_token: z.string().optional(), // 64-char hex token for fast re-auth (24h validity)
|
|
346
|
+
whitelist_verified: z.union([z.boolean(), z.string()]).optional(), // Whitelist verification status
|
|
347
|
+
user_count: z.number().optional() // Total user count (admin only)
|
|
303
348
|
})
|
|
304
349
|
});
|
|
305
350
|
|
|
@@ -396,6 +441,8 @@ export const PricingInfoSchema = z
|
|
|
396
441
|
price_per_unit: z.number().optional(),
|
|
397
442
|
priceType: z.string().optional(),
|
|
398
443
|
price_type: z.string().optional(),
|
|
444
|
+
taskUnit: z.string().optional(),
|
|
445
|
+
task_unit: z.string().optional(),
|
|
399
446
|
timeUnit: z.string().optional(),
|
|
400
447
|
time_unit: z.string().optional(),
|
|
401
448
|
currency: z.string().optional().default("USDC"),
|
|
@@ -405,6 +452,7 @@ export const PricingInfoSchema = z
|
|
|
405
452
|
// Normalize to camelCase
|
|
406
453
|
pricePerUnit: data.pricePerUnit ?? data.price_per_unit ?? 0,
|
|
407
454
|
priceType: data.priceType ?? data.price_type,
|
|
455
|
+
taskUnit: data.taskUnit ?? data.task_unit,
|
|
408
456
|
timeUnit: data.timeUnit ?? data.time_unit,
|
|
409
457
|
currency: data.currency,
|
|
410
458
|
network: data.network
|
|
@@ -414,22 +462,37 @@ export const PricingInfoSchema = z
|
|
|
414
462
|
export const RequestTaskMessageSchema = BaseMessageSchema.extend({
|
|
415
463
|
type: z.literal("request_task"),
|
|
416
464
|
content: z.string(),
|
|
417
|
-
room: z.string()
|
|
465
|
+
room: z.string(),
|
|
466
|
+
data: z
|
|
467
|
+
.object({
|
|
468
|
+
network: z.string().optional() // Payment network (peaq, base, avalanche)
|
|
469
|
+
})
|
|
470
|
+
.optional()
|
|
418
471
|
});
|
|
419
472
|
|
|
420
473
|
// Task quote message (server response with pricing)
|
|
421
474
|
export const TaskQuoteMessageSchema = BaseMessageSchema.extend({
|
|
422
475
|
type: z.literal("task_quote"),
|
|
423
476
|
from: z.literal("coordinator"),
|
|
424
|
-
data: z
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
477
|
+
data: z
|
|
478
|
+
.object({
|
|
479
|
+
task_id: z.string(),
|
|
480
|
+
agent_id: z.string(),
|
|
481
|
+
agent_name: z.string(),
|
|
482
|
+
agent_wallet: z.string(),
|
|
483
|
+
command: z.string(),
|
|
484
|
+
pricing: PricingInfoSchema,
|
|
485
|
+
expires_at: z.string(),
|
|
486
|
+
// v2.5 Settlement Router fields for x402x-router-settlement extension
|
|
487
|
+
settlement_router: z.string(),
|
|
488
|
+
salt: z.string(),
|
|
489
|
+
facilitator_fee: z.string(),
|
|
490
|
+
hook: z.string(),
|
|
491
|
+
hook_data: z.string().optional().default("0x"),
|
|
492
|
+
// Request correlation
|
|
493
|
+
client_request_id: z.string().optional()
|
|
494
|
+
})
|
|
495
|
+
.passthrough()
|
|
433
496
|
});
|
|
434
497
|
|
|
435
498
|
// Confirm task message (with payment at top level - backend expects msg.payment)
|
|
@@ -441,6 +504,22 @@ export const ConfirmTaskMessageSchema = BaseMessageSchema.extend({
|
|
|
441
504
|
payment: z.string().optional() // x402 payment at top level (backend checks msg.Payment)
|
|
442
505
|
});
|
|
443
506
|
|
|
507
|
+
// Task confirmed message (server acknowledgment after confirm_task)
|
|
508
|
+
export const TaskConfirmedMessageSchema = BaseMessageSchema.extend({
|
|
509
|
+
type: z.literal("task_confirmed"),
|
|
510
|
+
data: z
|
|
511
|
+
.object({
|
|
512
|
+
task_id: z.string(),
|
|
513
|
+
agent_id: z.string().optional(),
|
|
514
|
+
agent_name: z.string().optional(),
|
|
515
|
+
client_request_id: z.string().optional()
|
|
516
|
+
})
|
|
517
|
+
.passthrough()
|
|
518
|
+
.optional()
|
|
519
|
+
});
|
|
520
|
+
|
|
521
|
+
export type TaskConfirmedMessage = z.infer<typeof TaskConfirmedMessageSchema>;
|
|
522
|
+
|
|
444
523
|
// System message schemas
|
|
445
524
|
export const AgentsListMessageSchema = BaseMessageSchema.extend({
|
|
446
525
|
type: z.literal("agents"),
|
|
@@ -459,12 +538,38 @@ export const ErrorMessageSchema = BaseMessageSchema.extend({
|
|
|
459
538
|
})
|
|
460
539
|
});
|
|
461
540
|
|
|
541
|
+
export const SuccessMessageSchema = BaseMessageSchema.extend({
|
|
542
|
+
type: z.literal("success"),
|
|
543
|
+
content: z.string().optional(),
|
|
544
|
+
from: z.literal("system").optional(),
|
|
545
|
+
data: z
|
|
546
|
+
.object({
|
|
547
|
+
content: z.string().optional()
|
|
548
|
+
})
|
|
549
|
+
.passthrough()
|
|
550
|
+
.optional()
|
|
551
|
+
}).passthrough();
|
|
552
|
+
|
|
462
553
|
export const PingMessageSchema = BaseMessageSchema.extend({
|
|
463
554
|
type: z.literal("ping")
|
|
464
555
|
});
|
|
465
556
|
|
|
466
557
|
export const PongMessageSchema = BaseMessageSchema.extend({
|
|
467
|
-
type: z.literal("pong")
|
|
558
|
+
type: z.literal("pong"),
|
|
559
|
+
data: z
|
|
560
|
+
.union([
|
|
561
|
+
// Regular pong (no data)
|
|
562
|
+
z.undefined(),
|
|
563
|
+
// Room pong (with room data)
|
|
564
|
+
z
|
|
565
|
+
.object({
|
|
566
|
+
room_id: z.string(),
|
|
567
|
+
live_count: z.number().optional(),
|
|
568
|
+
timestamp: z.string()
|
|
569
|
+
})
|
|
570
|
+
.passthrough()
|
|
571
|
+
])
|
|
572
|
+
.optional()
|
|
468
573
|
});
|
|
469
574
|
|
|
470
575
|
// Room subscription schemas
|
|
@@ -636,7 +741,15 @@ export const AgentRoomInfoSchema = z
|
|
|
636
741
|
status: z.string().optional(),
|
|
637
742
|
added_by: z.string().optional(),
|
|
638
743
|
added_at: z.string().optional(),
|
|
639
|
-
categories: z.array(AgentCategorySchema).max(MAX_CATEGORIES).optional()
|
|
744
|
+
categories: z.array(AgentCategorySchema).max(MAX_CATEGORIES).optional(),
|
|
745
|
+
// Server-sent typed fields
|
|
746
|
+
type: AgentTypeSchema.optional(),
|
|
747
|
+
nlp_fallback: z.union([z.boolean(), z.string()]).optional(),
|
|
748
|
+
is_verified: z.boolean().optional(),
|
|
749
|
+
is_public: z.boolean().optional(),
|
|
750
|
+
created_at: z.string().optional(),
|
|
751
|
+
creator: z.string().optional(),
|
|
752
|
+
is_banned: z.boolean().optional()
|
|
640
753
|
})
|
|
641
754
|
.passthrough();
|
|
642
755
|
|
|
@@ -687,7 +800,11 @@ export const AvailableAgentsResponseSchema = z
|
|
|
687
800
|
type: z.literal("available_agents_response"),
|
|
688
801
|
data: z
|
|
689
802
|
.object({
|
|
690
|
-
agents: z.array(AgentRoomInfoSchema).optional()
|
|
803
|
+
agents: z.array(AgentRoomInfoSchema).optional(),
|
|
804
|
+
total: z.number().optional(),
|
|
805
|
+
offset: z.number().optional(),
|
|
806
|
+
limit: z.number().optional(),
|
|
807
|
+
has_more: z.boolean().optional()
|
|
691
808
|
})
|
|
692
809
|
.passthrough()
|
|
693
810
|
})
|
|
@@ -730,18 +847,8 @@ export const RoomPingMessageSchema = z
|
|
|
730
847
|
})
|
|
731
848
|
.passthrough();
|
|
732
849
|
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
type: z.literal("room_pong"),
|
|
736
|
-
data: z
|
|
737
|
-
.object({
|
|
738
|
-
room_id: z.string(),
|
|
739
|
-
live_count: z.number().optional(), // Optional - consuming code should handle missing as 0
|
|
740
|
-
timestamp: z.string()
|
|
741
|
-
})
|
|
742
|
-
.passthrough()
|
|
743
|
-
})
|
|
744
|
-
.passthrough();
|
|
850
|
+
// Note: RoomPong reuses the "pong" message type with room data in the data field
|
|
851
|
+
// The PongHandler checks for room_id in data to distinguish room pong from regular pong
|
|
745
852
|
|
|
746
853
|
// Admin agent info (admin only)
|
|
747
854
|
export const AdminAgentInfoSchema = z
|
|
@@ -908,6 +1015,46 @@ export const UserPreferencesUpdatedMessageSchema = z
|
|
|
908
1015
|
export type UserPreferencesUpdatedData = z.infer<typeof UserPreferencesUpdatedDataSchema>;
|
|
909
1016
|
export type UserPreferencesUpdatedMessage = z.infer<typeof UserPreferencesUpdatedMessageSchema>;
|
|
910
1017
|
|
|
1018
|
+
// Agent Error message (server → client, when an agent fails)
|
|
1019
|
+
export const AgentErrorMessageSchema = BaseMessageSchema.extend({
|
|
1020
|
+
type: z.literal("agent_error"),
|
|
1021
|
+
content: z.string().optional(),
|
|
1022
|
+
from: z.string().optional(),
|
|
1023
|
+
data: z
|
|
1024
|
+
.object({
|
|
1025
|
+
task_id: z.string().optional(),
|
|
1026
|
+
client_request_id: z.string().optional()
|
|
1027
|
+
})
|
|
1028
|
+
.passthrough()
|
|
1029
|
+
.optional()
|
|
1030
|
+
});
|
|
1031
|
+
|
|
1032
|
+
export type AgentErrorMessage = z.infer<typeof AgentErrorMessageSchema>;
|
|
1033
|
+
|
|
1034
|
+
// Wallet Transaction schemas
|
|
1035
|
+
export const TxResultStatusSchema = z.enum(["confirmed", "rejected", "failed"]);
|
|
1036
|
+
export type TxResultStatus = z.infer<typeof TxResultStatusSchema>;
|
|
1037
|
+
|
|
1038
|
+
export const TriggerWalletTxMessageSchema = BaseMessageSchema.extend({
|
|
1039
|
+
type: z.literal("trigger_wallet_tx"),
|
|
1040
|
+
from: z.string().optional(),
|
|
1041
|
+
data: z
|
|
1042
|
+
.object({
|
|
1043
|
+
task_id: z.string(),
|
|
1044
|
+
tx: z.object({
|
|
1045
|
+
to: z.string(),
|
|
1046
|
+
value: z.string(),
|
|
1047
|
+
data: z.string().optional(),
|
|
1048
|
+
chainId: z.number()
|
|
1049
|
+
}),
|
|
1050
|
+
description: z.string().optional(),
|
|
1051
|
+
optional: z.boolean().optional()
|
|
1052
|
+
})
|
|
1053
|
+
.passthrough()
|
|
1054
|
+
});
|
|
1055
|
+
|
|
1056
|
+
export type TriggerWalletTxMessage = z.infer<typeof TriggerWalletTxMessageSchema>;
|
|
1057
|
+
|
|
911
1058
|
// Union of all INCOMING message schemas for validation
|
|
912
1059
|
// Note: Outgoing message schemas (Subscribe, Unsubscribe, ListRooms) are excluded
|
|
913
1060
|
// as they share the same type values with their response counterparts
|
|
@@ -932,9 +1079,11 @@ export const AnyMessageSchema = z.discriminatedUnion("type", [
|
|
|
932
1079
|
|
|
933
1080
|
// Quote-Approve Flow (v2.2.0)
|
|
934
1081
|
TaskQuoteMessageSchema,
|
|
1082
|
+
TaskConfirmedMessageSchema,
|
|
935
1083
|
|
|
936
1084
|
// System
|
|
937
1085
|
ErrorMessageSchema,
|
|
1086
|
+
SuccessMessageSchema,
|
|
938
1087
|
PingMessageSchema,
|
|
939
1088
|
PongMessageSchema,
|
|
940
1089
|
|
|
@@ -954,9 +1103,6 @@ export const AnyMessageSchema = z.discriminatedUnion("type", [
|
|
|
954
1103
|
AvailableAgentsResponseSchema,
|
|
955
1104
|
AgentStatusUpdateMessageSchema,
|
|
956
1105
|
|
|
957
|
-
// Room Ping System (v2.0.0)
|
|
958
|
-
RoomPongResponseSchema,
|
|
959
|
-
|
|
960
1106
|
// Admin Messages
|
|
961
1107
|
AllAgentsResponseSchema,
|
|
962
1108
|
UserCountMessageSchema,
|
|
@@ -965,7 +1111,13 @@ export const AnyMessageSchema = z.discriminatedUnion("type", [
|
|
|
965
1111
|
AgentDetailsResponseMessageSchema,
|
|
966
1112
|
|
|
967
1113
|
// User Preferences
|
|
968
|
-
UserPreferencesUpdatedMessageSchema
|
|
1114
|
+
UserPreferencesUpdatedMessageSchema,
|
|
1115
|
+
|
|
1116
|
+
// Agent Error
|
|
1117
|
+
AgentErrorMessageSchema,
|
|
1118
|
+
|
|
1119
|
+
// Wallet Transaction
|
|
1120
|
+
TriggerWalletTxMessageSchema
|
|
969
1121
|
]);
|
|
970
1122
|
|
|
971
1123
|
// Type inference from schemas
|
|
@@ -1003,6 +1155,7 @@ export type TaskQuoteMessage = z.infer<typeof TaskQuoteMessageSchema>;
|
|
|
1003
1155
|
export type ConfirmTaskMessage = z.infer<typeof ConfirmTaskMessageSchema>;
|
|
1004
1156
|
|
|
1005
1157
|
export type ErrorMessage = z.infer<typeof ErrorMessageSchema>;
|
|
1158
|
+
export type SuccessMessage = z.infer<typeof SuccessMessageSchema>;
|
|
1006
1159
|
export type PingMessage = z.infer<typeof PingMessageSchema>;
|
|
1007
1160
|
export type PongMessage = z.infer<typeof PongMessageSchema>;
|
|
1008
1161
|
export type SubscribeMessage = z.infer<typeof SubscribeMessageSchema>;
|
|
@@ -1038,7 +1191,7 @@ export type AgentStatusUpdateMessage = z.infer<typeof AgentStatusUpdateMessageSc
|
|
|
1038
1191
|
|
|
1039
1192
|
// Room Ping Types (v2.0.0)
|
|
1040
1193
|
export type RoomPingMessage = z.infer<typeof RoomPingMessageSchema>;
|
|
1041
|
-
|
|
1194
|
+
// Note: Room pong responses use the PongMessage type with room data
|
|
1042
1195
|
|
|
1043
1196
|
export type AnyMessage = z.infer<typeof AnyMessageSchema>;
|
|
1044
1197
|
|
|
@@ -1089,10 +1242,16 @@ export function createRequestChallenge(
|
|
|
1089
1242
|
});
|
|
1090
1243
|
}
|
|
1091
1244
|
|
|
1092
|
-
export function createCheckCachedAuth(
|
|
1245
|
+
export function createCheckCachedAuth(
|
|
1246
|
+
address: string,
|
|
1247
|
+
sessionToken?: string
|
|
1248
|
+
): CheckCachedAuthMessage {
|
|
1093
1249
|
return CheckCachedAuthMessageSchema.parse({
|
|
1094
1250
|
type: "check_cached_auth",
|
|
1095
|
-
data: {
|
|
1251
|
+
data: {
|
|
1252
|
+
address,
|
|
1253
|
+
...(sessionToken && { session_token: sessionToken })
|
|
1254
|
+
}
|
|
1096
1255
|
});
|
|
1097
1256
|
}
|
|
1098
1257
|
|
|
@@ -1149,11 +1308,16 @@ export function createListRooms(): ListRoomsMessage {
|
|
|
1149
1308
|
}
|
|
1150
1309
|
|
|
1151
1310
|
// Quote-Approve Flow factory functions (v2.2.0)
|
|
1152
|
-
export function createRequestTask(
|
|
1311
|
+
export function createRequestTask(
|
|
1312
|
+
content: string,
|
|
1313
|
+
room: string,
|
|
1314
|
+
network?: string
|
|
1315
|
+
): RequestTaskMessage {
|
|
1153
1316
|
return RequestTaskMessageSchema.parse({
|
|
1154
1317
|
type: "request_task",
|
|
1155
1318
|
content,
|
|
1156
|
-
room
|
|
1319
|
+
room,
|
|
1320
|
+
...(network && { data: { network } })
|
|
1157
1321
|
});
|
|
1158
1322
|
}
|
|
1159
1323
|
|
|
@@ -7,7 +7,7 @@ export interface ResolvedPricing {
|
|
|
7
7
|
pricePerUnit: number;
|
|
8
8
|
priceType: PriceType;
|
|
9
9
|
taskUnit?: string;
|
|
10
|
-
timeUnit?: "
|
|
10
|
+
timeUnit?: "second" | "minute" | "hour";
|
|
11
11
|
totalPrice: number;
|
|
12
12
|
itemCount?: number;
|
|
13
13
|
duration?: number;
|
|
@@ -40,7 +40,15 @@ export function resolveAgentPricing(
|
|
|
40
40
|
const command = agent.commands.find(
|
|
41
41
|
(cmd) => cmd.trigger.toLowerCase() === commandTrigger.toLowerCase()
|
|
42
42
|
);
|
|
43
|
-
pricing
|
|
43
|
+
// Command pricing fields are flat on the command object
|
|
44
|
+
if (command) {
|
|
45
|
+
pricing = {
|
|
46
|
+
pricePerUnit: command.pricePerUnit,
|
|
47
|
+
priceType: command.priceType,
|
|
48
|
+
taskUnit: command.taskUnit,
|
|
49
|
+
timeUnit: command.timeUnit
|
|
50
|
+
};
|
|
51
|
+
}
|
|
44
52
|
}
|
|
45
53
|
|
|
46
54
|
if (!pricing) {
|
|
@@ -101,7 +101,7 @@ async function testDirectAgentCommand() {
|
|
|
101
101
|
// Subscribe to test room
|
|
102
102
|
console.log("Subscribing to room:", TEST_ROOM);
|
|
103
103
|
try {
|
|
104
|
-
await sdk.
|
|
104
|
+
await sdk.subscribeToPublicRoom(TEST_ROOM);
|
|
105
105
|
console.log("Subscribed!\n");
|
|
106
106
|
} catch {
|
|
107
107
|
console.log("Room subscription skipped (private room)\n");
|
|
@@ -614,7 +614,7 @@ describe.skipIf(!hasCredentials)("Real Teneo Server Integration Test", () => {
|
|
|
614
614
|
if (rooms.length > 0) {
|
|
615
615
|
const testRoom = rooms[0];
|
|
616
616
|
|
|
617
|
-
await sdk.
|
|
617
|
+
await sdk.subscribeToPublicRoom(testRoom.id);
|
|
618
618
|
expect(sdk.getSubscribedRooms()).toContain(testRoom.id);
|
|
619
619
|
|
|
620
620
|
console.log(`Subscribed to room: ${testRoom.name} (${testRoom.id})`);
|
|
@@ -150,7 +150,7 @@ describe("WebSocket Integration Tests", () => {
|
|
|
150
150
|
.withWebSocketUrl(`ws://localhost:${serverPort}`)
|
|
151
151
|
.withAuthentication(privateKey)
|
|
152
152
|
.withReconnection(false) // Disable for tests
|
|
153
|
-
.
|
|
153
|
+
.withAutoJoinPublicRooms(["test-room"]) // Auto-join test room
|
|
154
154
|
.withPayments({ autoApprove: false }) // Use legacy flow for mock server
|
|
155
155
|
.build();
|
|
156
156
|
|
|
@@ -241,7 +241,7 @@ describe("WebSocket Integration Tests", () => {
|
|
|
241
241
|
sdk.on("agent:list", resolve);
|
|
242
242
|
});
|
|
243
243
|
|
|
244
|
-
await sdk.
|
|
244
|
+
await sdk.subscribeToPublicRoom("test-room");
|
|
245
245
|
const agents = await agentsPromise;
|
|
246
246
|
|
|
247
247
|
expect(agents).toBeDefined();
|
|
@@ -258,7 +258,7 @@ describe("WebSocket Integration Tests", () => {
|
|
|
258
258
|
setTimeout(() => reject(new Error("Event timeout")), 10000);
|
|
259
259
|
});
|
|
260
260
|
|
|
261
|
-
await sdk.
|
|
261
|
+
await sdk.subscribeToPublicRoom("test-room-2"); // Use different room to avoid auto-join conflicts
|
|
262
262
|
await subscribePromise;
|
|
263
263
|
|
|
264
264
|
expect(sdk.getSubscribedRooms()).toContain("test-room-2");
|