diff --git a/packages/data-center/src/datacenter.ts b/packages/data-center/src/datacenter.ts index 76499b11e..1221b114f 100644 --- a/packages/data-center/src/datacenter.ts +++ b/packages/data-center/src/datacenter.ts @@ -384,6 +384,20 @@ export class DataCenter { return (await blobStorage?.set(blob)) || ''; } + /** + * get members of a workspace + * @param workspaceId + */ + async getMembers(workspaceId: string) { + const workspaceInfo = this._workspaceUnitCollection.find(workspaceId); + assert(workspaceInfo, 'Workspace not found'); + const provider = this.providerMap.get(workspaceInfo.provider); + if (provider) { + return await provider.getWorkspaceMembers(workspaceId); + } + return []; + } + onMessage(cb: (message: Message) => void) { return this._messageCenter.onMessage(cb); } diff --git a/packages/data-center/src/provider/affine/affine.ts b/packages/data-center/src/provider/affine/affine.ts index 2b1c73ae5..3b0161743 100644 --- a/packages/data-center/src/provider/affine/affine.ts +++ b/packages/data-center/src/provider/affine/affine.ts @@ -12,11 +12,11 @@ import { storage } from './storage.js'; import assert from 'assert'; import { WebsocketProvider } from './sync.js'; // import { IndexedDBProvider } from '../local/indexeddb'; -import { getApis } from './apis/index.js'; +import { getApis, Member } from './apis/index.js'; import type { Apis, WorkspaceDetail, Callback } from './apis'; import { setDefaultAvatar } from '../utils.js'; import { MessageCode } from '../../message'; -import { blob } from 'stream/consumers'; +import { token } from './apis/token.js'; export interface AffineProviderConstructorParams extends ProviderConstructorParams { @@ -215,6 +215,7 @@ export class AffineProvider extends BaseProvider { public override async getUserInfo(): Promise { await this.init(); const user = this._apis.token.user; + await this.init; return user ? { id: user.id, @@ -361,4 +362,13 @@ export class AffineProvider extends BaseProvider { }); return to; } + + public override async logout(): Promise { + token.clear(); + storage.removeItem('token'); + } + + public override async getWorkspaceMembers(id: string) { + return this._apis.getWorkspaceMembers({ id }); + } } diff --git a/packages/data-center/src/provider/affine/apis/token.ts b/packages/data-center/src/provider/affine/apis/token.ts index 62da8def9..4df48b307 100644 --- a/packages/data-center/src/provider/affine/apis/token.ts +++ b/packages/data-center/src/provider/affine/apis/token.ts @@ -140,6 +140,10 @@ class Token { this.callbacks.splice(index, 1); } } + + clear() { + this._setToken(); + } } export const token = new Token(); diff --git a/packages/data-center/src/provider/base.ts b/packages/data-center/src/provider/base.ts index 6542b279f..17834abf3 100644 --- a/packages/data-center/src/provider/base.ts +++ b/packages/data-center/src/provider/base.ts @@ -3,6 +3,7 @@ import { MessageCenter } from '../message'; import { Logger, User } from '../types'; import type { WorkspaceUnitCollectionScope } from '../workspace-unit-collection'; import type { WorkspaceUnitCtorParams } from '../workspace-unit'; +import { Member } from './affine/apis'; const defaultLogger = () => { return; @@ -213,4 +214,14 @@ export class BaseProvider { from; return to; } + + /** + * get workspace members + * @param {string} workspaceId + * @returns + */ + public getWorkspaceMembers(workspaceId: string): Promise { + workspaceId; + return Promise.resolve([]); + } } diff --git a/packages/data-center/src/workspace-unit-collection.spec.ts b/packages/data-center/src/workspace-unit-collection.spec.ts index 06eee95bd..f010c31d1 100644 --- a/packages/data-center/src/workspace-unit-collection.spec.ts +++ b/packages/data-center/src/workspace-unit-collection.spec.ts @@ -11,7 +11,7 @@ test.describe.serial('workspace meta collection observable', () => { workspaceUnitCollection.once( 'change', (event: WorkspaceUnitCollectionChangeEvent) => { - expect(event.added?.id).toEqual('123'); + expect(event.added?.[0]?.id).toEqual('123'); } ); scope.add({