@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,118 @@
1
+ "use strict";
2
+ /**
3
+ * Event Waiter Utility
4
+ * Provides a clean Promise-based API for waiting for events with timeout and filtering
5
+ * Eliminates callback hell and ensures proper cleanup of listeners and timers
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.waitForEvent = waitForEvent;
9
+ exports.waitForAnyEvent = waitForAnyEvent;
10
+ exports.waitForAllEvents = waitForAllEvents;
11
+ /**
12
+ * Wait for an event to be emitted with automatic timeout and cleanup
13
+ *
14
+ * This utility encapsulates the complex pattern of:
15
+ * - Setting up event listeners
16
+ * - Managing timeouts
17
+ * - Cleaning up listeners and timers in all code paths
18
+ * - Filtering events
19
+ *
20
+ * All cleanup is guaranteed to happen, preventing memory leaks.
21
+ *
22
+ * @param emitter - The EventEmitter to listen to
23
+ * @param eventName - The name of the event to wait for
24
+ * @param options - Configuration options
25
+ * @returns Promise that resolves with the event data or rejects on timeout
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * // Simple usage: wait for any 'data' event
30
+ * const data = await waitForEvent(emitter, 'data', { timeout: 5000 });
31
+ *
32
+ * // With filter: wait for specific event
33
+ * const response = await waitForEvent(wsClient, 'agent:response', {
34
+ * timeout: 30000,
35
+ * filter: (r) => r.taskId === myTaskId,
36
+ * timeoutMessage: 'Agent did not respond in time'
37
+ * });
38
+ * ```
39
+ */
40
+ async function waitForEvent(emitter, eventName, options) {
41
+ return new Promise((resolve, reject) => {
42
+ let timeoutHandle;
43
+ let eventHandler;
44
+ let cleaned = false;
45
+ // Cleanup function - ensures we only clean up once
46
+ const cleanup = () => {
47
+ if (cleaned)
48
+ return;
49
+ cleaned = true;
50
+ if (timeoutHandle) {
51
+ clearTimeout(timeoutHandle);
52
+ timeoutHandle = undefined;
53
+ }
54
+ if (eventHandler) {
55
+ emitter.off(eventName, eventHandler);
56
+ eventHandler = undefined;
57
+ }
58
+ };
59
+ // Event handler - filters and resolves
60
+ eventHandler = (data) => {
61
+ // If filter is provided, check if this event matches
62
+ if (options.filter && !options.filter(data)) {
63
+ // Not the event we're looking for, keep waiting
64
+ return;
65
+ }
66
+ // This is the event we want!
67
+ cleanup();
68
+ resolve(data);
69
+ };
70
+ // Timeout handler - rejects after timeout
71
+ timeoutHandle = setTimeout(() => {
72
+ cleanup();
73
+ const message = options.timeoutMessage || `Timeout waiting for event '${eventName}' after ${options.timeout}ms`;
74
+ reject(new Error(message));
75
+ }, options.timeout);
76
+ // Start listening
77
+ emitter.on(eventName, eventHandler);
78
+ });
79
+ }
80
+ /**
81
+ * Wait for multiple events simultaneously (race condition)
82
+ * Resolves with the first event that fires and matches its filter
83
+ *
84
+ * @param waiters - Array of event waiter configurations
85
+ * @returns Promise that resolves with the first matching event
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * // Wait for either success or error
90
+ * const result = await waitForAnyEvent([
91
+ * { emitter: client, eventName: 'auth:success', options: { timeout: 5000 } },
92
+ * { emitter: client, eventName: 'auth:error', options: { timeout: 5000 } }
93
+ * ]);
94
+ * ```
95
+ */
96
+ async function waitForAnyEvent(waiters) {
97
+ return Promise.race(waiters.map(({ emitter, eventName, options }) => waitForEvent(emitter, eventName, options)));
98
+ }
99
+ /**
100
+ * Wait for all events to fire (all must complete)
101
+ * Useful when you need multiple events to occur before proceeding
102
+ *
103
+ * @param waiters - Array of event waiter configurations
104
+ * @returns Promise that resolves with array of all event data
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * // Wait for both auth and connection
109
+ * const [authState, connState] = await waitForAllEvents([
110
+ * { emitter: client, eventName: 'auth:success', options: { timeout: 5000 } },
111
+ * { emitter: client, eventName: 'connection:open', options: { timeout: 5000 } }
112
+ * ]);
113
+ * ```
114
+ */
115
+ async function waitForAllEvents(waiters) {
116
+ return Promise.all(waiters.map(({ emitter, eventName, options }) => waitForEvent(emitter, eventName, options)));
117
+ }
118
+ //# sourceMappingURL=event-waiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-waiter.js","sourceRoot":"","sources":["../../src/utils/event-waiter.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA0DH,oCAiDC;AAkBD,0CAYC;AAkBD,4CAYC;AA1ID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACI,KAAK,UAAU,YAAY,CAChC,OAAqB,EACrB,SAAiB,EACjB,OAA+B;IAE/B,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,IAAI,aAAyC,CAAC;QAC9C,IAAI,YAA6C,CAAC;QAClD,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,mDAAmD;QACnD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YAEf,IAAI,aAAa,EAAE,CAAC;gBAClB,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC5B,aAAa,GAAG,SAAS,CAAC;YAC5B,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBACrC,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QAEF,uCAAuC;QACvC,YAAY,GAAG,CAAC,IAAO,EAAE,EAAE;YACzB,qDAAqD;YACrD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,gDAAgD;gBAChD,OAAO;YACT,CAAC;YAED,6BAA6B;YAC7B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QAEF,0CAA0C;QAC1C,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,OAAO,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,8BAA8B,SAAS,WAAW,OAAO,CAAC,OAAO,IAAI,CAAC;YAChH,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7B,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEpB,kBAAkB;QAClB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,eAAe,CACnC,OAIE;IAEF,OAAO,OAAO,CAAC,IAAI,CACjB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAC9C,YAAY,CAAI,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAC7C,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,gBAAgB,CACpC,OAIE;IAEF,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAC9C,YAAY,CAAI,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAC7C,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Utility functions and helpers for the Teneo Protocol SDK
3
+ */
4
+ /**
5
+ * Logger creation utilities
6
+ */
7
+ export { createPinoLogger } from "./logger";
8
+ /**
9
+ * SSRF protection utilities for webhook URL validation
10
+ * Prevents Server-Side Request Forgery attacks
11
+ */
12
+ export { validateWebhookUrl, isPrivateIP, isCloudMetadataEndpoint } from "./ssrf-validator";
13
+ /**
14
+ * Event waiting utilities for async event handling
15
+ * Wait for specific events with timeout support
16
+ */
17
+ export { waitForEvent, waitForAnyEvent, waitForAllEvents, type WaitForEventOptions } from "./event-waiter";
18
+ /**
19
+ * Memory-safe bounded queue with overflow strategies
20
+ * Prevents unbounded memory growth
21
+ */
22
+ export { BoundedQueue, QueueOverflowError, type OverflowStrategy } from "./bounded-queue";
23
+ /**
24
+ * Token bucket rate limiter for request throttling
25
+ */
26
+ export { TokenBucketRateLimiter, RateLimitError } from "./rate-limiter";
27
+ /**
28
+ * Circuit breaker pattern for fault tolerance
29
+ * Prevents cascading failures with automatic recovery
30
+ */
31
+ export { CircuitBreaker, CircuitBreakerError, type CircuitState } from "./circuit-breaker";
32
+ /**
33
+ * Message deduplication cache with TTL support
34
+ */
35
+ export { DeduplicationCache } from "./deduplication-cache";
36
+ /**
37
+ * Ethereum signature verification utilities (SEC-2)
38
+ * ECDSA signature validation for message authenticity
39
+ */
40
+ export { SignatureVerifier, type SignatureVerificationOptions, type VerificationResult } from "./signature-verifier";
41
+ /**
42
+ * Secure private key storage with AES-256-GCM encryption (SEC-3)
43
+ * Protects private keys from memory dumps
44
+ */
45
+ export { SecurePrivateKey } from "./secure-private-key";
46
+ /**
47
+ * Configurable retry strategies for resilient operations (REL-3)
48
+ * Supports exponential, linear, and constant backoff
49
+ */
50
+ export { RetryPolicy, RetryStrategySchema, type RetryStrategy, type RetryStrategyType } from "./retry-policy";
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE5F;;;GAGG;AACH,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE1F;;GAEG;AACH,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAExE;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE3F;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;GAGG;AACH,OAAO,EACL,iBAAiB,EACjB,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;GAGG;AACH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /**
3
+ * Utility functions and helpers for the Teneo Protocol SDK
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RetryStrategySchema = exports.RetryPolicy = exports.SecurePrivateKey = exports.SignatureVerifier = exports.DeduplicationCache = exports.CircuitBreakerError = exports.CircuitBreaker = exports.RateLimitError = exports.TokenBucketRateLimiter = exports.QueueOverflowError = exports.BoundedQueue = exports.waitForAllEvents = exports.waitForAnyEvent = exports.waitForEvent = exports.isCloudMetadataEndpoint = exports.isPrivateIP = exports.validateWebhookUrl = exports.createPinoLogger = void 0;
7
+ /**
8
+ * Logger creation utilities
9
+ */
10
+ var logger_1 = require("./logger");
11
+ Object.defineProperty(exports, "createPinoLogger", { enumerable: true, get: function () { return logger_1.createPinoLogger; } });
12
+ /**
13
+ * SSRF protection utilities for webhook URL validation
14
+ * Prevents Server-Side Request Forgery attacks
15
+ */
16
+ var ssrf_validator_1 = require("./ssrf-validator");
17
+ Object.defineProperty(exports, "validateWebhookUrl", { enumerable: true, get: function () { return ssrf_validator_1.validateWebhookUrl; } });
18
+ Object.defineProperty(exports, "isPrivateIP", { enumerable: true, get: function () { return ssrf_validator_1.isPrivateIP; } });
19
+ Object.defineProperty(exports, "isCloudMetadataEndpoint", { enumerable: true, get: function () { return ssrf_validator_1.isCloudMetadataEndpoint; } });
20
+ /**
21
+ * Event waiting utilities for async event handling
22
+ * Wait for specific events with timeout support
23
+ */
24
+ var event_waiter_1 = require("./event-waiter");
25
+ Object.defineProperty(exports, "waitForEvent", { enumerable: true, get: function () { return event_waiter_1.waitForEvent; } });
26
+ Object.defineProperty(exports, "waitForAnyEvent", { enumerable: true, get: function () { return event_waiter_1.waitForAnyEvent; } });
27
+ Object.defineProperty(exports, "waitForAllEvents", { enumerable: true, get: function () { return event_waiter_1.waitForAllEvents; } });
28
+ /**
29
+ * Memory-safe bounded queue with overflow strategies
30
+ * Prevents unbounded memory growth
31
+ */
32
+ var bounded_queue_1 = require("./bounded-queue");
33
+ Object.defineProperty(exports, "BoundedQueue", { enumerable: true, get: function () { return bounded_queue_1.BoundedQueue; } });
34
+ Object.defineProperty(exports, "QueueOverflowError", { enumerable: true, get: function () { return bounded_queue_1.QueueOverflowError; } });
35
+ /**
36
+ * Token bucket rate limiter for request throttling
37
+ */
38
+ var rate_limiter_1 = require("./rate-limiter");
39
+ Object.defineProperty(exports, "TokenBucketRateLimiter", { enumerable: true, get: function () { return rate_limiter_1.TokenBucketRateLimiter; } });
40
+ Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: function () { return rate_limiter_1.RateLimitError; } });
41
+ /**
42
+ * Circuit breaker pattern for fault tolerance
43
+ * Prevents cascading failures with automatic recovery
44
+ */
45
+ var circuit_breaker_1 = require("./circuit-breaker");
46
+ Object.defineProperty(exports, "CircuitBreaker", { enumerable: true, get: function () { return circuit_breaker_1.CircuitBreaker; } });
47
+ Object.defineProperty(exports, "CircuitBreakerError", { enumerable: true, get: function () { return circuit_breaker_1.CircuitBreakerError; } });
48
+ /**
49
+ * Message deduplication cache with TTL support
50
+ */
51
+ var deduplication_cache_1 = require("./deduplication-cache");
52
+ Object.defineProperty(exports, "DeduplicationCache", { enumerable: true, get: function () { return deduplication_cache_1.DeduplicationCache; } });
53
+ /**
54
+ * Ethereum signature verification utilities (SEC-2)
55
+ * ECDSA signature validation for message authenticity
56
+ */
57
+ var signature_verifier_1 = require("./signature-verifier");
58
+ Object.defineProperty(exports, "SignatureVerifier", { enumerable: true, get: function () { return signature_verifier_1.SignatureVerifier; } });
59
+ /**
60
+ * Secure private key storage with AES-256-GCM encryption (SEC-3)
61
+ * Protects private keys from memory dumps
62
+ */
63
+ var secure_private_key_1 = require("./secure-private-key");
64
+ Object.defineProperty(exports, "SecurePrivateKey", { enumerable: true, get: function () { return secure_private_key_1.SecurePrivateKey; } });
65
+ /**
66
+ * Configurable retry strategies for resilient operations (REL-3)
67
+ * Supports exponential, linear, and constant backoff
68
+ */
69
+ var retry_policy_1 = require("./retry-policy");
70
+ Object.defineProperty(exports, "RetryPolicy", { enumerable: true, get: function () { return retry_policy_1.RetryPolicy; } });
71
+ Object.defineProperty(exports, "RetryStrategySchema", { enumerable: true, get: function () { return retry_policy_1.RetryStrategySchema; } });
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;GAEG;AACH,mCAA4C;AAAnC,0GAAA,gBAAgB,OAAA;AAEzB;;;GAGG;AACH,mDAA4F;AAAnF,oHAAA,kBAAkB,OAAA;AAAE,6GAAA,WAAW,OAAA;AAAE,yHAAA,uBAAuB,OAAA;AAEjE;;;GAGG;AACH,+CAKwB;AAJtB,4GAAA,YAAY,OAAA;AACZ,+GAAA,eAAe,OAAA;AACf,gHAAA,gBAAgB,OAAA;AAIlB;;;GAGG;AACH,iDAA0F;AAAjF,6GAAA,YAAY,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAEzC;;GAEG;AACH,+CAAwE;AAA/D,sHAAA,sBAAsB,OAAA;AAAE,8GAAA,cAAc,OAAA;AAE/C;;;GAGG;AACH,qDAA2F;AAAlF,iHAAA,cAAc,OAAA;AAAE,sHAAA,mBAAmB,OAAA;AAE5C;;GAEG;AACH,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAE3B;;;GAGG;AACH,2DAI8B;AAH5B,uHAAA,iBAAiB,OAAA;AAKnB;;;GAGG;AACH,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AAEzB;;;GAGG;AACH,+CAKwB;AAJtB,2GAAA,WAAW,OAAA;AACX,mHAAA,mBAAmB,OAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Logger utility for Teneo Protocol SDK
3
+ * Provides pino-based logging with structured output and optional pretty printing
4
+ */
5
+ import type { Logger, LogLevel } from "../types";
6
+ /**
7
+ * Creates a pino-based logger that conforms to the SDK Logger interface.
8
+ * Automatically configures pretty printing for development environments.
9
+ *
10
+ * @param level - Log level (debug, info, warn, error, silent)
11
+ * @param name - Logger name for identifying log source (e.g., "TeneoSDK", "WebSocketClient")
12
+ * @returns Logger instance compatible with SDK Logger interface
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const logger = createPinoLogger('info', 'TeneoSDK');
17
+ * logger.info('SDK initialized', { wsUrl: 'wss://example.com' });
18
+ * logger.error('Connection failed', { code: 'CONN_FAILED', attempt: 3 });
19
+ * ```
20
+ */
21
+ export declare function createPinoLogger(level: LogLevel, name?: string): Logger;
22
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEjD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CA+DvE"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Logger utility for Teneo Protocol SDK
4
+ * Provides pino-based logging with structured output and optional pretty printing
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.createPinoLogger = createPinoLogger;
11
+ const pino_1 = __importDefault(require("pino"));
12
+ /**
13
+ * Creates a pino-based logger that conforms to the SDK Logger interface.
14
+ * Automatically configures pretty printing for development environments.
15
+ *
16
+ * @param level - Log level (debug, info, warn, error, silent)
17
+ * @param name - Logger name for identifying log source (e.g., "TeneoSDK", "WebSocketClient")
18
+ * @returns Logger instance compatible with SDK Logger interface
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const logger = createPinoLogger('info', 'TeneoSDK');
23
+ * logger.info('SDK initialized', { wsUrl: 'wss://example.com' });
24
+ * logger.error('Connection failed', { code: 'CONN_FAILED', attempt: 3 });
25
+ * ```
26
+ */
27
+ function createPinoLogger(level, name) {
28
+ // Map 'silent' to pino's 'silent' level
29
+ const pinoLevel = level === "silent" ? "silent" : level;
30
+ // Create pino logger with optional pretty printing for development
31
+ const pinoLogger = (0, pino_1.default)({
32
+ level: pinoLevel,
33
+ name: name || "TeneoSDK",
34
+ // Use pino-pretty in development for readable logs
35
+ transport: process.env.NODE_ENV !== "production"
36
+ ? {
37
+ target: "pino-pretty",
38
+ options: {
39
+ colorize: true,
40
+ ignore: "pid,hostname",
41
+ translateTime: "HH:MM:ss.l",
42
+ singleLine: false
43
+ }
44
+ }
45
+ : undefined,
46
+ // Production: fast JSON logs
47
+ formatters: process.env.NODE_ENV === "production"
48
+ ? {
49
+ level: (label) => {
50
+ return { level: label };
51
+ }
52
+ }
53
+ : undefined
54
+ });
55
+ // Adapt pino's API to match our Logger interface
56
+ return {
57
+ debug: (message, data) => {
58
+ if (data !== undefined) {
59
+ pinoLogger.debug(data, message);
60
+ }
61
+ else {
62
+ pinoLogger.debug(message);
63
+ }
64
+ },
65
+ info: (message, data) => {
66
+ if (data !== undefined) {
67
+ pinoLogger.info(data, message);
68
+ }
69
+ else {
70
+ pinoLogger.info(message);
71
+ }
72
+ },
73
+ warn: (message, data) => {
74
+ if (data !== undefined) {
75
+ pinoLogger.warn(data, message);
76
+ }
77
+ else {
78
+ pinoLogger.warn(message);
79
+ }
80
+ },
81
+ error: (message, data) => {
82
+ if (data !== undefined) {
83
+ pinoLogger.error(data, message);
84
+ }
85
+ else {
86
+ pinoLogger.error(message);
87
+ }
88
+ }
89
+ };
90
+ }
91
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAoBH,4CA+DC;AAjFD,gDAAwB;AAGxB;;;;;;;;;;;;;;GAcG;AACH,SAAgB,gBAAgB,CAAC,KAAe,EAAE,IAAa;IAC7D,wCAAwC;IACxC,MAAM,SAAS,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAExD,mEAAmE;IACnE,MAAM,UAAU,GAAG,IAAA,cAAI,EAAC;QACtB,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,IAAI,IAAI,UAAU;QACxB,mDAAmD;QACnD,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;YACnC,CAAC,CAAC;gBACE,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,cAAc;oBACtB,aAAa,EAAE,YAAY;oBAC3B,UAAU,EAAE,KAAK;iBAClB;aACF;YACH,CAAC,CAAC,SAAS;QACf,6BAA6B;QAC7B,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;YACnC,CAAC,CAAC;gBACE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;gBAC1B,CAAC;aACF;YACH,CAAC,CAAC,SAAS;KAChB,CAAC,CAAC;IAEH,iDAAiD;IACjD,OAAO;QACL,KAAK,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE;YACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE;YACpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE;YACpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE;YACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Token Bucket Rate Limiter
3
+ * Prevents message flooding and ensures fair resource usage
4
+ *
5
+ * Uses the token bucket algorithm: tokens are added at a constant rate,
6
+ * and each operation consumes one token. When no tokens are available,
7
+ * operations must wait until tokens are replenished.
8
+ */
9
+ /**
10
+ * Error thrown when rate limit is exceeded with tryConsume()
11
+ */
12
+ export declare class RateLimitError extends Error {
13
+ constructor(message: string);
14
+ }
15
+ /**
16
+ * Token bucket rate limiter for controlling operation frequency
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // Allow 10 messages per second with burst of 20
21
+ * const limiter = new TokenBucketRateLimiter(10, 20);
22
+ *
23
+ * // Non-blocking check
24
+ * if (limiter.tryConsume()) {
25
+ * await sendMessage(msg);
26
+ * } else {
27
+ * console.log('Rate limit exceeded');
28
+ * }
29
+ *
30
+ * // Blocking wait (auto-waits for token)
31
+ * await limiter.consume();
32
+ * await sendMessage(msg);
33
+ * ```
34
+ */
35
+ export declare class TokenBucketRateLimiter {
36
+ private readonly tokensPerSecond;
37
+ private readonly maxBurst;
38
+ private tokens;
39
+ private lastRefill;
40
+ private readonly refillInterval;
41
+ /**
42
+ * Creates a new token bucket rate limiter
43
+ *
44
+ * @param tokensPerSecond - Rate at which tokens are added (operations per second)
45
+ * @param maxBurst - Maximum tokens that can accumulate (burst capacity)
46
+ * @throws {Error} If tokensPerSecond or maxBurst is less than 1
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // 10 ops/sec, burst up to 20
51
+ * const limiter = new TokenBucketRateLimiter(10, 20);
52
+ * ```
53
+ */
54
+ constructor(tokensPerSecond: number, maxBurst: number);
55
+ /**
56
+ * Try to consume one token without blocking
57
+ *
58
+ * @returns true if token was consumed, false if no tokens available
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * if (limiter.tryConsume()) {
63
+ * // Proceed with operation
64
+ * } else {
65
+ * // Rate limited - handle accordingly
66
+ * }
67
+ * ```
68
+ */
69
+ tryConsume(): boolean;
70
+ /**
71
+ * Consume one token, waiting if necessary until a token is available
72
+ *
73
+ * @param timeout - Optional max wait time in ms (default: no timeout)
74
+ * @returns Promise that resolves when token is consumed
75
+ * @throws {RateLimitError} If timeout is exceeded
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * // Wait indefinitely for token
80
+ * await limiter.consume();
81
+ *
82
+ * // Wait max 5 seconds
83
+ * try {
84
+ * await limiter.consume(5000);
85
+ * } catch (error) {
86
+ * console.log('Timeout waiting for rate limit');
87
+ * }
88
+ * ```
89
+ */
90
+ consume(timeout?: number): Promise<void>;
91
+ /**
92
+ * Get the number of tokens currently available
93
+ * Refills tokens before returning count
94
+ *
95
+ * @returns Number of tokens available (may be fractional before consumption)
96
+ */
97
+ getAvailableTokens(): number;
98
+ /**
99
+ * Get rate limiter configuration
100
+ *
101
+ * @returns Configuration object with rate and burst capacity
102
+ */
103
+ getConfig(): {
104
+ tokensPerSecond: number;
105
+ maxBurst: number;
106
+ };
107
+ /**
108
+ * Reset the rate limiter to full capacity
109
+ * Useful for testing or manual reset scenarios
110
+ */
111
+ reset(): void;
112
+ /**
113
+ * Refill tokens based on elapsed time since last refill
114
+ * Called automatically before token consumption
115
+ */
116
+ private refill;
117
+ /**
118
+ * Sleep helper for async waiting
119
+ */
120
+ private sleep;
121
+ }
122
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAQ5B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,sBAAsB;IAmB/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAnB3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC;;;;;;;;;;;;OAYG;gBAEgB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM;IAcnC;;;;;;;;;;;;;OAaG;IACI,UAAU,IAAI,OAAO;IAW5B;;;;;;;;;;;;;;;;;;;OAmBG;IACU,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCrD;;;;;OAKG;IACI,kBAAkB,IAAI,MAAM;IAKnC;;;;OAIG;IACI,SAAS,IAAI;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAOjE;;;OAGG;IACI,KAAK,IAAI,IAAI;IAKpB;;;OAGG;IACH,OAAO,CAAC,MAAM;IAcd;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}