From 82c261767f0f8790e43304038c549cdf9e78b089 Mon Sep 17 00:00:00 2001 From: DiamondThree <857159145@qq.com> Date: Thu, 2 Feb 2023 16:00:21 +0800 Subject: [PATCH 1/4] fix: add token and api to blocksuitWorkspace --- packages/data-center/src/datacenter.ts | 23 +++++++++++++++++------ packages/data-center/src/utils/index.ts | 11 +++++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/packages/data-center/src/datacenter.ts b/packages/data-center/src/datacenter.ts index 1488d8b84d..1cca635886 100644 --- a/packages/data-center/src/datacenter.ts +++ b/packages/data-center/src/datacenter.ts @@ -1,6 +1,9 @@ import { WorkspaceUnitCollection } from './workspace-unit-collection.js'; import type { WorkspaceUnitCollectionChangeEvent } from './workspace-unit-collection'; -import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store'; +import { + StoreOptions, + Workspace as BlocksuiteWorkspace, +} from '@blocksuite/store'; import type { BaseProvider, CreateWorkspaceInfoParams, @@ -14,7 +17,7 @@ import { getLogger } from './logger'; import { createBlocksuiteWorkspace } from './utils/index.js'; import { MessageCenter } from './message'; import { WorkspaceUnit } from './workspace-unit'; - +import { token } from './provider/affine/apis/token'; /** * @class DataCenter * @classdesc Data center is made for managing different providers for business @@ -116,12 +119,12 @@ export class DataCenter { * get a new workspace only has room id * @param {string} workspaceId workspace id */ - private _getBlocksuiteWorkspace(workspaceId: string) { + private _getBlocksuiteWorkspace(workspaceId: string, params: StoreOptions) { // const workspaceInfo = this._workspaceUnitCollection.find(workspaceId); // assert(workspaceInfo, 'Workspace not found'); return ( // this._workspaceInstances.get(workspaceId) || - createBlocksuiteWorkspace(workspaceId) + createBlocksuiteWorkspace(workspaceId, params) ); } @@ -162,7 +165,15 @@ export class DataCenter { const provider = this.providerMap.get(workspaceUnit.provider); assert(provider, `provide '${workspaceUnit.provider}' is not registered`); this._logger(`Loading ${workspaceUnit.provider} workspace: `, workspaceId); - const workspace = this._getBlocksuiteWorkspace(workspaceId); + + const params: StoreOptions = {}; + if (provider.id === 'affine') { + params.blobOptionsGetter = (k: string) => + ({ api: '/api/workspace', token: token.token }[k]); + } else { + params.blobOptionsGetter = (k: string) => undefined; + } + const workspace = this._getBlocksuiteWorkspace(workspaceId, params); this._workspaceInstances.set(workspaceId, workspace); await provider.warpWorkspace(workspace); this._workspaceUnitCollection.workspaces.forEach(workspaceUnit => { @@ -178,7 +189,7 @@ export class DataCenter { // FIXME: hard code for public workspace const provider = this.providerMap.get('affine'); assert(provider); - const blocksuiteWorkspace = this._getBlocksuiteWorkspace(workspaceId); + const blocksuiteWorkspace = this._getBlocksuiteWorkspace(workspaceId, {}); await provider.loadPublicWorkspace(blocksuiteWorkspace); const workspaceUnitForPublic = new WorkspaceUnit({ diff --git a/packages/data-center/src/utils/index.ts b/packages/data-center/src/utils/index.ts index 78cd977366..57649cbc02 100644 --- a/packages/data-center/src/utils/index.ts +++ b/packages/data-center/src/utils/index.ts @@ -1,9 +1,16 @@ -import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store'; +import { + StoreOptions, + Workspace as BlocksuiteWorkspace, +} from '@blocksuite/store'; import { builtInSchemas } from '@blocksuite/blocks/models'; -export const createBlocksuiteWorkspace = (workspaceId: string) => { +export const createBlocksuiteWorkspace = ( + workspaceId: string, + workspaceOption?: StoreOptions +) => { return new BlocksuiteWorkspace({ room: workspaceId, + ...workspaceOption, }).register(builtInSchemas); }; From fca165c672ad000c1504f41e66fb6aeff0c71da7 Mon Sep 17 00:00:00 2001 From: DiamondThree <857159145@qq.com> Date: Thu, 2 Feb 2023 18:30:36 +0800 Subject: [PATCH 2/4] fix: add gettoken on affine provider --- packages/data-center/src/datacenter.ts | 3 +-- packages/data-center/src/provider/affine/affine.ts | 4 ++++ packages/data-center/src/provider/affine/utils.ts | 6 +++--- packages/data-center/src/provider/base.ts | 4 ++++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/data-center/src/datacenter.ts b/packages/data-center/src/datacenter.ts index 1cca635886..d843900073 100644 --- a/packages/data-center/src/datacenter.ts +++ b/packages/data-center/src/datacenter.ts @@ -17,7 +17,6 @@ import { getLogger } from './logger'; import { createBlocksuiteWorkspace } from './utils/index.js'; import { MessageCenter } from './message'; import { WorkspaceUnit } from './workspace-unit'; -import { token } from './provider/affine/apis/token'; /** * @class DataCenter * @classdesc Data center is made for managing different providers for business @@ -169,7 +168,7 @@ export class DataCenter { const params: StoreOptions = {}; if (provider.id === 'affine') { params.blobOptionsGetter = (k: string) => - ({ api: '/api/workspace', token: token.token }[k]); + ({ api: '/api/workspace', token: provider.getToken() }[k]); } else { params.blobOptionsGetter = (k: string) => undefined; } diff --git a/packages/data-center/src/provider/affine/affine.ts b/packages/data-center/src/provider/affine/affine.ts index d4c786f461..01ff6b0a78 100644 --- a/packages/data-center/src/provider/affine/affine.ts +++ b/packages/data-center/src/provider/affine/affine.ts @@ -360,6 +360,10 @@ export class AffineProvider extends BaseProvider { await this._apis.updateWorkspace({ id, public: isPublish }); } + public override getToken(): string { + return this._apis.token.token; + } + public override async getUserByEmail( workspace_id: string, email: string diff --git a/packages/data-center/src/provider/affine/utils.ts b/packages/data-center/src/provider/affine/utils.ts index 25e2127e50..6e4387f240 100644 --- a/packages/data-center/src/provider/affine/utils.ts +++ b/packages/data-center/src/provider/affine/utils.ts @@ -82,7 +82,7 @@ export const migrateBlobDB = async ( return [id, { id, blob }] as [string, PendingTask]; }); await newPendingDB.setMany(pendingEntries); - - await oldDB.deleteDB(); - await oldPendingDB.deleteDB(); + // FIXME: delete old db + // await oldDB.deleteDB(); + // await oldPendingDB.deleteDB(); }; diff --git a/packages/data-center/src/provider/base.ts b/packages/data-center/src/provider/base.ts index eb9a68d748..38d1cc4782 100644 --- a/packages/data-center/src/provider/base.ts +++ b/packages/data-center/src/provider/base.ts @@ -64,6 +64,10 @@ export class BaseProvider { return; } + public getToken(): string { + return ''; + } + /** * warp workspace with provider functions * @param workspace From 8141ef1f91269720ac90a7c49a4b725baf5b4aca Mon Sep 17 00:00:00 2001 From: DiamondThree <857159145@qq.com> Date: Thu, 2 Feb 2023 19:17:07 +0800 Subject: [PATCH 3/4] fix: delete db cause page reload --- packages/data-center/src/provider/affine/idb-kv.ts | 7 +++---- packages/data-center/src/provider/affine/utils.ts | 5 ++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/data-center/src/provider/affine/idb-kv.ts b/packages/data-center/src/provider/affine/idb-kv.ts index 72f854dd82..37dcbe64df 100644 --- a/packages/data-center/src/provider/affine/idb-kv.ts +++ b/packages/data-center/src/provider/affine/idb-kv.ts @@ -1,9 +1,8 @@ -import { createStore, keys, setMany, getMany } from 'idb-keyval'; -import * as idb from 'lib0/indexeddb.js'; +import { createStore, keys, setMany, getMany, clear } from 'idb-keyval'; type IDBInstance = { keys: () => Promise; - deleteDB: () => Promise; + clear: () => Promise; setMany: (entries: [string, T][]) => Promise; getMany: (keys: string[]) => Promise; }; @@ -16,7 +15,7 @@ export function getDatabase( const db = createStore(name, type); return { keys: () => keys(db), - deleteDB: () => idb.deleteDB(name), + clear: () => clear(db), setMany: entries => setMany(entries, db), getMany: keys => getMany(keys, db), }; diff --git a/packages/data-center/src/provider/affine/utils.ts b/packages/data-center/src/provider/affine/utils.ts index 6e4387f240..54931fe9de 100644 --- a/packages/data-center/src/provider/affine/utils.ts +++ b/packages/data-center/src/provider/affine/utils.ts @@ -82,7 +82,6 @@ export const migrateBlobDB = async ( return [id, { id, blob }] as [string, PendingTask]; }); await newPendingDB.setMany(pendingEntries); - // FIXME: delete old db - // await oldDB.deleteDB(); - // await oldPendingDB.deleteDB(); + await oldDB.clear(); + await oldPendingDB.clear(); }; From e306408b5666a2e9b3ba3caa9acbf598495b8946 Mon Sep 17 00:00:00 2001 From: DiamondThree <857159145@qq.com> Date: Thu, 2 Feb 2023 19:48:02 +0800 Subject: [PATCH 4/4] fix: enable workspace upload avatar --- packages/data-center/src/provider/affine/affine.ts | 1 - packages/data-center/src/provider/affine/utils.ts | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/data-center/src/provider/affine/affine.ts b/packages/data-center/src/provider/affine/affine.ts index 01ff6b0a78..b061b1ce5a 100644 --- a/packages/data-center/src/provider/affine/affine.ts +++ b/packages/data-center/src/provider/affine/affine.ts @@ -397,7 +397,6 @@ export class AffineProvider extends BaseProvider { provider: this.id, syncMode: 'core', }); - await migrateBlobDB(workspaceUnit.id, id); const blocksuiteWorkspace = createBlocksuiteWorkspace(id); diff --git a/packages/data-center/src/provider/affine/utils.ts b/packages/data-center/src/provider/affine/utils.ts index 54931fe9de..79da384dd5 100644 --- a/packages/data-center/src/provider/affine/utils.ts +++ b/packages/data-center/src/provider/affine/utils.ts @@ -66,7 +66,7 @@ export const migrateBlobDB = async ( newWorkspaceId: string ) => { const oldDB = getDatabase('blob', oldWorkspaceId); - const oldPendingDB = getDatabase('pending', newWorkspaceId); + const oldPendingDB = getDatabase('pending', oldWorkspaceId); const newDB = getDatabase('blob', newWorkspaceId); const newPendingDB = getDatabase('pending', newWorkspaceId); @@ -82,6 +82,6 @@ export const migrateBlobDB = async ( return [id, { id, blob }] as [string, PendingTask]; }); await newPendingDB.setMany(pendingEntries); - await oldDB.clear(); - await oldPendingDB.clear(); + oldDB.clear(); + oldPendingDB.clear(); };