@arbidocs/react 0.5.88 → 0.5.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +11 -6
  2. package/dist/artifacts/index.cjs +13 -13
  3. package/dist/artifacts/index.js +3 -3
  4. package/dist/calls/livekit/index.cjs +48 -48
  5. package/dist/calls/livekit/index.js +3 -3
  6. package/dist/{chunk-DS7NTSKH.cjs → chunk-6BXRZYL2.cjs} +38 -38
  7. package/dist/{chunk-DS7NTSKH.cjs.map → chunk-6BXRZYL2.cjs.map} +1 -1
  8. package/dist/{chunk-BFNY3RZG.js → chunk-7PMNITKA.js} +2 -2
  9. package/dist/chunk-7PMNITKA.js.map +1 -0
  10. package/dist/{chunk-AOPGD23L.cjs → chunk-7RUVJZZG.cjs} +57 -57
  11. package/dist/{chunk-AOPGD23L.cjs.map → chunk-7RUVJZZG.cjs.map} +1 -1
  12. package/dist/{chunk-C4WODQGO.cjs → chunk-BRFRQWAY.cjs} +2 -2
  13. package/dist/chunk-BRFRQWAY.cjs.map +1 -0
  14. package/dist/{chunk-YQBDEOVE.js → chunk-HGLS3IC6.js} +3 -3
  15. package/dist/{chunk-YQBDEOVE.js.map → chunk-HGLS3IC6.js.map} +1 -1
  16. package/dist/{chunk-DU2P354H.js → chunk-IIOOXKOB.js} +4 -4
  17. package/dist/{chunk-DU2P354H.js.map → chunk-IIOOXKOB.js.map} +1 -1
  18. package/dist/{chunk-S3OGDLDC.js → chunk-KZBYWXPS.js} +3 -3
  19. package/dist/{chunk-S3OGDLDC.js.map → chunk-KZBYWXPS.js.map} +1 -1
  20. package/dist/{chunk-KTXZ222T.js → chunk-N3SFVZ7H.js} +3 -3
  21. package/dist/{chunk-KTXZ222T.js.map → chunk-N3SFVZ7H.js.map} +1 -1
  22. package/dist/{chunk-GKWMT64A.cjs → chunk-NJDVQIJR.cjs} +4 -4
  23. package/dist/{chunk-GKWMT64A.cjs.map → chunk-NJDVQIJR.cjs.map} +1 -1
  24. package/dist/{chunk-ZHXYFJIA.cjs → chunk-NR6PUE5O.cjs} +44 -44
  25. package/dist/{chunk-ZHXYFJIA.cjs.map → chunk-NR6PUE5O.cjs.map} +1 -1
  26. package/dist/{chunk-73ENECAT.js → chunk-RIPYDSRJ.js} +259 -10
  27. package/dist/chunk-RIPYDSRJ.js.map +1 -0
  28. package/dist/{chunk-QLRDHLWR.cjs → chunk-X4HGUBWU.cjs} +344 -69
  29. package/dist/chunk-X4HGUBWU.cjs.map +1 -0
  30. package/dist/document-tools/core.cjs +98 -98
  31. package/dist/document-tools/core.js +3 -3
  32. package/dist/document-tools/index.cjs +100 -100
  33. package/dist/document-tools/index.js +4 -4
  34. package/dist/index.cjs +5882 -5768
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/{index.d-1_bJB-Yl.d.ts → index.d-BMhTH98a.d.cts} +65 -65
  37. package/dist/{index.d-1_bJB-Yl.d.cts → index.d-BMhTH98a.d.ts} +65 -65
  38. package/dist/index.d.cts +123 -43
  39. package/dist/index.d.ts +123 -43
  40. package/dist/index.js +4986 -4879
  41. package/dist/index.js.map +1 -1
  42. package/dist/ui/index.d.cts +1 -1
  43. package/dist/ui/index.d.ts +1 -1
  44. package/package.json +3 -3
  45. package/dist/chunk-73ENECAT.js.map +0 -1
  46. package/dist/chunk-BFNY3RZG.js.map +0 -1
  47. package/dist/chunk-C4WODQGO.cjs.map +0 -1
  48. package/dist/chunk-QLRDHLWR.cjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkAOPGD23L_cjs = require('./chunk-AOPGD23L.cjs');
4
- var chunkC4WODQGO_cjs = require('./chunk-C4WODQGO.cjs');
3
+ var chunk7RUVJZZG_cjs = require('./chunk-7RUVJZZG.cjs');
4
+ var chunkBRFRQWAY_cjs = require('./chunk-BRFRQWAY.cjs');
5
5
  var chunkRLSBRZ6Z_cjs = require('./chunk-RLSBRZ6Z.cjs');
6
6
  var chunkEEIYXVM4_cjs = require('./chunk-EEIYXVM4.cjs');
7
7
  var reactQuery = require('@tanstack/react-query');
@@ -10,9 +10,9 @@ var browser = require('@arbidocs/sdk/browser');
10
10
  var client = require('@arbidocs/client');
11
11
 
12
12
  function useUserSettings(options) {
13
- const arbi = chunkC4WODQGO_cjs.useArbi();
13
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
14
14
  return reactQuery.useQuery({
15
- queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.userSettings(),
15
+ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.userSettings(),
16
16
  queryFn: () => arbi.settings.get(),
17
17
  // Edited about once a month, and every write here patches the cache: no refetch on each mount.
18
18
  staleTime: 30 * 60 * 1e3,
@@ -20,23 +20,23 @@ function useUserSettings(options) {
20
20
  });
21
21
  }
22
22
  function useUpdateUserSettings() {
23
- const arbi = chunkC4WODQGO_cjs.useArbi();
23
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
24
24
  const qc = reactQuery.useQueryClient();
25
25
  return reactQuery.useMutation({
26
26
  mutationFn: (patch) => arbi.settings.update(patch),
27
27
  onMutate: async (patch) => {
28
- await qc.cancelQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.userSettings() });
29
- const previous = qc.getQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.userSettings());
28
+ await qc.cancelQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.userSettings() });
29
+ const previous = qc.getQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.userSettings());
30
30
  qc.setQueryData(
31
- chunkC4WODQGO_cjs.arbiQueryKeys.userSettings(),
31
+ chunkBRFRQWAY_cjs.arbiQueryKeys.userSettings(),
32
32
  (old) => old ? { ...old, ...patch } : old
33
33
  );
34
34
  return { previous };
35
35
  },
36
36
  onError: (_err, _patch, context) => {
37
- qc.setQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.userSettings(), context?.previous);
37
+ qc.setQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.userSettings(), context?.previous);
38
38
  },
39
- onSettled: () => qc.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.userSettings() })
39
+ onSettled: () => qc.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.userSettings() })
40
40
  });
41
41
  }
42
42
  var ALWAYS_ON = { on: true, set: () => {
@@ -59,7 +59,7 @@ function useLocalSwitch(source, feature) {
59
59
  return { on: saved ?? fallback, set };
60
60
  }
61
61
  function useFeatureSwitch(feature) {
62
- const source = chunkC4WODQGO_cjs.useArbiHost().features?.[feature];
62
+ const source = chunkBRFRQWAY_cjs.useArbiHost().features?.[feature];
63
63
  const useSource = !source ? useUnlisted : "userSetting" in source ? useUserSettingSwitch : useLocalSwitch;
64
64
  return useSource(source, feature);
65
65
  }
@@ -96,7 +96,7 @@ function createLocalFeatureStore({
96
96
  storage = defaultStorage(),
97
97
  migrate
98
98
  }) {
99
- const listeners3 = /* @__PURE__ */ new Set();
99
+ const listeners4 = /* @__PURE__ */ new Set();
100
100
  const read = () => {
101
101
  try {
102
102
  return storage?.getItem(key) ?? null;
@@ -110,7 +110,7 @@ function createLocalFeatureStore({
110
110
  } catch {
111
111
  }
112
112
  };
113
- const notify2 = () => listeners3.forEach((listener) => listener());
113
+ const notify2 = () => listeners4.forEach((listener) => listener());
114
114
  const saved = parseValues(read());
115
115
  let values = saved ?? {};
116
116
  let hydrated = saved !== null || !migrate;
@@ -132,8 +132,8 @@ function createLocalFeatureStore({
132
132
  notify2();
133
133
  },
134
134
  subscribe(listener) {
135
- listeners3.add(listener);
136
- return () => listeners3.delete(listener);
135
+ listeners4.add(listener);
136
+ return () => listeners4.delete(listener);
137
137
  },
138
138
  isHydrated: () => hydrated,
139
139
  hydrated: () => ready
@@ -149,7 +149,7 @@ var LISTS = {
149
149
  };
150
150
  function patchConversationList(queryClient, workspaceId, reducer) {
151
151
  if (!workspaceId) return;
152
- const key = chunkC4WODQGO_cjs.arbiQueryKeys.conversations(workspaceId);
152
+ const key = chunkBRFRQWAY_cjs.arbiQueryKeys.conversations(workspaceId);
153
153
  const current = queryClient.getQueryData(key) ?? [];
154
154
  const next = reducer(current);
155
155
  if (next !== current) queryClient.setQueryData(key, next);
@@ -213,13 +213,13 @@ function byActivity(a, b) {
213
213
  return bt - at;
214
214
  }
215
215
  function cachedChats(queryClient) {
216
- return queryClient.getQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.chatList()) ?? [];
216
+ return queryClient.getQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.chatList()) ?? [];
217
217
  }
218
218
  function cachedChat(queryClient, chatExtId) {
219
219
  return cachedChats(queryClient).find((c) => c.external_id === chatExtId);
220
220
  }
221
221
  function upsertChat(queryClient, chat) {
222
- queryClient.setQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.chatList(), (old) => {
222
+ queryClient.setQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.chatList(), (old) => {
223
223
  if (!old) return old;
224
224
  const rest = old.filter((c) => c.external_id !== chat.external_id);
225
225
  return [chat, ...rest].sort(byActivity);
@@ -227,13 +227,13 @@ function upsertChat(queryClient, chat) {
227
227
  }
228
228
  function removeChat(queryClient, chatExtId) {
229
229
  queryClient.setQueryData(
230
- chunkC4WODQGO_cjs.arbiQueryKeys.chatList(),
230
+ chunkBRFRQWAY_cjs.arbiQueryKeys.chatList(),
231
231
  (old) => old?.filter((c) => c.external_id !== chatExtId)
232
232
  );
233
- queryClient.removeQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.chatThread(chatExtId) });
233
+ queryClient.removeQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.chatThread(chatExtId) });
234
234
  }
235
235
  function appendToThread(queryClient, chatExtId, message, replaceOptimisticId) {
236
- queryClient.setQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.chatThread(chatExtId), (old) => {
236
+ queryClient.setQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.chatThread(chatExtId), (old) => {
237
237
  if (!old) return old;
238
238
  const without = old.messages.filter(
239
239
  (m) => m.external_id !== message.external_id && m.external_id !== replaceOptimisticId
@@ -243,12 +243,12 @@ function appendToThread(queryClient, chatExtId, message, replaceOptimisticId) {
243
243
  }
244
244
  function dropFromThread(queryClient, chatExtId, messageExtId) {
245
245
  queryClient.setQueryData(
246
- chunkC4WODQGO_cjs.arbiQueryKeys.chatThread(chatExtId),
246
+ chunkBRFRQWAY_cjs.arbiQueryKeys.chatThread(chatExtId),
247
247
  (old) => old ? { ...old, messages: old.messages.filter((m) => m.external_id !== messageExtId) } : old
248
248
  );
249
249
  }
250
250
  function replaceInThread(queryClient, chatExtId, message) {
251
- queryClient.setQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.chatThread(chatExtId), (old) => {
251
+ queryClient.setQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.chatThread(chatExtId), (old) => {
252
252
  if (!old || !old.messages.some((m) => m.external_id === message.external_id)) return old;
253
253
  return {
254
254
  ...old,
@@ -258,14 +258,14 @@ function replaceInThread(queryClient, chatExtId, message) {
258
258
  }
259
259
  function patchLastMessage(queryClient, chatExtId, message) {
260
260
  queryClient.setQueryData(
261
- chunkC4WODQGO_cjs.arbiQueryKeys.chatList(),
261
+ chunkBRFRQWAY_cjs.arbiQueryKeys.chatList(),
262
262
  (old) => old?.map(
263
263
  (c) => c.external_id === chatExtId && c.last_message?.external_id === message.external_id ? { ...c, last_message: message } : c
264
264
  )
265
265
  );
266
266
  }
267
267
  async function deleteChatMessage(arbi, queryClient, chatExtId, messageExtId) {
268
- const thread = queryClient.getQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.chatThread(chatExtId));
268
+ const thread = queryClient.getQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.chatThread(chatExtId));
269
269
  const before = thread?.messages.find((m) => m.external_id === messageExtId);
270
270
  const listed = cachedChat(queryClient, chatExtId);
271
271
  const wasLast = listed?.last_message?.external_id === messageExtId ? listed.last_message : null;
@@ -286,7 +286,7 @@ async function applyChangedMessage(arbi, queryClient, chatExtId, message) {
286
286
  return;
287
287
  }
288
288
  const chat = cachedChat(queryClient, chatExtId);
289
- if (!chat || !queryClient.getQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.chatThread(chatExtId))) return;
289
+ if (!chat || !queryClient.getQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.chatThread(chatExtId))) return;
290
290
  try {
291
291
  replaceInThread(queryClient, chatExtId, await arbi.chats.decrypt(chat, message));
292
292
  } catch (err) {
@@ -298,7 +298,7 @@ async function applyChatMessage(arbi, queryClient, chatExtId, message) {
298
298
  const me = myChatId(arbi);
299
299
  const chat = cachedChat(queryClient, chatExtId);
300
300
  if (!chat) {
301
- void queryClient.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.chatList() });
301
+ void queryClient.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.chatList() });
302
302
  return;
303
303
  }
304
304
  const mine = message.sender_ext_id === me;
@@ -312,7 +312,7 @@ async function applyChatMessage(arbi, queryClient, chatExtId, message) {
312
312
  (m) => m.user.external_id === me ? { ...m, last_read_at: message.created_at } : m
313
313
  ) : chat.members
314
314
  });
315
- if (queryClient.getQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.chatThread(chatExtId))) {
315
+ if (queryClient.getQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.chatThread(chatExtId))) {
316
316
  try {
317
317
  appendToThread(queryClient, chatExtId, await arbi.chats.decrypt(chat, message));
318
318
  } catch (err) {
@@ -323,7 +323,7 @@ async function applyChatMessage(arbi, queryClient, chatExtId, message) {
323
323
  function applyChatRead(arbi, queryClient, chatExtId, userExtId, lastReadAt) {
324
324
  const me = myChatId(arbi);
325
325
  queryClient.setQueryData(
326
- chunkC4WODQGO_cjs.arbiQueryKeys.chatList(),
326
+ chunkBRFRQWAY_cjs.arbiQueryKeys.chatList(),
327
327
  (old) => old?.map(
328
328
  (c) => c.external_id !== chatExtId ? c : {
329
329
  ...c,
@@ -349,11 +349,11 @@ async function applyChatUpdated(arbi, queryClient, chatExtId, message) {
349
349
  }
350
350
  upsertChat(queryClient, chat);
351
351
  if (!message)
352
- void queryClient.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.chatThread(chatExtId) });
352
+ void queryClient.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.chatThread(chatExtId) });
353
353
  }
354
354
  function applyAgentDmStatus(queryClient, status) {
355
355
  if (!["queued", "working", "done", "failed"].includes(status.status)) return;
356
- queryClient.setQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.agentDmStatus(status.agent_ext_id), status);
356
+ queryClient.setQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.agentDmStatus(status.agent_ext_id), status);
357
357
  }
358
358
  async function applyChatEvent(arbi, queryClient, event) {
359
359
  const e = event;
@@ -368,13 +368,13 @@ async function applyChatEvent(arbi, queryClient, event) {
368
368
 
369
369
  // src/calls/keys.ts
370
370
  function serverCallsExperimental(queryClient) {
371
- return queryClient.getQueryData(chunkC4WODQGO_cjs.callQueryKeys.config())?.experimental !== false;
371
+ return queryClient.getQueryData(chunkBRFRQWAY_cjs.callQueryKeys.config())?.experimental !== false;
372
372
  }
373
373
  function invalidateCall(queryClient, message) {
374
- void queryClient.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.callQueryKeys.call(message.call_ext_id) });
374
+ void queryClient.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.call(message.call_ext_id) });
375
375
  const thread = message.log_conversation_ext_id;
376
376
  if (thread) {
377
- void queryClient.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.conversationActivity(thread) });
377
+ void queryClient.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.conversationActivity(thread) });
378
378
  }
379
379
  }
380
380
 
@@ -625,19 +625,19 @@ function applyCallEvent(queryClient, event, options = {}) {
625
625
  }
626
626
  case "call.recording": {
627
627
  if (callExtId)
628
- void queryClient.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.callQueryKeys.recordingsOf(callExtId) });
628
+ void queryClient.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.recordingsOf(callExtId) });
629
629
  const state2 = browser.calls.recordingStateFrom(m);
630
630
  relay("call.recording", callExtId && state2 ? { ...state2, call_ext_id: callExtId } : null);
631
631
  return true;
632
632
  }
633
633
  case "call.recording_updated": {
634
634
  if (callExtId)
635
- void queryClient.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.callQueryKeys.recordingsOf(callExtId) });
635
+ void queryClient.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.recordingsOf(callExtId) });
636
636
  return true;
637
637
  }
638
638
  case "call.recording_deleted": {
639
639
  if (callExtId)
640
- void queryClient.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.callQueryKeys.recordingsOf(callExtId) });
640
+ void queryClient.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.recordingsOf(callExtId) });
641
641
  const recordingExtId = str(m.recording_ext_id);
642
642
  relay(
643
643
  "call.recording_deleted",
@@ -668,6 +668,253 @@ function applyCallEvent(queryClient, event, options = {}) {
668
668
  return false;
669
669
  }
670
670
  }
671
+ var OfflineMailLockedError = class extends Error {
672
+ constructor() {
673
+ super("Sign in to open the mail saved on this device");
674
+ this.name = "OfflineMailLockedError";
675
+ }
676
+ };
677
+ var sealer = client.createOfflineSealer("arbi-offline-mail-v1", {
678
+ locked: () => new OfflineMailLockedError()
679
+ });
680
+ var forgetOfflineMailKeys = sealer.forget;
681
+ var sealBytes = sealer.sealBytes;
682
+ var openBytes = sealer.openBytes;
683
+ var sealJson = sealer.sealJson;
684
+ var openJson = sealer.openJson;
685
+ var blind = sealer.blind;
686
+
687
+ // src/offline-store/store.ts
688
+ var DB_VERSION = 1;
689
+ var RECORDS = "records";
690
+ var META = "meta";
691
+ function promisify(request) {
692
+ return new Promise((resolve, reject) => {
693
+ request.onsuccess = () => resolve(request.result);
694
+ request.onerror = () => reject(request.error);
695
+ });
696
+ }
697
+ function createRecordStore(dbName) {
698
+ let dbPromise = null;
699
+ function openDB() {
700
+ if (dbPromise) return dbPromise;
701
+ dbPromise = new Promise((resolve, reject) => {
702
+ const request = indexedDB.open(dbName, DB_VERSION);
703
+ request.onerror = () => {
704
+ dbPromise = null;
705
+ reject(request.error);
706
+ };
707
+ request.onsuccess = () => {
708
+ const db = request.result;
709
+ db.onversionchange = () => {
710
+ db.close();
711
+ dbPromise = null;
712
+ };
713
+ resolve(db);
714
+ };
715
+ request.onupgradeneeded = () => {
716
+ const db = request.result;
717
+ if (!db.objectStoreNames.contains(RECORDS)) {
718
+ const records = db.createObjectStore(RECORDS, { keyPath: "key" });
719
+ records.createIndex("bucket", "bucket");
720
+ records.createIndex("kind", "kind");
721
+ }
722
+ if (!db.objectStoreNames.contains(META)) db.createObjectStore(META, { keyPath: "key" });
723
+ };
724
+ });
725
+ return dbPromise;
726
+ }
727
+ async function run(store2, mode, fn) {
728
+ const db = await openDB();
729
+ return promisify(fn(db.transaction(store2, mode).objectStore(store2)));
730
+ }
731
+ async function scan(pick) {
732
+ const db = await openDB();
733
+ const store2 = db.transaction(RECORDS, "readonly").objectStore(RECORDS);
734
+ return new Promise((resolve, reject) => {
735
+ const out = [];
736
+ const cursor = store2.openCursor();
737
+ cursor.onerror = () => reject(cursor.error);
738
+ cursor.onsuccess = () => {
739
+ const c = cursor.result;
740
+ if (!c) return resolve(out);
741
+ out.push(pick(c.value));
742
+ c.continue();
743
+ };
744
+ });
745
+ }
746
+ const self = {
747
+ dbName,
748
+ async putRecord(record) {
749
+ await run(RECORDS, "readwrite", (s) => s.put(record));
750
+ },
751
+ async getRecord(key) {
752
+ return await run(RECORDS, "readonly", (s) => s.get(key));
753
+ },
754
+ async hasRecord(key) {
755
+ return await run(RECORDS, "readonly", (s) => s.count(key)) > 0;
756
+ },
757
+ async deleteRecords(keys) {
758
+ if (keys.length === 0) return;
759
+ const db = await openDB();
760
+ const tx = db.transaction(RECORDS, "readwrite");
761
+ const store2 = tx.objectStore(RECORDS);
762
+ for (const key of keys) store2.delete(key);
763
+ await new Promise((resolve, reject) => {
764
+ tx.oncomplete = () => resolve();
765
+ tx.onerror = () => reject(tx.error);
766
+ tx.onabort = () => reject(tx.error);
767
+ });
768
+ },
769
+ async recordsInBucket(bucket) {
770
+ return await run(
771
+ RECORDS,
772
+ "readonly",
773
+ (s) => s.index("bucket").getAll(bucket)
774
+ );
775
+ },
776
+ async recordsOfKind(kind) {
777
+ return await run(
778
+ RECORDS,
779
+ "readonly",
780
+ (s) => s.index("kind").getAll(kind)
781
+ );
782
+ },
783
+ allRecordSizes() {
784
+ return scan(({ key, kind, size }) => ({ key, kind, size }));
785
+ },
786
+ allRecordAccess() {
787
+ return scan(({ key, kind, lastAccess }) => ({ key, kind, lastAccess }));
788
+ },
789
+ async touchRecord(key) {
790
+ const record = await self.getRecord(key);
791
+ if (record) await self.putRecord({ ...record, lastAccess: Date.now() });
792
+ },
793
+ async getMeta(key) {
794
+ const row = await run(META, "readonly", (s) => s.get(key));
795
+ return row?.value;
796
+ },
797
+ async setMeta(key, value) {
798
+ await run(META, "readwrite", (s) => s.put({ key, value }));
799
+ },
800
+ async deleteDatabase() {
801
+ const db = await dbPromise?.catch(() => null);
802
+ db?.close();
803
+ dbPromise = null;
804
+ await new Promise((resolve, reject) => {
805
+ const request = indexedDB.deleteDatabase(dbName);
806
+ request.onsuccess = () => resolve();
807
+ request.onerror = () => reject(request.error);
808
+ request.onblocked = () => {
809
+ };
810
+ });
811
+ }
812
+ };
813
+ return self;
814
+ }
815
+
816
+ // src/mail/offline/store.ts
817
+ var OFFLINE_MAIL_DB = "arbi-offline-mail";
818
+ var store = createRecordStore(OFFLINE_MAIL_DB);
819
+ var putRecord = store.putRecord;
820
+ var getRecord = store.getRecord;
821
+ var hasRecord = store.hasRecord;
822
+ var deleteRecords = store.deleteRecords;
823
+ var recordsInBucket = store.recordsInBucket;
824
+ var recordsOfKind = store.recordsOfKind;
825
+ var allRecordSizes = store.allRecordSizes;
826
+ var touchRecord = store.touchRecord;
827
+ var getMeta = store.getMeta;
828
+ var setMeta = store.setMeta;
829
+ var deleteOfflineMailDatabase = store.deleteDatabase;
830
+
831
+ // src/mail/offline/settings.ts
832
+ var DEFAULT_OFFLINE_MAIL_SETTINGS = {
833
+ enabled: true,
834
+ scope: "7d",
835
+ attachmentCapMb: 25,
836
+ quotaMb: 1024
837
+ };
838
+ var SCOPE_DAYS = {
839
+ "1d": 1,
840
+ "7d": 7,
841
+ "30d": 30,
842
+ "90d": 90
843
+ };
844
+ var DAY_MS = 24 * 60 * 60 * 1e3;
845
+ function offlineWindowStart(settings, now = Date.now()) {
846
+ return now - SCOPE_DAYS[settings.scope] * DAY_MS;
847
+ }
848
+ function inOfflineWindow(settings, receivedAt, now = Date.now()) {
849
+ const at = receivedAt ? Date.parse(receivedAt) || 0 : 0;
850
+ return settings.enabled && (!at || at >= offlineWindowStart(settings, now));
851
+ }
852
+ function normalize(saved) {
853
+ const merged = { ...DEFAULT_OFFLINE_MAIL_SETTINGS, ...saved };
854
+ const scope = merged.scope;
855
+ if (scope in SCOPE_DAYS) return merged;
856
+ const longer = scope === "365d" || scope === "all";
857
+ return { ...merged, scope: longer ? "90d" : DEFAULT_OFFLINE_MAIL_SETTINGS.scope };
858
+ }
859
+ var STORAGE_PREFIX = "arbi-offline-mail-settings:";
860
+ var SIGNED_OUT = { ...DEFAULT_OFFLINE_MAIL_SETTINGS, enabled: false };
861
+ function getOfflineMailSettings(userExtId) {
862
+ if (!userExtId) return SIGNED_OUT;
863
+ const key = STORAGE_PREFIX + userExtId;
864
+ try {
865
+ const raw = localStorage.getItem(key);
866
+ return raw ? normalize(JSON.parse(raw)) : DEFAULT_OFFLINE_MAIL_SETTINGS;
867
+ } catch {
868
+ return DEFAULT_OFFLINE_MAIL_SETTINGS;
869
+ }
870
+ }
871
+ function setOfflineMailSettings(userExtId, patch) {
872
+ const next = { ...getOfflineMailSettings(userExtId), ...patch };
873
+ if (userExtId) {
874
+ try {
875
+ localStorage.setItem(STORAGE_PREFIX + userExtId, JSON.stringify(next));
876
+ } catch {
877
+ }
878
+ }
879
+ notifyOfflineMailChange("settings");
880
+ return next;
881
+ }
882
+ var listeners3 = /* @__PURE__ */ new Set();
883
+ var CHANNEL = "arbi-offline-mail";
884
+ var channel = null;
885
+ function getChannel() {
886
+ if (channel || typeof BroadcastChannel === "undefined") return channel;
887
+ channel = new BroadcastChannel(CHANNEL);
888
+ channel.onmessage = (event) => {
889
+ for (const listener of listeners3) listener(event.data);
890
+ };
891
+ return channel;
892
+ }
893
+ function notifyOfflineMailChange(change) {
894
+ for (const listener of listeners3) listener(change);
895
+ try {
896
+ getChannel()?.postMessage(change);
897
+ } catch {
898
+ }
899
+ }
900
+ function onOfflineMailChange(listener) {
901
+ getChannel();
902
+ listeners3.add(listener);
903
+ return () => listeners3.delete(listener);
904
+ }
905
+
906
+ // src/mail/offline/wipe.ts
907
+ var OWNER_KEY = "owner";
908
+ async function wipeOfflineMail() {
909
+ forgetOfflineMailKeys();
910
+ await deleteOfflineMailDatabase();
911
+ notifyOfflineMailChange("wiped");
912
+ }
913
+ async function claimOfflineMail(userExtId) {
914
+ const owner = await getMeta(OWNER_KEY);
915
+ if (owner && owner !== userExtId) await wipeOfflineMail();
916
+ await setMeta(OWNER_KEY, userExtId);
917
+ }
671
918
  function toProfileView(profile) {
672
919
  return {
673
920
  ...profile,
@@ -678,11 +925,11 @@ function useProfile(options) {
678
925
  const { client, enabled } = useAccountClient();
679
926
  const qc = reactQuery.useQueryClient();
680
927
  react.useEffect(
681
- () => client.onProfileChange(() => qc.setQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.profile(), client.profile())),
928
+ () => client.onProfileChange(() => qc.setQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.profile(), client.profile())),
682
929
  [client, qc]
683
930
  );
684
931
  return reactQuery.useQuery({
685
- queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.profile(),
932
+ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.profile(),
686
933
  queryFn: () => client.profile(),
687
934
  enabled: (options?.enabled ?? true) && enabled,
688
935
  staleTime: Infinity
@@ -697,9 +944,9 @@ function useUpdateProfile() {
697
944
  return client.profile();
698
945
  },
699
946
  onSuccess: (profile) => {
700
- qc.setQueryData(chunkC4WODQGO_cjs.arbiQueryKeys.profile(), profile);
701
- void qc.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.identity() });
702
- return qc.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.workspaces() });
947
+ qc.setQueryData(chunkBRFRQWAY_cjs.arbiQueryKeys.profile(), profile);
948
+ void qc.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.identity() });
949
+ return qc.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.workspaces() });
703
950
  }
704
951
  });
705
952
  }
@@ -801,8 +1048,10 @@ function arbiAccountClient(arbi, overrides = {}) {
801
1048
  if (everywhere) await arbi.sessions.logoutAll();
802
1049
  else await arbi.logout();
803
1050
  } finally {
804
- chunkAOPGD23L_cjs.clearSealedDrafts();
1051
+ chunk7RUVJZZG_cjs.clearSealedDrafts();
805
1052
  chunkRLSBRZ6Z_cjs.clearChatArtifacts();
1053
+ await wipeOfflineMail().catch(() => {
1054
+ });
806
1055
  }
807
1056
  },
808
1057
  requestDeletion: () => arbi.account.requestDeletion(),
@@ -846,7 +1095,7 @@ var NO_ACCOUNT = {
846
1095
  };
847
1096
  var ALWAYS = () => true;
848
1097
  function useAccountClient() {
849
- const { account, arbi } = chunkC4WODQGO_cjs.useArbiHost();
1098
+ const { account, arbi } = chunkBRFRQWAY_cjs.useArbiHost();
850
1099
  const fallback = react.useMemo(() => arbi ? arbiAccountClient(arbi) : null, [arbi]);
851
1100
  const useEnabled = account?.useEnabled ?? ALWAYS;
852
1101
  const enabled = useEnabled();
@@ -857,9 +1106,9 @@ function useAccountClient() {
857
1106
  return { client: fallback, enabled: arbi.isLoggedIn };
858
1107
  }
859
1108
  function useEntitlements() {
860
- const arbi = chunkC4WODQGO_cjs.useArbi();
1109
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
861
1110
  return reactQuery.useQuery({
862
- queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.entitlements(),
1111
+ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.entitlements(),
863
1112
  queryFn: () => arbi.account.entitlements(),
864
1113
  enabled: arbi.isLoggedIn,
865
1114
  // A plan change shows on the next read; the API enforces it at once either way.
@@ -868,7 +1117,7 @@ function useEntitlements() {
868
1117
  }
869
1118
  function useInvalidateEntitlements() {
870
1119
  const qc = reactQuery.useQueryClient();
871
- return () => qc.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.entitlements() });
1120
+ return () => qc.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.entitlements() });
872
1121
  }
873
1122
  function useIsEntitled(feature) {
874
1123
  const { data } = useEntitlements();
@@ -992,7 +1241,7 @@ function ensureMeetingChat(arbi, queryClient, callExtId, callKey) {
992
1241
  });
993
1242
  if (!ref) throw new Error("The server did not return a meeting chat");
994
1243
  if (ref.kind === "chat")
995
- void queryClient.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.arbiQueryKeys.chatList() });
1244
+ void queryClient.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.arbiQueryKeys.chatList() });
996
1245
  else void invalidateConversationLists(queryClient);
997
1246
  return ref;
998
1247
  })();
@@ -1998,9 +2247,9 @@ async function transcribeRecording(params) {
1998
2247
  return { stored, failed };
1999
2248
  }
2000
2249
  function useCallsConfig() {
2001
- const arbi = chunkC4WODQGO_cjs.useArbi();
2250
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2002
2251
  const { data } = reactQuery.useQuery({
2003
- queryKey: chunkC4WODQGO_cjs.callQueryKeys.config(),
2252
+ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.config(),
2004
2253
  queryFn: () => arbi.calls.config(),
2005
2254
  enabled: arbi.isLoggedIn,
2006
2255
  staleTime: 5 * 6e4,
@@ -2018,9 +2267,9 @@ function useCallTranscriptionAvailable() {
2018
2267
  return useCallsConfig()?.transcription_available === true;
2019
2268
  }
2020
2269
  function useCall(callExtId) {
2021
- const arbi = chunkC4WODQGO_cjs.useArbi();
2270
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2022
2271
  return reactQuery.useQuery({
2023
- queryKey: chunkC4WODQGO_cjs.callQueryKeys.call(callExtId ?? ""),
2272
+ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.call(callExtId ?? ""),
2024
2273
  queryFn: () => arbi.calls.get(callExtId),
2025
2274
  enabled: !!callExtId && arbi.isLoggedIn,
2026
2275
  staleTime: 6e4,
@@ -2028,18 +2277,18 @@ function useCall(callExtId) {
2028
2277
  });
2029
2278
  }
2030
2279
  function useCallRecordings(callExtId, enabled = true) {
2031
- const arbi = chunkC4WODQGO_cjs.useArbi();
2280
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2032
2281
  return reactQuery.useQuery({
2033
- queryKey: chunkC4WODQGO_cjs.callQueryKeys.recordings(callExtId ?? ""),
2282
+ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.recordings(callExtId ?? ""),
2034
2283
  queryFn: () => arbi.calls.recording.list(callExtId),
2035
2284
  enabled: !!callExtId && enabled && arbi.isLoggedIn,
2036
2285
  retry: false
2037
2286
  });
2038
2287
  }
2039
2288
  function useCallRecording(callExtId, recordingExtId) {
2040
- const arbi = chunkC4WODQGO_cjs.useArbi();
2289
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2041
2290
  return reactQuery.useQuery({
2042
- queryKey: chunkC4WODQGO_cjs.callQueryKeys.recording(callExtId ?? "", recordingExtId ?? ""),
2291
+ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.recording(callExtId ?? "", recordingExtId ?? ""),
2043
2292
  queryFn: () => arbi.calls.recording.get(callExtId, recordingExtId),
2044
2293
  enabled: !!callExtId && !!recordingExtId && arbi.isLoggedIn,
2045
2294
  retry: false
@@ -2051,21 +2300,21 @@ function useRecordingWindows(callExtId, enabled) {
2051
2300
  return react.useMemo(() => data ? recordingWindowsOf(data) : NO_WINDOWS, [data]);
2052
2301
  }
2053
2302
  function useCallInviteLinks(callExtId) {
2054
- const arbi = chunkC4WODQGO_cjs.useArbi();
2303
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2055
2304
  return reactQuery.useQuery({
2056
- queryKey: chunkC4WODQGO_cjs.callQueryKeys.inviteLinks(callExtId ?? ""),
2305
+ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.inviteLinks(callExtId ?? ""),
2057
2306
  queryFn: () => arbi.calls.inviteLinks.list(callExtId),
2058
2307
  enabled: !!callExtId && arbi.isLoggedIn,
2059
2308
  retry: false
2060
2309
  });
2061
2310
  }
2062
2311
  function useRecordingActions(call) {
2063
- const arbi = chunkC4WODQGO_cjs.useArbi();
2312
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2064
2313
  const queryClient = reactQuery.useQueryClient();
2065
2314
  return react.useMemo(
2066
2315
  () => ({
2067
2316
  refresh: () => void queryClient.invalidateQueries({
2068
- queryKey: chunkC4WODQGO_cjs.callQueryKeys.recordingsOf(call.external_id)
2317
+ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.recordingsOf(call.external_id)
2069
2318
  }),
2070
2319
  open: (recording) => openRecording(arbi, queryClient, call, recording.external_id, recording),
2071
2320
  transcribe: async (opened, onProgress) => transcribeRecording({
@@ -2081,12 +2330,12 @@ function useRecordingActions(call) {
2081
2330
  );
2082
2331
  }
2083
2332
  function useRevokeCallInviteLink(callExtId) {
2084
- const arbi = chunkC4WODQGO_cjs.useArbi();
2333
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2085
2334
  const queryClient = reactQuery.useQueryClient();
2086
2335
  return react.useCallback(
2087
2336
  async (inviteExtId) => {
2088
2337
  await arbi.calls.inviteLinks.revoke(callExtId, inviteExtId);
2089
- void queryClient.invalidateQueries({ queryKey: chunkC4WODQGO_cjs.callQueryKeys.inviteLinks(callExtId) });
2338
+ void queryClient.invalidateQueries({ queryKey: chunkBRFRQWAY_cjs.callQueryKeys.inviteLinks(callExtId) });
2090
2339
  },
2091
2340
  [arbi, queryClient, callExtId]
2092
2341
  );
@@ -2144,7 +2393,7 @@ async function saveRecordingFilesToThread(arbi, params) {
2144
2393
  });
2145
2394
  }
2146
2395
  function useSaveToThread() {
2147
- const arbi = chunkC4WODQGO_cjs.useArbi();
2396
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2148
2397
  const queryClient = reactQuery.useQueryClient();
2149
2398
  return react.useMemo(() => {
2150
2399
  const thenRefresh = async (run) => {
@@ -2431,9 +2680,9 @@ function isWorkspaceGuestOf(workspaces, workspaceExtId, me) {
2431
2680
  return workspace?.users?.find((wu) => wu.user.external_id === me)?.role === "guest";
2432
2681
  }
2433
2682
  function useMeetingReadOnly(lockedWorkspaceExtId) {
2434
- const arbi = chunkC4WODQGO_cjs.useArbi();
2683
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2435
2684
  const me = arbi.isLoggedIn ? arbi.user.identity()?.externalId ?? null : null;
2436
- const { data: workspaces } = chunkAOPGD23L_cjs.useWorkspaces({
2685
+ const { data: workspaces } = chunk7RUVJZZG_cjs.useWorkspaces({
2437
2686
  enabled: !!lockedWorkspaceExtId && arbi.isLoggedIn
2438
2687
  });
2439
2688
  return isWorkspaceGuestOf(
@@ -2456,9 +2705,9 @@ function useCanHostCalls() {
2456
2705
  return callsEnabled && entitled;
2457
2706
  }
2458
2707
  function useOpenCallMeetingChat() {
2459
- const arbi = chunkC4WODQGO_cjs.useArbi();
2708
+ const arbi = chunkBRFRQWAY_cjs.useArbi();
2460
2709
  const queryClient = reactQuery.useQueryClient();
2461
- const open = chunkC4WODQGO_cjs.useArbiHost().calls?.openMeetingChat;
2710
+ const open = chunkBRFRQWAY_cjs.useArbiHost().calls?.openMeetingChat;
2462
2711
  return react.useCallback(
2463
2712
  async (target) => {
2464
2713
  try {
@@ -2493,10 +2742,12 @@ exports.HISTORY_LIMIT = HISTORY_LIMIT;
2493
2742
  exports.LIVE_SEGMENTER = LIVE_SEGMENTER;
2494
2743
  exports.MAX_AVATAR_FILE_BYTES = MAX_AVATAR_FILE_BYTES;
2495
2744
  exports.MUTED_DEDUPE_MS = MUTED_DEDUPE_MS;
2745
+ exports.OFFLINE_MAIL_DB = OFFLINE_MAIL_DB;
2496
2746
  exports.PLAYBACK_LOOKAHEAD_MS = PLAYBACK_LOOKAHEAD_MS;
2497
2747
  exports.READ_ONLY_MEETING_TEXT = READ_ONLY_MEETING_TEXT;
2498
2748
  exports.RECORDING_CHUNK_MS = RECORDING_CHUNK_MS;
2499
2749
  exports.RECORDING_SEGMENTER = RECORDING_SEGMENTER;
2750
+ exports.SCOPE_DAYS = SCOPE_DAYS;
2500
2751
  exports.SEGMENT_FRAME_MS = SEGMENT_FRAME_MS;
2501
2752
  exports.SEGMENT_ID_PATTERN = SEGMENT_ID_PATTERN;
2502
2753
  exports.SEGMENT_PRE_ROLL_MS = SEGMENT_PRE_ROLL_MS;
@@ -2507,6 +2758,7 @@ exports.UPLOAD_ATTEMPTS = UPLOAD_ATTEMPTS;
2507
2758
  exports.UPLOAD_BACKOFF_MS = UPLOAD_BACKOFF_MS;
2508
2759
  exports.acceptRing = acceptRing;
2509
2760
  exports.addConversationToList = addConversationToList;
2761
+ exports.allRecordSizes = allRecordSizes;
2510
2762
  exports.appendToThread = appendToThread;
2511
2763
  exports.applyAgentDmStatus = applyAgentDmStatus;
2512
2764
  exports.applyCallEvent = applyCallEvent;
@@ -2515,6 +2767,7 @@ exports.applyChatMessage = applyChatMessage;
2515
2767
  exports.applyChatRead = applyChatRead;
2516
2768
  exports.applyChatUpdated = applyChatUpdated;
2517
2769
  exports.arbiAccountClient = arbiAccountClient;
2770
+ exports.blind = blind;
2518
2771
  exports.buildMeetingChatBody = buildMeetingChatBody;
2519
2772
  exports.cachedChat = cachedChat;
2520
2773
  exports.cachedChats = cachedChats;
@@ -2525,6 +2778,7 @@ exports.chatByExtId = chatByExtId;
2525
2778
  exports.chatHasLiveCall = chatHasLiveCall;
2526
2779
  exports.chatLiveCallId = chatLiveCallId;
2527
2780
  exports.chatTranscriptRef = chatTranscriptRef;
2781
+ exports.claimOfflineMail = claimOfflineMail;
2528
2782
  exports.clearMeetingChatCache = clearMeetingChatCache;
2529
2783
  exports.clearTrackUploaders = clearTrackUploaders;
2530
2784
  exports.clockTime = clockTime;
@@ -2533,6 +2787,7 @@ exports.compositeTrack = compositeTrack;
2533
2787
  exports.conversationKeyForCall = conversationKeyForCall;
2534
2788
  exports.createLocalFeatureStore = createLocalFeatureStore;
2535
2789
  exports.createMutedNotifier = createMutedNotifier;
2790
+ exports.createRecordStore = createRecordStore;
2536
2791
  exports.createTrackCutter = createTrackCutter;
2537
2792
  exports.cutAtPauses = cutAtPauses;
2538
2793
  exports.declineRing = declineRing;
@@ -2541,6 +2796,7 @@ exports.decodeCaptionPacket = decodeCaptionPacket;
2541
2796
  exports.decodeMono16k = decodeMono16k;
2542
2797
  exports.decryptPart = decryptPart;
2543
2798
  exports.deleteChatMessage = deleteChatMessage;
2799
+ exports.deleteRecords = deleteRecords;
2544
2800
  exports.dropFromThread = dropFromThread;
2545
2801
  exports.encodeCallChatPacket = encodeCallChatPacket;
2546
2802
  exports.encodeCaptionPacket = encodeCaptionPacket;
@@ -2554,8 +2810,13 @@ exports.fileSafe = fileSafe;
2554
2810
  exports.findConversation = findConversation;
2555
2811
  exports.floatToWav = floatToWav;
2556
2812
  exports.formatTranscriptMarkdown = formatTranscriptMarkdown;
2813
+ exports.getMeta = getMeta;
2814
+ exports.getOfflineMailSettings = getOfflineMailSettings;
2557
2815
  exports.getOpenChat = getOpenChat;
2816
+ exports.getRecord = getRecord;
2817
+ exports.hasRecord = hasRecord;
2558
2818
  exports.hasRecordingTranscript = hasRecordingTranscript;
2819
+ exports.inOfflineWindow = inOfflineWindow;
2559
2820
  exports.invalidateCall = invalidateCall;
2560
2821
  exports.invalidateConversationDetails = invalidateConversationDetails;
2561
2822
  exports.invalidateConversationLists = invalidateConversationLists;
@@ -2580,8 +2841,13 @@ exports.newPacketId = newPacketId;
2580
2841
  exports.newSegmentId = newSegmentId;
2581
2842
  exports.newTrackKey = newTrackKey;
2582
2843
  exports.nextSeqAfter = nextSeqAfter;
2844
+ exports.notifyOfflineMailChange = notifyOfflineMailChange;
2845
+ exports.offlineWindowStart = offlineWindowStart;
2583
2846
  exports.onCallEvent = onCallEvent;
2847
+ exports.onOfflineMailChange = onOfflineMailChange;
2848
+ exports.openBytes = openBytes;
2584
2849
  exports.openCall = openCall;
2850
+ exports.openJson = openJson;
2585
2851
  exports.openQuestion = openQuestion;
2586
2852
  exports.openRecording = openRecording;
2587
2853
  exports.parseWebinarPacket = parseWebinarPacket;
@@ -2595,9 +2861,12 @@ exports.persistTranscriptSegment = persistTranscriptSegment;
2595
2861
  exports.playheadAt = playheadAt;
2596
2862
  exports.postRecordingDocsToThread = postRecordingDocsToThread;
2597
2863
  exports.postTranscriptToThread = postTranscriptToThread;
2864
+ exports.putRecord = putRecord;
2598
2865
  exports.readLocalFeature = readLocalFeature;
2599
2866
  exports.recordingFiles = recordingFiles;
2600
2867
  exports.recordingWindowsOf = recordingWindowsOf;
2868
+ exports.recordsInBucket = recordsInBucket;
2869
+ exports.recordsOfKind = recordsOfKind;
2601
2870
  exports.rejoinAsAudience = rejoinAsAudience;
2602
2871
  exports.removeChat = removeChat;
2603
2872
  exports.removeConversationFromLists = removeConversationFromLists;
@@ -2605,8 +2874,12 @@ exports.resetCallSession = resetCallSession;
2605
2874
  exports.resolveMeetingChat = resolveMeetingChat;
2606
2875
  exports.saveRecordingFilesToThread = saveRecordingFilesToThread;
2607
2876
  exports.schedulePart = schedulePart;
2877
+ exports.sealBytes = sealBytes;
2878
+ exports.sealJson = sealJson;
2608
2879
  exports.sealQuestionText = sealQuestionText;
2609
2880
  exports.serverCallsExperimental = serverCallsExperimental;
2881
+ exports.setMeta = setMeta;
2882
+ exports.setOfflineMailSettings = setOfflineMailSettings;
2610
2883
  exports.setOpenChat = setOpenChat;
2611
2884
  exports.sortTranscriptMessages = sortTranscriptMessages;
2612
2885
  exports.sortedParts = sortedParts;
@@ -2631,6 +2904,7 @@ exports.threadTranscriptText = threadTranscriptText;
2631
2904
  exports.timelineDurationMs = timelineDurationMs;
2632
2905
  exports.timelineOf = timelineOf;
2633
2906
  exports.toProfileView = toProfileView;
2907
+ exports.touchRecord = touchRecord;
2634
2908
  exports.trackUploaderFor = trackUploaderFor;
2635
2909
  exports.transcribeRecording = transcribeRecording;
2636
2910
  exports.transcriptPersistRole = transcriptPersistRole;
@@ -2666,7 +2940,8 @@ exports.useServerCallsExperimental = useServerCallsExperimental;
2666
2940
  exports.useUpdateProfile = useUpdateProfile;
2667
2941
  exports.useUpdateUserSettings = useUpdateUserSettings;
2668
2942
  exports.useUserSettings = useUserSettings;
2943
+ exports.wipeOfflineMail = wipeOfflineMail;
2669
2944
  exports.wrapTrackKey = wrapTrackKey;
2670
2945
  exports.writeSamples = writeSamples;
2671
- //# sourceMappingURL=chunk-QLRDHLWR.cjs.map
2672
- //# sourceMappingURL=chunk-QLRDHLWR.cjs.map
2946
+ //# sourceMappingURL=chunk-X4HGUBWU.cjs.map
2947
+ //# sourceMappingURL=chunk-X4HGUBWU.cjs.map