diff --git a/excalidraw-app/App.tsx b/excalidraw-app/App.tsx index 438f86a3..c822540f 100644 --- a/excalidraw-app/App.tsx +++ b/excalidraw-app/App.tsx @@ -70,7 +70,7 @@ import { restore, restoreAppState } from "../packages/excalidraw/data/restore"; import { updateStaleImageStatuses } from "./data/FileManager"; import { newElementWith } from "../packages/excalidraw/element/mutateElement"; import { isInitializedImageElement } from "../packages/excalidraw/element/typeChecks"; -import { loadFilesFromFirebase } from "./data/firebase"; +import { loadFilesFromDatabase } from "./data/database"; import { LibraryIndexedDBAdapter, LibraryLocalStorageMigrationAdapter, @@ -394,7 +394,7 @@ const ExcalidrawWrapper = () => { if (collabAPI?.isCollaborating()) { if (data.scene.elements) { collabAPI - .fetchImageFilesFromFirebase({ + .fetchImageFiles({ elements: data.scene.elements, forceFetchFiles: true, }) @@ -417,7 +417,7 @@ const ExcalidrawWrapper = () => { }, [] as FileId[]) || []; if (data.isExternalScene) { - loadFilesFromFirebase( + loadFilesFromDatabase( `${FIREBASE_STORAGE_PREFIXES.shareLinkFiles}/${data.id}`, data.key, fileIds, diff --git a/excalidraw-app/collab/Collab.tsx b/excalidraw-app/collab/Collab.tsx index 7059a67c..e74250b7 100644 --- a/excalidraw-app/collab/Collab.tsx +++ b/excalidraw-app/collab/Collab.tsx @@ -46,12 +46,12 @@ import { getSyncableElements, } from "../data"; import { - isSavedToFirebase, - loadFilesFromFirebase, - loadFromFirebase, - saveFilesToFirebase, - saveToFirebase, -} from "../data/firebase"; + isSavedToDatabase, + loadFilesFromDatabase, + loadFromDatabase, + saveFilesToDatabase, + saveToDatabase, +} from "../data/database"; import { importUsernameFromLocalStorage, saveUsernameToLocalStorage, @@ -111,7 +111,7 @@ export interface CollabAPI { startCollaboration: CollabInstance["startCollaboration"]; stopCollaboration: CollabInstance["stopCollaboration"]; syncElements: CollabInstance["syncElements"]; - fetchImageFilesFromFirebase: CollabInstance["fetchImageFilesFromFirebase"]; + fetchImageFiles: CollabInstance["fetchImageFiles"]; setUsername: CollabInstance["setUsername"]; getUsername: CollabInstance["getUsername"]; getActiveRoomLink: CollabInstance["getActiveRoomLink"]; @@ -149,7 +149,7 @@ class Collab extends PureComponent { throw new AbortError(); } - return loadFilesFromFirebase(`files/rooms/${roomId}`, roomKey, fileIds); + return loadFilesFromDatabase(`files/rooms/${roomId}`, roomKey, fileIds); }, saveFiles: async ({ addedFiles }) => { const { roomId, roomKey } = this.portal; @@ -157,7 +157,7 @@ class Collab extends PureComponent { throw new AbortError(); } - return saveFilesToFirebase({ + return saveFilesToDatabase({ prefix: `${FIREBASE_STORAGE_PREFIXES.collabFiles}/${roomId}`, files: await encodeFilesForUpload({ files: addedFiles, @@ -201,7 +201,7 @@ class Collab extends PureComponent { onPointerUpdate: this.onPointerUpdate, startCollaboration: this.startCollaboration, syncElements: this.syncElements, - fetchImageFilesFromFirebase: this.fetchImageFilesFromFirebase, + fetchImageFiles: this.fetchImageFiles, stopCollaboration: this.stopCollaboration, setUsername: this.setUsername, getUsername: this.getUsername, @@ -265,21 +265,21 @@ class Collab extends PureComponent { if ( this.isCollaborating() && (this.fileManager.shouldPreventUnload(syncableElements) || - !isSavedToFirebase(this.portal, syncableElements)) + !isSavedToDatabase(this.portal, syncableElements)) ) { // this won't run in time if user decides to leave the site, but // the purpose is to run in immediately after user decides to stay - this.saveCollabRoomToFirebase(syncableElements); + this.saveCollabRoom(syncableElements); preventUnload(event); } }); - saveCollabRoomToFirebase = async ( + saveCollabRoom = async ( syncableElements: readonly SyncableExcalidrawElement[], ) => { try { - const storedElements = await saveToFirebase( + const storedElements = await saveToDatabase( this.portal, syncableElements, this.excalidrawAPI.getAppState(), @@ -318,11 +318,11 @@ class Collab extends PureComponent { stopCollaboration = (keepRemoteState = true) => { this.queueBroadcastAllElements.cancel(); - this.queueSaveToFirebase.cancel(); + this.queueSaveToDatabase.cancel(); this.loadImageFiles.cancel(); this.resetErrorIndicator(true); - this.saveCollabRoomToFirebase( + this.saveCollabRoom( getSyncableElements( this.excalidrawAPI.getSceneElementsIncludingDeleted(), ), @@ -379,7 +379,7 @@ class Collab extends PureComponent { } }; - private fetchImageFilesFromFirebase = async (opts: { + private fetchImageFiles = async (opts: { elements: readonly ExcalidrawElement[]; /** * Indicates whether to fetch files that are errored or pending and older @@ -513,7 +513,7 @@ class Collab extends PureComponent { storeAction: StoreAction.UPDATE, }); - this.saveCollabRoomToFirebase(getSyncableElements(elements)); + this.saveCollabRoom(getSyncableElements(elements)); } // fallback in case you're not alone in the room but still don't receive @@ -547,7 +547,7 @@ class Collab extends PureComponent { const reconciledElements = this._reconcileElements(remoteElements); this.handleRemoteSceneUpdate(reconciledElements); - // noop if already resolved via init from firebase + // noop if already resolved via init from database scenePromise.resolve({ elements: reconciledElements, scrollToContent: true, @@ -678,7 +678,7 @@ class Collab extends PureComponent { this.excalidrawAPI.resetScene(); try { - const elements = await loadFromFirebase( + const elements = await loadFromDatabase( roomLinkData.roomId, roomLinkData.roomKey, this.portal.socket, @@ -730,7 +730,7 @@ class Collab extends PureComponent { private loadImageFiles = throttle(async () => { const { loadedFiles, erroredFiles } = - await this.fetchImageFilesFromFirebase({ + await this.fetchImageFiles({ elements: this.excalidrawAPI.getSceneElementsIncludingDeleted(), }); @@ -896,7 +896,7 @@ class Collab extends PureComponent { syncElements = (elements: readonly OrderedExcalidrawElement[]) => { this.broadcastElements(elements); - this.queueSaveToFirebase(); + this.queueSaveToDatabase(); }; queueBroadcastAllElements = throttle(() => { @@ -913,10 +913,10 @@ class Collab extends PureComponent { this.setLastBroadcastedOrReceivedSceneVersion(newVersion); }, SYNC_FULL_SCENE_INTERVAL_MS); - queueSaveToFirebase = throttle( + queueSaveToDatabase = throttle( () => { if (this.portal.socketInitialized) { - this.saveCollabRoomToFirebase( + this.saveCollabRoom( getSyncableElements( this.excalidrawAPI.getSceneElementsIncludingDeleted(), ), diff --git a/excalidraw-app/data/firebase.ts b/excalidraw-app/data/database.ts similarity index 97% rename from excalidraw-app/data/firebase.ts rename to excalidraw-app/data/database.ts index c73018ac..b6d6ff66 100644 --- a/excalidraw-app/data/firebase.ts +++ b/excalidraw-app/data/database.ts @@ -96,7 +96,7 @@ const loadFirestore = async () => { return firebase; }; -export const loadFirebaseStorage = async () => { +const loadFirebaseStorage = async () => { const firebase = await _getFirebase(); if (!firebaseStoragePromise) { firebaseStoragePromise = import( @@ -154,7 +154,7 @@ class FirebaseSceneVersionCache { }; } -export const isSavedToFirebase = ( +export const isSavedToDatabase = ( portal: Portal, elements: readonly ExcalidrawElement[], ): boolean => { @@ -168,7 +168,7 @@ export const isSavedToFirebase = ( return true; }; -export const saveFilesToFirebase = async ({ +export const saveFilesToDatabase = async ({ prefix, files, }: { @@ -220,7 +220,7 @@ const createFirebaseSceneDocument = async ( } as FirebaseStoredScene; }; -export const saveToFirebase = async ( +export const saveToDatabase = async ( portal: Portal, elements: readonly SyncableExcalidrawElement[], appState: AppState, @@ -231,7 +231,7 @@ export const saveToFirebase = async ( !roomId || !roomKey || !socket || - isSavedToFirebase(portal, elements) + isSavedToDatabase(portal, elements) ) { return null; } @@ -289,7 +289,7 @@ export const saveToFirebase = async ( return storedElements; }; -export const loadFromFirebase = async ( +export const loadFromDatabase = async ( roomId: string, roomKey: string, socket: Socket | null, @@ -314,7 +314,7 @@ export const loadFromFirebase = async ( return elements; }; -export const loadFilesFromFirebase = async ( +export const loadFilesFromDatabase = async ( prefix: string, decryptionKey: string, filesIds: readonly FileId[], diff --git a/excalidraw-app/data/index.ts b/excalidraw-app/data/index.ts index ba7df82b..6f2f039e 100644 --- a/excalidraw-app/data/index.ts +++ b/excalidraw-app/data/index.ts @@ -35,7 +35,7 @@ import { ROOM_ID_BYTES, } from "../app_constants"; import { encodeFilesForUpload } from "./FileManager"; -import { saveFilesToFirebase } from "./firebase"; +import { saveFilesToDatabase } from "./database"; export type SyncableExcalidrawElement = OrderedExcalidrawElement & MakeBrand<"SyncableExcalidrawElement">; @@ -316,7 +316,7 @@ export const exportToBackend = async ( url.hash = `json=${json.id},${encryptionKey}`; const urlString = url.toString(); - await saveFilesToFirebase({ + await saveFilesToDatabase({ prefix: `/files/shareLinks/${json.id}`, files: filesToUpload, }); diff --git a/excalidraw-app/tests/collab.test.tsx b/excalidraw-app/tests/collab.test.tsx index 4a712f78..7b99d18a 100644 --- a/excalidraw-app/tests/collab.test.tsx +++ b/excalidraw-app/tests/collab.test.tsx @@ -26,25 +26,25 @@ Object.defineProperty(window, "crypto", { }, }); -vi.mock("../../excalidraw-app/data/firebase.ts", () => { - const loadFromFirebase = async () => null; - const saveToFirebase = () => {}; - const isSavedToFirebase = () => true; - const loadFilesFromFirebase = async () => ({ +vi.mock("../../excalidraw-app/data/database.ts", () => { + const loadFromDatabase = async () => null; + const saveToDatabase = () => {}; + const isSavedToDatabase = () => true; + const loadFilesFromDatabase = async () => ({ loadedFiles: [], erroredFiles: [], }); - const saveFilesToFirebase = async () => ({ + const saveFilesToDatabase = async () => ({ savedFiles: new Map(), erroredFiles: new Map(), }); return { - loadFromFirebase, - saveToFirebase, - isSavedToFirebase, - loadFilesFromFirebase, - saveFilesToFirebase, + loadFromDatabase, + saveToDatabase, + isSavedToDatabase, + loadFilesFromDatabase, + saveFilesToDatabase, }; });