@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,11 +1,11 @@
1
- import { clearSealedDrafts, useWorkspaces } from './chunk-KTXZ222T.js';
2
- import { useArbi, arbiQueryKeys, useArbiHost, callQueryKeys } from './chunk-BFNY3RZG.js';
1
+ import { clearSealedDrafts, useWorkspaces } from './chunk-N3SFVZ7H.js';
2
+ import { useArbi, arbiQueryKeys, useArbiHost, callQueryKeys } from './chunk-7PMNITKA.js';
3
3
  import { notify, clearChatArtifacts } from './chunk-BF5KW5ZI.js';
4
4
  import { getUserDisplayName, DEFAULT_SEGMENTER_CONFIG, INITIAL_SEGMENTER_STATE, flushSegmenter, stepSegmenter, levelFromRms } from './chunk-APZZQZ6P.js';
5
5
  import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
6
6
  import { useSyncExternalStore, useEffect, useState, useCallback, useMemo } from 'react';
7
7
  import { chats, calls, ArbiApiError, CallApiError, documents, continuityPrompt } from '@arbidocs/sdk/browser';
8
- import { generateChatKey, sealCallKey, sealChatKey, decryptCallTitle, encryptWithChatKey, decryptWithChatKey, initSodium, bytesToBase64, encryptFile, decryptFile, base64ToBytes, buildCallLink, encryptCallTitle } from '@arbidocs/client';
8
+ import { createOfflineSealer, generateChatKey, sealCallKey, sealChatKey, decryptCallTitle, encryptWithChatKey, decryptWithChatKey, initSodium, bytesToBase64, encryptFile, decryptFile, base64ToBytes, buildCallLink, encryptCallTitle } from '@arbidocs/client';
9
9
 
10
10
  function useUserSettings(options) {
11
11
  const arbi = useArbi();
@@ -94,7 +94,7 @@ function createLocalFeatureStore({
94
94
  storage = defaultStorage(),
95
95
  migrate
96
96
  }) {
97
- const listeners3 = /* @__PURE__ */ new Set();
97
+ const listeners4 = /* @__PURE__ */ new Set();
98
98
  const read = () => {
99
99
  try {
100
100
  return storage?.getItem(key) ?? null;
@@ -108,7 +108,7 @@ function createLocalFeatureStore({
108
108
  } catch {
109
109
  }
110
110
  };
111
- const notify2 = () => listeners3.forEach((listener) => listener());
111
+ const notify2 = () => listeners4.forEach((listener) => listener());
112
112
  const saved = parseValues(read());
113
113
  let values = saved ?? {};
114
114
  let hydrated = saved !== null || !migrate;
@@ -130,8 +130,8 @@ function createLocalFeatureStore({
130
130
  notify2();
131
131
  },
132
132
  subscribe(listener) {
133
- listeners3.add(listener);
134
- return () => listeners3.delete(listener);
133
+ listeners4.add(listener);
134
+ return () => listeners4.delete(listener);
135
135
  },
136
136
  isHydrated: () => hydrated,
137
137
  hydrated: () => ready
@@ -666,6 +666,253 @@ function applyCallEvent(queryClient, event, options = {}) {
666
666
  return false;
667
667
  }
668
668
  }
669
+ var OfflineMailLockedError = class extends Error {
670
+ constructor() {
671
+ super("Sign in to open the mail saved on this device");
672
+ this.name = "OfflineMailLockedError";
673
+ }
674
+ };
675
+ var sealer = createOfflineSealer("arbi-offline-mail-v1", {
676
+ locked: () => new OfflineMailLockedError()
677
+ });
678
+ var forgetOfflineMailKeys = sealer.forget;
679
+ var sealBytes = sealer.sealBytes;
680
+ var openBytes = sealer.openBytes;
681
+ var sealJson = sealer.sealJson;
682
+ var openJson = sealer.openJson;
683
+ var blind = sealer.blind;
684
+
685
+ // src/offline-store/store.ts
686
+ var DB_VERSION = 1;
687
+ var RECORDS = "records";
688
+ var META = "meta";
689
+ function promisify(request) {
690
+ return new Promise((resolve, reject) => {
691
+ request.onsuccess = () => resolve(request.result);
692
+ request.onerror = () => reject(request.error);
693
+ });
694
+ }
695
+ function createRecordStore(dbName) {
696
+ let dbPromise = null;
697
+ function openDB() {
698
+ if (dbPromise) return dbPromise;
699
+ dbPromise = new Promise((resolve, reject) => {
700
+ const request = indexedDB.open(dbName, DB_VERSION);
701
+ request.onerror = () => {
702
+ dbPromise = null;
703
+ reject(request.error);
704
+ };
705
+ request.onsuccess = () => {
706
+ const db = request.result;
707
+ db.onversionchange = () => {
708
+ db.close();
709
+ dbPromise = null;
710
+ };
711
+ resolve(db);
712
+ };
713
+ request.onupgradeneeded = () => {
714
+ const db = request.result;
715
+ if (!db.objectStoreNames.contains(RECORDS)) {
716
+ const records = db.createObjectStore(RECORDS, { keyPath: "key" });
717
+ records.createIndex("bucket", "bucket");
718
+ records.createIndex("kind", "kind");
719
+ }
720
+ if (!db.objectStoreNames.contains(META)) db.createObjectStore(META, { keyPath: "key" });
721
+ };
722
+ });
723
+ return dbPromise;
724
+ }
725
+ async function run(store2, mode, fn) {
726
+ const db = await openDB();
727
+ return promisify(fn(db.transaction(store2, mode).objectStore(store2)));
728
+ }
729
+ async function scan(pick) {
730
+ const db = await openDB();
731
+ const store2 = db.transaction(RECORDS, "readonly").objectStore(RECORDS);
732
+ return new Promise((resolve, reject) => {
733
+ const out = [];
734
+ const cursor = store2.openCursor();
735
+ cursor.onerror = () => reject(cursor.error);
736
+ cursor.onsuccess = () => {
737
+ const c = cursor.result;
738
+ if (!c) return resolve(out);
739
+ out.push(pick(c.value));
740
+ c.continue();
741
+ };
742
+ });
743
+ }
744
+ const self = {
745
+ dbName,
746
+ async putRecord(record) {
747
+ await run(RECORDS, "readwrite", (s) => s.put(record));
748
+ },
749
+ async getRecord(key) {
750
+ return await run(RECORDS, "readonly", (s) => s.get(key));
751
+ },
752
+ async hasRecord(key) {
753
+ return await run(RECORDS, "readonly", (s) => s.count(key)) > 0;
754
+ },
755
+ async deleteRecords(keys) {
756
+ if (keys.length === 0) return;
757
+ const db = await openDB();
758
+ const tx = db.transaction(RECORDS, "readwrite");
759
+ const store2 = tx.objectStore(RECORDS);
760
+ for (const key of keys) store2.delete(key);
761
+ await new Promise((resolve, reject) => {
762
+ tx.oncomplete = () => resolve();
763
+ tx.onerror = () => reject(tx.error);
764
+ tx.onabort = () => reject(tx.error);
765
+ });
766
+ },
767
+ async recordsInBucket(bucket) {
768
+ return await run(
769
+ RECORDS,
770
+ "readonly",
771
+ (s) => s.index("bucket").getAll(bucket)
772
+ );
773
+ },
774
+ async recordsOfKind(kind) {
775
+ return await run(
776
+ RECORDS,
777
+ "readonly",
778
+ (s) => s.index("kind").getAll(kind)
779
+ );
780
+ },
781
+ allRecordSizes() {
782
+ return scan(({ key, kind, size }) => ({ key, kind, size }));
783
+ },
784
+ allRecordAccess() {
785
+ return scan(({ key, kind, lastAccess }) => ({ key, kind, lastAccess }));
786
+ },
787
+ async touchRecord(key) {
788
+ const record = await self.getRecord(key);
789
+ if (record) await self.putRecord({ ...record, lastAccess: Date.now() });
790
+ },
791
+ async getMeta(key) {
792
+ const row = await run(META, "readonly", (s) => s.get(key));
793
+ return row?.value;
794
+ },
795
+ async setMeta(key, value) {
796
+ await run(META, "readwrite", (s) => s.put({ key, value }));
797
+ },
798
+ async deleteDatabase() {
799
+ const db = await dbPromise?.catch(() => null);
800
+ db?.close();
801
+ dbPromise = null;
802
+ await new Promise((resolve, reject) => {
803
+ const request = indexedDB.deleteDatabase(dbName);
804
+ request.onsuccess = () => resolve();
805
+ request.onerror = () => reject(request.error);
806
+ request.onblocked = () => {
807
+ };
808
+ });
809
+ }
810
+ };
811
+ return self;
812
+ }
813
+
814
+ // src/mail/offline/store.ts
815
+ var OFFLINE_MAIL_DB = "arbi-offline-mail";
816
+ var store = createRecordStore(OFFLINE_MAIL_DB);
817
+ var putRecord = store.putRecord;
818
+ var getRecord = store.getRecord;
819
+ var hasRecord = store.hasRecord;
820
+ var deleteRecords = store.deleteRecords;
821
+ var recordsInBucket = store.recordsInBucket;
822
+ var recordsOfKind = store.recordsOfKind;
823
+ var allRecordSizes = store.allRecordSizes;
824
+ var touchRecord = store.touchRecord;
825
+ var getMeta = store.getMeta;
826
+ var setMeta = store.setMeta;
827
+ var deleteOfflineMailDatabase = store.deleteDatabase;
828
+
829
+ // src/mail/offline/settings.ts
830
+ var DEFAULT_OFFLINE_MAIL_SETTINGS = {
831
+ enabled: true,
832
+ scope: "7d",
833
+ attachmentCapMb: 25,
834
+ quotaMb: 1024
835
+ };
836
+ var SCOPE_DAYS = {
837
+ "1d": 1,
838
+ "7d": 7,
839
+ "30d": 30,
840
+ "90d": 90
841
+ };
842
+ var DAY_MS = 24 * 60 * 60 * 1e3;
843
+ function offlineWindowStart(settings, now = Date.now()) {
844
+ return now - SCOPE_DAYS[settings.scope] * DAY_MS;
845
+ }
846
+ function inOfflineWindow(settings, receivedAt, now = Date.now()) {
847
+ const at = receivedAt ? Date.parse(receivedAt) || 0 : 0;
848
+ return settings.enabled && (!at || at >= offlineWindowStart(settings, now));
849
+ }
850
+ function normalize(saved) {
851
+ const merged = { ...DEFAULT_OFFLINE_MAIL_SETTINGS, ...saved };
852
+ const scope = merged.scope;
853
+ if (scope in SCOPE_DAYS) return merged;
854
+ const longer = scope === "365d" || scope === "all";
855
+ return { ...merged, scope: longer ? "90d" : DEFAULT_OFFLINE_MAIL_SETTINGS.scope };
856
+ }
857
+ var STORAGE_PREFIX = "arbi-offline-mail-settings:";
858
+ var SIGNED_OUT = { ...DEFAULT_OFFLINE_MAIL_SETTINGS, enabled: false };
859
+ function getOfflineMailSettings(userExtId) {
860
+ if (!userExtId) return SIGNED_OUT;
861
+ const key = STORAGE_PREFIX + userExtId;
862
+ try {
863
+ const raw = localStorage.getItem(key);
864
+ return raw ? normalize(JSON.parse(raw)) : DEFAULT_OFFLINE_MAIL_SETTINGS;
865
+ } catch {
866
+ return DEFAULT_OFFLINE_MAIL_SETTINGS;
867
+ }
868
+ }
869
+ function setOfflineMailSettings(userExtId, patch) {
870
+ const next = { ...getOfflineMailSettings(userExtId), ...patch };
871
+ if (userExtId) {
872
+ try {
873
+ localStorage.setItem(STORAGE_PREFIX + userExtId, JSON.stringify(next));
874
+ } catch {
875
+ }
876
+ }
877
+ notifyOfflineMailChange("settings");
878
+ return next;
879
+ }
880
+ var listeners3 = /* @__PURE__ */ new Set();
881
+ var CHANNEL = "arbi-offline-mail";
882
+ var channel = null;
883
+ function getChannel() {
884
+ if (channel || typeof BroadcastChannel === "undefined") return channel;
885
+ channel = new BroadcastChannel(CHANNEL);
886
+ channel.onmessage = (event) => {
887
+ for (const listener of listeners3) listener(event.data);
888
+ };
889
+ return channel;
890
+ }
891
+ function notifyOfflineMailChange(change) {
892
+ for (const listener of listeners3) listener(change);
893
+ try {
894
+ getChannel()?.postMessage(change);
895
+ } catch {
896
+ }
897
+ }
898
+ function onOfflineMailChange(listener) {
899
+ getChannel();
900
+ listeners3.add(listener);
901
+ return () => listeners3.delete(listener);
902
+ }
903
+
904
+ // src/mail/offline/wipe.ts
905
+ var OWNER_KEY = "owner";
906
+ async function wipeOfflineMail() {
907
+ forgetOfflineMailKeys();
908
+ await deleteOfflineMailDatabase();
909
+ notifyOfflineMailChange("wiped");
910
+ }
911
+ async function claimOfflineMail(userExtId) {
912
+ const owner = await getMeta(OWNER_KEY);
913
+ if (owner && owner !== userExtId) await wipeOfflineMail();
914
+ await setMeta(OWNER_KEY, userExtId);
915
+ }
669
916
  function toProfileView(profile) {
670
917
  return {
671
918
  ...profile,
@@ -801,6 +1048,8 @@ function arbiAccountClient(arbi, overrides = {}) {
801
1048
  } finally {
802
1049
  clearSealedDrafts();
803
1050
  clearChatArtifacts();
1051
+ await wipeOfflineMail().catch(() => {
1052
+ });
804
1053
  }
805
1054
  },
806
1055
  requestDeletion: () => arbi.account.requestDeletion(),
@@ -2473,6 +2722,6 @@ function useOpenCallMeetingChat() {
2473
2722
  );
2474
2723
  }
2475
2724
 
2476
- export { AUDIENCE_CHOICES, CALL_CAPTION_TOPIC, CALL_CHAT_MAX_CHARS, CALL_CHAT_TOPIC, CALL_MODERATION_TOPIC, CALL_RECORDING_TOPIC, CALL_TRANSCRIPTION_TOPIC, CALL_WEBINAR_TOPIC, CAPTION_MAX_CHARS, COMPOSITE_AUDIO_BITS_PER_SECOND, COMPOSITE_VIDEO_BITS_PER_SECOND, DEFAULT_JOIN_CHOICES, EMPTY_CALL_SESSION, EXPORT_SAMPLE_RATE, HISTORY_LIMIT, LIVE_SEGMENTER, MAX_AVATAR_FILE_BYTES, MUTED_DEDUPE_MS, PLAYBACK_LOOKAHEAD_MS, READ_ONLY_MEETING_TEXT, RECORDING_CHUNK_MS, RECORDING_SEGMENTER, SEGMENT_FRAME_MS, SEGMENT_ID_PATTERN, SEGMENT_PRE_ROLL_MS, SHORT_PIECE_MERGE_GAP_MS, SPEAKER_AUDIO_BITS_PER_SECOND, TrackUploader, UPLOAD_ATTEMPTS, UPLOAD_BACKOFF_MS, acceptRing, addConversationToList, appendToThread, applyAgentDmStatus, applyCallEvent, applyChatEvent, applyChatMessage, applyChatRead, applyChatUpdated, arbiAccountClient, buildMeetingChatBody, cachedChat, cachedChats, callLink, callMemberKeys, callSession, chatByExtId, chatHasLiveCall, chatLiveCallId, chatTranscriptRef, clearMeetingChatCache, clearTrackUploaders, clockTime, compositeFiles, compositeTrack, conversationKeyForCall, createLocalFeatureStore, createMutedNotifier, createTrackCutter, cutAtPauses, declineRing, decodeCallChatPacket, decodeCaptionPacket, decodeMono16k, decryptPart, deleteChatMessage, dropFromThread, encodeCallChatPacket, encodeCaptionPacket, encodeWav, encryptPart, ensureMeetingChat, entitlementRefusal, extensionFor, fetchPart, fileSafe, findConversation, floatToWav, formatTranscriptMarkdown, getOpenChat, hasRecordingTranscript, invalidateCall, invalidateConversationDetails, invalidateConversationLists, isConversationListKey, isConversationShared, isRecordingOver, isRecordingSegmentId, isRetryable, isWorkspaceGuestOf, joinFromPreJoin, knownMeetingChat, loadMeetingHistory, markRejoining, meetingChatRefFrom, meetingRefForCall, mergeChatLines, mutedNoticeFromEvent, mutedNoticeFromPacket, mutedNoticeText, myChatId, newPacketId, newSegmentId, newTrackKey, nextSeqAfter, onCallEvent, openCall, openQuestion, openRecording, parseWebinarPacket, partKey, partOffsetMs, partsDue, patchConversation, patchConversationList, persistMeetingMessage, persistTranscriptSegment, playheadAt, postRecordingDocsToThread, postTranscriptToThread, readLocalFeature, recordingFiles, recordingWindowsOf, rejoinAsAudience, removeChat, removeConversationFromLists, resetCallSession, resolveMeetingChat, saveRecordingFilesToThread, schedulePart, sealQuestionText, serverCallsExperimental, setOpenChat, sortTranscriptMessages, sortedParts, speakerTracks, speakerWav, splitIntoFiles, standalone, startChatCall, startContactsCall, startDmCall, startThreadCall, startsMediaFile, storeTranscriptSegment, stripSpeakerPrefix, supersedeLiveTranscript, supersededTranscriptLines, threadHasLiveCall, threadLiveCallId, threadTranscriptLines, threadTranscriptRef, threadTranscriptText, timelineDurationMs, timelineOf, toProfileView, trackUploaderFor, transcribeRecording, transcriptPersistRole, transcriptSegmentOf, unwrapTrackKey, upsertChat, useAccountClient, useAvatarCrop, useCall, useCallInviteLinks, useCallRecording, useCallRecordings, useCallSession, useCallTranscriptionAvailable, useCallsConfig, useCallsEnabled, useCanHostCalls, useEntitlements, useFeature, useFeatureSwitch, useInvalidateEntitlements, useIsEntitled, useMeetingReadOnly, useNameEditor, useOpenCallMeetingChat, useProfile, useRecordingActions, useRecordingWindows, useRevokeCallInviteLink, useSaveToThread, useServerCallsEnabled, useServerCallsExperimental, useUpdateProfile, useUpdateUserSettings, useUserSettings, wrapTrackKey, writeSamples };
2477
- //# sourceMappingURL=chunk-73ENECAT.js.map
2478
- //# sourceMappingURL=chunk-73ENECAT.js.map
2725
+ export { AUDIENCE_CHOICES, CALL_CAPTION_TOPIC, CALL_CHAT_MAX_CHARS, CALL_CHAT_TOPIC, CALL_MODERATION_TOPIC, CALL_RECORDING_TOPIC, CALL_TRANSCRIPTION_TOPIC, CALL_WEBINAR_TOPIC, CAPTION_MAX_CHARS, COMPOSITE_AUDIO_BITS_PER_SECOND, COMPOSITE_VIDEO_BITS_PER_SECOND, DEFAULT_JOIN_CHOICES, EMPTY_CALL_SESSION, EXPORT_SAMPLE_RATE, HISTORY_LIMIT, LIVE_SEGMENTER, MAX_AVATAR_FILE_BYTES, MUTED_DEDUPE_MS, OFFLINE_MAIL_DB, PLAYBACK_LOOKAHEAD_MS, READ_ONLY_MEETING_TEXT, RECORDING_CHUNK_MS, RECORDING_SEGMENTER, SCOPE_DAYS, SEGMENT_FRAME_MS, SEGMENT_ID_PATTERN, SEGMENT_PRE_ROLL_MS, SHORT_PIECE_MERGE_GAP_MS, SPEAKER_AUDIO_BITS_PER_SECOND, TrackUploader, UPLOAD_ATTEMPTS, UPLOAD_BACKOFF_MS, acceptRing, addConversationToList, allRecordSizes, appendToThread, applyAgentDmStatus, applyCallEvent, applyChatEvent, applyChatMessage, applyChatRead, applyChatUpdated, arbiAccountClient, blind, buildMeetingChatBody, cachedChat, cachedChats, callLink, callMemberKeys, callSession, chatByExtId, chatHasLiveCall, chatLiveCallId, chatTranscriptRef, claimOfflineMail, clearMeetingChatCache, clearTrackUploaders, clockTime, compositeFiles, compositeTrack, conversationKeyForCall, createLocalFeatureStore, createMutedNotifier, createRecordStore, createTrackCutter, cutAtPauses, declineRing, decodeCallChatPacket, decodeCaptionPacket, decodeMono16k, decryptPart, deleteChatMessage, deleteRecords, dropFromThread, encodeCallChatPacket, encodeCaptionPacket, encodeWav, encryptPart, ensureMeetingChat, entitlementRefusal, extensionFor, fetchPart, fileSafe, findConversation, floatToWav, formatTranscriptMarkdown, getMeta, getOfflineMailSettings, getOpenChat, getRecord, hasRecord, hasRecordingTranscript, inOfflineWindow, invalidateCall, invalidateConversationDetails, invalidateConversationLists, isConversationListKey, isConversationShared, isRecordingOver, isRecordingSegmentId, isRetryable, isWorkspaceGuestOf, joinFromPreJoin, knownMeetingChat, loadMeetingHistory, markRejoining, meetingChatRefFrom, meetingRefForCall, mergeChatLines, mutedNoticeFromEvent, mutedNoticeFromPacket, mutedNoticeText, myChatId, newPacketId, newSegmentId, newTrackKey, nextSeqAfter, notifyOfflineMailChange, offlineWindowStart, onCallEvent, onOfflineMailChange, openBytes, openCall, openJson, openQuestion, openRecording, parseWebinarPacket, partKey, partOffsetMs, partsDue, patchConversation, patchConversationList, persistMeetingMessage, persistTranscriptSegment, playheadAt, postRecordingDocsToThread, postTranscriptToThread, putRecord, readLocalFeature, recordingFiles, recordingWindowsOf, recordsInBucket, recordsOfKind, rejoinAsAudience, removeChat, removeConversationFromLists, resetCallSession, resolveMeetingChat, saveRecordingFilesToThread, schedulePart, sealBytes, sealJson, sealQuestionText, serverCallsExperimental, setMeta, setOfflineMailSettings, setOpenChat, sortTranscriptMessages, sortedParts, speakerTracks, speakerWav, splitIntoFiles, standalone, startChatCall, startContactsCall, startDmCall, startThreadCall, startsMediaFile, storeTranscriptSegment, stripSpeakerPrefix, supersedeLiveTranscript, supersededTranscriptLines, threadHasLiveCall, threadLiveCallId, threadTranscriptLines, threadTranscriptRef, threadTranscriptText, timelineDurationMs, timelineOf, toProfileView, touchRecord, trackUploaderFor, transcribeRecording, transcriptPersistRole, transcriptSegmentOf, unwrapTrackKey, upsertChat, useAccountClient, useAvatarCrop, useCall, useCallInviteLinks, useCallRecording, useCallRecordings, useCallSession, useCallTranscriptionAvailable, useCallsConfig, useCallsEnabled, useCanHostCalls, useEntitlements, useFeature, useFeatureSwitch, useInvalidateEntitlements, useIsEntitled, useMeetingReadOnly, useNameEditor, useOpenCallMeetingChat, useProfile, useRecordingActions, useRecordingWindows, useRevokeCallInviteLink, useSaveToThread, useServerCallsEnabled, useServerCallsExperimental, useUpdateProfile, useUpdateUserSettings, useUserSettings, wipeOfflineMail, wrapTrackKey, writeSamples };
2726
+ //# sourceMappingURL=chunk-RIPYDSRJ.js.map
2727
+ //# sourceMappingURL=chunk-RIPYDSRJ.js.map