@teneo-protocol/sdk 1.0.1 → 2.0.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 (153) hide show
  1. package/.github/workflows/publish-npm.yml +8 -6
  2. package/CHANGELOG.md +265 -0
  3. package/README.md +406 -53
  4. package/dist/core/websocket-client.d.ts +12 -0
  5. package/dist/core/websocket-client.d.ts.map +1 -1
  6. package/dist/core/websocket-client.js +22 -2
  7. package/dist/core/websocket-client.js.map +1 -1
  8. package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts +76 -0
  9. package/dist/handlers/message-handlers/agent-room-operation-response-handler.d.ts.map +1 -0
  10. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js +70 -0
  11. package/dist/handlers/message-handlers/agent-room-operation-response-handler.js.map +1 -0
  12. package/dist/handlers/message-handlers/agent-selected-handler.d.ts +92 -38
  13. package/dist/handlers/message-handlers/agent-selected-handler.d.ts.map +1 -1
  14. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts +904 -0
  15. package/dist/handlers/message-handlers/agent-status-update-handler.d.ts.map +1 -0
  16. package/dist/handlers/message-handlers/agent-status-update-handler.js +51 -0
  17. package/dist/handlers/message-handlers/agent-status-update-handler.js.map +1 -0
  18. package/dist/handlers/message-handlers/auth-error-handler.d.ts +45 -31
  19. package/dist/handlers/message-handlers/auth-error-handler.d.ts.map +1 -1
  20. package/dist/handlers/message-handlers/auth-message-handler.d.ts +6 -0
  21. package/dist/handlers/message-handlers/auth-message-handler.d.ts.map +1 -1
  22. package/dist/handlers/message-handlers/auth-message-handler.js +65 -5
  23. package/dist/handlers/message-handlers/auth-message-handler.js.map +1 -1
  24. package/dist/handlers/message-handlers/auth-required-handler.d.ts +49 -31
  25. package/dist/handlers/message-handlers/auth-required-handler.d.ts.map +1 -1
  26. package/dist/handlers/message-handlers/auth-success-handler.d.ts +6 -0
  27. package/dist/handlers/message-handlers/auth-success-handler.d.ts.map +1 -1
  28. package/dist/handlers/message-handlers/auth-success-handler.js +46 -4
  29. package/dist/handlers/message-handlers/auth-success-handler.js.map +1 -1
  30. package/dist/handlers/message-handlers/challenge-handler.d.ts +45 -31
  31. package/dist/handlers/message-handlers/challenge-handler.d.ts.map +1 -1
  32. package/dist/handlers/message-handlers/error-message-handler.d.ts +49 -31
  33. package/dist/handlers/message-handlers/error-message-handler.d.ts.map +1 -1
  34. package/dist/handlers/message-handlers/index.d.ts +5 -0
  35. package/dist/handlers/message-handlers/index.d.ts.map +1 -1
  36. package/dist/handlers/message-handlers/index.js +23 -1
  37. package/dist/handlers/message-handlers/index.js.map +1 -1
  38. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts +877 -0
  39. package/dist/handlers/message-handlers/list-available-agents-handler.d.ts.map +1 -0
  40. package/dist/handlers/message-handlers/list-available-agents-handler.js +38 -0
  41. package/dist/handlers/message-handlers/list-available-agents-handler.js.map +1 -0
  42. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts +886 -0
  43. package/dist/handlers/message-handlers/list-room-agents-handler.d.ts.map +1 -0
  44. package/dist/handlers/message-handlers/list-room-agents-handler.js +51 -0
  45. package/dist/handlers/message-handlers/list-room-agents-handler.js.map +1 -0
  46. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts +178 -89
  47. package/dist/handlers/message-handlers/list-rooms-response-handler.d.ts.map +1 -1
  48. package/dist/handlers/message-handlers/ping-pong-handler.d.ts +62 -58
  49. package/dist/handlers/message-handlers/ping-pong-handler.d.ts.map +1 -1
  50. package/dist/handlers/message-handlers/regular-message-handler.d.ts +31 -29
  51. package/dist/handlers/message-handlers/regular-message-handler.d.ts.map +1 -1
  52. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts +328 -0
  53. package/dist/handlers/message-handlers/room-operation-response-handler.d.ts.map +1 -0
  54. package/dist/handlers/message-handlers/room-operation-response-handler.js +92 -0
  55. package/dist/handlers/message-handlers/room-operation-response-handler.js.map +1 -0
  56. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts +53 -31
  57. package/dist/handlers/message-handlers/subscribe-response-handler.d.ts.map +1 -1
  58. package/dist/handlers/message-handlers/types.d.ts +2 -0
  59. package/dist/handlers/message-handlers/types.d.ts.map +1 -1
  60. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts +53 -31
  61. package/dist/handlers/message-handlers/unsubscribe-response-handler.d.ts.map +1 -1
  62. package/dist/managers/agent-room-manager.d.ts +222 -0
  63. package/dist/managers/agent-room-manager.d.ts.map +1 -0
  64. package/dist/managers/agent-room-manager.js +508 -0
  65. package/dist/managers/agent-room-manager.js.map +1 -0
  66. package/dist/managers/index.d.ts +2 -0
  67. package/dist/managers/index.d.ts.map +1 -1
  68. package/dist/managers/index.js +5 -1
  69. package/dist/managers/index.js.map +1 -1
  70. package/dist/managers/room-management-manager.d.ts +213 -0
  71. package/dist/managers/room-management-manager.d.ts.map +1 -0
  72. package/dist/managers/room-management-manager.js +440 -0
  73. package/dist/managers/room-management-manager.js.map +1 -0
  74. package/dist/managers/room-manager.d.ts +4 -4
  75. package/dist/managers/room-manager.d.ts.map +1 -1
  76. package/dist/managers/room-manager.js.map +1 -1
  77. package/dist/teneo-sdk.d.ts +333 -13
  78. package/dist/teneo-sdk.d.ts.map +1 -1
  79. package/dist/teneo-sdk.js +468 -1
  80. package/dist/teneo-sdk.js.map +1 -1
  81. package/dist/types/config.d.ts +63 -54
  82. package/dist/types/config.d.ts.map +1 -1
  83. package/dist/types/config.js +8 -4
  84. package/dist/types/config.js.map +1 -1
  85. package/dist/types/error-codes.d.ts +2 -0
  86. package/dist/types/error-codes.d.ts.map +1 -1
  87. package/dist/types/error-codes.js +3 -0
  88. package/dist/types/error-codes.js.map +1 -1
  89. package/dist/types/events.d.ts +132 -68
  90. package/dist/types/events.d.ts.map +1 -1
  91. package/dist/types/events.js.map +1 -1
  92. package/dist/types/index.d.ts +1 -1
  93. package/dist/types/index.d.ts.map +1 -1
  94. package/dist/types/index.js +27 -2
  95. package/dist/types/index.js.map +1 -1
  96. package/dist/types/messages.d.ts +11396 -2559
  97. package/dist/types/messages.d.ts.map +1 -1
  98. package/dist/types/messages.js +294 -27
  99. package/dist/types/messages.js.map +1 -1
  100. package/examples/.env.example +1 -1
  101. package/examples/agent-room-management-example.ts +334 -0
  102. package/examples/claude-agent-x-follower/.env.example +2 -2
  103. package/examples/claude-agent-x-follower/QUICKSTART.md +1 -1
  104. package/examples/claude-agent-x-follower/README.md +1 -1
  105. package/examples/n8n-teneo/.env.example +2 -2
  106. package/examples/n8n-teneo/README.md +1 -1
  107. package/examples/openai-teneo/.env.example +2 -2
  108. package/examples/openai-teneo/README.md +1 -1
  109. package/examples/production-dashboard/.env.example +2 -2
  110. package/examples/production-dashboard/README.md +89 -12
  111. package/examples/production-dashboard/public/dashboard.html +1173 -601
  112. package/examples/production-dashboard/server.ts +347 -5
  113. package/examples/room-management-example.ts +285 -0
  114. package/examples/usage/.env.example +1 -1
  115. package/examples/usage/01-connect.ts +1 -1
  116. package/examples/usage/02-list-agents.ts +1 -1
  117. package/examples/usage/03-pick-agent.ts +1 -1
  118. package/examples/usage/04-find-by-capability.ts +1 -1
  119. package/examples/usage/05-webhook-example.ts +1 -1
  120. package/examples/usage/06-simple-api-server.ts +1 -1
  121. package/examples/usage/07-event-listener.ts +1 -1
  122. package/examples/usage/README.md +1 -1
  123. package/package.json +9 -1
  124. package/src/core/websocket-client.ts +26 -2
  125. package/src/handlers/message-handlers/agent-room-operation-response-handler.ts +83 -0
  126. package/src/handlers/message-handlers/agent-status-update-handler.ts +58 -0
  127. package/src/handlers/message-handlers/auth-message-handler.ts +73 -5
  128. package/src/handlers/message-handlers/auth-success-handler.ts +58 -6
  129. package/src/handlers/message-handlers/index.ts +19 -0
  130. package/src/handlers/message-handlers/list-available-agents-handler.ts +41 -0
  131. package/src/handlers/message-handlers/list-room-agents-handler.ts +61 -0
  132. package/src/handlers/message-handlers/room-operation-response-handler.ts +105 -0
  133. package/src/handlers/message-handlers/types.ts +6 -0
  134. package/src/managers/agent-room-manager.ts +609 -0
  135. package/src/managers/index.ts +2 -0
  136. package/src/managers/room-management-manager.ts +523 -0
  137. package/src/managers/room-manager.ts +4 -5
  138. package/src/teneo-sdk.ts +505 -4
  139. package/src/types/config.ts +10 -5
  140. package/src/types/error-codes.ts +4 -0
  141. package/src/types/events.ts +24 -0
  142. package/src/types/index.ts +55 -0
  143. package/src/types/messages.ts +374 -41
  144. package/tests/integration/room-management.test.ts +514 -0
  145. package/tests/integration/websocket.test.ts +1 -1
  146. package/tests/unit/handlers/agent-room-operation-response-handler.test.ts +394 -0
  147. package/tests/unit/handlers/agent-status-update-handler.test.ts +407 -0
  148. package/tests/unit/handlers/auth-success-handler-rooms.test.ts +699 -0
  149. package/tests/unit/handlers/list-available-agents-handler.test.ts +256 -0
  150. package/tests/unit/handlers/list-room-agents-handler.test.ts +294 -0
  151. package/tests/unit/handlers/room-operation-response-handler.test.ts +527 -0
  152. package/tests/unit/managers/agent-room-manager.test.ts +534 -0
  153. package/tests/unit/managers/room-management-manager.test.ts +438 -0
@@ -0,0 +1,213 @@
1
+ /**
2
+ * RoomManagementManager - Manages room CRUD operations (v2.0.0)
3
+ * Handles creating, updating, and deleting private rooms
4
+ * Tracks owned vs shared rooms with local caching
5
+ */
6
+ import { EventEmitter } from "eventemitter3";
7
+ import { WebSocketClient } from "../core/websocket-client";
8
+ import { RoomInfo, Logger } from "../types";
9
+ import { SDKEvents } from "../types/events";
10
+ export interface CreateRoomOptions {
11
+ name: string;
12
+ description?: string;
13
+ }
14
+ export interface UpdateRoomOptions {
15
+ name?: string;
16
+ description?: string;
17
+ }
18
+ export declare class RoomManagementManager extends EventEmitter<SDKEvents> {
19
+ private readonly wsClient;
20
+ private readonly logger;
21
+ private readonly ownedRooms;
22
+ private readonly sharedRooms;
23
+ private maxPrivateRooms;
24
+ constructor(wsClient: WebSocketClient, logger: Logger);
25
+ /**
26
+ * Creates a new private room.
27
+ * Checks room limit before creating.
28
+ *
29
+ * @param options - Room creation options
30
+ * @returns Promise that resolves when room is created
31
+ * @throws {SDKError} If not connected, over limit, or validation fails
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const room = await sdk.rooms.createRoom({
36
+ * name: 'My Private Room',
37
+ * description: 'A room for my project'
38
+ * });
39
+ * console.log(`Created room: ${room.id}`);
40
+ * ```
41
+ */
42
+ createRoom(options: CreateRoomOptions): Promise<RoomInfo>;
43
+ /**
44
+ * Updates an existing room's name and/or description.
45
+ * User must own the room to update it.
46
+ *
47
+ * @param roomId - ID of room to update
48
+ * @param updates - Fields to update
49
+ * @returns Promise that resolves when room is updated
50
+ * @throws {SDKError} If not connected, not owner, or validation fails
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * await sdk.rooms.updateRoom('room-123', {
55
+ * name: 'Updated Room Name',
56
+ * description: 'New description'
57
+ * });
58
+ * ```
59
+ */
60
+ updateRoom(roomId: string, updates: UpdateRoomOptions): Promise<RoomInfo>;
61
+ /**
62
+ * Deletes a room permanently.
63
+ * User must own the room to delete it.
64
+ *
65
+ * @param roomId - ID of room to delete
66
+ * @returns Promise that resolves when room is deleted
67
+ * @throws {SDKError} If not connected or not owner
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * await sdk.rooms.deleteRoom('room-123');
72
+ * console.log('Room deleted successfully');
73
+ * ```
74
+ */
75
+ deleteRoom(roomId: string): Promise<void>;
76
+ /**
77
+ * Gets all rooms owned by the current user.
78
+ * Synchronous method that returns cached data.
79
+ *
80
+ * @returns Array of owned room info
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * const myRooms = sdk.rooms.getOwnedRooms();
85
+ * console.log(`I own ${myRooms.length} rooms`);
86
+ * ```
87
+ */
88
+ getOwnedRooms(): ReadonlyArray<Readonly<RoomInfo>>;
89
+ /**
90
+ * Gets all rooms the user is a member of (but doesn't own).
91
+ * Synchronous method that returns cached data.
92
+ *
93
+ * @returns Array of shared room info
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const sharedRooms = sdk.rooms.getSharedRooms();
98
+ * console.log(`I'm a member of ${sharedRooms.length} shared rooms`);
99
+ * ```
100
+ */
101
+ getSharedRooms(): ReadonlyArray<Readonly<RoomInfo>>;
102
+ /**
103
+ * Gets all rooms the user has access to (both owned and shared).
104
+ * Convenience method that combines getOwnedRooms() and getSharedRooms().
105
+ * Synchronous method that returns cached data.
106
+ *
107
+ * @returns Array of all room info (owned + shared)
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const allRooms = sdk.getAllRooms();
112
+ * console.log(`I have access to ${allRooms.length} total rooms`);
113
+ *
114
+ * // Filter by ownership if needed
115
+ * const myRooms = allRooms.filter(r => r.is_owner);
116
+ * const sharedWithMe = allRooms.filter(r => !r.is_owner);
117
+ * ```
118
+ */
119
+ getAllRooms(): ReadonlyArray<Readonly<RoomInfo>>;
120
+ /**
121
+ * Gets a specific room by ID.
122
+ * Checks both owned and shared room caches.
123
+ *
124
+ * @param roomId - Room ID to look up
125
+ * @returns Room info if found, undefined otherwise
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * const room = sdk.rooms.getRoomById('room-123');
130
+ * if (room) {
131
+ * console.log(`Room: ${room.name}`);
132
+ * }
133
+ * ```
134
+ */
135
+ getRoomById(roomId: string): Readonly<RoomInfo> | undefined;
136
+ /**
137
+ * Gets the maximum number of private rooms the user can create.
138
+ * Based on user's subscription/plan.
139
+ *
140
+ * @returns Maximum private room limit
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * const limit = sdk.rooms.getRoomLimit();
145
+ * console.log(`You can create up to ${limit} private rooms`);
146
+ * ```
147
+ */
148
+ getRoomLimit(): number;
149
+ /**
150
+ * Checks if user can create another private room.
151
+ * Compares current owned room count against limit.
152
+ *
153
+ * @returns True if under limit, false otherwise
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * if (sdk.rooms.canCreateRoom()) {
158
+ * await sdk.rooms.createRoom({ name: 'New Room' });
159
+ * } else {
160
+ * console.log('Room limit reached!');
161
+ * }
162
+ * ```
163
+ */
164
+ canCreateRoom(): boolean;
165
+ /**
166
+ * Gets the current count of owned private rooms.
167
+ *
168
+ * @returns Number of rooms user owns
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * const count = sdk.rooms.getOwnedRoomCount();
173
+ * const limit = sdk.rooms.getRoomLimit();
174
+ * console.log(`Using ${count}/${limit} room slots`);
175
+ * ```
176
+ */
177
+ getOwnedRoomCount(): number;
178
+ /**
179
+ * Sets the room limit from auth response.
180
+ * @internal
181
+ */
182
+ setRoomLimit(limit: number): void;
183
+ /**
184
+ * Initializes owned rooms cache from auth response.
185
+ * @internal
186
+ */
187
+ setOwnedRooms(rooms: RoomInfo[]): void;
188
+ /**
189
+ * Initializes shared rooms cache from auth response.
190
+ * @internal
191
+ */
192
+ setSharedRooms(rooms: RoomInfo[]): void;
193
+ /**
194
+ * Adds or updates a room in the appropriate cache.
195
+ * Determines owned vs shared based on is_owner flag.
196
+ * @internal
197
+ */
198
+ upsertRoom(room: RoomInfo): void;
199
+ /**
200
+ * Removes a room from cache.
201
+ * Checks both owned and shared caches.
202
+ * @internal
203
+ */
204
+ removeRoom(roomId: string): void;
205
+ /**
206
+ * Clears all caches. Called on disconnect.
207
+ * @internal
208
+ */
209
+ clearCaches(): void;
210
+ private validateRoomName;
211
+ private validateRoomDescription;
212
+ }
213
+ //# sourceMappingURL=room-management-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-management-manager.d.ts","sourceRoot":"","sources":["../../src/managers/room-management-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAY,MAAM,iBAAiB,CAAC;AAGtD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,qBAAsB,SAAQ,YAAY,CAAC,SAAS,CAAC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAGhC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,eAAe,CAAa;gBAExB,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM;IAUrD;;;;;;;;;;;;;;;;OAgBG;IACU,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA4DtE;;;;;;;;;;;;;;;;OAgBG;IACU,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA2EtF;;;;;;;;;;;;;OAaG;IACU,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DtD;;;;;;;;;;;OAWG;IACI,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAIzD;;;;;;;;;;;OAWG;IACI,cAAc,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAI1D;;;;;;;;;;;;;;;;OAgBG;IACI,WAAW,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAIvD;;;;;;;;;;;;;;OAcG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS;IAUlE;;;;;;;;;;;OAWG;IACI,YAAY,IAAI,MAAM;IAI7B;;;;;;;;;;;;;;OAcG;IACI,aAAa,IAAI,OAAO;IAI/B;;;;;;;;;;;OAWG;IACI,iBAAiB,IAAI,MAAM;IAQlC;;;OAGG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxC;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAQ7C;;;OAGG;IACI,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAQ9C;;;;OAIG;IACI,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAcvC;;;;OAIG;IACI,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAavC;;;OAGG;IACI,WAAW,IAAI,IAAI;IAW1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,uBAAuB;CAQhC"}
@@ -0,0 +1,440 @@
1
+ "use strict";
2
+ /**
3
+ * RoomManagementManager - Manages room CRUD operations (v2.0.0)
4
+ * Handles creating, updating, and deleting private rooms
5
+ * Tracks owned vs shared rooms with local caching
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.RoomManagementManager = void 0;
9
+ const eventemitter3_1 = require("eventemitter3");
10
+ const events_1 = require("../types/events");
11
+ const error_codes_1 = require("../types/error-codes");
12
+ class RoomManagementManager extends eventemitter3_1.EventEmitter {
13
+ constructor(wsClient, logger) {
14
+ super();
15
+ // Room caches
16
+ this.ownedRooms = new Map(); // Rooms user owns
17
+ this.sharedRooms = new Map(); // Rooms user is member of
18
+ this.maxPrivateRooms = 1; // Default limit
19
+ this.wsClient = wsClient;
20
+ this.logger = logger;
21
+ }
22
+ // ============================================================================
23
+ // ROOM CRUD OPERATIONS
24
+ // ============================================================================
25
+ /**
26
+ * Creates a new private room.
27
+ * Checks room limit before creating.
28
+ *
29
+ * @param options - Room creation options
30
+ * @returns Promise that resolves when room is created
31
+ * @throws {SDKError} If not connected, over limit, or validation fails
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const room = await sdk.rooms.createRoom({
36
+ * name: 'My Private Room',
37
+ * description: 'A room for my project'
38
+ * });
39
+ * console.log(`Created room: ${room.id}`);
40
+ * ```
41
+ */
42
+ async createRoom(options) {
43
+ if (!this.wsClient.isConnected) {
44
+ throw new events_1.SDKError("Not connected to Teneo network", error_codes_1.ErrorCode.NOT_CONNECTED);
45
+ }
46
+ // Validate inputs
47
+ this.validateRoomName(options.name);
48
+ if (options.description !== undefined) {
49
+ this.validateRoomDescription(options.description);
50
+ }
51
+ // Check room limit
52
+ if (!this.canCreateRoom()) {
53
+ throw new events_1.SDKError(`Room limit reached. Maximum ${this.maxPrivateRooms} private rooms allowed.`, error_codes_1.ErrorCode.VALIDATION_ERROR);
54
+ }
55
+ this.logger.debug("RoomManagementManager: Creating room", options);
56
+ // Send create_room message
57
+ const message = {
58
+ type: "create_room",
59
+ data: {
60
+ name: options.name,
61
+ description: options.description
62
+ }
63
+ };
64
+ // Return promise that will be resolved by the response handler
65
+ return new Promise((resolve, reject) => {
66
+ const timeout = setTimeout(() => {
67
+ cleanup();
68
+ reject(new events_1.SDKError("Room creation timeout", error_codes_1.ErrorCode.TIMEOUT));
69
+ }, 30000);
70
+ const onSuccess = (room) => {
71
+ cleanup();
72
+ resolve(room);
73
+ };
74
+ const onError = (error) => {
75
+ cleanup();
76
+ reject(error);
77
+ };
78
+ const cleanup = () => {
79
+ clearTimeout(timeout);
80
+ this.off("room:created", onSuccess);
81
+ this.off("room:create_error", onError);
82
+ };
83
+ this.once("room:created", onSuccess);
84
+ this.once("room:create_error", onError);
85
+ this.wsClient.sendMessage(message);
86
+ });
87
+ }
88
+ /**
89
+ * Updates an existing room's name and/or description.
90
+ * User must own the room to update it.
91
+ *
92
+ * @param roomId - ID of room to update
93
+ * @param updates - Fields to update
94
+ * @returns Promise that resolves when room is updated
95
+ * @throws {SDKError} If not connected, not owner, or validation fails
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * await sdk.rooms.updateRoom('room-123', {
100
+ * name: 'Updated Room Name',
101
+ * description: 'New description'
102
+ * });
103
+ * ```
104
+ */
105
+ async updateRoom(roomId, updates) {
106
+ if (!this.wsClient.isConnected) {
107
+ throw new events_1.SDKError("Not connected to Teneo network", error_codes_1.ErrorCode.NOT_CONNECTED);
108
+ }
109
+ // Verify user owns room
110
+ if (!this.ownedRooms.has(roomId)) {
111
+ throw new events_1.SDKError("Cannot update room: You don't own this room", error_codes_1.ErrorCode.PERMISSION_DENIED);
112
+ }
113
+ // Validate at least one field is provided
114
+ if (updates.name === undefined && updates.description === undefined) {
115
+ throw new events_1.SDKError("At least one field (name or description) must be provided", error_codes_1.ErrorCode.VALIDATION_ERROR);
116
+ }
117
+ // Validate inputs
118
+ if (updates.name !== undefined) {
119
+ this.validateRoomName(updates.name);
120
+ }
121
+ if (updates.description !== undefined) {
122
+ this.validateRoomDescription(updates.description);
123
+ }
124
+ this.logger.debug("RoomManagementManager: Updating room", { roomId, updates });
125
+ // Send update_room message
126
+ const message = {
127
+ type: "update_room",
128
+ data: {
129
+ room_id: roomId,
130
+ name: updates.name,
131
+ description: updates.description
132
+ }
133
+ };
134
+ return new Promise((resolve, reject) => {
135
+ const timeout = setTimeout(() => {
136
+ cleanup();
137
+ reject(new events_1.SDKError("Room update timeout", error_codes_1.ErrorCode.TIMEOUT));
138
+ }, 30000);
139
+ const onSuccess = (room) => {
140
+ // Only resolve if it's the room we're updating
141
+ if (room.id === roomId) {
142
+ cleanup();
143
+ resolve(room);
144
+ }
145
+ };
146
+ const onError = (error, responseRoomId) => {
147
+ if (!responseRoomId || responseRoomId === roomId) {
148
+ cleanup();
149
+ reject(error);
150
+ }
151
+ };
152
+ const cleanup = () => {
153
+ clearTimeout(timeout);
154
+ this.off("room:updated", onSuccess);
155
+ this.off("room:update_error", onError);
156
+ };
157
+ this.once("room:updated", onSuccess);
158
+ this.once("room:update_error", onError);
159
+ this.wsClient.sendMessage(message);
160
+ });
161
+ }
162
+ /**
163
+ * Deletes a room permanently.
164
+ * User must own the room to delete it.
165
+ *
166
+ * @param roomId - ID of room to delete
167
+ * @returns Promise that resolves when room is deleted
168
+ * @throws {SDKError} If not connected or not owner
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * await sdk.rooms.deleteRoom('room-123');
173
+ * console.log('Room deleted successfully');
174
+ * ```
175
+ */
176
+ async deleteRoom(roomId) {
177
+ if (!this.wsClient.isConnected) {
178
+ throw new events_1.SDKError("Not connected to Teneo network", error_codes_1.ErrorCode.NOT_CONNECTED);
179
+ }
180
+ // Verify user owns room
181
+ if (!this.ownedRooms.has(roomId)) {
182
+ throw new events_1.SDKError("Cannot delete room: You don't own this room", error_codes_1.ErrorCode.PERMISSION_DENIED);
183
+ }
184
+ this.logger.debug("RoomManagementManager: Deleting room", { roomId });
185
+ // Send delete_room message
186
+ const message = {
187
+ type: "delete_room",
188
+ data: {
189
+ room_id: roomId
190
+ }
191
+ };
192
+ return new Promise((resolve, reject) => {
193
+ const timeout = setTimeout(() => {
194
+ cleanup();
195
+ reject(new events_1.SDKError("Room deletion timeout", error_codes_1.ErrorCode.TIMEOUT));
196
+ }, 30000);
197
+ const onSuccess = (deletedRoomId) => {
198
+ if (deletedRoomId === roomId) {
199
+ cleanup();
200
+ resolve();
201
+ }
202
+ };
203
+ const onError = (error, responseRoomId) => {
204
+ if (!responseRoomId || responseRoomId === roomId) {
205
+ cleanup();
206
+ reject(error);
207
+ }
208
+ };
209
+ const cleanup = () => {
210
+ clearTimeout(timeout);
211
+ this.off("room:deleted", onSuccess);
212
+ this.off("room:delete_error", onError);
213
+ };
214
+ this.once("room:deleted", onSuccess);
215
+ this.once("room:delete_error", onError);
216
+ this.wsClient.sendMessage(message);
217
+ });
218
+ }
219
+ // ============================================================================
220
+ // QUERY METHODS (Synchronous, from cache)
221
+ // ============================================================================
222
+ /**
223
+ * Gets all rooms owned by the current user.
224
+ * Synchronous method that returns cached data.
225
+ *
226
+ * @returns Array of owned room info
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * const myRooms = sdk.rooms.getOwnedRooms();
231
+ * console.log(`I own ${myRooms.length} rooms`);
232
+ * ```
233
+ */
234
+ getOwnedRooms() {
235
+ return Array.from(this.ownedRooms.values()).map((room) => ({ ...room }));
236
+ }
237
+ /**
238
+ * Gets all rooms the user is a member of (but doesn't own).
239
+ * Synchronous method that returns cached data.
240
+ *
241
+ * @returns Array of shared room info
242
+ *
243
+ * @example
244
+ * ```typescript
245
+ * const sharedRooms = sdk.rooms.getSharedRooms();
246
+ * console.log(`I'm a member of ${sharedRooms.length} shared rooms`);
247
+ * ```
248
+ */
249
+ getSharedRooms() {
250
+ return Array.from(this.sharedRooms.values()).map((room) => ({ ...room }));
251
+ }
252
+ /**
253
+ * Gets all rooms the user has access to (both owned and shared).
254
+ * Convenience method that combines getOwnedRooms() and getSharedRooms().
255
+ * Synchronous method that returns cached data.
256
+ *
257
+ * @returns Array of all room info (owned + shared)
258
+ *
259
+ * @example
260
+ * ```typescript
261
+ * const allRooms = sdk.getAllRooms();
262
+ * console.log(`I have access to ${allRooms.length} total rooms`);
263
+ *
264
+ * // Filter by ownership if needed
265
+ * const myRooms = allRooms.filter(r => r.is_owner);
266
+ * const sharedWithMe = allRooms.filter(r => !r.is_owner);
267
+ * ```
268
+ */
269
+ getAllRooms() {
270
+ return [...this.getOwnedRooms(), ...this.getSharedRooms()];
271
+ }
272
+ /**
273
+ * Gets a specific room by ID.
274
+ * Checks both owned and shared room caches.
275
+ *
276
+ * @param roomId - Room ID to look up
277
+ * @returns Room info if found, undefined otherwise
278
+ *
279
+ * @example
280
+ * ```typescript
281
+ * const room = sdk.rooms.getRoomById('room-123');
282
+ * if (room) {
283
+ * console.log(`Room: ${room.name}`);
284
+ * }
285
+ * ```
286
+ */
287
+ getRoomById(roomId) {
288
+ const owned = this.ownedRooms.get(roomId);
289
+ if (owned)
290
+ return { ...owned };
291
+ const shared = this.sharedRooms.get(roomId);
292
+ if (shared)
293
+ return { ...shared };
294
+ return undefined;
295
+ }
296
+ /**
297
+ * Gets the maximum number of private rooms the user can create.
298
+ * Based on user's subscription/plan.
299
+ *
300
+ * @returns Maximum private room limit
301
+ *
302
+ * @example
303
+ * ```typescript
304
+ * const limit = sdk.rooms.getRoomLimit();
305
+ * console.log(`You can create up to ${limit} private rooms`);
306
+ * ```
307
+ */
308
+ getRoomLimit() {
309
+ return this.maxPrivateRooms;
310
+ }
311
+ /**
312
+ * Checks if user can create another private room.
313
+ * Compares current owned room count against limit.
314
+ *
315
+ * @returns True if under limit, false otherwise
316
+ *
317
+ * @example
318
+ * ```typescript
319
+ * if (sdk.rooms.canCreateRoom()) {
320
+ * await sdk.rooms.createRoom({ name: 'New Room' });
321
+ * } else {
322
+ * console.log('Room limit reached!');
323
+ * }
324
+ * ```
325
+ */
326
+ canCreateRoom() {
327
+ return this.ownedRooms.size < this.maxPrivateRooms;
328
+ }
329
+ /**
330
+ * Gets the current count of owned private rooms.
331
+ *
332
+ * @returns Number of rooms user owns
333
+ *
334
+ * @example
335
+ * ```typescript
336
+ * const count = sdk.rooms.getOwnedRoomCount();
337
+ * const limit = sdk.rooms.getRoomLimit();
338
+ * console.log(`Using ${count}/${limit} room slots`);
339
+ * ```
340
+ */
341
+ getOwnedRoomCount() {
342
+ return this.ownedRooms.size;
343
+ }
344
+ // ============================================================================
345
+ // INTERNAL METHODS (Called by SDK internals)
346
+ // ============================================================================
347
+ /**
348
+ * Sets the room limit from auth response.
349
+ * @internal
350
+ */
351
+ setRoomLimit(limit) {
352
+ this.maxPrivateRooms = limit;
353
+ this.logger.debug("RoomManagementManager: Room limit set", { limit });
354
+ }
355
+ /**
356
+ * Initializes owned rooms cache from auth response.
357
+ * @internal
358
+ */
359
+ setOwnedRooms(rooms) {
360
+ this.ownedRooms.clear();
361
+ for (const room of rooms) {
362
+ this.ownedRooms.set(room.id, room);
363
+ }
364
+ this.logger.debug("RoomManagementManager: Owned rooms set", { count: rooms.length });
365
+ }
366
+ /**
367
+ * Initializes shared rooms cache from auth response.
368
+ * @internal
369
+ */
370
+ setSharedRooms(rooms) {
371
+ this.sharedRooms.clear();
372
+ for (const room of rooms) {
373
+ this.sharedRooms.set(room.id, room);
374
+ }
375
+ this.logger.debug("RoomManagementManager: Shared rooms set", { count: rooms.length });
376
+ }
377
+ /**
378
+ * Adds or updates a room in the appropriate cache.
379
+ * Determines owned vs shared based on is_owner flag.
380
+ * @internal
381
+ */
382
+ upsertRoom(room) {
383
+ if (room.is_owner) {
384
+ this.ownedRooms.set(room.id, room);
385
+ // Remove from shared if it was there
386
+ this.sharedRooms.delete(room.id);
387
+ this.logger.debug("RoomManagementManager: Upserted owned room", { roomId: room.id });
388
+ }
389
+ else {
390
+ this.sharedRooms.set(room.id, room);
391
+ // Remove from owned if it was there
392
+ this.ownedRooms.delete(room.id);
393
+ this.logger.debug("RoomManagementManager: Upserted shared room", { roomId: room.id });
394
+ }
395
+ }
396
+ /**
397
+ * Removes a room from cache.
398
+ * Checks both owned and shared caches.
399
+ * @internal
400
+ */
401
+ removeRoom(roomId) {
402
+ const wasOwned = this.ownedRooms.delete(roomId);
403
+ const wasShared = this.sharedRooms.delete(roomId);
404
+ if (wasOwned || wasShared) {
405
+ this.logger.debug("RoomManagementManager: Removed room", {
406
+ roomId,
407
+ wasOwned,
408
+ wasShared
409
+ });
410
+ }
411
+ }
412
+ /**
413
+ * Clears all caches. Called on disconnect.
414
+ * @internal
415
+ */
416
+ clearCaches() {
417
+ this.ownedRooms.clear();
418
+ this.sharedRooms.clear();
419
+ this.maxPrivateRooms = 1;
420
+ this.logger.debug("RoomManagementManager: Caches cleared");
421
+ }
422
+ // ============================================================================
423
+ // VALIDATION
424
+ // ============================================================================
425
+ validateRoomName(name) {
426
+ if (!name || name.trim().length === 0) {
427
+ throw new events_1.SDKError("Room name cannot be empty", error_codes_1.ErrorCode.VALIDATION_ERROR);
428
+ }
429
+ if (name.length > 100) {
430
+ throw new events_1.SDKError("Room name too long (max 100 characters)", error_codes_1.ErrorCode.VALIDATION_ERROR);
431
+ }
432
+ }
433
+ validateRoomDescription(description) {
434
+ if (description.length > 500) {
435
+ throw new events_1.SDKError("Room description too long (max 500 characters)", error_codes_1.ErrorCode.VALIDATION_ERROR);
436
+ }
437
+ }
438
+ }
439
+ exports.RoomManagementManager = RoomManagementManager;
440
+ //# sourceMappingURL=room-management-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-management-manager.js","sourceRoot":"","sources":["../../src/managers/room-management-manager.ts"],"names":[],"mappings":"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"}