@andocorp/sdk 0.0.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +63 -0
  3. package/dist/agent-endpoints.d.ts +89 -0
  4. package/dist/agent-endpoints.d.ts.map +1 -0
  5. package/dist/agent-endpoints.js +229 -0
  6. package/dist/agent-endpoints.js.map +1 -0
  7. package/dist/agent-types.d.ts +81 -0
  8. package/dist/agent-types.d.ts.map +1 -0
  9. package/dist/agent-types.js +3 -0
  10. package/dist/agent-types.js.map +1 -0
  11. package/dist/client.d.ts +133 -10
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +525 -57
  14. package/dist/client.js.map +1 -1
  15. package/dist/generated/contracts.d.ts +326 -11
  16. package/dist/generated/contracts.d.ts.map +1 -1
  17. package/dist/generated/contracts.js +21 -1
  18. package/dist/generated/contracts.js.map +1 -1
  19. package/dist/generated/public-api.d.ts +856 -0
  20. package/dist/generated/public-api.d.ts.map +1 -0
  21. package/dist/generated/public-api.js +382 -0
  22. package/dist/generated/public-api.js.map +1 -0
  23. package/dist/index.d.ts +8 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +25 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/realtime-events.d.ts +9 -4
  28. package/dist/realtime-events.d.ts.map +1 -1
  29. package/dist/realtime-events.js +113 -157
  30. package/dist/realtime-events.js.map +1 -1
  31. package/dist/realtime-runtime.d.ts +6 -17
  32. package/dist/realtime-runtime.d.ts.map +1 -1
  33. package/dist/realtime-runtime.js +45 -62
  34. package/dist/realtime-runtime.js.map +1 -1
  35. package/dist/realtime-types.d.ts +60 -77
  36. package/dist/realtime-types.d.ts.map +1 -1
  37. package/dist/realtime-types.js +2 -0
  38. package/dist/realtime-types.js.map +1 -1
  39. package/dist/realtime.d.ts +6 -5
  40. package/dist/realtime.d.ts.map +1 -1
  41. package/dist/realtime.js +282 -144
  42. package/dist/realtime.js.map +1 -1
  43. package/dist/targets.d.ts.map +1 -1
  44. package/dist/targets.js.map +1 -1
  45. package/dist/types.d.ts +61 -20
  46. package/dist/types.d.ts.map +1 -1
  47. package/package.json +24 -16
@@ -1,47 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createAndoMessageDedupeCache = createAndoMessageDedupeCache;
4
- exports.handleControlEvent = handleControlEvent;
5
- exports.handleAndoRealtimeIncomingEvent = handleAndoRealtimeIncomingEvent;
4
+ exports.isRealtimeEventFrame = isRealtimeEventFrame;
6
5
  exports.prepareAndoRealtimeIncomingEvent = prepareAndoRealtimeIncomingEvent;
6
+ const contracts_1 = require("./generated/contracts");
7
7
  const realtime_runtime_1 = require("./realtime-runtime");
8
- const ANDO_CONVERSATION_TYPE_DIRECT_MESSAGE = 1;
9
- const ANDO_CONVERSATION_MESSAGE_TYPE_SYSTEM = 1;
10
8
  function isRecord(value) {
11
- return typeof value === "object" && value != null;
9
+ return typeof value === "object" && value != null && !Array.isArray(value);
12
10
  }
13
- function isStringProperty(value, key) {
14
- return typeof value[key] === "string";
11
+ function asString(value) {
12
+ return typeof value === "string" ? value : null;
15
13
  }
16
- function normalizeMentionText(value) {
17
- return (value ?? "")
18
- .replace(/[\u200b-\u206f]/g, "")
19
- .replace(/\s+/g, " ")
20
- .trim();
14
+ function messageText(message) {
15
+ const markdown = message.markdown_content?.trim();
16
+ if (markdown) {
17
+ return markdown;
18
+ }
19
+ const content = message.content?.trim();
20
+ if (content) {
21
+ return content;
22
+ }
23
+ return null;
21
24
  }
22
- function messageMentionsAndoAgent(params) {
23
- const normalized = normalizeMentionText(params.text);
24
- if (!normalized) {
25
- return false;
25
+ function subscriptionMentionTarget(target) {
26
+ if (target?.type === "workspace_membership") {
27
+ return {
28
+ targetType: "workspace_membership",
29
+ targetId: target.id,
30
+ };
26
31
  }
27
- return params.memberGroupIds.some((memberGroupId) => {
28
- const id = memberGroupId?.trim();
29
- if (!id) {
30
- return false;
31
- }
32
- return new RegExp(`<!member_group:${id}\\|[^>]+>`).test(normalized);
33
- });
32
+ return null;
34
33
  }
35
- function isNonRetryableContextError(error) {
36
- if (error instanceof Error &&
37
- error.message.includes("/conversation-messages/") &&
38
- error.message.includes("returned null")) {
39
- return true;
34
+ function isDirectMessageEvent(params) {
35
+ if (params.conversationType != null) {
36
+ return params.conversationType === contracts_1.ConversationType.DIRECT_MESSAGE;
40
37
  }
41
- return (error instanceof Error &&
42
- "status" in error &&
43
- error.status != null &&
44
- [404, 410, 422].includes(Number(error.status)));
38
+ return !params.message.conversation_name?.trim();
39
+ }
40
+ function isMessageResult(value) {
41
+ return (isRecord(value) &&
42
+ typeof value["id"] === "string" &&
43
+ typeof value["conversation_id"] === "string" &&
44
+ typeof value["author_id"] === "string" &&
45
+ Array.isArray(value["image_urls"]) &&
46
+ Array.isArray(value["reactions"]));
45
47
  }
46
48
  function createAndoMessageDedupeCache(options) {
47
49
  const messages = new Map();
@@ -84,35 +86,48 @@ function createAndoMessageDedupeCache(options) {
84
86
  },
85
87
  };
86
88
  }
87
- function isMembershipNewEvent(event) {
88
- if (event.eventId !== "membership/new") {
89
- return false;
90
- }
91
- if (!isRecord(event) || !("membership" in event) || !isRecord(event.membership)) {
92
- return false;
93
- }
94
- const conversation = event.membership.conversation;
95
- return isRecord(conversation) && isStringProperty(conversation, "id");
89
+ function isRealtimeEventFrame(value) {
90
+ return (isRecord(value) &&
91
+ value["type"] === "event" &&
92
+ typeof value["envelope_id"] === "string" &&
93
+ typeof value["subscription_id"] === "string" &&
94
+ typeof value["cursor"] === "string" &&
95
+ isRecord(value["payload"]));
96
96
  }
97
- function isMessageNewEvent(event) {
98
- if (event.eventId !== "member/message-new") {
99
- return false;
100
- }
101
- if (!isRecord(event) || !("message" in event) || !isRecord(event.message)) {
102
- return false;
103
- }
104
- return (isStringProperty(event.message, "id") &&
105
- isStringProperty(event.message, "conversation_id"));
97
+ function isMessageCreatedProductEvent(value) {
98
+ return (isRecord(value) &&
99
+ value["type"] === "message.created" &&
100
+ isRecord(value["data"]) &&
101
+ isMessageResult(value["data"]["object"]));
106
102
  }
107
- function buildNormalizedMessageContext(context) {
103
+ function toRealtimeMessage(event) {
104
+ const object = event.data.object;
105
+ const related = isRecord(event.related) ? event.related : {};
106
+ const threadRootId = asString(related.thread_root_message_id);
107
+ const callId = asString(related.call_id);
108
+ return {
109
+ ...object,
110
+ author: {
111
+ id: object.author_id,
112
+ display_name: object.author_name,
113
+ },
114
+ call_id: callId,
115
+ content: object.content,
116
+ files: [],
117
+ markdown_content: object.content,
118
+ thread_root_id: threadRootId,
119
+ type: 0,
120
+ };
121
+ }
122
+ function buildNormalizedMessageContext(context, message) {
108
123
  if (!context?.current_text) {
109
124
  return null;
110
125
  }
111
126
  return {
112
127
  currentText: context.current_text,
113
- replyThreadRootId: context.reply_thread_root_id ?? null,
128
+ replyThreadRootId: message.thread_root_id ?? context.reply_thread_root_id,
114
129
  inboundHistory: context.inbound_history.map((entry) => ({
115
- sender: entry.author_name?.trim() || entry.author_id || "unknown",
130
+ sender: entry.author_name?.trim() ? entry.author_name.trim() : entry.author_id,
116
131
  body: entry.body,
117
132
  timestamp: (0, realtime_runtime_1.toUnixTimestamp)(entry.created_at),
118
133
  })),
@@ -120,126 +135,67 @@ function buildNormalizedMessageContext(context) {
120
135
  threadHistoryBody: context.thread_history_body ?? undefined,
121
136
  };
122
137
  }
123
- function evaluateInboundMessage(params) {
124
- const conversation = params.conversations.get(params.event.message.conversation_id);
125
- const isDirectMessage = conversation?.type === ANDO_CONVERSATION_TYPE_DIRECT_MESSAGE;
126
- const mentionsMe = messageMentionsAndoAgent({
127
- text: params.event.message.markdown_content,
128
- memberGroupIds: [
129
- params.selfMember.member_group_id,
130
- conversation?.everyone_member_group_id,
131
- ],
132
- });
133
- return {
134
- conversation,
135
- isDirectMessage,
136
- skip: params.event.message.type === ANDO_CONVERSATION_MESSAGE_TYPE_SYSTEM ||
137
- params.event.message.author_id === params.selfMember.id ||
138
- !mentionsMe,
139
- };
140
- }
141
- function handleControlEvent({ socket, roomId, conversations, event, }) {
142
- if (event.eventId === "heartbeat/ping") {
143
- (0, realtime_runtime_1.sendJson)(socket, { eventId: "heartbeat/pong" });
144
- (0, realtime_runtime_1.acknowledgeEvent)({
145
- socket,
146
- roomId,
147
- ackId: event._clientAckId,
148
- });
149
- return true;
150
- }
151
- if (isMembershipNewEvent(event)) {
152
- conversations.set(event.membership.conversation.id, event.membership.conversation);
153
- (0, realtime_runtime_1.acknowledgeEvent)({
154
- socket,
155
- roomId,
156
- ackId: event._clientAckId,
157
- });
158
- return true;
159
- }
160
- if (!isMessageNewEvent(event)) {
161
- (0, realtime_runtime_1.acknowledgeEvent)({
162
- socket,
163
- roomId,
164
- ackId: event._clientAckId,
165
- });
138
+ function isNonRetryableContextError(error) {
139
+ if (error instanceof Error &&
140
+ error.message.includes("/conversation-messages/") &&
141
+ error.message.includes("returned null")) {
166
142
  return true;
167
143
  }
168
- return false;
144
+ return (error instanceof Error &&
145
+ "status" in error &&
146
+ error.status != null &&
147
+ [404, 410, 422].includes(Number(error.status)));
169
148
  }
170
- async function handleAndoRealtimeIncomingEvent({ api, socket, event, roomId, conversations, seenMessages, selfMember, options, }) {
171
- const preparedMessage = await prepareAndoRealtimeIncomingEvent({
172
- api,
173
- event,
174
- conversations,
175
- seenMessages,
176
- selfMember,
177
- signal: options.signal,
178
- });
179
- if (preparedMessage.markSeen) {
180
- seenMessages.mark(event.message.id);
149
+ async function getConversationMetadata(api, conversationId, signal) {
150
+ try {
151
+ const conversation = await api.getConversation?.(conversationId, signal);
152
+ return conversation ?? undefined;
181
153
  }
182
- (0, realtime_runtime_1.acknowledgeEvent)({
183
- socket,
184
- roomId,
185
- ackId: event._clientAckId,
186
- });
187
- if (preparedMessage.kind !== "deliver") {
188
- return;
154
+ catch {
155
+ return undefined;
189
156
  }
190
- await options.onMessage?.(preparedMessage.messageEvent);
191
157
  }
192
- async function prepareAndoRealtimeIncomingEvent({ api, event, conversations, seenMessages, selfMember, signal, }) {
193
- if (seenMessages.has(event.message.id)) {
194
- return {
195
- kind: "drop",
196
- markSeen: false,
197
- };
198
- }
199
- if (!conversations.has(event.message.conversation_id)) {
200
- const memberships = await (0, realtime_runtime_1.listAllMemberships)(api, signal);
201
- (0, realtime_runtime_1.updateConversationCache)(conversations, memberships);
158
+ async function prepareAndoRealtimeIncomingEvent({ api, frame, seenMessages, signal, subscriptionTarget, }) {
159
+ if (!isMessageCreatedProductEvent(frame.payload)) {
160
+ return { kind: "drop", cursor: frame.cursor };
202
161
  }
203
- const messageEvaluation = evaluateInboundMessage({
204
- event,
205
- conversations,
206
- selfMember,
207
- });
208
- if (messageEvaluation.skip) {
209
- return {
210
- kind: "drop",
211
- markSeen: false,
212
- };
162
+ const message = toRealtimeMessage(frame.payload);
163
+ if (seenMessages.has(message.id)) {
164
+ return { kind: "drop", cursor: frame.cursor };
213
165
  }
214
- let fetchedContext;
166
+ let context;
215
167
  try {
216
- fetchedContext = await api.getMessageContext(event.message.id, signal);
168
+ context = buildNormalizedMessageContext(await api.getMessageContext(message.id, signal, {
169
+ threadRootId: message.thread_root_id,
170
+ }), message);
217
171
  }
218
172
  catch (error) {
219
- if (isNonRetryableContextError(error)) {
220
- return {
221
- kind: "drop",
222
- markSeen: true,
223
- };
173
+ if (!isNonRetryableContextError(error)) {
174
+ throw error;
224
175
  }
225
- throw error;
176
+ context = null;
226
177
  }
227
- const context = buildNormalizedMessageContext(fetchedContext);
228
- if (!context?.currentText) {
229
- return {
230
- kind: "drop",
231
- markSeen: false,
232
- };
178
+ if (!context?.currentText && !messageText(message)) {
179
+ return { kind: "drop", cursor: frame.cursor };
233
180
  }
181
+ const conversation = await getConversationMetadata(api, message.conversation_id, signal);
182
+ const conversationType = conversation?.type ?? null;
183
+ const event = {
184
+ message,
185
+ conversation,
186
+ conversationType,
187
+ isDirectMessage: isDirectMessageEvent({ conversationType, message }),
188
+ wasMentioned: true,
189
+ selfMentionTargets: [subscriptionMentionTarget(subscriptionTarget)].filter((target) => target != null),
190
+ context,
191
+ cursor: frame.cursor,
192
+ productEventId: frame.payload.id,
193
+ subscriptionId: frame.subscription_id,
194
+ };
234
195
  return {
235
196
  kind: "deliver",
236
- markSeen: true,
237
- messageEvent: {
238
- message: event.message,
239
- conversation: messageEvaluation.conversation,
240
- isDirectMessage: messageEvaluation.isDirectMessage,
241
- context,
242
- },
197
+ cursor: frame.cursor,
198
+ event,
243
199
  };
244
200
  }
245
201
  //# sourceMappingURL=realtime-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-events.js","sourceRoot":"","sources":["../src/realtime-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"realtime-events.js","sourceRoot":"","sources":["../src/realtime-events.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,18 @@
1
- import { AndoMembership } from "./types";
2
- import { AndoRawRealtimeEvent, AndoRealtimeApi, AndoSocket, SelfMember, SocketListener } from "./realtime-types";
1
+ import { AndoSocket, AndoWebSocketProtocols, SocketListener } from "./realtime-types";
3
2
  export declare function delay(ms: number, abortSignal?: AbortSignal): Promise<void>;
4
3
  export declare function isAbortError(error: unknown): boolean;
5
4
  export declare function isPermanentAuthFailure(error: unknown): boolean;
6
5
  export declare function toAbortError(reason?: unknown): Error;
7
6
  export declare function toUnixTimestamp(value: string | Date | undefined): number | undefined;
8
- export declare function pickSelfMember(me: Awaited<ReturnType<AndoRealtimeApi["getMe"]>>, memberGroupId: string | null): SelfMember;
9
7
  export declare function buildAndoRealtimeWebSocketUrl(params: {
10
8
  realtimeHost: string;
11
- roomId: string;
12
- token: string;
13
9
  }): string;
10
+ export declare function buildAndoRealtimeWebSocketAuthProtocols(): string[];
11
+ export declare function redactRealtimeConnectionSecrets(value: string): string;
14
12
  export declare function addSocketListener(socket: AndoSocket, event: string, listener: SocketListener): () => void;
15
- export declare function addSocketOnceListener(socket: AndoSocket, event: string, listener: SocketListener): () => void;
16
- export declare function readAndoRealtimeData(raw: unknown): string;
17
- export declare function parseAndoRealtimeEvent(raw: unknown): AndoRawRealtimeEvent | null;
18
- export declare function sendJson(socket: AndoSocket, payload: unknown): void;
13
+ export declare function parseAndoRealtimeEvent(raw: unknown): unknown | null;
14
+ export declare function sendJson(socket: AndoSocket, payload: unknown): boolean;
19
15
  export declare function closeSocket(socket: AndoSocket): void;
20
- export declare function acknowledgeEvent(params: {
21
- socket: AndoSocket;
22
- roomId: string;
23
- ackId?: string;
24
- }): void;
25
- export declare function openSocket(url: string, abortSignal?: AbortSignal, setup?: (socket: AndoSocket) => void): Promise<AndoSocket>;
16
+ export declare function openSocket(url: string, abortSignal?: AbortSignal, setup?: (socket: AndoSocket) => void, protocols?: AndoWebSocketProtocols): Promise<AndoSocket>;
26
17
  export declare function waitForSocketClose(socket: AndoSocket, abortSignal?: AbortSignal): Promise<void>;
27
- export declare function listAllMemberships(api: Pick<AndoRealtimeApi, "getMyMemberships">, signal?: AbortSignal): Promise<AndoMembership[]>;
28
- export declare function updateConversationCache(conversations: Map<string, AndoMembership["conversation"]>, memberships: AndoMembership[]): void;
29
18
  //# sourceMappingURL=realtime-runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-runtime.d.ts","sourceRoot":"","sources":["../src/realtime-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,UAAU,EAGV,UAAU,EACV,cAAc,EAEf,MAAM,kBAAkB,CAAC;AAgB1B,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB1E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAO9D;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CASpD;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EACjD,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,UAAU,CAOZ;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,UAcA;AAQD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,GACvB,MAAM,IAAI,CA+BZ;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,SAEN,IAAI,CAMvB;AAgCD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAyBzD;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,GACX,oBAAoB,GAAG,IAAI,CAW7B;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,QAM5D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,QAO7C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,QASA;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,WAAW,EACzB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GACnC,OAAO,CAAC,UAAU,CAAC,CA4ErB;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,UAAU,EAClB,WAAW,CAAC,EAAE,WAAW,iBA4C1B;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC,EAC9C,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,EAAE,CAAC,CAkB3B;AAED,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC,EAC1D,WAAW,EAAE,cAAc,EAAE,QAM9B"}
1
+ {"version":3,"file":"realtime-runtime.d.ts","sourceRoot":"","sources":["../src/realtime-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,sBAAsB,EACtB,cAAc,EAEf,MAAM,kBAAkB,CAAC;AAiB1B,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB1E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAO9D;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CASpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMpF;AAsBD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,UAE7E;AAED,wBAAgB,uCAAuC,IAAI,MAAM,EAAE,CAElE;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAcrE;AAQD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,GACvB,MAAM,IAAI,CA+BZ;AA0ED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAWnE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,WAO5D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,QAI7C;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,WAAW,EACzB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,EACpC,SAAS,CAAC,EAAE,sBAAsB,GACjC,OAAO,CAAC,UAAU,CAAC,CAwErB;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,WAAW,iBAqCrF"}
@@ -5,19 +5,15 @@ exports.isAbortError = isAbortError;
5
5
  exports.isPermanentAuthFailure = isPermanentAuthFailure;
6
6
  exports.toAbortError = toAbortError;
7
7
  exports.toUnixTimestamp = toUnixTimestamp;
8
- exports.pickSelfMember = pickSelfMember;
9
8
  exports.buildAndoRealtimeWebSocketUrl = buildAndoRealtimeWebSocketUrl;
9
+ exports.buildAndoRealtimeWebSocketAuthProtocols = buildAndoRealtimeWebSocketAuthProtocols;
10
+ exports.redactRealtimeConnectionSecrets = redactRealtimeConnectionSecrets;
10
11
  exports.addSocketListener = addSocketListener;
11
- exports.addSocketOnceListener = addSocketOnceListener;
12
- exports.readAndoRealtimeData = readAndoRealtimeData;
13
12
  exports.parseAndoRealtimeEvent = parseAndoRealtimeEvent;
14
13
  exports.sendJson = sendJson;
15
14
  exports.closeSocket = closeSocket;
16
- exports.acknowledgeEvent = acknowledgeEvent;
17
15
  exports.openSocket = openSocket;
18
16
  exports.waitForSocketClose = waitForSocketClose;
19
- exports.listAllMemberships = listAllMemberships;
20
- exports.updateConversationCache = updateConversationCache;
21
17
  const SOCKET_CONNECTING = 0;
22
18
  const SOCKET_OPEN = 1;
23
19
  const SOCKET_CLOSING = 2;
@@ -27,7 +23,8 @@ function isNodeRuntime() {
27
23
  if (typeof process === "undefined") {
28
24
  return false;
29
25
  }
30
- return typeof process.versions?.node === "string";
26
+ const versions = process.versions;
27
+ return typeof versions?.node === "string";
31
28
  }
32
29
  function delay(ms, abortSignal) {
33
30
  return new Promise((resolve) => {
@@ -71,24 +68,43 @@ function toUnixTimestamp(value) {
71
68
  }
72
69
  return value instanceof Date ? value.getTime() : Date.parse(value);
73
70
  }
74
- function pickSelfMember(me, memberGroupId) {
75
- return {
76
- id: me.id,
77
- display_name: me.display_name ?? null,
78
- member_group_id: memberGroupId,
79
- member_type: me.member_type,
80
- };
71
+ function stripTrailingSlashes(value) {
72
+ let end = value.length;
73
+ while (end > 0 && value[end - 1] === "/") {
74
+ end -= 1;
75
+ }
76
+ return value.slice(0, end);
81
77
  }
82
- function buildAndoRealtimeWebSocketUrl(params) {
83
- const base = params.realtimeHost.replace(/\/+$/, "");
84
- const wsBase = base.startsWith("http://")
78
+ function toWebSocketBase(value) {
79
+ const base = stripTrailingSlashes(value);
80
+ return base.startsWith("http://")
85
81
  ? `ws://${base.slice("http://".length)}`
86
82
  : base.startsWith("https://")
87
83
  ? `wss://${base.slice("https://".length)}`
88
84
  : base.startsWith("ws://") || base.startsWith("wss://")
89
85
  ? base
90
86
  : `wss://${base}`;
91
- return `${wsBase}/parties/main/${params.roomId}?token=${encodeURIComponent(params.token)}`;
87
+ }
88
+ function buildAndoRealtimeWebSocketUrl(params) {
89
+ return `${toWebSocketBase(params.realtimeHost)}/link`;
90
+ }
91
+ function buildAndoRealtimeWebSocketAuthProtocols() {
92
+ return ["ando.realtime.v1"];
93
+ }
94
+ function redactRealtimeConnectionSecrets(value) {
95
+ try {
96
+ const url = new URL(value);
97
+ if (url.searchParams.has("ticket")) {
98
+ url.searchParams.set("ticket", "[redacted]");
99
+ return url.toString();
100
+ }
101
+ }
102
+ catch {
103
+ // Fall through to text redaction.
104
+ }
105
+ return value
106
+ .replace(/(\bticket=)[^&\s]+/gu, "$1[redacted]")
107
+ .replace(/\brtconn_v1_[A-Za-z0-9_.-]+/gu, "rtconn_v1_[redacted]");
92
108
  }
93
109
  function isNodeStyleSocket(socket) {
94
110
  return typeof socket.on === "function" && typeof socket.off === "function";
@@ -160,7 +176,9 @@ function readAndoRealtimeData(raw) {
160
176
  return TEXT_DECODER.decode(toUint8Array(raw));
161
177
  }
162
178
  if (Array.isArray(raw)) {
163
- return TEXT_DECODER.decode(concatUint8Arrays(raw.filter((chunk) => chunk instanceof ArrayBuffer || ArrayBuffer.isView(chunk)).map((chunk) => toUint8Array(chunk))));
179
+ return TEXT_DECODER.decode(concatUint8Arrays(raw
180
+ .filter((chunk) => chunk instanceof ArrayBuffer || ArrayBuffer.isView(chunk))
181
+ .map((chunk) => toUint8Array(chunk))));
164
182
  }
165
183
  throw new Error("[ando-sdk] unsupported websocket payload");
166
184
  }
@@ -178,31 +196,22 @@ function parseAndoRealtimeEvent(raw) {
178
196
  }
179
197
  function sendJson(socket, payload) {
180
198
  if (socket.readyState !== SOCKET_OPEN) {
181
- return;
199
+ return false;
182
200
  }
183
201
  socket.send(JSON.stringify(payload));
202
+ return true;
184
203
  }
185
204
  function closeSocket(socket) {
186
- if (socket.readyState === SOCKET_CONNECTING ||
187
- socket.readyState === SOCKET_OPEN) {
205
+ if (socket.readyState === SOCKET_CONNECTING || socket.readyState === SOCKET_OPEN) {
188
206
  socket.close();
189
207
  }
190
208
  }
191
- function acknowledgeEvent(params) {
192
- if (!params.ackId) {
193
- return;
194
- }
195
- sendJson(params.socket, {
196
- _clientAck: params.ackId,
197
- _room: params.roomId,
198
- });
199
- }
200
- async function openSocket(url, abortSignal, setup) {
209
+ async function openSocket(url, abortSignal, setup, protocols) {
201
210
  if (abortSignal?.aborted) {
202
211
  throw new Error("aborted");
203
212
  }
204
213
  const WebSocketConstructor = await getWebSocketConstructor();
205
- const socket = new WebSocketConstructor(url);
214
+ const socket = new WebSocketConstructor(url, protocols);
206
215
  if ("binaryType" in socket) {
207
216
  socket.binaryType = "arraybuffer";
208
217
  }
@@ -221,9 +230,7 @@ async function openSocket(url, abortSignal, setup) {
221
230
  };
222
231
  const onError = (error) => {
223
232
  cleanup();
224
- reject(error instanceof Error
225
- ? error
226
- : new Error("[ando-sdk] websocket error"));
233
+ reject(error instanceof Error ? error : new Error("[ando-sdk] websocket error"));
227
234
  };
228
235
  const onUnexpectedResponse = (...args) => {
229
236
  const response = args[1];
@@ -260,8 +267,7 @@ async function openSocket(url, abortSignal, setup) {
260
267
  return socket;
261
268
  }
262
269
  async function waitForSocketClose(socket, abortSignal) {
263
- if (socket.readyState === SOCKET_CLOSING ||
264
- socket.readyState === SOCKET_CLOSED) {
270
+ if (socket.readyState === SOCKET_CLOSING || socket.readyState === SOCKET_CLOSED) {
265
271
  return;
266
272
  }
267
273
  if (abortSignal?.aborted) {
@@ -283,8 +289,7 @@ async function waitForSocketClose(socket, abortSignal) {
283
289
  abortSignal?.removeEventListener("abort", onAbort);
284
290
  };
285
291
  const removeClose = addSocketOnceListener(socket, "close", onClose);
286
- if (socket.readyState === SOCKET_CLOSING ||
287
- socket.readyState === SOCKET_CLOSED) {
292
+ if (socket.readyState === SOCKET_CLOSING || socket.readyState === SOCKET_CLOSED) {
288
293
  cleanup();
289
294
  resolve();
290
295
  return;
@@ -296,28 +301,6 @@ async function waitForSocketClose(socket, abortSignal) {
296
301
  abortSignal?.addEventListener("abort", onAbort, { once: true });
297
302
  });
298
303
  }
299
- async function listAllMemberships(api, signal) {
300
- const memberships = [];
301
- let cursor;
302
- do {
303
- const response = await api.getMyMemberships({
304
- limit: 200,
305
- cursor,
306
- signal,
307
- });
308
- memberships.push(...(response.items ?? []));
309
- cursor = response.pageInfo?.hasNextPage
310
- ? response.pageInfo?.nextCursor
311
- : undefined;
312
- } while (cursor);
313
- return memberships;
314
- }
315
- function updateConversationCache(conversations, memberships) {
316
- conversations.clear();
317
- for (const membership of memberships) {
318
- conversations.set(membership.conversation.id, membership.conversation);
319
- }
320
- }
321
304
  let wsConstructorPromise = null;
322
305
  async function getWebSocketConstructor() {
323
306
  if (!isNodeRuntime() && typeof globalThis.WebSocket === "function") {