@telecabin/core 0.1.0 → 0.1.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.
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Client-side attachment encryption + upload, matching the server's
3
+ * `/api/s/{slug}/attachments` contract.
4
+ *
5
+ * The wire format follows `lib/crypto.ts` on the server side:
6
+ * AES-GCM-256 with a fresh 12-byte IV per attachment. The session key
7
+ * lives outside this module — it's the same `b64url` key that the web
8
+ * UI keeps in the URL fragment (`#k=`).
9
+ */
10
+ /** Hard server cap — 5 MiB per attachment. Mirrors `lib/attachments.ts`. */
11
+ export declare const MAX_ATTACHMENT_BYTES: number;
12
+ /** Server enforces this when attaching to a message. */
13
+ export declare const MAX_ATTACHMENTS_PER_MESSAGE = 4;
14
+ /** TTL after which the encrypted bytes are deleted by the cron sweep. */
15
+ export declare const ATTACHMENT_TTL_HOURS = 24;
16
+ /** Sentinel value used in the `iv` field when an attachment is uploaded
17
+ * to a non-E2EE session — the bytes are stored plaintext, no IV exists.
18
+ * Mirrors `PLAINTEXT_ATTACHMENT_IV` in `lib/attachments.ts`. */
19
+ export declare const PLAINTEXT_ATTACHMENT_IV = "plaintext";
20
+ /** Server allowlist. The plaintext MIME is declared in metadata; the
21
+ * ciphertext itself is always uploaded as `application/octet-stream`. */
22
+ export declare const ALLOWED_ATTACHMENT_MIME_TYPES: readonly ["image/png", "image/jpeg", "image/webp", "image/gif", "application/pdf", "text/plain"];
23
+ export type AttachmentMime = (typeof ALLOWED_ATTACHMENT_MIME_TYPES)[number];
24
+ export declare function isAllowedAttachmentMime(mime: string): mime is AttachmentMime;
25
+ /** AES-GCM encrypt — produces a separate IV + raw ciphertext suitable for
26
+ * multipart upload. Mirrors the server's `encryptBytes`. */
27
+ export declare function encryptAttachment(b64Key: string, plaintext: Uint8Array | ArrayBuffer): Promise<{
28
+ iv: string;
29
+ ciphertext: Uint8Array;
30
+ }>;
31
+ /** AES-GCM decrypt, mirrors the server's `decryptBytes`. */
32
+ export declare function decryptAttachment(b64Key: string, ivB64: string, ciphertext: ArrayBuffer | Uint8Array): Promise<Uint8Array>;
33
+ /** AES-GCM encrypt a UTF-8 string into the server's `v1.<iv>.<ct>` wire
34
+ * format — used for E2EE message content (matches `lib/crypto.ts:encrypt`). */
35
+ export declare function encryptText(b64Key: string, plaintext: string): Promise<string>;
36
+ //# sourceMappingURL=attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,QAAkB,CAAC;AAEpD,wDAAwD;AACxD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;gEAEgE;AAChE,eAAO,MAAM,uBAAuB,cAAc,CAAC;AAEnD;yEACyE;AACzE,eAAO,MAAM,6BAA6B,kGAOhC,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,cAAc,CAE5E;AAED;4DAC4D;AAC5D,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,GAAG,WAAW,GAClC,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC,CAoBjD;AAED,4DAA4D;AAC5D,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,WAAW,GAAG,UAAU,GACnC,OAAO,CAAC,UAAU,CAAC,CAwBrB;AAED;+EAC+E;AAC/E,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Client-side attachment encryption + upload, matching the server's
3
+ * `/api/s/{slug}/attachments` contract.
4
+ *
5
+ * The wire format follows `lib/crypto.ts` on the server side:
6
+ * AES-GCM-256 with a fresh 12-byte IV per attachment. The session key
7
+ * lives outside this module — it's the same `b64url` key that the web
8
+ * UI keeps in the URL fragment (`#k=`).
9
+ */
10
+ import { Buffer } from "node:buffer";
11
+ import { TelecabinError } from "./errors.js";
12
+ /** Hard server cap — 5 MiB per attachment. Mirrors `lib/attachments.ts`. */
13
+ export const MAX_ATTACHMENT_BYTES = 5 * 1024 * 1024;
14
+ /** Server enforces this when attaching to a message. */
15
+ export const MAX_ATTACHMENTS_PER_MESSAGE = 4;
16
+ /** TTL after which the encrypted bytes are deleted by the cron sweep. */
17
+ export const ATTACHMENT_TTL_HOURS = 24;
18
+ /** Sentinel value used in the `iv` field when an attachment is uploaded
19
+ * to a non-E2EE session — the bytes are stored plaintext, no IV exists.
20
+ * Mirrors `PLAINTEXT_ATTACHMENT_IV` in `lib/attachments.ts`. */
21
+ export const PLAINTEXT_ATTACHMENT_IV = "plaintext";
22
+ /** Server allowlist. The plaintext MIME is declared in metadata; the
23
+ * ciphertext itself is always uploaded as `application/octet-stream`. */
24
+ export const ALLOWED_ATTACHMENT_MIME_TYPES = [
25
+ "image/png",
26
+ "image/jpeg",
27
+ "image/webp",
28
+ "image/gif",
29
+ "application/pdf",
30
+ "text/plain",
31
+ ];
32
+ export function isAllowedAttachmentMime(mime) {
33
+ return ALLOWED_ATTACHMENT_MIME_TYPES.includes(mime);
34
+ }
35
+ /** AES-GCM encrypt — produces a separate IV + raw ciphertext suitable for
36
+ * multipart upload. Mirrors the server's `encryptBytes`. */
37
+ export async function encryptAttachment(b64Key, plaintext) {
38
+ const subtle = globalThis.crypto?.subtle;
39
+ if (!subtle) {
40
+ throw new TelecabinError("http_error", "Web Crypto API not available — Node 19+ is required.");
41
+ }
42
+ const rawKey = b64uDecode(b64Key);
43
+ const key = await subtle.importKey("raw", rawKey, "AES-GCM", false, ["encrypt"]);
44
+ const iv = globalThis.crypto.getRandomValues(new Uint8Array(12));
45
+ const bytes = plaintext instanceof Uint8Array ? plaintext : new Uint8Array(plaintext);
46
+ const ct = await subtle.encrypt({ name: "AES-GCM", iv }, key, bytes);
47
+ return { iv: b64uEncode(iv), ciphertext: new Uint8Array(ct) };
48
+ }
49
+ /** AES-GCM decrypt, mirrors the server's `decryptBytes`. */
50
+ export async function decryptAttachment(b64Key, ivB64, ciphertext) {
51
+ const subtle = globalThis.crypto?.subtle;
52
+ if (!subtle) {
53
+ throw new TelecabinError("http_error", "Web Crypto API not available — Node 19+ is required.");
54
+ }
55
+ const rawKey = b64uDecode(b64Key);
56
+ const key = await subtle.importKey("raw", rawKey, "AES-GCM", false, ["decrypt"]);
57
+ const iv = b64uDecode(ivB64);
58
+ const ct = ciphertext instanceof Uint8Array ? ciphertext : new Uint8Array(ciphertext);
59
+ const plain = await subtle.decrypt({ name: "AES-GCM", iv: iv }, key, ct);
60
+ return new Uint8Array(plain);
61
+ }
62
+ /** AES-GCM encrypt a UTF-8 string into the server's `v1.<iv>.<ct>` wire
63
+ * format — used for E2EE message content (matches `lib/crypto.ts:encrypt`). */
64
+ export async function encryptText(b64Key, plaintext) {
65
+ const { iv, ciphertext } = await encryptAttachment(b64Key, new TextEncoder().encode(plaintext));
66
+ return `v1.${iv}.${b64uEncode(ciphertext)}`;
67
+ }
68
+ function b64uEncode(bytes) {
69
+ return Buffer.from(bytes).toString("base64url");
70
+ }
71
+ function b64uDecode(s) {
72
+ return new Uint8Array(Buffer.from(s, "base64url"));
73
+ }
74
+ //# sourceMappingURL=attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { InvitePreview, JoinResult, PollResult, Snapshot, Status, TelecabinEvent } from "./types.js";
1
+ import type { InvitePreview, JoinResult, PollResult, PublicAttachment, Snapshot, Status, TelecabinEvent } from "./types.js";
2
2
  /** Default deployment used when no base URL is configured. */
3
3
  export declare const DEFAULT_BASE_URL = "https://telecabin.app";
4
4
  export interface ClientOptions {
@@ -24,10 +24,34 @@ export declare class TelecabinClient {
24
24
  private request;
25
25
  /** Full session snapshot: status, participants, recent messages, cursor. */
26
26
  snapshot(signal?: AbortSignal): Promise<Snapshot>;
27
- /** Events strictly after `after`. Pass the returned `cursor` to the next call. */
28
- poll(after?: number, limit?: number, signal?: AbortSignal): Promise<PollResult>;
29
- /** Post a message. The server also resets your status to `idle`. */
30
- send(content: string, signal?: AbortSignal): Promise<TelecabinEvent>;
27
+ /**
28
+ * Events strictly after `after`. Pass the returned `cursor` to the next call.
29
+ *
30
+ * `waitSec` enables server-side long-polling: when set (max 30s), the server
31
+ * holds the request open until a new event arrives in the session or the
32
+ * timeout elapses. With `waitSec` you can drive a near-zero-latency listener
33
+ * by re-issuing as soon as each call returns — no client-side sleep loop.
34
+ */
35
+ poll(after?: number, opts?: {
36
+ limit?: number;
37
+ waitSec?: number;
38
+ signal?: AbortSignal;
39
+ }): Promise<PollResult>;
40
+ /**
41
+ * Post a message. Resets your status to `idle` on success.
42
+ *
43
+ * - `attachmentIds` references attachments you uploaded via
44
+ * `uploadAttachment()`; the server validates that they belong to you
45
+ * and aren't already attached to another message.
46
+ * - `sessionKey` (when present) AES-GCM encrypts `content` to the
47
+ * `v1.<iv>.<ct>` wire format before sending — required if the session
48
+ * is end-to-end encrypted.
49
+ */
50
+ send(content: string, opts?: {
51
+ attachmentIds?: string[];
52
+ sessionKey?: string;
53
+ signal?: AbortSignal;
54
+ }): Promise<TelecabinEvent>;
31
55
  /** Broadcast your presence status. */
32
56
  setStatus(status: Status, meta?: Record<string, unknown>, signal?: AbortSignal): Promise<TelecabinEvent>;
33
57
  /**
@@ -42,6 +66,12 @@ export declare class TelecabinClient {
42
66
  /**
43
67
  * Poll until at least one matching event appears or the timeout elapses.
44
68
  * Returns matching events (empty on timeout) and the advanced cursor.
69
+ *
70
+ * Uses server-side long-polling — each call hands the server up to ~30s of
71
+ * the remaining budget, so a new event lands here with near-zero latency
72
+ * (DB poll cadence on the server, currently 500ms) instead of waiting on a
73
+ * client-side sleep tick. Set `intervalMs` to force the old short-poll
74
+ * behaviour for clients that can't tolerate held connections.
45
75
  */
46
76
  waitForEvent(after: number, opts?: {
47
77
  timeoutSec?: number;
@@ -49,6 +79,39 @@ export declare class TelecabinClient {
49
79
  filter?: (e: TelecabinEvent) => boolean;
50
80
  signal?: AbortSignal;
51
81
  }): Promise<PollResult>;
82
+ /**
83
+ * Upload an attachment.
84
+ *
85
+ * - **E2EE session** (`sessionKey` provided): the bytes are AES-GCM encrypted
86
+ * client-side; the server only ever sees ciphertext + the random IV. The
87
+ * blob is stored as `application/octet-stream`.
88
+ * - **Non-E2EE session** (no `sessionKey`): the bytes go through as-is. The
89
+ * blob is stored with the declared `mimeType` so it can render in-place.
90
+ * The `iv` field is set to the sentinel `"plaintext"`.
91
+ *
92
+ * Returns the attachment record — pass its `id` to `send({ attachmentIds: [...] })`
93
+ * to attach it to a message.
94
+ */
95
+ uploadAttachment(opts: {
96
+ plaintext: Uint8Array | ArrayBuffer;
97
+ name: string;
98
+ mimeType: string;
99
+ sessionKey?: string;
100
+ signal?: AbortSignal;
101
+ }): Promise<PublicAttachment>;
102
+ /**
103
+ * Fetch the bytes for a known attachment. Returns null if the blob is
104
+ * already gone (TTL expired).
105
+ *
106
+ * - For encrypted attachments (`attachment.encrypted === true`), the
107
+ * `sessionKey` must match the one the uploader used.
108
+ * - For plaintext attachments (non-E2EE session), `sessionKey` is ignored
109
+ * and the raw bytes are returned directly.
110
+ *
111
+ * Throws `invalid_body` if you pass an encrypted attachment without a
112
+ * `sessionKey` — there's no way to recover the plaintext.
113
+ */
114
+ fetchAttachmentBytes(attachment: PublicAttachment, sessionKey?: string, signal?: AbortSignal): Promise<Uint8Array | null>;
52
115
  /** Join a session with an invite code, minting a fresh participant token. */
53
116
  static join(opts: {
54
117
  baseUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,MAAM,EACN,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAuBD;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE7B,IAAI,EAAE,aAAa;YAOjB,OAAO;IA4BrB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIjD,kFAAkF;IAClF,IAAI,CAAC,KAAK,SAAI,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ1E,oEAAoE;IAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ1E,sCAAsC;IAChC,SAAS,CACb,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC;IAQ1B;;;OAGG;IACI,MAAM,CACX,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GACvE,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC;IAoBvC;;;OAGG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;QACJ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC;QACxC,MAAM,CAAC,EAAE,WAAW,CAAC;KACjB,GACL,OAAO,CAAC,UAAU,CAAC;IAetB,6EAA6E;WAChE,IAAI,CAAC,IAAI,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;KACtB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8BvB,iEAAiE;WACpD,aAAa,CAAC,IAAI,EAAE;QAC/B,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;KACtB,GAAG,OAAO,CAAC,aAAa,CAAC;CAgB3B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { decryptAttachment, encryptAttachment, encryptText, isAllowedAttachmentMime, MAX_ATTACHMENT_BYTES, MAX_ATTACHMENTS_PER_MESSAGE, PLAINTEXT_ATTACHMENT_IV, } from "./attachments.js";
1
2
  import { TelecabinError } from "./errors.js";
2
3
  /** Default deployment used when no base URL is configured. */
3
4
  export const DEFAULT_BASE_URL = "https://telecabin.app";
@@ -64,18 +65,51 @@ export class TelecabinClient {
64
65
  snapshot(signal) {
65
66
  return this.request(`/api/s/${this.slug}`, { signal });
66
67
  }
67
- /** Events strictly after `after`. Pass the returned `cursor` to the next call. */
68
- poll(after = 0, limit, signal) {
68
+ /**
69
+ * Events strictly after `after`. Pass the returned `cursor` to the next call.
70
+ *
71
+ * `waitSec` enables server-side long-polling: when set (max 30s), the server
72
+ * holds the request open until a new event arrives in the session or the
73
+ * timeout elapses. With `waitSec` you can drive a near-zero-latency listener
74
+ * by re-issuing as soon as each call returns — no client-side sleep loop.
75
+ */
76
+ poll(after = 0, opts = {}) {
69
77
  const qs = new URLSearchParams({ after: String(after) });
70
- if (limit)
71
- qs.set("limit", String(limit));
78
+ if (opts.limit)
79
+ qs.set("limit", String(opts.limit));
80
+ if (opts.waitSec && opts.waitSec > 0) {
81
+ qs.set("wait", String(Math.floor(opts.waitSec)));
82
+ }
72
83
  return this.request(`/api/s/${this.slug}/events?${qs}`, {
73
- signal,
84
+ signal: opts.signal,
74
85
  });
75
86
  }
76
- /** Post a message. The server also resets your status to `idle`. */
77
- async send(content, signal) {
78
- const r = await this.request(`/api/s/${this.slug}/messages`, { method: "POST", body: { content }, signal });
87
+ /**
88
+ * Post a message. Resets your status to `idle` on success.
89
+ *
90
+ * - `attachmentIds` references attachments you uploaded via
91
+ * `uploadAttachment()`; the server validates that they belong to you
92
+ * and aren't already attached to another message.
93
+ * - `sessionKey` (when present) AES-GCM encrypts `content` to the
94
+ * `v1.<iv>.<ct>` wire format before sending — required if the session
95
+ * is end-to-end encrypted.
96
+ */
97
+ async send(content, opts = {}) {
98
+ if (opts.attachmentIds && opts.attachmentIds.length > MAX_ATTACHMENTS_PER_MESSAGE) {
99
+ throw new TelecabinError("invalid_body", `Too many attachments: ${opts.attachmentIds.length} > ${MAX_ATTACHMENTS_PER_MESSAGE} max per message.`);
100
+ }
101
+ // Encrypt non-empty content with the session key; pass empty content
102
+ // through as "" so attachment-only posts don't carry a dummy ciphertext.
103
+ const wireContent = opts.sessionKey && content
104
+ ? await encryptText(opts.sessionKey, content)
105
+ : content;
106
+ const payload = {
107
+ content: wireContent,
108
+ };
109
+ if (opts.attachmentIds?.length) {
110
+ payload.attachmentIds = opts.attachmentIds;
111
+ }
112
+ const r = await this.request(`/api/s/${this.slug}/messages`, { method: "POST", body: payload, signal: opts.signal });
79
113
  return r.event;
80
114
  }
81
115
  /** Broadcast your presence status. */
@@ -92,7 +126,9 @@ export class TelecabinClient {
92
126
  const interval = opts.intervalMs ?? 2000;
93
127
  try {
94
128
  while (!opts.signal?.aborted) {
95
- const { events, cursor: next } = await this.poll(cursor, undefined, opts.signal);
129
+ const { events, cursor: next } = await this.poll(cursor, {
130
+ signal: opts.signal,
131
+ });
96
132
  for (const e of events)
97
133
  yield e;
98
134
  cursor = next;
@@ -108,22 +144,128 @@ export class TelecabinClient {
108
144
  /**
109
145
  * Poll until at least one matching event appears or the timeout elapses.
110
146
  * Returns matching events (empty on timeout) and the advanced cursor.
147
+ *
148
+ * Uses server-side long-polling — each call hands the server up to ~30s of
149
+ * the remaining budget, so a new event lands here with near-zero latency
150
+ * (DB poll cadence on the server, currently 500ms) instead of waiting on a
151
+ * client-side sleep tick. Set `intervalMs` to force the old short-poll
152
+ * behaviour for clients that can't tolerate held connections.
111
153
  */
112
154
  async waitForEvent(after, opts = {}) {
113
155
  const deadline = Date.now() + (opts.timeoutSec ?? 50) * 1000;
114
- const interval = opts.intervalMs ?? 2000;
115
156
  let cursor = after;
116
157
  for (;;) {
117
- const res = await this.poll(cursor, undefined, opts.signal);
158
+ const remaining = deadline - Date.now();
159
+ if (remaining <= 0)
160
+ return { events: [], cursor };
161
+ // Server caps wait at 30s. Use most of the remaining budget per call,
162
+ // capped at 30 so we don't ask the server for more than it'll give.
163
+ const waitSec = opts.intervalMs
164
+ ? 0
165
+ : Math.min(30, Math.max(1, Math.ceil(remaining / 1000)));
166
+ const res = await this.poll(cursor, { waitSec, signal: opts.signal });
118
167
  cursor = res.cursor;
119
168
  const matched = opts.filter ? res.events.filter(opts.filter) : res.events;
120
169
  if (matched.length > 0)
121
170
  return { events: matched, cursor };
122
- const remaining = deadline - Date.now();
123
- if (remaining <= 0)
124
- return { events: [], cursor };
125
- await sleep(Math.min(interval, remaining), opts.signal);
171
+ // Server returned empty inside the budget (or short-poll mode) — if a
172
+ // gap interval was requested, honour it before the next call.
173
+ if (opts.intervalMs && Date.now() < deadline) {
174
+ await sleep(Math.min(opts.intervalMs, deadline - Date.now()), opts.signal);
175
+ }
176
+ }
177
+ }
178
+ /**
179
+ * Upload an attachment.
180
+ *
181
+ * - **E2EE session** (`sessionKey` provided): the bytes are AES-GCM encrypted
182
+ * client-side; the server only ever sees ciphertext + the random IV. The
183
+ * blob is stored as `application/octet-stream`.
184
+ * - **Non-E2EE session** (no `sessionKey`): the bytes go through as-is. The
185
+ * blob is stored with the declared `mimeType` so it can render in-place.
186
+ * The `iv` field is set to the sentinel `"plaintext"`.
187
+ *
188
+ * Returns the attachment record — pass its `id` to `send({ attachmentIds: [...] })`
189
+ * to attach it to a message.
190
+ */
191
+ async uploadAttachment(opts) {
192
+ if (!isAllowedAttachmentMime(opts.mimeType)) {
193
+ throw new TelecabinError("invalid_body", `Unsupported MIME type for attachment: ${opts.mimeType}`);
194
+ }
195
+ const plaintext = opts.plaintext instanceof Uint8Array
196
+ ? opts.plaintext
197
+ : new Uint8Array(opts.plaintext);
198
+ if (plaintext.byteLength > MAX_ATTACHMENT_BYTES) {
199
+ throw new TelecabinError("invalid_body", `Attachment too large: ${plaintext.byteLength} bytes > ${MAX_ATTACHMENT_BYTES} max.`);
200
+ }
201
+ const form = new FormData();
202
+ if (opts.sessionKey) {
203
+ const { iv, ciphertext } = await encryptAttachment(opts.sessionKey, plaintext);
204
+ form.append("file", new Blob([ciphertext], { type: "application/octet-stream" }), `${opts.name}.bin`);
205
+ form.append("iv", iv);
206
+ form.append("encrypted", "true");
207
+ }
208
+ else {
209
+ form.append("file", new Blob([plaintext], { type: opts.mimeType }), opts.name);
210
+ form.append("iv", PLAINTEXT_ATTACHMENT_IV);
211
+ form.append("encrypted", "false");
212
+ }
213
+ form.append("name", opts.name);
214
+ form.append("mimeType", opts.mimeType);
215
+ form.append("byteSize", String(plaintext.byteLength));
216
+ let res;
217
+ try {
218
+ res = await this.fetchImpl(`${this.baseUrl}/api/s/${this.slug}/attachments`, {
219
+ method: "POST",
220
+ headers: { Authorization: `Bearer ${this.token}` },
221
+ body: form,
222
+ signal: opts.signal,
223
+ });
224
+ }
225
+ catch (err) {
226
+ if (err instanceof DOMException && err.name === "AbortError")
227
+ throw err;
228
+ throw new TelecabinError("network_error", `Cannot reach ${this.baseUrl}: ${err.message}`);
229
+ }
230
+ if (!res.ok)
231
+ throw await TelecabinError.fromResponse(res);
232
+ const body = (await res.json());
233
+ return body.attachment;
234
+ }
235
+ /**
236
+ * Fetch the bytes for a known attachment. Returns null if the blob is
237
+ * already gone (TTL expired).
238
+ *
239
+ * - For encrypted attachments (`attachment.encrypted === true`), the
240
+ * `sessionKey` must match the one the uploader used.
241
+ * - For plaintext attachments (non-E2EE session), `sessionKey` is ignored
242
+ * and the raw bytes are returned directly.
243
+ *
244
+ * Throws `invalid_body` if you pass an encrypted attachment without a
245
+ * `sessionKey` — there's no way to recover the plaintext.
246
+ */
247
+ async fetchAttachmentBytes(attachment, sessionKey, signal) {
248
+ if (attachment.encrypted && !sessionKey) {
249
+ throw new TelecabinError("invalid_body", "Attachment is encrypted but no sessionKey was provided.");
250
+ }
251
+ let res;
252
+ try {
253
+ res = await this.fetchImpl(attachment.url, { signal });
254
+ }
255
+ catch (err) {
256
+ if (err instanceof DOMException && err.name === "AbortError")
257
+ throw err;
258
+ throw new TelecabinError("network_error", `Cannot reach blob: ${err.message}`);
259
+ }
260
+ if (res.status === 404 || res.status === 410)
261
+ return null;
262
+ if (!res.ok) {
263
+ throw new TelecabinError("http_error", `Failed to fetch attachment bytes (HTTP ${res.status}).`, res.status);
126
264
  }
265
+ const bytes = new Uint8Array(await res.arrayBuffer());
266
+ if (!attachment.encrypted)
267
+ return bytes;
268
+ return decryptAttachment(sessionKey, attachment.iv, bytes);
127
269
  }
128
270
  /** Join a session with an invite code, minting a fresh participant token. */
129
271
  static async join(opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -5,6 +5,11 @@ export interface Connection {
5
5
  token: string;
6
6
  sessionName?: string;
7
7
  participantName?: string;
8
+ /** Optional base64url AES-GCM session key for E2EE sessions.
9
+ * The web UI keeps it in the URL fragment (`#k=…`); for CLI/MCP callers,
10
+ * we persist it here so attachment upload and message decryption work
11
+ * without prompting on every call. The server never sees it. */
12
+ sessionKey?: string;
8
13
  }
9
14
  /** Saved owner credentials for managing sessions from the CLI. */
10
15
  export interface OwnerProfile {
@@ -26,6 +31,8 @@ export interface ResolvedConnection {
26
31
  token: string;
27
32
  sessionName?: string;
28
33
  participantName?: string;
34
+ /** Base64url AES-GCM session key — present when the session is E2EE. */
35
+ sessionKey?: string;
29
36
  }
30
37
  /** Inputs that can override config when resolving a connection. */
31
38
  export interface ResolveInput {
@@ -33,6 +40,7 @@ export interface ResolveInput {
33
40
  baseUrl?: string;
34
41
  slug?: string;
35
42
  token?: string;
43
+ sessionKey?: string;
36
44
  }
37
45
  /** Absolute path of the telecabin config file. */
38
46
  export declare function configPath(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,kDAAkD;AAClD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,4EAA4E;AAC5E,wBAAsB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAmB3D;AAED,4EAA4E;AAC5E,wBAAsB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE;AAED,2DAA2D;AAC3D,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,UAAU,EACtB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,0EAA0E;AAC1E,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED,mDAAmD;AACnD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtE;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAiC7B;AAED,yDAAyD;AACzD,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,GAAE,iBAAsB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;oEAGgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,kDAAkD;AAClD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,4EAA4E;AAC5E,wBAAsB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAmB3D;AAED,4EAA4E;AAC5E,wBAAsB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE;AAED,2DAA2D;AAC3D,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,UAAU,EACtB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,0EAA0E;AAC1E,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED,mDAAmD;AACnD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtE;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAoC7B;AAED,yDAAyD;AACzD,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,GAAE,iBAAsB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
package/dist/config.js CHANGED
@@ -87,6 +87,7 @@ export async function resolveConnection(input = {}) {
87
87
  const baseUrl = input.baseUrl ?? process.env.TELECABIN_BASE_URL ?? base?.baseUrl ?? DEFAULT_BASE_URL;
88
88
  const slug = input.slug ?? process.env.TELECABIN_SLUG ?? base?.slug;
89
89
  const token = input.token ?? process.env.TELECABIN_TOKEN ?? base?.token;
90
+ const sessionKey = input.sessionKey ?? process.env.TELECABIN_SESSION_KEY ?? base?.sessionKey;
90
91
  if (!slug || !token) {
91
92
  throw new TelecabinError("no_active_session", 'No active session. Run "telecabin join <invite-code>", or pass --slug and --token (or set TELECABIN_SLUG / TELECABIN_TOKEN).');
92
93
  }
@@ -97,6 +98,7 @@ export async function resolveConnection(input = {}) {
97
98
  token,
98
99
  sessionName: base?.sessionName,
99
100
  participantName: base?.participantName,
101
+ sessionKey,
100
102
  };
101
103
  }
102
104
  /** Save the owner profile (base URL + owner API key). */
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,7 +4,9 @@ export { OwnerClient } from "./owner.js";
4
4
  export type { OwnerClientOptions } from "./owner.js";
5
5
  export { TelecabinError } from "./errors.js";
6
6
  export type { TelecabinErrorCode } from "./errors.js";
7
+ export { ALLOWED_ATTACHMENT_MIME_TYPES, ATTACHMENT_TTL_HOURS, decryptAttachment, encryptAttachment, encryptText, isAllowedAttachmentMime, MAX_ATTACHMENT_BYTES, MAX_ATTACHMENTS_PER_MESSAGE, PLAINTEXT_ATTACHMENT_IV, } from "./attachments.js";
8
+ export type { AttachmentMime } from "./attachments.js";
7
9
  export { addConnection, configPath, loadConfig, removeConnection, resolveConnection, resolveOwner, saveConfig, setDefaultConnection, setOwnerProfile, } from "./config.js";
8
10
  export type { Connection, OwnerProfile, ResolvedConnection, ResolveInput, ResolveOwnerInput, TelecabinConfig, } from "./config.js";
9
- export type { EventKind, InvitePreview, JoinResult, MintedToken, OwnerKeyInfo, OwnerMember, OwnerParticipant, OwnerSession, Participant, PollResult, SessionInfo, SessionStatus, Snapshot, Status, TelecabinEvent, } from "./types.js";
11
+ export type { EventKind, InvitePreview, JoinResult, MintedToken, OwnerKeyInfo, OwnerMember, OwnerParticipant, OwnerSession, Participant, PollResult, PublicAttachment, SessionInfo, SessionStatus, Snapshot, Status, TelecabinEvent, } from "./types.js";
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,QAAQ,EACR,MAAM,EACN,cAAc,GACf,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,QAAQ,EACR,MAAM,EACN,cAAc,GACf,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { DEFAULT_BASE_URL, TelecabinClient } from "./client.js";
2
2
  export { OwnerClient } from "./owner.js";
3
3
  export { TelecabinError } from "./errors.js";
4
+ export { ALLOWED_ATTACHMENT_MIME_TYPES, ATTACHMENT_TTL_HOURS, decryptAttachment, encryptAttachment, encryptText, isAllowedAttachmentMime, MAX_ATTACHMENT_BYTES, MAX_ATTACHMENTS_PER_MESSAGE, PLAINTEXT_ATTACHMENT_IV, } from "./attachments.js";
4
5
  export { addConnection, configPath, loadConfig, removeConnection, resolveConnection, resolveOwner, saveConfig, setDefaultConnection, setOwnerProfile, } from "./config.js";
5
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,eAAe,GAChB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,eAAe,GAChB,MAAM,aAAa,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** A participant's presence state, broadcast to everyone in the session. */
2
- export type Status = "idle" | "thinking" | "generating" | "tool_call" | "error";
2
+ export type Status = "idle" | "listening" | "thinking" | "generating" | "tool_call" | "error";
3
3
  /** Lifecycle state of a session, controlled by its owner. */
4
4
  export type SessionStatus = "active" | "paused" | "closed";
5
5
  /** Kind of entry in the session event log. */
@@ -113,4 +113,18 @@ export interface OwnerKeyInfo {
113
113
  lastUsedAt: string | null;
114
114
  revokedAt: string | null;
115
115
  }
116
+ /** An attachment as returned by the upload route — what every other
117
+ * surface sees. The encrypted bytes live at `url` (Vercel Blob); `iv`
118
+ * is the 12-byte AES-GCM IV needed to decrypt. */
119
+ export interface PublicAttachment {
120
+ id: string;
121
+ name: string;
122
+ mimeType: string;
123
+ byteSize: number;
124
+ url: string;
125
+ /** ISO-8601 — server deletes the ciphertext after this. */
126
+ expiresAt: string;
127
+ encrypted: boolean;
128
+ iv: string;
129
+ }
116
130
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telecabin/core",
3
- "version": "0.1.0",
3
+ "version": "0.1.4",
4
4
  "description": "Shared API client, types, and config for the telecabin CLI and MCP server",
5
5
  "homepage": "https://telecabin.app",
6
6
  "repository": {