@teneo-protocol/sdk 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/.eslintrc.json +11 -2
  2. package/.github/CODEOWNERS +2 -0
  3. package/.github/ISSUE_TEMPLATE/01-bug.yml +85 -0
  4. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  6. package/.github/workflows/claude-code-review.yml +8 -3
  7. package/.github/workflows/claude-reviewer.yml +6 -4
  8. package/.github/workflows/publish-npm.yml +1 -0
  9. package/.github/workflows/push-to-main.yml +1 -1
  10. package/.github/workflows/top-issue.yml +102 -0
  11. package/CHANGELOG.md +69 -0
  12. package/CONCEPTS.md +747 -0
  13. package/README.md +178 -8
  14. package/dist/constants.js +8 -8
  15. package/dist/constants.js.map +1 -1
  16. package/dist/core/websocket-client.d.ts +15 -3
  17. package/dist/core/websocket-client.d.ts.map +1 -1
  18. package/dist/core/websocket-client.js +52 -13
  19. package/dist/core/websocket-client.js.map +1 -1
  20. package/dist/formatters/response-formatter.js +4 -0
  21. package/dist/formatters/response-formatter.js.map +1 -1
  22. package/dist/handlers/message-handler-registry.js +2 -1
  23. package/dist/handlers/message-handler-registry.js.map +1 -1
  24. package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1666 -0
  25. package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -0
  26. package/dist/handlers/message-handlers/agent-details-response-handler.js +38 -0
  27. package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -0
  28. package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -1
  29. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +2 -5
  30. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -1
  31. package/dist/handlers/message-handlers/agent-selected-handler.js +2 -5
  32. package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -1
  33. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +783 -0
  34. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -1
  35. package/dist/handlers/message-handlers/agent-status-update-handler.js +2 -5
  36. package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -1
  37. package/dist/handlers/message-handlers/agents-list-handler.js +2 -5
  38. package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -1
  39. package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +439 -0
  40. package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -0
  41. package/dist/handlers/message-handlers/all-agents-response-handler.js +36 -0
  42. package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -0
  43. package/dist/handlers/message-handlers/auth-error-handler.js +2 -5
  44. package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -1
  45. package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
  46. package/dist/handlers/message-handlers/auth-message-handler.js +6 -5
  47. package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
  48. package/dist/handlers/message-handlers/auth-required-handler.js +2 -5
  49. package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -1
  50. package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
  51. package/dist/handlers/message-handlers/auth-success-handler.js +6 -5
  52. package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
  53. package/dist/handlers/message-handlers/base-handler.d.ts +4 -4
  54. package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
  55. package/dist/handlers/message-handlers/base-handler.js +3 -1
  56. package/dist/handlers/message-handlers/base-handler.js.map +1 -1
  57. package/dist/handlers/message-handlers/challenge-handler.js +3 -2
  58. package/dist/handlers/message-handlers/challenge-handler.js.map +1 -1
  59. package/dist/handlers/message-handlers/error-message-handler.js +2 -5
  60. package/dist/handlers/message-handlers/error-message-handler.js.map +1 -1
  61. package/dist/handlers/message-handlers/index.d.ts +6 -0
  62. package/dist/handlers/message-handlers/index.d.ts.map +1 -1
  63. package/dist/handlers/message-handlers/index.js +33 -1
  64. package/dist/handlers/message-handlers/index.js.map +1 -1
  65. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +783 -0
  66. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -1
  67. package/dist/handlers/message-handlers/list-available-agents-handler.js +2 -5
  68. package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -1
  69. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +783 -0
  70. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -1
  71. package/dist/handlers/message-handlers/list-room-agents-handler.js +2 -5
  72. package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -1
  73. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +2 -199
  74. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
  75. package/dist/handlers/message-handlers/list-rooms-response-handler.js +4 -6
  76. package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
  77. package/dist/handlers/message-handlers/ping-pong-handler.js +4 -10
  78. package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
  79. package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts +94 -0
  80. package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -0
  81. package/dist/handlers/message-handlers/rate-limit-notification-handler.js +35 -0
  82. package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -0
  83. package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
  84. package/dist/handlers/message-handlers/regular-message-handler.js +4 -6
  85. package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
  86. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -1
  87. package/dist/handlers/message-handlers/room-operation-response-handler.js +2 -5
  88. package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -1
  89. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
  90. package/dist/handlers/message-handlers/subscribe-response-handler.js +4 -6
  91. package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -1
  92. package/dist/handlers/message-handlers/task-quote-handler.d.ts +14 -0
  93. package/dist/handlers/message-handlers/task-quote-handler.d.ts.map +1 -0
  94. package/dist/handlers/message-handlers/task-quote-handler.js +29 -0
  95. package/dist/handlers/message-handlers/task-quote-handler.js.map +1 -0
  96. package/dist/handlers/message-handlers/task-response-handler.js +2 -5
  97. package/dist/handlers/message-handlers/task-response-handler.js.map +1 -1
  98. package/dist/handlers/message-handlers/types.d.ts +21 -9
  99. package/dist/handlers/message-handlers/types.d.ts.map +1 -1
  100. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
  101. package/dist/handlers/message-handlers/unsubscribe-response-handler.js +4 -6
  102. package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -1
  103. package/dist/handlers/message-handlers/user-authenticated-handler.d.ts +40 -0
  104. package/dist/handlers/message-handlers/user-authenticated-handler.d.ts.map +1 -0
  105. package/dist/handlers/message-handlers/user-authenticated-handler.js +28 -0
  106. package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -0
  107. package/dist/handlers/message-handlers/user-count-handler.d.ts +49 -0
  108. package/dist/handlers/message-handlers/user-count-handler.d.ts.map +1 -0
  109. package/dist/handlers/message-handlers/user-count-handler.js +31 -0
  110. package/dist/handlers/message-handlers/user-count-handler.js.map +1 -0
  111. package/dist/handlers/webhook-handler.d.ts +1 -1
  112. package/dist/handlers/webhook-handler.d.ts.map +1 -1
  113. package/dist/handlers/webhook-handler.js +14 -5
  114. package/dist/handlers/webhook-handler.js.map +1 -1
  115. package/dist/index.d.ts +6 -1
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +19 -2
  118. package/dist/index.js.map +1 -1
  119. package/dist/managers/admin-manager.d.ts +116 -0
  120. package/dist/managers/admin-manager.d.ts.map +1 -0
  121. package/dist/managers/admin-manager.js +169 -0
  122. package/dist/managers/admin-manager.js.map +1 -0
  123. package/dist/managers/agent-registry.d.ts +52 -1
  124. package/dist/managers/agent-registry.d.ts.map +1 -1
  125. package/dist/managers/agent-registry.js +145 -6
  126. package/dist/managers/agent-registry.js.map +1 -1
  127. package/dist/managers/agent-room-manager.d.ts +1 -7
  128. package/dist/managers/agent-room-manager.d.ts.map +1 -1
  129. package/dist/managers/agent-room-manager.js +83 -36
  130. package/dist/managers/agent-room-manager.js.map +1 -1
  131. package/dist/managers/connection-manager.js +2 -0
  132. package/dist/managers/connection-manager.js.map +1 -1
  133. package/dist/managers/index.d.ts +2 -1
  134. package/dist/managers/index.d.ts.map +1 -1
  135. package/dist/managers/index.js +3 -1
  136. package/dist/managers/index.js.map +1 -1
  137. package/dist/managers/message-router.d.ts +56 -5
  138. package/dist/managers/message-router.d.ts.map +1 -1
  139. package/dist/managers/message-router.js +155 -8
  140. package/dist/managers/message-router.js.map +1 -1
  141. package/dist/managers/room-management-manager.d.ts.map +1 -1
  142. package/dist/managers/room-management-manager.js +9 -7
  143. package/dist/managers/room-management-manager.js.map +1 -1
  144. package/dist/managers/room-manager.d.ts +7 -5
  145. package/dist/managers/room-manager.d.ts.map +1 -1
  146. package/dist/managers/room-manager.js +14 -10
  147. package/dist/managers/room-manager.js.map +1 -1
  148. package/dist/payments/index.d.ts +5 -0
  149. package/dist/payments/index.d.ts.map +1 -0
  150. package/dist/payments/index.js +21 -0
  151. package/dist/payments/index.js.map +1 -0
  152. package/dist/payments/payment-client.d.ts +74 -0
  153. package/dist/payments/payment-client.d.ts.map +1 -0
  154. package/dist/payments/payment-client.js +207 -0
  155. package/dist/payments/payment-client.js.map +1 -0
  156. package/dist/teneo-sdk.d.ts +135 -21
  157. package/dist/teneo-sdk.d.ts.map +1 -1
  158. package/dist/teneo-sdk.js +268 -26
  159. package/dist/teneo-sdk.js.map +1 -1
  160. package/dist/types/categories.d.ts +22 -0
  161. package/dist/types/categories.d.ts.map +1 -0
  162. package/dist/types/categories.js +40 -0
  163. package/dist/types/categories.js.map +1 -0
  164. package/dist/types/config.d.ts +79 -8
  165. package/dist/types/config.d.ts.map +1 -1
  166. package/dist/types/config.js +62 -5
  167. package/dist/types/config.js.map +1 -1
  168. package/dist/types/error-codes.d.ts +8 -0
  169. package/dist/types/error-codes.d.ts.map +1 -1
  170. package/dist/types/error-codes.js +9 -0
  171. package/dist/types/error-codes.js.map +1 -1
  172. package/dist/types/events.d.ts +44 -0
  173. package/dist/types/events.d.ts.map +1 -1
  174. package/dist/types/events.js +19 -1
  175. package/dist/types/events.js.map +1 -1
  176. package/dist/types/index.d.ts +3 -2
  177. package/dist/types/index.d.ts.map +1 -1
  178. package/dist/types/index.js +33 -3
  179. package/dist/types/index.js.map +1 -1
  180. package/dist/types/messages.d.ts +11219 -423
  181. package/dist/types/messages.d.ts.map +1 -1
  182. package/dist/types/messages.js +249 -7
  183. package/dist/types/messages.js.map +1 -1
  184. package/dist/utils/bounded-queue.d.ts.map +1 -1
  185. package/dist/utils/bounded-queue.js +5 -2
  186. package/dist/utils/bounded-queue.js.map +1 -1
  187. package/dist/utils/circuit-breaker.js +11 -4
  188. package/dist/utils/circuit-breaker.js.map +1 -1
  189. package/dist/utils/deduplication-cache.js +3 -1
  190. package/dist/utils/deduplication-cache.js.map +1 -1
  191. package/dist/utils/event-waiter.d.ts +3 -3
  192. package/dist/utils/event-waiter.d.ts.map +1 -1
  193. package/dist/utils/index.d.ts +1 -0
  194. package/dist/utils/index.d.ts.map +1 -1
  195. package/dist/utils/index.js +4 -1
  196. package/dist/utils/index.js.map +1 -1
  197. package/dist/utils/logger.js.map +1 -1
  198. package/dist/utils/pricing-resolver.d.ts +26 -0
  199. package/dist/utils/pricing-resolver.d.ts.map +1 -0
  200. package/dist/utils/pricing-resolver.js +85 -0
  201. package/dist/utils/pricing-resolver.js.map +1 -0
  202. package/dist/utils/rate-limiter.d.ts.map +1 -1
  203. package/dist/utils/rate-limiter.js +6 -0
  204. package/dist/utils/rate-limiter.js.map +1 -1
  205. package/dist/utils/retry-policy.js +1 -0
  206. package/dist/utils/retry-policy.js.map +1 -1
  207. package/dist/utils/secure-private-key.js +3 -1
  208. package/dist/utils/secure-private-key.js.map +1 -1
  209. package/dist/utils/signature-verifier.d.ts.map +1 -1
  210. package/dist/utils/signature-verifier.js +3 -1
  211. package/dist/utils/signature-verifier.js.map +1 -1
  212. package/examples/.env.example +1 -1
  213. package/examples/agent-room-management-example.ts +10 -9
  214. package/examples/basic-usage.ts +3 -4
  215. package/examples/claude-agent-x-follower/.env.example +1 -1
  216. package/examples/claude-agent-x-follower/QUICKSTART.md +2 -2
  217. package/examples/claude-agent-x-follower/README.md +2 -2
  218. package/examples/claude-agent-x-follower/index.ts +120 -96
  219. package/examples/n8n-teneo/.env.example +1 -1
  220. package/examples/n8n-teneo/README.md +1 -1
  221. package/examples/n8n-teneo/index.ts +54 -44
  222. package/examples/nestjs-dashboard/.env.example +11 -0
  223. package/examples/nestjs-dashboard/README.md +297 -0
  224. package/examples/nestjs-dashboard/nest-cli.json +10 -0
  225. package/examples/nestjs-dashboard/package.json +44 -0
  226. package/examples/nestjs-dashboard/pnpm-lock.yaml +3079 -0
  227. package/examples/nestjs-dashboard/src/app.controller.ts +24 -0
  228. package/examples/nestjs-dashboard/src/app.module.ts +15 -0
  229. package/examples/nestjs-dashboard/src/main.ts +32 -0
  230. package/examples/nestjs-dashboard/src/public/dashboard.html +1144 -0
  231. package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +54 -0
  232. package/examples/nestjs-dashboard/src/teneo/events.controller.ts +65 -0
  233. package/examples/nestjs-dashboard/src/teneo/messages.controller.ts +47 -0
  234. package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +258 -0
  235. package/examples/nestjs-dashboard/src/teneo/teneo.module.ts +13 -0
  236. package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +484 -0
  237. package/examples/nestjs-dashboard/tsconfig.json +22 -0
  238. package/examples/openai-teneo/.env.example +1 -1
  239. package/examples/openai-teneo/README.md +2 -2
  240. package/examples/openai-teneo/index.ts +82 -71
  241. package/examples/production-dashboard/.env.example +1 -1
  242. package/examples/production-dashboard/README.md +1 -1
  243. package/examples/production-dashboard/server.ts +2 -2
  244. package/examples/room-management-example.ts +5 -8
  245. package/examples/usage/.env.example +1 -1
  246. package/examples/usage/01-connect.ts +3 -4
  247. package/examples/usage/02-list-agents.ts +2 -3
  248. package/examples/usage/03-pick-agent.ts +2 -3
  249. package/examples/usage/04-find-by-capability.ts +2 -3
  250. package/examples/usage/05-webhook-example.ts +2 -3
  251. package/examples/usage/06-simple-api-server.ts +2 -3
  252. package/examples/usage/07-event-listener.ts +2 -3
  253. package/examples/webhook-integration.ts +1 -1
  254. package/examples/x-influencer-battle-server.ts +2 -2
  255. package/package.json +4 -1
  256. package/src/core/websocket-client.test.ts +8 -3
  257. package/src/core/websocket-client.ts +36 -6
  258. package/src/formatters/response-formatter.test.ts +2 -0
  259. package/src/formatters/response-formatter.ts +3 -3
  260. package/src/handlers/message-handlers/agent-details-response-handler.ts +42 -0
  261. package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +2 -8
  262. package/src/handlers/message-handlers/agent-status-update-handler.ts +3 -9
  263. package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
  264. package/src/handlers/message-handlers/auth-message-handler.ts +5 -0
  265. package/src/handlers/message-handlers/auth-success-handler.ts +6 -1
  266. package/src/handlers/message-handlers/base-handler.ts +20 -7
  267. package/src/handlers/message-handlers/index.ts +34 -0
  268. package/src/handlers/message-handlers/list-room-agents-handler.ts +2 -5
  269. package/src/handlers/message-handlers/list-rooms-response-handler.ts +4 -2
  270. package/src/handlers/message-handlers/rate-limit-notification-handler.ts +45 -0
  271. package/src/handlers/message-handlers/regular-message-handler.ts +3 -2
  272. package/src/handlers/message-handlers/room-operation-response-handler.ts +3 -6
  273. package/src/handlers/message-handlers/subscribe-response-handler.ts +12 -2
  274. package/src/handlers/message-handlers/task-quote-handler.ts +31 -0
  275. package/src/handlers/message-handlers/types.ts +37 -9
  276. package/src/handlers/message-handlers/unsubscribe-response-handler.ts +12 -2
  277. package/src/handlers/message-handlers/user-authenticated-handler.ts +31 -0
  278. package/src/handlers/message-handlers/user-count-handler.ts +34 -0
  279. package/src/handlers/webhook-handler.test.ts +3 -2
  280. package/src/handlers/webhook-handler.ts +13 -7
  281. package/src/index.ts +21 -0
  282. package/src/managers/admin-manager.ts +249 -0
  283. package/src/managers/agent-registry.test.ts +2 -1
  284. package/src/managers/agent-registry.ts +170 -2
  285. package/src/managers/agent-room-manager.ts +98 -42
  286. package/src/managers/index.ts +13 -1
  287. package/src/managers/message-router.ts +215 -17
  288. package/src/managers/room-management-manager.ts +4 -7
  289. package/src/managers/room-manager.ts +11 -15
  290. package/src/payments/index.ts +22 -0
  291. package/src/payments/payment-client.ts +240 -0
  292. package/src/teneo-sdk.ts +302 -27
  293. package/src/types/categories.ts +45 -0
  294. package/src/types/config.ts +70 -2
  295. package/src/types/error-codes.ts +10 -0
  296. package/src/types/events.test.ts +1 -0
  297. package/src/types/events.ts +43 -0
  298. package/src/types/index.ts +56 -0
  299. package/src/types/messages.test.ts +2 -1
  300. package/src/types/messages.ts +307 -5
  301. package/src/utils/bounded-queue.test.ts +1 -1
  302. package/src/utils/bounded-queue.ts +2 -1
  303. package/src/utils/circuit-breaker.test.ts +1 -1
  304. package/src/utils/deduplication-cache.test.ts +1 -1
  305. package/src/utils/event-waiter.test.ts +1 -1
  306. package/src/utils/event-waiter.ts +3 -3
  307. package/src/utils/index.ts +7 -0
  308. package/src/utils/logger.ts +8 -8
  309. package/src/utils/pricing-resolver.ts +128 -0
  310. package/src/utils/rate-limiter.test.ts +1 -1
  311. package/src/utils/rate-limiter.ts +1 -0
  312. package/src/utils/signature-verifier.test.ts +2 -2
  313. package/src/utils/signature-verifier.ts +3 -2
  314. package/tests/.env.example +7 -0
  315. package/tests/direct-agent-test.ts +151 -0
  316. package/tests/integration/real-server.test.ts +2 -0
  317. package/tests/integration/room-management.test.ts +10 -8
  318. package/tests/integration/websocket.test.ts +4 -1
  319. package/tests/payment-flow-test.ts +147 -0
  320. package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +17 -29
  321. package/tests/unit/handlers/agent-status-update-handler.test.ts +2 -6
  322. package/tests/unit/handlers/auth-success-handler-rooms.test.ts +1 -3
  323. package/tests/unit/handlers/list-available-agents-handler.test.ts +4 -12
  324. package/tests/unit/handlers/list-room-agents-handler.test.ts +2 -6
  325. package/tests/unit/handlers/room-operation-response-handler.test.ts +9 -36
  326. package/tests/unit/managers/agent-room-manager.test.ts +9 -16
  327. package/tests/unit/managers/room-management-manager.test.ts +21 -39
  328. package/tsconfig.json +2 -2
  329. package/vitest.config.ts +1 -0
@@ -55,9 +55,11 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
55
55
  private signatureVerifier?: SignatureVerifier;
56
56
  private deduplicationCache?: DeduplicationCache;
57
57
  private reconnectPolicy: RetryPolicy;
58
- private roomManager?: any; // Reference to RoomManager for handler context
59
- private roomManagementManager?: any; // Reference to RoomManagementManager for handler context (v2.0.0)
60
- private agentRoomManager?: any; // Reference to AgentRoomManager for handler context (v2.0.0)
58
+ private roomManager?: import("../managers/room-manager").RoomManager; // Reference to RoomManager for handler context
59
+ private roomManagementManager?: import("../managers/room-management-manager").RoomManagementManager; // Reference to RoomManagementManager for handler context (v2.0.0)
60
+ private agentRoomManager?: import("../managers/agent-room-manager").AgentRoomManager; // Reference to AgentRoomManager for handler context (v2.0.0)
61
+ private adminManager?: import("../managers/admin-manager").AdminManager; // Reference to AdminManager for admin handlers
62
+ private agentRegistry?: import("../managers/agent-registry").AgentRegistry; // Reference to AgentRegistry for agent details handler
61
63
  private intentionalDisconnect: boolean = false; // Track intentional disconnect to prevent reconnection
62
64
 
63
65
  private connectionState: ConnectionState = {
@@ -75,6 +77,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
75
77
  private pendingMessages = new Map<
76
78
  string,
77
79
  {
80
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
81
  resolve: (value: any) => void;
79
82
  reject: (error: Error) => void;
80
83
  timeout: NodeJS.Timeout;
@@ -161,6 +164,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
161
164
  // Initialize signature verifier if configured (SEC-2)
162
165
  if (this.config.validateSignatures) {
163
166
  this.signatureVerifier = new SignatureVerifier({
167
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
164
168
  trustedAddresses: this.config.trustedAgentAddresses as any[],
165
169
  requireSignaturesFor: this.config.requireSignaturesFor,
166
170
  strictMode: this.config.strictSignatureValidation
@@ -209,7 +213,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
209
213
  * Set the RoomManager instance for handler context
210
214
  * Called by TeneoSDK after initialization
211
215
  */
212
- public setRoomManager(roomManager: any): void {
216
+ public setRoomManager(roomManager: import("../managers/room-manager").RoomManager): void {
213
217
  this.roomManager = roomManager;
214
218
  }
215
219
 
@@ -217,7 +221,9 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
217
221
  * Sets the room management manager for room CRUD operations (v2.0.0)
218
222
  * @internal
219
223
  */
220
- public setRoomManagementManager(roomManagementManager: any): void {
224
+ public setRoomManagementManager(
225
+ roomManagementManager: import("../managers/room-management-manager").RoomManagementManager
226
+ ): void {
221
227
  this.roomManagementManager = roomManagementManager;
222
228
  }
223
229
 
@@ -225,10 +231,28 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
225
231
  * Sets the agent room manager for agent-room operations (v2.0.0)
226
232
  * @internal
227
233
  */
228
- public setAgentRoomManager(agentRoomManager: any): void {
234
+ public setAgentRoomManager(
235
+ agentRoomManager: import("../managers/agent-room-manager").AgentRoomManager
236
+ ): void {
229
237
  this.agentRoomManager = agentRoomManager;
230
238
  }
231
239
 
240
+ /**
241
+ * Sets the admin manager for admin-only features
242
+ * @internal
243
+ */
244
+ public setAdminManager(adminManager: import("../managers/admin-manager").AdminManager): void {
245
+ this.adminManager = adminManager;
246
+ }
247
+
248
+ /**
249
+ * Sets the agent registry for agent details lookups
250
+ * @internal
251
+ */
252
+ public setAgentRegistry(agentRegistry: import("../managers/agent-registry").AgentRegistry): void {
253
+ this.agentRegistry = agentRegistry;
254
+ }
255
+
232
256
  /**
233
257
  * Establishes a WebSocket connection to the Teneo server.
234
258
  * Handles connection timeout, authentication challenge-response flow,
@@ -544,6 +568,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
544
568
  * console.log('Response received:', response);
545
569
  * ```
546
570
  */
571
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
547
572
  public async sendMessageWithResponse<T = any>(
548
573
  message: BaseMessage,
549
574
  timeout?: number
@@ -663,6 +688,7 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
663
688
  */
664
689
  private createHandlerContext(): HandlerContext {
665
690
  return {
691
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
666
692
  emit: (event: string, ...args: any[]) => this.emit(event as any, ...args),
667
693
  sendWebhook: async () => {
668
694
  // Webhooks are handled by WebhookHandler in TeneoSDK
@@ -672,11 +698,15 @@ export class WebSocketClient extends EventEmitter<SDKEvents> {
672
698
  logger: this.logger,
673
699
  getConnectionState: () => this.getConnectionState(),
674
700
  getAuthState: () => this.getAuthState(),
701
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
675
702
  updateConnectionState: (update: any) => this.updateConnectionState(update),
703
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
676
704
  updateAuthState: (update: any) => this.updateAuthState(update),
677
705
  roomManager: this.roomManager,
678
706
  roomManagementManager: this.roomManagementManager,
679
707
  agentRoomManager: this.agentRoomManager,
708
+ adminManager: this.adminManager,
709
+ agentRegistry: this.agentRegistry,
680
710
  account: this.account,
681
711
  sendMessage: (message: BaseMessage) => this.sendMessage(message)
682
712
  };
@@ -29,6 +29,7 @@ describe("ResponseFormatter", () => {
29
29
  });
30
30
 
31
31
  it("should validate format option", () => {
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
33
  expect(() => new ResponseFormatter({ format: "invalid" as any })).toThrow();
33
34
  });
34
35
  });
@@ -303,6 +304,7 @@ describe("ResponseFormatter", () => {
303
304
 
304
305
  it("should handle unknown message types", () => {
305
306
  const unknown: BaseMessage = {
307
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
306
308
  type: "unknown" as any,
307
309
  content: "Unknown content",
308
310
  data: { key: "value" }
@@ -296,7 +296,7 @@ export class ResponseFormatter {
296
296
  /**
297
297
  * Format raw message (no transformation)
298
298
  */
299
- private formatRaw(message: BaseMessage): any {
299
+ private formatRaw(message: BaseMessage): BaseMessage {
300
300
  return message;
301
301
  }
302
302
 
@@ -467,7 +467,7 @@ export class ResponseFormatter {
467
467
  /**
468
468
  * Format JSON object for display
469
469
  */
470
- private formatJSON(obj: any, indent = 0): string {
470
+ private formatJSON(obj: unknown, indent = 0): string {
471
471
  if (obj === null || obj === undefined) {
472
472
  return "null";
473
473
  }
@@ -497,7 +497,7 @@ export class ResponseFormatter {
497
497
  /**
498
498
  * Format array for display
499
499
  */
500
- private formatArray(arr: any[], indent = 0): string {
500
+ private formatArray(arr: unknown[], indent = 0): string {
501
501
  if (arr.length === 0) {
502
502
  return "[]";
503
503
  }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Handler for agent_details_response messages
3
+ * Processes detailed agent information from the server
4
+ */
5
+
6
+ import { AgentDetailsResponseMessage, AgentDetailsResponseMessageSchema } from "../../types";
7
+ import { BaseMessageHandler } from "./base-handler";
8
+ import { HandlerContext } from "./types";
9
+
10
+ export class AgentDetailsResponseHandler extends BaseMessageHandler<AgentDetailsResponseMessage> {
11
+ readonly type = "agent_details_response" as const;
12
+ readonly schema = AgentDetailsResponseMessageSchema;
13
+
14
+ protected handleValidated(message: AgentDetailsResponseMessage, context: HandlerContext): void {
15
+ if (!message.data?.agent) {
16
+ context.logger.warn("Received agent_details_response without agent data");
17
+ return;
18
+ }
19
+
20
+ const { agent } = message.data;
21
+
22
+ context.logger.debug("Handling agent_details_response", {
23
+ agentId: agent.agent_id,
24
+ agentName: agent.agent_name
25
+ });
26
+
27
+ // Delegate to agent registry if available
28
+ const agentRegistry = context.agentRegistry;
29
+ if (agentRegistry && typeof agentRegistry.handleAgentDetails === "function") {
30
+ agentRegistry.handleAgentDetails(agent);
31
+ }
32
+
33
+ context.logger.info("Agent details received", {
34
+ agentId: agent.agent_id,
35
+ agentName: agent.agent_name,
36
+ status: agent.status
37
+ });
38
+
39
+ // Send webhook
40
+ this.sendWebhook(context, "agent_details_response", { agent });
41
+ }
42
+ }
@@ -3,10 +3,7 @@
3
3
  * Processes responses from agent-room operations (add, remove)
4
4
  */
5
5
 
6
- import {
7
- AgentRoomOperationResponse,
8
- AgentRoomOperationResponseSchema
9
- } from "../../types";
6
+ import { AgentRoomOperationResponse, AgentRoomOperationResponseSchema } from "../../types";
10
7
  import { BaseMessageHandler } from "./base-handler";
11
8
  import { HandlerContext } from "./types";
12
9
  import { SDKError } from "../../types/events";
@@ -16,10 +13,7 @@ export class AgentRoomOperationResponseHandler extends BaseMessageHandler<AgentR
16
13
  readonly type = "agent_room_operation_response" as const;
17
14
  readonly schema = AgentRoomOperationResponseSchema;
18
15
 
19
- protected handleValidated(
20
- message: AgentRoomOperationResponse,
21
- context: HandlerContext
22
- ): void {
16
+ protected handleValidated(message: AgentRoomOperationResponse, context: HandlerContext): void {
23
17
  const { success, message: errorMessage, room_id, agent_id } = message.data;
24
18
 
25
19
  context.logger.debug("Handling agent_room_operation_response", {
@@ -3,10 +3,7 @@
3
3
  * Processes real-time agent status updates for rooms
4
4
  */
5
5
 
6
- import {
7
- AgentStatusUpdateMessage,
8
- AgentStatusUpdateMessageSchema
9
- } from "../../types";
6
+ import { AgentStatusUpdateMessage, AgentStatusUpdateMessageSchema } from "../../types";
10
7
  import { BaseMessageHandler } from "./base-handler";
11
8
  import { HandlerContext } from "./types";
12
9
 
@@ -14,10 +11,7 @@ export class AgentStatusUpdateHandler extends BaseMessageHandler<AgentStatusUpda
14
11
  readonly type = "agent_status_update" as const;
15
12
  readonly schema = AgentStatusUpdateMessageSchema;
16
13
 
17
- protected handleValidated(
18
- message: AgentStatusUpdateMessage,
19
- context: HandlerContext
20
- ): void {
14
+ protected handleValidated(message: AgentStatusUpdateMessage, context: HandlerContext): void {
21
15
  const { room_id, agent_id, status, agent } = message.data;
22
16
 
23
17
  context.logger.debug("Handling agent_status_update", {
@@ -28,7 +22,7 @@ export class AgentStatusUpdateHandler extends BaseMessageHandler<AgentStatusUpda
28
22
  });
29
23
 
30
24
  // Invalidate cache for this room via agent room manager
31
- const agentRoomManager = (context as any).agentRoomManager;
25
+ const agentRoomManager = context.agentRoomManager;
32
26
  if (agentRoomManager && typeof agentRoomManager.handleStatusUpdate === "function") {
33
27
  agentRoomManager.handleStatusUpdate(room_id, agent_id, status);
34
28
  }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Handler for all_agents_response messages (Admin only)
3
+ * Processes paginated agent list for admin users
4
+ */
5
+
6
+ import { AllAgentsResponse, AllAgentsResponseSchema } from "../../types";
7
+ import { BaseMessageHandler } from "./base-handler";
8
+ import { HandlerContext } from "./types";
9
+
10
+ export class AllAgentsResponseHandler extends BaseMessageHandler<AllAgentsResponse> {
11
+ readonly type = "all_agents_response" as const;
12
+ readonly schema = AllAgentsResponseSchema;
13
+
14
+ protected handleValidated(message: AllAgentsResponse, context: HandlerContext): void {
15
+ const { agents, total, offset, has_more, filter } = message.data;
16
+
17
+ context.logger.debug("Handling all_agents_response", {
18
+ count: agents.length,
19
+ total,
20
+ offset,
21
+ hasMore: has_more
22
+ });
23
+
24
+ // Delegate to admin manager if available
25
+ const adminManager = context.adminManager;
26
+ if (adminManager && typeof adminManager.handleAllAgentsResponse === "function") {
27
+ adminManager.handleAllAgentsResponse(message.data, message.request_id);
28
+ }
29
+
30
+ context.logger.info("All agents response received", {
31
+ count: agents.length,
32
+ total,
33
+ filter
34
+ });
35
+
36
+ // Send webhook
37
+ this.sendWebhook(context, "all_agents_response", message.data);
38
+ }
39
+ }
@@ -93,6 +93,11 @@ export class AuthMessageHandler extends BaseMessageHandler<AuthMessage> {
93
93
  // Get updated auth state
94
94
  const authState = context.getAuthState();
95
95
 
96
+ // Update admin manager with admin status
97
+ if (context.adminManager) {
98
+ context.adminManager.setAdminStatus(message.data?.is_admin_whitelisted ?? false);
99
+ }
100
+
96
101
  // Emit events
97
102
  this.emit(context, "auth:success", authState);
98
103
  this.emit(context, "ready");
@@ -48,8 +48,13 @@ export class AuthSuccessHandler extends BaseMessageHandler<AuthSuccessMessage> {
48
48
  // Get updated auth state
49
49
  const authState = context.getAuthState();
50
50
 
51
+ // Update admin manager with admin status
52
+ if (context.adminManager) {
53
+ context.adminManager.setAdminStatus(message.data.is_admin_whitelisted ?? false);
54
+ }
55
+
51
56
  // Initialize room management manager with room data (v2.0.0)
52
- const roomMgmt = (context as any).roomManagementManager;
57
+ const roomMgmt = context.roomManagementManager;
53
58
  if (roomMgmt) {
54
59
  // Set room limit
55
60
  if (message.data.max_private_rooms) {
@@ -71,31 +71,44 @@ export abstract class BaseMessageHandler<T extends BaseMessage = BaseMessage>
71
71
  /**
72
72
  * Helper: emit event
73
73
  */
74
- protected emit(context: HandlerContext, event: string, ...args: any[]): void {
74
+ protected emit(context: HandlerContext, event: string, ...args: unknown[]): void {
75
75
  context.emit(event, ...args);
76
76
  }
77
77
 
78
78
  /**
79
79
  * Helper: send webhook (fire-and-forget pattern)
80
80
  */
81
- protected sendWebhook(context: HandlerContext, type: string, data: any, metadata?: any): void {
81
+ protected sendWebhook(
82
+ context: HandlerContext,
83
+ type: string,
84
+ data: Record<string, unknown>,
85
+ metadata?: Record<string, unknown>
86
+ ): void {
82
87
  // Fire and forget - don't block event emission
83
- context.sendWebhook(type as any, data, metadata).catch((error) => {
84
- context.logger.error(`Failed to send webhook for ${this.type}`, error);
85
- });
88
+ context
89
+ .sendWebhook(type as Parameters<typeof context.sendWebhook>[0], data, metadata)
90
+ .catch((error) => {
91
+ context.logger.error(`Failed to send webhook for ${this.type}`, error);
92
+ });
86
93
  }
87
94
 
88
95
  /**
89
96
  * Helper: update connection state
90
97
  */
91
- protected updateConnectionState(context: HandlerContext, update: any): void {
98
+ protected updateConnectionState(
99
+ context: HandlerContext,
100
+ update: Partial<import("./types").ConnectionState>
101
+ ): void {
92
102
  context.updateConnectionState(update);
93
103
  }
94
104
 
95
105
  /**
96
106
  * Helper: update auth state
97
107
  */
98
- protected updateAuthState(context: HandlerContext, update: any): void {
108
+ protected updateAuthState(
109
+ context: HandlerContext,
110
+ update: Partial<import("./types").AuthState>
111
+ ): void {
99
112
  context.updateAuthState(update);
100
113
  }
101
114
  }
@@ -9,6 +9,7 @@ export * from "./base-handler";
9
9
 
10
10
  // Export all handlers
11
11
  export { TaskResponseHandler } from "./task-response-handler";
12
+ export { TaskQuoteHandler } from "./task-quote-handler";
12
13
  export { AgentSelectedHandler } from "./agent-selected-handler";
13
14
  export { ChallengeHandler } from "./challenge-handler";
14
15
  export { AuthMessageHandler } from "./auth-message-handler";
@@ -28,8 +29,22 @@ export { ListRoomAgentsHandler } from "./list-room-agents-handler";
28
29
  export { ListAvailableAgentsHandler } from "./list-available-agents-handler";
29
30
  export { AgentStatusUpdateHandler } from "./agent-status-update-handler";
30
31
 
32
+ // Agent Details handler
33
+ export { AgentDetailsResponseHandler } from "./agent-details-response-handler";
34
+
35
+ // Rate Limit handler
36
+ export { RateLimitNotificationHandler } from "./rate-limit-notification-handler";
37
+
38
+ // Admin handlers
39
+ export { AllAgentsResponseHandler } from "./all-agents-response-handler";
40
+ export { UserCountHandler } from "./user-count-handler";
41
+
42
+ // Presence handler
43
+ export { UserAuthenticatedHandler } from "./user-authenticated-handler";
44
+
31
45
  // Import for convenience function
32
46
  import { TaskResponseHandler } from "./task-response-handler";
47
+ import { TaskQuoteHandler } from "./task-quote-handler";
33
48
  import { AgentSelectedHandler } from "./agent-selected-handler";
34
49
  import { ChallengeHandler } from "./challenge-handler";
35
50
  import { AuthMessageHandler } from "./auth-message-handler";
@@ -48,6 +63,11 @@ import { AgentRoomOperationResponseHandler } from "./agent-room-operation-respon
48
63
  import { ListRoomAgentsHandler } from "./list-room-agents-handler";
49
64
  import { ListAvailableAgentsHandler } from "./list-available-agents-handler";
50
65
  import { AgentStatusUpdateHandler } from "./agent-status-update-handler";
66
+ import { AgentDetailsResponseHandler } from "./agent-details-response-handler";
67
+ import { RateLimitNotificationHandler } from "./rate-limit-notification-handler";
68
+ import { AllAgentsResponseHandler } from "./all-agents-response-handler";
69
+ import { UserCountHandler } from "./user-count-handler";
70
+ import { UserAuthenticatedHandler } from "./user-authenticated-handler";
51
71
  import { MessageHandler } from "./types";
52
72
 
53
73
  /**
@@ -68,6 +88,7 @@ export function getDefaultHandlers(
68
88
 
69
89
  // Agent/coordinator handlers
70
90
  new TaskResponseHandler(),
91
+ new TaskQuoteHandler(),
71
92
  new AgentSelectedHandler(),
72
93
  new AgentsListHandler(),
73
94
 
@@ -89,6 +110,19 @@ export function getDefaultHandlers(
89
110
  new ListAvailableAgentsHandler(),
90
111
  new AgentStatusUpdateHandler(),
91
112
 
113
+ // Agent Details handler
114
+ new AgentDetailsResponseHandler(),
115
+
116
+ // Rate Limit handler
117
+ new RateLimitNotificationHandler(),
118
+
119
+ // Admin handlers
120
+ new AllAgentsResponseHandler(),
121
+ new UserCountHandler(),
122
+
123
+ // Presence handler
124
+ new UserAuthenticatedHandler(),
125
+
92
126
  // Keepalive handlers
93
127
  new PingHandler(),
94
128
  new PongHandler()
@@ -14,10 +14,7 @@ export class ListRoomAgentsHandler extends BaseMessageHandler<RoomAgentsResponse
14
14
  readonly type = "room_agents_response" as const;
15
15
  readonly schema = RoomAgentsResponseSchema;
16
16
 
17
- protected handleValidated(
18
- message: RoomAgentsResponse,
19
- context: HandlerContext
20
- ): void {
17
+ protected handleValidated(message: RoomAgentsResponse, context: HandlerContext): void {
21
18
  const { room_id, agents } = message.data;
22
19
 
23
20
  context.logger.debug("Handling room_agents_response", {
@@ -43,7 +40,7 @@ export class ListRoomAgentsHandler extends BaseMessageHandler<RoomAgentsResponse
43
40
  });
44
41
 
45
42
  // Cache via agent room manager if available
46
- const agentRoomManager = (context as any).agentRoomManager;
43
+ const agentRoomManager = context.agentRoomManager;
47
44
  if (agentRoomManager && typeof agentRoomManager.cacheRoomAgents === "function") {
48
45
  agentRoomManager.cacheRoomAgents(room_id, agentList);
49
46
  }
@@ -3,16 +3,18 @@
3
3
  * Processes room list from server
4
4
  */
5
5
 
6
+ import { z } from "zod";
6
7
  import { ListRoomsResponse, ListRoomsResponseSchema } from "../../types";
7
8
  import { BaseMessageHandler } from "./base-handler";
8
9
  import { HandlerContext } from "./types";
9
10
 
10
11
  export class ListRoomsResponseHandler extends BaseMessageHandler<ListRoomsResponse> {
11
12
  readonly type = "list_rooms" as const;
12
- readonly schema = ListRoomsResponseSchema;
13
+ // Cast needed due to Zod transform creating input/output type mismatch
14
+ readonly schema = ListRoomsResponseSchema as z.ZodType<ListRoomsResponse>;
13
15
 
14
16
  protected handleValidated(message: ListRoomsResponse, context: HandlerContext): void {
15
- context.logger.debug("Handling list_rooms response", {
17
+ context.logger.debug("Handling list_rooms", {
16
18
  roomCount: message.data.rooms.length
17
19
  });
18
20
 
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Handler for rate_limit_notification messages
3
+ * Processes rate limit notifications from the server
4
+ */
5
+
6
+ import { RateLimitNotificationMessage, RateLimitNotificationMessageSchema } from "../../types";
7
+ import { BaseMessageHandler } from "./base-handler";
8
+ import { HandlerContext } from "./types";
9
+
10
+ export class RateLimitNotificationHandler extends BaseMessageHandler<RateLimitNotificationMessage> {
11
+ readonly type = "rate_limit_notification" as const;
12
+ readonly schema = RateLimitNotificationMessageSchema;
13
+
14
+ protected handleValidated(message: RateLimitNotificationMessage, context: HandlerContext): void {
15
+ const {
16
+ title,
17
+ message: msg,
18
+ cta_text,
19
+ cta_link,
20
+ message_type,
21
+ limit_type,
22
+ reset_at
23
+ } = message.data;
24
+
25
+ context.logger.warn("Rate limit notification received", {
26
+ title,
27
+ limitType: limit_type,
28
+ resetAt: reset_at
29
+ });
30
+
31
+ // Emit rate limit event with camelCase conversion
32
+ this.emit(context, "rate_limit", {
33
+ title,
34
+ message: msg,
35
+ ctaText: cta_text,
36
+ ctaLink: cta_link,
37
+ messageType: message_type,
38
+ limitType: limit_type,
39
+ resetAt: reset_at
40
+ });
41
+
42
+ // Send webhook
43
+ this.sendWebhook(context, "rate_limit_notification", message.data);
44
+ }
45
+ }
@@ -3,7 +3,7 @@
3
3
  * Processes messages from agents (when they send 'message' instead of 'task_response')
4
4
  */
5
5
 
6
- import { UserMessage, UserMessageSchema } from "../../types";
6
+ import { UserMessage, UserMessageSchema, TaskResponseMessage } from "../../types";
7
7
  import { AgentResponse } from "../../types/events";
8
8
  import { BaseMessageHandler } from "./base-handler";
9
9
  import { HandlerContext } from "./types";
@@ -54,7 +54,8 @@ export class RegularMessageHandler extends BaseMessageHandler<UserMessage> {
54
54
  contentType: message.content_type || "text/plain",
55
55
  success: true,
56
56
  timestamp: new Date(),
57
- raw: message as any, // Include raw message for request correlation
57
+ // Cast to TaskResponseMessage for request correlation (message format is compatible)
58
+ raw: message as unknown as TaskResponseMessage,
58
59
  humanized:
59
60
  typeof message.content === "string" ? message.content : JSON.stringify(message.content)
60
61
  };
@@ -13,10 +13,7 @@ export class RoomOperationResponseHandler extends BaseMessageHandler<RoomOperati
13
13
  readonly type = "room_operation_response" as const;
14
14
  readonly schema = RoomOperationResponseSchema;
15
15
 
16
- protected handleValidated(
17
- message: RoomOperationResponse,
18
- context: HandlerContext
19
- ): void {
16
+ protected handleValidated(message: RoomOperationResponse, context: HandlerContext): void {
20
17
  const { success, message: errorMessage, room_id, room } = message.data;
21
18
 
22
19
  context.logger.debug("Handling room_operation_response", {
@@ -62,7 +59,7 @@ export class RoomOperationResponseHandler extends BaseMessageHandler<RoomOperati
62
59
  // For now, handlers will emit both and listeners filter by room_id
63
60
 
64
61
  // Update cache via room management manager if available
65
- const roomManager = (context as any).roomManagementManager;
62
+ const roomManager = context.roomManagementManager;
66
63
  if (roomManager && typeof roomManager.upsertRoom === "function") {
67
64
  roomManager.upsertRoom(room);
68
65
  }
@@ -83,7 +80,7 @@ export class RoomOperationResponseHandler extends BaseMessageHandler<RoomOperati
83
80
  context.logger.info("Room deleted", { roomId: room_id });
84
81
 
85
82
  // Remove from cache
86
- const roomManager = (context as any).roomManagementManager;
83
+ const roomManager = context.roomManagementManager;
87
84
  if (roomManager && typeof roomManager.removeRoom === "function") {
88
85
  roomManager.removeRoom(room_id);
89
86
  }
@@ -3,7 +3,8 @@
3
3
  * Processes room subscription confirmations
4
4
  */
5
5
 
6
- import { SubscribeResponse, SubscribeResponseSchema } from "../../types";
6
+ import { SubscribeResponse, SubscribeResponseSchema, ErrorCode } from "../../types";
7
+ import { SDKError } from "../../types/events";
7
8
  import { BaseMessageHandler } from "./base-handler";
8
9
  import { HandlerContext } from "./types";
9
10
 
@@ -41,7 +42,16 @@ export class SubscribeResponseHandler extends BaseMessageHandler<SubscribeRespon
41
42
  });
42
43
 
43
44
  // Emit error event
44
- this.emit(context, "error", new Error(`Subscription failed: ${message.data.message}`));
45
+ this.emit(
46
+ context,
47
+ "error",
48
+ new SDKError(
49
+ `Subscription failed: ${message.data.message}`,
50
+ ErrorCode.OPERATION_FAILED,
51
+ { roomId: message.data.room_id },
52
+ true
53
+ )
54
+ );
45
55
  }
46
56
  }
47
57
  }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Handler for task_quote messages (v2.2.0)
3
+ * Processes quotes from the coordinator for the quote-approve payment flow
4
+ */
5
+
6
+ import { z } from "zod";
7
+ import { TaskQuoteMessage, TaskQuoteMessageSchema } from "../../types";
8
+ import { BaseMessageHandler } from "./base-handler";
9
+ import { HandlerContext } from "./types";
10
+
11
+ export class TaskQuoteHandler extends BaseMessageHandler<TaskQuoteMessage> {
12
+ readonly type = "task_quote" as const;
13
+ readonly schema = TaskQuoteMessageSchema as z.ZodSchema<TaskQuoteMessage>;
14
+
15
+ protected handleValidated(message: TaskQuoteMessage, context: HandlerContext): void {
16
+ context.logger.debug("Handling task_quote message", {
17
+ taskId: message.data.task_id,
18
+ agentId: message.data.agent_id,
19
+ price: message.data.pricing?.pricePerUnit
20
+ });
21
+
22
+ // Emit quote:received event for MessageRouter to pick up
23
+ this.emit(context, "quote:received", message);
24
+
25
+ // Send webhook (fire-and-forget)
26
+ this.sendWebhook(context, "task_quote", message.data, {
27
+ taskId: message.data.task_id,
28
+ agentId: message.data.agent_id
29
+ });
30
+ }
31
+ }