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