diff --git a/plugin/src/services/sync_service.ts b/plugin/src/services/sync_service.ts index 6bf43ca..cdf3250 100644 --- a/plugin/src/services/sync_service.ts +++ b/plugin/src/services/sync_service.ts @@ -5,7 +5,11 @@ import type { components, paths } from "./types"; // generated by openapi-typesc import { Logger } from "src/logger"; import { Database } from "src/database/database"; import { SyncSettings } from "src/database/sync-settings"; -import { VaultUpdateId, RelativePath } from "src/database/document-metadata.js"; +import { + VaultUpdateId, + RelativePath, + DocumentId, +} from "src/database/document-metadata.js"; export class SyncServer { private static VAULT_ID = "default"; @@ -43,24 +47,63 @@ export class SyncServer { return response.data; } - public async put({ + public async create({ relativePath, - parentVersionId, contentBytes, createdDate, }: { relativePath: RelativePath; - parentVersionId: VaultUpdateId | undefined; + contentBytes: Uint8Array; + createdDate: Date; + }): Promise { + let response = await this.client.POST("/vaults/{vault_id}/documents", { + params: { + path: { + vault_id: SyncServer.VAULT_ID, + }, + header: { + authorization: + "Bearer " + this.database.getSettings().token, + }, + }, + body: { + contentBase64: lib.bytes_to_base64(contentBytes), + createdDate: createdDate.toISOString(), + relativePath, + }, + }); + + if (!response.data) { + throw new Error(`Failed to create document: ${response.error}`); + } + + Logger.getInstance().info( + "Created document " + JSON.stringify(response.data) + ); + + return response.data; + } + + public async put({ + parentVersionId, + documentId, + relativePath, + contentBytes, + createdDate, + }: { + parentVersionId: VaultUpdateId; + documentId: DocumentId; + relativePath: RelativePath; contentBytes: Uint8Array; createdDate: Date; }): Promise { let response = await this.client.PUT( - "/vaults/{vault_id}/documents/{relative_path}", + "/vaults/{vault_id}/documents/{document_id}", { params: { path: { vault_id: SyncServer.VAULT_ID, - relative_path: encodeURIComponent(relativePath), + document_id: documentId, }, header: { authorization: @@ -77,7 +120,7 @@ export class SyncServer { ); if (!response.data) { - throw new Error(`Failed to create document: ${response.error}`); + throw new Error(`Failed to update document: ${response.error}`); } Logger.getInstance().info( @@ -88,19 +131,21 @@ export class SyncServer { } public async delete({ + documentId, relativePath, createdDate, }: { + documentId: DocumentId; relativePath: RelativePath; createdDate: Date; }): Promise { const response = await this.client.DELETE( - "/vaults/{vault_id}/documents/{relative_path}", + "/vaults/{vault_id}/documents/{document_id}", { params: { path: { vault_id: SyncServer.VAULT_ID, - relative_path: encodeURIComponent(relativePath), + document_id: documentId, }, header: { authorization: @@ -109,14 +154,14 @@ export class SyncServer { }, body: { createdDate: createdDate.toISOString(), + relativePath, }, } ); - // Response will be empty if successful - // if (!response.data) { - // throw new Error(`Failed to delete document: ${response.error}`); - // } + if (response.error) { + throw new Error(`Failed to delete document`); + } Logger.getInstance().info( "Updated document " + JSON.stringify(response.data) @@ -126,17 +171,17 @@ export class SyncServer { } public async get({ - relativePath, + documentId, }: { - relativePath: RelativePath; + documentId: DocumentId; }): Promise { const response = await this.client.GET( - "/vaults/{vault_id}/documents/{relative_path}", + "/vaults/{vault_id}/documents/{document_id}", { params: { path: { vault_id: SyncServer.VAULT_ID, - relative_path: encodeURIComponent(relativePath), + document_id: documentId, }, header: { authorization: