@teneo-protocol/sdk 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/.eslintrc.json +11 -2
  2. package/.github/CODEOWNERS +2 -0
  3. package/.github/ISSUE_TEMPLATE/01-bug.yml +85 -0
  4. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  6. package/.github/workflows/claude-code-review.yml +8 -3
  7. package/.github/workflows/claude-reviewer.yml +6 -4
  8. package/.github/workflows/publish-npm.yml +1 -0
  9. package/.github/workflows/push-to-main.yml +1 -1
  10. package/.github/workflows/top-issue.yml +102 -0
  11. package/CHANGELOG.md +69 -0
  12. package/CONCEPTS.md +747 -0
  13. package/README.md +178 -8
  14. package/dist/constants.js +8 -8
  15. package/dist/constants.js.map +1 -1
  16. package/dist/core/websocket-client.d.ts +15 -3
  17. package/dist/core/websocket-client.d.ts.map +1 -1
  18. package/dist/core/websocket-client.js +52 -13
  19. package/dist/core/websocket-client.js.map +1 -1
  20. package/dist/formatters/response-formatter.js +4 -0
  21. package/dist/formatters/response-formatter.js.map +1 -1
  22. package/dist/handlers/message-handler-registry.js +2 -1
  23. package/dist/handlers/message-handler-registry.js.map +1 -1
  24. package/dist/handlers/message-handlers/agent-details-response-handler.d.ts +1666 -0
  25. package/dist/handlers/message-handlers/agent-details-response-handler.d.ts.map +1 -0
  26. package/dist/handlers/message-handlers/agent-details-response-handler.js +38 -0
  27. package/dist/handlers/message-handlers/agent-details-response-handler.js.map +1 -0
  28. package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -1
  29. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +2 -5
  30. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -1
  31. package/dist/handlers/message-handlers/agent-selected-handler.js +2 -5
  32. package/dist/handlers/message-handlers/agent-selected-handler.js.map +1 -1
  33. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +783 -0
  34. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -1
  35. package/dist/handlers/message-handlers/agent-status-update-handler.js +2 -5
  36. package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -1
  37. package/dist/handlers/message-handlers/agents-list-handler.js +2 -5
  38. package/dist/handlers/message-handlers/agents-list-handler.js.map +1 -1
  39. package/dist/handlers/message-handlers/all-agents-response-handler.d.ts +439 -0
  40. package/dist/handlers/message-handlers/all-agents-response-handler.d.ts.map +1 -0
  41. package/dist/handlers/message-handlers/all-agents-response-handler.js +36 -0
  42. package/dist/handlers/message-handlers/all-agents-response-handler.js.map +1 -0
  43. package/dist/handlers/message-handlers/auth-error-handler.js +2 -5
  44. package/dist/handlers/message-handlers/auth-error-handler.js.map +1 -1
  45. package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
  46. package/dist/handlers/message-handlers/auth-message-handler.js +6 -5
  47. package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
  48. package/dist/handlers/message-handlers/auth-required-handler.js +2 -5
  49. package/dist/handlers/message-handlers/auth-required-handler.js.map +1 -1
  50. package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
  51. package/dist/handlers/message-handlers/auth-success-handler.js +6 -5
  52. package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
  53. package/dist/handlers/message-handlers/base-handler.d.ts +4 -4
  54. package/dist/handlers/message-handlers/base-handler.d.ts.map +1 -1
  55. package/dist/handlers/message-handlers/base-handler.js +3 -1
  56. package/dist/handlers/message-handlers/base-handler.js.map +1 -1
  57. package/dist/handlers/message-handlers/challenge-handler.js +3 -2
  58. package/dist/handlers/message-handlers/challenge-handler.js.map +1 -1
  59. package/dist/handlers/message-handlers/error-message-handler.js +2 -5
  60. package/dist/handlers/message-handlers/error-message-handler.js.map +1 -1
  61. package/dist/handlers/message-handlers/index.d.ts +6 -0
  62. package/dist/handlers/message-handlers/index.d.ts.map +1 -1
  63. package/dist/handlers/message-handlers/index.js +33 -1
  64. package/dist/handlers/message-handlers/index.js.map +1 -1
  65. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +783 -0
  66. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -1
  67. package/dist/handlers/message-handlers/list-available-agents-handler.js +2 -5
  68. package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -1
  69. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +783 -0
  70. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -1
  71. package/dist/handlers/message-handlers/list-room-agents-handler.js +2 -5
  72. package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -1
  73. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +2 -199
  74. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
  75. package/dist/handlers/message-handlers/list-rooms-response-handler.js +4 -6
  76. package/dist/handlers/message-handlers/list-rooms-response-handler.js.map +1 -1
  77. package/dist/handlers/message-handlers/ping-pong-handler.js +4 -10
  78. package/dist/handlers/message-handlers/ping-pong-handler.js.map +1 -1
  79. package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts +94 -0
  80. package/dist/handlers/message-handlers/rate-limit-notification-handler.d.ts.map +1 -0
  81. package/dist/handlers/message-handlers/rate-limit-notification-handler.js +35 -0
  82. package/dist/handlers/message-handlers/rate-limit-notification-handler.js.map +1 -0
  83. package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
  84. package/dist/handlers/message-handlers/regular-message-handler.js +4 -6
  85. package/dist/handlers/message-handlers/regular-message-handler.js.map +1 -1
  86. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -1
  87. package/dist/handlers/message-handlers/room-operation-response-handler.js +2 -5
  88. package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -1
  89. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
  90. package/dist/handlers/message-handlers/subscribe-response-handler.js +4 -6
  91. package/dist/handlers/message-handlers/subscribe-response-handler.js.map +1 -1
  92. package/dist/handlers/message-handlers/task-quote-handler.d.ts +14 -0
  93. package/dist/handlers/message-handlers/task-quote-handler.d.ts.map +1 -0
  94. package/dist/handlers/message-handlers/task-quote-handler.js +29 -0
  95. package/dist/handlers/message-handlers/task-quote-handler.js.map +1 -0
  96. package/dist/handlers/message-handlers/task-response-handler.js +2 -5
  97. package/dist/handlers/message-handlers/task-response-handler.js.map +1 -1
  98. package/dist/handlers/message-handlers/types.d.ts +21 -9
  99. package/dist/handlers/message-handlers/types.d.ts.map +1 -1
  100. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
  101. package/dist/handlers/message-handlers/unsubscribe-response-handler.js +4 -6
  102. package/dist/handlers/message-handlers/unsubscribe-response-handler.js.map +1 -1
  103. package/dist/handlers/message-handlers/user-authenticated-handler.d.ts +40 -0
  104. package/dist/handlers/message-handlers/user-authenticated-handler.d.ts.map +1 -0
  105. package/dist/handlers/message-handlers/user-authenticated-handler.js +28 -0
  106. package/dist/handlers/message-handlers/user-authenticated-handler.js.map +1 -0
  107. package/dist/handlers/message-handlers/user-count-handler.d.ts +49 -0
  108. package/dist/handlers/message-handlers/user-count-handler.d.ts.map +1 -0
  109. package/dist/handlers/message-handlers/user-count-handler.js +31 -0
  110. package/dist/handlers/message-handlers/user-count-handler.js.map +1 -0
  111. package/dist/handlers/webhook-handler.d.ts +1 -1
  112. package/dist/handlers/webhook-handler.d.ts.map +1 -1
  113. package/dist/handlers/webhook-handler.js +14 -5
  114. package/dist/handlers/webhook-handler.js.map +1 -1
  115. package/dist/index.d.ts +6 -1
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +19 -2
  118. package/dist/index.js.map +1 -1
  119. package/dist/managers/admin-manager.d.ts +116 -0
  120. package/dist/managers/admin-manager.d.ts.map +1 -0
  121. package/dist/managers/admin-manager.js +169 -0
  122. package/dist/managers/admin-manager.js.map +1 -0
  123. package/dist/managers/agent-registry.d.ts +52 -1
  124. package/dist/managers/agent-registry.d.ts.map +1 -1
  125. package/dist/managers/agent-registry.js +145 -6
  126. package/dist/managers/agent-registry.js.map +1 -1
  127. package/dist/managers/agent-room-manager.d.ts +1 -7
  128. package/dist/managers/agent-room-manager.d.ts.map +1 -1
  129. package/dist/managers/agent-room-manager.js +83 -36
  130. package/dist/managers/agent-room-manager.js.map +1 -1
  131. package/dist/managers/connection-manager.js +2 -0
  132. package/dist/managers/connection-manager.js.map +1 -1
  133. package/dist/managers/index.d.ts +2 -1
  134. package/dist/managers/index.d.ts.map +1 -1
  135. package/dist/managers/index.js +3 -1
  136. package/dist/managers/index.js.map +1 -1
  137. package/dist/managers/message-router.d.ts +56 -5
  138. package/dist/managers/message-router.d.ts.map +1 -1
  139. package/dist/managers/message-router.js +155 -8
  140. package/dist/managers/message-router.js.map +1 -1
  141. package/dist/managers/room-management-manager.d.ts.map +1 -1
  142. package/dist/managers/room-management-manager.js +9 -7
  143. package/dist/managers/room-management-manager.js.map +1 -1
  144. package/dist/managers/room-manager.d.ts +7 -5
  145. package/dist/managers/room-manager.d.ts.map +1 -1
  146. package/dist/managers/room-manager.js +14 -10
  147. package/dist/managers/room-manager.js.map +1 -1
  148. package/dist/payments/index.d.ts +5 -0
  149. package/dist/payments/index.d.ts.map +1 -0
  150. package/dist/payments/index.js +21 -0
  151. package/dist/payments/index.js.map +1 -0
  152. package/dist/payments/payment-client.d.ts +74 -0
  153. package/dist/payments/payment-client.d.ts.map +1 -0
  154. package/dist/payments/payment-client.js +207 -0
  155. package/dist/payments/payment-client.js.map +1 -0
  156. package/dist/teneo-sdk.d.ts +135 -21
  157. package/dist/teneo-sdk.d.ts.map +1 -1
  158. package/dist/teneo-sdk.js +268 -26
  159. package/dist/teneo-sdk.js.map +1 -1
  160. package/dist/types/categories.d.ts +22 -0
  161. package/dist/types/categories.d.ts.map +1 -0
  162. package/dist/types/categories.js +40 -0
  163. package/dist/types/categories.js.map +1 -0
  164. package/dist/types/config.d.ts +79 -8
  165. package/dist/types/config.d.ts.map +1 -1
  166. package/dist/types/config.js +62 -5
  167. package/dist/types/config.js.map +1 -1
  168. package/dist/types/error-codes.d.ts +8 -0
  169. package/dist/types/error-codes.d.ts.map +1 -1
  170. package/dist/types/error-codes.js +9 -0
  171. package/dist/types/error-codes.js.map +1 -1
  172. package/dist/types/events.d.ts +44 -0
  173. package/dist/types/events.d.ts.map +1 -1
  174. package/dist/types/events.js +19 -1
  175. package/dist/types/events.js.map +1 -1
  176. package/dist/types/index.d.ts +3 -2
  177. package/dist/types/index.d.ts.map +1 -1
  178. package/dist/types/index.js +33 -3
  179. package/dist/types/index.js.map +1 -1
  180. package/dist/types/messages.d.ts +11219 -423
  181. package/dist/types/messages.d.ts.map +1 -1
  182. package/dist/types/messages.js +249 -7
  183. package/dist/types/messages.js.map +1 -1
  184. package/dist/utils/bounded-queue.d.ts.map +1 -1
  185. package/dist/utils/bounded-queue.js +5 -2
  186. package/dist/utils/bounded-queue.js.map +1 -1
  187. package/dist/utils/circuit-breaker.js +11 -4
  188. package/dist/utils/circuit-breaker.js.map +1 -1
  189. package/dist/utils/deduplication-cache.js +3 -1
  190. package/dist/utils/deduplication-cache.js.map +1 -1
  191. package/dist/utils/event-waiter.d.ts +3 -3
  192. package/dist/utils/event-waiter.d.ts.map +1 -1
  193. package/dist/utils/index.d.ts +1 -0
  194. package/dist/utils/index.d.ts.map +1 -1
  195. package/dist/utils/index.js +4 -1
  196. package/dist/utils/index.js.map +1 -1
  197. package/dist/utils/logger.js.map +1 -1
  198. package/dist/utils/pricing-resolver.d.ts +26 -0
  199. package/dist/utils/pricing-resolver.d.ts.map +1 -0
  200. package/dist/utils/pricing-resolver.js +85 -0
  201. package/dist/utils/pricing-resolver.js.map +1 -0
  202. package/dist/utils/rate-limiter.d.ts.map +1 -1
  203. package/dist/utils/rate-limiter.js +6 -0
  204. package/dist/utils/rate-limiter.js.map +1 -1
  205. package/dist/utils/retry-policy.js +1 -0
  206. package/dist/utils/retry-policy.js.map +1 -1
  207. package/dist/utils/secure-private-key.js +3 -1
  208. package/dist/utils/secure-private-key.js.map +1 -1
  209. package/dist/utils/signature-verifier.d.ts.map +1 -1
  210. package/dist/utils/signature-verifier.js +3 -1
  211. package/dist/utils/signature-verifier.js.map +1 -1
  212. package/examples/.env.example +1 -1
  213. package/examples/agent-room-management-example.ts +10 -9
  214. package/examples/basic-usage.ts +3 -4
  215. package/examples/claude-agent-x-follower/.env.example +1 -1
  216. package/examples/claude-agent-x-follower/QUICKSTART.md +2 -2
  217. package/examples/claude-agent-x-follower/README.md +2 -2
  218. package/examples/claude-agent-x-follower/index.ts +120 -96
  219. package/examples/n8n-teneo/.env.example +1 -1
  220. package/examples/n8n-teneo/README.md +1 -1
  221. package/examples/n8n-teneo/index.ts +54 -44
  222. package/examples/nestjs-dashboard/.env.example +11 -0
  223. package/examples/nestjs-dashboard/README.md +297 -0
  224. package/examples/nestjs-dashboard/nest-cli.json +10 -0
  225. package/examples/nestjs-dashboard/package.json +44 -0
  226. package/examples/nestjs-dashboard/pnpm-lock.yaml +3079 -0
  227. package/examples/nestjs-dashboard/src/app.controller.ts +24 -0
  228. package/examples/nestjs-dashboard/src/app.module.ts +15 -0
  229. package/examples/nestjs-dashboard/src/main.ts +32 -0
  230. package/examples/nestjs-dashboard/src/public/dashboard.html +1144 -0
  231. package/examples/nestjs-dashboard/src/teneo/agents.controller.ts +54 -0
  232. package/examples/nestjs-dashboard/src/teneo/events.controller.ts +65 -0
  233. package/examples/nestjs-dashboard/src/teneo/messages.controller.ts +47 -0
  234. package/examples/nestjs-dashboard/src/teneo/rooms.controller.ts +258 -0
  235. package/examples/nestjs-dashboard/src/teneo/teneo.module.ts +13 -0
  236. package/examples/nestjs-dashboard/src/teneo/teneo.service.ts +484 -0
  237. package/examples/nestjs-dashboard/tsconfig.json +22 -0
  238. package/examples/openai-teneo/.env.example +1 -1
  239. package/examples/openai-teneo/README.md +2 -2
  240. package/examples/openai-teneo/index.ts +82 -71
  241. package/examples/production-dashboard/.env.example +1 -1
  242. package/examples/production-dashboard/README.md +1 -1
  243. package/examples/production-dashboard/server.ts +2 -2
  244. package/examples/room-management-example.ts +5 -8
  245. package/examples/usage/.env.example +1 -1
  246. package/examples/usage/01-connect.ts +3 -4
  247. package/examples/usage/02-list-agents.ts +2 -3
  248. package/examples/usage/03-pick-agent.ts +2 -3
  249. package/examples/usage/04-find-by-capability.ts +2 -3
  250. package/examples/usage/05-webhook-example.ts +2 -3
  251. package/examples/usage/06-simple-api-server.ts +2 -3
  252. package/examples/usage/07-event-listener.ts +2 -3
  253. package/examples/webhook-integration.ts +1 -1
  254. package/examples/x-influencer-battle-server.ts +2 -2
  255. package/package.json +4 -1
  256. package/src/core/websocket-client.test.ts +8 -3
  257. package/src/core/websocket-client.ts +36 -6
  258. package/src/formatters/response-formatter.test.ts +2 -0
  259. package/src/formatters/response-formatter.ts +3 -3
  260. package/src/handlers/message-handlers/agent-details-response-handler.ts +42 -0
  261. package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +2 -8
  262. package/src/handlers/message-handlers/agent-status-update-handler.ts +3 -9
  263. package/src/handlers/message-handlers/all-agents-response-handler.ts +39 -0
  264. package/src/handlers/message-handlers/auth-message-handler.ts +5 -0
  265. package/src/handlers/message-handlers/auth-success-handler.ts +6 -1
  266. package/src/handlers/message-handlers/base-handler.ts +20 -7
  267. package/src/handlers/message-handlers/index.ts +34 -0
  268. package/src/handlers/message-handlers/list-room-agents-handler.ts +2 -5
  269. package/src/handlers/message-handlers/list-rooms-response-handler.ts +4 -2
  270. package/src/handlers/message-handlers/rate-limit-notification-handler.ts +45 -0
  271. package/src/handlers/message-handlers/regular-message-handler.ts +3 -2
  272. package/src/handlers/message-handlers/room-operation-response-handler.ts +3 -6
  273. package/src/handlers/message-handlers/subscribe-response-handler.ts +12 -2
  274. package/src/handlers/message-handlers/task-quote-handler.ts +31 -0
  275. package/src/handlers/message-handlers/types.ts +37 -9
  276. package/src/handlers/message-handlers/unsubscribe-response-handler.ts +12 -2
  277. package/src/handlers/message-handlers/user-authenticated-handler.ts +31 -0
  278. package/src/handlers/message-handlers/user-count-handler.ts +34 -0
  279. package/src/handlers/webhook-handler.test.ts +3 -2
  280. package/src/handlers/webhook-handler.ts +13 -7
  281. package/src/index.ts +21 -0
  282. package/src/managers/admin-manager.ts +249 -0
  283. package/src/managers/agent-registry.test.ts +2 -1
  284. package/src/managers/agent-registry.ts +170 -2
  285. package/src/managers/agent-room-manager.ts +98 -42
  286. package/src/managers/index.ts +13 -1
  287. package/src/managers/message-router.ts +215 -17
  288. package/src/managers/room-management-manager.ts +4 -7
  289. package/src/managers/room-manager.ts +11 -15
  290. package/src/payments/index.ts +22 -0
  291. package/src/payments/payment-client.ts +240 -0
  292. package/src/teneo-sdk.ts +302 -27
  293. package/src/types/categories.ts +45 -0
  294. package/src/types/config.ts +70 -2
  295. package/src/types/error-codes.ts +10 -0
  296. package/src/types/events.test.ts +1 -0
  297. package/src/types/events.ts +43 -0
  298. package/src/types/index.ts +56 -0
  299. package/src/types/messages.test.ts +2 -1
  300. package/src/types/messages.ts +307 -5
  301. package/src/utils/bounded-queue.test.ts +1 -1
  302. package/src/utils/bounded-queue.ts +2 -1
  303. package/src/utils/circuit-breaker.test.ts +1 -1
  304. package/src/utils/deduplication-cache.test.ts +1 -1
  305. package/src/utils/event-waiter.test.ts +1 -1
  306. package/src/utils/event-waiter.ts +3 -3
  307. package/src/utils/index.ts +7 -0
  308. package/src/utils/logger.ts +8 -8
  309. package/src/utils/pricing-resolver.ts +128 -0
  310. package/src/utils/rate-limiter.test.ts +1 -1
  311. package/src/utils/rate-limiter.ts +1 -0
  312. package/src/utils/signature-verifier.test.ts +2 -2
  313. package/src/utils/signature-verifier.ts +3 -2
  314. package/tests/.env.example +7 -0
  315. package/tests/direct-agent-test.ts +151 -0
  316. package/tests/integration/real-server.test.ts +2 -0
  317. package/tests/integration/room-management.test.ts +10 -8
  318. package/tests/integration/websocket.test.ts +4 -1
  319. package/tests/payment-flow-test.ts +147 -0
  320. package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +17 -29
  321. package/tests/unit/handlers/agent-status-update-handler.test.ts +2 -6
  322. package/tests/unit/handlers/auth-success-handler-rooms.test.ts +1 -3
  323. package/tests/unit/handlers/list-available-agents-handler.test.ts +4 -12
  324. package/tests/unit/handlers/list-room-agents-handler.test.ts +2 -6
  325. package/tests/unit/handlers/room-operation-response-handler.test.ts +9 -36
  326. package/tests/unit/managers/agent-room-manager.test.ts +9 -16
  327. package/tests/unit/managers/room-management-manager.test.ts +21 -39
  328. package/tsconfig.json +2 -2
  329. package/vitest.config.ts +1 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Payment Flow Test - Tests the quote-approve payment flow
3
+ *
4
+ * Setup:
5
+ * Create a .env file in the teneo-sdk root with:
6
+ * PRIVATE_KEY=your_private_key_here
7
+ * WS_URL=wss://backend.developer.chatroom.teneo-protocol.ai/ws # optional
8
+ *
9
+ * Run:
10
+ * npx tsx tests/payment-flow-test.ts
11
+ */
12
+
13
+ import "dotenv/config";
14
+ import { TeneoSDK } from "../src/teneo-sdk";
15
+
16
+ // Configuration from environment variables (loaded from .env)
17
+ const WS_URL = process.env.WS_URL || "wss://backend.developer.chatroom.teneo-protocol.ai/ws";
18
+ const PRIVATE_KEY = process.env.PRIVATE_KEY;
19
+
20
+ if (!PRIVATE_KEY) {
21
+ console.error("❌ Missing PRIVATE_KEY");
22
+ console.error("");
23
+ console.error("Setup: Create a .env file in the teneo-sdk root with:");
24
+ console.error(" PRIVATE_KEY=your_private_key_here");
25
+ console.error("");
26
+ console.error("Then run:");
27
+ console.error(" npx tsx tests/payment-flow-test.ts");
28
+ process.exit(1);
29
+ }
30
+
31
+ // Type assertion after validation
32
+ const privateKey: string = PRIVATE_KEY;
33
+
34
+ let TEST_ROOM = ""; // Will be set after auth to use user's private room
35
+
36
+ async function testPaymentFlow() {
37
+ console.log("=== Payment Flow Test ===\n");
38
+ console.log("WebSocket URL:", WS_URL);
39
+
40
+ // Create SDK with quote-approve enabled
41
+ const config = TeneoSDK.builder()
42
+ .withWebSocketUrl(WS_URL)
43
+ .withAuthentication(privateKey)
44
+ .withPayments({
45
+ autoApprove: true,
46
+ maxPricePerRequest: 10_000_000 // Max 10 USDC
47
+ })
48
+ .withLogging("info")
49
+ .build();
50
+
51
+ const sdk = new TeneoSDK(config);
52
+
53
+ // Set up event listeners
54
+ sdk.on("connection:open", () => console.log("✓ Connected"));
55
+ sdk.on("auth:success", (state) => {
56
+ console.log("✓ Authenticated as:", state.walletAddress);
57
+ // Get user's first private room
58
+ if (state.privateRoomIds && state.privateRoomIds.length > 0) {
59
+ TEST_ROOM = state.privateRoomIds[0];
60
+ console.log("✓ Using room:", TEST_ROOM);
61
+ } else if (state.rooms && state.rooms.length > 0) {
62
+ TEST_ROOM = state.rooms[0];
63
+ console.log("✓ Using room:", TEST_ROOM);
64
+ }
65
+ });
66
+ sdk.on("quote:received", (quote) => {
67
+ console.log("\n📋 Quote Received:");
68
+ console.log(" Task ID:", quote.data.task_id);
69
+ console.log(" Agent:", quote.data.agent_name);
70
+ console.log(" Price:", quote.data.pricing.pricePerUnit, "USDC");
71
+ console.log(" Expires:", quote.data.expires_at);
72
+ });
73
+ sdk.on("payment:attached", (data) => {
74
+ console.log("\n💰 Payment Attached:");
75
+ console.log(" Agent:", data.agentId);
76
+ console.log(" Amount:", data.amount / 1_000_000, "USDC");
77
+ console.log(" Command:", data.command);
78
+ });
79
+ sdk.on("agent:response", (response) => {
80
+ console.log("\n📥 Agent Response:");
81
+ console.log(" Success:", response.success);
82
+ console.log(" Content:", response.content.substring(0, 200) + "...");
83
+ });
84
+ sdk.on("error", (error) => console.error("❌ Error:", error.message));
85
+
86
+ try {
87
+ // Connect
88
+ console.log("\nConnecting to", WS_URL);
89
+ await sdk.connect();
90
+ console.log("Connected!\n");
91
+
92
+ // Wait for auth to complete and room to be set
93
+ await sleep(500);
94
+
95
+ if (!TEST_ROOM) {
96
+ throw new Error("No room available - auth may have failed");
97
+ }
98
+
99
+ // Subscribe to test room
100
+ console.log("Subscribing to room:", TEST_ROOM);
101
+ try {
102
+ await sdk.subscribeToRoom(TEST_ROOM);
103
+ console.log("Subscribed!\n");
104
+ } catch {
105
+ console.log("Room subscription skipped (private room)\n");
106
+ }
107
+
108
+ // Wait a bit for connection to stabilize
109
+ await sleep(1000);
110
+
111
+ // Send test message - this will trigger quote-approve flow
112
+ console.log("\n=== Sending Test Request ===");
113
+ console.log('Request: "get me 1 post from @elonmusk from x"\n');
114
+
115
+ const response = await sdk.sendMessage("get me 1 post from @elonmusk from x", {
116
+ room: TEST_ROOM,
117
+ waitForResponse: true,
118
+ timeout: 120000 // 2 minutes
119
+ });
120
+
121
+ if (response) {
122
+ console.log("\n=== Test Complete ===");
123
+ console.log("Response received successfully!");
124
+ console.log(
125
+ "Humanized:",
126
+ typeof response.humanized === "string" ? response.humanized.substring(0, 500) : response
127
+ );
128
+ }
129
+ } catch (error: unknown) {
130
+ const err = error as Error & { details?: unknown };
131
+ console.error("\n❌ Test failed:", err.message);
132
+ if (err.details) {
133
+ console.error("Details:", err.details);
134
+ }
135
+ } finally {
136
+ console.log("\nDisconnecting...");
137
+ sdk.destroy();
138
+ console.log("Done!");
139
+ }
140
+ }
141
+
142
+ function sleep(ms: number): Promise<void> {
143
+ return new Promise((resolve) => setTimeout(resolve, ms));
144
+ }
145
+
146
+ // Run the test
147
+ testPaymentFlow().catch(console.error);
@@ -135,7 +135,11 @@ describe("AgentRoomOperationResponseHandler", () => {
135
135
  expect(mockLogger.warn).toHaveBeenCalledWith(
136
136
  "Agent room operation succeeded but missing room_id or agent_id"
137
137
  );
138
- expect(emitSpy).not.toHaveBeenCalledWith("agent_room:agent_added", expect.anything(), expect.anything());
138
+ expect(emitSpy).not.toHaveBeenCalledWith(
139
+ "agent_room:agent_added",
140
+ expect.anything(),
141
+ expect.anything()
142
+ );
139
143
  });
140
144
 
141
145
  it("should handle success without room_id", async () => {
@@ -153,7 +157,11 @@ describe("AgentRoomOperationResponseHandler", () => {
153
157
  expect(mockLogger.warn).toHaveBeenCalledWith(
154
158
  "Agent room operation succeeded but missing room_id or agent_id"
155
159
  );
156
- expect(emitSpy).not.toHaveBeenCalledWith("agent_room:agent_added", expect.anything(), expect.anything());
160
+ expect(emitSpy).not.toHaveBeenCalledWith(
161
+ "agent_room:agent_added",
162
+ expect.anything(),
163
+ expect.anything()
164
+ );
157
165
  });
158
166
  });
159
167
 
@@ -176,21 +184,11 @@ describe("AgentRoomOperationResponseHandler", () => {
176
184
  await handler.handle(message, mockContext);
177
185
 
178
186
  // Should emit both add and remove error events
179
- expect(emitSpy).toHaveBeenCalledWith(
180
- "agent_room:add_error",
181
- expect.any(SDKError),
182
- roomId
183
- );
184
- expect(emitSpy).toHaveBeenCalledWith(
185
- "agent_room:remove_error",
186
- expect.any(SDKError),
187
- roomId
188
- );
187
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:add_error", expect.any(SDKError), roomId);
188
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:remove_error", expect.any(SDKError), roomId);
189
189
 
190
190
  // Verify error details
191
- const addErrorCall = emitSpy.mock.calls.find(
192
- (call) => call[0] === "agent_room:add_error"
193
- );
191
+ const addErrorCall = emitSpy.mock.calls.find((call) => call[0] === "agent_room:add_error");
194
192
  const error = addErrorCall[1] as SDKError;
195
193
  expect(error.message).toBe(errorMessage);
196
194
  expect(error.code).toBe(ErrorCode.OPERATION_FAILED);
@@ -230,9 +228,7 @@ describe("AgentRoomOperationResponseHandler", () => {
230
228
  await handler.handle(message, mockContext);
231
229
 
232
230
  // Should use default error message
233
- const addErrorCall = emitSpy.mock.calls.find(
234
- (call) => call[0] === "agent_room:add_error"
235
- );
231
+ const addErrorCall = emitSpy.mock.calls.find((call) => call[0] === "agent_room:add_error");
236
232
  const error = addErrorCall[1] as SDKError;
237
233
  expect(error.message).toBe("Agent room operation failed");
238
234
  });
@@ -250,11 +246,7 @@ describe("AgentRoomOperationResponseHandler", () => {
250
246
  await handler.handle(message, mockContext);
251
247
 
252
248
  // Should emit error events with undefined room_id
253
- expect(emitSpy).toHaveBeenCalledWith(
254
- "agent_room:add_error",
255
- expect.any(SDKError),
256
- undefined
257
- );
249
+ expect(emitSpy).toHaveBeenCalledWith("agent_room:add_error", expect.any(SDKError), undefined);
258
250
  expect(emitSpy).toHaveBeenCalledWith(
259
251
  "agent_room:remove_error",
260
252
  expect.any(SDKError),
@@ -308,7 +300,7 @@ describe("AgentRoomOperationResponseHandler", () => {
308
300
  describe("Message Validation", () => {
309
301
  it("should handle invalid message structure", async () => {
310
302
  const invalidMessage = {
311
- type: "agent_room_operation_response",
303
+ type: "agent_room_operation_response"
312
304
  // Missing data field
313
305
  } as any;
314
306
 
@@ -321,11 +313,7 @@ describe("AgentRoomOperationResponseHandler", () => {
321
313
  );
322
314
 
323
315
  // Should emit message:error event
324
- expect(emitSpy).toHaveBeenCalledWith(
325
- "message:error",
326
- expect.any(Error),
327
- invalidMessage
328
- );
316
+ expect(emitSpy).toHaveBeenCalledWith("message:error", expect.any(Error), invalidMessage);
329
317
  });
330
318
 
331
319
  it("should accept valid message with extra fields", async () => {
@@ -247,7 +247,7 @@ describe("AgentStatusUpdateHandler", () => {
247
247
  describe("Message Validation", () => {
248
248
  it("should handle invalid message structure", async () => {
249
249
  const invalidMessage = {
250
- type: "agent_status_update",
250
+ type: "agent_status_update"
251
251
  // Missing data field
252
252
  } as any;
253
253
 
@@ -260,11 +260,7 @@ describe("AgentStatusUpdateHandler", () => {
260
260
  );
261
261
 
262
262
  // Should emit message:error event
263
- expect(emitSpy).toHaveBeenCalledWith(
264
- "message:error",
265
- expect.any(Error),
266
- invalidMessage
267
- );
263
+ expect(emitSpy).toHaveBeenCalledWith("message:error", expect.any(Error), invalidMessage);
268
264
  });
269
265
 
270
266
  it("should accept valid message with extra fields", async () => {
@@ -542,9 +542,7 @@ describe("AuthSuccessHandler - Room Management", () => {
542
542
  id: "client-123",
543
543
  type: "user",
544
544
  address: "0xabc...",
545
- rooms: [
546
- { id: "room-1", name: "Room", is_owner: true } as RoomInfo
547
- ],
545
+ rooms: [{ id: "room-1", name: "Room", is_owner: true } as RoomInfo],
548
546
  max_private_rooms: 3
549
547
  }
550
548
  } as AuthSuccessMessage;
@@ -143,12 +143,8 @@ describe("ListAvailableAgentsHandler", () => {
143
143
  agent_id: "agent-1",
144
144
  agent_name: "Weather Agent",
145
145
  description: "Provides weather information",
146
- capabilities: [
147
- { name: "weather-forecast", description: "Get weather forecasts" }
148
- ],
149
- commands: [
150
- { trigger: "weather", description: "Check weather" }
151
- ],
146
+ capabilities: [{ name: "weather-forecast", description: "Get weather forecasts" }],
147
+ commands: [{ trigger: "weather", description: "Check weather" }],
152
148
  image: "https://example.com/agent.png",
153
149
  status: "online"
154
150
  }
@@ -192,7 +188,7 @@ describe("ListAvailableAgentsHandler", () => {
192
188
  describe("Message Validation", () => {
193
189
  it("should handle invalid message structure", async () => {
194
190
  const invalidMessage = {
195
- type: "available_agents_response",
191
+ type: "available_agents_response"
196
192
  // Missing data field
197
193
  } as any;
198
194
 
@@ -205,11 +201,7 @@ describe("ListAvailableAgentsHandler", () => {
205
201
  );
206
202
 
207
203
  // Should emit message:error event
208
- expect(emitSpy).toHaveBeenCalledWith(
209
- "message:error",
210
- expect.any(Error),
211
- invalidMessage
212
- );
204
+ expect(emitSpy).toHaveBeenCalledWith("message:error", expect.any(Error), invalidMessage);
213
205
  });
214
206
 
215
207
  it("should accept valid message with extra fields", async () => {
@@ -227,7 +227,7 @@ describe("ListRoomAgentsHandler", () => {
227
227
  describe("Message Validation", () => {
228
228
  it("should handle invalid message structure", async () => {
229
229
  const invalidMessage = {
230
- type: "room_agents_response",
230
+ type: "room_agents_response"
231
231
  // Missing data field
232
232
  } as any;
233
233
 
@@ -240,11 +240,7 @@ describe("ListRoomAgentsHandler", () => {
240
240
  );
241
241
 
242
242
  // Should emit message:error event
243
- expect(emitSpy).toHaveBeenCalledWith(
244
- "message:error",
245
- expect.any(Error),
246
- invalidMessage
247
- );
243
+ expect(emitSpy).toHaveBeenCalledWith("message:error", expect.any(Error), invalidMessage);
248
244
  });
249
245
 
250
246
  it("should accept valid message with extra fields", async () => {
@@ -240,25 +240,12 @@ describe("RoomOperationResponseHandler", () => {
240
240
  await handler.handle(message, mockContext);
241
241
 
242
242
  // Should emit all error events (since we can't determine operation type)
243
- expect(emitSpy).toHaveBeenCalledWith(
244
- "room:create_error",
245
- expect.any(SDKError)
246
- );
247
- expect(emitSpy).toHaveBeenCalledWith(
248
- "room:update_error",
249
- expect.any(SDKError),
250
- roomId
251
- );
252
- expect(emitSpy).toHaveBeenCalledWith(
253
- "room:delete_error",
254
- expect.any(SDKError),
255
- roomId
256
- );
243
+ expect(emitSpy).toHaveBeenCalledWith("room:create_error", expect.any(SDKError));
244
+ expect(emitSpy).toHaveBeenCalledWith("room:update_error", expect.any(SDKError), roomId);
245
+ expect(emitSpy).toHaveBeenCalledWith("room:delete_error", expect.any(SDKError), roomId);
257
246
 
258
247
  // Verify error details
259
- const createErrorCall = emitSpy.mock.calls.find(
260
- (call) => call[0] === "room:create_error"
261
- );
248
+ const createErrorCall = emitSpy.mock.calls.find((call) => call[0] === "room:create_error");
262
249
  const error = createErrorCall[1] as SDKError;
263
250
  expect(error.message).toBe(errorMessage);
264
251
  expect(error.code).toBe(ErrorCode.OPERATION_FAILED);
@@ -290,9 +277,7 @@ describe("RoomOperationResponseHandler", () => {
290
277
  await handler.handle(message, mockContext);
291
278
 
292
279
  // Should use default error message
293
- const createErrorCall = emitSpy.mock.calls.find(
294
- (call) => call[0] === "room:create_error"
295
- );
280
+ const createErrorCall = emitSpy.mock.calls.find((call) => call[0] === "room:create_error");
296
281
  const error = createErrorCall[1] as SDKError;
297
282
  expect(error.message).toBe("Room operation failed");
298
283
  });
@@ -310,16 +295,8 @@ describe("RoomOperationResponseHandler", () => {
310
295
 
311
296
  // Should still emit error events
312
297
  expect(emitSpy).toHaveBeenCalledWith("room:create_error", expect.any(SDKError));
313
- expect(emitSpy).toHaveBeenCalledWith(
314
- "room:update_error",
315
- expect.any(SDKError),
316
- undefined
317
- );
318
- expect(emitSpy).toHaveBeenCalledWith(
319
- "room:delete_error",
320
- expect.any(SDKError),
321
- undefined
322
- );
298
+ expect(emitSpy).toHaveBeenCalledWith("room:update_error", expect.any(SDKError), undefined);
299
+ expect(emitSpy).toHaveBeenCalledWith("room:delete_error", expect.any(SDKError), undefined);
323
300
  });
324
301
  });
325
302
 
@@ -431,7 +408,7 @@ describe("RoomOperationResponseHandler", () => {
431
408
  describe("Message Validation", () => {
432
409
  it("should handle invalid message structure", async () => {
433
410
  const invalidMessage = {
434
- type: "room_operation_response",
411
+ type: "room_operation_response"
435
412
  // Missing data field
436
413
  } as any;
437
414
 
@@ -444,11 +421,7 @@ describe("RoomOperationResponseHandler", () => {
444
421
  );
445
422
 
446
423
  // Should emit message:error event
447
- expect(emitSpy).toHaveBeenCalledWith(
448
- "message:error",
449
- expect.any(Error),
450
- invalidMessage
451
- );
424
+ expect(emitSpy).toHaveBeenCalledWith("message:error", expect.any(Error), invalidMessage);
452
425
  });
453
426
 
454
427
  it("should accept valid message with extra fields", async () => {
@@ -8,6 +8,7 @@ import { AgentRoomManager, AgentRoomInfo } from "../../../src/managers/agent-roo
8
8
  import { RoomManagementManager } from "../../../src/managers/room-management-manager";
9
9
  import { WebSocketClient } from "../../../src/core/websocket-client";
10
10
  import { Logger, RoomInfo } from "../../../src/types";
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
12
  import { ErrorCode } from "../../../src/types/error-codes";
12
13
 
13
14
  describe("AgentRoomManager", () => {
@@ -63,7 +64,7 @@ describe("AgentRoomManager", () => {
63
64
  mockWsClient.isConnected = false;
64
65
 
65
66
  await expect(manager.addAgentToRoom("room-123", "agent-456")).rejects.toThrow(
66
- "Not connected to Teneo network"
67
+ "Not connected to Teneo Protocol"
67
68
  );
68
69
  });
69
70
 
@@ -122,9 +123,7 @@ describe("AgentRoomManager", () => {
122
123
 
123
124
  it("should invalidate cache after adding agent", async () => {
124
125
  // Pre-populate cache
125
- const cachedAgents: AgentRoomInfo[] = [
126
- { agent_id: "agent-1", agent_name: "Agent 1" }
127
- ];
126
+ const cachedAgents: AgentRoomInfo[] = [{ agent_id: "agent-1", agent_name: "Agent 1" }];
128
127
  manager.cacheRoomAgents("room-123", cachedAgents);
129
128
 
130
129
  expect(manager.getRoomAgents("room-123")).toHaveLength(1);
@@ -164,7 +163,7 @@ describe("AgentRoomManager", () => {
164
163
  mockWsClient.isConnected = false;
165
164
 
166
165
  await expect(manager.removeAgentFromRoom("room-123", "agent-456")).rejects.toThrow(
167
- "Not connected to Teneo network"
166
+ "Not connected to Teneo Protocol"
168
167
  );
169
168
  });
170
169
 
@@ -203,9 +202,7 @@ describe("AgentRoomManager", () => {
203
202
 
204
203
  it("should invalidate cache after removing agent", async () => {
205
204
  // Pre-populate cache
206
- const cachedAgents: AgentRoomInfo[] = [
207
- { agent_id: "agent-456", agent_name: "Agent 456" }
208
- ];
205
+ const cachedAgents: AgentRoomInfo[] = [{ agent_id: "agent-456", agent_name: "Agent 456" }];
209
206
  manager.cacheRoomAgents("room-123", cachedAgents);
210
207
 
211
208
  expect(manager.getRoomAgents("room-123")).toHaveLength(1);
@@ -277,7 +274,7 @@ describe("AgentRoomManager", () => {
277
274
  mockWsClient.isConnected = false;
278
275
 
279
276
  await expect(manager.listRoomAgents("room-123")).rejects.toThrow(
280
- "Not connected to Teneo network"
277
+ "Not connected to Teneo Protocol"
281
278
  );
282
279
  });
283
280
 
@@ -359,7 +356,7 @@ describe("AgentRoomManager", () => {
359
356
  mockWsClient.isConnected = false;
360
357
 
361
358
  await expect(manager.listAvailableAgents("room-123")).rejects.toThrow(
362
- "Not connected to Teneo network"
359
+ "Not connected to Teneo Protocol"
363
360
  );
364
361
  });
365
362
 
@@ -425,9 +422,7 @@ describe("AgentRoomManager", () => {
425
422
  });
426
423
 
427
424
  describe("Cache Management", () => {
428
- const mockAgents: AgentRoomInfo[] = [
429
- { agent_id: "agent-1", agent_name: "Agent 1" }
430
- ];
425
+ const mockAgents: AgentRoomInfo[] = [{ agent_id: "agent-1", agent_name: "Agent 1" }];
431
426
 
432
427
  it("should cache room agents", () => {
433
428
  manager.cacheRoomAgents("room-123", mockAgents);
@@ -497,9 +492,7 @@ describe("AgentRoomManager", () => {
497
492
  });
498
493
 
499
494
  describe("Return Value Immutability", () => {
500
- const mockAgents: AgentRoomInfo[] = [
501
- { agent_id: "agent-1", agent_name: "Agent 1" }
502
- ];
495
+ const mockAgents: AgentRoomInfo[] = [{ agent_id: "agent-1", agent_name: "Agent 1" }];
503
496
 
504
497
  it("should return defensive copies from getRoomAgents", () => {
505
498
  manager.cacheRoomAgents("room-123", mockAgents);
@@ -74,17 +74,17 @@ describe("RoomManagementManager", () => {
74
74
  it("should reject if not connected", async () => {
75
75
  mockWsClient.isConnected = false;
76
76
 
77
- await expect(
78
- manager.createRoom({ name: "Test Room" })
79
- ).rejects.toThrow("Not connected to Teneo network");
77
+ await expect(manager.createRoom({ name: "Test Room" })).rejects.toThrow(
78
+ "Not connected to Teneo Protocol"
79
+ );
80
80
  });
81
81
 
82
82
  it("should validate room name", async () => {
83
83
  await expect(manager.createRoom({ name: "" })).rejects.toThrow("Room name cannot be empty");
84
84
 
85
- await expect(
86
- manager.createRoom({ name: "a".repeat(101) })
87
- ).rejects.toThrow("Room name too long");
85
+ await expect(manager.createRoom({ name: "a".repeat(101) })).rejects.toThrow(
86
+ "Room name too long"
87
+ );
88
88
  });
89
89
 
90
90
  it("should validate room description", async () => {
@@ -106,9 +106,7 @@ describe("RoomManagementManager", () => {
106
106
  } as RoomInfo
107
107
  ]);
108
108
 
109
- await expect(
110
- manager.createRoom({ name: "New Room" })
111
- ).rejects.toThrow("Room limit reached");
109
+ await expect(manager.createRoom({ name: "New Room" })).rejects.toThrow("Room limit reached");
112
110
  });
113
111
 
114
112
  it("should timeout if no response", async () => {
@@ -178,21 +176,19 @@ describe("RoomManagementManager", () => {
178
176
  });
179
177
 
180
178
  it("should reject if user doesn't own room", async () => {
181
- await expect(
182
- manager.updateRoom("room-999", { name: "New Name" })
183
- ).rejects.toThrow("don't own this room");
179
+ await expect(manager.updateRoom("room-999", { name: "New Name" })).rejects.toThrow(
180
+ "don't own this room"
181
+ );
184
182
  });
185
183
 
186
184
  it("should require at least one field", async () => {
187
- await expect(manager.updateRoom("room-123", {})).rejects.toThrow(
188
- "At least one field"
189
- );
185
+ await expect(manager.updateRoom("room-123", {})).rejects.toThrow("At least one field");
190
186
  });
191
187
 
192
188
  it("should validate updated name", async () => {
193
- await expect(
194
- manager.updateRoom("room-123", { name: "" })
195
- ).rejects.toThrow("Room name cannot be empty");
189
+ await expect(manager.updateRoom("room-123", { name: "" })).rejects.toThrow(
190
+ "Room name cannot be empty"
191
+ );
196
192
  });
197
193
 
198
194
  it("should validate updated description", async () => {
@@ -273,9 +269,7 @@ describe("RoomManagementManager", () => {
273
269
  });
274
270
 
275
271
  it("should get room by ID from owned rooms", () => {
276
- manager.setOwnedRooms([
277
- { id: "room-1", name: "Owned Room", is_owner: true } as RoomInfo
278
- ]);
272
+ manager.setOwnedRooms([{ id: "room-1", name: "Owned Room", is_owner: true } as RoomInfo]);
279
273
 
280
274
  const result = manager.getRoomById("room-1");
281
275
  expect(result).toBeDefined();
@@ -283,9 +277,7 @@ describe("RoomManagementManager", () => {
283
277
  });
284
278
 
285
279
  it("should get room by ID from shared rooms", () => {
286
- manager.setSharedRooms([
287
- { id: "room-2", name: "Shared Room", is_owner: false } as RoomInfo
288
- ]);
280
+ manager.setSharedRooms([{ id: "room-2", name: "Shared Room", is_owner: false } as RoomInfo]);
289
281
 
290
282
  const result = manager.getRoomById("room-2");
291
283
  expect(result).toBeDefined();
@@ -382,9 +374,7 @@ describe("RoomManagementManager", () => {
382
374
  });
383
375
 
384
376
  it("should remove room from cache", () => {
385
- manager.setOwnedRooms([
386
- { id: "room-1", name: "Room 1", is_owner: true } as RoomInfo
387
- ]);
377
+ manager.setOwnedRooms([{ id: "room-1", name: "Room 1", is_owner: true } as RoomInfo]);
388
378
 
389
379
  expect(manager.getRoomById("room-1")).toBeDefined();
390
380
 
@@ -396,12 +386,8 @@ describe("RoomManagementManager", () => {
396
386
 
397
387
  it("should clear all caches", () => {
398
388
  manager.setRoomLimit(5);
399
- manager.setOwnedRooms([
400
- { id: "room-1", name: "Room 1", is_owner: true } as RoomInfo
401
- ]);
402
- manager.setSharedRooms([
403
- { id: "room-2", name: "Room 2", is_owner: false } as RoomInfo
404
- ]);
389
+ manager.setOwnedRooms([{ id: "room-1", name: "Room 1", is_owner: true } as RoomInfo]);
390
+ manager.setSharedRooms([{ id: "room-2", name: "Room 2", is_owner: false } as RoomInfo]);
405
391
 
406
392
  manager.clearCaches();
407
393
 
@@ -413,9 +399,7 @@ describe("RoomManagementManager", () => {
413
399
 
414
400
  describe("Return Value Immutability", () => {
415
401
  it("should return defensive copies from getOwnedRooms", () => {
416
- manager.setOwnedRooms([
417
- { id: "room-1", name: "Room 1", is_owner: true } as RoomInfo
418
- ]);
402
+ manager.setOwnedRooms([{ id: "room-1", name: "Room 1", is_owner: true } as RoomInfo]);
419
403
 
420
404
  const rooms1 = manager.getOwnedRooms();
421
405
  const rooms2 = manager.getOwnedRooms();
@@ -425,9 +409,7 @@ describe("RoomManagementManager", () => {
425
409
  });
426
410
 
427
411
  it("should return defensive copy from getRoomById", () => {
428
- manager.setOwnedRooms([
429
- { id: "room-1", name: "Room 1", is_owner: true } as RoomInfo
430
- ]);
412
+ manager.setOwnedRooms([{ id: "room-1", name: "Room 1", is_owner: true } as RoomInfo]);
431
413
 
432
414
  const room1 = manager.getRoomById("room-1");
433
415
  const room2 = manager.getRoomById("room-1");
package/tsconfig.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "target": "ES2020",
3
+ "target": "ES2022",
4
4
  "module": "commonjs",
5
- "lib": ["ES2020"],
5
+ "lib": ["ES2022", "DOM"],
6
6
  "outDir": "./dist",
7
7
  "rootDir": "./src",
8
8
  "strict": true,
package/vitest.config.ts CHANGED
@@ -25,6 +25,7 @@ export default defineConfig({
25
25
  }
26
26
  },
27
27
  include: ["src/**/*.test.ts", "src/**/*.spec.ts", "tests/**/*.test.ts", "tests/**/*.spec.ts"],
28
+ exclude: ["tests/integration/**"],
28
29
  setupFiles: ["./tests/setup.ts"],
29
30
  testTimeout: 10000,
30
31
  hookTimeout: 10000