From 696b82b9d392e146db5894462aeb56d91ac2a92c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20S=C3=B3jko?= Date: Thu, 4 Aug 2022 16:21:46 +0200 Subject: [PATCH] feat(files): refactor circular deps --- packages/files/package.json | 1 - .../files/src/Domain/Api/DirectoryHandle.ts | 3 ++ .../files/src/Domain/Api/FileHandleRead.ts | 3 ++ .../src/Domain/Api/FileHandleReadWrite.ts | 4 ++ .../src/Domain/Api}/FileSystemApi.ts | 18 ++----- .../src/Domain/Api/FileSystemNoSelection.ts | 1 + .../files/src/Domain/Api/FileSystemResult.ts | 1 + .../src/Domain/Api}/FilesApiInterface.ts | 0 .../Domain/Device/FileBackupMetadataFile.ts | 8 +++ .../Domain/Device/FileBackupsConstantsV1.ts | 5 ++ .../src/Domain/Device/FileBackupsDevice.ts | 21 ++++++++ .../src/Domain/Device/FileBackupsMapping.ts | 17 +++++++ .../Operations/DownloadAndDecrypt.spec.ts | 2 +- .../Domain/Operations/DownloadAndDecrypt.ts | 2 +- .../Operations/EncryptAndUpload.spec.ts | 3 +- .../src/Domain/Operations/EncryptAndUpload.ts | 2 +- .../Domain/Service/FilesClientInterface.ts | 5 +- .../Service/ReadAndDecryptBackupFile.ts | 3 +- .../src/Domain/UseCase/FileDownloader.spec.ts | 2 +- .../src/Domain/UseCase/FileDownloader.ts | 2 +- .../src/Domain/UseCase/FileUploader.spec.ts | 2 +- .../files/src/Domain/UseCase/FileUploader.ts | 2 +- packages/files/src/Domain/index.ts | 14 ++++- packages/services/package.json | 1 + .../src/Domain/Api/ApiServiceInterface.ts | 2 +- .../Application/ApplicationInterface.ts | 11 ++++ .../src/Domain/Backups/BackupService.ts | 16 +++--- .../Component/ComponentManagerInterface.ts | 1 + .../src/Domain/Device/FileBackupsDevice.ts | 51 ------------------- .../src/Domain/Files}/FileService.spec.ts | 0 .../src/Domain/Files}/FileService.ts | 14 ++--- packages/services/src/Domain/index.ts | 3 +- yarn.lock | 4 +- 33 files changed, 126 insertions(+), 98 deletions(-) create mode 100644 packages/files/src/Domain/Api/DirectoryHandle.ts create mode 100644 packages/files/src/Domain/Api/FileHandleRead.ts create mode 100644 packages/files/src/Domain/Api/FileHandleReadWrite.ts rename packages/{services/src/Domain/FileSystem => files/src/Domain/Api}/FileSystemApi.ts (70%) create mode 100644 packages/files/src/Domain/Api/FileSystemNoSelection.ts create mode 100644 packages/files/src/Domain/Api/FileSystemResult.ts rename packages/{services/src/Domain/Files => files/src/Domain/Api}/FilesApiInterface.ts (100%) create mode 100644 packages/files/src/Domain/Device/FileBackupMetadataFile.ts create mode 100644 packages/files/src/Domain/Device/FileBackupsConstantsV1.ts create mode 100644 packages/files/src/Domain/Device/FileBackupsDevice.ts create mode 100644 packages/files/src/Domain/Device/FileBackupsMapping.ts rename packages/{files => services}/src/Domain/Backups/BackupService.ts (91%) delete mode 100644 packages/services/src/Domain/Device/FileBackupsDevice.ts rename packages/{files/src/Domain/Service => services/src/Domain/Files}/FileService.spec.ts (100%) rename packages/{files/src/Domain/Service => services/src/Domain/Files}/FileService.ts (95%) diff --git a/packages/files/package.json b/packages/files/package.json index 863e776c4..305839e9e 100644 --- a/packages/files/package.json +++ b/packages/files/package.json @@ -35,7 +35,6 @@ "@standardnotes/filepicker": "workspace:*", "@standardnotes/models": "workspace:*", "@standardnotes/responses": "workspace:*", - "@standardnotes/services": "workspace:*", "@standardnotes/sncrypto-common": "workspace:*", "@standardnotes/utils": "workspace:*", "reflect-metadata": "^0.1.13" diff --git a/packages/files/src/Domain/Api/DirectoryHandle.ts b/packages/files/src/Domain/Api/DirectoryHandle.ts new file mode 100644 index 000000000..3409eb86f --- /dev/null +++ b/packages/files/src/Domain/Api/DirectoryHandle.ts @@ -0,0 +1,3 @@ +export interface DirectoryHandle { + nativeHandle: unknown +} diff --git a/packages/files/src/Domain/Api/FileHandleRead.ts b/packages/files/src/Domain/Api/FileHandleRead.ts new file mode 100644 index 000000000..b3ba6e3c7 --- /dev/null +++ b/packages/files/src/Domain/Api/FileHandleRead.ts @@ -0,0 +1,3 @@ +export interface FileHandleRead { + nativeHandle: unknown +} diff --git a/packages/files/src/Domain/Api/FileHandleReadWrite.ts b/packages/files/src/Domain/Api/FileHandleReadWrite.ts new file mode 100644 index 000000000..ad96fd664 --- /dev/null +++ b/packages/files/src/Domain/Api/FileHandleReadWrite.ts @@ -0,0 +1,4 @@ +export interface FileHandleReadWrite { + nativeHandle: unknown + writableStream: unknown +} diff --git a/packages/services/src/Domain/FileSystem/FileSystemApi.ts b/packages/files/src/Domain/Api/FileSystemApi.ts similarity index 70% rename from packages/services/src/Domain/FileSystem/FileSystemApi.ts rename to packages/files/src/Domain/Api/FileSystemApi.ts index 882461f7a..743c697d5 100644 --- a/packages/services/src/Domain/FileSystem/FileSystemApi.ts +++ b/packages/files/src/Domain/Api/FileSystemApi.ts @@ -1,16 +1,8 @@ -export interface DirectoryHandle { - nativeHandle: unknown -} -export interface FileHandleReadWrite { - nativeHandle: unknown - writableStream: unknown -} -export interface FileHandleRead { - nativeHandle: unknown -} - -export type FileSystemResult = 'aborted' | 'success' | 'failed' -export type FileSystemNoSelection = 'aborted' | 'failed' +import { DirectoryHandle } from './DirectoryHandle' +import { FileHandleRead } from './FileHandleRead' +import { FileHandleReadWrite } from './FileHandleReadWrite' +import { FileSystemNoSelection } from './FileSystemNoSelection' +import { FileSystemResult } from './FileSystemResult' export interface FileSystemApi { selectDirectory(): Promise diff --git a/packages/files/src/Domain/Api/FileSystemNoSelection.ts b/packages/files/src/Domain/Api/FileSystemNoSelection.ts new file mode 100644 index 000000000..90a38474c --- /dev/null +++ b/packages/files/src/Domain/Api/FileSystemNoSelection.ts @@ -0,0 +1 @@ +export type FileSystemNoSelection = 'aborted' | 'failed' diff --git a/packages/files/src/Domain/Api/FileSystemResult.ts b/packages/files/src/Domain/Api/FileSystemResult.ts new file mode 100644 index 000000000..39469b39b --- /dev/null +++ b/packages/files/src/Domain/Api/FileSystemResult.ts @@ -0,0 +1 @@ +export type FileSystemResult = 'aborted' | 'success' | 'failed' diff --git a/packages/services/src/Domain/Files/FilesApiInterface.ts b/packages/files/src/Domain/Api/FilesApiInterface.ts similarity index 100% rename from packages/services/src/Domain/Files/FilesApiInterface.ts rename to packages/files/src/Domain/Api/FilesApiInterface.ts diff --git a/packages/files/src/Domain/Device/FileBackupMetadataFile.ts b/packages/files/src/Domain/Device/FileBackupMetadataFile.ts new file mode 100644 index 000000000..414fbffbf --- /dev/null +++ b/packages/files/src/Domain/Device/FileBackupMetadataFile.ts @@ -0,0 +1,8 @@ +import { BackupFileEncryptedContextualPayload } from '@standardnotes/models' + +export interface FileBackupMetadataFile { + info: Record + file: BackupFileEncryptedContextualPayload + itemsKey: BackupFileEncryptedContextualPayload + version: '1.0.0' +} diff --git a/packages/files/src/Domain/Device/FileBackupsConstantsV1.ts b/packages/files/src/Domain/Device/FileBackupsConstantsV1.ts new file mode 100644 index 000000000..e544f893c --- /dev/null +++ b/packages/files/src/Domain/Device/FileBackupsConstantsV1.ts @@ -0,0 +1,5 @@ +export const FileBackupsConstantsV1 = { + Version: '1.0.0', + MetadataFileName: 'metadata.sn.json', + BinaryFileName: 'file.encrypted', +} diff --git a/packages/files/src/Domain/Device/FileBackupsDevice.ts b/packages/files/src/Domain/Device/FileBackupsDevice.ts new file mode 100644 index 000000000..1b81f6353 --- /dev/null +++ b/packages/files/src/Domain/Device/FileBackupsDevice.ts @@ -0,0 +1,21 @@ +import { Uuid } from '@standardnotes/common' +import { FileBackupsMapping } from './FileBackupsMapping' + +export interface FileBackupsDevice { + getFilesBackupsMappingFile(): Promise + saveFilesBackupsFile( + uuid: Uuid, + metaFile: string, + downloadRequest: { + chunkSizes: number[] + valetToken: string + url: string + }, + ): Promise<'success' | 'failed'> + isFilesBackupsEnabled(): Promise + enableFilesBackups(): Promise + disableFilesBackups(): Promise + changeFilesBackupsLocation(): Promise + getFilesBackupsLocation(): Promise + openFilesBackupsLocation(): Promise +} diff --git a/packages/files/src/Domain/Device/FileBackupsMapping.ts b/packages/files/src/Domain/Device/FileBackupsMapping.ts new file mode 100644 index 000000000..eac2fc6ba --- /dev/null +++ b/packages/files/src/Domain/Device/FileBackupsMapping.ts @@ -0,0 +1,17 @@ +import { Uuid } from '@standardnotes/common' +import { FileBackupsConstantsV1 } from './FileBackupsConstantsV1' + +export interface FileBackupsMapping { + version: typeof FileBackupsConstantsV1.Version + files: Record< + Uuid, + { + backedUpOn: Date + absolutePath: string + relativePath: string + metadataFileName: typeof FileBackupsConstantsV1.MetadataFileName + binaryFileName: typeof FileBackupsConstantsV1.BinaryFileName + version: typeof FileBackupsConstantsV1.Version + } + > +} diff --git a/packages/files/src/Domain/Operations/DownloadAndDecrypt.spec.ts b/packages/files/src/Domain/Operations/DownloadAndDecrypt.spec.ts index c0e4f79f0..ba26d4304 100644 --- a/packages/files/src/Domain/Operations/DownloadAndDecrypt.spec.ts +++ b/packages/files/src/Domain/Operations/DownloadAndDecrypt.spec.ts @@ -1,9 +1,9 @@ import { sleep } from '@standardnotes/utils' import { PureCryptoInterface, StreamEncryptor } from '@standardnotes/sncrypto-common' import { FileDownloadProgress } from '../Types/FileDownloadProgress' -import { FilesApiInterface } from '@standardnotes/services' import { DownloadAndDecryptFileOperation } from './DownloadAndDecrypt' import { FileContent } from '@standardnotes/models' +import { FilesApiInterface } from '../Api/FilesApiInterface' describe('download and decrypt', () => { let apiService: FilesApiInterface diff --git a/packages/files/src/Domain/Operations/DownloadAndDecrypt.ts b/packages/files/src/Domain/Operations/DownloadAndDecrypt.ts index a02c1b4aa..083d78593 100644 --- a/packages/files/src/Domain/Operations/DownloadAndDecrypt.ts +++ b/packages/files/src/Domain/Operations/DownloadAndDecrypt.ts @@ -2,10 +2,10 @@ import { ClientDisplayableError } from '@standardnotes/responses' import { AbortFunction, FileDownloader } from '../UseCase/FileDownloader' import { FileDecryptor } from '../UseCase/FileDecryptor' import { FileDownloadProgress } from '../Types/FileDownloadProgress' -import { FilesApiInterface } from '@standardnotes/services' import { PureCryptoInterface } from '@standardnotes/sncrypto-common' import { FileContent } from '@standardnotes/models' import { DecryptedBytes, EncryptedBytes } from '@standardnotes/filepicker' +import { FilesApiInterface } from '../Api/FilesApiInterface' export type DownloadAndDecryptResult = { success: boolean; error?: ClientDisplayableError; aborted?: boolean } diff --git a/packages/files/src/Domain/Operations/EncryptAndUpload.spec.ts b/packages/files/src/Domain/Operations/EncryptAndUpload.spec.ts index be7322b8c..0aa246f70 100644 --- a/packages/files/src/Domain/Operations/EncryptAndUpload.spec.ts +++ b/packages/files/src/Domain/Operations/EncryptAndUpload.spec.ts @@ -1,8 +1,9 @@ import { EncryptAndUploadFileOperation } from './EncryptAndUpload' import { PureCryptoInterface, StreamEncryptor } from '@standardnotes/sncrypto-common' -import { FilesApiInterface } from '@standardnotes/services' import { FileContent } from '@standardnotes/models' +import { FilesApiInterface } from '../Api/FilesApiInterface' + describe('encrypt and upload', () => { let apiService: FilesApiInterface let operation: EncryptAndUploadFileOperation diff --git a/packages/files/src/Domain/Operations/EncryptAndUpload.ts b/packages/files/src/Domain/Operations/EncryptAndUpload.ts index 4d7a64d16..71af93a31 100644 --- a/packages/files/src/Domain/Operations/EncryptAndUpload.ts +++ b/packages/files/src/Domain/Operations/EncryptAndUpload.ts @@ -1,10 +1,10 @@ import { FileUploadProgress } from '../Types/FileUploadProgress' import { FileUploadResult } from '../Types/FileUploadResult' -import { FilesApiInterface } from '@standardnotes/services' import { FileUploader } from '../UseCase/FileUploader' import { PureCryptoInterface } from '@standardnotes/sncrypto-common' import { FileEncryptor } from '../UseCase/FileEncryptor' import { FileContent } from '@standardnotes/models' +import { FilesApiInterface } from '../Api/FilesApiInterface' export class EncryptAndUploadFileOperation { public readonly encryptedChunkSizes: number[] = [] diff --git a/packages/files/src/Domain/Service/FilesClientInterface.ts b/packages/files/src/Domain/Service/FilesClientInterface.ts index b9605aec1..6c7a157f1 100644 --- a/packages/files/src/Domain/Service/FilesClientInterface.ts +++ b/packages/files/src/Domain/Service/FilesClientInterface.ts @@ -2,7 +2,10 @@ import { EncryptAndUploadFileOperation } from '../Operations/EncryptAndUpload' import { FileItem, FileMetadata } from '@standardnotes/models' import { ClientDisplayableError } from '@standardnotes/responses' import { FileDownloadProgress } from '../Types/FileDownloadProgress' -import { FileSystemApi, FileBackupMetadataFile, FileHandleRead, FileSystemNoSelection } from '@standardnotes/services' +import { FileSystemApi } from '../Api/FileSystemApi' +import { FileHandleRead } from '../Api/FileHandleRead' +import { FileSystemNoSelection } from '../Api/FileSystemNoSelection' +import { FileBackupMetadataFile } from '../Device/FileBackupMetadataFile' export interface FilesClientInterface { beginNewFileUpload(sizeInBytes: number): Promise diff --git a/packages/files/src/Domain/Service/ReadAndDecryptBackupFile.ts b/packages/files/src/Domain/Service/ReadAndDecryptBackupFile.ts index a0f889279..721078461 100644 --- a/packages/files/src/Domain/Service/ReadAndDecryptBackupFile.ts +++ b/packages/files/src/Domain/Service/ReadAndDecryptBackupFile.ts @@ -1,8 +1,9 @@ import { FileContent } from '@standardnotes/models' -import { FileSystemApi, FileHandleRead } from '@standardnotes/services' import { PureCryptoInterface } from '@standardnotes/sncrypto-common' import { OrderedByteChunker } from '@standardnotes/filepicker' import { FileDecryptor } from '../UseCase/FileDecryptor' +import { FileSystemApi } from '../Api/FileSystemApi' +import { FileHandleRead } from '../Api/FileHandleRead' export async function readAndDecryptBackupFile( fileHandle: FileHandleRead, diff --git a/packages/files/src/Domain/UseCase/FileDownloader.spec.ts b/packages/files/src/Domain/UseCase/FileDownloader.spec.ts index 8e90dabd9..2ef9d3cca 100644 --- a/packages/files/src/Domain/UseCase/FileDownloader.spec.ts +++ b/packages/files/src/Domain/UseCase/FileDownloader.spec.ts @@ -1,5 +1,5 @@ import { FileContent } from '@standardnotes/models' -import { FilesApiInterface } from '@standardnotes/services' +import { FilesApiInterface } from '../Api/FilesApiInterface' import { FileDownloader } from './FileDownloader' describe('file downloader', () => { diff --git a/packages/files/src/Domain/UseCase/FileDownloader.ts b/packages/files/src/Domain/UseCase/FileDownloader.ts index 8c60b6f5b..061236000 100644 --- a/packages/files/src/Domain/UseCase/FileDownloader.ts +++ b/packages/files/src/Domain/UseCase/FileDownloader.ts @@ -1,8 +1,8 @@ import { ClientDisplayableError } from '@standardnotes/responses' import { FileDownloadProgress } from '../Types/FileDownloadProgress' -import { FilesApiInterface } from '@standardnotes/services' import { Deferred } from '@standardnotes/utils' import { FileContent } from '@standardnotes/models' +import { FilesApiInterface } from '../Api/FilesApiInterface' export type AbortSignal = 'aborted' export type AbortFunction = () => void diff --git a/packages/files/src/Domain/UseCase/FileUploader.spec.ts b/packages/files/src/Domain/UseCase/FileUploader.spec.ts index 54e3102b5..4a31d101e 100644 --- a/packages/files/src/Domain/UseCase/FileUploader.spec.ts +++ b/packages/files/src/Domain/UseCase/FileUploader.spec.ts @@ -1,4 +1,4 @@ -import { FilesApiInterface } from '@standardnotes/services' +import { FilesApiInterface } from '../Api/FilesApiInterface' import { FileUploader } from './FileUploader' describe('file uploader', () => { diff --git a/packages/files/src/Domain/UseCase/FileUploader.ts b/packages/files/src/Domain/UseCase/FileUploader.ts index a6f0dc1c9..d1c3acaa2 100644 --- a/packages/files/src/Domain/UseCase/FileUploader.ts +++ b/packages/files/src/Domain/UseCase/FileUploader.ts @@ -1,4 +1,4 @@ -import { FilesApiInterface } from '@standardnotes/services' +import { FilesApiInterface } from '../Api/FilesApiInterface' export class FileUploader { constructor(private apiService: FilesApiInterface) {} diff --git a/packages/files/src/Domain/index.ts b/packages/files/src/Domain/index.ts index e0cffa120..be6d9354a 100644 --- a/packages/files/src/Domain/index.ts +++ b/packages/files/src/Domain/index.ts @@ -1,5 +1,16 @@ -export * from './Service/FileService' +export * from './Api/DirectoryHandle' +export * from './Api/FileHandleRead' +export * from './Api/FileHandleReadWrite' +export * from './Api/FileSystemApi' +export * from './Api/FileSystemNoSelection' +export * from './Api/FileSystemResult' +export * from './Api/FilesApiInterface' +export * from './Device/FileBackupMetadataFile' +export * from './Device/FileBackupsConstantsV1' +export * from './Device/FileBackupsDevice' +export * from './Device/FileBackupsMapping' export * from './Service/FilesClientInterface' +export * from './Service/ReadAndDecryptBackupFile' export * from './Operations/DownloadAndDecrypt' export * from './Operations/EncryptAndUpload' export * from './UseCase/FileDecryptor' @@ -9,4 +20,3 @@ export * from './UseCase/FileDownloader' export * from './Types/FileDownloadProgress' export * from './Types/FileUploadProgress' export * from './Types/FileUploadResult' -export * from './Backups/BackupService' diff --git a/packages/services/package.json b/packages/services/package.json index 48eb9ec5b..6c986ebc6 100644 --- a/packages/services/package.json +++ b/packages/services/package.json @@ -25,6 +25,7 @@ "dependencies": { "@standardnotes/auth": "^3.19.4", "@standardnotes/common": "^1.30.0", + "@standardnotes/files": "workspace:^", "@standardnotes/models": "workspace:^", "@standardnotes/responses": "workspace:*", "@standardnotes/security": "^1.2.0", diff --git a/packages/services/src/Domain/Api/ApiServiceInterface.ts b/packages/services/src/Domain/Api/ApiServiceInterface.ts index d60e3227b..b2ac9d93c 100644 --- a/packages/services/src/Domain/Api/ApiServiceInterface.ts +++ b/packages/services/src/Domain/Api/ApiServiceInterface.ts @@ -1,7 +1,7 @@ import { AbstractService } from '../Service/AbstractService' import { Uuid } from '@standardnotes/common' import { Role } from '@standardnotes/auth' -import { FilesApiInterface } from '../Files/FilesApiInterface' +import { FilesApiInterface } from '@standardnotes/files' /* istanbul ignore file */ diff --git a/packages/services/src/Domain/Application/ApplicationInterface.ts b/packages/services/src/Domain/Application/ApplicationInterface.ts index 848173b30..13d7483b8 100644 --- a/packages/services/src/Domain/Application/ApplicationInterface.ts +++ b/packages/services/src/Domain/Application/ApplicationInterface.ts @@ -1,7 +1,10 @@ import { ApplicationIdentifier, ContentType } from '@standardnotes/common' import { BackupFile, DecryptedItemInterface, ItemStream, PrefKey, PrefValue } from '@standardnotes/models' +import { FilesClientInterface } from '@standardnotes/files' +import { AlertService } from '../Alert/AlertService' import { ComponentManagerInterface } from '../Component/ComponentManagerInterface' +import { Platform } from '../Device/Environments' import { ApplicationEvent } from '../Event/ApplicationEvent' import { ApplicationEventCallback } from '../Event/ApplicationEventCallback' import { FeaturesClientInterface } from '../Feature/FeaturesClientInterface' @@ -12,6 +15,7 @@ import { StorageValueModes } from '../Storage/StorageTypes' import { DeinitMode } from './DeinitMode' import { DeinitSource } from './DeinitSource' import { UserClientInterface } from './UserClientInterface' +import { DeviceInterface } from '../Device/DeviceInterface' export interface ApplicationInterface { deinit(mode: DeinitMode, source: DeinitSource): void @@ -21,6 +25,7 @@ export interface ApplicationInterface { addEventObserver(callback: ApplicationEventCallback, singleEvent?: ApplicationEvent): () => void hasProtectionSources(): boolean createEncryptedBackupFileForAutomatedDesktopBackups(): Promise + createEncryptedBackupFile(): Promise createDecryptedBackupFile(): Promise hasPasscode(): boolean lock(): Promise @@ -31,14 +36,20 @@ export interface ApplicationInterface { getPreference(key: K): PrefValue[K] | undefined getPreference(key: K, defaultValue: PrefValue[K]): PrefValue[K] getPreference(key: K, defaultValue?: PrefValue[K]): PrefValue[K] | undefined + setPreference(key: K, value: PrefValue[K]): Promise streamItems( contentType: ContentType | ContentType[], stream: ItemStream, ): () => void + hasAccount(): boolean get features(): FeaturesClientInterface get componentManager(): ComponentManagerInterface get items(): ItemsClientInterface get mutator(): MutatorClientInterface get user(): UserClientInterface + get files(): FilesClientInterface readonly identifier: ApplicationIdentifier + readonly platform: Platform + deviceInterface: DeviceInterface + alertService: AlertService } diff --git a/packages/files/src/Domain/Backups/BackupService.ts b/packages/services/src/Domain/Backups/BackupService.ts similarity index 91% rename from packages/files/src/Domain/Backups/BackupService.ts rename to packages/services/src/Domain/Backups/BackupService.ts index f557171f0..239005b3e 100644 --- a/packages/files/src/Domain/Backups/BackupService.ts +++ b/packages/services/src/Domain/Backups/BackupService.ts @@ -2,16 +2,12 @@ import { ContentType, Uuid } from '@standardnotes/common' import { EncryptionProvider } from '@standardnotes/encryption' import { PayloadEmitSource, FileItem, CreateEncryptedBackupFileContextPayload } from '@standardnotes/models' import { ClientDisplayableError } from '@standardnotes/responses' -import { - ItemManagerInterface, - FileBackupsDevice, - FileBackupsMapping, - AbstractService, - InternalEventBusInterface, - StatusServiceInterface, - FileBackupMetadataFile, - FilesApiInterface, -} from '@standardnotes/services' +import { FileBackupMetadataFile, FileBackupsDevice, FileBackupsMapping } from '../Device/FileBackupsDevice' +import { FilesApiInterface } from '@standardnotes/files' +import { InternalEventBusInterface } from '../Internal/InternalEventBusInterface' +import { ItemManagerInterface } from '../Item/ItemManagerInterface' +import { AbstractService } from '../Service/AbstractService' +import { StatusServiceInterface } from '../Status/StatusServiceInterface' export class FilesBackupService extends AbstractService { private itemsObserverDisposer: () => void diff --git a/packages/services/src/Domain/Component/ComponentManagerInterface.ts b/packages/services/src/Domain/Component/ComponentManagerInterface.ts index cc6e91b15..5c7ab5d49 100644 --- a/packages/services/src/Domain/Component/ComponentManagerInterface.ts +++ b/packages/services/src/Domain/Component/ComponentManagerInterface.ts @@ -20,4 +20,5 @@ export interface ComponentManagerInterface { urlOverride?: string, ): ComponentViewerInterface presentPermissionsDialog(_dialog: PermissionDialog): void + getDefaultEditor(): SNComponent } diff --git a/packages/services/src/Domain/Device/FileBackupsDevice.ts b/packages/services/src/Domain/Device/FileBackupsDevice.ts deleted file mode 100644 index ab0c969cb..000000000 --- a/packages/services/src/Domain/Device/FileBackupsDevice.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Uuid } from '@standardnotes/common' -import { BackupFileEncryptedContextualPayload } from '@standardnotes/models' - -/* istanbul ignore file */ - -export const FileBackupsConstantsV1 = { - Version: '1.0.0', - MetadataFileName: 'metadata.sn.json', - BinaryFileName: 'file.encrypted', -} - -export interface FileBackupMetadataFile { - info: Record - file: BackupFileEncryptedContextualPayload - itemsKey: BackupFileEncryptedContextualPayload - version: '1.0.0' -} - -export interface FileBackupsMapping { - version: typeof FileBackupsConstantsV1.Version - files: Record< - Uuid, - { - backedUpOn: Date - absolutePath: string - relativePath: string - metadataFileName: typeof FileBackupsConstantsV1.MetadataFileName - binaryFileName: typeof FileBackupsConstantsV1.BinaryFileName - version: typeof FileBackupsConstantsV1.Version - } - > -} - -export interface FileBackupsDevice { - getFilesBackupsMappingFile(): Promise - saveFilesBackupsFile( - uuid: Uuid, - metaFile: string, - downloadRequest: { - chunkSizes: number[] - valetToken: string - url: string - }, - ): Promise<'success' | 'failed'> - isFilesBackupsEnabled(): Promise - enableFilesBackups(): Promise - disableFilesBackups(): Promise - changeFilesBackupsLocation(): Promise - getFilesBackupsLocation(): Promise - openFilesBackupsLocation(): Promise -} diff --git a/packages/files/src/Domain/Service/FileService.spec.ts b/packages/services/src/Domain/Files/FileService.spec.ts similarity index 100% rename from packages/files/src/Domain/Service/FileService.spec.ts rename to packages/services/src/Domain/Files/FileService.spec.ts diff --git a/packages/files/src/Domain/Service/FileService.ts b/packages/services/src/Domain/Files/FileService.ts similarity index 95% rename from packages/files/src/Domain/Service/FileService.ts rename to packages/services/src/Domain/Files/FileService.ts index 0bc28b09e..672237090 100644 --- a/packages/files/src/Domain/Service/FileService.ts +++ b/packages/services/src/Domain/Files/FileService.ts @@ -1,8 +1,6 @@ import { DecryptedBytes, EncryptedBytes, FileMemoryCache, OrderedByteChunker } from '@standardnotes/filepicker' import { ClientDisplayableError } from '@standardnotes/responses' import { ContentType } from '@standardnotes/common' -import { DownloadAndDecryptFileOperation } from '../Operations/DownloadAndDecrypt' -import { EncryptAndUploadFileOperation } from '../Operations/EncryptAndUpload' import { FileItem, FileProtocolV1Constants, @@ -29,11 +27,15 @@ import { ChallengeServiceInterface, FileBackupsConstantsV1, } from '@standardnotes/services' -import { FilesClientInterface } from './FilesClientInterface' -import { FileDownloadProgress } from '../Types/FileDownloadProgress' -import { readAndDecryptBackupFile } from './ReadAndDecryptBackupFile' import { DecryptItemsKeyWithUserFallback, EncryptionProvider, SNItemsKey } from '@standardnotes/encryption' -import { FileDecryptor } from '../UseCase/FileDecryptor' +import { + DownloadAndDecryptFileOperation, + EncryptAndUploadFileOperation, + FileDecryptor, + FileDownloadProgress, + FilesClientInterface, + readAndDecryptBackupFile, +} from '@standardnotes/files' const OneHundredMb = 100 * 1_000_000 diff --git a/packages/services/src/Domain/index.ts b/packages/services/src/Domain/index.ts index 7fe53f1a5..103656712 100644 --- a/packages/services/src/Domain/index.ts +++ b/packages/services/src/Domain/index.ts @@ -8,6 +8,7 @@ export * from './Application/DeinitSource' export * from './Application/DeinitMode' export * from './Application/UserClientInterface' export * from './Application/WebApplicationInterface' +export * from './Backups/BackupService' export * from './Challenge' export * from './Component/ComponentManagerInterface' export * from './Component/ComponentViewerError' @@ -33,8 +34,6 @@ export * from './Feature/FeaturesClientInterface' export * from './Feature/FeaturesEvent' export * from './Feature/OfflineSubscriptionEntitlements' export * from './Feature/SetOfflineFeaturesFunctionResponse' -export * from './Files/FilesApiInterface' -export * from './FileSystem/FileSystemApi' export * from './Integrity/IntegrityApiInterface' export * from './Integrity/IntegrityEvent' export * from './Integrity/IntegrityEventPayload' diff --git a/yarn.lock b/yarn.lock index 41337a1a9..7c49f7f7b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6653,7 +6653,7 @@ __metadata: languageName: unknown linkType: soft -"@standardnotes/files@workspace:*, @standardnotes/files@workspace:packages/files": +"@standardnotes/files@workspace:*, @standardnotes/files@workspace:^, @standardnotes/files@workspace:packages/files": version: 0.0.0-use.local resolution: "@standardnotes/files@workspace:packages/files" dependencies: @@ -6662,7 +6662,6 @@ __metadata: "@standardnotes/filepicker": "workspace:*" "@standardnotes/models": "workspace:*" "@standardnotes/responses": "workspace:*" - "@standardnotes/services": "workspace:*" "@standardnotes/sncrypto-common": "workspace:*" "@standardnotes/utils": "workspace:*" "@types/jest": ^28.1.5 @@ -7182,6 +7181,7 @@ __metadata: dependencies: "@standardnotes/auth": ^3.19.4 "@standardnotes/common": ^1.30.0 + "@standardnotes/files": "workspace:^" "@standardnotes/models": "workspace:^" "@standardnotes/responses": "workspace:*" "@standardnotes/security": ^1.2.0