@teneo-protocol/sdk 1.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/.dockerignore +14 -0
- package/.env.test.example +14 -0
- package/.eslintrc.json +26 -0
- package/.github/workflows/claude-code-review.yml +78 -0
- package/.github/workflows/claude-reviewer.yml +64 -0
- package/.github/workflows/publish-npm.yml +38 -0
- package/.github/workflows/push-to-main.yml +23 -0
- package/.node-version +1 -0
- package/.prettierrc +11 -0
- package/Dockerfile +25 -0
- package/LICENCE +661 -0
- package/README.md +709 -0
- package/dist/constants.d.ts +42 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +45 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/websocket-client.d.ts +261 -0
- package/dist/core/websocket-client.d.ts.map +1 -0
- package/dist/core/websocket-client.js +875 -0
- package/dist/core/websocket-client.js.map +1 -0
- package/dist/formatters/response-formatter.d.ts +354 -0
- package/dist/formatters/response-formatter.d.ts.map +1 -0
- package/dist/formatters/response-formatter.js +575 -0
- package/dist/formatters/response-formatter.js.map +1 -0
- package/dist/handlers/message-handler-registry.d.ts +155 -0
- package/dist/handlers/message-handler-registry.d.ts.map +1 -0
- package/dist/handlers/message-handler-registry.js +216 -0
- package/dist/handlers/message-handler-registry.js.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts +112 -0
- package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agent-selected-handler.js +40 -0
- package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -0
- package/dist/handlers/message-handlers/agents-list-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/agents-list-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/agents-list-handler.js +25 -0
- package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.d.ts +71 -0
- package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-error-handler.js +30 -0
- package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-message-handler.d.ts +18 -0
- package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-message-handler.js +60 -0
- package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-required-handler.d.ts +76 -0
- package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-required-handler.js +23 -0
- package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -0
- package/dist/handlers/message-handlers/auth-success-handler.d.ts +18 -0
- package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/auth-success-handler.js +51 -0
- package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -0
- package/dist/handlers/message-handlers/base-handler.d.ts +55 -0
- package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/base-handler.js +83 -0
- package/dist/handlers/message-handlers/base-handler.js.map +1 -0
- package/dist/handlers/message-handlers/challenge-handler.d.ts +73 -0
- package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/challenge-handler.js +47 -0
- package/dist/handlers/message-handlers/challenge-handler.js.map +1 -0
- package/dist/handlers/message-handlers/error-message-handler.d.ts +76 -0
- package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/error-message-handler.js +29 -0
- package/dist/handlers/message-handlers/error-message-handler.js.map +1 -0
- package/dist/handlers/message-handlers/index.d.ts +28 -0
- package/dist/handlers/message-handlers/index.d.ts.map +1 -0
- package/dist/handlers/message-handlers/index.js +100 -0
- package/dist/handlers/message-handlers/index.js.map +1 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +122 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.js +30 -0
- package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts +104 -0
- package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/ping-pong-handler.js +36 -0
- package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts +56 -0
- package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/regular-message-handler.js +59 -0
- package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +81 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.js +48 -0
- package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.d.ts +14 -0
- package/dist/handlers/message-handlers/task-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/task-response-handler.js +44 -0
- package/dist/handlers/message-handlers/task-response-handler.js.map +1 -0
- package/dist/handlers/message-handlers/types.d.ts +51 -0
- package/dist/handlers/message-handlers/types.d.ts.map +1 -0
- package/dist/handlers/message-handlers/types.js +7 -0
- package/dist/handlers/message-handlers/types.js.map +1 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +81 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js +48 -0
- package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -0
- package/dist/handlers/webhook-handler.d.ts +202 -0
- package/dist/handlers/webhook-handler.d.ts.map +1 -0
- package/dist/handlers/webhook-handler.js +511 -0
- package/dist/handlers/webhook-handler.js.map +1 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +217 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/agent-registry.d.ts +173 -0
- package/dist/managers/agent-registry.d.ts.map +1 -0
- package/dist/managers/agent-registry.js +310 -0
- package/dist/managers/agent-registry.js.map +1 -0
- package/dist/managers/connection-manager.d.ts +134 -0
- package/dist/managers/connection-manager.d.ts.map +1 -0
- package/dist/managers/connection-manager.js +176 -0
- package/dist/managers/connection-manager.js.map +1 -0
- package/dist/managers/index.d.ts +9 -0
- package/dist/managers/index.d.ts.map +1 -0
- package/dist/managers/index.js +16 -0
- package/dist/managers/index.js.map +1 -0
- package/dist/managers/message-router.d.ts +112 -0
- package/dist/managers/message-router.d.ts.map +1 -0
- package/dist/managers/message-router.js +260 -0
- package/dist/managers/message-router.js.map +1 -0
- package/dist/managers/room-manager.d.ts +165 -0
- package/dist/managers/room-manager.d.ts.map +1 -0
- package/dist/managers/room-manager.js +227 -0
- package/dist/managers/room-manager.js.map +1 -0
- package/dist/teneo-sdk.d.ts +703 -0
- package/dist/teneo-sdk.d.ts.map +1 -0
- package/dist/teneo-sdk.js +907 -0
- package/dist/teneo-sdk.js.map +1 -0
- package/dist/types/config.d.ts +1047 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +720 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/error-codes.d.ts +29 -0
- package/dist/types/error-codes.d.ts.map +1 -0
- package/dist/types/error-codes.js +41 -0
- package/dist/types/error-codes.js.map +1 -0
- package/dist/types/events.d.ts +616 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +261 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/health.d.ts +40 -0
- package/dist/types/health.d.ts.map +1 -0
- package/dist/types/health.js +6 -0
- package/dist/types/health.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +123 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/messages.d.ts +3734 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +482 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/validation.d.ts +81 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +115 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/utils/bounded-queue.d.ts +127 -0
- package/dist/utils/bounded-queue.d.ts.map +1 -0
- package/dist/utils/bounded-queue.js +181 -0
- package/dist/utils/bounded-queue.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +141 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +215 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/deduplication-cache.d.ts +110 -0
- package/dist/utils/deduplication-cache.d.ts.map +1 -0
- package/dist/utils/deduplication-cache.js +177 -0
- package/dist/utils/deduplication-cache.js.map +1 -0
- package/dist/utils/event-waiter.d.ts +101 -0
- package/dist/utils/event-waiter.d.ts.map +1 -0
- package/dist/utils/event-waiter.js +118 -0
- package/dist/utils/event-waiter.js.map +1 -0
- package/dist/utils/index.d.ts +51 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +72 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +22 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +122 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +190 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/retry-policy.d.ts +191 -0
- package/dist/utils/retry-policy.d.ts.map +1 -0
- package/dist/utils/retry-policy.js +225 -0
- package/dist/utils/retry-policy.js.map +1 -0
- package/dist/utils/secure-private-key.d.ts +113 -0
- package/dist/utils/secure-private-key.d.ts.map +1 -0
- package/dist/utils/secure-private-key.js +188 -0
- package/dist/utils/secure-private-key.js.map +1 -0
- package/dist/utils/signature-verifier.d.ts +143 -0
- package/dist/utils/signature-verifier.d.ts.map +1 -0
- package/dist/utils/signature-verifier.js +238 -0
- package/dist/utils/signature-verifier.js.map +1 -0
- package/dist/utils/ssrf-validator.d.ts +36 -0
- package/dist/utils/ssrf-validator.d.ts.map +1 -0
- package/dist/utils/ssrf-validator.js +195 -0
- package/dist/utils/ssrf-validator.js.map +1 -0
- package/examples/.env.example +17 -0
- package/examples/basic-usage.ts +211 -0
- package/examples/production-dashboard/.env.example +153 -0
- package/examples/production-dashboard/package.json +39 -0
- package/examples/production-dashboard/public/dashboard.html +642 -0
- package/examples/production-dashboard/server.ts +753 -0
- package/examples/webhook-integration.ts +239 -0
- package/examples/x-influencer-battle-redesign.html +1065 -0
- package/examples/x-influencer-battle-server.ts +217 -0
- package/examples/x-influencer-battle.html +787 -0
- package/package.json +65 -0
- package/src/constants.ts +43 -0
- package/src/core/websocket-client.test.ts +512 -0
- package/src/core/websocket-client.ts +1056 -0
- package/src/formatters/response-formatter.test.ts +571 -0
- package/src/formatters/response-formatter.ts +677 -0
- package/src/handlers/message-handler-registry.ts +239 -0
- package/src/handlers/message-handlers/agent-selected-handler.ts +40 -0
- package/src/handlers/message-handlers/agents-list-handler.ts +26 -0
- package/src/handlers/message-handlers/auth-error-handler.ts +31 -0
- package/src/handlers/message-handlers/auth-message-handler.ts +66 -0
- package/src/handlers/message-handlers/auth-required-handler.ts +23 -0
- package/src/handlers/message-handlers/auth-success-handler.ts +57 -0
- package/src/handlers/message-handlers/base-handler.ts +101 -0
- package/src/handlers/message-handlers/challenge-handler.ts +57 -0
- package/src/handlers/message-handlers/error-message-handler.ts +27 -0
- package/src/handlers/message-handlers/index.ts +77 -0
- package/src/handlers/message-handlers/list-rooms-response-handler.ts +28 -0
- package/src/handlers/message-handlers/ping-pong-handler.ts +30 -0
- package/src/handlers/message-handlers/regular-message-handler.ts +65 -0
- package/src/handlers/message-handlers/subscribe-response-handler.ts +47 -0
- package/src/handlers/message-handlers/task-response-handler.ts +45 -0
- package/src/handlers/message-handlers/types.ts +77 -0
- package/src/handlers/message-handlers/unsubscribe-response-handler.ts +47 -0
- package/src/handlers/webhook-handler.test.ts +789 -0
- package/src/handlers/webhook-handler.ts +576 -0
- package/src/index.ts +269 -0
- package/src/managers/agent-registry.test.ts +466 -0
- package/src/managers/agent-registry.ts +347 -0
- package/src/managers/connection-manager.ts +195 -0
- package/src/managers/index.ts +9 -0
- package/src/managers/message-router.ts +349 -0
- package/src/managers/room-manager.ts +248 -0
- package/src/teneo-sdk.ts +1022 -0
- package/src/types/config.test.ts +325 -0
- package/src/types/config.ts +799 -0
- package/src/types/error-codes.ts +44 -0
- package/src/types/events.test.ts +302 -0
- package/src/types/events.ts +382 -0
- package/src/types/health.ts +46 -0
- package/src/types/index.ts +199 -0
- package/src/types/messages.test.ts +660 -0
- package/src/types/messages.ts +570 -0
- package/src/types/validation.ts +123 -0
- package/src/utils/bounded-queue.test.ts +356 -0
- package/src/utils/bounded-queue.ts +205 -0
- package/src/utils/circuit-breaker.test.ts +394 -0
- package/src/utils/circuit-breaker.ts +262 -0
- package/src/utils/deduplication-cache.test.ts +380 -0
- package/src/utils/deduplication-cache.ts +198 -0
- package/src/utils/event-waiter.test.ts +381 -0
- package/src/utils/event-waiter.ts +172 -0
- package/src/utils/index.ts +74 -0
- package/src/utils/logger.ts +87 -0
- package/src/utils/rate-limiter.test.ts +341 -0
- package/src/utils/rate-limiter.ts +211 -0
- package/src/utils/retry-policy.test.ts +558 -0
- package/src/utils/retry-policy.ts +272 -0
- package/src/utils/secure-private-key.test.ts +356 -0
- package/src/utils/secure-private-key.ts +205 -0
- package/src/utils/signature-verifier.test.ts +464 -0
- package/src/utils/signature-verifier.ts +298 -0
- package/src/utils/ssrf-validator.test.ts +372 -0
- package/src/utils/ssrf-validator.ts +224 -0
- package/tests/integration/real-server.test.ts +740 -0
- package/tests/integration/websocket.test.ts +381 -0
- package/tests/integration-setup.ts +16 -0
- package/tests/setup.ts +34 -0
- package/tsconfig.json +32 -0
- package/vitest.config.ts +42 -0
- package/vitest.integration.config.ts +23 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event schemas for Teneo Protocol SDK using Zod
|
|
3
|
+
* Defines all events emitted by the SDK with runtime validation
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import {
|
|
8
|
+
BaseMessageSchema,
|
|
9
|
+
AgentSchema,
|
|
10
|
+
RoomInfoSchema,
|
|
11
|
+
TaskResponseMessageSchema,
|
|
12
|
+
CapabilitySchema
|
|
13
|
+
} from "./messages";
|
|
14
|
+
import { ConnectionStateSchema, AuthenticationStateSchema } from "./config";
|
|
15
|
+
import { ErrorCode } from "./error-codes";
|
|
16
|
+
|
|
17
|
+
// Agent selected data schema
|
|
18
|
+
export const AgentSelectedDataSchema = z.object({
|
|
19
|
+
agentId: z.string(),
|
|
20
|
+
agentName: z.string(),
|
|
21
|
+
reasoning: z.string(),
|
|
22
|
+
userRequest: z.string(),
|
|
23
|
+
command: z.string().optional(),
|
|
24
|
+
commandReasoning: z.string().optional(),
|
|
25
|
+
capabilities: z.array(CapabilitySchema).optional()
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Agent response schema
|
|
29
|
+
export const AgentResponseSchema = z.object({
|
|
30
|
+
taskId: z.string(),
|
|
31
|
+
agentId: z.string(),
|
|
32
|
+
agentName: z.string().optional(),
|
|
33
|
+
content: z.string(),
|
|
34
|
+
contentType: z.string().optional(),
|
|
35
|
+
success: z.boolean(),
|
|
36
|
+
error: z.string().optional(),
|
|
37
|
+
timestamp: z.date(),
|
|
38
|
+
raw: TaskResponseMessageSchema.optional(),
|
|
39
|
+
humanized: z.string().optional()
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// SDK Error schema
|
|
43
|
+
export const SDKErrorSchema = z.object({
|
|
44
|
+
message: z.string(),
|
|
45
|
+
code: z.string(),
|
|
46
|
+
details: z.any().optional(),
|
|
47
|
+
recoverable: z.boolean(),
|
|
48
|
+
name: z.string()
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Specific error type schemas
|
|
52
|
+
export const ConnectionErrorSchema = SDKErrorSchema.extend({
|
|
53
|
+
name: z.literal("ConnectionError")
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
export const AuthenticationErrorSchema = SDKErrorSchema.extend({
|
|
57
|
+
name: z.literal("AuthenticationError"),
|
|
58
|
+
recoverable: z.literal(false)
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export const MessageErrorSchema = SDKErrorSchema.extend({
|
|
62
|
+
name: z.literal("MessageError")
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
export const WebhookErrorSchema = SDKErrorSchema.extend({
|
|
66
|
+
name: z.literal("WebhookError")
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
export const ValidationErrorSchema = SDKErrorSchema.extend({
|
|
70
|
+
name: z.literal("ValidationError"),
|
|
71
|
+
recoverable: z.literal(false)
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
export const TimeoutErrorSchema = SDKErrorSchema.extend({
|
|
75
|
+
name: z.literal("TimeoutError")
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export const RateLimitErrorSchema = SDKErrorSchema.extend({
|
|
79
|
+
name: z.literal("RateLimitError"),
|
|
80
|
+
details: z
|
|
81
|
+
.object({
|
|
82
|
+
retryAfter: z.number().optional()
|
|
83
|
+
})
|
|
84
|
+
.optional()
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
export const SignatureVerificationErrorSchema = SDKErrorSchema.extend({
|
|
88
|
+
name: z.literal("SignatureVerificationError"),
|
|
89
|
+
recoverable: z.literal(false),
|
|
90
|
+
details: z
|
|
91
|
+
.object({
|
|
92
|
+
messageType: z.string().optional(),
|
|
93
|
+
recoveredAddress: z.string().optional(),
|
|
94
|
+
expectedAddress: z.string().optional(),
|
|
95
|
+
reason: z.string().optional()
|
|
96
|
+
})
|
|
97
|
+
.optional()
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
export const ConfigurationErrorSchema = SDKErrorSchema.extend({
|
|
101
|
+
name: z.literal("ConfigurationError"),
|
|
102
|
+
recoverable: z.literal(false)
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// Event metadata schema
|
|
106
|
+
export const EventMetadataSchema = z.object({
|
|
107
|
+
event: z.string(),
|
|
108
|
+
timestamp: z.date(),
|
|
109
|
+
data: z.any().optional(),
|
|
110
|
+
source: z.string().optional(),
|
|
111
|
+
correlation_id: z.string().optional()
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// Type inference
|
|
115
|
+
export type AgentSelectedData = z.infer<typeof AgentSelectedDataSchema>;
|
|
116
|
+
export type AgentResponse = z.infer<typeof AgentResponseSchema>;
|
|
117
|
+
export type EventMetadata = z.infer<typeof EventMetadataSchema>;
|
|
118
|
+
|
|
119
|
+
// Error classes that extend Error and implement Zod validation
|
|
120
|
+
export class SDKError extends Error {
|
|
121
|
+
public code: string;
|
|
122
|
+
public details?: any;
|
|
123
|
+
public recoverable: boolean;
|
|
124
|
+
|
|
125
|
+
constructor(message: string, code: ErrorCode, details?: any, recoverable: boolean = false) {
|
|
126
|
+
super(message);
|
|
127
|
+
this.name = "SDKError";
|
|
128
|
+
this.code = code;
|
|
129
|
+
this.details = details;
|
|
130
|
+
this.recoverable = recoverable;
|
|
131
|
+
|
|
132
|
+
// Validate the error structure
|
|
133
|
+
SDKErrorSchema.parse({
|
|
134
|
+
message: this.message,
|
|
135
|
+
code: this.code,
|
|
136
|
+
details: this.details,
|
|
137
|
+
recoverable: this.recoverable,
|
|
138
|
+
name: this.name
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
toJSON() {
|
|
143
|
+
return {
|
|
144
|
+
name: this.name,
|
|
145
|
+
message: this.message,
|
|
146
|
+
code: this.code,
|
|
147
|
+
recoverable: this.recoverable,
|
|
148
|
+
details: this.details
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export class ConnectionError extends SDKError {
|
|
154
|
+
constructor(message: string, details?: any) {
|
|
155
|
+
super(message, ErrorCode.CONNECTION_ERROR, details, true);
|
|
156
|
+
this.name = "ConnectionError";
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export class AuthenticationError extends SDKError {
|
|
161
|
+
constructor(message: string, details?: any) {
|
|
162
|
+
super(message, ErrorCode.AUTH_ERROR, details, false);
|
|
163
|
+
this.name = "AuthenticationError";
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export class MessageError extends SDKError {
|
|
168
|
+
constructor(message: string, details?: any) {
|
|
169
|
+
super(message, ErrorCode.MESSAGE_ERROR, details, false);
|
|
170
|
+
this.name = "MessageError";
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export class WebhookError extends SDKError {
|
|
175
|
+
constructor(message: string, details?: any) {
|
|
176
|
+
super(message, ErrorCode.WEBHOOK_ERROR, details, true);
|
|
177
|
+
this.name = "WebhookError";
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export class ValidationError extends SDKError {
|
|
182
|
+
constructor(message: string, details?: any) {
|
|
183
|
+
super(message, ErrorCode.VALIDATION_ERROR, details, false);
|
|
184
|
+
this.name = "ValidationError";
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export class TimeoutError extends SDKError {
|
|
189
|
+
constructor(message: string, details?: any) {
|
|
190
|
+
super(message, ErrorCode.TIMEOUT_ERROR, details, true);
|
|
191
|
+
this.name = "TimeoutError";
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export class RateLimitError extends SDKError {
|
|
196
|
+
constructor(message: string, retryAfter?: number) {
|
|
197
|
+
super(message, ErrorCode.RATE_LIMIT, { retryAfter }, true);
|
|
198
|
+
this.name = "RateLimitError";
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Error thrown when message signature verification fails.
|
|
204
|
+
* Non-recoverable error that occurs when:
|
|
205
|
+
* - A signature is required but missing
|
|
206
|
+
* - A signature is invalid or doesn't match the message content
|
|
207
|
+
* - The signing address is not in the trusted whitelist
|
|
208
|
+
*
|
|
209
|
+
* @example
|
|
210
|
+
* ```typescript
|
|
211
|
+
* sdk.on('message:error', (error) => {
|
|
212
|
+
* if (error instanceof SignatureVerificationError) {
|
|
213
|
+
* console.log('Signature verification failed:', error.details);
|
|
214
|
+
* // error.details.messageType - Type of message that failed
|
|
215
|
+
* // error.details.recoveredAddress - Address recovered from signature
|
|
216
|
+
* // error.details.reason - Specific reason for failure
|
|
217
|
+
* }
|
|
218
|
+
* });
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
export class SignatureVerificationError extends SDKError {
|
|
222
|
+
constructor(
|
|
223
|
+
message: string,
|
|
224
|
+
details?: {
|
|
225
|
+
/** Type of message that failed verification */
|
|
226
|
+
messageType?: string;
|
|
227
|
+
/** Address recovered from the signature */
|
|
228
|
+
recoveredAddress?: string;
|
|
229
|
+
/** Expected address for verification */
|
|
230
|
+
expectedAddress?: string;
|
|
231
|
+
/** Specific reason why verification failed */
|
|
232
|
+
reason?: string;
|
|
233
|
+
}
|
|
234
|
+
) {
|
|
235
|
+
super(message, ErrorCode.SIGNATURE_VERIFICATION_ERROR, details, false);
|
|
236
|
+
this.name = "SignatureVerificationError";
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Error thrown when SDK configuration is invalid.
|
|
242
|
+
* Non-recoverable error that occurs when:
|
|
243
|
+
* - Required configuration fields are missing
|
|
244
|
+
* - Configuration values fail validation
|
|
245
|
+
* - Configuration format is incorrect
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```typescript
|
|
249
|
+
* try {
|
|
250
|
+
* const sdk = new TeneoSDK({ wsUrl: 'invalid-url' });
|
|
251
|
+
* } catch (error) {
|
|
252
|
+
* if (error instanceof ConfigurationError) {
|
|
253
|
+
* console.log('Configuration error:', error.message);
|
|
254
|
+
* }
|
|
255
|
+
* }
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
export class ConfigurationError extends SDKError {
|
|
259
|
+
constructor(message: string, details?: any) {
|
|
260
|
+
super(message, ErrorCode.CONFIG_ERROR, details, false);
|
|
261
|
+
this.name = "ConfigurationError";
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// SDK Events interface with proper typing
|
|
266
|
+
export interface SDKEvents {
|
|
267
|
+
// Connection events
|
|
268
|
+
"connection:open": () => void;
|
|
269
|
+
"connection:close": (code: number, reason: string) => void;
|
|
270
|
+
"connection:error": (error: Error) => void;
|
|
271
|
+
"connection:reconnecting": (attempt: number) => void;
|
|
272
|
+
"connection:reconnected": () => void;
|
|
273
|
+
"connection:state": (state: z.infer<typeof ConnectionStateSchema>) => void;
|
|
274
|
+
|
|
275
|
+
// Authentication events
|
|
276
|
+
"auth:challenge": (challenge: string) => void;
|
|
277
|
+
"auth:required": () => void;
|
|
278
|
+
"auth:success": (state: z.infer<typeof AuthenticationStateSchema>) => void;
|
|
279
|
+
"auth:error": (error: string) => void;
|
|
280
|
+
"auth:state": (state: z.infer<typeof AuthenticationStateSchema>) => void;
|
|
281
|
+
|
|
282
|
+
// Signature verification events
|
|
283
|
+
"signature:verified": (messageType: string, address: string) => void;
|
|
284
|
+
"signature:failed": (messageType: string, reason: string, address?: string) => void;
|
|
285
|
+
"signature:missing": (messageType: string, required: boolean) => void;
|
|
286
|
+
|
|
287
|
+
// Message events
|
|
288
|
+
"message:sent": (message: z.infer<typeof BaseMessageSchema>) => void;
|
|
289
|
+
"message:received": (message: z.infer<typeof BaseMessageSchema>) => void;
|
|
290
|
+
"message:duplicate": (message: z.infer<typeof BaseMessageSchema>) => void;
|
|
291
|
+
"message:error": (error: Error, message?: z.infer<typeof BaseMessageSchema>) => void;
|
|
292
|
+
|
|
293
|
+
// Agent events
|
|
294
|
+
"agent:selected": (data: AgentSelectedData) => void;
|
|
295
|
+
"agent:task": (taskId: string, content: string) => void;
|
|
296
|
+
"agent:response": (response: AgentResponse) => void;
|
|
297
|
+
"agent:list": (agents: z.infer<typeof AgentSchema>[]) => void;
|
|
298
|
+
"agent:status": (agentId: string, status: "online" | "offline") => void;
|
|
299
|
+
|
|
300
|
+
// Room events
|
|
301
|
+
"room:subscribed": (data: { roomId: string; subscriptions: string[] }) => void;
|
|
302
|
+
"room:unsubscribed": (data: { roomId: string; subscriptions: string[] }) => void;
|
|
303
|
+
"room:message": (roomId: string, message: z.infer<typeof BaseMessageSchema>) => void;
|
|
304
|
+
"room:list": (rooms: z.infer<typeof RoomInfoSchema>[]) => void;
|
|
305
|
+
|
|
306
|
+
// Coordinator events
|
|
307
|
+
"coordinator:processing": (userRequest: string) => void;
|
|
308
|
+
"coordinator:selected": (agentId: string, reasoning: string) => void;
|
|
309
|
+
"coordinator:error": (error: string) => void;
|
|
310
|
+
|
|
311
|
+
// Webhook events
|
|
312
|
+
"webhook:sent": (payload: any, url: string) => void;
|
|
313
|
+
"webhook:success": (response: any, url: string) => void;
|
|
314
|
+
"webhook:error": (error: Error, url: string) => void;
|
|
315
|
+
"webhook:retry": (attempt: number, url: string) => void;
|
|
316
|
+
|
|
317
|
+
// Error events
|
|
318
|
+
error: (error: SDKError) => void;
|
|
319
|
+
warning: (warning: string) => void;
|
|
320
|
+
|
|
321
|
+
// Lifecycle events
|
|
322
|
+
ready: () => void;
|
|
323
|
+
disconnect: () => void;
|
|
324
|
+
destroy: () => void;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Event handler type helpers
|
|
328
|
+
export type EventHandler<T extends keyof SDKEvents> = SDKEvents[T];
|
|
329
|
+
|
|
330
|
+
export type EventMap = {
|
|
331
|
+
[K in keyof SDKEvents]: Parameters<SDKEvents[K]>;
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
// Event emitter interface
|
|
335
|
+
export interface IEventEmitter {
|
|
336
|
+
on<T extends keyof SDKEvents>(event: T, handler: SDKEvents[T]): void;
|
|
337
|
+
once<T extends keyof SDKEvents>(event: T, handler: SDKEvents[T]): void;
|
|
338
|
+
off<T extends keyof SDKEvents>(event: T, handler: SDKEvents[T]): void;
|
|
339
|
+
emit<T extends keyof SDKEvents>(event: T, ...args: Parameters<SDKEvents[T]>): void;
|
|
340
|
+
removeAllListeners(event?: keyof SDKEvents): void;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Helper to validate event data
|
|
344
|
+
export function validateEventData<T>(schema: z.ZodSchema<T>, data: unknown): T {
|
|
345
|
+
return schema.parse(data);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// Safe parse event data
|
|
349
|
+
export function safeValidateEventData<T>(
|
|
350
|
+
schema: z.ZodSchema<T>,
|
|
351
|
+
data: unknown
|
|
352
|
+
): { success: boolean; data?: T; error?: z.ZodError } {
|
|
353
|
+
const result = schema.safeParse(data);
|
|
354
|
+
if (result.success) {
|
|
355
|
+
return { success: true, data: result.data };
|
|
356
|
+
}
|
|
357
|
+
return { success: false, error: result.error };
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Check if an error is a recoverable SDKError
|
|
362
|
+
* @param error - The error to check
|
|
363
|
+
* @returns true if the error is a recoverable SDKError, false otherwise
|
|
364
|
+
*
|
|
365
|
+
* @example
|
|
366
|
+
* ```typescript
|
|
367
|
+
* try {
|
|
368
|
+
* await sdk.sendMessage("Hello");
|
|
369
|
+
* } catch (error) {
|
|
370
|
+
* if (isRecoverableError(error)) {
|
|
371
|
+
* // Retry the operation
|
|
372
|
+
* console.log('Recoverable error, retrying...');
|
|
373
|
+
* } else {
|
|
374
|
+
* // Fatal error, don't retry
|
|
375
|
+
* console.error('Fatal error:', error);
|
|
376
|
+
* }
|
|
377
|
+
* }
|
|
378
|
+
* ```
|
|
379
|
+
*/
|
|
380
|
+
export function isRecoverableError(error: unknown): boolean {
|
|
381
|
+
return error instanceof SDKError && error.recoverable;
|
|
382
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health status types for monitoring SDK state
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export interface HealthStatus {
|
|
6
|
+
/** Overall health status: healthy, degraded, or unhealthy */
|
|
7
|
+
status: "healthy" | "degraded" | "unhealthy";
|
|
8
|
+
|
|
9
|
+
/** Timestamp of health check */
|
|
10
|
+
timestamp: string;
|
|
11
|
+
|
|
12
|
+
/** WebSocket connection health */
|
|
13
|
+
connection: {
|
|
14
|
+
status: "connected" | "disconnected" | "reconnecting";
|
|
15
|
+
authenticated: boolean;
|
|
16
|
+
reconnectAttempts: number;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** Webhook delivery health */
|
|
20
|
+
webhook: {
|
|
21
|
+
configured: boolean;
|
|
22
|
+
status: "healthy" | "degraded" | "unhealthy";
|
|
23
|
+
pending: number;
|
|
24
|
+
failed: number;
|
|
25
|
+
circuitState: string;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/** Rate limiter status (if configured) */
|
|
29
|
+
rateLimit?: {
|
|
30
|
+
availableTokens: number;
|
|
31
|
+
tokensPerSecond: number;
|
|
32
|
+
maxBurst: number;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/** Agent registry health */
|
|
36
|
+
agents: {
|
|
37
|
+
count: number;
|
|
38
|
+
lastUpdate?: Date;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/** Room management health */
|
|
42
|
+
rooms: {
|
|
43
|
+
count: number;
|
|
44
|
+
subscribedRooms: string[];
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main type exports for Teneo Protocol SDK
|
|
3
|
+
* Exports both Zod schemas and inferred TypeScript types
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Message schemas and types
|
|
7
|
+
export {
|
|
8
|
+
// Enum schemas
|
|
9
|
+
MessageTypeSchema,
|
|
10
|
+
ContentTypeSchema,
|
|
11
|
+
ClientTypeSchema,
|
|
12
|
+
AgentTypeSchema,
|
|
13
|
+
AgentStatusSchema,
|
|
14
|
+
|
|
15
|
+
// Supporting schemas
|
|
16
|
+
CapabilitySchema,
|
|
17
|
+
CommandSchema,
|
|
18
|
+
RoomSchema,
|
|
19
|
+
AgentSchema,
|
|
20
|
+
|
|
21
|
+
// Base message schema
|
|
22
|
+
BaseMessageSchema,
|
|
23
|
+
|
|
24
|
+
// Authentication message schemas
|
|
25
|
+
RequestChallengeMessageSchema,
|
|
26
|
+
ChallengeMessageSchema,
|
|
27
|
+
CheckCachedAuthMessageSchema,
|
|
28
|
+
AuthRequiredMessageSchema,
|
|
29
|
+
AuthMessageSchema,
|
|
30
|
+
AuthSuccessMessageSchema,
|
|
31
|
+
AuthErrorMessageSchema,
|
|
32
|
+
|
|
33
|
+
// Registration message schemas
|
|
34
|
+
RegisterMessageSchema,
|
|
35
|
+
RegistrationSuccessMessageSchema,
|
|
36
|
+
|
|
37
|
+
// Communication message schemas
|
|
38
|
+
UserMessageSchema,
|
|
39
|
+
TaskMessageSchema,
|
|
40
|
+
TaskResponseMessageSchema,
|
|
41
|
+
AgentSelectedMessageSchema,
|
|
42
|
+
|
|
43
|
+
// System message schemas
|
|
44
|
+
AgentsListMessageSchema,
|
|
45
|
+
ErrorMessageSchema,
|
|
46
|
+
PingMessageSchema,
|
|
47
|
+
PongMessageSchema,
|
|
48
|
+
|
|
49
|
+
// Room message schemas
|
|
50
|
+
SubscribeMessageSchema,
|
|
51
|
+
UnsubscribeMessageSchema,
|
|
52
|
+
ListRoomsMessageSchema,
|
|
53
|
+
SubscribeResponseSchema,
|
|
54
|
+
UnsubscribeResponseSchema,
|
|
55
|
+
RoomInfoSchema,
|
|
56
|
+
ListRoomsResponseSchema,
|
|
57
|
+
|
|
58
|
+
// Union schema
|
|
59
|
+
AnyMessageSchema,
|
|
60
|
+
|
|
61
|
+
// TypeScript types
|
|
62
|
+
type MessageType,
|
|
63
|
+
type ContentType,
|
|
64
|
+
type ClientType,
|
|
65
|
+
type AgentType,
|
|
66
|
+
type AgentStatus,
|
|
67
|
+
type Capability,
|
|
68
|
+
type Command,
|
|
69
|
+
type Room,
|
|
70
|
+
type Agent,
|
|
71
|
+
type BaseMessage,
|
|
72
|
+
type RequestChallengeMessage,
|
|
73
|
+
type ChallengeMessage,
|
|
74
|
+
type CheckCachedAuthMessage,
|
|
75
|
+
type AuthRequiredMessage,
|
|
76
|
+
type AuthMessage,
|
|
77
|
+
type AuthSuccessMessage,
|
|
78
|
+
type AuthErrorMessage,
|
|
79
|
+
type RegisterMessage,
|
|
80
|
+
type RegistrationSuccessMessage,
|
|
81
|
+
type UserMessage,
|
|
82
|
+
type TaskMessage,
|
|
83
|
+
type TaskResponseMessage,
|
|
84
|
+
type AgentSelectedMessage,
|
|
85
|
+
type AgentsListMessage,
|
|
86
|
+
type ErrorMessage,
|
|
87
|
+
type PingMessage,
|
|
88
|
+
type PongMessage,
|
|
89
|
+
type SubscribeMessage,
|
|
90
|
+
type UnsubscribeMessage,
|
|
91
|
+
type ListRoomsMessage,
|
|
92
|
+
type SubscribeResponse,
|
|
93
|
+
type UnsubscribeResponse,
|
|
94
|
+
type RoomInfo,
|
|
95
|
+
type ListRoomsResponse,
|
|
96
|
+
type AnyMessage,
|
|
97
|
+
|
|
98
|
+
// Type guards
|
|
99
|
+
isAuthSuccess,
|
|
100
|
+
isAuthError,
|
|
101
|
+
isAuth,
|
|
102
|
+
isChallenge,
|
|
103
|
+
isAgentSelected,
|
|
104
|
+
isTaskResponse,
|
|
105
|
+
isError,
|
|
106
|
+
isAgentsList,
|
|
107
|
+
|
|
108
|
+
// Factory functions
|
|
109
|
+
createRequestChallenge,
|
|
110
|
+
createCheckCachedAuth,
|
|
111
|
+
createAuth,
|
|
112
|
+
createUserMessage,
|
|
113
|
+
createPing,
|
|
114
|
+
createSubscribe,
|
|
115
|
+
createUnsubscribe,
|
|
116
|
+
createListRooms,
|
|
117
|
+
|
|
118
|
+
// Validation helpers
|
|
119
|
+
validateMessage,
|
|
120
|
+
safeParseMessage
|
|
121
|
+
} from "./messages";
|
|
122
|
+
|
|
123
|
+
// Configuration schemas and types
|
|
124
|
+
export {
|
|
125
|
+
// Schemas
|
|
126
|
+
LoggerSchema,
|
|
127
|
+
LogLevelSchema,
|
|
128
|
+
ResponseFormatSchema,
|
|
129
|
+
WebhookEventTypeSchema,
|
|
130
|
+
SDKConfigSchema,
|
|
131
|
+
PartialSDKConfigSchema,
|
|
132
|
+
ConnectionStateSchema,
|
|
133
|
+
AuthenticationStateSchema,
|
|
134
|
+
WebhookConfigSchema,
|
|
135
|
+
WebhookPayloadSchema,
|
|
136
|
+
|
|
137
|
+
// Types
|
|
138
|
+
type Logger,
|
|
139
|
+
type LogLevel,
|
|
140
|
+
type ResponseFormat,
|
|
141
|
+
type WebhookEventType,
|
|
142
|
+
type SDKConfig,
|
|
143
|
+
type PartialSDKConfig,
|
|
144
|
+
type ConnectionState,
|
|
145
|
+
type AuthenticationState,
|
|
146
|
+
type WebhookConfig,
|
|
147
|
+
type WebhookPayload,
|
|
148
|
+
|
|
149
|
+
// Constants and utilities
|
|
150
|
+
DEFAULT_CONFIG,
|
|
151
|
+
validateConfig,
|
|
152
|
+
safeParseConfig,
|
|
153
|
+
SDKConfigBuilder
|
|
154
|
+
} from "./config";
|
|
155
|
+
|
|
156
|
+
// Event schemas and types
|
|
157
|
+
export {
|
|
158
|
+
// Schemas
|
|
159
|
+
AgentSelectedDataSchema,
|
|
160
|
+
AgentResponseSchema,
|
|
161
|
+
SDKErrorSchema,
|
|
162
|
+
ConnectionErrorSchema,
|
|
163
|
+
AuthenticationErrorSchema,
|
|
164
|
+
MessageErrorSchema,
|
|
165
|
+
WebhookErrorSchema,
|
|
166
|
+
ValidationErrorSchema,
|
|
167
|
+
TimeoutErrorSchema,
|
|
168
|
+
RateLimitErrorSchema,
|
|
169
|
+
EventMetadataSchema,
|
|
170
|
+
|
|
171
|
+
// Types
|
|
172
|
+
type AgentSelectedData,
|
|
173
|
+
type AgentResponse,
|
|
174
|
+
type EventMetadata,
|
|
175
|
+
type SDKEvents,
|
|
176
|
+
type EventHandler,
|
|
177
|
+
type EventMap,
|
|
178
|
+
type IEventEmitter,
|
|
179
|
+
|
|
180
|
+
// Error classes
|
|
181
|
+
SDKError,
|
|
182
|
+
ConnectionError,
|
|
183
|
+
AuthenticationError,
|
|
184
|
+
MessageError,
|
|
185
|
+
WebhookError,
|
|
186
|
+
ValidationError,
|
|
187
|
+
TimeoutError,
|
|
188
|
+
RateLimitError,
|
|
189
|
+
|
|
190
|
+
// Validation helpers
|
|
191
|
+
validateEventData,
|
|
192
|
+
safeValidateEventData
|
|
193
|
+
} from "./events";
|
|
194
|
+
|
|
195
|
+
// Error codes
|
|
196
|
+
export { ErrorCode } from "./error-codes";
|
|
197
|
+
|
|
198
|
+
// Health status types
|
|
199
|
+
export { type HealthStatus } from "./health";
|