@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
@@ -4,7 +4,8 @@
4
4
  * Provides runtime validation and TypeScript type inference
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.AnyMessageSchema = exports.ListRoomsResponseSchema = exports.RoomInfoSchema = exports.UnsubscribeResponseSchema = exports.SubscribeResponseSchema = exports.ListRoomsMessageSchema = exports.UnsubscribeMessageSchema = exports.SubscribeMessageSchema = exports.PongMessageSchema = exports.PingMessageSchema = exports.ErrorMessageSchema = exports.AgentsListMessageSchema = exports.AgentSelectedMessageSchema = exports.TaskResponseMessageSchema = exports.TaskMessageSchema = exports.UserMessageSchema = exports.RegistrationSuccessMessageSchema = exports.RegisterMessageSchema = exports.AuthErrorMessageSchema = exports.AuthSuccessMessageSchema = exports.AuthMessageSchema = exports.AuthRequiredMessageSchema = exports.CheckCachedAuthMessageSchema = exports.ChallengeMessageSchema = exports.RequestChallengeMessageSchema = exports.BaseMessageSchema = exports.AgentSchema = exports.RoomSchema = exports.CommandSchema = exports.CapabilitySchema = exports.AgentStatusSchema = exports.AgentTypeSchema = exports.ClientTypeSchema = exports.ContentTypeSchema = exports.MessageTypeSchema = void 0;
7
+ exports.AgentRoomInfoSchema = exports.RoomMemberOperationResponseSchema = exports.RoomMembersResponseSchema = exports.ListRoomMembersMessageSchema = exports.RemoveRoomMemberMessageSchema = exports.AddRoomMemberMessageSchema = exports.RoomMemberInfoSchema = exports.RoomOperationResponseSchema = exports.DeleteRoomMessageSchema = exports.UpdateRoomMessageSchema = exports.CreateRoomMessageSchema = exports.ListRoomsResponseSchema = exports.UnsubscribeResponseSchema = exports.SubscribeResponseSchema = exports.ListRoomsMessageSchema = exports.UnsubscribeMessageSchema = exports.SubscribeMessageSchema = exports.PongMessageSchema = exports.PingMessageSchema = exports.ErrorMessageSchema = exports.AgentsListMessageSchema = exports.ConfirmTaskMessageSchema = exports.TaskQuoteMessageSchema = exports.RequestTaskMessageSchema = exports.PricingInfoSchema = exports.AgentSelectedMessageSchema = exports.TaskResponseMessageSchema = exports.TaskMessageSchema = exports.UserMessageSchema = exports.RegistrationSuccessMessageSchema = exports.RegisterMessageSchema = exports.AuthErrorMessageSchema = exports.AuthSuccessMessageSchema = exports.AuthMessageSchema = exports.AuthRequiredMessageSchema = exports.CheckCachedAuthMessageSchema = exports.ChallengeMessageSchema = exports.RequestChallengeMessageSchema = exports.BaseMessageSchema = exports.AgentSchema = exports.RoomInfoSchema = exports.RoomSchema = exports.CommandSchema = exports.CommandPricingSchema = exports.CapabilitySchema = exports.AgentStatusSchema = exports.AgentTypeSchema = exports.ClientTypeSchema = exports.ContentTypeSchema = exports.MessageTypeSchema = void 0;
8
+ exports.AnyMessageSchema = exports.UserPreferencesUpdatedMessageSchema = exports.UserPreferencesUpdatedDataSchema = exports.SetUserPreferencesMessageSchema = exports.SetUserPreferencesDataSchema = exports.AgentDetailsResponseMessageSchema = exports.GetAgentDetailsMessageSchema = exports.RateLimitNotificationMessageSchema = exports.UserAuthenticatedMessageSchema = exports.UserCountMessageSchema = exports.UserCountDataSchema = exports.AllAgentsResponseSchema = exports.ListAllAgentsMessageSchema = exports.AdminAgentInfoSchema = exports.RoomPongResponseSchema = exports.RoomPingMessageSchema = exports.AgentStatusUpdateMessageSchema = exports.AgentRoomOperationResponseSchema = exports.AvailableAgentsResponseSchema = exports.RoomAgentsResponseSchema = exports.ListAvailableAgentsMessageSchema = exports.ListRoomAgentsMessageSchema = exports.RemoveAgentFromRoomMessageSchema = exports.AddAgentToRoomMessageSchema = void 0;
8
9
  exports.isAuthSuccess = isAuthSuccess;
9
10
  exports.isAuthError = isAuthError;
10
11
  exports.isAuth = isAuth;
@@ -21,9 +22,13 @@ exports.createPing = createPing;
21
22
  exports.createSubscribe = createSubscribe;
22
23
  exports.createUnsubscribe = createUnsubscribe;
23
24
  exports.createListRooms = createListRooms;
25
+ exports.createRequestTask = createRequestTask;
26
+ exports.createConfirmTask = createConfirmTask;
27
+ exports.createSetUserPreferences = createSetUserPreferences;
24
28
  exports.validateMessage = validateMessage;
25
29
  exports.safeParseMessage = safeParseMessage;
26
30
  const zod_1 = require("zod");
31
+ const categories_1 = require("./categories");
27
32
  /**
28
33
  * Coerces string booleans to actual booleans with strict validation.
29
34
  * The server sometimes sends "true"/"false" as strings instead of actual booleans.
@@ -61,6 +66,7 @@ const stringToBoolean = zod_1.z
61
66
  .pipe(zod_1.z.boolean());
62
67
  // Enum schemas
63
68
  exports.MessageTypeSchema = zod_1.z.enum([
69
+ // Authentication
64
70
  "request_challenge",
65
71
  "challenge",
66
72
  "check_cached_auth",
@@ -70,18 +76,61 @@ exports.MessageTypeSchema = zod_1.z.enum([
70
76
  "auth_error",
71
77
  "register",
72
78
  "registration_success",
79
+ // Communication
73
80
  "message",
74
81
  "task",
75
82
  "task_response",
76
83
  "agent_selected",
84
+ // Quote-Approve Flow (v2.2.0)
85
+ "request_task",
86
+ "task_quote",
87
+ "confirm_task",
88
+ // System
77
89
  "agents",
78
90
  "error",
79
91
  "ping",
80
92
  "pong",
81
93
  "capabilities",
94
+ // Room Subscription (Basic)
82
95
  "subscribe",
83
96
  "unsubscribe",
84
- "list_rooms"
97
+ "list_rooms",
98
+ // === NEW IN v2.0.0 ===
99
+ // Room Management (6 types)
100
+ "create_room",
101
+ "update_room",
102
+ "delete_room",
103
+ "add_room_member",
104
+ "remove_room_member",
105
+ "list_room_members",
106
+ // Room Management Responses (3 types)
107
+ "room_operation_response",
108
+ "room_member_operation_response",
109
+ "room_members_response",
110
+ // Agent Room Management (5 types)
111
+ "add_agent_to_room",
112
+ "remove_agent_from_room",
113
+ "list_room_agents",
114
+ "list_available_agents",
115
+ "agent_status_update",
116
+ // Agent Room Management Responses (3 types)
117
+ "agent_room_operation_response",
118
+ "room_agents_response",
119
+ "available_agents_response",
120
+ // Room Ping System (2 types)
121
+ "room_ping",
122
+ "room_pong",
123
+ // Admin Messages (7 types)
124
+ "list_all_agents",
125
+ "all_agents_response",
126
+ "user_count",
127
+ "user_authenticated",
128
+ "rate_limit_notification",
129
+ "get_agent_details",
130
+ "agent_details_response",
131
+ // User Preferences (2 types)
132
+ "set_user_preferences",
133
+ "user_preferences_updated"
85
134
  ]);
86
135
  exports.ContentTypeSchema = zod_1.z.enum([
87
136
  "text/plain",
@@ -100,23 +149,44 @@ exports.AgentStatusSchema = zod_1.z.enum(["online", "offline"]);
100
149
  // Supporting schemas
101
150
  exports.CapabilitySchema = zod_1.z.object({
102
151
  name: zod_1.z.string(),
103
- description: zod_1.z.string()
152
+ description: zod_1.z.string().optional()
153
+ });
154
+ exports.CommandPricingSchema = zod_1.z.object({
155
+ priceType: zod_1.z.string().optional(),
156
+ pricePerUnit: zod_1.z.number().optional(),
157
+ taskUnit: zod_1.z.string().optional(),
158
+ timeUnit: zod_1.z.enum(["hour", "day"]).optional()
104
159
  });
105
160
  exports.CommandSchema = zod_1.z.object({
106
161
  trigger: zod_1.z.string(),
107
162
  argument: zod_1.z.string().optional(),
108
- description: zod_1.z.string()
163
+ description: zod_1.z.string().optional(),
164
+ pricing: exports.CommandPricingSchema.optional()
109
165
  });
110
166
  exports.RoomSchema = zod_1.z.object({
111
167
  id: zod_1.z.string(),
112
- name: zod_1.z.string(),
168
+ name: zod_1.z.string().optional(),
113
169
  description: zod_1.z.string().optional(),
114
- is_public: stringToBoolean,
115
- is_active: stringToBoolean,
116
- created_by: zod_1.z.string(),
117
- created_at: zod_1.z.string(),
118
- updated_at: zod_1.z.string()
170
+ is_public: stringToBoolean.optional(),
171
+ is_active: stringToBoolean.optional(),
172
+ is_owner: stringToBoolean.optional(),
173
+ created_by: zod_1.z.string().optional(),
174
+ created_at: zod_1.z.string().optional(),
175
+ updated_at: zod_1.z.string().optional()
119
176
  });
177
+ // RoomInfo schema for v2.0.0 - used in auth responses and room management
178
+ exports.RoomInfoSchema = zod_1.z
179
+ .object({
180
+ id: zod_1.z.string(),
181
+ name: zod_1.z.string().optional(), // Optional for permissive parsing
182
+ description: zod_1.z.string().optional().nullable(),
183
+ is_public: zod_1.z.boolean().optional(), // Optional - defaults to false on backend
184
+ created_by: zod_1.z.string().optional(), // Optional in case backend doesn't send it yet
185
+ created_at: zod_1.z.string().optional(),
186
+ updated_at: zod_1.z.string().optional(),
187
+ is_owner: zod_1.z.boolean().optional() // Client-side enrichment, may not always be present
188
+ })
189
+ .passthrough(); // Allow extra fields backend might add
120
190
  exports.AgentSchema = zod_1.z.object({
121
191
  id: zod_1.z.string(),
122
192
  name: zod_1.z.string(),
@@ -128,10 +198,12 @@ exports.AgentSchema = zod_1.z.object({
128
198
  image: zod_1.z.string().optional(),
129
199
  agentType: exports.AgentTypeSchema.optional(),
130
200
  nlpFallback: stringToBoolean.optional(),
131
- webhookUrl: zod_1.z.string().url().optional()
201
+ webhookUrl: zod_1.z.string().url().optional(),
202
+ categories: zod_1.z.array(categories_1.AgentCategorySchema).max(categories_1.MAX_CATEGORIES).optional()
132
203
  });
133
204
  // Base message schema
134
- exports.BaseMessageSchema = zod_1.z.object({
205
+ exports.BaseMessageSchema = zod_1.z
206
+ .object({
135
207
  type: exports.MessageTypeSchema,
136
208
  content: zod_1.z.any().optional(),
137
209
  content_type: exports.ContentTypeSchema.optional(),
@@ -145,7 +217,8 @@ exports.BaseMessageSchema = zod_1.z.object({
145
217
  reasoning: zod_1.z.string().optional(),
146
218
  task_id: zod_1.z.string().optional(),
147
219
  id: zod_1.z.string().optional() // Added for message tracking
148
- });
220
+ })
221
+ .passthrough(); // Allow message-specific fields to pass through
149
222
  // Authentication message schemas
150
223
  exports.RequestChallengeMessageSchema = exports.BaseMessageSchema.extend({
151
224
  type: zod_1.z.literal("request_challenge"),
@@ -194,8 +267,10 @@ exports.AuthMessageSchema = exports.BaseMessageSchema.extend({
194
267
  is_whitelisted: stringToBoolean.optional(),
195
268
  is_admin_whitelisted: stringToBoolean.optional(),
196
269
  rooms: zod_1.z.array(exports.RoomSchema).optional(),
270
+ private_rooms: zod_1.z.array(exports.RoomSchema).optional(),
197
271
  private_room_id: zod_1.z.string().optional(),
198
- cached_auth: stringToBoolean.optional()
272
+ cached_auth: stringToBoolean.optional(),
273
+ max_private_rooms: zod_1.z.number().optional()
199
274
  })
200
275
  .optional()
201
276
  });
@@ -208,9 +283,10 @@ exports.AuthSuccessMessageSchema = exports.BaseMessageSchema.extend({
208
283
  nft_verified: stringToBoolean.optional(),
209
284
  is_whitelisted: stringToBoolean.optional(),
210
285
  is_admin_whitelisted: stringToBoolean.optional(),
211
- rooms: zod_1.z.array(exports.RoomSchema).optional(),
212
- private_room_id: zod_1.z.string().optional(),
213
- cached_auth: stringToBoolean.optional()
286
+ rooms: zod_1.z.array(exports.RoomInfoSchema).optional().nullable(), // v2.0.0: Uses RoomInfo with is_owner field
287
+ private_room_id: zod_1.z.string().optional(), // DEPRECATED: Use rooms array instead
288
+ cached_auth: stringToBoolean.optional(), // Admin field, optional
289
+ max_private_rooms: zod_1.z.number().optional() // NEW in v2.0.0: Max rooms user can create
214
290
  })
215
291
  });
216
292
  exports.AuthErrorMessageSchema = exports.BaseMessageSchema.extend({
@@ -288,6 +364,57 @@ exports.AgentSelectedMessageSchema = exports.BaseMessageSchema.extend({
288
364
  command_reasoning: zod_1.z.string().optional()
289
365
  })
290
366
  });
367
+ // ============================================================================
368
+ // QUOTE-APPROVE FLOW SCHEMAS (v2.2.0)
369
+ // ============================================================================
370
+ // Pricing information schema (flexible to handle server variations)
371
+ exports.PricingInfoSchema = zod_1.z
372
+ .object({
373
+ pricePerUnit: zod_1.z.number().optional(),
374
+ price_per_unit: zod_1.z.number().optional(),
375
+ priceType: zod_1.z.string().optional(),
376
+ price_type: zod_1.z.string().optional(),
377
+ timeUnit: zod_1.z.string().optional(),
378
+ time_unit: zod_1.z.string().optional(),
379
+ currency: zod_1.z.string().optional().default("USDC"),
380
+ network: zod_1.z.string().optional()
381
+ })
382
+ .transform((data) => ({
383
+ // Normalize to camelCase
384
+ pricePerUnit: data.pricePerUnit ?? data.price_per_unit ?? 0,
385
+ priceType: data.priceType ?? data.price_type,
386
+ timeUnit: data.timeUnit ?? data.time_unit,
387
+ currency: data.currency,
388
+ network: data.network
389
+ }));
390
+ // Request task message (initiates quote-approve flow)
391
+ exports.RequestTaskMessageSchema = exports.BaseMessageSchema.extend({
392
+ type: zod_1.z.literal("request_task"),
393
+ content: zod_1.z.string(),
394
+ room: zod_1.z.string()
395
+ });
396
+ // Task quote message (server response with pricing)
397
+ exports.TaskQuoteMessageSchema = exports.BaseMessageSchema.extend({
398
+ type: zod_1.z.literal("task_quote"),
399
+ from: zod_1.z.literal("coordinator"),
400
+ data: zod_1.z.object({
401
+ task_id: zod_1.z.string(),
402
+ agent_id: zod_1.z.string(),
403
+ agent_name: zod_1.z.string(),
404
+ agent_wallet: zod_1.z.string(),
405
+ command: zod_1.z.string(),
406
+ pricing: exports.PricingInfoSchema,
407
+ expires_at: zod_1.z.string()
408
+ })
409
+ });
410
+ // Confirm task message (with payment at top level - backend expects msg.payment)
411
+ exports.ConfirmTaskMessageSchema = exports.BaseMessageSchema.extend({
412
+ type: zod_1.z.literal("confirm_task"),
413
+ data: zod_1.z.object({
414
+ task_id: zod_1.z.string()
415
+ }),
416
+ payment: zod_1.z.string().optional() // x402 payment at top level (backend checks msg.Payment)
417
+ });
291
418
  // System message schemas
292
419
  exports.AgentsListMessageSchema = exports.BaseMessageSchema.extend({
293
420
  type: zod_1.z.literal("agents"),
@@ -344,25 +471,352 @@ exports.UnsubscribeResponseSchema = exports.BaseMessageSchema.extend({
344
471
  subscriptions: zod_1.z.array(zod_1.z.string()).optional()
345
472
  })
346
473
  });
347
- exports.RoomInfoSchema = zod_1.z.object({
348
- id: zod_1.z.string(),
349
- name: zod_1.z.string(),
350
- description: zod_1.z.string().optional().nullable(),
351
- is_public: zod_1.z.boolean(),
352
- created_at: zod_1.z.string(),
353
- updated_at: zod_1.z.string(),
354
- is_owner: zod_1.z.boolean()
355
- });
356
474
  exports.ListRoomsResponseSchema = exports.BaseMessageSchema.extend({
357
475
  type: zod_1.z.literal("list_rooms"),
358
476
  data: zod_1.z.object({
359
477
  rooms: zod_1.z.array(exports.RoomInfoSchema)
360
478
  })
361
479
  });
480
+ // ============================================================================
481
+ // ROOM MANAGEMENT SCHEMAS (v2.0.0)
482
+ // Note: Permissive schemas to handle backend changes gracefully
483
+ // ============================================================================
484
+ // Room CRUD Operations
485
+ exports.CreateRoomMessageSchema = zod_1.z
486
+ .object({
487
+ type: zod_1.z.literal("create_room"),
488
+ name: zod_1.z.string(),
489
+ description: zod_1.z.string().optional(),
490
+ is_public: zod_1.z.boolean().optional()
491
+ })
492
+ .passthrough(); // Allow extra fields
493
+ exports.UpdateRoomMessageSchema = zod_1.z
494
+ .object({
495
+ type: zod_1.z.literal("update_room"),
496
+ room_id: zod_1.z.string(),
497
+ name: zod_1.z.string().optional(),
498
+ description: zod_1.z.string().optional()
499
+ })
500
+ .passthrough();
501
+ exports.DeleteRoomMessageSchema = zod_1.z
502
+ .object({
503
+ type: zod_1.z.literal("delete_room"),
504
+ room_id: zod_1.z.string()
505
+ })
506
+ .passthrough();
507
+ exports.RoomOperationResponseSchema = zod_1.z
508
+ .object({
509
+ type: zod_1.z.literal("room_operation_response"),
510
+ data: zod_1.z
511
+ .object({
512
+ success: zod_1.z.boolean().optional(), // Optional - consuming code should handle missing as false
513
+ message: zod_1.z.string().optional(),
514
+ room_id: zod_1.z.string().optional(),
515
+ room: exports.RoomInfoSchema.optional(),
516
+ max_rooms: zod_1.z.number().optional(),
517
+ current_count: zod_1.z.number().optional()
518
+ })
519
+ .passthrough() // Allow extra fields backend might add
520
+ })
521
+ .passthrough();
522
+ // Room Member Management
523
+ exports.RoomMemberInfoSchema = zod_1.z
524
+ .object({
525
+ user_id: zod_1.z.string(),
526
+ added_by: zod_1.z.string().optional(), // May not always be present
527
+ added_at: zod_1.z.string().optional(),
528
+ role: zod_1.z.string().optional()
529
+ })
530
+ .passthrough();
531
+ exports.AddRoomMemberMessageSchema = zod_1.z
532
+ .object({
533
+ type: zod_1.z.literal("add_room_member"),
534
+ room_id: zod_1.z.string(),
535
+ user_id: zod_1.z.string()
536
+ })
537
+ .passthrough();
538
+ exports.RemoveRoomMemberMessageSchema = zod_1.z
539
+ .object({
540
+ type: zod_1.z.literal("remove_room_member"),
541
+ room_id: zod_1.z.string(),
542
+ user_id: zod_1.z.string()
543
+ })
544
+ .passthrough();
545
+ exports.ListRoomMembersMessageSchema = zod_1.z
546
+ .object({
547
+ type: zod_1.z.literal("list_room_members"),
548
+ room_id: zod_1.z.string()
549
+ })
550
+ .passthrough();
551
+ exports.RoomMembersResponseSchema = zod_1.z
552
+ .object({
553
+ type: zod_1.z.literal("room_members_response"),
554
+ data: zod_1.z
555
+ .object({
556
+ room_id: zod_1.z.string(),
557
+ members: zod_1.z.array(exports.RoomMemberInfoSchema).optional() // Optional - consuming code should handle missing as []
558
+ })
559
+ .passthrough()
560
+ })
561
+ .passthrough();
562
+ exports.RoomMemberOperationResponseSchema = zod_1.z
563
+ .object({
564
+ type: zod_1.z.literal("room_member_operation_response"),
565
+ data: zod_1.z
566
+ .object({
567
+ success: zod_1.z.boolean().optional(),
568
+ message: zod_1.z.string().optional(),
569
+ room_id: zod_1.z.string().optional(),
570
+ user_id: zod_1.z.string().optional(),
571
+ member_count: zod_1.z.number().optional()
572
+ })
573
+ .passthrough()
574
+ })
575
+ .passthrough();
576
+ // ============================================================================
577
+ // AGENT ROOM MANAGEMENT SCHEMAS (v2.0.0)
578
+ // Note: Permissive schemas to handle backend changes gracefully
579
+ // ============================================================================
580
+ exports.AgentRoomInfoSchema = zod_1.z
581
+ .object({
582
+ agent_id: zod_1.z.string(),
583
+ agent_name: zod_1.z.string().optional(),
584
+ description: zod_1.z.string().optional(),
585
+ capabilities: zod_1.z.array(exports.CapabilitySchema).optional(),
586
+ commands: zod_1.z.array(exports.CommandSchema).optional(),
587
+ image: zod_1.z.string().optional(),
588
+ status: zod_1.z.string().optional(),
589
+ added_by: zod_1.z.string().optional(),
590
+ added_at: zod_1.z.string().optional(),
591
+ categories: zod_1.z.array(categories_1.AgentCategorySchema).max(categories_1.MAX_CATEGORIES).optional()
592
+ })
593
+ .passthrough();
594
+ exports.AddAgentToRoomMessageSchema = zod_1.z
595
+ .object({
596
+ type: zod_1.z.literal("add_agent_to_room"),
597
+ room_id: zod_1.z.string(),
598
+ agent_id: zod_1.z.string()
599
+ })
600
+ .passthrough();
601
+ exports.RemoveAgentFromRoomMessageSchema = zod_1.z
602
+ .object({
603
+ type: zod_1.z.literal("remove_agent_from_room"),
604
+ room_id: zod_1.z.string(),
605
+ agent_id: zod_1.z.string()
606
+ })
607
+ .passthrough();
608
+ exports.ListRoomAgentsMessageSchema = zod_1.z
609
+ .object({
610
+ type: zod_1.z.literal("list_room_agents"),
611
+ room_id: zod_1.z.string()
612
+ })
613
+ .passthrough();
614
+ exports.ListAvailableAgentsMessageSchema = zod_1.z
615
+ .object({
616
+ type: zod_1.z.literal("list_available_agents"),
617
+ room_id: zod_1.z.string()
618
+ })
619
+ .passthrough();
620
+ exports.RoomAgentsResponseSchema = zod_1.z
621
+ .object({
622
+ type: zod_1.z.literal("room_agents_response"),
623
+ data: zod_1.z
624
+ .object({
625
+ room_id: zod_1.z.string(),
626
+ agents: zod_1.z.array(exports.AgentRoomInfoSchema).optional() // Optional - consuming code should handle missing as []
627
+ })
628
+ .passthrough()
629
+ })
630
+ .passthrough();
631
+ exports.AvailableAgentsResponseSchema = zod_1.z
632
+ .object({
633
+ type: zod_1.z.literal("available_agents_response"),
634
+ data: zod_1.z
635
+ .object({
636
+ agents: zod_1.z.array(exports.AgentRoomInfoSchema).optional()
637
+ })
638
+ .passthrough()
639
+ })
640
+ .passthrough();
641
+ exports.AgentRoomOperationResponseSchema = zod_1.z
642
+ .object({
643
+ type: zod_1.z.literal("agent_room_operation_response"),
644
+ data: zod_1.z
645
+ .object({
646
+ success: zod_1.z.boolean().optional(),
647
+ message: zod_1.z.string().optional(),
648
+ room_id: zod_1.z.string().optional(),
649
+ agent_id: zod_1.z.string().optional(),
650
+ agent_count: zod_1.z.number().optional()
651
+ })
652
+ .passthrough()
653
+ })
654
+ .passthrough();
655
+ exports.AgentStatusUpdateMessageSchema = zod_1.z
656
+ .object({
657
+ type: zod_1.z.literal("agent_status_update"),
658
+ data: zod_1.z
659
+ .object({
660
+ room_id: zod_1.z.string(),
661
+ agent_id: zod_1.z.string(),
662
+ status: zod_1.z.string(),
663
+ agent: exports.AgentRoomInfoSchema.optional()
664
+ })
665
+ .passthrough()
666
+ })
667
+ .passthrough();
668
+ // Room Ping System
669
+ exports.RoomPingMessageSchema = zod_1.z
670
+ .object({
671
+ type: zod_1.z.literal("room_ping"),
672
+ room_id: zod_1.z.string()
673
+ })
674
+ .passthrough();
675
+ exports.RoomPongResponseSchema = zod_1.z
676
+ .object({
677
+ type: zod_1.z.literal("room_pong"),
678
+ data: zod_1.z
679
+ .object({
680
+ room_id: zod_1.z.string(),
681
+ live_count: zod_1.z.number().optional(), // Optional - consuming code should handle missing as 0
682
+ timestamp: zod_1.z.string()
683
+ })
684
+ .passthrough()
685
+ })
686
+ .passthrough();
687
+ // Admin agent info (admin only)
688
+ exports.AdminAgentInfoSchema = zod_1.z
689
+ .object({
690
+ agent_id: zod_1.z.string(),
691
+ agent_name: zod_1.z.string(),
692
+ creator: zod_1.z.string(),
693
+ creator_name: zod_1.z.string().optional().nullable(),
694
+ description: zod_1.z.string().optional().nullable(),
695
+ image_url: zod_1.z.string().optional().nullable(),
696
+ is_online: zod_1.z.boolean().optional(),
697
+ is_active: zod_1.z.boolean().optional(),
698
+ is_verified: zod_1.z.boolean().optional(),
699
+ is_public: zod_1.z.boolean().optional(),
700
+ is_banned: zod_1.z.boolean().optional(),
701
+ created_at: zod_1.z.string().optional().nullable()
702
+ })
703
+ .passthrough();
704
+ // List all agents request (client → server, admin only)
705
+ exports.ListAllAgentsMessageSchema = zod_1.z
706
+ .object({
707
+ type: zod_1.z.literal("list_all_agents"),
708
+ request_id: zod_1.z.string().optional(),
709
+ filter: zod_1.z.string().optional(),
710
+ offset: zod_1.z.number().optional(),
711
+ limit: zod_1.z.number().optional()
712
+ })
713
+ .passthrough();
714
+ // All agents response (server → client, admin only)
715
+ exports.AllAgentsResponseSchema = zod_1.z
716
+ .object({
717
+ type: zod_1.z.literal("all_agents_response"),
718
+ request_id: zod_1.z.string().optional(),
719
+ data: zod_1.z
720
+ .object({
721
+ agents: zod_1.z.array(exports.AdminAgentInfoSchema),
722
+ total: zod_1.z.number(),
723
+ offset: zod_1.z.number(),
724
+ limit: zod_1.z.number(),
725
+ has_more: zod_1.z.boolean(),
726
+ filter: zod_1.z.string().optional()
727
+ })
728
+ .passthrough()
729
+ })
730
+ .passthrough();
731
+ // User count data schema
732
+ exports.UserCountDataSchema = zod_1.z.object({
733
+ count: zod_1.z.number(),
734
+ timestamp: zod_1.z.string()
735
+ });
736
+ // User count message (server → client, admin only)
737
+ exports.UserCountMessageSchema = zod_1.z
738
+ .object({
739
+ type: zod_1.z.literal("user_count"),
740
+ data: exports.UserCountDataSchema.passthrough()
741
+ })
742
+ .passthrough();
743
+ // User authenticated message (server → client)
744
+ exports.UserAuthenticatedMessageSchema = zod_1.z
745
+ .object({
746
+ type: zod_1.z.literal("user_authenticated"),
747
+ data: zod_1.z
748
+ .object({
749
+ wallet: zod_1.z.string()
750
+ })
751
+ .passthrough()
752
+ })
753
+ .passthrough();
754
+ // Rate limit notification (server → client)
755
+ exports.RateLimitNotificationMessageSchema = zod_1.z
756
+ .object({
757
+ type: zod_1.z.literal("rate_limit_notification"),
758
+ data: zod_1.z
759
+ .object({
760
+ title: zod_1.z.string(),
761
+ message: zod_1.z.string(),
762
+ cta_text: zod_1.z.string().optional(),
763
+ cta_link: zod_1.z.string().optional(),
764
+ message_type: zod_1.z.string(),
765
+ limit_type: zod_1.z.string(),
766
+ reset_at: zod_1.z.string().optional()
767
+ })
768
+ .passthrough()
769
+ })
770
+ .passthrough();
771
+ // Agent details request (client → server)
772
+ exports.GetAgentDetailsMessageSchema = zod_1.z
773
+ .object({
774
+ type: zod_1.z.literal("get_agent_details"),
775
+ agent_id: zod_1.z.string(),
776
+ request_id: zod_1.z.string().optional()
777
+ })
778
+ .passthrough();
779
+ // Agent details response (server → client)
780
+ exports.AgentDetailsResponseMessageSchema = zod_1.z
781
+ .object({
782
+ type: zod_1.z.literal("agent_details_response"),
783
+ request_id: zod_1.z.string().optional(),
784
+ data: zod_1.z
785
+ .object({
786
+ agent: exports.AgentRoomInfoSchema
787
+ })
788
+ .passthrough()
789
+ .optional(),
790
+ error: zod_1.z.string().optional()
791
+ })
792
+ .passthrough();
793
+ // User Preferences (set_user_preferences)
794
+ exports.SetUserPreferencesDataSchema = zod_1.z.object({
795
+ max_price_per_request: zod_1.z.number().min(0).optional().nullable()
796
+ });
797
+ exports.SetUserPreferencesMessageSchema = zod_1.z
798
+ .object({
799
+ type: zod_1.z.literal("set_user_preferences"),
800
+ data: exports.SetUserPreferencesDataSchema
801
+ })
802
+ .passthrough();
803
+ // User Preferences Response (user_preferences_updated)
804
+ exports.UserPreferencesUpdatedDataSchema = zod_1.z.object({
805
+ success: zod_1.z.boolean(),
806
+ message: zod_1.z.string(),
807
+ max_price_per_request: zod_1.z.number().optional().nullable()
808
+ });
809
+ exports.UserPreferencesUpdatedMessageSchema = zod_1.z
810
+ .object({
811
+ type: zod_1.z.literal("user_preferences_updated"),
812
+ data: exports.UserPreferencesUpdatedDataSchema
813
+ })
814
+ .passthrough();
362
815
  // Union of all INCOMING message schemas for validation
363
816
  // Note: Outgoing message schemas (Subscribe, Unsubscribe, ListRooms) are excluded
364
817
  // as they share the same type values with their response counterparts
365
818
  exports.AnyMessageSchema = zod_1.z.discriminatedUnion("type", [
819
+ // Authentication & Registration
366
820
  exports.RequestChallengeMessageSchema,
367
821
  exports.ChallengeMessageSchema,
368
822
  exports.CheckCachedAuthMessageSchema,
@@ -372,18 +826,41 @@ exports.AnyMessageSchema = zod_1.z.discriminatedUnion("type", [
372
826
  exports.AuthErrorMessageSchema,
373
827
  exports.RegisterMessageSchema,
374
828
  exports.RegistrationSuccessMessageSchema,
829
+ // Communication
375
830
  exports.UserMessageSchema,
376
831
  exports.TaskMessageSchema,
377
832
  exports.TaskResponseMessageSchema,
378
833
  exports.AgentSelectedMessageSchema,
379
834
  exports.AgentsListMessageSchema,
835
+ // Quote-Approve Flow (v2.2.0)
836
+ exports.TaskQuoteMessageSchema,
837
+ // System
380
838
  exports.ErrorMessageSchema,
381
839
  exports.PingMessageSchema,
382
840
  exports.PongMessageSchema,
383
- // Only response schemas for room operations (not outgoing request schemas)
841
+ // Room Subscription (Basic)
384
842
  exports.SubscribeResponseSchema,
385
843
  exports.UnsubscribeResponseSchema,
386
- exports.ListRoomsResponseSchema
844
+ exports.ListRoomsResponseSchema,
845
+ // Room Management Responses (v2.0.0)
846
+ exports.RoomOperationResponseSchema,
847
+ exports.RoomMemberOperationResponseSchema,
848
+ exports.RoomMembersResponseSchema,
849
+ // Agent Room Management Responses (v2.0.0)
850
+ exports.AgentRoomOperationResponseSchema,
851
+ exports.RoomAgentsResponseSchema,
852
+ exports.AvailableAgentsResponseSchema,
853
+ exports.AgentStatusUpdateMessageSchema,
854
+ // Room Ping System (v2.0.0)
855
+ exports.RoomPongResponseSchema,
856
+ // Admin Messages
857
+ exports.AllAgentsResponseSchema,
858
+ exports.UserCountMessageSchema,
859
+ exports.UserAuthenticatedMessageSchema,
860
+ exports.RateLimitNotificationMessageSchema,
861
+ exports.AgentDetailsResponseMessageSchema,
862
+ // User Preferences
863
+ exports.UserPreferencesUpdatedMessageSchema
387
864
  ]);
388
865
  // Type guards using Zod parse
389
866
  function isAuthSuccess(msg) {
@@ -467,16 +944,48 @@ function createListRooms() {
467
944
  type: "list_rooms"
468
945
  });
469
946
  }
947
+ // Quote-Approve Flow factory functions (v2.2.0)
948
+ function createRequestTask(content, room) {
949
+ return exports.RequestTaskMessageSchema.parse({
950
+ type: "request_task",
951
+ content,
952
+ room
953
+ });
954
+ }
955
+ function createConfirmTask(taskId, x402Payment) {
956
+ return exports.ConfirmTaskMessageSchema.parse({
957
+ type: "confirm_task",
958
+ data: {
959
+ task_id: taskId
960
+ },
961
+ ...(x402Payment && { payment: x402Payment }) // payment at top level for backend
962
+ });
963
+ }
964
+ function createSetUserPreferences(maxPricePerRequest) {
965
+ return exports.SetUserPreferencesMessageSchema.parse({
966
+ type: "set_user_preferences",
967
+ data: {
968
+ max_price_per_request: maxPricePerRequest
969
+ }
970
+ });
971
+ }
470
972
  // Validation helper
471
973
  function validateMessage(message) {
472
974
  return exports.AnyMessageSchema.parse(message);
473
975
  }
474
976
  // Safe parse helper
475
977
  function safeParseMessage(message) {
978
+ // Try specific message schemas first
476
979
  const result = exports.AnyMessageSchema.safeParse(message);
477
980
  if (result.success) {
478
981
  return { success: true, data: result.data };
479
982
  }
983
+ // Fall back to basic BaseMessage schema for unknown message types
984
+ // This allows the SDK to be more resilient to backend changes
985
+ const fallbackResult = exports.BaseMessageSchema.safeParse(message);
986
+ if (fallbackResult.success) {
987
+ return { success: true, data: fallbackResult.data };
988
+ }
480
989
  return { success: false, error: result.error };
481
990
  }
482
991
  //# sourceMappingURL=messages.js.map