From f8544fedd4435197eb1c5fcd6f70eff1552dd1ed Mon Sep 17 00:00:00 2001 From: DarkSky Date: Wed, 14 Sep 2022 17:39:24 +0800 Subject: [PATCH] feat: sync to keck --- .../db-service/src/services/database/index.ts | 2 +- libs/datasource/jwt-rpc/src/handler.ts | 35 +++++++++++-------- libs/datasource/jwt-rpc/src/index.ts | 3 +- libs/datasource/jwt/src/yjs/index.ts | 14 ++++---- libs/datasource/jwt/src/yjs/provider.ts | 7 ++-- 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/libs/datasource/db-service/src/services/database/index.ts b/libs/datasource/db-service/src/services/database/index.ts index a840b0a02b..8bee9f6028 100644 --- a/libs/datasource/db-service/src/services/database/index.ts +++ b/libs/datasource/db-service/src/services/database/index.ts @@ -41,7 +41,7 @@ async function _getCurrentToken() { const _enabled = { demo: [], - AFFiNE: process.env['NX_KECK'] ? ['idb', 'ws'] : ['idb'], + AFFiNE: process.env['NX_KECK'] ? ['idb', 'keck'] : ['idb'], } as any; async function _getBlockDatabase( diff --git a/libs/datasource/jwt-rpc/src/handler.ts b/libs/datasource/jwt-rpc/src/handler.ts index e803fb4bab..1f6e9da4af 100644 --- a/libs/datasource/jwt-rpc/src/handler.ts +++ b/libs/datasource/jwt-rpc/src/handler.ts @@ -4,7 +4,8 @@ import * as authProtocol from 'y-protocols/auth'; import * as awarenessProtocol from 'y-protocols/awareness'; import * as syncProtocol from 'y-protocols/sync'; -import { WebsocketProvider } from './provider'; +import { KeckProvider } from './keckprovider'; +import { WebsocketProvider } from './wsprovider'; const permissionDeniedHandler = (provider: WebsocketProvider, reason: string) => console.warn(`Permission denied to access ${provider.url}.\n${reason}`); @@ -19,7 +20,7 @@ export enum Message { export type MessageCallback = ( encoder: encoding.Encoder, decoder: decoding.Decoder, - provider: WebsocketProvider, + provider: WebsocketProvider | KeckProvider, emitSynced: boolean, messageType: number ) => void; @@ -48,14 +49,16 @@ export const handler: Record = { emitSynced, messageType ) => { - encoding.writeVarUint(encoder, Message.queryAwareness); - encoding.writeVarUint8Array( - encoder, - awarenessProtocol.encodeAwarenessUpdate( - provider.awareness, - Array.from(provider.awareness.getStates().keys()) - ) - ); + if (provider instanceof WebsocketProvider) { + encoding.writeVarUint(encoder, Message.queryAwareness); + encoding.writeVarUint8Array( + encoder, + awarenessProtocol.encodeAwarenessUpdate( + provider.awareness, + Array.from(provider.awareness.getStates().keys()) + ) + ); + } }, [Message.awareness]: ( @@ -65,11 +68,13 @@ export const handler: Record = { emitSynced, messageType ) => { - awarenessProtocol.applyAwarenessUpdate( - provider.awareness, - decoding.readVarUint8Array(decoder), - provider - ); + if (provider instanceof WebsocketProvider) { + awarenessProtocol.applyAwarenessUpdate( + provider.awareness, + decoding.readVarUint8Array(decoder), + provider + ); + } }, [Message.auth]: (encoder, decoder, provider, emitSynced, messageType) => { diff --git a/libs/datasource/jwt-rpc/src/index.ts b/libs/datasource/jwt-rpc/src/index.ts index 8fda0de311..89d05b95b7 100644 --- a/libs/datasource/jwt-rpc/src/index.ts +++ b/libs/datasource/jwt-rpc/src/index.ts @@ -1,3 +1,4 @@ export { IndexedDBProvider } from './indexeddb'; -export { WebsocketProvider } from './provider'; +export { KeckProvider } from './keckprovider'; export { SQLiteProvider } from './sqlite'; +export { WebsocketProvider } from './wsprovider'; diff --git a/libs/datasource/jwt/src/yjs/index.ts b/libs/datasource/jwt/src/yjs/index.ts index 7f270ad2f9..d430d29083 100644 --- a/libs/datasource/jwt/src/yjs/index.ts +++ b/libs/datasource/jwt/src/yjs/index.ts @@ -120,13 +120,13 @@ async function _initYjsDatabase( [name]: p, }; }), - // p({ - // awareness, - // doc: binaries, - // token, - // workspace: `${workspace}_binaries`, - // emitState, - // }).then(p => ({ [`${name}_binaries`]: p })), + p({ + awareness, + doc: binaries, + token, + workspace: `${workspace}_binaries`, + emitState, + }).then(p => ({ [`${name}_binaries`]: p })), ]) ); } diff --git a/libs/datasource/jwt/src/yjs/provider.ts b/libs/datasource/jwt/src/yjs/provider.ts index 125655e718..ad7df930e5 100644 --- a/libs/datasource/jwt/src/yjs/provider.ts +++ b/libs/datasource/jwt/src/yjs/provider.ts @@ -3,6 +3,7 @@ import { Doc } from 'yjs'; import { IndexedDBProvider, + KeckProvider, SQLiteProvider, WebsocketProvider, } from '@toeverything/datasource/jwt-rpc'; @@ -22,7 +23,7 @@ export type YjsProvider = ( instances: YjsDefaultInstances ) => Promise; -type ProviderType = 'idb' | 'sqlite' | 'ws'; +type ProviderType = 'idb' | 'sqlite' | 'ws' | 'keck'; export type YjsProviderOptions = { enabled: ProviderType[]; @@ -100,9 +101,9 @@ export const getYjsProviders = ( } }, keck: async (instances: YjsDefaultInstances) => { - if (options.enabled.includes('ws')) { + if (options.enabled.includes('keck')) { if (instances.token) { - const ws = new WebsocketProvider( + const ws = new KeckProvider( instances.token, options.backend, instances.workspace,