diff --git a/app/src/os/services/ship/notes/notes.service.ts b/app/src/os/services/ship/notes/notes.service.ts index be19e4f1e6..a144ecf115 100644 --- a/app/src/os/services/ship/notes/notes.service.ts +++ b/app/src/os/services/ship/notes/notes.service.ts @@ -3,7 +3,6 @@ import { fromUint8Array, toUint8Array } from 'js-base64'; import * as Y from 'yjs'; import type { - BedrockPath, BedrockResponse, BedrockSchema, BedrockSubscriptionUpdate, @@ -18,7 +17,6 @@ import { NotesService_CreateNote_Payload, NotesService_CreateNoteEdit_Payload, NotesService_CreateNoteEditLocally_Payload, - NotesService_CreatePath_Payload, NotesService_DeleteNote_Payload, NotesService_EditNoteTitle_Payload, NotesService_GetBedrockState_Payload, @@ -54,7 +52,7 @@ export class NotesService extends AbstractService { json: { create: { v: 0, - path: `${space}/notes`, + path: space, type: 'notes', data: createNoteData, schema: createNoteSchema, @@ -71,7 +69,7 @@ export class NotesService extends AbstractService { json: { remove: { id, - path: `${space}/notes`, + path: space, type: 'notes', }, }, @@ -92,7 +90,7 @@ export class NotesService extends AbstractService { json: { 'remove-many': { ids: bedrockIds, - path: `${space}/notes`, + path: space, type: 'notes-edits', }, }, @@ -124,91 +122,6 @@ export class NotesService extends AbstractService { return this.notesDB.selectNoteEdits({ note_id }); } - async createPublicBedrockPath({ space }: NotesService_CreatePath_Payload) { - // 1. Check if the `space/notes` path already exists. - // 2. Create it if it doesn't. - // 3. Make it public (which we can since we're the host). - - // 1. Check if the paths already exists in bedrock-db. - const dbResponse = await APIConnection.getInstance().conduit.scry({ - app: 'bedrock', - path: '/db', - }); - if (!dbResponse) return; - - const paths: BedrockPath[] = dbResponse.paths ?? []; - const existingPath = paths.find((o) => o.path === `${space}/notes`); - if (existingPath) { - console.info('Notes: Path already exists, skipping.'); - return; - } - - // 2. Create the paths. - try { - const isPersonalSpace = space.split('/our').length > 1; - if (isPersonalSpace) { - console.log('Notes: Personal space, skipping making public.'); - await APIConnection.getInstance().conduit.poke({ - app: 'bedrock', - mark: 'db-action', - json: { - 'create-path': { - path: `${space}/notes`, - }, - }, - }); - - return; - } else { - await APIConnection.getInstance().conduit.poke({ - app: 'bedrock', - mark: 'db-action', - json: { - 'create-from-space': { - path: `${space}/notes`, - 'space-path': space, - 'space-role': 'member', - }, - }, - }); - } - } catch (error) { - console.error('Notes: Failed to create notes path.', error); - } - - // 3. Make notes and notes_edits tables public. - try { - const accessRules = { - host: { - create: true, - edit: 'table', - delete: 'table', - }, - '': { - create: true, - edit: 'table', - delete: 'table', - }, - }; - - await APIConnection.getInstance().conduit.poke({ - app: 'bedrock', - mark: 'db-action', - json: { - 'edit-path': { - path: `${space}/notes`, - 'table-access': { - notes: accessRules, - 'notes-edits': accessRules, - }, - }, - }, - }); - } catch (error) { - console.error('Notes: Failed to make notes table public.', error); - } - } - async syncWithBedrock({ space }: NotesService_GetBedrockState_Payload) { /** * PHASE 1 – Sync `notes` (not using yjs yet, so we override) @@ -228,7 +141,7 @@ export class NotesService extends AbstractService { try { bedrockResponse = await APIConnection.getInstance().conduit.scry({ app: 'bedrock', - path: `/db/path${space}/notes`, + path: `/db/path${space}`, }); } catch (error) { console.error('Notes: Failed to fetch notes from Bedrock.', error); @@ -326,7 +239,7 @@ export class NotesService extends AbstractService { id, 'input-row': { v: 0, - path: `${space}/notes`, + path: space, type: 'notes', data: editNoteData, schema: editNoteSchema, @@ -359,7 +272,7 @@ export class NotesService extends AbstractService { json: { create: { v: 0, - path: `${space}/notes`, + path: space, type: 'notes-edits', data: createNoteUpdateData, schema: createNoteUpdateSchema, @@ -438,7 +351,7 @@ export class NotesService extends AbstractService { subscribe({ space: spacePath }: NotesService_Subscribe_Payload) { return APIConnection.getInstance().conduit.watch({ app: 'bedrock', - path: `/path${spacePath}/notes`, + path: `/path${spacePath}`, onEvent: (updates: BedrockSubscriptionUpdate[] | null) => { if (!updates || !updates.length) return; diff --git a/app/src/os/services/ship/notes/notes.service.types.ts b/app/src/os/services/ship/notes/notes.service.types.ts index 35a802a7dd..91d186d2e2 100644 --- a/app/src/os/services/ship/notes/notes.service.types.ts +++ b/app/src/os/services/ship/notes/notes.service.types.ts @@ -52,10 +52,6 @@ export type NotesService_Subscribe_Payload = { space: string; }; -export type NotesService_CreatePath_Payload = { - space: string; -}; - export type BedrockRowData_Notes = { title: string; }; diff --git a/app/src/os/services/ship/spaces/tables/members.table.ts b/app/src/os/services/ship/spaces/tables/members.table.ts index 97c08052ce..ec0d9d9ae9 100644 --- a/app/src/os/services/ship/spaces/tables/members.table.ts +++ b/app/src/os/services/ship/spaces/tables/members.table.ts @@ -101,7 +101,7 @@ export class MembersDB extends AbstractDataAccess { path: string, patp: string, values: Partial - ): Member { + ): Member | null { if (values.roles) values.roles = JSON.stringify(values.roles); const setClause = Object.keys(values) .map((key) => `${key} = ?`) @@ -110,7 +110,10 @@ export class MembersDB extends AbstractDataAccess { const stmt = this.prepare(query); stmt.run([...Object.values(values), path, patp]); const updated = this.getMember(path, patp); - if (!updated) throw new Error('Failed to update record'); + if (!updated) { + console.error('Failed to update record'); + return null; + } return updated; } diff --git a/app/src/renderer/stores/notes/notes.store.ts b/app/src/renderer/stores/notes/notes.store.ts index 1270c0e81d..8016922da8 100644 --- a/app/src/renderer/stores/notes/notes.store.ts +++ b/app/src/renderer/stores/notes/notes.store.ts @@ -97,7 +97,6 @@ export const NotesStore = types initialize: flow(function* ({ space }: { space: string }) { self.initializing = true; - yield NotesIPC.createPublicBedrockPath({ space }); yield NotesIPC.syncWithBedrock({ space }); NotesIPC.subscribe({ space });