mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-13 16:16:46 +08:00
feat: sync to keck
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
export { IndexedDBProvider } from './indexeddb';
|
||||
export { WebsocketProvider } from './provider';
|
||||
export { KeckProvider } from './keckprovider';
|
||||
export { SQLiteProvider } from './sqlite';
|
||||
export { WebsocketProvider } from './wsprovider';
|
||||
|
||||
@@ -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 })),
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user