@openmarket/rooms-client 0.1.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 (87) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +25 -0
  3. package/dist/agent/armed-mode.d.ts +187 -0
  4. package/dist/agent/armed-mode.js +306 -0
  5. package/dist/agent/clients/common.d.ts +70 -0
  6. package/dist/agent/clients/common.js +46 -0
  7. package/dist/agent/lane-draft.d.ts +15 -0
  8. package/dist/agent/lane-draft.js +43 -0
  9. package/dist/agent/lane-prompts.d.ts +102 -0
  10. package/dist/agent/lane-prompts.js +120 -0
  11. package/dist/agent/library-context.d.ts +38 -0
  12. package/dist/agent/library-context.js +57 -0
  13. package/dist/agent/library-model.d.ts +41 -0
  14. package/dist/agent/library-model.js +173 -0
  15. package/dist/agent/room-context.d.ts +151 -0
  16. package/dist/agent/room-context.js +251 -0
  17. package/dist/agent/sidebar-model.d.ts +86 -0
  18. package/dist/agent/sidebar-model.js +162 -0
  19. package/dist/agent/topic-inbox.d.ts +119 -0
  20. package/dist/agent/topic-inbox.js +266 -0
  21. package/dist/agent/topic-view-batcher.d.ts +54 -0
  22. package/dist/agent/topic-view-batcher.js +115 -0
  23. package/dist/client.d.ts +421 -0
  24. package/dist/client.js +1428 -0
  25. package/dist/doc-reconcile.d.ts +100 -0
  26. package/dist/doc-reconcile.js +110 -0
  27. package/dist/doc-uri.d.ts +29 -0
  28. package/dist/doc-uri.js +55 -0
  29. package/dist/endpoints.d.ts +9 -0
  30. package/dist/endpoints.js +13 -0
  31. package/dist/jwt.d.ts +10 -0
  32. package/dist/jwt.js +51 -0
  33. package/dist/library-publisher.d.ts +52 -0
  34. package/dist/library-publisher.js +49 -0
  35. package/dist/merge3.d.ts +50 -0
  36. package/dist/merge3.js +280 -0
  37. package/dist/names.d.ts +6 -0
  38. package/dist/names.js +35 -0
  39. package/dist/shared/emoji-data.d.ts +22 -0
  40. package/dist/shared/emoji-data.js +8834 -0
  41. package/dist/shared/mentions.d.ts +6 -0
  42. package/dist/shared/mentions.js +32 -0
  43. package/dist/shared/rooms-protocol.d.ts +1183 -0
  44. package/dist/shared/rooms-protocol.js +160 -0
  45. package/dist/social-client.d.ts +361 -0
  46. package/dist/social-client.js +686 -0
  47. package/dist/social-types.d.ts +338 -0
  48. package/dist/social-types.js +1 -0
  49. package/dist/suggestion-attribution.d.ts +10 -0
  50. package/dist/suggestion-attribution.js +56 -0
  51. package/dist/topic-uri.d.ts +26 -0
  52. package/dist/topic-uri.js +40 -0
  53. package/dist/types.d.ts +2 -0
  54. package/dist/types.js +1 -0
  55. package/dist/version.d.ts +2 -0
  56. package/dist/version.js +2 -0
  57. package/dist/ws-client.d.ts +115 -0
  58. package/dist/ws-client.js +491 -0
  59. package/package.json +180 -0
  60. package/src/agent/armed-mode.ts +368 -0
  61. package/src/agent/clients/common.ts +91 -0
  62. package/src/agent/lane-draft.ts +47 -0
  63. package/src/agent/lane-prompts.ts +267 -0
  64. package/src/agent/library-context.ts +97 -0
  65. package/src/agent/library-model.ts +210 -0
  66. package/src/agent/room-context.ts +351 -0
  67. package/src/agent/sidebar-model.ts +235 -0
  68. package/src/agent/topic-inbox.ts +297 -0
  69. package/src/agent/topic-view-batcher.ts +134 -0
  70. package/src/client.ts +2331 -0
  71. package/src/doc-reconcile.ts +160 -0
  72. package/src/doc-uri.ts +83 -0
  73. package/src/endpoints.ts +14 -0
  74. package/src/jwt.ts +59 -0
  75. package/src/library-publisher.ts +93 -0
  76. package/src/merge3.ts +326 -0
  77. package/src/names.ts +44 -0
  78. package/src/shared/emoji-data.ts +8868 -0
  79. package/src/shared/mentions.ts +32 -0
  80. package/src/shared/rooms-protocol.ts +1339 -0
  81. package/src/social-client.ts +1287 -0
  82. package/src/social-types.ts +376 -0
  83. package/src/suggestion-attribution.ts +83 -0
  84. package/src/topic-uri.ts +64 -0
  85. package/src/types.ts +83 -0
  86. package/src/version.ts +2 -0
  87. package/src/ws-client.ts +611 -0
@@ -0,0 +1,421 @@
1
+ import { type RoomAccessMode, type RoomAttachment, type RoomAuditLogPayload, type RoomAuthSuccessPayload, type RoomBackfillPayload, type RoomDmHistoryResultPayload, type RoomDmMessagePayload, type RoomDmOpenedPayload, type RoomFriendPresence, type RoomInvitedPayload, type RoomLedgerEntry, type RoomMemberRemovedPayload, type RoomMemberRoleChangedPayload, type RoomMeta, type RoomPinsPayload, type RoomPresencePayload, type RoomReactorsPayload, type RoomReadStatePayload, type RoomReportedPayload, type RoomRole, type RoomSearchResultsPayload, type RoomSearchScope, type RoomSpace, type RoomThreadPayload, type RoomTopic, type RoomTopicAttention, type RoomTopicResultPayload, type RoomTopicsResultPayload, type RoomUserStatus, type RoomWhoPayload } from "./types.js";
2
+ import { type RoomWebSocketCtor, RoomWsClient } from "./ws-client.js";
3
+ export interface RoomClientConfig {
4
+ url: string;
5
+ apiKey: string;
6
+ /** Explicit chat REST base (e.g. a same-origin proxy path). When absent,
7
+ * the base is derived from `url` / env, which assumes the relay's own
8
+ * host layout. */
9
+ apiUrl?: string;
10
+ refreshAuthToken?: () => Promise<string>;
11
+ webSocketCtor?: RoomWebSocketCtor;
12
+ timeoutMs?: number;
13
+ /** Sidekick sessions authenticate with this agent identity assertion;
14
+ * ghost and plain user sessions leave it unset. See RoomWsClientOptions. */
15
+ agentIdentity?: {
16
+ name: string;
17
+ };
18
+ /** Reconnect herd jitter override; tests pin 0 for deterministic timing. */
19
+ reconnectHerdJitterMs?: number;
20
+ }
21
+ export interface RoomJoinOptions {
22
+ room: string;
23
+ workspaceId?: string;
24
+ code?: string;
25
+ sinceSeq?: number;
26
+ limit?: number;
27
+ ackOnJoin?: boolean;
28
+ /** Optional one-line reason broadcast as a system join note (server-side).
29
+ * Omitted ⇒ no field sent ⇒ no announce. Additive; older servers ignore it. */
30
+ reason?: string;
31
+ /** Optional telemetry metadata for the surface that caused the join. */
32
+ source?: string;
33
+ hook?: string;
34
+ suggestionId?: string;
35
+ /** Internal: set by rejoinRoomOnClient so a reconnect re-JOIN never
36
+ * consumes a rendered-suggestion attribution — a rejoin of an empty room
37
+ * carries no sinceSeq and would otherwise look like an initial join. */
38
+ isRejoin?: boolean;
39
+ }
40
+ export interface RoomSayOptions extends RoomJoinOptions {
41
+ text?: string;
42
+ attachments?: RoomAttachment[];
43
+ inReplyTo?: number;
44
+ /** Post directly into a topic; the room's linear stream is unaffected. */
45
+ topicId?: string;
46
+ clientMsgId?: string;
47
+ }
48
+ export interface RoomPeekOptions {
49
+ room: string;
50
+ beforeSeq?: number;
51
+ sinceSeq?: number;
52
+ atMs?: number;
53
+ limit?: number;
54
+ }
55
+ export interface RoomListResult {
56
+ auth: RoomAuthSuccessPayload;
57
+ rooms: RoomMeta[];
58
+ }
59
+ export interface RoomListRequest {
60
+ query?: string | undefined;
61
+ scope?: RoomSearchScope | undefined;
62
+ category?: string[] | undefined;
63
+ tag?: string[] | undefined;
64
+ kind?: string[] | undefined;
65
+ entity?: string[] | undefined;
66
+ symbol?: string[] | undefined;
67
+ spaceId?: string[] | undefined;
68
+ hot?: boolean | undefined;
69
+ includeHeat?: boolean | undefined;
70
+ createdByMe?: boolean | undefined;
71
+ includeArchived?: boolean | undefined;
72
+ limit?: number | undefined;
73
+ }
74
+ export interface RoomCreateRequest {
75
+ name: string;
76
+ title?: string | undefined;
77
+ description?: string | undefined;
78
+ access?: RoomAccessMode | undefined;
79
+ maxMembers?: number | undefined;
80
+ category?: string | undefined;
81
+ sortOrder?: number | undefined;
82
+ spaceId?: string | undefined;
83
+ postingRoles?: RoomRole[] | undefined;
84
+ tags?: string[] | undefined;
85
+ }
86
+ export interface RoomCreateResult {
87
+ auth: RoomAuthSuccessPayload;
88
+ room: RoomMeta;
89
+ joinCode?: string | undefined;
90
+ }
91
+ export interface RoomInviteRequest {
92
+ room: string;
93
+ username?: string | undefined;
94
+ userId?: string | undefined;
95
+ }
96
+ export interface RoomInviteResult {
97
+ auth: RoomAuthSuccessPayload;
98
+ invite: RoomInvitedPayload;
99
+ }
100
+ export interface RoomRemoveMemberRequest {
101
+ room: string;
102
+ username?: string | undefined;
103
+ userId?: string | undefined;
104
+ reason?: string | undefined;
105
+ }
106
+ export interface RoomRemoveMemberResult {
107
+ auth: RoomAuthSuccessPayload;
108
+ removal: RoomMemberRemovedPayload;
109
+ }
110
+ export interface RoomReportRequest {
111
+ room: string;
112
+ seq?: number | undefined;
113
+ targetUserId?: string | undefined;
114
+ reason: string;
115
+ }
116
+ export interface RoomReportResult {
117
+ auth: RoomAuthSuccessPayload;
118
+ report: RoomReportedPayload;
119
+ }
120
+ export interface RoomModerationMemberRequest {
121
+ room: string;
122
+ username?: string | undefined;
123
+ userId?: string | undefined;
124
+ reason?: string | undefined;
125
+ }
126
+ export interface RoomMuteRequest extends RoomModerationMemberRequest {
127
+ until: string | number | Date;
128
+ }
129
+ export interface RoomMuteResult {
130
+ auth: RoomAuthSuccessPayload;
131
+ mute: {
132
+ requestId?: string;
133
+ room: string;
134
+ mutedUserId: string;
135
+ mutedHandle: string;
136
+ until: string | number | Date;
137
+ };
138
+ }
139
+ export interface RoomBanResult {
140
+ auth: RoomAuthSuccessPayload;
141
+ ban: {
142
+ requestId?: string;
143
+ room: string;
144
+ bannedUserId: string;
145
+ bannedHandle: string;
146
+ };
147
+ }
148
+ export interface RoomRoleChangeRequest extends RoomModerationMemberRequest {
149
+ role: RoomRole;
150
+ }
151
+ export interface RoomRoleChangeResult {
152
+ auth: RoomAuthSuccessPayload;
153
+ roleChange: RoomMemberRoleChangedPayload;
154
+ }
155
+ export interface RoomSetReadOnlyRequest {
156
+ room: string;
157
+ postingRoles: RoomRole[];
158
+ reason?: string | undefined;
159
+ }
160
+ export interface RoomSetReadOnlyResult {
161
+ auth: RoomAuthSuccessPayload;
162
+ room: string;
163
+ postingRoles: RoomRole[];
164
+ }
165
+ export interface RoomAuditLogRequest {
166
+ room: string;
167
+ limit?: number | undefined;
168
+ }
169
+ export interface RoomAuditLogResult {
170
+ auth: RoomAuthSuccessPayload;
171
+ audit: RoomAuditLogPayload;
172
+ }
173
+ export interface RoomSpacesResult {
174
+ auth: RoomAuthSuccessPayload;
175
+ spaces: RoomSpace[];
176
+ }
177
+ export interface RoomJoinSpaceRequest {
178
+ spaceId: string;
179
+ }
180
+ export interface RoomJoinSpaceResult {
181
+ auth: RoomAuthSuccessPayload;
182
+ space: RoomSpace;
183
+ }
184
+ export interface RoomSayResult {
185
+ auth: RoomAuthSuccessPayload;
186
+ entry: RoomLedgerEntry;
187
+ clientMsgId: string;
188
+ }
189
+ export interface RoomJoinedSession {
190
+ auth: RoomAuthSuccessPayload;
191
+ backfill: RoomBackfillPayload;
192
+ client: RoomWsClient;
193
+ }
194
+ export interface RoomDmOpenRequest {
195
+ username: string;
196
+ limit?: number;
197
+ markRead?: boolean;
198
+ }
199
+ export interface RoomDmHistoryRequest {
200
+ username?: string;
201
+ conversationId?: string;
202
+ before?: number;
203
+ limit?: number;
204
+ markRead?: boolean;
205
+ }
206
+ export interface RoomDmSendRequest {
207
+ username?: string;
208
+ conversationId?: string;
209
+ content: string;
210
+ clientMsgId?: string;
211
+ }
212
+ export interface RoomThreadRequest {
213
+ room: string;
214
+ rootSeq: number;
215
+ beforeSeq?: number;
216
+ sinceSeq?: number;
217
+ limit?: number;
218
+ }
219
+ export interface RoomSearchEntriesRequest {
220
+ room: string;
221
+ query: string;
222
+ beforeSeq?: number;
223
+ sinceSeq?: number;
224
+ fromMs?: number;
225
+ toMs?: number;
226
+ limit?: number;
227
+ }
228
+ export declare function resolveRoomsWsUrl(): string;
229
+ export { workspaceRoomName } from "./names.js";
230
+ export declare function listRooms(config: RoomClientConfig, request?: RoomListRequest): Promise<RoomListResult>;
231
+ export declare function createRoom(config: RoomClientConfig, request: RoomCreateRequest): Promise<RoomCreateResult>;
232
+ export declare function inviteRoom(config: RoomClientConfig, request: RoomInviteRequest): Promise<RoomInviteResult>;
233
+ export declare function removeRoomMember(config: RoomClientConfig, request: RoomRemoveMemberRequest): Promise<RoomRemoveMemberResult>;
234
+ export declare function reportRoomTarget(config: RoomClientConfig, request: RoomReportRequest): Promise<RoomReportResult>;
235
+ export declare function muteRoomMember(config: RoomClientConfig, request: RoomMuteRequest): Promise<RoomMuteResult>;
236
+ export declare function kickRoomMember(config: RoomClientConfig, request: RoomModerationMemberRequest): Promise<RoomRemoveMemberResult>;
237
+ export declare function banRoomMember(config: RoomClientConfig, request: RoomModerationMemberRequest): Promise<RoomBanResult>;
238
+ export declare function changeRoomMemberRole(config: RoomClientConfig, request: RoomRoleChangeRequest): Promise<RoomRoleChangeResult>;
239
+ export declare function setRoomReadOnly(config: RoomClientConfig, request: RoomSetReadOnlyRequest): Promise<RoomSetReadOnlyResult>;
240
+ export declare function requestRoomAuditLog(config: RoomClientConfig, request: RoomAuditLogRequest): Promise<RoomAuditLogResult>;
241
+ export declare function listRoomSpaces(config: RoomClientConfig): Promise<RoomSpacesResult>;
242
+ export declare function joinRoomSpace(config: RoomClientConfig, request: RoomJoinSpaceRequest): Promise<RoomJoinSpaceResult>;
243
+ /** Paged WHO on an already-connected room client (member panel). */
244
+ export declare function requestRoomWho(client: RoomWsClient, room: string, offset?: number, limit?: number): Promise<RoomWhoPayload>;
245
+ export declare function whoRoom(config: RoomClientConfig, room: string): Promise<RoomPresencePayload>;
246
+ /** The signed-in user's own room identity (userId / handle / username), learned
247
+ * by opening and immediately closing a room connection. Used to attribute "my"
248
+ * past messages when inferring a writing persona. */
249
+ export declare function whoamiRoom(config: RoomClientConfig): Promise<RoomAuthSuccessPayload>;
250
+ export declare function requestRoomFriends(client: RoomWsClient): Promise<RoomFriendPresence[]>;
251
+ export declare function openRoomDmOnClient(client: RoomWsClient, request: RoomDmOpenRequest, timeoutMs?: number): Promise<RoomDmOpenedPayload>;
252
+ export declare function requestRoomDmHistoryOnClient(client: RoomWsClient, request: RoomDmHistoryRequest, timeoutMs?: number): Promise<RoomDmHistoryResultPayload>;
253
+ export declare function sendRoomDmOnClient(client: RoomWsClient, request: RoomDmSendRequest, timeoutMs?: number): Promise<RoomDmMessagePayload>;
254
+ export declare function peekRoom(config: RoomClientConfig, options: RoomPeekOptions): Promise<RoomBackfillPayload>;
255
+ export declare function sayRoom(config: RoomClientConfig, options: RoomSayOptions): Promise<RoomSayResult>;
256
+ export declare function joinRoom(config: RoomClientConfig, options: RoomJoinOptions): Promise<RoomJoinedSession>;
257
+ /** Re-join a room on an already-connected client (used after a reconnect). */
258
+ export declare function rejoinRoomOnClient(client: RoomWsClient, options: RoomJoinOptions): Promise<RoomBackfillPayload>;
259
+ export declare function attachRejoinOnReconnect(client: RoomWsClient, options: RoomJoinOptions, latestSeq: () => number | undefined, onRejoined?: (backfill: RoomBackfillPayload) => void, onError?: (err: unknown) => void): () => void;
260
+ export declare function postRoomMessage(client: RoomWsClient, room: string, text: string, inReplyTo?: number, attachments?: RoomAttachment[], topicId?: string): string;
261
+ export declare function sendRoomTyping(client: RoomWsClient, room: string, state: "start" | "stop"): void;
262
+ export declare function sendRoomStatus(client: RoomWsClient, status: RoomUserStatus, statusText?: string | null): void;
263
+ /**
264
+ * Fetch a joined room's meta (title, access, postingRoles, viewerRole) over
265
+ * the live socket via a scoped SEARCH. Returns null on timeout/no match so
266
+ * callers can degrade to role hints from presence.
267
+ */
268
+ export declare function requestRoomMeta(client: RoomWsClient, room: string, timeoutMs?: number): Promise<RoomMeta | null>;
269
+ export declare function reactRoomEntry(client: RoomWsClient, room: string, seq: number, emoji: string, op: "add" | "remove"): void;
270
+ export declare function editRoomEntry(client: RoomWsClient, room: string, seq: number, text: string): void;
271
+ export declare function deleteRoomEntry(client: RoomWsClient, room: string, seq: number): Promise<RoomLedgerEntry>;
272
+ export declare function requestRoomThread(client: RoomWsClient, request: RoomThreadRequest): Promise<RoomThreadPayload>;
273
+ export declare function requestRoomPins(client: RoomWsClient, room: string, limit?: number): Promise<RoomPinsPayload>;
274
+ export declare function pinRoomEntry(client: RoomWsClient, room: string, seq: number): Promise<RoomLedgerEntry>;
275
+ export declare function unpinRoomEntry(client: RoomWsClient, room: string, seq: number): Promise<RoomLedgerEntry>;
276
+ /** Who reacted (live socket): lazy read for reaction-chip tooltips. */
277
+ export declare function requestRoomReactors(client: RoomWsClient, request: {
278
+ room: string;
279
+ seq: number;
280
+ emoji?: string;
281
+ limit?: number;
282
+ }): Promise<RoomReactorsPayload>;
283
+ /** Set my presence status (one-shot, agent-verb transport). The relay
284
+ * persists it durably; a one-shot socket has no joined rooms, so live
285
+ * rosters pick the change up from the store (the TUI/GUI send STATUS on
286
+ * their live connection instead, which also broadcasts PRESENCE_DELTA). */
287
+ export declare function setRoomStatusOnce(config: RoomClientConfig, status: RoomUserStatus, statusText?: string | null): Promise<void>;
288
+ /** Add/remove one reaction (one-shot). Returns the updated entry. */
289
+ export declare function reactRoom(config: RoomClientConfig, options: {
290
+ room: string;
291
+ seq: number;
292
+ emoji: string;
293
+ op: "add" | "remove";
294
+ }): Promise<RoomLedgerEntry>;
295
+ /** Edit own message (one-shot). Returns the updated entry. */
296
+ export declare function editRoomMessage(config: RoomClientConfig, options: {
297
+ room: string;
298
+ seq: number;
299
+ text: string;
300
+ }): Promise<RoomLedgerEntry>;
301
+ /** Delete a message (own, or moderator delete-any; one-shot). */
302
+ export declare function deleteRoomMessage(config: RoomClientConfig, options: {
303
+ room: string;
304
+ seq: number;
305
+ }): Promise<RoomLedgerEntry>;
306
+ /** Pin or unpin a message (one-shot). Returns the updated entry. */
307
+ export declare function pinRoomMessage(config: RoomClientConfig, options: {
308
+ room: string;
309
+ seq: number;
310
+ op: "pin" | "unpin";
311
+ }): Promise<RoomLedgerEntry>;
312
+ /** List pinned messages (one-shot). */
313
+ export declare function listRoomPinsOnce(config: RoomClientConfig, options: {
314
+ room: string;
315
+ limit?: number;
316
+ }): Promise<RoomPinsPayload>;
317
+ /** Fetch one reply thread (one-shot). */
318
+ export declare function getRoomThreadOnce(config: RoomClientConfig, options: {
319
+ room: string;
320
+ rootSeq: number;
321
+ limit?: number;
322
+ }): Promise<RoomThreadPayload>;
323
+ /** Who reacted (one-shot). */
324
+ export declare function getRoomReactorsOnce(config: RoomClientConfig, options: {
325
+ room: string;
326
+ seq: number;
327
+ emoji?: string;
328
+ limit?: number;
329
+ }): Promise<RoomReactorsPayload>;
330
+ /** Fetch one entry by seq (one-shot; HISTORY page of one). */
331
+ export declare function getRoomMessageOnce(config: RoomClientConfig, options: {
332
+ room: string;
333
+ seq: number;
334
+ }): Promise<RoomLedgerEntry | null>;
335
+ export declare function requestRoomReadState(client: RoomWsClient, rooms: string[], timeoutMs?: number): Promise<RoomReadStatePayload>;
336
+ export declare function searchRoomEntries(client: RoomWsClient, request: RoomSearchEntriesRequest): Promise<RoomSearchResultsPayload>;
337
+ /** One-shot variant for headless surfaces (actions): connect, join, search,
338
+ * close. The relay gates SEARCH_ENTRIES on per-socket room participation
339
+ * (isInRoom checks this very WebSocket), so a minimal JOIN is required
340
+ * first; the brief presence blip matches getRoomMessageOnce. */
341
+ export declare function searchRoomEntriesOnce(config: RoomClientConfig, request: RoomSearchEntriesRequest): Promise<RoomSearchResultsPayload>;
342
+ export interface RoomHistoryRequest {
343
+ beforeSeq?: number;
344
+ sinceSeq?: number;
345
+ atMs?: number;
346
+ limit: number;
347
+ }
348
+ export declare function requestRoomHistory(client: RoomWsClient, room: string, beforeSeq: number, limit: number): Promise<RoomBackfillPayload>;
349
+ export declare function requestRoomHistoryPage(client: RoomWsClient, room: string, request: RoomHistoryRequest): Promise<RoomBackfillPayload>;
350
+ /** `topicId` acks a per-topic cursor; the room-wide cursor is separate. */
351
+ export declare function ackRoom(client: RoomWsClient, room: string, seq: number, topicId?: string): void;
352
+ export declare class RoomAckDebouncer {
353
+ private readonly client;
354
+ private readonly delayMs;
355
+ private readonly pending;
356
+ private timer;
357
+ constructor(client: RoomWsClient, delayMs?: number);
358
+ /** `topicId` batches a per-topic view-time cursor; omit for the room-wide one. */
359
+ schedule(room: string, seq: number, topicId?: string): void;
360
+ flush(): void;
361
+ close(): void;
362
+ }
363
+ export interface RoomTopicCreateRequest {
364
+ room: string;
365
+ name: string;
366
+ }
367
+ export interface RoomTopicListRequest {
368
+ room: string;
369
+ includeResolved?: boolean | undefined;
370
+ }
371
+ export interface RoomTopicRenameRequest {
372
+ topicId: string;
373
+ name: string;
374
+ }
375
+ export interface RoomTopicMoveRequest {
376
+ topicId: string;
377
+ seqs: number[];
378
+ toTopicId: string;
379
+ }
380
+ export interface RoomTopicMergeRequest {
381
+ topicId: string;
382
+ intoTopicId: string;
383
+ }
384
+ export interface RoomTopicResolveRequest {
385
+ topicId: string;
386
+ /** Defaults to true (mark resolved) when omitted; false reopens it. */
387
+ resolved?: boolean | undefined;
388
+ }
389
+ export interface RoomTopicSetAttentionRequest {
390
+ topicId: string;
391
+ attention: RoomTopicAttention;
392
+ }
393
+ export interface RoomTopicResult {
394
+ auth: RoomAuthSuccessPayload;
395
+ topic: RoomTopic;
396
+ }
397
+ export interface RoomTopicsResult {
398
+ auth: RoomAuthSuccessPayload;
399
+ topics: RoomTopic[];
400
+ }
401
+ export declare function createRoomTopic(config: RoomClientConfig, request: RoomTopicCreateRequest): Promise<RoomTopicResult>;
402
+ export declare function listRoomTopics(config: RoomClientConfig, request: RoomTopicListRequest): Promise<RoomTopicsResult>;
403
+ export declare function renameRoomTopic(config: RoomClientConfig, request: RoomTopicRenameRequest): Promise<RoomTopicResult>;
404
+ export declare function moveRoomTopicMessages(config: RoomClientConfig, request: RoomTopicMoveRequest): Promise<RoomTopicResult>;
405
+ export declare function mergeRoomTopics(config: RoomClientConfig, request: RoomTopicMergeRequest): Promise<RoomTopicResult>;
406
+ export declare function resolveRoomTopic(config: RoomClientConfig, request: RoomTopicResolveRequest): Promise<RoomTopicResult>;
407
+ export declare function setRoomTopicAttention(config: RoomClientConfig, request: RoomTopicSetAttentionRequest): Promise<RoomTopicResult>;
408
+ export interface RoomTopicListStateRequest extends RoomTopicListRequest {
409
+ withState?: boolean | undefined;
410
+ }
411
+ export declare function requestRoomTopicsOnClient(client: RoomWsClient, request: RoomTopicListStateRequest): Promise<RoomTopicsResultPayload>;
412
+ export declare function createRoomTopicOnClient(client: RoomWsClient, request: RoomTopicCreateRequest): Promise<RoomTopicResultPayload>;
413
+ export declare function renameRoomTopicOnClient(client: RoomWsClient, request: RoomTopicRenameRequest): Promise<RoomTopicResultPayload>;
414
+ export declare function setRoomTopicAttentionOnClient(client: RoomWsClient, request: RoomTopicSetAttentionRequest): Promise<RoomTopicResultPayload>;
415
+ export declare function resolveRoomTopicOnClient(client: RoomWsClient, request: RoomTopicResolveRequest): Promise<RoomTopicResultPayload>;
416
+ export declare function resolveRoomChatApiUrl(config?: {
417
+ url?: string;
418
+ apiUrl?: string;
419
+ }): string;
420
+ export declare function normalizePresence(payload: RoomPresencePayload): RoomPresencePayload;
421
+ export declare function presenceFromWho(payload: RoomWhoPayload): RoomPresencePayload;