@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.
Files changed (281) hide show
  1. package/.dockerignore +14 -0
  2. package/.env.test.example +14 -0
  3. package/.eslintrc.json +26 -0
  4. package/.github/workflows/claude-code-review.yml +78 -0
  5. package/.github/workflows/claude-reviewer.yml +64 -0
  6. package/.github/workflows/publish-npm.yml +38 -0
  7. package/.github/workflows/push-to-main.yml +23 -0
  8. package/.node-version +1 -0
  9. package/.prettierrc +11 -0
  10. package/Dockerfile +25 -0
  11. package/LICENCE +661 -0
  12. package/README.md +709 -0
  13. package/dist/constants.d.ts +42 -0
  14. package/dist/constants.d.ts.map +1 -0
  15. package/dist/constants.js +45 -0
  16. package/dist/constants.js.map +1 -0
  17. package/dist/core/websocket-client.d.ts +261 -0
  18. package/dist/core/websocket-client.d.ts.map +1 -0
  19. package/dist/core/websocket-client.js +875 -0
  20. package/dist/core/websocket-client.js.map +1 -0
  21. package/dist/formatters/response-formatter.d.ts +354 -0
  22. package/dist/formatters/response-formatter.d.ts.map +1 -0
  23. package/dist/formatters/response-formatter.js +575 -0
  24. package/dist/formatters/response-formatter.js.map +1 -0
  25. package/dist/handlers/message-handler-registry.d.ts +155 -0
  26. package/dist/handlers/message-handler-registry.d.ts.map +1 -0
  27. package/dist/handlers/message-handler-registry.js +216 -0
  28. package/dist/handlers/message-handler-registry.js.map +1 -0
  29. package/dist/handlers/message-handlers/agent-selected-handler.d.ts +112 -0
  30. package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -0
  31. package/dist/handlers/message-handlers/agent-selected-handler.js +40 -0
  32. package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -0
  33. package/dist/handlers/message-handlers/agents-list-handler.d.ts +14 -0
  34. package/dist/handlers/message-handlers/agents-list-handler.d.ts.map +1 -0
  35. package/dist/handlers/message-handlers/agents-list-handler.js +25 -0
  36. package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -0
  37. package/dist/handlers/message-handlers/auth-error-handler.d.ts +71 -0
  38. package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -0
  39. package/dist/handlers/message-handlers/auth-error-handler.js +30 -0
  40. package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -0
  41. package/dist/handlers/message-handlers/auth-message-handler.d.ts +18 -0
  42. package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -0
  43. package/dist/handlers/message-handlers/auth-message-handler.js +60 -0
  44. package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -0
  45. package/dist/handlers/message-handlers/auth-required-handler.d.ts +76 -0
  46. package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -0
  47. package/dist/handlers/message-handlers/auth-required-handler.js +23 -0
  48. package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -0
  49. package/dist/handlers/message-handlers/auth-success-handler.d.ts +18 -0
  50. package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -0
  51. package/dist/handlers/message-handlers/auth-success-handler.js +51 -0
  52. package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -0
  53. package/dist/handlers/message-handlers/base-handler.d.ts +55 -0
  54. package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -0
  55. package/dist/handlers/message-handlers/base-handler.js +83 -0
  56. package/dist/handlers/message-handlers/base-handler.js.map +1 -0
  57. package/dist/handlers/message-handlers/challenge-handler.d.ts +73 -0
  58. package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -0
  59. package/dist/handlers/message-handlers/challenge-handler.js +47 -0
  60. package/dist/handlers/message-handlers/challenge-handler.js.map +1 -0
  61. package/dist/handlers/message-handlers/error-message-handler.d.ts +76 -0
  62. package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -0
  63. package/dist/handlers/message-handlers/error-message-handler.js +29 -0
  64. package/dist/handlers/message-handlers/error-message-handler.js.map +1 -0
  65. package/dist/handlers/message-handlers/index.d.ts +28 -0
  66. package/dist/handlers/message-handlers/index.d.ts.map +1 -0
  67. package/dist/handlers/message-handlers/index.js +100 -0
  68. package/dist/handlers/message-handlers/index.js.map +1 -0
  69. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +122 -0
  70. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -0
  71. package/dist/handlers/message-handlers/list-rooms-response-handler.js +30 -0
  72. package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -0
  73. package/dist/handlers/message-handlers/ping-pong-handler.d.ts +104 -0
  74. package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -0
  75. package/dist/handlers/message-handlers/ping-pong-handler.js +36 -0
  76. package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -0
  77. package/dist/handlers/message-handlers/regular-message-handler.d.ts +56 -0
  78. package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -0
  79. package/dist/handlers/message-handlers/regular-message-handler.js +59 -0
  80. package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -0
  81. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +81 -0
  82. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -0
  83. package/dist/handlers/message-handlers/subscribe-response-handler.js +48 -0
  84. package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -0
  85. package/dist/handlers/message-handlers/task-response-handler.d.ts +14 -0
  86. package/dist/handlers/message-handlers/task-response-handler.d.ts.map +1 -0
  87. package/dist/handlers/message-handlers/task-response-handler.js +44 -0
  88. package/dist/handlers/message-handlers/task-response-handler.js.map +1 -0
  89. package/dist/handlers/message-handlers/types.d.ts +51 -0
  90. package/dist/handlers/message-handlers/types.d.ts.map +1 -0
  91. package/dist/handlers/message-handlers/types.js +7 -0
  92. package/dist/handlers/message-handlers/types.js.map +1 -0
  93. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +81 -0
  94. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -0
  95. package/dist/handlers/message-handlers/unsubscribe-response-handler.js +48 -0
  96. package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -0
  97. package/dist/handlers/webhook-handler.d.ts +202 -0
  98. package/dist/handlers/webhook-handler.d.ts.map +1 -0
  99. package/dist/handlers/webhook-handler.js +511 -0
  100. package/dist/handlers/webhook-handler.js.map +1 -0
  101. package/dist/index.d.ts +71 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +217 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/managers/agent-registry.d.ts +173 -0
  106. package/dist/managers/agent-registry.d.ts.map +1 -0
  107. package/dist/managers/agent-registry.js +310 -0
  108. package/dist/managers/agent-registry.js.map +1 -0
  109. package/dist/managers/connection-manager.d.ts +134 -0
  110. package/dist/managers/connection-manager.d.ts.map +1 -0
  111. package/dist/managers/connection-manager.js +176 -0
  112. package/dist/managers/connection-manager.js.map +1 -0
  113. package/dist/managers/index.d.ts +9 -0
  114. package/dist/managers/index.d.ts.map +1 -0
  115. package/dist/managers/index.js +16 -0
  116. package/dist/managers/index.js.map +1 -0
  117. package/dist/managers/message-router.d.ts +112 -0
  118. package/dist/managers/message-router.d.ts.map +1 -0
  119. package/dist/managers/message-router.js +260 -0
  120. package/dist/managers/message-router.js.map +1 -0
  121. package/dist/managers/room-manager.d.ts +165 -0
  122. package/dist/managers/room-manager.d.ts.map +1 -0
  123. package/dist/managers/room-manager.js +227 -0
  124. package/dist/managers/room-manager.js.map +1 -0
  125. package/dist/teneo-sdk.d.ts +703 -0
  126. package/dist/teneo-sdk.d.ts.map +1 -0
  127. package/dist/teneo-sdk.js +907 -0
  128. package/dist/teneo-sdk.js.map +1 -0
  129. package/dist/types/config.d.ts +1047 -0
  130. package/dist/types/config.d.ts.map +1 -0
  131. package/dist/types/config.js +720 -0
  132. package/dist/types/config.js.map +1 -0
  133. package/dist/types/error-codes.d.ts +29 -0
  134. package/dist/types/error-codes.d.ts.map +1 -0
  135. package/dist/types/error-codes.js +41 -0
  136. package/dist/types/error-codes.js.map +1 -0
  137. package/dist/types/events.d.ts +616 -0
  138. package/dist/types/events.d.ts.map +1 -0
  139. package/dist/types/events.js +261 -0
  140. package/dist/types/events.js.map +1 -0
  141. package/dist/types/health.d.ts +40 -0
  142. package/dist/types/health.d.ts.map +1 -0
  143. package/dist/types/health.js +6 -0
  144. package/dist/types/health.js.map +1 -0
  145. package/dist/types/index.d.ts +10 -0
  146. package/dist/types/index.d.ts.map +1 -0
  147. package/dist/types/index.js +123 -0
  148. package/dist/types/index.js.map +1 -0
  149. package/dist/types/messages.d.ts +3734 -0
  150. package/dist/types/messages.d.ts.map +1 -0
  151. package/dist/types/messages.js +482 -0
  152. package/dist/types/messages.js.map +1 -0
  153. package/dist/types/validation.d.ts +81 -0
  154. package/dist/types/validation.d.ts.map +1 -0
  155. package/dist/types/validation.js +115 -0
  156. package/dist/types/validation.js.map +1 -0
  157. package/dist/utils/bounded-queue.d.ts +127 -0
  158. package/dist/utils/bounded-queue.d.ts.map +1 -0
  159. package/dist/utils/bounded-queue.js +181 -0
  160. package/dist/utils/bounded-queue.js.map +1 -0
  161. package/dist/utils/circuit-breaker.d.ts +141 -0
  162. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  163. package/dist/utils/circuit-breaker.js +215 -0
  164. package/dist/utils/circuit-breaker.js.map +1 -0
  165. package/dist/utils/deduplication-cache.d.ts +110 -0
  166. package/dist/utils/deduplication-cache.d.ts.map +1 -0
  167. package/dist/utils/deduplication-cache.js +177 -0
  168. package/dist/utils/deduplication-cache.js.map +1 -0
  169. package/dist/utils/event-waiter.d.ts +101 -0
  170. package/dist/utils/event-waiter.d.ts.map +1 -0
  171. package/dist/utils/event-waiter.js +118 -0
  172. package/dist/utils/event-waiter.js.map +1 -0
  173. package/dist/utils/index.d.ts +51 -0
  174. package/dist/utils/index.d.ts.map +1 -0
  175. package/dist/utils/index.js +72 -0
  176. package/dist/utils/index.js.map +1 -0
  177. package/dist/utils/logger.d.ts +22 -0
  178. package/dist/utils/logger.d.ts.map +1 -0
  179. package/dist/utils/logger.js +91 -0
  180. package/dist/utils/logger.js.map +1 -0
  181. package/dist/utils/rate-limiter.d.ts +122 -0
  182. package/dist/utils/rate-limiter.d.ts.map +1 -0
  183. package/dist/utils/rate-limiter.js +190 -0
  184. package/dist/utils/rate-limiter.js.map +1 -0
  185. package/dist/utils/retry-policy.d.ts +191 -0
  186. package/dist/utils/retry-policy.d.ts.map +1 -0
  187. package/dist/utils/retry-policy.js +225 -0
  188. package/dist/utils/retry-policy.js.map +1 -0
  189. package/dist/utils/secure-private-key.d.ts +113 -0
  190. package/dist/utils/secure-private-key.d.ts.map +1 -0
  191. package/dist/utils/secure-private-key.js +188 -0
  192. package/dist/utils/secure-private-key.js.map +1 -0
  193. package/dist/utils/signature-verifier.d.ts +143 -0
  194. package/dist/utils/signature-verifier.d.ts.map +1 -0
  195. package/dist/utils/signature-verifier.js +238 -0
  196. package/dist/utils/signature-verifier.js.map +1 -0
  197. package/dist/utils/ssrf-validator.d.ts +36 -0
  198. package/dist/utils/ssrf-validator.d.ts.map +1 -0
  199. package/dist/utils/ssrf-validator.js +195 -0
  200. package/dist/utils/ssrf-validator.js.map +1 -0
  201. package/examples/.env.example +17 -0
  202. package/examples/basic-usage.ts +211 -0
  203. package/examples/production-dashboard/.env.example +153 -0
  204. package/examples/production-dashboard/package.json +39 -0
  205. package/examples/production-dashboard/public/dashboard.html +642 -0
  206. package/examples/production-dashboard/server.ts +753 -0
  207. package/examples/webhook-integration.ts +239 -0
  208. package/examples/x-influencer-battle-redesign.html +1065 -0
  209. package/examples/x-influencer-battle-server.ts +217 -0
  210. package/examples/x-influencer-battle.html +787 -0
  211. package/package.json +65 -0
  212. package/src/constants.ts +43 -0
  213. package/src/core/websocket-client.test.ts +512 -0
  214. package/src/core/websocket-client.ts +1056 -0
  215. package/src/formatters/response-formatter.test.ts +571 -0
  216. package/src/formatters/response-formatter.ts +677 -0
  217. package/src/handlers/message-handler-registry.ts +239 -0
  218. package/src/handlers/message-handlers/agent-selected-handler.ts +40 -0
  219. package/src/handlers/message-handlers/agents-list-handler.ts +26 -0
  220. package/src/handlers/message-handlers/auth-error-handler.ts +31 -0
  221. package/src/handlers/message-handlers/auth-message-handler.ts +66 -0
  222. package/src/handlers/message-handlers/auth-required-handler.ts +23 -0
  223. package/src/handlers/message-handlers/auth-success-handler.ts +57 -0
  224. package/src/handlers/message-handlers/base-handler.ts +101 -0
  225. package/src/handlers/message-handlers/challenge-handler.ts +57 -0
  226. package/src/handlers/message-handlers/error-message-handler.ts +27 -0
  227. package/src/handlers/message-handlers/index.ts +77 -0
  228. package/src/handlers/message-handlers/list-rooms-response-handler.ts +28 -0
  229. package/src/handlers/message-handlers/ping-pong-handler.ts +30 -0
  230. package/src/handlers/message-handlers/regular-message-handler.ts +65 -0
  231. package/src/handlers/message-handlers/subscribe-response-handler.ts +47 -0
  232. package/src/handlers/message-handlers/task-response-handler.ts +45 -0
  233. package/src/handlers/message-handlers/types.ts +77 -0
  234. package/src/handlers/message-handlers/unsubscribe-response-handler.ts +47 -0
  235. package/src/handlers/webhook-handler.test.ts +789 -0
  236. package/src/handlers/webhook-handler.ts +576 -0
  237. package/src/index.ts +269 -0
  238. package/src/managers/agent-registry.test.ts +466 -0
  239. package/src/managers/agent-registry.ts +347 -0
  240. package/src/managers/connection-manager.ts +195 -0
  241. package/src/managers/index.ts +9 -0
  242. package/src/managers/message-router.ts +349 -0
  243. package/src/managers/room-manager.ts +248 -0
  244. package/src/teneo-sdk.ts +1022 -0
  245. package/src/types/config.test.ts +325 -0
  246. package/src/types/config.ts +799 -0
  247. package/src/types/error-codes.ts +44 -0
  248. package/src/types/events.test.ts +302 -0
  249. package/src/types/events.ts +382 -0
  250. package/src/types/health.ts +46 -0
  251. package/src/types/index.ts +199 -0
  252. package/src/types/messages.test.ts +660 -0
  253. package/src/types/messages.ts +570 -0
  254. package/src/types/validation.ts +123 -0
  255. package/src/utils/bounded-queue.test.ts +356 -0
  256. package/src/utils/bounded-queue.ts +205 -0
  257. package/src/utils/circuit-breaker.test.ts +394 -0
  258. package/src/utils/circuit-breaker.ts +262 -0
  259. package/src/utils/deduplication-cache.test.ts +380 -0
  260. package/src/utils/deduplication-cache.ts +198 -0
  261. package/src/utils/event-waiter.test.ts +381 -0
  262. package/src/utils/event-waiter.ts +172 -0
  263. package/src/utils/index.ts +74 -0
  264. package/src/utils/logger.ts +87 -0
  265. package/src/utils/rate-limiter.test.ts +341 -0
  266. package/src/utils/rate-limiter.ts +211 -0
  267. package/src/utils/retry-policy.test.ts +558 -0
  268. package/src/utils/retry-policy.ts +272 -0
  269. package/src/utils/secure-private-key.test.ts +356 -0
  270. package/src/utils/secure-private-key.ts +205 -0
  271. package/src/utils/signature-verifier.test.ts +464 -0
  272. package/src/utils/signature-verifier.ts +298 -0
  273. package/src/utils/ssrf-validator.test.ts +372 -0
  274. package/src/utils/ssrf-validator.ts +224 -0
  275. package/tests/integration/real-server.test.ts +740 -0
  276. package/tests/integration/websocket.test.ts +381 -0
  277. package/tests/integration-setup.ts +16 -0
  278. package/tests/setup.ts +34 -0
  279. package/tsconfig.json +32 -0
  280. package/vitest.config.ts +42 -0
  281. 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";