@andocorp/sdk 0.0.1

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.
@@ -0,0 +1,28 @@
1
+ import { AndoClientOptions, AndoMembershipPage, AndoMessage, AndoMessageContext, AndoPostMessageInput, AndoRealtimeSubscription, AndoSubscribeMemberOptions } from "./types";
2
+ export declare class AndoClient {
3
+ readonly baseUrl: string;
4
+ readonly realtimeHost: string | null;
5
+ readonly realtime: {
6
+ subscribeMember: (options?: AndoSubscribeMemberOptions) => Promise<AndoRealtimeSubscription>;
7
+ };
8
+ private readonly authHeaderValue;
9
+ private readonly fetchImpl;
10
+ constructor(options: AndoClientOptions);
11
+ private fetchJson;
12
+ private encodeMessageCursor;
13
+ private getConversationMessage;
14
+ private getOptionalConversationMessage;
15
+ private getConversationMessages;
16
+ private getThreadReplies;
17
+ getMe(signal?: AbortSignal): Promise<import("./generated/contracts").MeExtended>;
18
+ getMyMemberships(params?: {
19
+ cursor?: string;
20
+ limit?: number;
21
+ signal?: AbortSignal;
22
+ }): Promise<AndoMembershipPage>;
23
+ getMessageContext(messageId: string, signal?: AbortSignal): Promise<AndoMessageContext>;
24
+ postMessage(input: AndoPostMessageInput): Promise<AndoMessage>;
25
+ private getMemberGroupIdByMemberId;
26
+ private createWebSocketToken;
27
+ }
28
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAUjB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAElB,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,EAE3B,MAAM,SAAS,CAAC;AA0GjB,qBAAa,UAAU;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE;QACjB,eAAe,EAAE,CACf,OAAO,CAAC,EAAE,0BAA0B,KACjC,OAAO,CAAC,wBAAwB,CAAC,CAAC;KACxC,CAAC;IACF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE7B,OAAO,EAAE,iBAAiB;YA+BxB,SAAS;IAiCvB,OAAO,CAAC,mBAAmB;YAWb,sBAAsB;YAkBtB,8BAA8B;YAkB9B,uBAAuB;YAgBvB,gBAAgB;IAgBxB,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW;IAY1B,gBAAgB,CAAC,MAAM,CAAC,EAAE;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAUzB,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC;IA6DxB,WAAW,CACf,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,WAAW,CAAC;YAqBT,0BAA0B;YAiC1B,oBAAoB;CAYnC"}
package/dist/client.js ADDED
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AndoClient = void 0;
4
+ class AndoApiError extends Error {
5
+ constructor(message, status) {
6
+ super(message);
7
+ this.name = "AndoApiError";
8
+ this.status = status;
9
+ }
10
+ }
11
+ const DEFAULT_HISTORY_LIMIT = 8;
12
+ const DEFAULT_THREAD_HISTORY_LIMIT = 12;
13
+ function toIsoString(value) {
14
+ return value instanceof Date ? value.toISOString() : new Date(value).toISOString();
15
+ }
16
+ function isNullConversationMessageError(error) {
17
+ return (error instanceof Error &&
18
+ error.message.includes("/conversation-messages/") &&
19
+ error.message.includes("returned null"));
20
+ }
21
+ function isDefined(value) {
22
+ return value != null;
23
+ }
24
+ function buildMessageText(message) {
25
+ // Context generation prefers one canonical body plus lightweight
26
+ // placeholders for non-text inputs.
27
+ const body = message.markdown_content?.trim();
28
+ if (body) {
29
+ return body;
30
+ }
31
+ const imageCount = message.image_urls?.length ?? 0;
32
+ if (imageCount > 0) {
33
+ return imageCount === 1
34
+ ? "[image attachment]"
35
+ : `[${imageCount} image attachments]`;
36
+ }
37
+ const fileCount = message.files?.length ?? 0;
38
+ if (fileCount > 0) {
39
+ return fileCount === 1
40
+ ? "[file attachment]"
41
+ : `[${fileCount} file attachments]`;
42
+ }
43
+ if (message.call_id != null) {
44
+ return "[Jam started]";
45
+ }
46
+ return null;
47
+ }
48
+ function buildHistoryEntry(message) {
49
+ const body = buildMessageText(message);
50
+ if (!body) {
51
+ return null;
52
+ }
53
+ return {
54
+ message_id: message.id,
55
+ author_id: message.author.id,
56
+ author_name: message.author.display_name,
57
+ body,
58
+ created_at: toIsoString(message.created_at),
59
+ };
60
+ }
61
+ function joinBodies(messages) {
62
+ const lines = messages
63
+ .map((message) => {
64
+ const body = buildMessageText(message);
65
+ if (!body) {
66
+ return null;
67
+ }
68
+ return `${message.author.display_name ?? message.author.id}: ${body}`;
69
+ })
70
+ .filter(Boolean);
71
+ return lines.length > 0 ? lines.join("\n\n") : null;
72
+ }
73
+ class AndoClient {
74
+ constructor(options) {
75
+ this.baseUrl = options.baseUrl.replace(/\/+$/, "");
76
+ this.realtimeHost = options.realtimeHost?.replace(/\/+$/, "") ?? null;
77
+ this.authHeaderValue = `Bearer ${options.auth.apiKey}`;
78
+ this.fetchImpl = options.fetch ?? fetch;
79
+ this.realtime = {
80
+ subscribeMember: async (realtimeOptions) => {
81
+ if (!this.realtimeHost) {
82
+ throw new Error("[ando-sdk] realtimeHost is required for realtime subscriptions");
83
+ }
84
+ const { AndoRealtimeClient } = await import("./realtime.js");
85
+ const realtimeClient = new AndoRealtimeClient({
86
+ realtimeHost: this.realtimeHost,
87
+ getMe: (signal) => this.getMe(signal),
88
+ getMemberGroupIdByMemberId: (memberId, signal) => this.getMemberGroupIdByMemberId(memberId, signal),
89
+ getMyMemberships: (params) => this.getMyMemberships(params),
90
+ createWebSocketToken: (room, signal) => this.createWebSocketToken(room, signal),
91
+ getMessageContext: (messageId, signal) => this.getMessageContext(messageId, signal),
92
+ });
93
+ return realtimeClient.subscribeMember(realtimeOptions);
94
+ },
95
+ };
96
+ }
97
+ async fetchJson(path, options = {}) {
98
+ const url = new URL(`${this.baseUrl}${path}`);
99
+ for (const [key, value] of Object.entries(options.query ?? {})) {
100
+ if (value == null || value === "") {
101
+ continue;
102
+ }
103
+ url.searchParams.set(key, String(value));
104
+ }
105
+ const response = await this.fetchImpl(url, {
106
+ method: options.method ?? "GET",
107
+ signal: options.signal,
108
+ headers: {
109
+ Authorization: this.authHeaderValue,
110
+ "Content-Type": "application/json",
111
+ },
112
+ body: options.body ? JSON.stringify(options.body) : undefined,
113
+ });
114
+ if (!response.ok) {
115
+ const body = await response.text().catch(() => "");
116
+ throw new AndoApiError(`[ando-sdk] ${options.method ?? "GET"} ${path} failed: ${response.status} ${body}`, response.status);
117
+ }
118
+ return (await response.json());
119
+ }
120
+ encodeMessageCursor(message) {
121
+ const cursor = {
122
+ created_at: toIsoString(message.created_at),
123
+ id: message.id,
124
+ };
125
+ return Buffer.from(JSON.stringify(cursor)).toString("base64");
126
+ }
127
+ async getConversationMessage(messageId, signal) {
128
+ const { data } = await this.fetchJson(`/conversation-messages/${messageId}`, { signal });
129
+ if (data == null) {
130
+ throw new Error(`[ando-sdk] /conversation-messages/${messageId} returned null`);
131
+ }
132
+ return data;
133
+ }
134
+ async getOptionalConversationMessage(messageId, signal) {
135
+ try {
136
+ return await this.getConversationMessage(messageId, signal);
137
+ }
138
+ catch (error) {
139
+ if ((error instanceof AndoApiError && error.status === 404) ||
140
+ isNullConversationMessageError(error)) {
141
+ return null;
142
+ }
143
+ throw error;
144
+ }
145
+ }
146
+ async getConversationMessages(conversationId, query, signal) {
147
+ return this.fetchJson(`/conversations/${conversationId}/messages/v3`, {
148
+ signal,
149
+ query: {
150
+ limit: query?.limit,
151
+ before: query?.before,
152
+ after: query?.after,
153
+ around: query?.around,
154
+ },
155
+ });
156
+ }
157
+ async getThreadReplies(messageId, query, signal) {
158
+ return this.fetchJson(`/conversation-messages/${messageId}/replies/v3`, {
159
+ signal,
160
+ query: {
161
+ limit: query?.limit,
162
+ before: query?.before,
163
+ after: query?.after,
164
+ around: query?.around,
165
+ },
166
+ });
167
+ }
168
+ async getMe(signal) {
169
+ const { data } = await this.fetchJson("/auth/me", {
170
+ signal,
171
+ });
172
+ if (data == null) {
173
+ throw new Error("[ando-sdk] /auth/me returned null");
174
+ }
175
+ return data;
176
+ }
177
+ async getMyMemberships(params) {
178
+ return this.fetchJson("/memberships", {
179
+ signal: params?.signal,
180
+ query: {
181
+ cursor: params?.cursor,
182
+ limit: params?.limit,
183
+ },
184
+ });
185
+ }
186
+ async getMessageContext(messageId, signal) {
187
+ const message = await this.getConversationMessage(messageId, signal);
188
+ const currentText = buildMessageText(message);
189
+ const isThreadReply = message.thread_root_id != null;
190
+ const replyThreadRootId = message.thread_root_id ?? message.id;
191
+ if (isThreadReply) {
192
+ const [threadRootMessage, threadReplyHistory] = await Promise.all([
193
+ this.getOptionalConversationMessage(replyThreadRootId, signal),
194
+ this.getThreadReplies(replyThreadRootId, {
195
+ limit: DEFAULT_THREAD_HISTORY_LIMIT,
196
+ before: this.encodeMessageCursor(message),
197
+ }, signal),
198
+ ]);
199
+ const inboundHistory = [threadRootMessage, ...threadReplyHistory.items]
200
+ .filter(isDefined)
201
+ .map((historyMessage) => buildHistoryEntry(historyMessage))
202
+ .filter(isDefined);
203
+ return {
204
+ current_text: currentText,
205
+ reply_thread_root_id: replyThreadRootId,
206
+ inbound_history: inboundHistory,
207
+ thread_starter_body: threadRootMessage
208
+ ? buildMessageText(threadRootMessage)
209
+ : null,
210
+ thread_history_body: joinBodies(threadReplyHistory.items),
211
+ };
212
+ }
213
+ const [conversationHistory, threadReplyHistory] = await Promise.all([
214
+ // Conversation pagination is fetched newest-first under the hood and then
215
+ // reversed for display, so `after` pages further back in history here.
216
+ this.getConversationMessages(message.conversation_id, {
217
+ limit: DEFAULT_HISTORY_LIMIT,
218
+ after: this.encodeMessageCursor(message),
219
+ }, signal),
220
+ message.replies_count > 0
221
+ ? this.getThreadReplies(message.id, {
222
+ limit: DEFAULT_THREAD_HISTORY_LIMIT,
223
+ }, signal)
224
+ : Promise.resolve(null),
225
+ ]);
226
+ const existingThreadReplies = threadReplyHistory?.items ?? [];
227
+ const hasExistingThreadReplies = existingThreadReplies.length > 0;
228
+ return {
229
+ current_text: currentText,
230
+ reply_thread_root_id: message.id,
231
+ inbound_history: conversationHistory.items
232
+ .map((historyMessage) => buildHistoryEntry(historyMessage))
233
+ .filter(isDefined),
234
+ thread_starter_body: hasExistingThreadReplies ? currentText : null,
235
+ thread_history_body: hasExistingThreadReplies
236
+ ? joinBodies(existingThreadReplies)
237
+ : null,
238
+ };
239
+ }
240
+ async postMessage(input) {
241
+ const response = await this.fetchJson(`/conversations/${input.conversationId}/messages`, {
242
+ method: "POST",
243
+ body: {
244
+ markdown_content: input.markdownContent,
245
+ thread_root_id: input.threadRootId ?? null,
246
+ call_root_id: input.callRootId ?? null,
247
+ },
248
+ });
249
+ if (!response.success || !response.data) {
250
+ throw new Error("[ando-sdk] postMessage returned an empty response");
251
+ }
252
+ return response.data;
253
+ }
254
+ async getMemberGroupIdByMemberId(memberId, signal) {
255
+ let cursor;
256
+ do {
257
+ const response = await this.fetchJson("/member-groups", {
258
+ signal,
259
+ query: {
260
+ cursor,
261
+ limit: 200,
262
+ },
263
+ });
264
+ const match = response.items.find((memberGroup) => memberGroup.preview_member_ids.includes(memberId));
265
+ if (match) {
266
+ return match.id;
267
+ }
268
+ cursor = response.pageInfo.hasNextPage
269
+ ? response.pageInfo.nextCursor
270
+ : undefined;
271
+ } while (cursor);
272
+ return null;
273
+ }
274
+ async createWebSocketToken(room, signal) {
275
+ return this.fetchJson("/tokens/ws", {
276
+ method: "POST",
277
+ signal,
278
+ body: {
279
+ room,
280
+ },
281
+ });
282
+ }
283
+ }
284
+ exports.AndoClient = AndoClient;
285
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}