diff --git a/packages/data-center/src/provider/affine/affine.ts b/packages/data-center/src/provider/affine/affine.ts index 973eed1ddd..d86c42f9fa 100644 --- a/packages/data-center/src/provider/affine/affine.ts +++ b/packages/data-center/src/provider/affine/affine.ts @@ -1,15 +1,3 @@ -import { - getWorkspaces, - getWorkspaceDetail, - WorkspaceDetail, - downloadWorkspace, - deleteWorkspace, - leaveWorkspace, - inviteMember, - removeMember, - createWorkspace, - updateWorkspace, -} from './apis/workspace'; import { BaseProvider } from '../base'; import type { ProviderConstructorParams } from '../base'; import { User, Workspace as WS, WorkspaceMeta } from '../../types'; @@ -23,7 +11,13 @@ import { getAuthorizer } from './apis/token'; import { WebsocketProvider } from './sync'; // import { IndexedDBProvider } from '../local/indexeddb'; import { getDefaultHeadImgBlob } from '../../utils'; -import { getUserByEmail } from './apis/user'; +import { getApis } from './apis/index.js'; +import type { Apis, WorkspaceDetail } from './apis'; + +export interface AffineProviderConstructorParams + extends ProviderConstructorParams { + apis?: Apis; +} export class AffineProvider extends BaseProvider { public id = 'affine'; @@ -32,10 +26,12 @@ export class AffineProvider extends BaseProvider { private readonly _authorizer = getAuthorizer(); private _user: User | undefined = undefined; private _wsMap: Map = new Map(); + private _apis: Apis; // private _idbMap: Map = new Map(); - constructor(params: ProviderConstructorParams) { + constructor({ apis, ...params }: AffineProviderConstructorParams) { super(params); + this._apis = apis || getApis(); } override async init() { @@ -70,7 +66,7 @@ export class AffineProvider extends BaseProvider { const { doc, room } = workspace; assert(room); this.linkLocal(workspace); - const updates = await downloadWorkspace(room); + const updates = await this._apis.downloadWorkspace(room); if (updates) { await new Promise(resolve => { doc.once('update', resolve); @@ -98,7 +94,7 @@ export class AffineProvider extends BaseProvider { if (!token.isLogin) { return []; } - const workspacesList = await getWorkspaces(); + const workspacesList = await this._apis.getWorkspaces(); const workspaces: WS[] = workspacesList.map(w => { return { ...w, @@ -116,7 +112,7 @@ export class AffineProvider extends BaseProvider { this._workspacesCache.set(id, workspace); if (workspace) { return new Promise(resolve => { - downloadWorkspace(id).then(data => { + this._apis.downloadWorkspace(id).then(data => { applyUpdate(workspace.doc, new Uint8Array(data)); resolve(workspace); }); @@ -139,7 +135,7 @@ export class AffineProvider extends BaseProvider { const { id } = w; return new Promise<{ id: string; detail: WorkspaceDetail | null }>( resolve => { - getWorkspaceDetail({ id }).then(data => { + this._apis.getWorkspaceDetail({ id }).then(data => { resolve({ id, detail: data || null }); }); } @@ -198,7 +194,7 @@ export class AffineProvider extends BaseProvider { public override async deleteWorkspace(id: string): Promise { await this.closeWorkspace(id); // IndexedDBProvider.delete(id); - await deleteWorkspace({ id }); + await this._apis.deleteWorkspace({ id }); this._workspaces.remove(id); } @@ -224,15 +220,15 @@ export class AffineProvider extends BaseProvider { } public override async leaveWorkspace(id: string): Promise { - await leaveWorkspace({ id }); + await this._apis.leaveWorkspace({ id }); } public override async invite(id: string, email: string): Promise { - return await inviteMember({ id, email }); + return await this._apis.inviteMember({ id, email }); } public override async removeMember(permissionId: number): Promise { - return await removeMember({ permissionId }); + return await this._apis.removeMember({ permissionId }); } public override async linkLocal(workspace: Workspace) { @@ -251,7 +247,9 @@ export class AffineProvider extends BaseProvider { meta: WorkspaceMeta ): Promise { assert(meta.name, 'Workspace name is required'); - const { id } = await createWorkspace(meta as Required); + const { id } = await this._apis.createWorkspace( + meta as Required + ); this._logger('Creating affine workspace'); const nw = new Workspace({ room: id, @@ -287,14 +285,14 @@ export class AffineProvider extends BaseProvider { } public override async publish(id: string, isPublish: boolean): Promise { - await updateWorkspace({ id, public: isPublish }); + await this._apis.updateWorkspace({ id, public: isPublish }); } public override async getUserByEmail( workspace_id: string, email: string ): Promise { - const user = await getUserByEmail({ workspace_id, email }); + const user = await this._apis.getUserByEmail({ workspace_id, email }); return user ? { id: user.id, diff --git a/packages/data-center/src/provider/affine/apis/index.ts b/packages/data-center/src/provider/affine/apis/index.ts index 28e49b02a7..8c627519a0 100644 --- a/packages/data-center/src/provider/affine/apis/index.ts +++ b/packages/data-center/src/provider/affine/apis/index.ts @@ -22,5 +22,5 @@ export const getApis = (): Apis => { }; export type { AccessTokenMessage } from './token'; -export type { Member, Workspace } from './workspace'; +export type { Member, Workspace, WorkspaceDetail } from './workspace'; export { WorkspaceType } from './workspace.js';