@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,45 @@
1
+ /**
2
+ * Agent category constants and Zod schemas
3
+ * Enables agents to be tagged with up to 2 categories for better discoverability
4
+ */
5
+
6
+ import { z } from "zod";
7
+
8
+ /**
9
+ * Predefined agent categories for classification
10
+ */
11
+ export const AGENT_CATEGORIES = [
12
+ "Trading",
13
+ "Finance",
14
+ "Crypto",
15
+ "Social Media",
16
+ "Lead Generation",
17
+ "E-Commerce",
18
+ "SEO",
19
+ "News",
20
+ "Real Estate",
21
+ "Travel",
22
+ "Automation",
23
+ "Developer Tools",
24
+ "AI",
25
+ "Integrations",
26
+ "Open Source",
27
+ "Jobs",
28
+ "Price Lists",
29
+ "Other"
30
+ ] as const;
31
+
32
+ /**
33
+ * Maximum number of categories an agent can have
34
+ */
35
+ export const MAX_CATEGORIES = 2;
36
+
37
+ /**
38
+ * Zod schema for validating a single agent category
39
+ */
40
+ export const AgentCategorySchema = z.enum(AGENT_CATEGORIES);
41
+
42
+ /**
43
+ * TypeScript type for a single agent category
44
+ */
45
+ export type AgentCategory = z.infer<typeof AgentCategorySchema>;
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { z } from "zod";
7
- import { ClientTypeSchema, RoomSchema, MessageTypeSchema, MessageType } from "./messages";
7
+ import { ClientTypeSchema, RoomInfoSchema, MessageTypeSchema, MessageType } from "./messages";
8
8
  import { RetryStrategySchema, type RetryStrategy } from "../utils/retry-policy";
9
9
  import type { SecurePrivateKey } from "../utils/secure-private-key";
10
10
 
@@ -118,7 +118,17 @@ export const SDKConfigSchema = z.object({
118
118
  // Message deduplication (CB-4)
119
119
  enableMessageDeduplication: z.boolean().optional(),
120
120
  messageDedupeTtl: z.number().min(1000).max(3600000).optional(), // 1s to 1 hour
121
- messageDedupMaxSize: z.number().min(1).max(100000).optional()
121
+ messageDedupMaxSize: z.number().min(1).max(100000).optional(),
122
+
123
+ // Quote-Approve Payment Flow (v2.2.0)
124
+ autoApproveQuotes: z.boolean().optional(),
125
+ maxPricePerRequest: z.number().min(0).optional(), // in micro-USDC
126
+ quoteTimeout: z.number().min(1000).max(120000).optional(), // 1s to 2 minutes
127
+ paymentNetwork: z
128
+ .string()
129
+ .regex(/^[a-z0-9-]+:\d+$/, "Must be valid CAIP-2 format")
130
+ .optional(),
131
+ paymentAsset: z.string().optional()
122
132
  });
123
133
 
124
134
  // Partial config for constructor
@@ -146,11 +156,16 @@ export const AuthenticationStateSchema = z.object({
146
156
  isWhitelisted: z.boolean().optional(),
147
157
  isAdmin: z.boolean().optional(),
148
158
  nftVerified: z.boolean().optional(),
149
- rooms: z.array(z.string()).optional(), // Room IDs for backward compatibility
150
- roomObjects: z.array(RoomSchema).optional(), // Full room objects from auth
151
- privateRoomId: z.string().optional(),
159
+ rooms: z.array(z.string()).optional(), // Room IDs for backward compatibility (deprecated)
160
+ roomObjects: z.array(RoomInfoSchema).optional(), // Full room objects from auth (v2.0.0: uses RoomInfo)
161
+ privateRoomId: z.string().optional(), // DEPRECATED: Single room ID (use privateRoomIds instead)
152
162
  challenge: z.string().optional(),
153
- challengeTimestamp: z.number().optional()
163
+ challengeTimestamp: z.number().optional(),
164
+
165
+ // NEW in v2.0.0: Room categorization
166
+ privateRoomIds: z.array(z.string()).optional(), // IDs of rooms user owns
167
+ sharedRoomIds: z.array(z.string()).optional(), // IDs of rooms user is member of
168
+ maxPrivateRooms: z.number().optional() // Max rooms user can create
154
169
  });
155
170
 
156
171
  // Webhook config schema
@@ -217,7 +232,13 @@ export const DEFAULT_CONFIG: PartialSDKConfig = SDKConfigSchema.partial().parse(
217
232
  webhookTimeout: 10000,
218
233
  enableMessageDeduplication: true, // Enable by default to prevent duplicates
219
234
  messageDedupeTtl: 60000, // 60 seconds (1 minute)
220
- messageDedupMaxSize: 10000 // 10k messages
235
+ messageDedupMaxSize: 10000, // 10k messages
236
+
237
+ // Quote-Approve Payment Flow (v2.2.0)
238
+ autoApproveQuotes: true, // Auto-approve quotes by default
239
+ quoteTimeout: 30000, // 30 seconds for quote responses
240
+ paymentNetwork: "eip155:3338", // PEAQ mainnet
241
+ paymentAsset: "0xbbA60da06c2c5424f03f7434542280FCAd453d10" // USDC on PEAQ
221
242
  });
222
243
 
223
244
  // Configuration validation with custom refinements
@@ -774,6 +795,58 @@ export class SDKConfigBuilder {
774
795
  return this;
775
796
  }
776
797
 
798
+ /**
799
+ * Configures payment settings for the quote-approve flow (v2.2.0).
800
+ * Controls how the SDK handles task pricing and payments.
801
+ *
802
+ * @param options - Payment configuration options
803
+ * @param options.autoApprove - Auto-approve and pay for quotes (default: true)
804
+ * @param options.maxPricePerRequest - Maximum price per request in micro-USDC (1000000 = 1 USDC)
805
+ * @param options.quoteTimeout - Timeout for quote responses in ms (default: 30000)
806
+ * @param options.network - Payment network in CAIP-2 format (default: "eip155:3338")
807
+ * @param options.asset - Payment asset (default: "USDC")
808
+ * @returns this builder for method chaining
809
+ *
810
+ * @example
811
+ * ```typescript
812
+ * // Auto-approve with price limit
813
+ * builder.withPayments({
814
+ * autoApprove: true,
815
+ * maxPricePerRequest: 1000000 // Max 1 USDC per request
816
+ * })
817
+ *
818
+ * // Manual approval mode
819
+ * builder.withPayments({ autoApprove: false })
820
+ * ```
821
+ */
822
+ withPayments(options: {
823
+ autoApprove?: boolean;
824
+ maxPricePerRequest?: number;
825
+ quoteTimeout?: number;
826
+ network?: string;
827
+ asset?: string;
828
+ }): this {
829
+ if (options.autoApprove !== undefined) {
830
+ this.config.autoApproveQuotes = z.boolean().parse(options.autoApprove);
831
+ }
832
+ if (options.maxPricePerRequest !== undefined) {
833
+ this.config.maxPricePerRequest = z.number().min(0).parse(options.maxPricePerRequest);
834
+ }
835
+ if (options.quoteTimeout !== undefined) {
836
+ this.config.quoteTimeout = z.number().min(1000).max(120000).parse(options.quoteTimeout);
837
+ }
838
+ if (options.network !== undefined) {
839
+ this.config.paymentNetwork = z
840
+ .string()
841
+ .regex(/^[a-z0-9-]+:\d+$/)
842
+ .parse(options.network);
843
+ }
844
+ if (options.asset !== undefined) {
845
+ this.config.paymentAsset = z.string().parse(options.asset);
846
+ }
847
+ return this;
848
+ }
849
+
777
850
  /**
778
851
  * Builds and validates the final SDK configuration.
779
852
  * Performs comprehensive validation including custom refinements (e.g., webhook security).
@@ -38,6 +38,20 @@ export enum ErrorCode {
38
38
  // Rate limit
39
39
  RATE_LIMIT = "RATE_LIMIT",
40
40
 
41
+ // Room Management errors (v2.0.0)
42
+ OPERATION_FAILED = "OPERATION_FAILED",
43
+ PERMISSION_DENIED = "PERMISSION_DENIED",
44
+
45
+ // Quote-Approve Payment errors (v2.2.0)
46
+ QUOTE_EXPIRED = "QUOTE_EXPIRED",
47
+ QUOTE_NOT_FOUND = "QUOTE_NOT_FOUND",
48
+ QUOTE_TIMEOUT = "QUOTE_TIMEOUT",
49
+ PRICE_LIMIT_EXCEEDED = "PRICE_LIMIT_EXCEEDED",
50
+ INVALID_PAYMENT_NETWORK = "INVALID_PAYMENT_NETWORK",
51
+ INSUFFICIENT_BALANCE = "INSUFFICIENT_BALANCE",
52
+ PAYMENT_FAILED = "PAYMENT_FAILED",
53
+ PAYMENT_SIGNATURE_FAILED = "PAYMENT_SIGNATURE_FAILED",
54
+
41
55
  // Generic timeout (for backward compatibility)
42
56
  TIMEOUT_ERROR = "TIMEOUT_ERROR",
43
57
  TIMEOUT = "TIMEOUT"
@@ -231,6 +231,7 @@ describe("Error Classes", () => {
231
231
  expect(isRecoverableError(regularError)).toBe(false);
232
232
 
233
233
  const customError = { message: "Not an error object" };
234
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
234
235
  expect(isRecoverableError(customError as any)).toBe(false);
235
236
  });
236
237
  });
@@ -262,6 +262,21 @@ export class ConfigurationError extends SDKError {
262
262
  }
263
263
  }
264
264
 
265
+ /**
266
+ * Error thrown when payment operations fail (v2.2.0).
267
+ * Can occur when:
268
+ * - Payment signature creation fails
269
+ * - Price limit is exceeded
270
+ * - Insufficient balance
271
+ * - Invalid payment network
272
+ */
273
+ export class PaymentError extends SDKError {
274
+ constructor(message: string, code: ErrorCode, details?: any) {
275
+ super(message, code, details, false);
276
+ this.name = "PaymentError";
277
+ }
278
+ }
279
+
265
280
  // SDK Events interface with proper typing
266
281
  export interface SDKEvents {
267
282
  // Connection events
@@ -303,11 +318,63 @@ export interface SDKEvents {
303
318
  "room:message": (roomId: string, message: z.infer<typeof BaseMessageSchema>) => void;
304
319
  "room:list": (rooms: z.infer<typeof RoomInfoSchema>[]) => void;
305
320
 
321
+ // Room Management events (v2.0.0)
322
+ "room:created": (room: z.infer<typeof RoomInfoSchema>) => void;
323
+ "room:updated": (room: z.infer<typeof RoomInfoSchema>) => void;
324
+ "room:deleted": (roomId: string) => void;
325
+ "room:create_error": (error: Error) => void;
326
+ "room:update_error": (error: Error, roomId?: string) => void;
327
+ "room:delete_error": (error: Error, roomId?: string) => void;
328
+
329
+ // Agent Room Management events (v2.0.0)
330
+ "agent_room:agent_added": (roomId: string, agentId: string) => void;
331
+ "agent_room:agent_removed": (roomId: string, agentId: string) => void;
332
+ "agent_room:agents_listed": (roomId: string, agents: any[]) => void;
333
+ "agent_room:available_agents_listed": (agents: any[]) => void;
334
+ "agent_room:status_update": (data: {
335
+ roomId: string;
336
+ agentId: string;
337
+ status: string;
338
+ agent?: any;
339
+ }) => void;
340
+ "agent_room:add_error": (error: Error, roomId?: string) => void;
341
+ "agent_room:remove_error": (error: Error, roomId?: string) => void;
342
+ "agent_room:list_error": (error: Error, roomId?: string) => void;
343
+ "agent_room:list_available_error": (error: Error) => void;
344
+
306
345
  // Coordinator events
307
346
  "coordinator:processing": (userRequest: string) => void;
308
347
  "coordinator:selected": (agentId: string, reasoning: string) => void;
309
348
  "coordinator:error": (error: string) => void;
310
349
 
350
+ // Quote-Approve Payment events (v2.2.0)
351
+ "quote:received": (quote: any) => void;
352
+ "quote:expired": (taskId: string) => void;
353
+ "payment:blocked": (data: { agentId: string; agentPrice: number; maxPrice: number }) => void;
354
+ "payment:attached": (data: { agentId: string; amount: number; command: string }) => void;
355
+ "payment:error": (error: Error, agentId?: string) => void;
356
+
357
+ // Rate Limit events
358
+ rate_limit: (notification: {
359
+ title: string;
360
+ message: string;
361
+ ctaText?: string;
362
+ ctaLink?: string;
363
+ messageType: string;
364
+ limitType: string;
365
+ resetAt?: string;
366
+ }) => void;
367
+
368
+ // Admin events
369
+ "admin:user_count": (data: { count: number; timestamp?: string }) => void;
370
+ "admin:status_changed": (isAdmin: boolean) => void;
371
+
372
+ // User Presence events
373
+ "user:authenticated": (data: { wallet: string }) => void;
374
+
375
+ // User Preferences events
376
+ "preferences:updated": (data: { maxPricePerRequest?: number | null }) => void;
377
+
311
378
  // Webhook events
312
379
  "webhook:sent": (payload: any, url: string) => void;
313
380
  "webhook:success": (response: any, url: string) => void;
@@ -14,6 +14,7 @@ export {
14
14
 
15
15
  // Supporting schemas
16
16
  CapabilitySchema,
17
+ CommandPricingSchema,
17
18
  CommandSchema,
18
19
  RoomSchema,
19
20
  AgentSchema,
@@ -40,6 +41,12 @@ export {
40
41
  TaskResponseMessageSchema,
41
42
  AgentSelectedMessageSchema,
42
43
 
44
+ // Quote-Approve Flow schemas (v2.2.0)
45
+ PricingInfoSchema,
46
+ RequestTaskMessageSchema,
47
+ TaskQuoteMessageSchema,
48
+ ConfirmTaskMessageSchema,
49
+
43
50
  // System message schemas
44
51
  AgentsListMessageSchema,
45
52
  ErrorMessageSchema,
@@ -55,6 +62,33 @@ export {
55
62
  RoomInfoSchema,
56
63
  ListRoomsResponseSchema,
57
64
 
65
+ // Room Management schemas (v2.0.0)
66
+ CreateRoomMessageSchema,
67
+ UpdateRoomMessageSchema,
68
+ DeleteRoomMessageSchema,
69
+ RoomOperationResponseSchema,
70
+ RoomMemberInfoSchema,
71
+ AddRoomMemberMessageSchema,
72
+ RemoveRoomMemberMessageSchema,
73
+ ListRoomMembersMessageSchema,
74
+ RoomMembersResponseSchema,
75
+ RoomMemberOperationResponseSchema,
76
+
77
+ // Agent Room Management schemas (v2.0.0)
78
+ AgentRoomInfoSchema,
79
+ AddAgentToRoomMessageSchema,
80
+ RemoveAgentFromRoomMessageSchema,
81
+ ListRoomAgentsMessageSchema,
82
+ ListAvailableAgentsMessageSchema,
83
+ AgentStatusUpdateMessageSchema,
84
+ RoomAgentsResponseSchema,
85
+ AvailableAgentsResponseSchema,
86
+ AgentRoomOperationResponseSchema,
87
+
88
+ // Room Ping schemas (v2.0.0)
89
+ RoomPingMessageSchema,
90
+ RoomPongResponseSchema,
91
+
58
92
  // Union schema
59
93
  AnyMessageSchema,
60
94
 
@@ -65,6 +99,7 @@ export {
65
99
  type AgentType,
66
100
  type AgentStatus,
67
101
  type Capability,
102
+ type CommandPricing,
68
103
  type Command,
69
104
  type Room,
70
105
  type Agent,
@@ -82,6 +117,12 @@ export {
82
117
  type TaskMessage,
83
118
  type TaskResponseMessage,
84
119
  type AgentSelectedMessage,
120
+
121
+ // Quote-Approve Flow types (v2.2.0)
122
+ type PricingInfo,
123
+ type RequestTaskMessage,
124
+ type TaskQuoteMessage,
125
+ type ConfirmTaskMessage,
85
126
  type AgentsListMessage,
86
127
  type ErrorMessage,
87
128
  type PingMessage,
@@ -93,6 +134,64 @@ export {
93
134
  type UnsubscribeResponse,
94
135
  type RoomInfo,
95
136
  type ListRoomsResponse,
137
+
138
+ // Room Management types (v2.0.0)
139
+ type CreateRoomMessage,
140
+ type UpdateRoomMessage,
141
+ type DeleteRoomMessage,
142
+ type RoomOperationResponse,
143
+ type RoomMemberInfo,
144
+ type AddRoomMemberMessage,
145
+ type RemoveRoomMemberMessage,
146
+ type ListRoomMembersMessage,
147
+ type RoomMembersResponse,
148
+ type RoomMemberOperationResponse,
149
+
150
+ // Agent Room Management types (v2.0.0)
151
+ type AgentRoomInfo,
152
+ type AddAgentToRoomMessage,
153
+ type RemoveAgentFromRoomMessage,
154
+ type ListRoomAgentsMessage,
155
+ type ListAvailableAgentsMessage,
156
+ type AgentStatusUpdateMessage,
157
+ type RoomAgentsResponse,
158
+ type AvailableAgentsResponse,
159
+ type AgentRoomOperationResponse,
160
+
161
+ // Room Ping types (v2.0.0)
162
+ type RoomPingMessage,
163
+ type RoomPongResponse,
164
+
165
+ // Admin types
166
+ AdminAgentInfoSchema,
167
+ ListAllAgentsMessageSchema,
168
+ AllAgentsResponseSchema,
169
+ UserCountDataSchema,
170
+ UserCountMessageSchema,
171
+ UserAuthenticatedMessageSchema,
172
+ RateLimitNotificationMessageSchema,
173
+ GetAgentDetailsMessageSchema,
174
+ AgentDetailsResponseMessageSchema,
175
+ type AdminAgentInfo,
176
+ type ListAllAgentsMessage,
177
+ type AllAgentsResponse,
178
+ type UserCountData,
179
+ type UserCountMessage,
180
+ type UserAuthenticatedMessage,
181
+ type RateLimitNotificationMessage,
182
+ type GetAgentDetailsMessage,
183
+ type AgentDetailsResponseMessage,
184
+
185
+ // User Preferences types
186
+ SetUserPreferencesDataSchema,
187
+ SetUserPreferencesMessageSchema,
188
+ UserPreferencesUpdatedDataSchema,
189
+ UserPreferencesUpdatedMessageSchema,
190
+ type SetUserPreferencesData,
191
+ type SetUserPreferencesMessage,
192
+ type UserPreferencesUpdatedData,
193
+ type UserPreferencesUpdatedMessage,
194
+
96
195
  type AnyMessage,
97
196
 
98
197
  // Type guards
@@ -114,6 +213,9 @@ export {
114
213
  createSubscribe,
115
214
  createUnsubscribe,
116
215
  createListRooms,
216
+ createRequestTask,
217
+ createConfirmTask,
218
+ createSetUserPreferences,
117
219
 
118
220
  // Validation helpers
119
221
  validateMessage,
@@ -186,6 +288,7 @@ export {
186
288
  ValidationError,
187
289
  TimeoutError,
188
290
  RateLimitError,
291
+ PaymentError,
189
292
 
190
293
  // Validation helpers
191
294
  validateEventData,
@@ -197,3 +300,11 @@ export { ErrorCode } from "./error-codes";
197
300
 
198
301
  // Health status types
199
302
  export { type HealthStatus } from "./health";
303
+
304
+ // Agent category types
305
+ export {
306
+ AGENT_CATEGORIES,
307
+ MAX_CATEGORIES,
308
+ AgentCategorySchema,
309
+ type AgentCategory
310
+ } from "./categories";
@@ -20,7 +20,8 @@ import {
20
20
  describe("stringToBoolean transform", () => {
21
21
  // Test stringToBoolean indirectly through RoomSchema which uses it for is_public and is_active
22
22
 
23
- const createTestRoom = (is_public: any, is_active: any) => ({
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ const createTestRoom = (is_public: unknown, is_active: unknown) => ({
24
25
  id: "room-1",
25
26
  name: "Test Room",
26
27
  is_public,