@manonero/chat-client-sdk 1.0.0-beta.2 → 1.0.0-beta.4
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.
- package/README.md +204 -27
- package/dist/ChatClient.d.ts +67 -8
- package/dist/ChatClient.d.ts.map +1 -1
- package/dist/ChatClient.js +82 -9
- package/dist/ChatClient.js.map +1 -1
- package/dist/http/ConversationApi.d.ts +18 -1
- package/dist/http/ConversationApi.d.ts.map +1 -1
- package/dist/http/ConversationApi.js +23 -0
- package/dist/http/ConversationApi.js.map +1 -1
- package/dist/http/HttpClient.d.ts +18 -1
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +64 -13
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/MessageApi.d.ts.map +1 -1
- package/dist/http/MessageApi.js +13 -2
- package/dist/http/MessageApi.js.map +1 -1
- package/dist/http/ProxyApi.d.ts +14 -3
- package/dist/http/ProxyApi.d.ts.map +1 -1
- package/dist/http/ProxyApi.js +25 -7
- package/dist/http/ProxyApi.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/realtime/ChatHubClient.d.ts +58 -1
- package/dist/realtime/ChatHubClient.d.ts.map +1 -1
- package/dist/realtime/ChatHubClient.js +202 -15
- package/dist/realtime/ChatHubClient.js.map +1 -1
- package/dist/realtime/NotificationHubClient.d.ts +40 -0
- package/dist/realtime/NotificationHubClient.d.ts.map +1 -1
- package/dist/realtime/NotificationHubClient.js +131 -29
- package/dist/realtime/NotificationHubClient.js.map +1 -1
- package/dist/realtime/ReconnectionManager.d.ts +2 -1
- package/dist/realtime/ReconnectionManager.d.ts.map +1 -1
- package/dist/realtime/ReconnectionManager.js +13 -3
- package/dist/realtime/ReconnectionManager.js.map +1 -1
- package/dist/types/block.d.ts +17 -2
- package/dist/types/block.d.ts.map +1 -1
- package/dist/types/block.js +30 -0
- package/dist/types/block.js.map +1 -1
- package/dist/types/chat-events.d.ts +23 -3
- package/dist/types/chat-events.d.ts.map +1 -1
- package/dist/types/conversation.d.ts +52 -3
- package/dist/types/conversation.d.ts.map +1 -1
- package/dist/types/message.d.ts +5 -6
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/notification-events.d.ts +10 -7
- package/dist/types/notification-events.d.ts.map +1 -1
- package/dist/types/signalr.d.ts +2 -1
- package/dist/types/signalr.d.ts.map +1 -1
- package/package.json +4 -2
|
@@ -16,6 +16,14 @@ import { TypedEventEmitter as EventEmitter } from '../utils/TypedEventEmitter.js
|
|
|
16
16
|
export class NotificationHubClient {
|
|
17
17
|
constructor(options) {
|
|
18
18
|
this.connection = null;
|
|
19
|
+
/** In-flight connect Promise, used to dedupe concurrent connect() calls. */
|
|
20
|
+
this.connectingPromise = null;
|
|
21
|
+
/**
|
|
22
|
+
* True after a user-initiated disconnect() until the next connect() begins.
|
|
23
|
+
* ReconnectionManager uses this to skip auto-reconnect when the close was
|
|
24
|
+
* intentional rather than caused by a transport failure.
|
|
25
|
+
*/
|
|
26
|
+
this._intentionallyClosed = false;
|
|
19
27
|
/** Set of participantIds currently subscribed to presence updates */
|
|
20
28
|
this.subscribedPresenceIds = new Set();
|
|
21
29
|
this.options = options;
|
|
@@ -27,6 +35,13 @@ export class NotificationHubClient {
|
|
|
27
35
|
get state() {
|
|
28
36
|
return this.connection?.state ?? HubConnectionState.Disconnected;
|
|
29
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* True after a user-initiated disconnect() and until the next connect() starts.
|
|
40
|
+
* ReconnectionManager honors this to avoid reconnecting after an intentional close.
|
|
41
|
+
*/
|
|
42
|
+
get intentionallyClosed() {
|
|
43
|
+
return this._intentionallyClosed;
|
|
44
|
+
}
|
|
30
45
|
// ---------------------------------------------------------------------------
|
|
31
46
|
// Connection management
|
|
32
47
|
// ---------------------------------------------------------------------------
|
|
@@ -35,7 +50,15 @@ export class NotificationHubClient {
|
|
|
35
50
|
const { hubUrl, tokenProvider, logLevel = LogLevel.Warning } = this.options;
|
|
36
51
|
return new HubConnectionBuilder()
|
|
37
52
|
.withUrl(hubUrl, {
|
|
38
|
-
|
|
53
|
+
// Throw rather than return '' so SignalR fails the request loudly with
|
|
54
|
+
// a useful error instead of sending an empty `Authorization: Bearer ` header.
|
|
55
|
+
accessTokenFactory: () => {
|
|
56
|
+
const t = tokenProvider();
|
|
57
|
+
if (!t) {
|
|
58
|
+
throw new Error('NotificationHub: no authentication token available');
|
|
59
|
+
}
|
|
60
|
+
return t;
|
|
61
|
+
},
|
|
39
62
|
})
|
|
40
63
|
.withAutomaticReconnect()
|
|
41
64
|
.configureLogging(logLevel)
|
|
@@ -76,32 +99,83 @@ export class NotificationHubClient {
|
|
|
76
99
|
}
|
|
77
100
|
/**
|
|
78
101
|
* Connect to NotificationHub. If already connected, resolves immediately.
|
|
102
|
+
* Concurrent calls share a single in-flight Promise — building two
|
|
103
|
+
* connections at once would leak handlers.
|
|
79
104
|
* Connecting automatically marks the user as online on the server.
|
|
105
|
+
*
|
|
106
|
+
* Throws synchronously when no authentication token is available so the
|
|
107
|
+
* caller gets a clear error rather than a malformed Authorization header.
|
|
80
108
|
*/
|
|
81
109
|
async connect() {
|
|
82
110
|
if (this.connection && this.connection.state === HubConnectionState.Connected) {
|
|
83
111
|
return;
|
|
84
112
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
113
|
+
if (this.connectingPromise) {
|
|
114
|
+
return this.connectingPromise;
|
|
115
|
+
}
|
|
116
|
+
if (!this.options.tokenProvider()) {
|
|
117
|
+
throw new Error('NotificationHubClient.connect(): no authentication token available. ' +
|
|
118
|
+
'Provide one via ChatClient.setToken() or the tokenProvider option.');
|
|
88
119
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.
|
|
92
|
-
|
|
120
|
+
// The user is explicitly opening a connection — clear any prior
|
|
121
|
+
// intentional-close flag so ReconnectionManager will manage future drops.
|
|
122
|
+
this._intentionallyClosed = false;
|
|
123
|
+
const promise = (async () => {
|
|
124
|
+
try {
|
|
125
|
+
// Disconnect existing stale connection cleanly
|
|
126
|
+
if (this.connection) {
|
|
127
|
+
await this.safeStop();
|
|
128
|
+
}
|
|
129
|
+
const conn = this.buildConnection();
|
|
130
|
+
this.attachHandlers(conn);
|
|
131
|
+
this.connection = conn;
|
|
132
|
+
await conn.start();
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
this.connectingPromise = null;
|
|
136
|
+
}
|
|
137
|
+
})();
|
|
138
|
+
this.connectingPromise = promise;
|
|
139
|
+
return promise;
|
|
93
140
|
}
|
|
94
141
|
/**
|
|
95
142
|
* Disconnect from NotificationHub. Automatically marks user as offline (server-side).
|
|
143
|
+
* If a connect is in flight, it is awaited first so we always tear down a
|
|
144
|
+
* fully-formed connection (not a half-built one).
|
|
145
|
+
*
|
|
146
|
+
* Sets `intentionallyClosed` so ReconnectionManager skips its reconnect
|
|
147
|
+
* attempt for the resulting `disconnected` event.
|
|
96
148
|
*/
|
|
97
149
|
async disconnect() {
|
|
150
|
+
// Mark intentional BEFORE awaiting the in-flight connect so any
|
|
151
|
+
// disconnected events that fire during teardown are not auto-reconnected.
|
|
152
|
+
this._intentionallyClosed = true;
|
|
153
|
+
if (this.connectingPromise) {
|
|
154
|
+
try {
|
|
155
|
+
await this.connectingPromise;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// The connect failed — there's nothing established to tear down,
|
|
159
|
+
// but still proceed to clear local state below.
|
|
160
|
+
}
|
|
161
|
+
}
|
|
98
162
|
this.subscribedPresenceIds.clear();
|
|
99
163
|
await this.safeStop();
|
|
100
164
|
this.connection = null;
|
|
101
165
|
}
|
|
166
|
+
/** Detach all server→client method handlers registered via attachHandlers(). */
|
|
167
|
+
detachHandlers(conn) {
|
|
168
|
+
for (const name of NotificationHubClient.HUB_EVENT_NAMES) {
|
|
169
|
+
conn.off(name);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
102
172
|
async safeStop() {
|
|
173
|
+
if (!this.connection)
|
|
174
|
+
return;
|
|
175
|
+
// Detach handlers first so any late events on this connection are dropped.
|
|
176
|
+
this.detachHandlers(this.connection);
|
|
103
177
|
try {
|
|
104
|
-
await this.connection
|
|
178
|
+
await this.connection.stop();
|
|
105
179
|
}
|
|
106
180
|
catch {
|
|
107
181
|
// Ignore errors during stop
|
|
@@ -110,19 +184,17 @@ export class NotificationHubClient {
|
|
|
110
184
|
/**
|
|
111
185
|
* Re-subscribe to all tracked presence participant IDs.
|
|
112
186
|
* Called internally after reconnect. Also callable by ReconnectionManager.
|
|
187
|
+
* Best-effort — never throws.
|
|
113
188
|
*/
|
|
114
189
|
async resubscribePresence() {
|
|
115
190
|
const ids = Array.from(this.subscribedPresenceIds);
|
|
116
191
|
if (ids.length === 0)
|
|
117
192
|
return;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
catch {
|
|
124
|
-
// Best-effort
|
|
125
|
-
}
|
|
193
|
+
try {
|
|
194
|
+
await this.subscribeToPresence(ids);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Best-effort
|
|
126
198
|
}
|
|
127
199
|
}
|
|
128
200
|
// ---------------------------------------------------------------------------
|
|
@@ -134,22 +206,32 @@ export class NotificationHubClient {
|
|
|
134
206
|
}
|
|
135
207
|
return this.connection.invoke(method, ...args);
|
|
136
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Subscribe to presence updates for the given participants.
|
|
211
|
+
* Auto-batches in chunks of 200 to respect the server limit; if a batch
|
|
212
|
+
* fails partway through, prior batches remain subscribed and the error is
|
|
213
|
+
* propagated to the caller.
|
|
214
|
+
*/
|
|
137
215
|
async subscribeToPresence(participantIds) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
216
|
+
const batchSize = NotificationHubClient.PRESENCE_BATCH_SIZE;
|
|
217
|
+
for (let i = 0; i < participantIds.length; i += batchSize) {
|
|
218
|
+
const batch = participantIds.slice(i, i + batchSize);
|
|
219
|
+
await this.invokeHub('SubscribeToPresence', batch);
|
|
220
|
+
for (const id of batch)
|
|
221
|
+
this.subscribedPresenceIds.add(id);
|
|
144
222
|
}
|
|
145
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* Unsubscribe from presence updates for the given participants.
|
|
226
|
+
* Auto-batches in chunks of 200 to respect the server limit.
|
|
227
|
+
*/
|
|
146
228
|
async unsubscribeFromPresence(participantIds) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
229
|
+
const batchSize = NotificationHubClient.PRESENCE_BATCH_SIZE;
|
|
230
|
+
for (let i = 0; i < participantIds.length; i += batchSize) {
|
|
231
|
+
const batch = participantIds.slice(i, i + batchSize);
|
|
232
|
+
await this.invokeHub('UnsubscribeFromPresence', batch);
|
|
233
|
+
for (const id of batch)
|
|
234
|
+
this.subscribedPresenceIds.delete(id);
|
|
153
235
|
}
|
|
154
236
|
}
|
|
155
237
|
// ---------------------------------------------------------------------------
|
|
@@ -162,4 +244,24 @@ export class NotificationHubClient {
|
|
|
162
244
|
this.emitter.off(event, handler);
|
|
163
245
|
}
|
|
164
246
|
}
|
|
247
|
+
/** Server-imposed maximum batch size for SubscribeToPresence / UnsubscribeFromPresence. */
|
|
248
|
+
NotificationHubClient.PRESENCE_BATCH_SIZE = 200;
|
|
249
|
+
/** Server→client method names registered via conn.on() — used for cleanup. */
|
|
250
|
+
NotificationHubClient.HUB_EVENT_NAMES = [
|
|
251
|
+
'PresenceState',
|
|
252
|
+
'PresenceChanged',
|
|
253
|
+
'NewMessageNotification',
|
|
254
|
+
'MentionedNotification',
|
|
255
|
+
'UnreadCountChanged',
|
|
256
|
+
'ConversationCreated',
|
|
257
|
+
'ConversationUpdated',
|
|
258
|
+
'ParticipantJoined',
|
|
259
|
+
'ParticipantLeft',
|
|
260
|
+
'ConversationPinned',
|
|
261
|
+
'ConversationUnpinned',
|
|
262
|
+
'ReadStatusChanged',
|
|
263
|
+
'ConversationDeleted',
|
|
264
|
+
'ConversationRestored',
|
|
265
|
+
'Error',
|
|
266
|
+
];
|
|
165
267
|
//# sourceMappingURL=NotificationHubClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationHubClient.js","sourceRoot":"","sources":["../../src/realtime/NotificationHubClient.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,IAAI,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAoElF,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"NotificationHubClient.js","sourceRoot":"","sources":["../../src/realtime/NotificationHubClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,7 +53,8 @@ export declare class ReconnectionManager {
|
|
|
53
53
|
private handleNotificationDisconnected;
|
|
54
54
|
/**
|
|
55
55
|
* Determine if the disconnect error is likely due to token expiry (HTTP 401).
|
|
56
|
-
* SignalR surfaces
|
|
56
|
+
* SignalR surfaces these conditions only as text in the error message, so this
|
|
57
|
+
* is a best-effort heuristic that matches the most common phrasings.
|
|
57
58
|
*/
|
|
58
59
|
private isTokenExpiredError;
|
|
59
60
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReconnectionManager.d.ts","sourceRoot":"","sources":["../../src/realtime/ReconnectionManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,0BAA0B;IACzC,+BAA+B;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,uCAAuC;IACvC,eAAe,EAAE,qBAAqB,CAAC;IACvC;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA+B;IAE/D,OAAO,CAAC,2BAA2B,CAAC,CAAa;IACjD,OAAO,CAAC,mCAAmC,CAAC,CAAa;IAEzD,6DAA6D;IAC7D,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,0BAA0B;IAM/C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAeb;;OAEG;IACH,IAAI,IAAI,IAAI;YAYE,sBAAsB;
|
|
1
|
+
{"version":3,"file":"ReconnectionManager.d.ts","sourceRoot":"","sources":["../../src/realtime/ReconnectionManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,0BAA0B;IACzC,+BAA+B;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,uCAAuC;IACvC,eAAe,EAAE,qBAAqB,CAAC;IACvC;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA+B;IAE/D,OAAO,CAAC,2BAA2B,CAAC,CAAa;IACjD,OAAO,CAAC,mCAAmC,CAAC,CAAa;IAEzD,6DAA6D;IAC7D,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,0BAA0B;IAM/C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAeb;;OAEG;IACH,IAAI,IAAI,IAAI;YAYE,sBAAsB;YAmBtB,8BAA8B;IAoB5C;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;;OAGG;YACW,YAAY;CA2B3B"}
|
|
@@ -51,6 +51,9 @@ export class ReconnectionManager {
|
|
|
51
51
|
async handleChatDisconnected(err) {
|
|
52
52
|
if (!this.active)
|
|
53
53
|
return;
|
|
54
|
+
// Skip reconnect when the user (or ChatClient.disconnect/logout) closed it.
|
|
55
|
+
if (this.chatHub.intentionallyClosed)
|
|
56
|
+
return;
|
|
54
57
|
// withAutomaticReconnect already tried — this is a terminal disconnect.
|
|
55
58
|
// Attempt one more manual reconnect after optional token refresh.
|
|
56
59
|
if (this.isTokenExpiredError(err)) {
|
|
@@ -63,6 +66,8 @@ export class ReconnectionManager {
|
|
|
63
66
|
async handleNotificationDisconnected(err) {
|
|
64
67
|
if (!this.active)
|
|
65
68
|
return;
|
|
69
|
+
if (this.notificationHub.intentionallyClosed)
|
|
70
|
+
return;
|
|
66
71
|
if (this.isTokenExpiredError(err)) {
|
|
67
72
|
const newToken = await this.onTokenExpired?.();
|
|
68
73
|
if (!newToken)
|
|
@@ -75,13 +80,18 @@ export class ReconnectionManager {
|
|
|
75
80
|
// ---------------------------------------------------------------------------
|
|
76
81
|
/**
|
|
77
82
|
* Determine if the disconnect error is likely due to token expiry (HTTP 401).
|
|
78
|
-
* SignalR surfaces
|
|
83
|
+
* SignalR surfaces these conditions only as text in the error message, so this
|
|
84
|
+
* is a best-effort heuristic that matches the most common phrasings.
|
|
79
85
|
*/
|
|
80
86
|
isTokenExpiredError(err) {
|
|
81
87
|
if (!err)
|
|
82
88
|
return false;
|
|
83
|
-
const msg = err.message ?? '';
|
|
84
|
-
return msg.includes('401') ||
|
|
89
|
+
const msg = (err.message ?? '').toLowerCase();
|
|
90
|
+
return (msg.includes('401') ||
|
|
91
|
+
msg.includes('unauthorized') ||
|
|
92
|
+
msg.includes('expired') ||
|
|
93
|
+
msg.includes('invalid_token') ||
|
|
94
|
+
msg.includes('invalid token'));
|
|
85
95
|
}
|
|
86
96
|
/**
|
|
87
97
|
* Attempt to reconnect a hub with exponential backoff (max 3 retries).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReconnectionManager.js","sourceRoot":"","sources":["../../src/realtime/ReconnectionManager.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAoBxD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,mBAAmB;IAW9B,YAAY,OAAmC;QAH/C,6DAA6D;QACrD,WAAM,GAAG,KAAK,CAAC;QAGrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAChD,cAAc,EACd,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAC/C,CAAC;QAEF,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAChE,cAAc,EACd,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,CACvD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,mCAAmC,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;QAC7C,IAAI,CAAC,mCAAmC,GAAG,SAAS,CAAC;IACvD,CAAC;IAED,8EAA8E;IAC9E,sBAAsB;IACtB,8EAA8E;IAEtE,KAAK,CAAC,sBAAsB,CAAC,GAAsB;QACzD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"ReconnectionManager.js","sourceRoot":"","sources":["../../src/realtime/ReconnectionManager.ts"],"names":[],"mappings":"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"}
|
package/dist/types/block.d.ts
CHANGED
|
@@ -77,7 +77,7 @@ export interface ContactBlock {
|
|
|
77
77
|
export interface ChoiceOption {
|
|
78
78
|
label: string;
|
|
79
79
|
value: string;
|
|
80
|
-
selected
|
|
80
|
+
selected?: boolean;
|
|
81
81
|
}
|
|
82
82
|
export interface ChoiceBlock {
|
|
83
83
|
$type: 'choice';
|
|
@@ -93,7 +93,7 @@ export interface CardField {
|
|
|
93
93
|
export interface ActionButton {
|
|
94
94
|
label: string;
|
|
95
95
|
action: ButtonAction;
|
|
96
|
-
value
|
|
96
|
+
value?: string | null;
|
|
97
97
|
style: ButtonStyle;
|
|
98
98
|
}
|
|
99
99
|
export interface CardBlock {
|
|
@@ -145,4 +145,19 @@ export declare function isCardBlock(b: Block): b is CardBlock;
|
|
|
145
145
|
export declare function isCarouselBlock(b: Block): b is CarouselBlock;
|
|
146
146
|
export declare function isDividerBlock(b: Block): b is DividerBlock;
|
|
147
147
|
export declare function isCustomBlock(b: Block): b is CustomBlock;
|
|
148
|
+
/**
|
|
149
|
+
* Re-construct a block object with `$type` as the first property.
|
|
150
|
+
*
|
|
151
|
+
* The server's polymorphic deserializer requires `$type` to appear as the
|
|
152
|
+
* first property in every block JSON payload (gateway spec §13). JavaScript
|
|
153
|
+
* engines preserve insertion order for string keys (ES2015+), so reassembling
|
|
154
|
+
* via destructure-then-spread guarantees the correct serialization order.
|
|
155
|
+
*
|
|
156
|
+
* `CarouselBlock` is the only block type containing nested blocks (its `cards`
|
|
157
|
+
* array of `CardBlock`); each nested card is recursively normalized so the
|
|
158
|
+
* spec rule holds at every level.
|
|
159
|
+
*/
|
|
160
|
+
export declare function withTypeFirst<T extends Block>(block: T): T;
|
|
161
|
+
/** Apply {@link withTypeFirst} to every block in an array. */
|
|
162
|
+
export declare function normalizeBlocksForSend<T extends Block>(blocks: T[]): T[];
|
|
148
163
|
//# sourceMappingURL=block.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/types/block.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/types/block.ts"],"names":[],"mappings":"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"}
|
package/dist/types/block.js
CHANGED
|
@@ -44,4 +44,34 @@ export function isDividerBlock(b) {
|
|
|
44
44
|
export function isCustomBlock(b) {
|
|
45
45
|
return b.$type === 'custom';
|
|
46
46
|
}
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Block serialization helpers
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
/**
|
|
51
|
+
* Re-construct a block object with `$type` as the first property.
|
|
52
|
+
*
|
|
53
|
+
* The server's polymorphic deserializer requires `$type` to appear as the
|
|
54
|
+
* first property in every block JSON payload (gateway spec §13). JavaScript
|
|
55
|
+
* engines preserve insertion order for string keys (ES2015+), so reassembling
|
|
56
|
+
* via destructure-then-spread guarantees the correct serialization order.
|
|
57
|
+
*
|
|
58
|
+
* `CarouselBlock` is the only block type containing nested blocks (its `cards`
|
|
59
|
+
* array of `CardBlock`); each nested card is recursively normalized so the
|
|
60
|
+
* spec rule holds at every level.
|
|
61
|
+
*/
|
|
62
|
+
export function withTypeFirst(block) {
|
|
63
|
+
const { $type, ...rest } = block;
|
|
64
|
+
if (block.$type === 'carousel') {
|
|
65
|
+
return {
|
|
66
|
+
$type,
|
|
67
|
+
...rest,
|
|
68
|
+
cards: block.cards.map((card) => withTypeFirst(card)),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return { $type, ...rest };
|
|
72
|
+
}
|
|
73
|
+
/** Apply {@link withTypeFirst} to every block in an array. */
|
|
74
|
+
export function normalizeBlocksForSend(blocks) {
|
|
75
|
+
return blocks.map(withTypeFirst);
|
|
76
|
+
}
|
|
47
77
|
//# sourceMappingURL=block.js.map
|
package/dist/types/block.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/types/block.ts"],"names":[],"mappings":"AAAA,uDAAuD;AA2KvD,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAE9E,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAQ;IACnC,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAQ;IACnC,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAQ;IACnC,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,CAAQ;IACzC,OAAO,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAQ;IACnC,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAQ;IACtC,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAQ;IACrC,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAQ;IACpC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAQ;IACtC,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAQ;IACrC,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAQ;IACpC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC9B,CAAC"}
|
|
1
|
+
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/types/block.ts"],"names":[],"mappings":"AAAA,uDAAuD;AA2KvD,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAE9E,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAQ;IACnC,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAQ;IACnC,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAQ;IACnC,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,CAAQ;IACzC,OAAO,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAQ;IACnC,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAQ;IACtC,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAQ;IACrC,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAQ;IACpC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAQ;IACtC,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAQ;IACrC,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAQ;IACpC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC9B,CAAC;AAED,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAkB,KAAQ;IACrD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACjC,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO;YACL,KAAK;YACL,GAAG,IAAI;YACP,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACjD,CAAC;IACT,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAO,CAAC;AACjC,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,sBAAsB,CAAkB,MAAW;IACjE,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -34,7 +34,8 @@ export interface ChatMessageDto {
|
|
|
34
34
|
conversationId: string;
|
|
35
35
|
senderId: string;
|
|
36
36
|
senderName: string;
|
|
37
|
-
|
|
37
|
+
/** Có thể null khi server không sẵn signed URL — fallback theo storageKey */
|
|
38
|
+
senderAvatar?: MediaReference | null;
|
|
38
39
|
senderType: SenderType;
|
|
39
40
|
blocks: Block[];
|
|
40
41
|
plainTextContent: string | null;
|
|
@@ -99,14 +100,33 @@ export interface ReadReceiptUpdatedDto {
|
|
|
99
100
|
/** ISO 8601 */
|
|
100
101
|
readAt: string;
|
|
101
102
|
}
|
|
103
|
+
/** Thumbnail ready cho một block media trong message */
|
|
104
|
+
export interface MessageThumbnailDto {
|
|
105
|
+
/** Vị trí block trong mảng blocks của message */
|
|
106
|
+
blockIndex: number;
|
|
107
|
+
thumbnail: MediaReference;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Server đã sinh xong thumbnail cho các media block trong message (ảnh/video).
|
|
111
|
+
* Client nên cập nhật URL thumbnail theo blockIndex mà không cần re-fetch toàn bộ message.
|
|
112
|
+
*
|
|
113
|
+
* NOTE: Event này được gửi SAU MessageReceived/StreamCompleted khi server hoàn tất
|
|
114
|
+
* xử lý media bất đồng bộ.
|
|
115
|
+
*/
|
|
116
|
+
export interface MessageThumbnailsReadyDto {
|
|
117
|
+
messageId: string;
|
|
118
|
+
conversationId: string;
|
|
119
|
+
thumbnails: MessageThumbnailDto[];
|
|
120
|
+
}
|
|
102
121
|
export interface StreamStartedDto {
|
|
103
122
|
streamId: string;
|
|
104
123
|
messageId: string;
|
|
105
124
|
conversationId: string;
|
|
106
125
|
senderId: string;
|
|
107
126
|
senderName: string;
|
|
108
|
-
|
|
109
|
-
|
|
127
|
+
/** Có thể null khi server không sẵn signed URL — fallback theo storageKey */
|
|
128
|
+
senderAvatar?: MediaReference | null;
|
|
129
|
+
replyToMessageId?: string | null;
|
|
110
130
|
/** ISO 8601 */
|
|
111
131
|
startedAt: string;
|
|
112
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-events.d.ts","sourceRoot":"","sources":["../../src/types/chat-events.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-events.d.ts","sourceRoot":"","sources":["../../src/types/chat-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,9 +40,10 @@ export interface ConversationListItemDto {
|
|
|
40
40
|
type: ConversationType;
|
|
41
41
|
name?: string;
|
|
42
42
|
avatar?: MediaReference;
|
|
43
|
-
/** ISO 8601 */
|
|
44
|
-
lastMessageAt?: string;
|
|
45
|
-
|
|
43
|
+
/** ISO 8601, null when conversation has no messages yet */
|
|
44
|
+
lastMessageAt?: string | null;
|
|
45
|
+
/** null when conversation has no messages yet */
|
|
46
|
+
lastMessageId?: string | null;
|
|
46
47
|
/** Full message DTO for preview. null when conversation has no messages yet */
|
|
47
48
|
lastMessage?: MessageDto | null;
|
|
48
49
|
isPinned: boolean;
|
|
@@ -67,4 +68,52 @@ export interface AddParticipantRequest {
|
|
|
67
68
|
/** Default true — allow viewing history before joining */
|
|
68
69
|
canViewHistory?: boolean;
|
|
69
70
|
}
|
|
71
|
+
/** Filter for the conversation media listing endpoint. Case-insensitive on the wire. */
|
|
72
|
+
export type ConversationMediaKindFilter = 'all' | 'attachment' | 'link';
|
|
73
|
+
/** Categorisation of a media item (matches the server's `kind` field). */
|
|
74
|
+
export type ConversationMediaKind = 'Attachment' | 'Link';
|
|
75
|
+
/** Block type that produced the media item. */
|
|
76
|
+
export type ConversationMediaBlockType = 'Image' | 'Video' | 'Audio' | 'File' | 'LinkPreview';
|
|
77
|
+
/**
|
|
78
|
+
* A single media/link item extracted from a conversation's messages.
|
|
79
|
+
*
|
|
80
|
+
* Returned by `GET /api/conversations/{conversationId}/media`. The server
|
|
81
|
+
* walks every block in every message visible to the caller (subject to the
|
|
82
|
+
* caller's join time) and emits one `ConversationMediaItemDto` per qualifying
|
|
83
|
+
* block. The same message can therefore contribute multiple items.
|
|
84
|
+
*/
|
|
85
|
+
export interface ConversationMediaItemDto {
|
|
86
|
+
/** Composite id `{messageId}#{blockIndex:D2}` */
|
|
87
|
+
id: string;
|
|
88
|
+
conversationId: string;
|
|
89
|
+
messageId: string;
|
|
90
|
+
/** 0-based index of the block inside the source message */
|
|
91
|
+
blockIndex: number;
|
|
92
|
+
senderId: string;
|
|
93
|
+
/** `User` | `Bot` | `System` */
|
|
94
|
+
senderType: string;
|
|
95
|
+
kind: ConversationMediaKind;
|
|
96
|
+
blockType: ConversationMediaBlockType;
|
|
97
|
+
/** ISO 8601 — creation time of the source message */
|
|
98
|
+
createdAt: string;
|
|
99
|
+
/** Set when `kind === 'Attachment'` (internal storage). */
|
|
100
|
+
storageKey?: string | null;
|
|
101
|
+
/** Set when `kind === 'Link'` (external URL or LinkPreview). */
|
|
102
|
+
url?: string | null;
|
|
103
|
+
fileName?: string | null;
|
|
104
|
+
mimeType?: string | null;
|
|
105
|
+
fileSizeBytes?: number | null;
|
|
106
|
+
width?: number | null;
|
|
107
|
+
height?: number | null;
|
|
108
|
+
durationSeconds?: number | null;
|
|
109
|
+
caption?: string | null;
|
|
110
|
+
altText?: string | null;
|
|
111
|
+
thumbnailStorageKey?: string | null;
|
|
112
|
+
thumbnailUrl?: string | null;
|
|
113
|
+
linkTitle?: string | null;
|
|
114
|
+
linkDescription?: string | null;
|
|
115
|
+
linkSiteName?: string | null;
|
|
116
|
+
linkImageStorageKey?: string | null;
|
|
117
|
+
linkImageUrl?: string | null;
|
|
118
|
+
}
|
|
70
119
|
//# sourceMappingURL=conversation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/types/conversation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAE7D,wDAAwD;AACxD,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,0BAA0B,EAAE,CAAC;CAC5C;AAED,gDAAgD;AAChD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/types/conversation.ts"],"names":[],"mappings":"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"}
|
package/dist/types/message.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { Block, QuickReply, Mention } from './block.js';
|
|
2
2
|
export type SenderType = 'User' | 'Bot' | 'System';
|
|
3
|
-
export type SystemEventType = 'ConversationRenamed' | 'AvatarChanged' | 'MemberAdded' | 'MemberRemoved' | 'MemberLeft'
|
|
3
|
+
export type SystemEventType = 'ConversationRenamed' | 'AvatarChanged' | 'MemberAdded' | 'MemberRemoved' | 'MemberLeft';
|
|
4
4
|
/** System event metadata — REST API version */
|
|
5
5
|
export interface SystemEventInfo {
|
|
6
6
|
type: SystemEventType;
|
|
7
7
|
/** null when there is no actor (e.g. MemberLeft — user left voluntarily) */
|
|
8
|
-
actorId
|
|
8
|
+
actorId?: string | null;
|
|
9
9
|
targetIds?: string[];
|
|
10
|
-
|
|
10
|
+
/** All values are strings per spec (e.g. ConversationRenamed → { newName: "..." }) */
|
|
11
|
+
metadata?: Record<string, string>;
|
|
11
12
|
}
|
|
12
13
|
/** Reaction on a single emoji (REST API version — flat array item) */
|
|
13
14
|
export interface ReactionGroup {
|
|
@@ -27,7 +28,7 @@ export interface ReactionSummary {
|
|
|
27
28
|
* Full message object — REST API version.
|
|
28
29
|
*
|
|
29
30
|
* Differences from SignalR ChatMessageDto:
|
|
30
|
-
* - Has:
|
|
31
|
+
* - Has: editedAt, isDeleted, deletedAt, plainTextIndex, reactionSummary
|
|
31
32
|
* - Does NOT have: senderName, senderAvatar, reactions (flat), plainTextContent (SignalR name)
|
|
32
33
|
*/
|
|
33
34
|
export interface MessageDto {
|
|
@@ -36,8 +37,6 @@ export interface MessageDto {
|
|
|
36
37
|
conversationId: string;
|
|
37
38
|
senderId: string;
|
|
38
39
|
senderType: SenderType;
|
|
39
|
-
/** ISO 8601 — time message was sent */
|
|
40
|
-
timestamp: string;
|
|
41
40
|
blocks: Block[];
|
|
42
41
|
/** Plain text content for search indexing */
|
|
43
42
|
plainTextIndex: string | null;
|