@teneo-protocol/sdk 1.0.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +11 -2
- package/.github/CODEOWNERS +2 -0
- package/.github/ISSUE_TEMPLATE/01-bug.yml +85 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/workflows/claude-code-review.yml +8 -3
- package/.github/workflows/claude-reviewer.yml +6 -4
- package/.github/workflows/publish-npm.yml +9 -6
- package/.github/workflows/push-to-main.yml +1 -1
- package/.github/workflows/top-issue.yml +102 -0
- package/CHANGELOG.md +334 -0
- package/CONCEPTS.md +747 -0
- package/README.md +577 -54
- package/dist/constants.js +8 -8
- package/dist/constants.js.map +1 -1
- package/dist/core/websocket-client.d.ts +25 -1
- package/dist/core/websocket-client.d.ts.map +1 -1
- package/dist/core/websocket-client.js +74 -15
- package/dist/core/websocket-client.js.map +1 -1
- package/dist/formatters/response-formatter.js +4 -0
- package/dist/formatters/response-formatter.js.map +1 -1
- package/dist/handlers/message-handler-registry.js +2 -1
- package/dist/handlers/message-handler-registry.js.map +1 -1
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1666 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js +38 -0
- package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts +76 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +67 -0
- package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts +92 -38
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/agent-selected-handler.js +2 -5
- package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -1
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +1687 -0
- package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-status-update-handler.js +48 -0
- package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agents-list-handler.js +2 -5
- package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -1
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +439 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js +36 -0
- package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.d.ts +45 -31
- package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-error-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-message-handler.js +71 -10
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-required-handler.d.ts +49 -31
- package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-required-handler.js +2 -5
- package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.d.ts +6 -0
- package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/auth-success-handler.js +52 -9
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
- package/dist/handlers/message-handlers/base-handler.d.ts +4 -4
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/base-handler.js +3 -1
- package/dist/handlers/message-handlers/base-handler.js.map +1 -1
- package/dist/handlers/message-handlers/challenge-handler.d.ts +45 -31
- package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/challenge-handler.js +3 -2
- package/dist/handlers/message-handlers/challenge-handler.js.map +1 -1
- package/dist/handlers/message-handlers/error-message-handler.d.ts +49 -31
- package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/error-message-handler.js +2 -5
- package/dist/handlers/message-handlers/error-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/index.d.ts +11 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -1
- package/dist/handlers/message-handlers/index.js +55 -1
- package/dist/handlers/message-handlers/index.js.map +1 -1
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +1660 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.js +35 -0
- package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +1669 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.js +48 -0
- package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +2 -110
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +4 -6
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts +62 -58
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/ping-pong-handler.js +4 -10
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts +94 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js +35 -0
- package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts +31 -29
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/regular-message-handler.js +4 -6
- package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
- package/dist/handlers/message-handlers/room-operation-response-handler.d.ts +328 -0
- package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/room-operation-response-handler.js +89 -0
- package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +53 -31
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/subscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/task-quote-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/task-quote-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-quote-handler.js +29 -0
- package/dist/handlers/message-handlers/task-quote-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.js +2 -5
- package/dist/handlers/message-handlers/task-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/types.d.ts +21 -7
- package/dist/handlers/message-handlers/types.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +53 -31
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js +4 -6
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -1
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts +40 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js +28 -0
- package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts +49 -0
- package/dist/handlers/message-handlers/user-count-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/user-count-handler.js +31 -0
- package/dist/handlers/message-handlers/user-count-handler.js.map +1 -0
- package/dist/handlers/webhook-handler.d.ts +1 -1
- package/dist/handlers/webhook-handler.d.ts.map +1 -1
- package/dist/handlers/webhook-handler.js +14 -5
- package/dist/handlers/webhook-handler.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/managers/admin-manager.d.ts +116 -0
- package/dist/managers/admin-manager.d.ts.map +1 -0
- package/dist/managers/admin-manager.js +169 -0
- package/dist/managers/admin-manager.js.map +1 -0
- package/dist/managers/agent-registry.d.ts +52 -1
- package/dist/managers/agent-registry.d.ts.map +1 -1
- package/dist/managers/agent-registry.js +145 -6
- package/dist/managers/agent-registry.js.map +1 -1
- package/dist/managers/agent-room-manager.d.ts +216 -0
- package/dist/managers/agent-room-manager.d.ts.map +1 -0
- package/dist/managers/agent-room-manager.js +555 -0
- package/dist/managers/agent-room-manager.js.map +1 -0
- package/dist/managers/connection-manager.js +2 -0
- package/dist/managers/connection-manager.js.map +1 -1
- package/dist/managers/index.d.ts +4 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/index.js +7 -1
- package/dist/managers/index.js.map +1 -1
- package/dist/managers/message-router.d.ts +56 -5
- package/dist/managers/message-router.d.ts.map +1 -1
- package/dist/managers/message-router.js +155 -8
- package/dist/managers/message-router.js.map +1 -1
- package/dist/managers/room-management-manager.d.ts +213 -0
- package/dist/managers/room-management-manager.d.ts.map +1 -0
- package/dist/managers/room-management-manager.js +442 -0
- package/dist/managers/room-management-manager.js.map +1 -0
- package/dist/managers/room-manager.d.ts +11 -9
- package/dist/managers/room-manager.d.ts.map +1 -1
- package/dist/managers/room-manager.js +14 -10
- package/dist/managers/room-manager.js.map +1 -1
- package/dist/payments/index.d.ts +5 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +21 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/payments/payment-client.d.ts +74 -0
- package/dist/payments/payment-client.d.ts.map +1 -0
- package/dist/payments/payment-client.js +207 -0
- package/dist/payments/payment-client.js.map +1 -0
- package/dist/teneo-sdk.d.ts +467 -33
- package/dist/teneo-sdk.d.ts.map +1 -1
- package/dist/teneo-sdk.js +735 -26
- package/dist/teneo-sdk.js.map +1 -1
- package/dist/types/categories.d.ts +22 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +40 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/config.d.ts +134 -54
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +70 -9
- package/dist/types/config.js.map +1 -1
- package/dist/types/error-codes.d.ts +10 -0
- package/dist/types/error-codes.d.ts.map +1 -1
- package/dist/types/error-codes.js +12 -0
- package/dist/types/error-codes.js.map +1 -1
- package/dist/types/events.d.ts +176 -68
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js +19 -1
- package/dist/types/events.js.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +57 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/messages.d.ts +22225 -2592
- package/dist/types/messages.d.ts.map +1 -1
- package/dist/types/messages.js +537 -28
- package/dist/types/messages.js.map +1 -1
- package/dist/utils/bounded-queue.d.ts.map +1 -1
- package/dist/utils/bounded-queue.js +5 -2
- package/dist/utils/bounded-queue.js.map +1 -1
- package/dist/utils/circuit-breaker.js +11 -4
- package/dist/utils/circuit-breaker.js.map +1 -1
- package/dist/utils/deduplication-cache.js +3 -1
- package/dist/utils/deduplication-cache.js.map +1 -1
- package/dist/utils/event-waiter.d.ts +3 -3
- package/dist/utils/event-waiter.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pricing-resolver.d.ts +26 -0
- package/dist/utils/pricing-resolver.d.ts.map +1 -0
- package/dist/utils/pricing-resolver.js +85 -0
- package/dist/utils/pricing-resolver.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -1
- package/dist/utils/rate-limiter.js +6 -0
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/retry-policy.js +1 -0
- package/dist/utils/retry-policy.js.map +1 -1
- package/dist/utils/secure-private-key.js +3 -1
- package/dist/utils/secure-private-key.js.map +1 -1
- package/dist/utils/signature-verifier.d.ts.map +1 -1
- package/dist/utils/signature-verifier.js +3 -1
- package/dist/utils/signature-verifier.js.map +1 -1
- package/examples/.env.example +2 -2
- package/examples/agent-room-management-example.ts +335 -0
- package/examples/basic-usage.ts +3 -4
- package/examples/claude-agent-x-follower/.env.example +3 -3
- package/examples/claude-agent-x-follower/QUICKSTART.md +3 -3
- package/examples/claude-agent-x-follower/README.md +3 -3
- package/examples/claude-agent-x-follower/index.ts +120 -96
- package/examples/n8n-teneo/.env.example +3 -3
- package/examples/n8n-teneo/README.md +2 -2
- package/examples/n8n-teneo/index.ts +54 -44
- package/examples/nestjs-dashboard/.env.example +11 -0
- package/examples/nestjs-dashboard/README.md +297 -0
- package/examples/nestjs-dashboard/nest-cli.json +10 -0
- package/examples/nestjs-dashboard/package.json +44 -0
- package/examples/nestjs-dashboard/pnpm-lock.yaml +3079 -0
- package/examples/nestjs-dashboard/src/app.controller.ts +24 -0
- package/examples/nestjs-dashboard/src/app.module.ts +15 -0
- package/examples/nestjs-dashboard/src/main.ts +32 -0
- package/examples/nestjs-dashboard/src/public/dashboard.html +1144 -0
- package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +54 -0
- package/examples/nestjs-dashboard/src/teneo/events.controller.ts +65 -0
- package/examples/nestjs-dashboard/src/teneo/messages.controller.ts +47 -0
- package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +258 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.module.ts +13 -0
- package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +484 -0
- package/examples/nestjs-dashboard/tsconfig.json +22 -0
- package/examples/openai-teneo/.env.example +3 -3
- package/examples/openai-teneo/README.md +3 -3
- package/examples/openai-teneo/index.ts +82 -71
- package/examples/production-dashboard/.env.example +3 -3
- package/examples/production-dashboard/README.md +90 -13
- package/examples/production-dashboard/public/dashboard.html +1173 -601
- package/examples/production-dashboard/server.ts +349 -7
- package/examples/room-management-example.ts +282 -0
- package/examples/usage/.env.example +2 -2
- package/examples/usage/01-connect.ts +3 -4
- package/examples/usage/02-list-agents.ts +2 -3
- package/examples/usage/03-pick-agent.ts +2 -3
- package/examples/usage/04-find-by-capability.ts +2 -3
- package/examples/usage/05-webhook-example.ts +2 -3
- package/examples/usage/06-simple-api-server.ts +2 -3
- package/examples/usage/07-event-listener.ts +2 -3
- package/examples/usage/README.md +1 -1
- package/examples/webhook-integration.ts +1 -1
- package/examples/x-influencer-battle-server.ts +2 -2
- package/package.json +12 -1
- package/src/core/websocket-client.test.ts +8 -3
- package/src/core/websocket-client.ts +58 -4
- package/src/formatters/response-formatter.test.ts +2 -0
- package/src/formatters/response-formatter.ts +3 -3
- package/src/handlers/message-handlers/agent-details-response-handler.ts +42 -0
- package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +77 -0
- package/src/handlers/message-handlers/agent-status-update-handler.ts +52 -0
- package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +78 -5
- package/src/handlers/message-handlers/auth-success-handler.ts +63 -6
- package/src/handlers/message-handlers/base-handler.ts +20 -7
- package/src/handlers/message-handlers/index.ts +53 -0
- package/src/handlers/message-handlers/list-available-agents-handler.ts +41 -0
- package/src/handlers/message-handlers/list-room-agents-handler.ts +58 -0
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +4 -2
- package/src/handlers/message-handlers/rate-limit-notification-handler.ts +45 -0
- package/src/handlers/message-handlers/regular-message-handler.ts +3 -2
- package/src/handlers/message-handlers/room-operation-response-handler.ts +102 -0
- package/src/handlers/message-handlers/subscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/task-quote-handler.ts +31 -0
- package/src/handlers/message-handlers/types.ts +41 -7
- package/src/handlers/message-handlers/unsubscribe-response-handler.ts +12 -2
- package/src/handlers/message-handlers/user-authenticated-handler.ts +31 -0
- package/src/handlers/message-handlers/user-count-handler.ts +34 -0
- package/src/handlers/webhook-handler.test.ts +3 -2
- package/src/handlers/webhook-handler.ts +13 -7
- package/src/index.ts +21 -0
- package/src/managers/admin-manager.ts +249 -0
- package/src/managers/agent-registry.test.ts +2 -1
- package/src/managers/agent-registry.ts +170 -2
- package/src/managers/agent-room-manager.ts +665 -0
- package/src/managers/index.ts +15 -1
- package/src/managers/message-router.ts +215 -17
- package/src/managers/room-management-manager.ts +520 -0
- package/src/managers/room-manager.ts +15 -20
- package/src/payments/index.ts +22 -0
- package/src/payments/payment-client.ts +240 -0
- package/src/teneo-sdk.ts +806 -30
- package/src/types/categories.ts +45 -0
- package/src/types/config.ts +80 -7
- package/src/types/error-codes.ts +14 -0
- package/src/types/events.test.ts +1 -0
- package/src/types/events.ts +67 -0
- package/src/types/index.ts +111 -0
- package/src/types/messages.test.ts +2 -1
- package/src/types/messages.ts +677 -42
- package/src/utils/bounded-queue.test.ts +1 -1
- package/src/utils/bounded-queue.ts +2 -1
- package/src/utils/circuit-breaker.test.ts +1 -1
- package/src/utils/deduplication-cache.test.ts +1 -1
- package/src/utils/event-waiter.test.ts +1 -1
- package/src/utils/event-waiter.ts +3 -3
- package/src/utils/index.ts +7 -0
- package/src/utils/logger.ts +8 -8
- package/src/utils/pricing-resolver.ts +128 -0
- package/src/utils/rate-limiter.test.ts +1 -1
- package/src/utils/rate-limiter.ts +1 -0
- package/src/utils/signature-verifier.test.ts +2 -2
- package/src/utils/signature-verifier.ts +3 -2
- package/tests/.env.example +7 -0
- package/tests/direct-agent-test.ts +151 -0
- package/tests/integration/real-server.test.ts +2 -0
- package/tests/integration/room-management.test.ts +516 -0
- package/tests/integration/websocket.test.ts +5 -2
- package/tests/payment-flow-test.ts +147 -0
- package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +382 -0
- package/tests/unit/handlers/agent-status-update-handler.test.ts +403 -0
- package/tests/unit/handlers/auth-success-handler-rooms.test.ts +697 -0
- package/tests/unit/handlers/list-available-agents-handler.test.ts +248 -0
- package/tests/unit/handlers/list-room-agents-handler.test.ts +290 -0
- package/tests/unit/handlers/room-operation-response-handler.test.ts +500 -0
- package/tests/unit/managers/agent-room-manager.test.ts +527 -0
- package/tests/unit/managers/room-management-manager.test.ts +420 -0
- package/tsconfig.json +2 -2
- package/vitest.config.ts +1 -0
package/src/types/messages.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { z } from "zod";
|
|
7
|
+
import { AgentCategorySchema, MAX_CATEGORIES } from "./categories";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Coerces string booleans to actual booleans with strict validation.
|
|
@@ -46,6 +47,7 @@ const stringToBoolean = z
|
|
|
46
47
|
|
|
47
48
|
// Enum schemas
|
|
48
49
|
export const MessageTypeSchema = z.enum([
|
|
50
|
+
// Authentication
|
|
49
51
|
"request_challenge",
|
|
50
52
|
"challenge",
|
|
51
53
|
"check_cached_auth",
|
|
@@ -55,18 +57,73 @@ export const MessageTypeSchema = z.enum([
|
|
|
55
57
|
"auth_error",
|
|
56
58
|
"register",
|
|
57
59
|
"registration_success",
|
|
60
|
+
|
|
61
|
+
// Communication
|
|
58
62
|
"message",
|
|
59
63
|
"task",
|
|
60
64
|
"task_response",
|
|
61
65
|
"agent_selected",
|
|
66
|
+
|
|
67
|
+
// Quote-Approve Flow (v2.2.0)
|
|
68
|
+
"request_task",
|
|
69
|
+
"task_quote",
|
|
70
|
+
"confirm_task",
|
|
71
|
+
|
|
72
|
+
// System
|
|
62
73
|
"agents",
|
|
63
74
|
"error",
|
|
64
75
|
"ping",
|
|
65
76
|
"pong",
|
|
66
77
|
"capabilities",
|
|
78
|
+
|
|
79
|
+
// Room Subscription (Basic)
|
|
67
80
|
"subscribe",
|
|
68
81
|
"unsubscribe",
|
|
69
|
-
"list_rooms"
|
|
82
|
+
"list_rooms",
|
|
83
|
+
|
|
84
|
+
// === NEW IN v2.0.0 ===
|
|
85
|
+
|
|
86
|
+
// Room Management (6 types)
|
|
87
|
+
"create_room",
|
|
88
|
+
"update_room",
|
|
89
|
+
"delete_room",
|
|
90
|
+
"add_room_member",
|
|
91
|
+
"remove_room_member",
|
|
92
|
+
"list_room_members",
|
|
93
|
+
|
|
94
|
+
// Room Management Responses (3 types)
|
|
95
|
+
"room_operation_response",
|
|
96
|
+
"room_member_operation_response",
|
|
97
|
+
"room_members_response",
|
|
98
|
+
|
|
99
|
+
// Agent Room Management (5 types)
|
|
100
|
+
"add_agent_to_room",
|
|
101
|
+
"remove_agent_from_room",
|
|
102
|
+
"list_room_agents",
|
|
103
|
+
"list_available_agents",
|
|
104
|
+
"agent_status_update",
|
|
105
|
+
|
|
106
|
+
// Agent Room Management Responses (3 types)
|
|
107
|
+
"agent_room_operation_response",
|
|
108
|
+
"room_agents_response",
|
|
109
|
+
"available_agents_response",
|
|
110
|
+
|
|
111
|
+
// Room Ping System (2 types)
|
|
112
|
+
"room_ping",
|
|
113
|
+
"room_pong",
|
|
114
|
+
|
|
115
|
+
// Admin Messages (7 types)
|
|
116
|
+
"list_all_agents",
|
|
117
|
+
"all_agents_response",
|
|
118
|
+
"user_count",
|
|
119
|
+
"user_authenticated",
|
|
120
|
+
"rate_limit_notification",
|
|
121
|
+
"get_agent_details",
|
|
122
|
+
"agent_details_response",
|
|
123
|
+
|
|
124
|
+
// User Preferences (2 types)
|
|
125
|
+
"set_user_preferences",
|
|
126
|
+
"user_preferences_updated"
|
|
70
127
|
]);
|
|
71
128
|
|
|
72
129
|
export const ContentTypeSchema = z.enum([
|
|
@@ -90,26 +147,51 @@ export const AgentStatusSchema = z.enum(["online", "offline"]);
|
|
|
90
147
|
// Supporting schemas
|
|
91
148
|
export const CapabilitySchema = z.object({
|
|
92
149
|
name: z.string(),
|
|
93
|
-
description: z.string()
|
|
150
|
+
description: z.string().optional()
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
export const CommandPricingSchema = z.object({
|
|
154
|
+
priceType: z.string().optional(),
|
|
155
|
+
pricePerUnit: z.number().optional(),
|
|
156
|
+
taskUnit: z.string().optional(),
|
|
157
|
+
timeUnit: z.enum(["hour", "day"]).optional()
|
|
94
158
|
});
|
|
95
159
|
|
|
160
|
+
export type CommandPricing = z.infer<typeof CommandPricingSchema>;
|
|
161
|
+
|
|
96
162
|
export const CommandSchema = z.object({
|
|
97
163
|
trigger: z.string(),
|
|
98
164
|
argument: z.string().optional(),
|
|
99
|
-
description: z.string()
|
|
165
|
+
description: z.string().optional(),
|
|
166
|
+
pricing: CommandPricingSchema.optional()
|
|
100
167
|
});
|
|
101
168
|
|
|
102
169
|
export const RoomSchema = z.object({
|
|
103
170
|
id: z.string(),
|
|
104
|
-
name: z.string(),
|
|
171
|
+
name: z.string().optional(),
|
|
105
172
|
description: z.string().optional(),
|
|
106
|
-
is_public: stringToBoolean,
|
|
107
|
-
is_active: stringToBoolean,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
173
|
+
is_public: stringToBoolean.optional(),
|
|
174
|
+
is_active: stringToBoolean.optional(),
|
|
175
|
+
is_owner: stringToBoolean.optional(),
|
|
176
|
+
created_by: z.string().optional(),
|
|
177
|
+
created_at: z.string().optional(),
|
|
178
|
+
updated_at: z.string().optional()
|
|
111
179
|
});
|
|
112
180
|
|
|
181
|
+
// RoomInfo schema for v2.0.0 - used in auth responses and room management
|
|
182
|
+
export const RoomInfoSchema = z
|
|
183
|
+
.object({
|
|
184
|
+
id: z.string(),
|
|
185
|
+
name: z.string().optional(), // Optional for permissive parsing
|
|
186
|
+
description: z.string().optional().nullable(),
|
|
187
|
+
is_public: z.boolean().optional(), // Optional - defaults to false on backend
|
|
188
|
+
created_by: z.string().optional(), // Optional in case backend doesn't send it yet
|
|
189
|
+
created_at: z.string().optional(),
|
|
190
|
+
updated_at: z.string().optional(),
|
|
191
|
+
is_owner: z.boolean().optional() // Client-side enrichment, may not always be present
|
|
192
|
+
})
|
|
193
|
+
.passthrough(); // Allow extra fields backend might add
|
|
194
|
+
|
|
113
195
|
export const AgentSchema = z.object({
|
|
114
196
|
id: z.string(),
|
|
115
197
|
name: z.string(),
|
|
@@ -121,25 +203,28 @@ export const AgentSchema = z.object({
|
|
|
121
203
|
image: z.string().optional(),
|
|
122
204
|
agentType: AgentTypeSchema.optional(),
|
|
123
205
|
nlpFallback: stringToBoolean.optional(),
|
|
124
|
-
webhookUrl: z.string().url().optional()
|
|
206
|
+
webhookUrl: z.string().url().optional(),
|
|
207
|
+
categories: z.array(AgentCategorySchema).max(MAX_CATEGORIES).optional()
|
|
125
208
|
});
|
|
126
209
|
|
|
127
210
|
// Base message schema
|
|
128
|
-
export const BaseMessageSchema = z
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
211
|
+
export const BaseMessageSchema = z
|
|
212
|
+
.object({
|
|
213
|
+
type: MessageTypeSchema,
|
|
214
|
+
content: z.any().optional(),
|
|
215
|
+
content_type: ContentTypeSchema.optional(),
|
|
216
|
+
from: z.string().optional(),
|
|
217
|
+
to: z.string().optional(),
|
|
218
|
+
room: z.string().optional(),
|
|
219
|
+
timestamp: z.string().optional(),
|
|
220
|
+
data: z.record(z.any()).optional(),
|
|
221
|
+
signature: z.string().optional(),
|
|
222
|
+
publicKey: z.string().optional(),
|
|
223
|
+
reasoning: z.string().optional(),
|
|
224
|
+
task_id: z.string().optional(),
|
|
225
|
+
id: z.string().optional() // Added for message tracking
|
|
226
|
+
})
|
|
227
|
+
.passthrough(); // Allow message-specific fields to pass through
|
|
143
228
|
|
|
144
229
|
// Authentication message schemas
|
|
145
230
|
export const RequestChallengeMessageSchema = BaseMessageSchema.extend({
|
|
@@ -193,8 +278,10 @@ export const AuthMessageSchema = BaseMessageSchema.extend({
|
|
|
193
278
|
is_whitelisted: stringToBoolean.optional(),
|
|
194
279
|
is_admin_whitelisted: stringToBoolean.optional(),
|
|
195
280
|
rooms: z.array(RoomSchema).optional(),
|
|
281
|
+
private_rooms: z.array(RoomSchema).optional(),
|
|
196
282
|
private_room_id: z.string().optional(),
|
|
197
|
-
cached_auth: stringToBoolean.optional()
|
|
283
|
+
cached_auth: stringToBoolean.optional(),
|
|
284
|
+
max_private_rooms: z.number().optional()
|
|
198
285
|
})
|
|
199
286
|
.optional()
|
|
200
287
|
});
|
|
@@ -208,9 +295,10 @@ export const AuthSuccessMessageSchema = BaseMessageSchema.extend({
|
|
|
208
295
|
nft_verified: stringToBoolean.optional(),
|
|
209
296
|
is_whitelisted: stringToBoolean.optional(),
|
|
210
297
|
is_admin_whitelisted: stringToBoolean.optional(),
|
|
211
|
-
rooms: z.array(
|
|
212
|
-
private_room_id: z.string().optional(),
|
|
213
|
-
cached_auth: stringToBoolean.optional()
|
|
298
|
+
rooms: z.array(RoomInfoSchema).optional().nullable(), // v2.0.0: Uses RoomInfo with is_owner field
|
|
299
|
+
private_room_id: z.string().optional(), // DEPRECATED: Use rooms array instead
|
|
300
|
+
cached_auth: stringToBoolean.optional(), // Admin field, optional
|
|
301
|
+
max_private_rooms: z.number().optional() // NEW in v2.0.0: Max rooms user can create
|
|
214
302
|
})
|
|
215
303
|
});
|
|
216
304
|
|
|
@@ -296,6 +384,62 @@ export const AgentSelectedMessageSchema = BaseMessageSchema.extend({
|
|
|
296
384
|
})
|
|
297
385
|
});
|
|
298
386
|
|
|
387
|
+
// ============================================================================
|
|
388
|
+
// QUOTE-APPROVE FLOW SCHEMAS (v2.2.0)
|
|
389
|
+
// ============================================================================
|
|
390
|
+
|
|
391
|
+
// Pricing information schema (flexible to handle server variations)
|
|
392
|
+
export const PricingInfoSchema = z
|
|
393
|
+
.object({
|
|
394
|
+
pricePerUnit: z.number().optional(),
|
|
395
|
+
price_per_unit: z.number().optional(),
|
|
396
|
+
priceType: z.string().optional(),
|
|
397
|
+
price_type: z.string().optional(),
|
|
398
|
+
timeUnit: z.string().optional(),
|
|
399
|
+
time_unit: z.string().optional(),
|
|
400
|
+
currency: z.string().optional().default("USDC"),
|
|
401
|
+
network: z.string().optional()
|
|
402
|
+
})
|
|
403
|
+
.transform((data) => ({
|
|
404
|
+
// Normalize to camelCase
|
|
405
|
+
pricePerUnit: data.pricePerUnit ?? data.price_per_unit ?? 0,
|
|
406
|
+
priceType: data.priceType ?? data.price_type,
|
|
407
|
+
timeUnit: data.timeUnit ?? data.time_unit,
|
|
408
|
+
currency: data.currency,
|
|
409
|
+
network: data.network
|
|
410
|
+
}));
|
|
411
|
+
|
|
412
|
+
// Request task message (initiates quote-approve flow)
|
|
413
|
+
export const RequestTaskMessageSchema = BaseMessageSchema.extend({
|
|
414
|
+
type: z.literal("request_task"),
|
|
415
|
+
content: z.string(),
|
|
416
|
+
room: z.string()
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
// Task quote message (server response with pricing)
|
|
420
|
+
export const TaskQuoteMessageSchema = BaseMessageSchema.extend({
|
|
421
|
+
type: z.literal("task_quote"),
|
|
422
|
+
from: z.literal("coordinator"),
|
|
423
|
+
data: z.object({
|
|
424
|
+
task_id: z.string(),
|
|
425
|
+
agent_id: z.string(),
|
|
426
|
+
agent_name: z.string(),
|
|
427
|
+
agent_wallet: z.string(),
|
|
428
|
+
command: z.string(),
|
|
429
|
+
pricing: PricingInfoSchema,
|
|
430
|
+
expires_at: z.string()
|
|
431
|
+
})
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
// Confirm task message (with payment at top level - backend expects msg.payment)
|
|
435
|
+
export const ConfirmTaskMessageSchema = BaseMessageSchema.extend({
|
|
436
|
+
type: z.literal("confirm_task"),
|
|
437
|
+
data: z.object({
|
|
438
|
+
task_id: z.string()
|
|
439
|
+
}),
|
|
440
|
+
payment: z.string().optional() // x402 payment at top level (backend checks msg.Payment)
|
|
441
|
+
});
|
|
442
|
+
|
|
299
443
|
// System message schemas
|
|
300
444
|
export const AgentsListMessageSchema = BaseMessageSchema.extend({
|
|
301
445
|
type: z.literal("agents"),
|
|
@@ -361,16 +505,6 @@ export const UnsubscribeResponseSchema = BaseMessageSchema.extend({
|
|
|
361
505
|
})
|
|
362
506
|
});
|
|
363
507
|
|
|
364
|
-
export const RoomInfoSchema = z.object({
|
|
365
|
-
id: z.string(),
|
|
366
|
-
name: z.string(),
|
|
367
|
-
description: z.string().optional().nullable(),
|
|
368
|
-
is_public: z.boolean(),
|
|
369
|
-
created_at: z.string(),
|
|
370
|
-
updated_at: z.string(),
|
|
371
|
-
is_owner: z.boolean()
|
|
372
|
-
});
|
|
373
|
-
|
|
374
508
|
export const ListRoomsResponseSchema = BaseMessageSchema.extend({
|
|
375
509
|
type: z.literal("list_rooms"),
|
|
376
510
|
data: z.object({
|
|
@@ -378,10 +512,406 @@ export const ListRoomsResponseSchema = BaseMessageSchema.extend({
|
|
|
378
512
|
})
|
|
379
513
|
});
|
|
380
514
|
|
|
515
|
+
// ============================================================================
|
|
516
|
+
// ROOM MANAGEMENT SCHEMAS (v2.0.0)
|
|
517
|
+
// Note: Permissive schemas to handle backend changes gracefully
|
|
518
|
+
// ============================================================================
|
|
519
|
+
|
|
520
|
+
// Room CRUD Operations
|
|
521
|
+
export const CreateRoomMessageSchema = z
|
|
522
|
+
.object({
|
|
523
|
+
type: z.literal("create_room"),
|
|
524
|
+
name: z.string(),
|
|
525
|
+
description: z.string().optional(),
|
|
526
|
+
is_public: z.boolean().optional()
|
|
527
|
+
})
|
|
528
|
+
.passthrough(); // Allow extra fields
|
|
529
|
+
|
|
530
|
+
export const UpdateRoomMessageSchema = z
|
|
531
|
+
.object({
|
|
532
|
+
type: z.literal("update_room"),
|
|
533
|
+
room_id: z.string(),
|
|
534
|
+
name: z.string().optional(),
|
|
535
|
+
description: z.string().optional()
|
|
536
|
+
})
|
|
537
|
+
.passthrough();
|
|
538
|
+
|
|
539
|
+
export const DeleteRoomMessageSchema = z
|
|
540
|
+
.object({
|
|
541
|
+
type: z.literal("delete_room"),
|
|
542
|
+
room_id: z.string()
|
|
543
|
+
})
|
|
544
|
+
.passthrough();
|
|
545
|
+
|
|
546
|
+
export const RoomOperationResponseSchema = z
|
|
547
|
+
.object({
|
|
548
|
+
type: z.literal("room_operation_response"),
|
|
549
|
+
data: z
|
|
550
|
+
.object({
|
|
551
|
+
success: z.boolean().optional(), // Optional - consuming code should handle missing as false
|
|
552
|
+
message: z.string().optional(),
|
|
553
|
+
room_id: z.string().optional(),
|
|
554
|
+
room: RoomInfoSchema.optional(),
|
|
555
|
+
max_rooms: z.number().optional(),
|
|
556
|
+
current_count: z.number().optional()
|
|
557
|
+
})
|
|
558
|
+
.passthrough() // Allow extra fields backend might add
|
|
559
|
+
})
|
|
560
|
+
.passthrough();
|
|
561
|
+
|
|
562
|
+
// Room Member Management
|
|
563
|
+
export const RoomMemberInfoSchema = z
|
|
564
|
+
.object({
|
|
565
|
+
user_id: z.string(),
|
|
566
|
+
added_by: z.string().optional(), // May not always be present
|
|
567
|
+
added_at: z.string().optional(),
|
|
568
|
+
role: z.string().optional()
|
|
569
|
+
})
|
|
570
|
+
.passthrough();
|
|
571
|
+
|
|
572
|
+
export const AddRoomMemberMessageSchema = z
|
|
573
|
+
.object({
|
|
574
|
+
type: z.literal("add_room_member"),
|
|
575
|
+
room_id: z.string(),
|
|
576
|
+
user_id: z.string()
|
|
577
|
+
})
|
|
578
|
+
.passthrough();
|
|
579
|
+
|
|
580
|
+
export const RemoveRoomMemberMessageSchema = z
|
|
581
|
+
.object({
|
|
582
|
+
type: z.literal("remove_room_member"),
|
|
583
|
+
room_id: z.string(),
|
|
584
|
+
user_id: z.string()
|
|
585
|
+
})
|
|
586
|
+
.passthrough();
|
|
587
|
+
|
|
588
|
+
export const ListRoomMembersMessageSchema = z
|
|
589
|
+
.object({
|
|
590
|
+
type: z.literal("list_room_members"),
|
|
591
|
+
room_id: z.string()
|
|
592
|
+
})
|
|
593
|
+
.passthrough();
|
|
594
|
+
|
|
595
|
+
export const RoomMembersResponseSchema = z
|
|
596
|
+
.object({
|
|
597
|
+
type: z.literal("room_members_response"),
|
|
598
|
+
data: z
|
|
599
|
+
.object({
|
|
600
|
+
room_id: z.string(),
|
|
601
|
+
members: z.array(RoomMemberInfoSchema).optional() // Optional - consuming code should handle missing as []
|
|
602
|
+
})
|
|
603
|
+
.passthrough()
|
|
604
|
+
})
|
|
605
|
+
.passthrough();
|
|
606
|
+
|
|
607
|
+
export const RoomMemberOperationResponseSchema = z
|
|
608
|
+
.object({
|
|
609
|
+
type: z.literal("room_member_operation_response"),
|
|
610
|
+
data: z
|
|
611
|
+
.object({
|
|
612
|
+
success: z.boolean().optional(),
|
|
613
|
+
message: z.string().optional(),
|
|
614
|
+
room_id: z.string().optional(),
|
|
615
|
+
user_id: z.string().optional(),
|
|
616
|
+
member_count: z.number().optional()
|
|
617
|
+
})
|
|
618
|
+
.passthrough()
|
|
619
|
+
})
|
|
620
|
+
.passthrough();
|
|
621
|
+
|
|
622
|
+
// ============================================================================
|
|
623
|
+
// AGENT ROOM MANAGEMENT SCHEMAS (v2.0.0)
|
|
624
|
+
// Note: Permissive schemas to handle backend changes gracefully
|
|
625
|
+
// ============================================================================
|
|
626
|
+
|
|
627
|
+
export const AgentRoomInfoSchema = z
|
|
628
|
+
.object({
|
|
629
|
+
agent_id: z.string(),
|
|
630
|
+
agent_name: z.string().optional(),
|
|
631
|
+
description: z.string().optional(),
|
|
632
|
+
capabilities: z.array(CapabilitySchema).optional(),
|
|
633
|
+
commands: z.array(CommandSchema).optional(),
|
|
634
|
+
image: z.string().optional(),
|
|
635
|
+
status: z.string().optional(),
|
|
636
|
+
added_by: z.string().optional(),
|
|
637
|
+
added_at: z.string().optional(),
|
|
638
|
+
categories: z.array(AgentCategorySchema).max(MAX_CATEGORIES).optional()
|
|
639
|
+
})
|
|
640
|
+
.passthrough();
|
|
641
|
+
|
|
642
|
+
export const AddAgentToRoomMessageSchema = z
|
|
643
|
+
.object({
|
|
644
|
+
type: z.literal("add_agent_to_room"),
|
|
645
|
+
room_id: z.string(),
|
|
646
|
+
agent_id: z.string()
|
|
647
|
+
})
|
|
648
|
+
.passthrough();
|
|
649
|
+
|
|
650
|
+
export const RemoveAgentFromRoomMessageSchema = z
|
|
651
|
+
.object({
|
|
652
|
+
type: z.literal("remove_agent_from_room"),
|
|
653
|
+
room_id: z.string(),
|
|
654
|
+
agent_id: z.string()
|
|
655
|
+
})
|
|
656
|
+
.passthrough();
|
|
657
|
+
|
|
658
|
+
export const ListRoomAgentsMessageSchema = z
|
|
659
|
+
.object({
|
|
660
|
+
type: z.literal("list_room_agents"),
|
|
661
|
+
room_id: z.string()
|
|
662
|
+
})
|
|
663
|
+
.passthrough();
|
|
664
|
+
|
|
665
|
+
export const ListAvailableAgentsMessageSchema = z
|
|
666
|
+
.object({
|
|
667
|
+
type: z.literal("list_available_agents"),
|
|
668
|
+
room_id: z.string()
|
|
669
|
+
})
|
|
670
|
+
.passthrough();
|
|
671
|
+
|
|
672
|
+
export const RoomAgentsResponseSchema = z
|
|
673
|
+
.object({
|
|
674
|
+
type: z.literal("room_agents_response"),
|
|
675
|
+
data: z
|
|
676
|
+
.object({
|
|
677
|
+
room_id: z.string(),
|
|
678
|
+
agents: z.array(AgentRoomInfoSchema).optional() // Optional - consuming code should handle missing as []
|
|
679
|
+
})
|
|
680
|
+
.passthrough()
|
|
681
|
+
})
|
|
682
|
+
.passthrough();
|
|
683
|
+
|
|
684
|
+
export const AvailableAgentsResponseSchema = z
|
|
685
|
+
.object({
|
|
686
|
+
type: z.literal("available_agents_response"),
|
|
687
|
+
data: z
|
|
688
|
+
.object({
|
|
689
|
+
agents: z.array(AgentRoomInfoSchema).optional()
|
|
690
|
+
})
|
|
691
|
+
.passthrough()
|
|
692
|
+
})
|
|
693
|
+
.passthrough();
|
|
694
|
+
|
|
695
|
+
export const AgentRoomOperationResponseSchema = z
|
|
696
|
+
.object({
|
|
697
|
+
type: z.literal("agent_room_operation_response"),
|
|
698
|
+
data: z
|
|
699
|
+
.object({
|
|
700
|
+
success: z.boolean().optional(),
|
|
701
|
+
message: z.string().optional(),
|
|
702
|
+
room_id: z.string().optional(),
|
|
703
|
+
agent_id: z.string().optional(),
|
|
704
|
+
agent_count: z.number().optional()
|
|
705
|
+
})
|
|
706
|
+
.passthrough()
|
|
707
|
+
})
|
|
708
|
+
.passthrough();
|
|
709
|
+
|
|
710
|
+
export const AgentStatusUpdateMessageSchema = z
|
|
711
|
+
.object({
|
|
712
|
+
type: z.literal("agent_status_update"),
|
|
713
|
+
data: z
|
|
714
|
+
.object({
|
|
715
|
+
room_id: z.string(),
|
|
716
|
+
agent_id: z.string(),
|
|
717
|
+
status: z.string(),
|
|
718
|
+
agent: AgentRoomInfoSchema.optional()
|
|
719
|
+
})
|
|
720
|
+
.passthrough()
|
|
721
|
+
})
|
|
722
|
+
.passthrough();
|
|
723
|
+
|
|
724
|
+
// Room Ping System
|
|
725
|
+
export const RoomPingMessageSchema = z
|
|
726
|
+
.object({
|
|
727
|
+
type: z.literal("room_ping"),
|
|
728
|
+
room_id: z.string()
|
|
729
|
+
})
|
|
730
|
+
.passthrough();
|
|
731
|
+
|
|
732
|
+
export const RoomPongResponseSchema = z
|
|
733
|
+
.object({
|
|
734
|
+
type: z.literal("room_pong"),
|
|
735
|
+
data: z
|
|
736
|
+
.object({
|
|
737
|
+
room_id: z.string(),
|
|
738
|
+
live_count: z.number().optional(), // Optional - consuming code should handle missing as 0
|
|
739
|
+
timestamp: z.string()
|
|
740
|
+
})
|
|
741
|
+
.passthrough()
|
|
742
|
+
})
|
|
743
|
+
.passthrough();
|
|
744
|
+
|
|
745
|
+
// Admin agent info (admin only)
|
|
746
|
+
export const AdminAgentInfoSchema = z
|
|
747
|
+
.object({
|
|
748
|
+
agent_id: z.string(),
|
|
749
|
+
agent_name: z.string(),
|
|
750
|
+
creator: z.string(),
|
|
751
|
+
creator_name: z.string().optional().nullable(),
|
|
752
|
+
description: z.string().optional().nullable(),
|
|
753
|
+
image_url: z.string().optional().nullable(),
|
|
754
|
+
is_online: z.boolean().optional(),
|
|
755
|
+
is_active: z.boolean().optional(),
|
|
756
|
+
is_verified: z.boolean().optional(),
|
|
757
|
+
is_public: z.boolean().optional(),
|
|
758
|
+
is_banned: z.boolean().optional(),
|
|
759
|
+
created_at: z.string().optional().nullable()
|
|
760
|
+
})
|
|
761
|
+
.passthrough();
|
|
762
|
+
|
|
763
|
+
export type AdminAgentInfo = z.infer<typeof AdminAgentInfoSchema>;
|
|
764
|
+
|
|
765
|
+
// List all agents request (client → server, admin only)
|
|
766
|
+
export const ListAllAgentsMessageSchema = z
|
|
767
|
+
.object({
|
|
768
|
+
type: z.literal("list_all_agents"),
|
|
769
|
+
request_id: z.string().optional(),
|
|
770
|
+
filter: z.string().optional(),
|
|
771
|
+
offset: z.number().optional(),
|
|
772
|
+
limit: z.number().optional()
|
|
773
|
+
})
|
|
774
|
+
.passthrough();
|
|
775
|
+
|
|
776
|
+
export type ListAllAgentsMessage = z.infer<typeof ListAllAgentsMessageSchema>;
|
|
777
|
+
|
|
778
|
+
// All agents response (server → client, admin only)
|
|
779
|
+
export const AllAgentsResponseSchema = z
|
|
780
|
+
.object({
|
|
781
|
+
type: z.literal("all_agents_response"),
|
|
782
|
+
request_id: z.string().optional(),
|
|
783
|
+
data: z
|
|
784
|
+
.object({
|
|
785
|
+
agents: z.array(AdminAgentInfoSchema),
|
|
786
|
+
total: z.number(),
|
|
787
|
+
offset: z.number(),
|
|
788
|
+
limit: z.number(),
|
|
789
|
+
has_more: z.boolean(),
|
|
790
|
+
filter: z.string().optional()
|
|
791
|
+
})
|
|
792
|
+
.passthrough()
|
|
793
|
+
})
|
|
794
|
+
.passthrough();
|
|
795
|
+
|
|
796
|
+
export type AllAgentsResponse = z.infer<typeof AllAgentsResponseSchema>;
|
|
797
|
+
|
|
798
|
+
// User count data schema
|
|
799
|
+
export const UserCountDataSchema = z.object({
|
|
800
|
+
count: z.number(),
|
|
801
|
+
timestamp: z.string()
|
|
802
|
+
});
|
|
803
|
+
|
|
804
|
+
export type UserCountData = z.infer<typeof UserCountDataSchema>;
|
|
805
|
+
|
|
806
|
+
// User count message (server → client, admin only)
|
|
807
|
+
export const UserCountMessageSchema = z
|
|
808
|
+
.object({
|
|
809
|
+
type: z.literal("user_count"),
|
|
810
|
+
data: UserCountDataSchema.passthrough()
|
|
811
|
+
})
|
|
812
|
+
.passthrough();
|
|
813
|
+
|
|
814
|
+
export type UserCountMessage = z.infer<typeof UserCountMessageSchema>;
|
|
815
|
+
|
|
816
|
+
// User authenticated message (server → client)
|
|
817
|
+
export const UserAuthenticatedMessageSchema = z
|
|
818
|
+
.object({
|
|
819
|
+
type: z.literal("user_authenticated"),
|
|
820
|
+
data: z
|
|
821
|
+
.object({
|
|
822
|
+
wallet: z.string()
|
|
823
|
+
})
|
|
824
|
+
.passthrough()
|
|
825
|
+
})
|
|
826
|
+
.passthrough();
|
|
827
|
+
|
|
828
|
+
export type UserAuthenticatedMessage = z.infer<typeof UserAuthenticatedMessageSchema>;
|
|
829
|
+
|
|
830
|
+
// Rate limit notification (server → client)
|
|
831
|
+
export const RateLimitNotificationMessageSchema = z
|
|
832
|
+
.object({
|
|
833
|
+
type: z.literal("rate_limit_notification"),
|
|
834
|
+
data: z
|
|
835
|
+
.object({
|
|
836
|
+
title: z.string(),
|
|
837
|
+
message: z.string(),
|
|
838
|
+
cta_text: z.string().optional(),
|
|
839
|
+
cta_link: z.string().optional(),
|
|
840
|
+
message_type: z.string(),
|
|
841
|
+
limit_type: z.string(),
|
|
842
|
+
reset_at: z.string().optional()
|
|
843
|
+
})
|
|
844
|
+
.passthrough()
|
|
845
|
+
})
|
|
846
|
+
.passthrough();
|
|
847
|
+
|
|
848
|
+
export type RateLimitNotificationMessage = z.infer<typeof RateLimitNotificationMessageSchema>;
|
|
849
|
+
|
|
850
|
+
// Agent details request (client → server)
|
|
851
|
+
export const GetAgentDetailsMessageSchema = z
|
|
852
|
+
.object({
|
|
853
|
+
type: z.literal("get_agent_details"),
|
|
854
|
+
agent_id: z.string(),
|
|
855
|
+
request_id: z.string().optional()
|
|
856
|
+
})
|
|
857
|
+
.passthrough();
|
|
858
|
+
|
|
859
|
+
export type GetAgentDetailsMessage = z.infer<typeof GetAgentDetailsMessageSchema>;
|
|
860
|
+
|
|
861
|
+
// Agent details response (server → client)
|
|
862
|
+
export const AgentDetailsResponseMessageSchema = z
|
|
863
|
+
.object({
|
|
864
|
+
type: z.literal("agent_details_response"),
|
|
865
|
+
request_id: z.string().optional(),
|
|
866
|
+
data: z
|
|
867
|
+
.object({
|
|
868
|
+
agent: AgentRoomInfoSchema
|
|
869
|
+
})
|
|
870
|
+
.passthrough()
|
|
871
|
+
.optional(),
|
|
872
|
+
error: z.string().optional()
|
|
873
|
+
})
|
|
874
|
+
.passthrough();
|
|
875
|
+
|
|
876
|
+
export type AgentDetailsResponseMessage = z.infer<typeof AgentDetailsResponseMessageSchema>;
|
|
877
|
+
|
|
878
|
+
// User Preferences (set_user_preferences)
|
|
879
|
+
export const SetUserPreferencesDataSchema = z.object({
|
|
880
|
+
max_price_per_request: z.number().min(0).optional().nullable()
|
|
881
|
+
});
|
|
882
|
+
|
|
883
|
+
export const SetUserPreferencesMessageSchema = z
|
|
884
|
+
.object({
|
|
885
|
+
type: z.literal("set_user_preferences"),
|
|
886
|
+
data: SetUserPreferencesDataSchema
|
|
887
|
+
})
|
|
888
|
+
.passthrough();
|
|
889
|
+
|
|
890
|
+
export type SetUserPreferencesData = z.infer<typeof SetUserPreferencesDataSchema>;
|
|
891
|
+
export type SetUserPreferencesMessage = z.infer<typeof SetUserPreferencesMessageSchema>;
|
|
892
|
+
|
|
893
|
+
// User Preferences Response (user_preferences_updated)
|
|
894
|
+
export const UserPreferencesUpdatedDataSchema = z.object({
|
|
895
|
+
success: z.boolean(),
|
|
896
|
+
message: z.string(),
|
|
897
|
+
max_price_per_request: z.number().optional().nullable()
|
|
898
|
+
});
|
|
899
|
+
|
|
900
|
+
export const UserPreferencesUpdatedMessageSchema = z
|
|
901
|
+
.object({
|
|
902
|
+
type: z.literal("user_preferences_updated"),
|
|
903
|
+
data: UserPreferencesUpdatedDataSchema
|
|
904
|
+
})
|
|
905
|
+
.passthrough();
|
|
906
|
+
|
|
907
|
+
export type UserPreferencesUpdatedData = z.infer<typeof UserPreferencesUpdatedDataSchema>;
|
|
908
|
+
export type UserPreferencesUpdatedMessage = z.infer<typeof UserPreferencesUpdatedMessageSchema>;
|
|
909
|
+
|
|
381
910
|
// Union of all INCOMING message schemas for validation
|
|
382
911
|
// Note: Outgoing message schemas (Subscribe, Unsubscribe, ListRooms) are excluded
|
|
383
912
|
// as they share the same type values with their response counterparts
|
|
384
913
|
export const AnyMessageSchema = z.discriminatedUnion("type", [
|
|
914
|
+
// Authentication & Registration
|
|
385
915
|
RequestChallengeMessageSchema,
|
|
386
916
|
ChallengeMessageSchema,
|
|
387
917
|
CheckCachedAuthMessageSchema,
|
|
@@ -391,18 +921,50 @@ export const AnyMessageSchema = z.discriminatedUnion("type", [
|
|
|
391
921
|
AuthErrorMessageSchema,
|
|
392
922
|
RegisterMessageSchema,
|
|
393
923
|
RegistrationSuccessMessageSchema,
|
|
924
|
+
|
|
925
|
+
// Communication
|
|
394
926
|
UserMessageSchema,
|
|
395
927
|
TaskMessageSchema,
|
|
396
928
|
TaskResponseMessageSchema,
|
|
397
929
|
AgentSelectedMessageSchema,
|
|
398
930
|
AgentsListMessageSchema,
|
|
931
|
+
|
|
932
|
+
// Quote-Approve Flow (v2.2.0)
|
|
933
|
+
TaskQuoteMessageSchema,
|
|
934
|
+
|
|
935
|
+
// System
|
|
399
936
|
ErrorMessageSchema,
|
|
400
937
|
PingMessageSchema,
|
|
401
938
|
PongMessageSchema,
|
|
402
|
-
|
|
939
|
+
|
|
940
|
+
// Room Subscription (Basic)
|
|
403
941
|
SubscribeResponseSchema,
|
|
404
942
|
UnsubscribeResponseSchema,
|
|
405
|
-
ListRoomsResponseSchema
|
|
943
|
+
ListRoomsResponseSchema,
|
|
944
|
+
|
|
945
|
+
// Room Management Responses (v2.0.0)
|
|
946
|
+
RoomOperationResponseSchema,
|
|
947
|
+
RoomMemberOperationResponseSchema,
|
|
948
|
+
RoomMembersResponseSchema,
|
|
949
|
+
|
|
950
|
+
// Agent Room Management Responses (v2.0.0)
|
|
951
|
+
AgentRoomOperationResponseSchema,
|
|
952
|
+
RoomAgentsResponseSchema,
|
|
953
|
+
AvailableAgentsResponseSchema,
|
|
954
|
+
AgentStatusUpdateMessageSchema,
|
|
955
|
+
|
|
956
|
+
// Room Ping System (v2.0.0)
|
|
957
|
+
RoomPongResponseSchema,
|
|
958
|
+
|
|
959
|
+
// Admin Messages
|
|
960
|
+
AllAgentsResponseSchema,
|
|
961
|
+
UserCountMessageSchema,
|
|
962
|
+
UserAuthenticatedMessageSchema,
|
|
963
|
+
RateLimitNotificationMessageSchema,
|
|
964
|
+
AgentDetailsResponseMessageSchema,
|
|
965
|
+
|
|
966
|
+
// User Preferences
|
|
967
|
+
UserPreferencesUpdatedMessageSchema
|
|
406
968
|
]);
|
|
407
969
|
|
|
408
970
|
// Type inference from schemas
|
|
@@ -432,6 +994,13 @@ export type TaskMessage = z.infer<typeof TaskMessageSchema>;
|
|
|
432
994
|
export type TaskResponseMessage = z.infer<typeof TaskResponseMessageSchema>;
|
|
433
995
|
export type AgentSelectedMessage = z.infer<typeof AgentSelectedMessageSchema>;
|
|
434
996
|
export type AgentsListMessage = z.infer<typeof AgentsListMessageSchema>;
|
|
997
|
+
|
|
998
|
+
// Quote-Approve Flow Types (v2.2.0)
|
|
999
|
+
export type PricingInfo = z.infer<typeof PricingInfoSchema>;
|
|
1000
|
+
export type RequestTaskMessage = z.infer<typeof RequestTaskMessageSchema>;
|
|
1001
|
+
export type TaskQuoteMessage = z.infer<typeof TaskQuoteMessageSchema>;
|
|
1002
|
+
export type ConfirmTaskMessage = z.infer<typeof ConfirmTaskMessageSchema>;
|
|
1003
|
+
|
|
435
1004
|
export type ErrorMessage = z.infer<typeof ErrorMessageSchema>;
|
|
436
1005
|
export type PingMessage = z.infer<typeof PingMessageSchema>;
|
|
437
1006
|
export type PongMessage = z.infer<typeof PongMessageSchema>;
|
|
@@ -443,6 +1012,33 @@ export type UnsubscribeResponse = z.infer<typeof UnsubscribeResponseSchema>;
|
|
|
443
1012
|
export type RoomInfo = z.infer<typeof RoomInfoSchema>;
|
|
444
1013
|
export type ListRoomsResponse = z.infer<typeof ListRoomsResponseSchema>;
|
|
445
1014
|
|
|
1015
|
+
// Room Management Types (v2.0.0)
|
|
1016
|
+
export type CreateRoomMessage = z.infer<typeof CreateRoomMessageSchema>;
|
|
1017
|
+
export type UpdateRoomMessage = z.infer<typeof UpdateRoomMessageSchema>;
|
|
1018
|
+
export type DeleteRoomMessage = z.infer<typeof DeleteRoomMessageSchema>;
|
|
1019
|
+
export type RoomOperationResponse = z.infer<typeof RoomOperationResponseSchema>;
|
|
1020
|
+
export type RoomMemberInfo = z.infer<typeof RoomMemberInfoSchema>;
|
|
1021
|
+
export type AddRoomMemberMessage = z.infer<typeof AddRoomMemberMessageSchema>;
|
|
1022
|
+
export type RemoveRoomMemberMessage = z.infer<typeof RemoveRoomMemberMessageSchema>;
|
|
1023
|
+
export type ListRoomMembersMessage = z.infer<typeof ListRoomMembersMessageSchema>;
|
|
1024
|
+
export type RoomMembersResponse = z.infer<typeof RoomMembersResponseSchema>;
|
|
1025
|
+
export type RoomMemberOperationResponse = z.infer<typeof RoomMemberOperationResponseSchema>;
|
|
1026
|
+
|
|
1027
|
+
// Agent Room Management Types (v2.0.0)
|
|
1028
|
+
export type AgentRoomInfo = z.infer<typeof AgentRoomInfoSchema>;
|
|
1029
|
+
export type AddAgentToRoomMessage = z.infer<typeof AddAgentToRoomMessageSchema>;
|
|
1030
|
+
export type RemoveAgentFromRoomMessage = z.infer<typeof RemoveAgentFromRoomMessageSchema>;
|
|
1031
|
+
export type ListRoomAgentsMessage = z.infer<typeof ListRoomAgentsMessageSchema>;
|
|
1032
|
+
export type ListAvailableAgentsMessage = z.infer<typeof ListAvailableAgentsMessageSchema>;
|
|
1033
|
+
export type RoomAgentsResponse = z.infer<typeof RoomAgentsResponseSchema>;
|
|
1034
|
+
export type AvailableAgentsResponse = z.infer<typeof AvailableAgentsResponseSchema>;
|
|
1035
|
+
export type AgentRoomOperationResponse = z.infer<typeof AgentRoomOperationResponseSchema>;
|
|
1036
|
+
export type AgentStatusUpdateMessage = z.infer<typeof AgentStatusUpdateMessageSchema>;
|
|
1037
|
+
|
|
1038
|
+
// Room Ping Types (v2.0.0)
|
|
1039
|
+
export type RoomPingMessage = z.infer<typeof RoomPingMessageSchema>;
|
|
1040
|
+
export type RoomPongResponse = z.infer<typeof RoomPongResponseSchema>;
|
|
1041
|
+
|
|
446
1042
|
export type AnyMessage = z.infer<typeof AnyMessageSchema>;
|
|
447
1043
|
|
|
448
1044
|
// Type guards using Zod parse
|
|
@@ -551,6 +1147,36 @@ export function createListRooms(): ListRoomsMessage {
|
|
|
551
1147
|
});
|
|
552
1148
|
}
|
|
553
1149
|
|
|
1150
|
+
// Quote-Approve Flow factory functions (v2.2.0)
|
|
1151
|
+
export function createRequestTask(content: string, room: string): RequestTaskMessage {
|
|
1152
|
+
return RequestTaskMessageSchema.parse({
|
|
1153
|
+
type: "request_task",
|
|
1154
|
+
content,
|
|
1155
|
+
room
|
|
1156
|
+
});
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
export function createConfirmTask(taskId: string, x402Payment?: string): ConfirmTaskMessage {
|
|
1160
|
+
return ConfirmTaskMessageSchema.parse({
|
|
1161
|
+
type: "confirm_task",
|
|
1162
|
+
data: {
|
|
1163
|
+
task_id: taskId
|
|
1164
|
+
},
|
|
1165
|
+
...(x402Payment && { payment: x402Payment }) // payment at top level for backend
|
|
1166
|
+
});
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
export function createSetUserPreferences(
|
|
1170
|
+
maxPricePerRequest?: number | null
|
|
1171
|
+
): SetUserPreferencesMessage {
|
|
1172
|
+
return SetUserPreferencesMessageSchema.parse({
|
|
1173
|
+
type: "set_user_preferences",
|
|
1174
|
+
data: {
|
|
1175
|
+
max_price_per_request: maxPricePerRequest
|
|
1176
|
+
}
|
|
1177
|
+
});
|
|
1178
|
+
}
|
|
1179
|
+
|
|
554
1180
|
// Validation helper
|
|
555
1181
|
export function validateMessage(message: unknown): AnyMessage {
|
|
556
1182
|
return AnyMessageSchema.parse(message);
|
|
@@ -559,12 +1185,21 @@ export function validateMessage(message: unknown): AnyMessage {
|
|
|
559
1185
|
// Safe parse helper
|
|
560
1186
|
export function safeParseMessage(message: unknown): {
|
|
561
1187
|
success: boolean;
|
|
562
|
-
data?: AnyMessage;
|
|
1188
|
+
data?: AnyMessage | BaseMessage;
|
|
563
1189
|
error?: z.ZodError;
|
|
564
1190
|
} {
|
|
1191
|
+
// Try specific message schemas first
|
|
565
1192
|
const result = AnyMessageSchema.safeParse(message);
|
|
566
1193
|
if (result.success) {
|
|
567
1194
|
return { success: true, data: result.data };
|
|
568
1195
|
}
|
|
1196
|
+
|
|
1197
|
+
// Fall back to basic BaseMessage schema for unknown message types
|
|
1198
|
+
// This allows the SDK to be more resilient to backend changes
|
|
1199
|
+
const fallbackResult = BaseMessageSchema.safeParse(message);
|
|
1200
|
+
if (fallbackResult.success) {
|
|
1201
|
+
return { success: true, data: fallbackResult.data as BaseMessage };
|
|
1202
|
+
}
|
|
1203
|
+
|
|
569
1204
|
return { success: false, error: result.error };
|
|
570
1205
|
}
|