@omg-dev/client 0.1.308

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Benny Kok
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,111 @@
1
+ import type { OmgMessagesResponse, OmgSendResponse, OmgSession, OmgTranscriptEvent } from "@omg-dev/protocol";
2
+ export type { OmgAiStreamPart, OmgLiveChannel, OmgLiveMessage, OmgMessage, OmgQueueMessage, OmgSession, OmgSessionPrompt, OmgStatusRow, OmgTranscriptEvent, } from "@omg-dev/protocol";
3
+ export interface OmgSocket {
4
+ binaryType: BinaryType;
5
+ readonly readyState: number;
6
+ send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;
7
+ close(code?: number, reason?: string): void;
8
+ addEventListener(type: "open", listener: () => void): void;
9
+ addEventListener(type: "message", listener: (event: {
10
+ data: unknown;
11
+ }) => void): void;
12
+ addEventListener(type: "close", listener: (event: {
13
+ code?: number;
14
+ reason?: string;
15
+ }) => void): void;
16
+ addEventListener(type: "error", listener: () => void): void;
17
+ }
18
+ export interface OmgUploadProgress {
19
+ loaded: number;
20
+ total: number;
21
+ lengthComputable: boolean;
22
+ }
23
+ export interface OmgTransport {
24
+ /**
25
+ * Authenticated raw HTTP access for application surfaces that consume
26
+ * streams, blobs, or response headers. Small data clients can stay on
27
+ * `request`, which parses JSON and normalizes errors.
28
+ */
29
+ fetch(path: string, init?: RequestInit): Promise<Response>;
30
+ /**
31
+ * Authenticated upload access with byte-level progress when the transport
32
+ * can provide it. Older/custom transports may omit this; callers should
33
+ * fall back to `fetch`.
34
+ */
35
+ upload?(path: string, init: RequestInit, onProgress: (progress: OmgUploadProgress) => void): Promise<Response>;
36
+ request<T>(path: string, init?: RequestInit): Promise<T>;
37
+ /**
38
+ * Authenticated WebSocket access for application surfaces such as live
39
+ * transcripts and terminals. Hosts own this boundary just like HTTP: an
40
+ * embedded surface must never infer a socket origin from `location`.
41
+ */
42
+ openSocket(path: string): Promise<OmgSocket>;
43
+ openLiveSocket(): Promise<OmgSocket>;
44
+ }
45
+ export interface OmgGrant {
46
+ token: string;
47
+ expiresAt: number;
48
+ }
49
+ export interface CreateGrantTransportOptions {
50
+ baseUrl: string;
51
+ getGrant: (input: {
52
+ forceRefresh: boolean;
53
+ }) => Promise<OmgGrant>;
54
+ fetch?: typeof globalThis.fetch;
55
+ WebSocket?: typeof globalThis.WebSocket;
56
+ XMLHttpRequest?: typeof globalThis.XMLHttpRequest;
57
+ }
58
+ export declare function createSameOriginTransport(input?: {
59
+ fetch?: typeof globalThis.fetch;
60
+ WebSocket?: typeof globalThis.WebSocket;
61
+ XMLHttpRequest?: typeof globalThis.XMLHttpRequest;
62
+ }): OmgTransport;
63
+ export declare function createGrantTransport(options: CreateGrantTransportOptions): OmgTransport;
64
+ export type OmgConnectionStatus = "connecting" | "live" | "reconnecting" | "offline";
65
+ export interface OmgConnectionState {
66
+ status: OmgConnectionStatus;
67
+ attempt: number;
68
+ }
69
+ type TranscriptListener = (event: OmgTranscriptEvent) => void;
70
+ type ConnectionListener = (state: OmgConnectionState) => void;
71
+ export declare class OmgLiveConnection {
72
+ private readonly transport;
73
+ private socket;
74
+ private disposed;
75
+ private connecting;
76
+ private reconnectTimer;
77
+ private reconnectAttempt;
78
+ private listeners;
79
+ private cursors;
80
+ private sentChannels;
81
+ private pendingFlush;
82
+ private connectionListeners;
83
+ private connectionState;
84
+ constructor(transport: OmgTransport);
85
+ get state(): OmgConnectionState;
86
+ subscribeConnection(listener: ConnectionListener): () => void;
87
+ subscribeTranscript(sessionId: string, listener: TranscriptListener): () => void;
88
+ reconnectNow(): void;
89
+ dispose(): void;
90
+ private publishConnection;
91
+ private ensureConnected;
92
+ private scheduleReconnect;
93
+ private closeSocket;
94
+ private scheduleSubscriptionFlush;
95
+ private send;
96
+ private emit;
97
+ private handleMessage;
98
+ }
99
+ export declare class OmgClient {
100
+ readonly transport: OmgTransport;
101
+ readonly live: OmgLiveConnection;
102
+ private sessions;
103
+ constructor(transport: OmgTransport);
104
+ peekSessions(): OmgSession[] | null;
105
+ listSessions(): Promise<OmgSession[]>;
106
+ getMessages(sessionId: string, limit?: number): Promise<OmgMessagesResponse>;
107
+ sendMessage(sessionId: string, text: string): Promise<OmgSendResponse>;
108
+ interrupt(sessionId: string): Promise<void>;
109
+ dispose(): void;
110
+ }
111
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,501 @@
1
+ const SOCKET_OPEN = 1;
2
+ const GRANT_REFRESH_SKEW_MS = 30_000;
3
+ /**
4
+ * Read the body ONCE, then decide whether it was JSON. `response.json()` on a
5
+ * non-JSON error consumed the body and left us with nothing to report, which is
6
+ * how an intermediary's plain-text failure reached the UI as a bare number.
7
+ */
8
+ async function readBody(response) {
9
+ const text = await response.text().catch(() => "");
10
+ if (!text)
11
+ return { data: {}, text: "" };
12
+ try {
13
+ return { data: JSON.parse(text), text };
14
+ }
15
+ catch {
16
+ return { data: {}, text };
17
+ }
18
+ }
19
+ function apiError(response, method, path, data, text) {
20
+ // lfg's own routes answer with { error }, and that copy is written for the
21
+ // person reading it — pass it through untouched.
22
+ if (data && typeof data === "object" && "error" in data && typeof data.error === "string") {
23
+ return new Error(data.error);
24
+ }
25
+ // Anything else failed somewhere between here and lfg — a proxy, an edge, a
26
+ // tunnel. `${status} ${statusText}` used to be the whole message, and HTTP/2
27
+ // never sends statusText, so it rendered as a naked "405" with no way to tell
28
+ // which request produced it. Name the request and quote whatever body came
29
+ // back so the next one identifies itself.
30
+ const detail = [response.statusText.trim(), text.trim().replace(/\s+/g, " ").slice(0, 200)]
31
+ .filter(Boolean)
32
+ .join(": ");
33
+ return new Error(`${method} ${path} failed (${response.status}${detail ? ` ${detail}` : ""})`);
34
+ }
35
+ function requestMethod(init) {
36
+ return (init?.method ?? "GET").toUpperCase();
37
+ }
38
+ function normalizeBaseUrl(baseUrl) {
39
+ return baseUrl.replace(/\/+$/, "");
40
+ }
41
+ function normalizedPath(path) {
42
+ return path.startsWith("/") ? path : `/${path}`;
43
+ }
44
+ function socketUrl(baseUrl, path) {
45
+ const url = new URL(`${normalizeBaseUrl(baseUrl)}${normalizedPath(path)}`);
46
+ url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
47
+ return url.toString();
48
+ }
49
+ function responseHeaders(raw) {
50
+ const headers = new Headers();
51
+ for (const line of raw.trim().split(/[\r\n]+/)) {
52
+ const separator = line.indexOf(":");
53
+ if (separator <= 0)
54
+ continue;
55
+ headers.append(line.slice(0, separator).trim(), line.slice(separator + 1).trim());
56
+ }
57
+ return headers;
58
+ }
59
+ function uploadWithXhr(XMLHttpRequestImpl, url, init, onProgress) {
60
+ return new Promise((resolve, reject) => {
61
+ const request = new XMLHttpRequestImpl();
62
+ const signal = init.signal;
63
+ let settled = false;
64
+ const finish = (callback) => {
65
+ if (settled)
66
+ return;
67
+ settled = true;
68
+ signal?.removeEventListener("abort", abort);
69
+ callback();
70
+ };
71
+ const abort = () => request.abort();
72
+ request.open(requestMethod(init), url, true);
73
+ for (const [name, value] of new Headers(init.headers)) {
74
+ request.setRequestHeader(name, value);
75
+ }
76
+ request.upload.addEventListener("progress", (event) => {
77
+ onProgress({
78
+ loaded: event.loaded,
79
+ total: event.total,
80
+ lengthComputable: event.lengthComputable,
81
+ });
82
+ });
83
+ request.addEventListener("load", () => {
84
+ finish(() => {
85
+ resolve(new Response(request.responseText, {
86
+ status: request.status,
87
+ statusText: request.statusText,
88
+ headers: responseHeaders(request.getAllResponseHeaders()),
89
+ }));
90
+ });
91
+ });
92
+ request.addEventListener("error", () => {
93
+ finish(() => reject(new Error("Upload failed due to a network error")));
94
+ });
95
+ request.addEventListener("abort", () => {
96
+ finish(() => reject(new DOMException("Upload cancelled", "AbortError")));
97
+ });
98
+ if (signal?.aborted) {
99
+ finish(() => reject(new DOMException("Upload cancelled", "AbortError")));
100
+ return;
101
+ }
102
+ signal?.addEventListener("abort", abort, { once: true });
103
+ request.send(init.body);
104
+ });
105
+ }
106
+ export function createSameOriginTransport(input = {}) {
107
+ const fetchImpl = input.fetch ?? globalThis.fetch;
108
+ const WebSocketImpl = input.WebSocket ?? globalThis.WebSocket;
109
+ const XMLHttpRequestImpl = input.XMLHttpRequest ?? globalThis.XMLHttpRequest;
110
+ const openSocket = async (path) => {
111
+ const protocol = globalThis.location?.protocol === "https:" ? "wss:" : "ws:";
112
+ return new WebSocketImpl(`${protocol}//${globalThis.location.host}${normalizedPath(path)}`);
113
+ };
114
+ return {
115
+ fetch(path, init) {
116
+ return fetchImpl(path, init);
117
+ },
118
+ ...(XMLHttpRequestImpl
119
+ ? {
120
+ upload(path, init, onProgress) {
121
+ return uploadWithXhr(XMLHttpRequestImpl, path, init, onProgress);
122
+ },
123
+ }
124
+ : {}),
125
+ async request(path, init) {
126
+ const response = await fetchImpl(path, init);
127
+ const { data, text } = await readBody(response);
128
+ if (!response.ok)
129
+ throw apiError(response, requestMethod(init), path, data, text);
130
+ return data;
131
+ },
132
+ openSocket,
133
+ openLiveSocket: () => openSocket("/api/live/ws"),
134
+ };
135
+ }
136
+ export function createGrantTransport(options) {
137
+ const fetchImpl = options.fetch ?? globalThis.fetch;
138
+ const WebSocketImpl = options.WebSocket ?? globalThis.WebSocket;
139
+ const XMLHttpRequestImpl = options.XMLHttpRequest ?? globalThis.XMLHttpRequest;
140
+ const baseUrl = normalizeBaseUrl(options.baseUrl);
141
+ let cached = null;
142
+ const grant = async (forceRefresh = false) => {
143
+ if (!forceRefresh &&
144
+ cached &&
145
+ cached.expiresAt - Date.now() > GRANT_REFRESH_SKEW_MS) {
146
+ return cached;
147
+ }
148
+ cached = await options.getGrant({ forceRefresh });
149
+ return cached;
150
+ };
151
+ const authenticatedFetch = async (path, init = {}) => {
152
+ const execute = async (forceRefresh) => {
153
+ const current = await grant(forceRefresh);
154
+ const headers = new Headers(init.headers);
155
+ headers.set("Authorization", `Bearer ${current.token}`);
156
+ return fetchImpl(`${baseUrl}${path}`, {
157
+ ...init,
158
+ headers,
159
+ mode: "cors",
160
+ credentials: "omit",
161
+ });
162
+ };
163
+ let response = await execute(false);
164
+ if (response.status === 401)
165
+ response = await execute(true);
166
+ return response;
167
+ };
168
+ const authenticatedUpload = XMLHttpRequestImpl
169
+ ? async (path, init, onProgress) => {
170
+ const execute = async (forceRefresh) => {
171
+ const current = await grant(forceRefresh);
172
+ const headers = new Headers(init.headers);
173
+ headers.set("Authorization", `Bearer ${current.token}`);
174
+ return uploadWithXhr(XMLHttpRequestImpl, `${baseUrl}${path}`, { ...init, headers }, onProgress);
175
+ };
176
+ let response = await execute(false);
177
+ if (response.status === 401)
178
+ response = await execute(true);
179
+ return response;
180
+ }
181
+ : null;
182
+ const openSocket = async (path) => {
183
+ const current = await grant(false);
184
+ return new WebSocketImpl(socketUrl(baseUrl, path), [`lfg-bearer.${current.token}`]);
185
+ };
186
+ return {
187
+ fetch: authenticatedFetch,
188
+ ...(authenticatedUpload ? { upload: authenticatedUpload } : {}),
189
+ async request(path, init = {}) {
190
+ const response = await authenticatedFetch(path, init);
191
+ const { data, text } = await readBody(response);
192
+ if (!response.ok)
193
+ throw apiError(response, requestMethod(init), path, data, text);
194
+ return data;
195
+ },
196
+ openSocket,
197
+ openLiveSocket: () => openSocket("/api/live/ws"),
198
+ };
199
+ }
200
+ function channelId(channel) {
201
+ return `${channel.kind}:${channel.key}`;
202
+ }
203
+ export class OmgLiveConnection {
204
+ transport;
205
+ socket = null;
206
+ disposed = false;
207
+ connecting = false;
208
+ reconnectTimer = null;
209
+ reconnectAttempt = 0;
210
+ listeners = new Map();
211
+ cursors = new Map();
212
+ sentChannels = new Set();
213
+ pendingFlush = false;
214
+ connectionListeners = new Set();
215
+ connectionState = {
216
+ status: "connecting",
217
+ attempt: 0,
218
+ };
219
+ constructor(transport) {
220
+ this.transport = transport;
221
+ }
222
+ get state() {
223
+ return this.connectionState;
224
+ }
225
+ subscribeConnection(listener) {
226
+ this.connectionListeners.add(listener);
227
+ listener(this.connectionState);
228
+ return () => this.connectionListeners.delete(listener);
229
+ }
230
+ subscribeTranscript(sessionId, listener) {
231
+ const listeners = this.listeners.get(sessionId) ?? new Set();
232
+ listeners.add(listener);
233
+ this.listeners.set(sessionId, listeners);
234
+ this.ensureConnected();
235
+ this.scheduleSubscriptionFlush();
236
+ return () => {
237
+ const current = this.listeners.get(sessionId);
238
+ if (!current)
239
+ return;
240
+ current.delete(listener);
241
+ if (current.size)
242
+ return;
243
+ this.listeners.delete(sessionId);
244
+ this.cursors.delete(channelId({ kind: "transcript", key: sessionId }));
245
+ if (this.sentChannels.delete(sessionId)) {
246
+ this.send({
247
+ t: "unsubscribe",
248
+ channels: [{ kind: "transcript", key: sessionId }],
249
+ });
250
+ }
251
+ if (!this.listeners.size)
252
+ this.closeSocket();
253
+ };
254
+ }
255
+ reconnectNow() {
256
+ if (this.reconnectTimer)
257
+ clearTimeout(this.reconnectTimer);
258
+ this.reconnectTimer = null;
259
+ this.reconnectAttempt = 0;
260
+ this.closeSocket(false);
261
+ this.ensureConnected();
262
+ }
263
+ dispose() {
264
+ this.disposed = true;
265
+ this.listeners.clear();
266
+ this.connectionListeners.clear();
267
+ if (this.reconnectTimer)
268
+ clearTimeout(this.reconnectTimer);
269
+ this.reconnectTimer = null;
270
+ this.closeSocket();
271
+ }
272
+ publishConnection(state) {
273
+ this.connectionState = state;
274
+ for (const listener of this.connectionListeners)
275
+ listener(state);
276
+ }
277
+ ensureConnected() {
278
+ if (this.disposed ||
279
+ this.connecting ||
280
+ !this.listeners.size ||
281
+ (this.socket && (this.socket.readyState === 0 || this.socket.readyState === SOCKET_OPEN))) {
282
+ return;
283
+ }
284
+ this.connecting = true;
285
+ this.publishConnection({
286
+ status: this.reconnectAttempt ? "reconnecting" : "connecting",
287
+ attempt: this.reconnectAttempt,
288
+ });
289
+ void this.transport.openLiveSocket().then((socket) => {
290
+ if (this.disposed || !this.listeners.size) {
291
+ socket.close();
292
+ this.connecting = false;
293
+ return;
294
+ }
295
+ this.socket = socket;
296
+ this.connecting = false;
297
+ socket.addEventListener("open", () => {
298
+ if (this.socket !== socket)
299
+ return;
300
+ this.reconnectAttempt = 0;
301
+ this.sentChannels.clear();
302
+ this.publishConnection({ status: "live", attempt: 0 });
303
+ this.scheduleSubscriptionFlush();
304
+ });
305
+ socket.addEventListener("message", (event) => {
306
+ if (this.socket !== socket || typeof event.data !== "string")
307
+ return;
308
+ try {
309
+ this.handleMessage(JSON.parse(event.data));
310
+ }
311
+ catch {
312
+ // A malformed frame is isolated to that frame.
313
+ }
314
+ });
315
+ socket.addEventListener("close", () => {
316
+ if (this.socket !== socket)
317
+ return;
318
+ this.socket = null;
319
+ this.sentChannels.clear();
320
+ this.scheduleReconnect();
321
+ });
322
+ socket.addEventListener("error", () => {
323
+ if (this.socket === socket)
324
+ socket.close();
325
+ });
326
+ }, () => {
327
+ this.connecting = false;
328
+ this.scheduleReconnect();
329
+ });
330
+ }
331
+ scheduleReconnect() {
332
+ if (this.disposed || !this.listeners.size || this.reconnectTimer)
333
+ return;
334
+ this.reconnectAttempt += 1;
335
+ this.publishConnection({
336
+ status: this.reconnectAttempt >= 5 ? "offline" : "reconnecting",
337
+ attempt: this.reconnectAttempt,
338
+ });
339
+ const delay = Math.min(8_000, 250 * 2 ** Math.min(5, this.reconnectAttempt - 1));
340
+ this.reconnectTimer = setTimeout(() => {
341
+ this.reconnectTimer = null;
342
+ this.ensureConnected();
343
+ }, delay);
344
+ }
345
+ closeSocket(markDisposed = true) {
346
+ const socket = this.socket;
347
+ this.socket = null;
348
+ this.sentChannels.clear();
349
+ if (socket)
350
+ socket.close(markDisposed ? 1000 : 4000, "client transition");
351
+ }
352
+ scheduleSubscriptionFlush() {
353
+ if (this.pendingFlush)
354
+ return;
355
+ this.pendingFlush = true;
356
+ queueMicrotask(() => {
357
+ this.pendingFlush = false;
358
+ if (!this.socket || this.socket.readyState !== SOCKET_OPEN)
359
+ return;
360
+ const channels = [];
361
+ for (const sessionId of this.listeners.keys()) {
362
+ if (this.sentChannels.has(sessionId))
363
+ continue;
364
+ const channel = { kind: "transcript", key: sessionId };
365
+ const cursor = this.cursors.get(channelId(channel));
366
+ if (cursor)
367
+ channel.resumeFromSeq = cursor;
368
+ channels.push(channel);
369
+ this.sentChannels.add(sessionId);
370
+ }
371
+ if (channels.length)
372
+ this.send({ t: "subscribe", channels });
373
+ });
374
+ }
375
+ send(payload) {
376
+ if (!this.socket || this.socket.readyState !== SOCKET_OPEN)
377
+ return false;
378
+ this.socket.send(JSON.stringify(payload));
379
+ return true;
380
+ }
381
+ emit(sessionId, event) {
382
+ const listeners = this.listeners.get(sessionId);
383
+ if (!listeners)
384
+ return;
385
+ for (const listener of listeners)
386
+ listener(event);
387
+ }
388
+ handleMessage(message) {
389
+ if (message.t === "ping") {
390
+ this.send({ t: "pong", ...(message.id ? { id: message.id } : {}) });
391
+ return;
392
+ }
393
+ if ("kind" in message &&
394
+ message.kind === "transcript" &&
395
+ "key" in message &&
396
+ typeof message.key === "string") {
397
+ const id = channelId({ kind: message.kind, key: message.key });
398
+ if (typeof message.seq === "number") {
399
+ const previous = this.cursors.get(id) ?? 0;
400
+ const resync = message.t === "snapshot" ||
401
+ message.t === "gap" ||
402
+ message.t === "resumed";
403
+ if (!resync && message.seq <= previous)
404
+ return;
405
+ this.cursors.set(id, message.seq);
406
+ }
407
+ if (message.t === "snapshot") {
408
+ this.emit(message.key, {
409
+ type: "snapshot",
410
+ messages: message.messages ?? [],
411
+ nextBefore: message.nextBefore ?? null,
412
+ });
413
+ return;
414
+ }
415
+ if (message.t === "delta" && message.delta?.t) {
416
+ this.handleMessage({
417
+ ...message.delta,
418
+ t: message.delta.t,
419
+ sid: message.delta.sid ?? message.key,
420
+ });
421
+ return;
422
+ }
423
+ if (message.t === "error") {
424
+ this.emit(message.key, {
425
+ type: "error",
426
+ error: message.message ?? message.code ?? "Live connection error",
427
+ });
428
+ }
429
+ return;
430
+ }
431
+ const sessionId = "sid" in message ? message.sid : undefined;
432
+ if (!sessionId)
433
+ return;
434
+ if (message.t === "batch") {
435
+ this.emit(sessionId, {
436
+ type: "snapshot",
437
+ messages: message.messages ?? [],
438
+ nextBefore: message.nextBefore ?? null,
439
+ });
440
+ }
441
+ else if (message.t === "msg") {
442
+ const item = message.message ?? message.m;
443
+ if (item)
444
+ this.emit(sessionId, { type: "message", message: item });
445
+ }
446
+ else if (message.t === "ai_part" && message.part) {
447
+ this.emit(sessionId, { type: "ai_part", part: message.part });
448
+ }
449
+ else if (message.t === "busy") {
450
+ this.emit(sessionId, { type: "busy", busy: !!message.busy });
451
+ }
452
+ else if (message.t === "prompt") {
453
+ this.emit(sessionId, {
454
+ type: "prompt",
455
+ prompt: message.prompt ?? null,
456
+ });
457
+ }
458
+ else if (message.t === "error") {
459
+ this.emit(sessionId, {
460
+ type: "error",
461
+ error: message.message ?? message.code ?? "Live connection error",
462
+ });
463
+ }
464
+ }
465
+ }
466
+ export class OmgClient {
467
+ transport;
468
+ live;
469
+ sessions = null;
470
+ constructor(transport) {
471
+ this.transport = transport;
472
+ this.live = new OmgLiveConnection(transport);
473
+ }
474
+ peekSessions() {
475
+ return this.sessions;
476
+ }
477
+ async listSessions() {
478
+ const response = await this.transport.request("/api/sessions", {
479
+ cache: "no-store",
480
+ });
481
+ this.sessions = Array.isArray(response.sessions) ? response.sessions : [];
482
+ return this.sessions;
483
+ }
484
+ async getMessages(sessionId, limit = 80) {
485
+ return this.transport.request(`/api/sessions/${encodeURIComponent(sessionId)}/messages?limit=${limit}`, { cache: "no-store" });
486
+ }
487
+ async sendMessage(sessionId, text) {
488
+ return this.transport.request(`/api/sessions/${encodeURIComponent(sessionId)}/send`, {
489
+ method: "POST",
490
+ headers: { "Content-Type": "application/json" },
491
+ body: JSON.stringify({ text }),
492
+ });
493
+ }
494
+ async interrupt(sessionId) {
495
+ await this.transport.request(`/api/sessions/${encodeURIComponent(sessionId)}/interrupt`, { method: "POST" });
496
+ }
497
+ dispose() {
498
+ this.live.dispose();
499
+ }
500
+ }
501
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgFA,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC;;;;GAIG;AACH,KAAK,UAAU,QAAQ,CAAC,QAAkB;IACxC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,EAAE,IAAI,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,QAAkB,EAClB,MAAc,EACd,IAAY,EACZ,IAAa,EACb,IAAY;IAEZ,2EAA2E;IAC3E,iDAAiD;IACjD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1F,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,4EAA4E;IAC5E,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,0CAA0C;IAC1C,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACxF,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,IAAI,KAAK,CACd,GAAG,MAAM,IAAI,IAAI,YAAY,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAC7E,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAA6B;IAClD,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,IAAY;IAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1D,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,IAAI,CAAC;YAAE,SAAS;QAC7B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CACpB,kBAAoD,EACpD,GAAW,EACX,IAAiB,EACjB,UAAiD;IAEjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,MAAM,GAAG,CAAC,QAAoB,EAAE,EAAE;YACtC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5C,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAEpC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;YACpD,UAAU,CAAC;gBACT,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;aACzC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,GAAG,EAAE;gBACV,OAAO,CACL,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE;oBACjC,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;iBAC1D,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAA4D,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAK,GAID,EAAE;IAEN,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAClD,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC;IAC9D,MAAM,kBAAkB,GAAG,KAAK,CAAC,cAAc,IAAI,UAAU,CAAC,cAAc,CAAC;IAC7E,MAAM,UAAU,GAAG,KAAK,EAAE,IAAY,EAAsB,EAAE;QAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7E,OAAO,IAAI,aAAa,CACtB,GAAG,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CACrD,CAAC;IACjB,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,IAAY,EAAE,IAAkB;YACpC,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,GAAG,CAAC,kBAAkB;YACpB,CAAC,CAAC;gBACE,MAAM,CACJ,IAAY,EACZ,IAAiB,EACjB,UAAiD;oBAEjD,OAAO,aAAa,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gBACnE,CAAC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,IAAkB;YAC/C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClF,OAAO,IAAS,CAAC;QACnB,CAAC;QACD,UAAU;QACV,cAAc,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IACpD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC;IAChE,MAAM,kBAAkB,GAAG,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC,cAAc,CAAC;IAC/E,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,MAAM,GAAoB,IAAI,CAAC;IAEnC,MAAM,KAAK,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,EAAE;QAC3C,IACE,CAAC,YAAY;YACb,MAAM;YACN,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,qBAAqB,EACrD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,EAC9B,IAAY,EACZ,IAAI,GAAgB,EAAE,EACH,EAAE;QACrB,MAAM,OAAO,GAAG,KAAK,EAAE,YAAqB,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACxD,OAAO,SAAS,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;gBACpC,GAAG,IAAI;gBACP,OAAO;gBACP,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,MAAM;aACpB,CAAC,CAAC;QACL,CAAC,CAAC;QACF,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,kBAAkB;QAC5C,CAAC,CAAC,KAAK,EACH,IAAY,EACZ,IAAiB,EACjB,UAAiD,EAC9B,EAAE;YACrB,MAAM,OAAO,GAAG,KAAK,EAAE,YAAqB,EAAE,EAAE;gBAC9C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;gBACxD,OAAO,aAAa,CAClB,kBAAkB,EAClB,GAAG,OAAO,GAAG,IAAI,EAAE,EACnB,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,EACpB,UAAU,CACX,CAAC;YACJ,CAAC,CAAC;YACF,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5D,OAAO,QAAQ,CAAC;QAClB,CAAC;QACH,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,UAAU,GAAG,KAAK,EAAE,IAAY,EAAsB,EAAE;QAC5D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,IAAI,aAAa,CACtB,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EACxB,CAAC,cAAc,OAAO,CAAC,KAAK,EAAE,CAAC,CACnB,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,kBAAkB;QACzB,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,IAAI,GAAgB,EAAE;YACnD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClF,OAAO,IAAS,CAAC;QACnB,CAAC;QACD,UAAU;QACV,cAAc,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;KACjD,CAAC;AACJ,CAAC;AAgBD,SAAS,SAAS,CAAC,OAAuB;IACxC,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,OAAO,iBAAiB;IAgBC,SAAS;IAf9B,MAAM,GAAqB,IAAI,CAAC;IAChC,QAAQ,GAAG,KAAK,CAAC;IACjB,UAAU,GAAG,KAAK,CAAC;IACnB,cAAc,GAAyC,IAAI,CAAC;IAC5D,gBAAgB,GAAG,CAAC,CAAC;IACrB,SAAS,GAAG,IAAI,GAAG,EAAmC,CAAC;IACvD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,YAAY,GAAG,KAAK,CAAC;IACrB,mBAAmB,GAAG,IAAI,GAAG,EAAsB,CAAC;IACpD,eAAe,GAAuB;QAC5C,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,CAAC;KACX,CAAC;IAEF,YAA6B,SAAuB;yBAAvB,SAAS;IAAiB,CAAC;IAExD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,mBAAmB,CAAC,QAA4B;QAC9C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,mBAAmB,CAAC,SAAiB,EAAE,QAA4B;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,EAAsB,CAAC;QACjF,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,OAAO,GAAG,EAAE;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzB,IAAI,OAAO,CAAC,IAAI;gBAAE,OAAO;YACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC;oBACR,CAAC,EAAE,aAAa;oBAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;iBACnD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;gBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,cAAc;YAAE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,cAAc;YAAE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,iBAAiB,CAAC,KAAyB;QACjD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAEO,eAAe;QACrB,IACE,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,UAAU;YACf,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YACpB,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC,EACzF,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,iBAAiB,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY;YAC7D,OAAO,EAAE,IAAI,CAAC,gBAAgB;SAC/B,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,IAAI,CACvC,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC1C,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;gBACnC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;oBAAE,OAAO;gBACnC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;gBACvD,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO;gBACrE,IAAI,CAAC;oBACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC,CAAC;gBAC/D,CAAC;gBAAC,MAAM,CAAC;oBACP,+CAA+C;gBACjD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;oBAAE,OAAO;gBACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;oBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC,EACD,GAAG,EAAE;YACH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QACzE,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,iBAAiB,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc;YAC/D,OAAO,EAAE,IAAI,CAAC,gBAAgB;SAC/B,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAEO,WAAW,CAAC,YAAY,GAAG,IAAI;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC5E,CAAC;IAEO,yBAAyB;QAC/B,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,cAAc,CAAC,GAAG,EAAE;YAClB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,WAAW;gBAAE,OAAO;YACnE,MAAM,QAAQ,GAAqB,EAAE,CAAC;YACtC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9C,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;oBAAE,SAAS;gBAC/C,MAAM,OAAO,GAAmB,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;gBACvE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBACpD,IAAI,MAAM;oBAAE,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC;gBAC3C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,IAAI,CAAC,OAAgB;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,IAAI,CAAC,SAAiB,EAAE,KAAyB;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,KAAK,MAAM,QAAQ,IAAI,SAAS;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAEO,aAAa,CAAC,OAAuB;QAC3C,IAAI,OAAO,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QACD,IACE,MAAM,IAAI,OAAO;YACjB,OAAO,CAAC,IAAI,KAAK,YAAY;YAC7B,KAAK,IAAI,OAAO;YAChB,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAC/B,CAAC;YACD,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/D,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,MAAM,GACV,OAAO,CAAC,CAAC,KAAK,UAAU;oBACxB,OAAO,CAAC,CAAC,KAAK,KAAK;oBACnB,OAAO,CAAC,CAAC,KAAK,SAAS,CAAC;gBAC1B,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,QAAQ;oBAAE,OAAO;gBAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;oBACrB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;oBAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;iBACvC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,aAAa,CAAC;oBACjB,GAAG,OAAO,CAAC,KAAK;oBAChB,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBAClB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;iBACpB,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;oBACrB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,uBAAuB;iBAClE,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,OAAO,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;gBAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;aACvC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;YAC1C,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;aAC/B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,uBAAuB;aAClE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,SAAS;IAIC,SAAS;IAHrB,IAAI,CAAoB;IACzB,QAAQ,GAAwB,IAAI,CAAC;IAE7C,YAAqB,SAAuB;yBAAvB,SAAS;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAsB,eAAe,EAAE;YAClF,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,KAAK,GAAG,EAAE;QAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAC3B,iBAAiB,kBAAkB,CAAC,SAAS,CAAC,mBAAmB,KAAK,EAAE,EACxE,EAAE,KAAK,EAAE,UAAU,EAAE,CACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,IAAY;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAC3B,iBAAiB,kBAAkB,CAAC,SAAS,CAAC,OAAO,EACrD;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;SAC/B,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAC1B,iBAAiB,kBAAkB,CAAC,SAAS,CAAC,YAAY,EAC1D,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@omg-dev/client",
3
+ "version": "0.1.308",
4
+ "description": "Transport-agnostic OMG API client and multiplexed live connection.",
5
+ "license": "MIT",
6
+ "homepage": "https://omg.dev",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/BennyKok/omg.dev.git",
10
+ "directory": "packages/client"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/BennyKok/omg.dev/issues"
14
+ },
15
+ "type": "module",
16
+ "sideEffects": false,
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ }
25
+ },
26
+ "dependencies": {
27
+ "@omg-dev/protocol": "0.1.308"
28
+ },
29
+ "publishConfig": {
30
+ "access": "public"
31
+ }
32
+ }