feat: sync to keck

This commit is contained in:
DarkSky
2022-09-14 17:39:24 +08:00
parent 3ff0dbe781
commit f8544fedd4
5 changed files with 34 additions and 27 deletions
@@ -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(
+20 -15
View File
@@ -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<Message, MessageCallback> = {
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<Message, MessageCallback> = {
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) => {
+2 -1
View File
@@ -1,3 +1,4 @@
export { IndexedDBProvider } from './indexeddb';
export { WebsocketProvider } from './provider';
export { KeckProvider } from './keckprovider';
export { SQLiteProvider } from './sqlite';
export { WebsocketProvider } from './wsprovider';
+7 -7
View File
@@ -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 })),
])
);
}
+4 -3
View File
@@ -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<unknown | undefined>;
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,