@teneo-protocol/sdk 1.0.1 → 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 (352) 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 +9 -6
  9. package/.github/workflows/push-to-main.yml +1 -1
  10. package/.github/workflows/top-issue.yml +102 -0
  11. package/CHANGELOG.md +334 -0
  12. package/CONCEPTS.md +747 -0
  13. package/README.md +577 -54
  14. package/dist/constants.js +8 -8
  15. package/dist/constants.js.map +1 -1
  16. package/dist/core/websocket-client.d.ts +25 -1
  17. package/dist/core/websocket-client.d.ts.map +1 -1
  18. package/dist/core/websocket-client.js +74 -15
  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 +76 -0
  29. package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -0
  30. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +67 -0
  31. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -0
  32. package/dist/handlers/message-handlers/agent-selected-handler.d.ts +92 -38
  33. package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -1
  34. package/dist/handlers/message-handlers/agent-selected-handler.js +2 -5
  35. package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -1
  36. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +1687 -0
  37. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -0
  38. package/dist/handlers/message-handlers/agent-status-update-handler.js +48 -0
  39. package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -0
  40. package/dist/handlers/message-handlers/agents-list-handler.js +2 -5
  41. package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -1
  42. package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +439 -0
  43. package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -0
  44. package/dist/handlers/message-handlers/all-agents-response-handler.js +36 -0
  45. package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -0
  46. package/dist/handlers/message-handlers/auth-error-handler.d.ts +45 -31
  47. package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -1
  48. package/dist/handlers/message-handlers/auth-error-handler.js +2 -5
  49. package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -1
  50. package/dist/handlers/message-handlers/auth-message-handler.d.ts +6 -0
  51. package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
  52. package/dist/handlers/message-handlers/auth-message-handler.js +71 -10
  53. package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
  54. package/dist/handlers/message-handlers/auth-required-handler.d.ts +49 -31
  55. package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -1
  56. package/dist/handlers/message-handlers/auth-required-handler.js +2 -5
  57. package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -1
  58. package/dist/handlers/message-handlers/auth-success-handler.d.ts +6 -0
  59. package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
  60. package/dist/handlers/message-handlers/auth-success-handler.js +52 -9
  61. package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
  62. package/dist/handlers/message-handlers/base-handler.d.ts +4 -4
  63. package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
  64. package/dist/handlers/message-handlers/base-handler.js +3 -1
  65. package/dist/handlers/message-handlers/base-handler.js.map +1 -1
  66. package/dist/handlers/message-handlers/challenge-handler.d.ts +45 -31
  67. package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -1
  68. package/dist/handlers/message-handlers/challenge-handler.js +3 -2
  69. package/dist/handlers/message-handlers/challenge-handler.js.map +1 -1
  70. package/dist/handlers/message-handlers/error-message-handler.d.ts +49 -31
  71. package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -1
  72. package/dist/handlers/message-handlers/error-message-handler.js +2 -5
  73. package/dist/handlers/message-handlers/error-message-handler.js.map +1 -1
  74. package/dist/handlers/message-handlers/index.d.ts +11 -0
  75. package/dist/handlers/message-handlers/index.d.ts.map +1 -1
  76. package/dist/handlers/message-handlers/index.js +55 -1
  77. package/dist/handlers/message-handlers/index.js.map +1 -1
  78. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +1660 -0
  79. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -0
  80. package/dist/handlers/message-handlers/list-available-agents-handler.js +35 -0
  81. package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -0
  82. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +1669 -0
  83. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -0
  84. package/dist/handlers/message-handlers/list-room-agents-handler.js +48 -0
  85. package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -0
  86. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +2 -110
  87. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
  88. package/dist/handlers/message-handlers/list-rooms-response-handler.js +4 -6
  89. package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
  90. package/dist/handlers/message-handlers/ping-pong-handler.d.ts +62 -58
  91. package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -1
  92. package/dist/handlers/message-handlers/ping-pong-handler.js +4 -10
  93. package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
  94. package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts +94 -0
  95. package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -0
  96. package/dist/handlers/message-handlers/rate-limit-notification-handler.js +35 -0
  97. package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -0
  98. package/dist/handlers/message-handlers/regular-message-handler.d.ts +31 -29
  99. package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
  100. package/dist/handlers/message-handlers/regular-message-handler.js +4 -6
  101. package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
  102. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts +328 -0
  103. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -0
  104. package/dist/handlers/message-handlers/room-operation-response-handler.js +89 -0
  105. package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -0
  106. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +53 -31
  107. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
  108. package/dist/handlers/message-handlers/subscribe-response-handler.js +4 -6
  109. package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -1
  110. package/dist/handlers/message-handlers/task-quote-handler.d.ts +14 -0
  111. package/dist/handlers/message-handlers/task-quote-handler.d.ts.map +1 -0
  112. package/dist/handlers/message-handlers/task-quote-handler.js +29 -0
  113. package/dist/handlers/message-handlers/task-quote-handler.js.map +1 -0
  114. package/dist/handlers/message-handlers/task-response-handler.js +2 -5
  115. package/dist/handlers/message-handlers/task-response-handler.js.map +1 -1
  116. package/dist/handlers/message-handlers/types.d.ts +21 -7
  117. package/dist/handlers/message-handlers/types.d.ts.map +1 -1
  118. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +53 -31
  119. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
  120. package/dist/handlers/message-handlers/unsubscribe-response-handler.js +4 -6
  121. package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -1
  122. package/dist/handlers/message-handlers/user-authenticated-handler.d.ts +40 -0
  123. package/dist/handlers/message-handlers/user-authenticated-handler.d.ts.map +1 -0
  124. package/dist/handlers/message-handlers/user-authenticated-handler.js +28 -0
  125. package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -0
  126. package/dist/handlers/message-handlers/user-count-handler.d.ts +49 -0
  127. package/dist/handlers/message-handlers/user-count-handler.d.ts.map +1 -0
  128. package/dist/handlers/message-handlers/user-count-handler.js +31 -0
  129. package/dist/handlers/message-handlers/user-count-handler.js.map +1 -0
  130. package/dist/handlers/webhook-handler.d.ts +1 -1
  131. package/dist/handlers/webhook-handler.d.ts.map +1 -1
  132. package/dist/handlers/webhook-handler.js +14 -5
  133. package/dist/handlers/webhook-handler.js.map +1 -1
  134. package/dist/index.d.ts +6 -1
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +19 -2
  137. package/dist/index.js.map +1 -1
  138. package/dist/managers/admin-manager.d.ts +116 -0
  139. package/dist/managers/admin-manager.d.ts.map +1 -0
  140. package/dist/managers/admin-manager.js +169 -0
  141. package/dist/managers/admin-manager.js.map +1 -0
  142. package/dist/managers/agent-registry.d.ts +52 -1
  143. package/dist/managers/agent-registry.d.ts.map +1 -1
  144. package/dist/managers/agent-registry.js +145 -6
  145. package/dist/managers/agent-registry.js.map +1 -1
  146. package/dist/managers/agent-room-manager.d.ts +216 -0
  147. package/dist/managers/agent-room-manager.d.ts.map +1 -0
  148. package/dist/managers/agent-room-manager.js +555 -0
  149. package/dist/managers/agent-room-manager.js.map +1 -0
  150. package/dist/managers/connection-manager.js +2 -0
  151. package/dist/managers/connection-manager.js.map +1 -1
  152. package/dist/managers/index.d.ts +4 -1
  153. package/dist/managers/index.d.ts.map +1 -1
  154. package/dist/managers/index.js +7 -1
  155. package/dist/managers/index.js.map +1 -1
  156. package/dist/managers/message-router.d.ts +56 -5
  157. package/dist/managers/message-router.d.ts.map +1 -1
  158. package/dist/managers/message-router.js +155 -8
  159. package/dist/managers/message-router.js.map +1 -1
  160. package/dist/managers/room-management-manager.d.ts +213 -0
  161. package/dist/managers/room-management-manager.d.ts.map +1 -0
  162. package/dist/managers/room-management-manager.js +442 -0
  163. package/dist/managers/room-management-manager.js.map +1 -0
  164. package/dist/managers/room-manager.d.ts +11 -9
  165. package/dist/managers/room-manager.d.ts.map +1 -1
  166. package/dist/managers/room-manager.js +14 -10
  167. package/dist/managers/room-manager.js.map +1 -1
  168. package/dist/payments/index.d.ts +5 -0
  169. package/dist/payments/index.d.ts.map +1 -0
  170. package/dist/payments/index.js +21 -0
  171. package/dist/payments/index.js.map +1 -0
  172. package/dist/payments/payment-client.d.ts +74 -0
  173. package/dist/payments/payment-client.d.ts.map +1 -0
  174. package/dist/payments/payment-client.js +207 -0
  175. package/dist/payments/payment-client.js.map +1 -0
  176. package/dist/teneo-sdk.d.ts +467 -33
  177. package/dist/teneo-sdk.d.ts.map +1 -1
  178. package/dist/teneo-sdk.js +735 -26
  179. package/dist/teneo-sdk.js.map +1 -1
  180. package/dist/types/categories.d.ts +22 -0
  181. package/dist/types/categories.d.ts.map +1 -0
  182. package/dist/types/categories.js +40 -0
  183. package/dist/types/categories.js.map +1 -0
  184. package/dist/types/config.d.ts +134 -54
  185. package/dist/types/config.d.ts.map +1 -1
  186. package/dist/types/config.js +70 -9
  187. package/dist/types/config.js.map +1 -1
  188. package/dist/types/error-codes.d.ts +10 -0
  189. package/dist/types/error-codes.d.ts.map +1 -1
  190. package/dist/types/error-codes.js +12 -0
  191. package/dist/types/error-codes.js.map +1 -1
  192. package/dist/types/events.d.ts +176 -68
  193. package/dist/types/events.d.ts.map +1 -1
  194. package/dist/types/events.js +19 -1
  195. package/dist/types/events.js.map +1 -1
  196. package/dist/types/index.d.ts +3 -2
  197. package/dist/types/index.d.ts.map +1 -1
  198. package/dist/types/index.js +57 -2
  199. package/dist/types/index.js.map +1 -1
  200. package/dist/types/messages.d.ts +22225 -2592
  201. package/dist/types/messages.d.ts.map +1 -1
  202. package/dist/types/messages.js +537 -28
  203. package/dist/types/messages.js.map +1 -1
  204. package/dist/utils/bounded-queue.d.ts.map +1 -1
  205. package/dist/utils/bounded-queue.js +5 -2
  206. package/dist/utils/bounded-queue.js.map +1 -1
  207. package/dist/utils/circuit-breaker.js +11 -4
  208. package/dist/utils/circuit-breaker.js.map +1 -1
  209. package/dist/utils/deduplication-cache.js +3 -1
  210. package/dist/utils/deduplication-cache.js.map +1 -1
  211. package/dist/utils/event-waiter.d.ts +3 -3
  212. package/dist/utils/event-waiter.d.ts.map +1 -1
  213. package/dist/utils/index.d.ts +1 -0
  214. package/dist/utils/index.d.ts.map +1 -1
  215. package/dist/utils/index.js +4 -1
  216. package/dist/utils/index.js.map +1 -1
  217. package/dist/utils/logger.js.map +1 -1
  218. package/dist/utils/pricing-resolver.d.ts +26 -0
  219. package/dist/utils/pricing-resolver.d.ts.map +1 -0
  220. package/dist/utils/pricing-resolver.js +85 -0
  221. package/dist/utils/pricing-resolver.js.map +1 -0
  222. package/dist/utils/rate-limiter.d.ts.map +1 -1
  223. package/dist/utils/rate-limiter.js +6 -0
  224. package/dist/utils/rate-limiter.js.map +1 -1
  225. package/dist/utils/retry-policy.js +1 -0
  226. package/dist/utils/retry-policy.js.map +1 -1
  227. package/dist/utils/secure-private-key.js +3 -1
  228. package/dist/utils/secure-private-key.js.map +1 -1
  229. package/dist/utils/signature-verifier.d.ts.map +1 -1
  230. package/dist/utils/signature-verifier.js +3 -1
  231. package/dist/utils/signature-verifier.js.map +1 -1
  232. package/examples/.env.example +2 -2
  233. package/examples/agent-room-management-example.ts +335 -0
  234. package/examples/basic-usage.ts +3 -4
  235. package/examples/claude-agent-x-follower/.env.example +3 -3
  236. package/examples/claude-agent-x-follower/QUICKSTART.md +3 -3
  237. package/examples/claude-agent-x-follower/README.md +3 -3
  238. package/examples/claude-agent-x-follower/index.ts +120 -96
  239. package/examples/n8n-teneo/.env.example +3 -3
  240. package/examples/n8n-teneo/README.md +2 -2
  241. package/examples/n8n-teneo/index.ts +54 -44
  242. package/examples/nestjs-dashboard/.env.example +11 -0
  243. package/examples/nestjs-dashboard/README.md +297 -0
  244. package/examples/nestjs-dashboard/nest-cli.json +10 -0
  245. package/examples/nestjs-dashboard/package.json +44 -0
  246. package/examples/nestjs-dashboard/pnpm-lock.yaml +3079 -0
  247. package/examples/nestjs-dashboard/src/app.controller.ts +24 -0
  248. package/examples/nestjs-dashboard/src/app.module.ts +15 -0
  249. package/examples/nestjs-dashboard/src/main.ts +32 -0
  250. package/examples/nestjs-dashboard/src/public/dashboard.html +1144 -0
  251. package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +54 -0
  252. package/examples/nestjs-dashboard/src/teneo/events.controller.ts +65 -0
  253. package/examples/nestjs-dashboard/src/teneo/messages.controller.ts +47 -0
  254. package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +258 -0
  255. package/examples/nestjs-dashboard/src/teneo/teneo.module.ts +13 -0
  256. package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +484 -0
  257. package/examples/nestjs-dashboard/tsconfig.json +22 -0
  258. package/examples/openai-teneo/.env.example +3 -3
  259. package/examples/openai-teneo/README.md +3 -3
  260. package/examples/openai-teneo/index.ts +82 -71
  261. package/examples/production-dashboard/.env.example +3 -3
  262. package/examples/production-dashboard/README.md +90 -13
  263. package/examples/production-dashboard/public/dashboard.html +1173 -601
  264. package/examples/production-dashboard/server.ts +349 -7
  265. package/examples/room-management-example.ts +282 -0
  266. package/examples/usage/.env.example +2 -2
  267. package/examples/usage/01-connect.ts +3 -4
  268. package/examples/usage/02-list-agents.ts +2 -3
  269. package/examples/usage/03-pick-agent.ts +2 -3
  270. package/examples/usage/04-find-by-capability.ts +2 -3
  271. package/examples/usage/05-webhook-example.ts +2 -3
  272. package/examples/usage/06-simple-api-server.ts +2 -3
  273. package/examples/usage/07-event-listener.ts +2 -3
  274. package/examples/usage/README.md +1 -1
  275. package/examples/webhook-integration.ts +1 -1
  276. package/examples/x-influencer-battle-server.ts +2 -2
  277. package/package.json +12 -1
  278. package/src/core/websocket-client.test.ts +8 -3
  279. package/src/core/websocket-client.ts +58 -4
  280. package/src/formatters/response-formatter.test.ts +2 -0
  281. package/src/formatters/response-formatter.ts +3 -3
  282. package/src/handlers/message-handlers/agent-details-response-handler.ts +42 -0
  283. package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +77 -0
  284. package/src/handlers/message-handlers/agent-status-update-handler.ts +52 -0
  285. package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
  286. package/src/handlers/message-handlers/auth-message-handler.ts +78 -5
  287. package/src/handlers/message-handlers/auth-success-handler.ts +63 -6
  288. package/src/handlers/message-handlers/base-handler.ts +20 -7
  289. package/src/handlers/message-handlers/index.ts +53 -0
  290. package/src/handlers/message-handlers/list-available-agents-handler.ts +41 -0
  291. package/src/handlers/message-handlers/list-room-agents-handler.ts +58 -0
  292. package/src/handlers/message-handlers/list-rooms-response-handler.ts +4 -2
  293. package/src/handlers/message-handlers/rate-limit-notification-handler.ts +45 -0
  294. package/src/handlers/message-handlers/regular-message-handler.ts +3 -2
  295. package/src/handlers/message-handlers/room-operation-response-handler.ts +102 -0
  296. package/src/handlers/message-handlers/subscribe-response-handler.ts +12 -2
  297. package/src/handlers/message-handlers/task-quote-handler.ts +31 -0
  298. package/src/handlers/message-handlers/types.ts +41 -7
  299. package/src/handlers/message-handlers/unsubscribe-response-handler.ts +12 -2
  300. package/src/handlers/message-handlers/user-authenticated-handler.ts +31 -0
  301. package/src/handlers/message-handlers/user-count-handler.ts +34 -0
  302. package/src/handlers/webhook-handler.test.ts +3 -2
  303. package/src/handlers/webhook-handler.ts +13 -7
  304. package/src/index.ts +21 -0
  305. package/src/managers/admin-manager.ts +249 -0
  306. package/src/managers/agent-registry.test.ts +2 -1
  307. package/src/managers/agent-registry.ts +170 -2
  308. package/src/managers/agent-room-manager.ts +665 -0
  309. package/src/managers/index.ts +15 -1
  310. package/src/managers/message-router.ts +215 -17
  311. package/src/managers/room-management-manager.ts +520 -0
  312. package/src/managers/room-manager.ts +15 -20
  313. package/src/payments/index.ts +22 -0
  314. package/src/payments/payment-client.ts +240 -0
  315. package/src/teneo-sdk.ts +806 -30
  316. package/src/types/categories.ts +45 -0
  317. package/src/types/config.ts +80 -7
  318. package/src/types/error-codes.ts +14 -0
  319. package/src/types/events.test.ts +1 -0
  320. package/src/types/events.ts +67 -0
  321. package/src/types/index.ts +111 -0
  322. package/src/types/messages.test.ts +2 -1
  323. package/src/types/messages.ts +677 -42
  324. package/src/utils/bounded-queue.test.ts +1 -1
  325. package/src/utils/bounded-queue.ts +2 -1
  326. package/src/utils/circuit-breaker.test.ts +1 -1
  327. package/src/utils/deduplication-cache.test.ts +1 -1
  328. package/src/utils/event-waiter.test.ts +1 -1
  329. package/src/utils/event-waiter.ts +3 -3
  330. package/src/utils/index.ts +7 -0
  331. package/src/utils/logger.ts +8 -8
  332. package/src/utils/pricing-resolver.ts +128 -0
  333. package/src/utils/rate-limiter.test.ts +1 -1
  334. package/src/utils/rate-limiter.ts +1 -0
  335. package/src/utils/signature-verifier.test.ts +2 -2
  336. package/src/utils/signature-verifier.ts +3 -2
  337. package/tests/.env.example +7 -0
  338. package/tests/direct-agent-test.ts +151 -0
  339. package/tests/integration/real-server.test.ts +2 -0
  340. package/tests/integration/room-management.test.ts +516 -0
  341. package/tests/integration/websocket.test.ts +5 -2
  342. package/tests/payment-flow-test.ts +147 -0
  343. package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +382 -0
  344. package/tests/unit/handlers/agent-status-update-handler.test.ts +403 -0
  345. package/tests/unit/handlers/auth-success-handler-rooms.test.ts +697 -0
  346. package/tests/unit/handlers/list-available-agents-handler.test.ts +248 -0
  347. package/tests/unit/handlers/list-room-agents-handler.test.ts +290 -0
  348. package/tests/unit/handlers/room-operation-response-handler.test.ts +500 -0
  349. package/tests/unit/managers/agent-room-manager.test.ts +527 -0
  350. package/tests/unit/managers/room-management-manager.test.ts +420 -0
  351. package/tsconfig.json +2 -2
  352. package/vitest.config.ts +1 -0
@@ -0,0 +1,382 @@
1
+ /**
2
+ * Unit tests for AgentRoomOperationResponseHandler
3
+ * Tests response handling for agent-room add/remove operations
4
+ */
5
+
6
+ import { describe, it, expect, beforeEach, vi } from "vitest";
7
+ import { AgentRoomOperationResponseHandler } from "../../../src/handlers/message-handlers/agent-room-operation-response-handler";
8
+ import { HandlerContext } from "../../../src/handlers/message-handlers/types";
9
+ import { Logger } from "../../../src/types";
10
+ import { SDKError } from "../../../src/types/events";
11
+ import { ErrorCode } from "../../../src/types/error-codes";
12
+
13
+ describe("AgentRoomOperationResponseHandler", () => {
14
+ let handler: AgentRoomOperationResponseHandler;
15
+ let mockContext: HandlerContext;
16
+ let mockLogger: Logger;
17
+ let emitSpy: ReturnType<typeof vi.fn>;
18
+ let sendWebhookSpy: ReturnType<typeof vi.fn>;
19
+
20
+ beforeEach(() => {
21
+ // Create mock logger
22
+ mockLogger = {
23
+ debug: vi.fn(),
24
+ info: vi.fn(),
25
+ warn: vi.fn(),
26
+ error: vi.fn()
27
+ };
28
+
29
+ // Create spies
30
+ emitSpy = vi.fn();
31
+ sendWebhookSpy = vi.fn().mockResolvedValue(undefined);
32
+
33
+ // Create mock context
34
+ mockContext = {
35
+ emit: emitSpy,
36
+ sendWebhook: sendWebhookSpy,
37
+ logger: mockLogger,
38
+ getConnectionState: vi.fn(),
39
+ getAuthState: vi.fn(),
40
+ updateConnectionState: vi.fn(),
41
+ updateAuthState: vi.fn(),
42
+ sendMessage: vi.fn()
43
+ };
44
+
45
+ // Create handler instance
46
+ handler = new AgentRoomOperationResponseHandler();
47
+ });
48
+
49
+ describe("Handler Metadata", () => {
50
+ it("should have correct type", () => {
51
+ expect(handler.type).toBe("agent_room_operation_response");
52
+ });
53
+
54
+ it("should have schema defined", () => {
55
+ expect(handler.schema).toBeDefined();
56
+ });
57
+
58
+ it("should identify messages it can handle", () => {
59
+ const message = { type: "agent_room_operation_response", data: {} };
60
+ expect(handler.canHandle(message as any)).toBe(true);
61
+ });
62
+
63
+ it("should not handle other message types", () => {
64
+ const message = { type: "other_type", data: {} };
65
+ expect(handler.canHandle(message as any)).toBe(false);
66
+ });
67
+ });
68
+
69
+ describe("Success Responses", () => {
70
+ it("should handle successful agent add", async () => {
71
+ const message = {
72
+ type: "agent_room_operation_response" as const,
73
+ data: {
74
+ success: true,
75
+ room_id: "room-123",
76
+ agent_id: "agent-456"
77
+ }
78
+ };
79
+
80
+ await handler.handle(message, mockContext);
81
+
82
+ // Should emit both add and remove events (listeners filter by room/agent ID)
83
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:agent_added", "room-123", "agent-456");
84
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:agent_removed", "room-123", "agent-456");
85
+
86
+ // Should send webhook
87
+ expect(sendWebhookSpy).toHaveBeenCalledWith(
88
+ "agent_room_operation",
89
+ expect.objectContaining({
90
+ success: true,
91
+ room_id: "room-123",
92
+ agent_id: "agent-456"
93
+ }),
94
+ undefined
95
+ );
96
+
97
+ // Should log
98
+ expect(mockLogger.info).toHaveBeenCalledWith(
99
+ "Agent room operation succeeded",
100
+ expect.objectContaining({
101
+ roomId: "room-123",
102
+ agentId: "agent-456"
103
+ })
104
+ );
105
+ });
106
+
107
+ it("should handle successful agent remove", async () => {
108
+ const message = {
109
+ type: "agent_room_operation_response" as const,
110
+ data: {
111
+ success: true,
112
+ room_id: "room-789",
113
+ agent_id: "agent-999"
114
+ }
115
+ };
116
+
117
+ await handler.handle(message, mockContext);
118
+
119
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:agent_added", "room-789", "agent-999");
120
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:agent_removed", "room-789", "agent-999");
121
+ });
122
+
123
+ it("should handle success without agent_id", async () => {
124
+ const message = {
125
+ type: "agent_room_operation_response" as const,
126
+ data: {
127
+ success: true,
128
+ room_id: "room-123"
129
+ }
130
+ };
131
+
132
+ await handler.handle(message, mockContext);
133
+
134
+ // Should log warning and not emit success events
135
+ expect(mockLogger.warn).toHaveBeenCalledWith(
136
+ "Agent room operation succeeded but missing room_id or agent_id"
137
+ );
138
+ expect(emitSpy).not.toHaveBeenCalledWith(
139
+ "agent_room:agent_added",
140
+ expect.anything(),
141
+ expect.anything()
142
+ );
143
+ });
144
+
145
+ it("should handle success without room_id", async () => {
146
+ const message = {
147
+ type: "agent_room_operation_response" as const,
148
+ data: {
149
+ success: true,
150
+ agent_id: "agent-456"
151
+ }
152
+ };
153
+
154
+ await handler.handle(message, mockContext);
155
+
156
+ // Should log warning and not emit success events
157
+ expect(mockLogger.warn).toHaveBeenCalledWith(
158
+ "Agent room operation succeeded but missing room_id or agent_id"
159
+ );
160
+ expect(emitSpy).not.toHaveBeenCalledWith(
161
+ "agent_room:agent_added",
162
+ expect.anything(),
163
+ expect.anything()
164
+ );
165
+ });
166
+ });
167
+
168
+ describe("Error Responses", () => {
169
+ it("should handle error response with message", async () => {
170
+ const errorMessage = "Agent already in room";
171
+ const roomId = "room-123";
172
+ const agentId = "agent-456";
173
+
174
+ const message = {
175
+ type: "agent_room_operation_response" as const,
176
+ data: {
177
+ success: false,
178
+ message: errorMessage,
179
+ room_id: roomId,
180
+ agent_id: agentId
181
+ }
182
+ };
183
+
184
+ await handler.handle(message, mockContext);
185
+
186
+ // Should emit both add and remove error events
187
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:add_error", expect.any(SDKError), roomId);
188
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:remove_error", expect.any(SDKError), roomId);
189
+
190
+ // Verify error details
191
+ const addErrorCall = emitSpy.mock.calls.find((call) => call[0] === "agent_room:add_error");
192
+ const error = addErrorCall[1] as SDKError;
193
+ expect(error.message).toBe(errorMessage);
194
+ expect(error.code).toBe(ErrorCode.OPERATION_FAILED);
195
+
196
+ // Should send webhook
197
+ expect(sendWebhookSpy).toHaveBeenCalledWith(
198
+ "agent_room_operation_error",
199
+ expect.objectContaining({
200
+ success: false,
201
+ message: errorMessage,
202
+ room_id: roomId,
203
+ agent_id: agentId
204
+ }),
205
+ undefined
206
+ );
207
+
208
+ // Should log
209
+ expect(mockLogger.error).toHaveBeenCalledWith(
210
+ "Agent room operation failed",
211
+ expect.objectContaining({
212
+ roomId,
213
+ agentId,
214
+ error: errorMessage
215
+ })
216
+ );
217
+ });
218
+
219
+ it("should handle error without message", async () => {
220
+ const message = {
221
+ type: "agent_room_operation_response" as const,
222
+ data: {
223
+ success: false,
224
+ room_id: "room-123"
225
+ }
226
+ };
227
+
228
+ await handler.handle(message, mockContext);
229
+
230
+ // Should use default error message
231
+ const addErrorCall = emitSpy.mock.calls.find((call) => call[0] === "agent_room:add_error");
232
+ const error = addErrorCall[1] as SDKError;
233
+ expect(error.message).toBe("Agent room operation failed");
234
+ });
235
+
236
+ it("should handle error without room_id", async () => {
237
+ const message = {
238
+ type: "agent_room_operation_response" as const,
239
+ data: {
240
+ success: false,
241
+ message: "Generic error",
242
+ agent_id: "agent-456"
243
+ }
244
+ };
245
+
246
+ await handler.handle(message, mockContext);
247
+
248
+ // Should emit error events with undefined room_id
249
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:add_error", expect.any(SDKError), undefined);
250
+ expect(emitSpy).toHaveBeenCalledWith(
251
+ "agent_room:remove_error",
252
+ expect.any(SDKError),
253
+ undefined
254
+ );
255
+ });
256
+
257
+ it("should handle error without agent_id", async () => {
258
+ const message = {
259
+ type: "agent_room_operation_response" as const,
260
+ data: {
261
+ success: false,
262
+ message: "Room not found",
263
+ room_id: "room-123"
264
+ }
265
+ };
266
+
267
+ await handler.handle(message, mockContext);
268
+
269
+ // Should still emit error events
270
+ expect(emitSpy).toHaveBeenCalledWith(
271
+ "agent_room:add_error",
272
+ expect.any(SDKError),
273
+ "room-123"
274
+ );
275
+ });
276
+ });
277
+
278
+ describe("Webhook Errors", () => {
279
+ it("should handle webhook failures gracefully", async () => {
280
+ const webhookError = new Error("Webhook failed");
281
+ sendWebhookSpy.mockRejectedValueOnce(webhookError);
282
+
283
+ const message = {
284
+ type: "agent_room_operation_response" as const,
285
+ data: {
286
+ success: true,
287
+ room_id: "room-123",
288
+ agent_id: "agent-456"
289
+ }
290
+ };
291
+
292
+ // Should not throw (webhook errors are logged but don't fail the handler)
293
+ await handler.handle(message, mockContext);
294
+
295
+ // Should still emit events
296
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:agent_added", "room-123", "agent-456");
297
+ });
298
+ });
299
+
300
+ describe("Message Validation", () => {
301
+ it("should handle invalid message structure", async () => {
302
+ const invalidMessage = {
303
+ type: "agent_room_operation_response"
304
+ // Missing data field
305
+ } as any;
306
+
307
+ await handler.handle(invalidMessage, mockContext);
308
+
309
+ // Should log error
310
+ expect(mockLogger.error).toHaveBeenCalledWith(
311
+ expect.stringContaining("Error handling agent_room_operation_response"),
312
+ expect.any(Error)
313
+ );
314
+
315
+ // Should emit message:error event
316
+ expect(emitSpy).toHaveBeenCalledWith("message:error", expect.any(Error), invalidMessage);
317
+ });
318
+
319
+ it("should accept valid message with extra fields", async () => {
320
+ const message = {
321
+ type: "agent_room_operation_response" as const,
322
+ data: {
323
+ success: true,
324
+ room_id: "room-123",
325
+ agent_id: "agent-456",
326
+ extra_field: "should be ignored",
327
+ another_extra: 123
328
+ }
329
+ };
330
+
331
+ // Should not throw
332
+ await handler.handle(message, mockContext);
333
+
334
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:agent_added", "room-123", "agent-456");
335
+ });
336
+ });
337
+
338
+ describe("Debug Logging", () => {
339
+ it("should log debug info for successful operation", async () => {
340
+ const message = {
341
+ type: "agent_room_operation_response" as const,
342
+ data: {
343
+ success: true,
344
+ room_id: "room-123",
345
+ agent_id: "agent-456"
346
+ }
347
+ };
348
+
349
+ await handler.handle(message, mockContext);
350
+
351
+ expect(mockLogger.debug).toHaveBeenCalledWith(
352
+ "Handling agent_room_operation_response",
353
+ expect.objectContaining({
354
+ success: true,
355
+ roomId: "room-123",
356
+ agentId: "agent-456"
357
+ })
358
+ );
359
+ });
360
+
361
+ it("should log debug info for error operation", async () => {
362
+ const message = {
363
+ type: "agent_room_operation_response" as const,
364
+ data: {
365
+ success: false,
366
+ message: "Error occurred",
367
+ room_id: "room-123"
368
+ }
369
+ };
370
+
371
+ await handler.handle(message, mockContext);
372
+
373
+ expect(mockLogger.debug).toHaveBeenCalledWith(
374
+ "Handling agent_room_operation_response",
375
+ expect.objectContaining({
376
+ success: false,
377
+ roomId: "room-123"
378
+ })
379
+ );
380
+ });
381
+ });
382
+ });