@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,511 @@
1
+ "use strict";
2
+ /**
3
+ * Webhook handler for Teneo Protocol SDK
4
+ * Manages webhook delivery with retries and error handling using Zod validation
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.WebhookHandler = void 0;
11
+ const node_fetch_1 = __importDefault(require("node-fetch"));
12
+ const eventemitter3_1 = require("eventemitter3");
13
+ const zod_1 = require("zod");
14
+ const ssrf_validator_1 = require("../utils/ssrf-validator");
15
+ const bounded_queue_1 = require("../utils/bounded-queue");
16
+ const circuit_breaker_1 = require("../utils/circuit-breaker");
17
+ const retry_policy_1 = require("../utils/retry-policy");
18
+ const types_1 = require("../types");
19
+ const events_1 = require("../types/events");
20
+ const constants_1 = require("../constants");
21
+ class WebhookHandler extends eventemitter3_1.EventEmitter {
22
+ constructor(config, logger) {
23
+ super();
24
+ this.isProcessing = false;
25
+ this.isDestroyed = false;
26
+ // Validate config and logger with Zod
27
+ this.config = types_1.SDKConfigSchema.parse(config);
28
+ this.logger = types_1.LoggerSchema.parse(logger);
29
+ // Initialize bounded queue to prevent unbounded memory growth (CB-1)
30
+ // Max 1000 webhooks, drop oldest on overflow
31
+ this.queue = new bounded_queue_1.BoundedQueue(1000, "drop-oldest");
32
+ // Initialize circuit breaker for fault tolerance (CB-3)
33
+ // Opens after 5 failures, closes after 2 successes, 60s timeout
34
+ this.circuitBreaker = new circuit_breaker_1.CircuitBreaker({
35
+ failureThreshold: 5,
36
+ successThreshold: 2,
37
+ timeout: 60000,
38
+ windowSize: 60000
39
+ });
40
+ // Initialize webhook retry policy (REL-3)
41
+ if (this.config.webhookRetryStrategy) {
42
+ // User provided custom strategy
43
+ this.retryPolicy = new retry_policy_1.RetryPolicy(this.config.webhookRetryStrategy);
44
+ this.logger.info("Custom webhook retry strategy configured", {
45
+ type: this.config.webhookRetryStrategy.type,
46
+ baseDelay: this.config.webhookRetryStrategy.baseDelay,
47
+ maxDelay: this.config.webhookRetryStrategy.maxDelay,
48
+ maxAttempts: this.config.webhookRetryStrategy.maxAttempts
49
+ });
50
+ }
51
+ else {
52
+ // Use default exponential backoff matching previous hardcoded behavior
53
+ // Previous: RETRY.BASE_DELAY (1000ms) * 2^(attempt-1), max RETRY.MAX_WEBHOOK_DELAY (30000ms)
54
+ // Default retries: 3
55
+ this.retryPolicy = retry_policy_1.RetryPolicy.exponential(constants_1.RETRY.BASE_DELAY, // 1000ms base delay
56
+ constants_1.RETRY.MAX_WEBHOOK_DELAY, // 30000ms max delay
57
+ this.config.webhookRetries ?? 3, false // jitter disabled by default for webhooks
58
+ );
59
+ }
60
+ if (this.config.webhookUrl) {
61
+ // Create and validate webhook configuration
62
+ this.webhookConfig = types_1.WebhookConfigSchema.parse({
63
+ url: this.config.webhookUrl,
64
+ headers: this.config.webhookHeaders,
65
+ retries: this.config.webhookRetries ?? 3,
66
+ timeout: this.config.webhookTimeout ?? constants_1.TIMEOUTS.WEBHOOK_TIMEOUT,
67
+ events: ["message", "task_response", "agent_selected", "error"]
68
+ });
69
+ }
70
+ }
71
+ /**
72
+ * Configures or updates webhook settings with runtime validation.
73
+ * Validates the webhook URL for security (HTTPS requirement except localhost)
74
+ * and sets up retry logic, timeout, and event filtering.
75
+ *
76
+ * @param config - Webhook configuration object
77
+ * @param config.url - Webhook endpoint URL (must be HTTPS unless localhost)
78
+ * @param config.headers - Optional HTTP headers to include with requests
79
+ * @param config.retries - Maximum number of retry attempts for failed deliveries (default: 3)
80
+ * @param config.timeout - Request timeout in milliseconds (default: 30000)
81
+ * @param config.events - Array of event types to send webhooks for (default: all events)
82
+ * @throws {WebhookError} If URL is invalid, insecure, or points to private IP ranges
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * webhookHandler.configure({
87
+ * url: 'https://api.example.com/webhooks',
88
+ * headers: { 'Authorization': 'Bearer token' },
89
+ * retries: 5,
90
+ * timeout: 60000,
91
+ * events: ['message', 'agent_selected', 'error']
92
+ * });
93
+ * ```
94
+ */
95
+ configure(config) {
96
+ // Validate configuration with Zod
97
+ const validatedConfig = types_1.WebhookConfigSchema.parse(config);
98
+ this.validateWebhookUrl(validatedConfig.url);
99
+ this.webhookConfig = {
100
+ ...validatedConfig,
101
+ retries: validatedConfig.retries ?? 3,
102
+ timeout: validatedConfig.timeout ?? constants_1.TIMEOUTS.WEBHOOK_TIMEOUT,
103
+ events: validatedConfig.events ?? ["message", "task_response", "agent_selected", "error"]
104
+ };
105
+ this.logger.info("Webhook configured", {
106
+ url: validatedConfig.url,
107
+ events: this.webhookConfig.events
108
+ });
109
+ }
110
+ /**
111
+ * Sends a webhook for a specific event type with payload validation.
112
+ * Validates event type and payload with Zod schemas before queueing.
113
+ * Webhooks are queued and delivered asynchronously with retry logic.
114
+ * Emits 'webhook:sent', 'webhook:success', or 'webhook:error' events.
115
+ *
116
+ * @param eventType - Type of event to send ('message', 'task_response', 'agent_selected', or 'error')
117
+ * @param data - Event-specific data payload (validated with Zod)
118
+ * @param metadata - Optional metadata to include with the event
119
+ * @returns Promise that resolves when webhook is queued (not when delivered)
120
+ * @throws {ValidationError} If eventType or data fail Zod validation
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * await webhookHandler.sendWebhook('agent_selected', {
125
+ * agent_id: 'weather-agent',
126
+ * agent_name: 'Weather Agent',
127
+ * capabilities: ['weather-forecast']
128
+ * }, {
129
+ * agentId: 'weather-agent',
130
+ * taskId: 'task-123'
131
+ * });
132
+ * ```
133
+ */
134
+ async sendWebhook(eventType, data, metadata) {
135
+ if (!this.webhookConfig || this.isDestroyed) {
136
+ return;
137
+ }
138
+ try {
139
+ // Validate event type
140
+ const validatedEventType = types_1.WebhookEventTypeSchema.parse(eventType);
141
+ // Check if this event type should trigger a webhook
142
+ if (this.webhookConfig.events && !this.webhookConfig.events.includes(validatedEventType)) {
143
+ return;
144
+ }
145
+ // Create and validate payload
146
+ const payload = types_1.WebhookPayloadSchema.parse({
147
+ event: validatedEventType,
148
+ timestamp: new Date().toISOString(),
149
+ data,
150
+ metadata
151
+ });
152
+ // Add to queue (bounded - will drop oldest if full)
153
+ const pushed = this.queue.push({
154
+ payload,
155
+ attempts: 0
156
+ });
157
+ if (!pushed) {
158
+ this.logger.warn("Webhook queue full - oldest webhook dropped", {
159
+ queueSize: this.queue.size()
160
+ });
161
+ }
162
+ // Process queue
163
+ this.processQueue();
164
+ }
165
+ catch (error) {
166
+ if (error instanceof zod_1.z.ZodError) {
167
+ this.logger.error("Invalid webhook payload", error);
168
+ throw new events_1.ValidationError("Invalid webhook payload", error);
169
+ }
170
+ throw error;
171
+ }
172
+ }
173
+ /**
174
+ * Sends a webhook specifically for message events with automatic event type detection.
175
+ * Filters out system messages (ping, pong, auth) and maps message types to webhook events.
176
+ * Validates message with Zod schema before sending.
177
+ *
178
+ * @param message - The message to send as a webhook
179
+ * @returns Promise that resolves when webhook is queued
180
+ * @throws {ValidationError} If message fails Zod validation
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * const userMessage = createUserMessage('Hello', 'general', walletAddress);
185
+ * await webhookHandler.sendMessageWebhook(userMessage);
186
+ * // Webhook will be sent with event type 'message'
187
+ * ```
188
+ */
189
+ async sendMessageWebhook(message) {
190
+ if (!message)
191
+ return;
192
+ // Skip system messages that shouldn't be sent as webhooks
193
+ const skipMessageTypes = [
194
+ "agents",
195
+ "auth",
196
+ "auth_required",
197
+ "pong",
198
+ "ping",
199
+ "auth_success",
200
+ "auth_error",
201
+ "challenge",
202
+ "request_challenge"
203
+ ];
204
+ if (skipMessageTypes.includes(message.type)) {
205
+ return;
206
+ }
207
+ try {
208
+ // Validate message with Zod
209
+ const validatedMessage = types_1.BaseMessageSchema.parse(message);
210
+ let eventType;
211
+ switch (validatedMessage.type) {
212
+ case "task_response":
213
+ eventType = "task_response";
214
+ break;
215
+ case "agent_selected":
216
+ eventType = "agent_selected";
217
+ break;
218
+ case "error":
219
+ eventType = "error";
220
+ break;
221
+ default:
222
+ eventType = "message";
223
+ }
224
+ const metadata = {
225
+ messageType: validatedMessage.type,
226
+ from: validatedMessage.from,
227
+ to: validatedMessage.to,
228
+ room: validatedMessage.room,
229
+ taskId: validatedMessage.task_id
230
+ };
231
+ await this.sendWebhook(eventType, validatedMessage, metadata);
232
+ }
233
+ catch (error) {
234
+ if (error instanceof zod_1.z.ZodError) {
235
+ this.logger.error("Invalid message for webhook", error);
236
+ throw new events_1.ValidationError("Invalid message for webhook", error);
237
+ }
238
+ throw error;
239
+ }
240
+ }
241
+ /**
242
+ * Process webhook queue
243
+ */
244
+ async processQueue() {
245
+ if (this.isProcessing || this.queue.isEmpty() || this.isDestroyed) {
246
+ return;
247
+ }
248
+ this.isProcessing = true;
249
+ while (!this.queue.isEmpty() && !this.isDestroyed) {
250
+ const item = this.queue.peek();
251
+ if (!item)
252
+ break; // Queue empty
253
+ // Check if we should retry
254
+ if (item.nextRetry && item.nextRetry > new Date()) {
255
+ // Wait until retry time
256
+ const delay = item.nextRetry.getTime() - Date.now();
257
+ this.processTimer = setTimeout(() => {
258
+ this.isProcessing = false;
259
+ this.processQueue();
260
+ }, delay);
261
+ return;
262
+ }
263
+ try {
264
+ // Use circuit breaker for fault tolerance (CB-3)
265
+ await this.circuitBreaker.execute(async () => {
266
+ await this.deliverWebhook(item);
267
+ });
268
+ // Success - remove from queue
269
+ this.queue.shift();
270
+ }
271
+ catch (error) {
272
+ // Check if circuit breaker is open
273
+ if (error instanceof circuit_breaker_1.CircuitBreakerError) {
274
+ this.logger.warn("Circuit breaker is OPEN, pausing webhook delivery", {
275
+ state: error.state
276
+ });
277
+ // Don't retry immediately when circuit is open
278
+ // Queue will be retried when circuit closes
279
+ this.isProcessing = false;
280
+ return;
281
+ }
282
+ // Handle retry logic
283
+ item.attempts++;
284
+ item.lastAttempt = new Date();
285
+ item.error = error;
286
+ // Check if we should retry using the retry policy (REL-3)
287
+ if (!this.retryPolicy.shouldRetry(item.attempts)) {
288
+ // Max retries reached
289
+ this.logger.error("Webhook delivery failed after max retries", {
290
+ url: this.webhookConfig?.url,
291
+ attempts: item.attempts,
292
+ error: error
293
+ });
294
+ this.emit("webhook:error", error, this.webhookConfig?.url ?? "");
295
+ this.queue.shift();
296
+ }
297
+ else {
298
+ // Schedule retry using configured strategy
299
+ const retryDelay = this.retryPolicy.calculateDelay(item.attempts);
300
+ item.nextRetry = new Date(Date.now() + retryDelay);
301
+ this.logger.warn(`Webhook delivery failed, retrying in ${retryDelay}ms`, {
302
+ url: this.webhookConfig?.url,
303
+ attempt: item.attempts,
304
+ error: error
305
+ });
306
+ this.emit("webhook:retry", item.attempts, this.webhookConfig?.url ?? "");
307
+ // Move to end of queue
308
+ const failedItem = this.queue.shift();
309
+ if (failedItem) {
310
+ this.queue.push(failedItem);
311
+ }
312
+ }
313
+ }
314
+ }
315
+ this.isProcessing = false;
316
+ }
317
+ /**
318
+ * Deliver a webhook
319
+ */
320
+ async deliverWebhook(item) {
321
+ if (!this.webhookConfig) {
322
+ throw new Error("Webhook not configured");
323
+ }
324
+ const controller = new AbortController();
325
+ const timeout = setTimeout(() => {
326
+ controller.abort();
327
+ }, this.webhookConfig.timeout);
328
+ try {
329
+ this.logger.debug("Delivering webhook", { url: this.webhookConfig.url });
330
+ const options = {
331
+ method: "POST",
332
+ headers: {
333
+ "Content-Type": "application/json",
334
+ ...this.webhookConfig.headers
335
+ },
336
+ body: JSON.stringify(item.payload),
337
+ signal: controller.signal
338
+ };
339
+ const response = await (0, node_fetch_1.default)(this.webhookConfig.url, options);
340
+ if (!response.ok) {
341
+ throw new events_1.WebhookError(`Webhook returned status ${response.status}`, {
342
+ status: response.status,
343
+ statusText: response.statusText
344
+ });
345
+ }
346
+ const responseData = await response.text();
347
+ this.logger.debug("Webhook delivered successfully", {
348
+ url: this.webhookConfig.url,
349
+ status: response.status
350
+ });
351
+ this.emit("webhook:sent", item.payload, this.webhookConfig.url);
352
+ this.emit("webhook:success", responseData, this.webhookConfig.url);
353
+ }
354
+ catch (error) {
355
+ if (error.name === "AbortError") {
356
+ throw new events_1.WebhookError("Webhook timeout", {
357
+ timeout: this.webhookConfig.timeout
358
+ });
359
+ }
360
+ throw new events_1.WebhookError(`Webhook delivery failed: ${error.message}`, error);
361
+ }
362
+ finally {
363
+ clearTimeout(timeout);
364
+ }
365
+ }
366
+ /**
367
+ * Validate webhook URL for SSRF vulnerabilities
368
+ * Uses comprehensive SSRF validator to block:
369
+ * - Private IP ranges (RFC1918)
370
+ * - Cloud metadata endpoints (AWS, GCP, Azure)
371
+ * - Kubernetes service discovery
372
+ * - Dangerous internal ports
373
+ * - Localhost (unless allowInsecureWebhooks is enabled)
374
+ */
375
+ validateWebhookUrl(url) {
376
+ try {
377
+ // Use comprehensive SSRF validator
378
+ // allowInsecureWebhooks controls whether localhost/HTTP is allowed
379
+ (0, ssrf_validator_1.validateWebhookUrl)(url, this.config.allowInsecureWebhooks ?? false);
380
+ }
381
+ catch (error) {
382
+ throw new events_1.WebhookError(`Webhook URL validation failed: ${error.message}`, { url });
383
+ }
384
+ }
385
+ /**
386
+ * Gets the current status of the webhook delivery queue.
387
+ * Useful for monitoring webhook health and detecting delivery issues.
388
+ *
389
+ * @returns Object containing queue statistics
390
+ * @returns {number} returns.pending - Total number of webhooks in queue (including failed)
391
+ * @returns {boolean} returns.processing - Whether queue is currently being processed
392
+ * @returns {number} returns.failed - Number of webhooks that have failed and are awaiting retry
393
+ *
394
+ * @example
395
+ * ```typescript
396
+ * const status = webhookHandler.getQueueStatus();
397
+ * console.log(`Queue: ${status.pending} pending, ${status.failed} failed`);
398
+ * if (status.failed > 10) {
399
+ * console.warn('High number of failed webhooks detected');
400
+ * }
401
+ * ```
402
+ */
403
+ getQueueStatus() {
404
+ const circuitState = this.circuitBreaker.getState();
405
+ return {
406
+ pending: this.queue.size(),
407
+ processing: this.isProcessing,
408
+ failed: this.queue.toArray().filter((item) => item.error).length,
409
+ circuitState: circuitState.state
410
+ };
411
+ }
412
+ /**
413
+ * Clears all pending and failed webhooks from the delivery queue.
414
+ * Warning: This permanently discards all queued webhooks.
415
+ * Use this to recover from queue issues or when webhooks are no longer relevant.
416
+ *
417
+ * @example
418
+ * ```typescript
419
+ * webhookHandler.clearQueue();
420
+ * console.log('All pending webhooks cleared');
421
+ * ```
422
+ */
423
+ clearQueue() {
424
+ this.queue.clear();
425
+ this.logger.info("Webhook queue cleared");
426
+ }
427
+ /**
428
+ * Retries all failed webhooks in the queue immediately.
429
+ * Resets attempt counters and error states for failed webhooks.
430
+ * Useful for recovering from temporary network or endpoint issues.
431
+ *
432
+ * @example
433
+ * ```typescript
434
+ * const status = webhookHandler.getQueueStatus();
435
+ * if (status.failed > 0) {
436
+ * webhookHandler.retryFailed();
437
+ * console.log(`Retrying ${status.failed} failed webhooks`);
438
+ * }
439
+ * ```
440
+ */
441
+ retryFailed() {
442
+ const failed = this.queue.toArray().filter((item) => item.error);
443
+ for (const item of failed) {
444
+ item.attempts = 0;
445
+ item.error = undefined;
446
+ item.nextRetry = undefined;
447
+ }
448
+ this.processQueue();
449
+ }
450
+ /**
451
+ * Destroys the webhook handler and cleans up resources.
452
+ * Stops queue processing, clears all timers, removes event listeners,
453
+ * and discards all pending webhooks. After destruction, the handler cannot be reused.
454
+ *
455
+ * @example
456
+ * ```typescript
457
+ * webhookHandler.destroy();
458
+ * console.log('Webhook handler destroyed');
459
+ * ```
460
+ */
461
+ destroy() {
462
+ this.isDestroyed = true;
463
+ this.isProcessing = false;
464
+ if (this.processTimer) {
465
+ clearTimeout(this.processTimer);
466
+ this.processTimer = undefined;
467
+ }
468
+ this.clearQueue();
469
+ this.removeAllListeners();
470
+ }
471
+ /**
472
+ * Quick check for whether a webhook URL has been configured.
473
+ * Returns true if configure() has been called with a valid URL.
474
+ *
475
+ * @returns True if webhook is configured, false otherwise
476
+ *
477
+ * @example
478
+ * ```typescript
479
+ * if (webhookHandler.isConfigured) {
480
+ * console.log('Webhooks are enabled');
481
+ * } else {
482
+ * console.log('Webhooks not configured');
483
+ * }
484
+ * ```
485
+ */
486
+ get isConfigured() {
487
+ return !!this.webhookConfig;
488
+ }
489
+ /**
490
+ * Gets the current webhook configuration including URL, headers, and settings.
491
+ * Returns a defensive copy to prevent external modification of internal state.
492
+ * Returns undefined if webhook has not been configured.
493
+ *
494
+ * @returns Copy of current webhook configuration, or undefined if not configured
495
+ *
496
+ * @example
497
+ * ```typescript
498
+ * const config = webhookHandler.getConfig();
499
+ * if (config) {
500
+ * console.log(`Webhook URL: ${config.url}`);
501
+ * console.log(`Max retries: ${config.retries}`);
502
+ * console.log(`Timeout: ${config.timeout}ms`);
503
+ * }
504
+ * ```
505
+ */
506
+ getConfig() {
507
+ return this.webhookConfig ? { ...this.webhookConfig } : undefined;
508
+ }
509
+ }
510
+ exports.WebhookHandler = WebhookHandler;
511
+ //# sourceMappingURL=webhook-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-handler.js","sourceRoot":"","sources":["../../src/handlers/webhook-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Teneo Protocol SDK
3
+ * TypeScript SDK for external platforms to interact with Teneo agents
4
+ * Uses Zod for runtime validation and type safety
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * Main SDK class for interacting with Teneo agents
10
+ * @see {@link TeneoSDK}
11
+ */
12
+ export { TeneoSDK, SendMessageOptionsSchema, AgentCommandSchema } from "./teneo-sdk";
13
+ import { TeneoSDK } from "./teneo-sdk";
14
+ import { PartialSDKConfig } from "./types";
15
+ /**
16
+ * Configuration types, schemas, and builders
17
+ * Use SDKConfigBuilder for fluent configuration API
18
+ */
19
+ export { LoggerSchema, LogLevelSchema, ResponseFormatSchema, WebhookEventTypeSchema, SDKConfigSchema, PartialSDKConfigSchema, ConnectionStateSchema, AuthenticationStateSchema, WebhookConfigSchema, WebhookPayloadSchema, SDKConfig, PartialSDKConfig, SDKConfigBuilder, Logger, LogLevel, ResponseFormat, ConnectionState, AuthenticationState, WebhookConfig, WebhookEventType, WebhookPayload, DEFAULT_CONFIG, validateConfig, safeParseConfig } from "./types/config";
20
+ /**
21
+ * Health monitoring types for SDK component status
22
+ * @see {@link TeneoSDK.getHealth}
23
+ */
24
+ export { type HealthStatus } from "./types/health";
25
+ /**
26
+ * Message types, schemas, and utilities
27
+ * All WebSocket message types with Zod validation
28
+ */
29
+ export { MessageTypeSchema, ContentTypeSchema, ClientTypeSchema, AgentTypeSchema, AgentStatusSchema, CapabilitySchema, CommandSchema, RoomSchema, AgentSchema, BaseMessageSchema, RequestChallengeMessageSchema, ChallengeMessageSchema, CheckCachedAuthMessageSchema, AuthMessageSchema, AuthSuccessMessageSchema, AuthErrorMessageSchema, RegisterMessageSchema, RegistrationSuccessMessageSchema, UserMessageSchema, TaskMessageSchema, TaskResponseMessageSchema, AgentSelectedMessageSchema, AgentsListMessageSchema, ErrorMessageSchema, PingMessageSchema, PongMessageSchema, SubscribeMessageSchema, UnsubscribeMessageSchema, ListRoomsMessageSchema, SubscribeResponseSchema, UnsubscribeResponseSchema, RoomInfoSchema, ListRoomsResponseSchema, AnyMessageSchema, MessageType, ContentType, ClientType, AgentType, AgentStatus, BaseMessage, RequestChallengeMessage, ChallengeMessage, CheckCachedAuthMessage, AuthMessage, AuthSuccessMessage, AuthErrorMessage, RegisterMessage, RegistrationSuccessMessage, UserMessage, TaskMessage, TaskResponseMessage, AgentSelectedMessage, AgentsListMessage, ErrorMessage, PingMessage, PongMessage, SubscribeMessage, UnsubscribeMessage, ListRoomsMessage, SubscribeResponse, UnsubscribeResponse, RoomInfo, ListRoomsResponse, AnyMessage, Room, Capability, Command, Agent, isAuthSuccess, isAuthError, isAuth, isChallenge, isAgentSelected, isTaskResponse, isError, isAgentsList, createRequestChallenge, createCheckCachedAuth, createAuth, createUserMessage, createPing, createSubscribe, createUnsubscribe, createListRooms, validateMessage, safeParseMessage } from "./types/messages";
30
+ /**
31
+ * Event types, error classes, and event handling utilities
32
+ * Comprehensive typed event system for SDK lifecycle
33
+ */
34
+ export { AgentSelectedDataSchema, AgentResponseSchema, SDKErrorSchema, ConnectionErrorSchema, AuthenticationErrorSchema, MessageErrorSchema, WebhookErrorSchema, ValidationErrorSchema, TimeoutErrorSchema, RateLimitErrorSchema, SignatureVerificationErrorSchema, ConfigurationErrorSchema, EventMetadataSchema, SDKEvents, AgentSelectedData, AgentResponse, EventMetadata, EventHandler, EventMap, IEventEmitter, SDKError, ConnectionError, AuthenticationError, MessageError, WebhookError, ValidationError, TimeoutError, RateLimitError, SignatureVerificationError, ConfigurationError, validateEventData, safeValidateEventData, isRecoverableError } from "./types/events";
35
+ /**
36
+ * Response formatting utilities for agent responses
37
+ * Supports raw JSON, humanized text, or both formats
38
+ */
39
+ export { FormatOptionSchema, ResponseMetadataSchema, FormattedResponseSchema, ResponseFormatter, FormattedResponse, ResponseMetadata, FormatOption } from "./formatters/response-formatter";
40
+ /**
41
+ * Security utilities for private key management
42
+ * SEC-3: In-memory encryption for private keys
43
+ */
44
+ export { SecurePrivateKey } from "./utils/secure-private-key";
45
+ /**
46
+ * SDK version string
47
+ */
48
+ export declare const VERSION = "1.0.0";
49
+ /**
50
+ * Convenience type re-exports for message operations
51
+ * @see {@link TeneoSDK.sendMessage}
52
+ * @see {@link TeneoSDK.sendDirectCommand}
53
+ */
54
+ export type { SendMessageOptions, AgentCommand } from "./teneo-sdk";
55
+ /**
56
+ * Quick start function to create and connect SDK
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * import { createTeneoSDK } from '@teneo-protocol/sdk';
61
+ *
62
+ * const sdk = await createTeneoSDK({
63
+ * wsUrl: 'ws://localhost:8080/ws',
64
+ * privateKey: 'your-private-key',
65
+ * autoJoinRooms: ['general']
66
+ * });
67
+ * ```
68
+ */
69
+ export declare function createTeneoSDK(config: PartialSDKConfig): Promise<TeneoSDK>;
70
+ export default TeneoSDK;
71
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}