@hocuspocus/provider 3.0.4-rc.0 → 3.0.7-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hocuspocus-provider.cjs +22 -16
- package/dist/hocuspocus-provider.cjs.map +1 -1
- package/dist/hocuspocus-provider.esm.js +22 -16
- package/dist/hocuspocus-provider.esm.js.map +1 -1
- package/dist/packages/common/src/auth.d.ts +1 -1
- package/dist/packages/common/src/index.d.ts +4 -4
- package/dist/packages/extension-database/src/index.d.ts +1 -1
- package/dist/packages/extension-logger/src/index.d.ts +1 -1
- package/dist/packages/extension-redis/src/Redis.d.ts +0 -2
- package/dist/packages/extension-redis/src/index.d.ts +1 -1
- package/dist/packages/extension-sqlite/src/index.d.ts +1 -1
- package/dist/packages/extension-throttle/src/index.d.ts +0 -1
- package/dist/packages/extension-webhook/src/index.d.ts +0 -1
- package/dist/packages/provider/src/HocuspocusProvider.d.ts +9 -7
- package/dist/packages/provider/src/HocuspocusProviderWebsocket.d.ts +4 -6
- package/dist/packages/provider/src/IncomingMessage.d.ts +2 -2
- package/dist/packages/provider/src/MessageReceiver.d.ts +2 -2
- package/dist/packages/provider/src/MessageSender.d.ts +2 -2
- package/dist/packages/provider/src/OutgoingMessage.d.ts +2 -2
- package/dist/packages/provider/src/OutgoingMessages/AuthenticationMessage.d.ts +3 -3
- package/dist/packages/provider/src/OutgoingMessages/AwarenessMessage.d.ts +3 -3
- package/dist/packages/provider/src/OutgoingMessages/CloseMessage.d.ts +3 -3
- package/dist/packages/provider/src/OutgoingMessages/QueryAwarenessMessage.d.ts +3 -3
- package/dist/packages/provider/src/OutgoingMessages/StatelessMessage.d.ts +3 -3
- package/dist/packages/provider/src/OutgoingMessages/SyncStepOneMessage.d.ts +3 -3
- package/dist/packages/provider/src/OutgoingMessages/SyncStepTwoMessage.d.ts +3 -3
- package/dist/packages/provider/src/OutgoingMessages/UpdateMessage.d.ts +3 -3
- package/dist/packages/provider/src/index.d.ts +3 -3
- package/dist/packages/provider/src/types.d.ts +14 -108
- package/dist/packages/server/src/ClientConnection.d.ts +3 -5
- package/dist/packages/server/src/Connection.d.ts +13 -5
- package/dist/packages/server/src/DirectConnection.d.ts +3 -3
- package/dist/packages/server/src/Document.d.ts +1 -1
- package/dist/packages/server/src/Hocuspocus.d.ts +4 -5
- package/dist/packages/server/src/IncomingMessage.d.ts +4 -3
- package/dist/packages/server/src/MessageReceiver.d.ts +5 -5
- package/dist/packages/server/src/OutgoingMessage.d.ts +1 -1
- package/dist/packages/server/src/Server.d.ts +1 -2
- package/dist/packages/server/src/index.d.ts +9 -9
- package/dist/packages/server/src/types.d.ts +28 -9
- package/dist/packages/server/src/util/getParameters.d.ts +0 -2
- package/dist/packages/transformer/src/Prosemirror.d.ts +1 -1
- package/dist/packages/transformer/src/Tiptap.d.ts +1 -1
- package/dist/packages/transformer/src/index.d.ts +3 -3
- package/dist/playground/frontend/app/SocketContext.d.ts +2 -0
- package/dist/playground/frontend/next.config.d.ts +3 -0
- package/dist/tests/utils/index.d.ts +9 -9
- package/dist/tests/utils/newHocuspocusProviderWebsocket.d.ts +1 -1
- package/package.json +3 -3
- package/src/HocuspocusProvider.ts +42 -24
- package/src/HocuspocusProviderWebsocket.ts +8 -16
- package/src/IncomingMessage.ts +1 -1
- package/src/MessageReceiver.ts +4 -4
- package/src/MessageSender.ts +1 -1
- package/src/OutgoingMessage.ts +1 -1
- package/src/OutgoingMessages/AuthenticationMessage.ts +3 -3
- package/src/OutgoingMessages/AwarenessMessage.ts +3 -3
- package/src/OutgoingMessages/CloseMessage.ts +3 -3
- package/src/OutgoingMessages/QueryAwarenessMessage.ts +3 -3
- package/src/OutgoingMessages/StatelessMessage.ts +3 -3
- package/src/OutgoingMessages/SyncStepOneMessage.ts +3 -3
- package/src/OutgoingMessages/SyncStepTwoMessage.ts +3 -3
- package/src/OutgoingMessages/UpdateMessage.ts +3 -3
- package/src/index.ts +3 -3
- package/src/types.ts +16 -134
- package/dist/playground/frontend/vite.config.d.ts +0 -2
- /package/dist/{playground/frontend/src/main.d.ts → tests/server/beforeSync.d.ts} +0 -0
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
/// <reference types="node" />
|
|
4
|
-
/// <reference types="node" />
|
|
5
1
|
import type { IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'http';
|
|
6
2
|
import type { URLSearchParams } from 'url';
|
|
7
3
|
import type { Awareness } from 'y-protocols/awareness';
|
|
8
|
-
import type Connection from './Connection.
|
|
9
|
-
import type Document from './Document.
|
|
10
|
-
import type { Hocuspocus } from './Hocuspocus.
|
|
4
|
+
import type Connection from './Connection.ts';
|
|
5
|
+
import type Document from './Document.ts';
|
|
6
|
+
import type { Hocuspocus } from './Hocuspocus.ts';
|
|
11
7
|
export declare enum MessageType {
|
|
12
8
|
Unknown = -1,
|
|
13
9
|
Sync = 0,
|
|
14
10
|
Awareness = 1,
|
|
15
11
|
Auth = 2,
|
|
16
12
|
QueryAwareness = 3,
|
|
17
|
-
SyncReply = 4,
|
|
13
|
+
SyncReply = 4,// same as Sync, but won't trigger another 'SyncStep1'
|
|
18
14
|
Stateless = 5,
|
|
19
15
|
BroadcastStateless = 6,
|
|
20
16
|
CLOSE = 7,
|
|
@@ -42,6 +38,7 @@ export interface Extension {
|
|
|
42
38
|
onLoadDocument?(data: onLoadDocumentPayload): Promise<any>;
|
|
43
39
|
afterLoadDocument?(data: afterLoadDocumentPayload): Promise<any>;
|
|
44
40
|
beforeHandleMessage?(data: beforeHandleMessagePayload): Promise<any>;
|
|
41
|
+
beforeSync?(data: beforeSyncPayload): Promise<any>;
|
|
45
42
|
beforeBroadcastStateless?(data: beforeBroadcastStatelessPayload): Promise<any>;
|
|
46
43
|
onStateless?(payload: onStatelessPayload): Promise<any>;
|
|
47
44
|
onChange?(data: onChangePayload): Promise<any>;
|
|
@@ -54,7 +51,7 @@ export interface Extension {
|
|
|
54
51
|
afterUnloadDocument?(data: afterUnloadDocumentPayload): Promise<any>;
|
|
55
52
|
onDestroy?(data: onDestroyPayload): Promise<any>;
|
|
56
53
|
}
|
|
57
|
-
export type HookName = 'onConfigure' | 'onListen' | 'onUpgrade' | 'onConnect' | 'connected' | 'onAuthenticate' | 'onCreateDocument' | 'onLoadDocument' | 'afterLoadDocument' | 'beforeHandleMessage' | 'beforeBroadcastStateless' | 'onStateless' | 'onChange' | 'onStoreDocument' | 'afterStoreDocument' | 'onAwarenessUpdate' | 'onRequest' | 'onDisconnect' | 'beforeUnloadDocument' | 'afterUnloadDocument' | 'onDestroy';
|
|
54
|
+
export type HookName = 'onConfigure' | 'onListen' | 'onUpgrade' | 'onConnect' | 'connected' | 'onAuthenticate' | 'onCreateDocument' | 'onLoadDocument' | 'afterLoadDocument' | 'beforeHandleMessage' | 'beforeBroadcastStateless' | 'beforeSync' | 'onStateless' | 'onChange' | 'onStoreDocument' | 'afterStoreDocument' | 'onAwarenessUpdate' | 'onRequest' | 'onDisconnect' | 'beforeUnloadDocument' | 'afterUnloadDocument' | 'onDestroy';
|
|
58
55
|
export type HookPayloadByName = {
|
|
59
56
|
onConfigure: onConfigurePayload;
|
|
60
57
|
onListen: onListenPayload;
|
|
@@ -67,6 +64,7 @@ export type HookPayloadByName = {
|
|
|
67
64
|
afterLoadDocument: afterLoadDocumentPayload;
|
|
68
65
|
beforeHandleMessage: beforeHandleMessagePayload;
|
|
69
66
|
beforeBroadcastStateless: beforeBroadcastStatelessPayload;
|
|
67
|
+
beforeSync: beforeSyncPayload;
|
|
70
68
|
onStateless: onStatelessPayload;
|
|
71
69
|
onChange: onChangePayload;
|
|
72
70
|
onStoreDocument: onStoreDocumentPayload;
|
|
@@ -211,6 +209,27 @@ export interface beforeHandleMessagePayload {
|
|
|
211
209
|
socketId: string;
|
|
212
210
|
connection: Connection;
|
|
213
211
|
}
|
|
212
|
+
export interface beforeSyncPayload {
|
|
213
|
+
clientsCount: number;
|
|
214
|
+
context: any;
|
|
215
|
+
document: Document;
|
|
216
|
+
documentName: string;
|
|
217
|
+
connection: Connection;
|
|
218
|
+
/**
|
|
219
|
+
* The y-protocols/sync message type
|
|
220
|
+
* @example
|
|
221
|
+
* 0: SyncStep1
|
|
222
|
+
* 1: SyncStep2
|
|
223
|
+
* 2: YjsUpdate
|
|
224
|
+
*
|
|
225
|
+
* @see https://github.com/yjs/y-protocols/blob/master/sync.js#L13-L40
|
|
226
|
+
*/
|
|
227
|
+
type: number;
|
|
228
|
+
/**
|
|
229
|
+
* The payload of the y-sync message.
|
|
230
|
+
*/
|
|
231
|
+
payload: Uint8Array;
|
|
232
|
+
}
|
|
214
233
|
export interface beforeBroadcastStatelessPayload {
|
|
215
234
|
document: Document;
|
|
216
235
|
documentName: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Doc } from 'yjs';
|
|
2
2
|
import { Schema } from '@tiptap/pm/model';
|
|
3
|
-
import type { Transformer } from './types.
|
|
3
|
+
import type { Transformer } from './types.ts';
|
|
4
4
|
declare class Prosemirror implements Transformer {
|
|
5
5
|
defaultSchema: Schema;
|
|
6
6
|
schema(schema: Schema): Prosemirror;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Doc } from 'yjs';
|
|
2
2
|
import type { Extensions } from '@tiptap/core';
|
|
3
|
-
import type { Transformer } from './types.
|
|
3
|
+
import type { Transformer } from './types.ts';
|
|
4
4
|
export declare class Tiptap implements Transformer {
|
|
5
5
|
defaultExtensions: Extensions;
|
|
6
6
|
extensions(extensions: Extensions): Tiptap;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './Prosemirror.
|
|
2
|
-
export * from './Tiptap.
|
|
3
|
-
export * from './types.
|
|
1
|
+
export * from './Prosemirror.ts';
|
|
2
|
+
export * from './Tiptap.ts';
|
|
3
|
+
export * from './types.ts';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export * from './createDirectory.
|
|
2
|
-
export * from './flushRedis.
|
|
3
|
-
export * from './newHocuspocus.
|
|
4
|
-
export * from './newHocuspocusProvider.
|
|
5
|
-
export * from './newHocuspocusProviderWebsocket.
|
|
6
|
-
export * from './randomInteger.
|
|
7
|
-
export * from './redisConnectionSettings.
|
|
8
|
-
export * from './removeDirectory.
|
|
9
|
-
export * from './sleep.
|
|
1
|
+
export * from './createDirectory.ts';
|
|
2
|
+
export * from './flushRedis.ts';
|
|
3
|
+
export * from './newHocuspocus.ts';
|
|
4
|
+
export * from './newHocuspocusProvider.ts';
|
|
5
|
+
export * from './newHocuspocusProviderWebsocket.ts';
|
|
6
|
+
export * from './randomInteger.ts';
|
|
7
|
+
export * from './redisConnectionSettings.ts';
|
|
8
|
+
export * from './removeDirectory.ts';
|
|
9
|
+
export * from './sleep.ts';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { HocuspocusProviderWebsocketConfiguration } from '@hocuspocus/provider';
|
|
2
2
|
import { HocuspocusProviderWebsocket } from '@hocuspocus/provider';
|
|
3
3
|
import type { Hocuspocus } from '@hocuspocus/server';
|
|
4
|
-
export declare const newHocuspocusProviderWebsocket: (hocuspocus: Hocuspocus, options?: Partial<Omit<HocuspocusProviderWebsocketConfiguration,
|
|
4
|
+
export declare const newHocuspocusProviderWebsocket: (hocuspocus: Hocuspocus, options?: Partial<Omit<HocuspocusProviderWebsocketConfiguration, "url">>) => HocuspocusProviderWebsocket;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hocuspocus/provider",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.7-rc.0",
|
|
4
4
|
"description": "hocuspocus provider",
|
|
5
5
|
"homepage": "https://hocuspocus.dev",
|
|
6
6
|
"keywords": [
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"types": "dist/packages/provider/src/index.d.ts",
|
|
17
17
|
"exports": {
|
|
18
18
|
"source": {
|
|
19
|
-
"import": "./src"
|
|
19
|
+
"import": "./src/index.ts"
|
|
20
20
|
},
|
|
21
21
|
"default": {
|
|
22
22
|
"import": "./dist/hocuspocus-provider.esm.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"dist"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@hocuspocus/common": "^3.0.
|
|
32
|
+
"@hocuspocus/common": "^3.0.7-rc.0",
|
|
33
33
|
"@lifeomic/attempt": "^3.0.2",
|
|
34
34
|
"lib0": "^0.2.87",
|
|
35
35
|
"ws": "^8.17.1"
|
|
@@ -2,22 +2,23 @@ import { awarenessStatesToArray } from '@hocuspocus/common'
|
|
|
2
2
|
import type { Event, MessageEvent } from 'ws'
|
|
3
3
|
import { Awareness, removeAwarenessStates } from 'y-protocols/awareness'
|
|
4
4
|
import * as Y from 'yjs'
|
|
5
|
-
import EventEmitter from './EventEmitter.
|
|
5
|
+
import EventEmitter from './EventEmitter.ts'
|
|
6
6
|
import type {
|
|
7
|
-
CompleteHocuspocusProviderWebsocketConfiguration} from './HocuspocusProviderWebsocket.
|
|
7
|
+
CompleteHocuspocusProviderWebsocketConfiguration} from './HocuspocusProviderWebsocket.ts'
|
|
8
8
|
import {
|
|
9
9
|
HocuspocusProviderWebsocket,
|
|
10
|
-
} from './HocuspocusProviderWebsocket.
|
|
11
|
-
import { IncomingMessage } from './IncomingMessage.
|
|
12
|
-
import { MessageReceiver } from './MessageReceiver.
|
|
13
|
-
import { MessageSender } from './MessageSender.
|
|
14
|
-
import { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.
|
|
15
|
-
import { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.
|
|
16
|
-
import { StatelessMessage } from './OutgoingMessages/StatelessMessage.
|
|
17
|
-
import { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.
|
|
18
|
-
import { UpdateMessage } from './OutgoingMessages/UpdateMessage.
|
|
10
|
+
} from './HocuspocusProviderWebsocket.ts'
|
|
11
|
+
import { IncomingMessage } from './IncomingMessage.ts'
|
|
12
|
+
import { MessageReceiver } from './MessageReceiver.ts'
|
|
13
|
+
import { MessageSender } from './MessageSender.ts'
|
|
14
|
+
import { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.ts'
|
|
15
|
+
import { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.ts'
|
|
16
|
+
import { StatelessMessage } from './OutgoingMessages/StatelessMessage.ts'
|
|
17
|
+
import { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.ts'
|
|
18
|
+
import { UpdateMessage } from './OutgoingMessages/UpdateMessage.ts'
|
|
19
19
|
import type {
|
|
20
20
|
ConstructableOutgoingMessage,
|
|
21
|
+
onAuthenticatedParameters,
|
|
21
22
|
onAuthenticationFailedParameters,
|
|
22
23
|
onAwarenessChangeParameters,
|
|
23
24
|
onAwarenessUpdateParameters,
|
|
@@ -25,9 +26,11 @@ import type {
|
|
|
25
26
|
onDisconnectParameters,
|
|
26
27
|
onMessageParameters,
|
|
27
28
|
onOpenParameters,
|
|
28
|
-
onOutgoingMessageParameters,
|
|
29
|
+
onOutgoingMessageParameters,
|
|
30
|
+
onStatelessParameters,
|
|
29
31
|
onSyncedParameters,
|
|
30
|
-
|
|
32
|
+
onUnsyncedChangesParameters,
|
|
33
|
+
} from './types.ts'
|
|
31
34
|
|
|
32
35
|
export type HocuspocusProviderConfiguration =
|
|
33
36
|
Required<Pick<CompleteHocuspocusProviderConfiguration, 'name'>>
|
|
@@ -71,7 +74,7 @@ export interface CompleteHocuspocusProviderConfiguration {
|
|
|
71
74
|
*/
|
|
72
75
|
forceSyncInterval: false | number,
|
|
73
76
|
|
|
74
|
-
onAuthenticated: () => void,
|
|
77
|
+
onAuthenticated: (data: onAuthenticatedParameters) => void,
|
|
75
78
|
onAuthenticationFailed: (data: onAuthenticationFailedParameters) => void,
|
|
76
79
|
onOpen: (data: onOpenParameters) => void,
|
|
77
80
|
onConnect: () => void,
|
|
@@ -84,6 +87,7 @@ export interface CompleteHocuspocusProviderConfiguration {
|
|
|
84
87
|
onAwarenessUpdate: (data: onAwarenessUpdateParameters) => void,
|
|
85
88
|
onAwarenessChange: (data: onAwarenessChangeParameters) => void,
|
|
86
89
|
onStateless: (data: onStatelessParameters) => void
|
|
90
|
+
onUnsyncedChanges: (data: onUnsyncedChangesParameters) => void
|
|
87
91
|
}
|
|
88
92
|
|
|
89
93
|
export class AwarenessError extends Error {
|
|
@@ -112,6 +116,7 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
112
116
|
onAwarenessUpdate: () => null,
|
|
113
117
|
onAwarenessChange: () => null,
|
|
114
118
|
onStateless: () => null,
|
|
119
|
+
onUnsyncedChanges: () => null,
|
|
115
120
|
}
|
|
116
121
|
|
|
117
122
|
isSynced = false
|
|
@@ -125,7 +130,7 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
125
130
|
// @internal
|
|
126
131
|
manageSocket = false
|
|
127
132
|
|
|
128
|
-
private
|
|
133
|
+
private _isAttached = false
|
|
129
134
|
|
|
130
135
|
intervals: any = {
|
|
131
136
|
forceSync: null,
|
|
@@ -146,6 +151,7 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
146
151
|
this.on('awarenessUpdate', this.configuration.onAwarenessUpdate)
|
|
147
152
|
this.on('awarenessChange', this.configuration.onAwarenessChange)
|
|
148
153
|
this.on('stateless', this.configuration.onStateless)
|
|
154
|
+
this.on('unsyncedChanges', this.configuration.onUnsyncedChanges)
|
|
149
155
|
|
|
150
156
|
this.on('authenticated', this.configuration.onAuthenticated)
|
|
151
157
|
this.on('authenticationFailed', this.configuration.onAuthenticationFailed)
|
|
@@ -190,8 +196,6 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
190
196
|
|
|
191
197
|
forwardConnect = (e: any) => this.emit('connect', e)
|
|
192
198
|
|
|
193
|
-
// forwardOpen = (e: any) => this.emit('open', e)
|
|
194
|
-
|
|
195
199
|
forwardClose = (e: any) => this.emit('close', e)
|
|
196
200
|
|
|
197
201
|
forwardDisconnect = (e: any) => this.emit('disconnect', e)
|
|
@@ -214,6 +218,10 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
214
218
|
return this.configuration.document
|
|
215
219
|
}
|
|
216
220
|
|
|
221
|
+
public get isAttached() {
|
|
222
|
+
return this._isAttached
|
|
223
|
+
}
|
|
224
|
+
|
|
217
225
|
get awareness() {
|
|
218
226
|
return this.configuration.awareness
|
|
219
227
|
}
|
|
@@ -224,12 +232,12 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
224
232
|
|
|
225
233
|
private resetUnsyncedChanges() {
|
|
226
234
|
this.unsyncedChanges = 1
|
|
227
|
-
this.emit('unsyncedChanges', this.unsyncedChanges)
|
|
235
|
+
this.emit('unsyncedChanges', { number: this.unsyncedChanges })
|
|
228
236
|
}
|
|
229
237
|
|
|
230
238
|
incrementUnsyncedChanges() {
|
|
231
239
|
this.unsyncedChanges += 1
|
|
232
|
-
this.emit('unsyncedChanges', this.unsyncedChanges)
|
|
240
|
+
this.emit('unsyncedChanges', { number: this.unsyncedChanges })
|
|
233
241
|
}
|
|
234
242
|
|
|
235
243
|
decrementUnsyncedChanges() {
|
|
@@ -241,7 +249,7 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
241
249
|
this.synced = true
|
|
242
250
|
}
|
|
243
251
|
|
|
244
|
-
this.emit('unsyncedChanges', this.unsyncedChanges)
|
|
252
|
+
this.emit('unsyncedChanges', { number: this.unsyncedChanges })
|
|
245
253
|
}
|
|
246
254
|
|
|
247
255
|
forceSync() {
|
|
@@ -315,10 +323,18 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
315
323
|
|
|
316
324
|
// not needed, but provides backward compatibility with e.g. lexical/yjs
|
|
317
325
|
async connect() {
|
|
326
|
+
if( this.manageSocket ) {
|
|
327
|
+
return this.configuration.websocketProvider.connect()
|
|
328
|
+
}
|
|
329
|
+
|
|
318
330
|
console.warn('HocuspocusProvider::connect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.')
|
|
319
331
|
}
|
|
320
332
|
|
|
321
333
|
disconnect() {
|
|
334
|
+
if( this.manageSocket ) {
|
|
335
|
+
return this.configuration.websocketProvider.disconnect()
|
|
336
|
+
}
|
|
337
|
+
|
|
322
338
|
console.warn('HocuspocusProvider::disconnect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.')
|
|
323
339
|
}
|
|
324
340
|
|
|
@@ -367,6 +383,8 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
367
383
|
}
|
|
368
384
|
|
|
369
385
|
send(message: ConstructableOutgoingMessage, args: any) {
|
|
386
|
+
if( !this._isAttached ) return;
|
|
387
|
+
|
|
370
388
|
const messageSender = new MessageSender(message, args)
|
|
371
389
|
|
|
372
390
|
this.emit('outgoingMessage', { message: messageSender.message })
|
|
@@ -443,11 +461,11 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
443
461
|
|
|
444
462
|
this.configuration.websocketProvider.detach(this)
|
|
445
463
|
|
|
446
|
-
this.
|
|
464
|
+
this._isAttached = false
|
|
447
465
|
}
|
|
448
466
|
|
|
449
467
|
attach() {
|
|
450
|
-
if( this.
|
|
468
|
+
if( this._isAttached ) return
|
|
451
469
|
|
|
452
470
|
this.configuration.websocketProvider.on('connect', this.configuration.onConnect)
|
|
453
471
|
this.configuration.websocketProvider.on('connect', this.forwardConnect)
|
|
@@ -466,7 +484,7 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
466
484
|
|
|
467
485
|
this.configuration.websocketProvider.attach(this)
|
|
468
486
|
|
|
469
|
-
this.
|
|
487
|
+
this._isAttached = true
|
|
470
488
|
}
|
|
471
489
|
|
|
472
490
|
permissionDeniedHandler(reason: string) {
|
|
@@ -478,7 +496,7 @@ export class HocuspocusProvider extends EventEmitter {
|
|
|
478
496
|
this.isAuthenticated = true
|
|
479
497
|
this.authorizedScope = scope
|
|
480
498
|
|
|
481
|
-
this.emit('authenticated')
|
|
499
|
+
this.emit('authenticated', { scope })
|
|
482
500
|
}
|
|
483
501
|
|
|
484
502
|
setAwarenessField(key: string, value: any) {
|
|
@@ -5,16 +5,16 @@ import { retry } from '@lifeomic/attempt'
|
|
|
5
5
|
import * as time from 'lib0/time'
|
|
6
6
|
import * as url from 'lib0/url'
|
|
7
7
|
import type { MessageEvent , Event } from 'ws'
|
|
8
|
-
import EventEmitter from './EventEmitter.
|
|
9
|
-
import type { HocuspocusProvider } from './HocuspocusProvider.
|
|
8
|
+
import EventEmitter from './EventEmitter.ts'
|
|
9
|
+
import type { HocuspocusProvider } from './HocuspocusProvider.ts'
|
|
10
10
|
import type {
|
|
11
11
|
onAwarenessChangeParameters, onAwarenessUpdateParameters,
|
|
12
|
-
onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters} from './types.
|
|
12
|
+
onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters} from './types.ts'
|
|
13
13
|
import {
|
|
14
14
|
WebSocketStatus,
|
|
15
|
-
} from './types.
|
|
16
|
-
import { IncomingMessage } from './IncomingMessage.
|
|
17
|
-
import {CloseMessage} from "./OutgoingMessages/CloseMessage.
|
|
15
|
+
} from './types.ts'
|
|
16
|
+
import { IncomingMessage } from './IncomingMessage.ts'
|
|
17
|
+
import { CloseMessage } from "./OutgoingMessages/CloseMessage.ts"
|
|
18
18
|
|
|
19
19
|
export type HocusPocusWebSocket = WebSocket & { identifier: string };
|
|
20
20
|
|
|
@@ -173,7 +173,6 @@ export class HocuspocusProviderWebsocket extends EventEmitter {
|
|
|
173
173
|
this.on('message', this.configuration.onMessage)
|
|
174
174
|
this.on('outgoingMessage', this.configuration.onOutgoingMessage)
|
|
175
175
|
this.on('status', this.configuration.onStatus)
|
|
176
|
-
this.on('status', this.onStatus.bind(this))
|
|
177
176
|
this.on('disconnect', this.configuration.onDisconnect)
|
|
178
177
|
this.on('close', this.configuration.onClose)
|
|
179
178
|
this.on('destroy', this.configuration.onDestroy)
|
|
@@ -201,26 +200,20 @@ export class HocuspocusProviderWebsocket extends EventEmitter {
|
|
|
201
200
|
|
|
202
201
|
receivedOnOpenPayload?: Event | undefined = undefined
|
|
203
202
|
|
|
204
|
-
receivedOnStatusPayload?: onStatusParameters | undefined = undefined
|
|
205
203
|
|
|
206
204
|
async onOpen(event: Event) {
|
|
207
205
|
this.cancelWebsocketRetry = undefined
|
|
208
206
|
this.receivedOnOpenPayload = event
|
|
209
207
|
}
|
|
210
208
|
|
|
211
|
-
async onStatus(data: onStatusParameters) {
|
|
212
|
-
this.receivedOnStatusPayload = data
|
|
213
|
-
}
|
|
214
|
-
|
|
215
209
|
attach(provider: HocuspocusProvider) {
|
|
216
|
-
let connectPromise: Promise<any> | undefined
|
|
217
210
|
this.configuration.providerMap.set(provider.configuration.name, provider)
|
|
218
211
|
|
|
219
212
|
if (this.status === WebSocketStatus.Disconnected && this.shouldConnect) {
|
|
220
|
-
|
|
213
|
+
this.connect()
|
|
221
214
|
}
|
|
222
215
|
|
|
223
|
-
if (this.receivedOnOpenPayload) {
|
|
216
|
+
if (this.receivedOnOpenPayload && this.status === WebSocketStatus.Connected) {
|
|
224
217
|
provider.onOpen(this.receivedOnOpenPayload)
|
|
225
218
|
}
|
|
226
219
|
}
|
|
@@ -252,7 +245,6 @@ export class HocuspocusProviderWebsocket extends EventEmitter {
|
|
|
252
245
|
}
|
|
253
246
|
|
|
254
247
|
this.receivedOnOpenPayload = undefined
|
|
255
|
-
this.receivedOnStatusPayload = undefined
|
|
256
248
|
this.shouldConnect = true
|
|
257
249
|
|
|
258
250
|
const abortableRetry = () => {
|
package/src/IncomingMessage.ts
CHANGED
package/src/MessageReceiver.ts
CHANGED
|
@@ -3,10 +3,10 @@ import { readVarInt, readVarString } from 'lib0/decoding'
|
|
|
3
3
|
import * as awarenessProtocol from 'y-protocols/awareness'
|
|
4
4
|
import { messageYjsSyncStep2, readSyncMessage } from 'y-protocols/sync'
|
|
5
5
|
import type { CloseEvent } from 'ws'
|
|
6
|
-
import type { HocuspocusProvider } from './HocuspocusProvider.
|
|
7
|
-
import type { IncomingMessage } from './IncomingMessage.
|
|
8
|
-
import { OutgoingMessage } from './OutgoingMessage.
|
|
9
|
-
import { MessageType } from './types.
|
|
6
|
+
import type { HocuspocusProvider } from './HocuspocusProvider.ts'
|
|
7
|
+
import type { IncomingMessage } from './IncomingMessage.ts'
|
|
8
|
+
import { OutgoingMessage } from './OutgoingMessage.ts'
|
|
9
|
+
import { MessageType } from './types.ts'
|
|
10
10
|
|
|
11
11
|
export class MessageReceiver {
|
|
12
12
|
|
package/src/MessageSender.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Encoder} from 'lib0/encoding'
|
|
2
2
|
import { toUint8Array } from 'lib0/encoding'
|
|
3
3
|
import * as bc from 'lib0/broadcastchannel'
|
|
4
|
-
import type { ConstructableOutgoingMessage } from './types.
|
|
4
|
+
import type { ConstructableOutgoingMessage } from './types.ts'
|
|
5
5
|
|
|
6
6
|
export class MessageSender {
|
|
7
7
|
|
package/src/OutgoingMessage.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Encoder} from 'lib0/encoding'
|
|
2
2
|
import { createEncoder, toUint8Array } from 'lib0/encoding'
|
|
3
|
-
import type { MessageType, OutgoingMessageArguments, OutgoingMessageInterface } from './types.
|
|
3
|
+
import type { MessageType, OutgoingMessageArguments, OutgoingMessageInterface } from './types.ts'
|
|
4
4
|
|
|
5
5
|
export class OutgoingMessage implements OutgoingMessageInterface {
|
|
6
6
|
encoder: Encoder
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { writeVarString, writeVarUint } from 'lib0/encoding'
|
|
2
2
|
import { writeAuthentication } from '@hocuspocus/common'
|
|
3
|
-
import type { OutgoingMessageArguments } from '../types.
|
|
4
|
-
import { MessageType } from '../types.
|
|
5
|
-
import { OutgoingMessage } from '../OutgoingMessage.
|
|
3
|
+
import type { OutgoingMessageArguments } from '../types.ts'
|
|
4
|
+
import { MessageType } from '../types.ts'
|
|
5
|
+
import { OutgoingMessage } from '../OutgoingMessage.ts'
|
|
6
6
|
|
|
7
7
|
export class AuthenticationMessage extends OutgoingMessage {
|
|
8
8
|
type = MessageType.Auth
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as encoding from 'lib0/encoding'
|
|
2
2
|
import { encodeAwarenessUpdate } from 'y-protocols/awareness'
|
|
3
|
-
import type { OutgoingMessageArguments } from '../types.
|
|
4
|
-
import { MessageType } from '../types.
|
|
5
|
-
import { OutgoingMessage } from '../OutgoingMessage.
|
|
3
|
+
import type { OutgoingMessageArguments } from '../types.ts'
|
|
4
|
+
import { MessageType } from '../types.ts'
|
|
5
|
+
import { OutgoingMessage } from '../OutgoingMessage.ts'
|
|
6
6
|
|
|
7
7
|
export class AwarenessMessage extends OutgoingMessage {
|
|
8
8
|
type = MessageType.Awareness
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as encoding from 'lib0/encoding'
|
|
2
|
-
import type { OutgoingMessageArguments } from '../types.
|
|
3
|
-
import { MessageType } from '../types.
|
|
4
|
-
import { OutgoingMessage } from '../OutgoingMessage.
|
|
2
|
+
import type { OutgoingMessageArguments } from '../types.ts'
|
|
3
|
+
import { MessageType } from '../types.ts'
|
|
4
|
+
import { OutgoingMessage } from '../OutgoingMessage.ts'
|
|
5
5
|
|
|
6
6
|
export class CloseMessage extends OutgoingMessage {
|
|
7
7
|
type = MessageType.CLOSE
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as encoding from 'lib0/encoding'
|
|
2
|
-
import type { OutgoingMessageArguments } from '../types.
|
|
3
|
-
import { MessageType } from '../types.
|
|
4
|
-
import { OutgoingMessage } from '../OutgoingMessage.
|
|
2
|
+
import type { OutgoingMessageArguments } from '../types.ts'
|
|
3
|
+
import { MessageType } from '../types.ts'
|
|
4
|
+
import { OutgoingMessage } from '../OutgoingMessage.ts'
|
|
5
5
|
|
|
6
6
|
export class QueryAwarenessMessage extends OutgoingMessage {
|
|
7
7
|
type = MessageType.QueryAwareness
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { writeVarString, writeVarUint } from 'lib0/encoding'
|
|
2
|
-
import type { OutgoingMessageArguments } from '../types.
|
|
3
|
-
import { MessageType } from '../types.
|
|
4
|
-
import { OutgoingMessage } from '../OutgoingMessage.
|
|
2
|
+
import type { OutgoingMessageArguments } from '../types.ts'
|
|
3
|
+
import { MessageType } from '../types.ts'
|
|
4
|
+
import { OutgoingMessage } from '../OutgoingMessage.ts'
|
|
5
5
|
|
|
6
6
|
export class StatelessMessage extends OutgoingMessage {
|
|
7
7
|
type = MessageType.Stateless
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as encoding from 'lib0/encoding'
|
|
2
2
|
import * as syncProtocol from 'y-protocols/sync'
|
|
3
|
-
import type { OutgoingMessageArguments } from '../types.
|
|
4
|
-
import { MessageType } from '../types.
|
|
5
|
-
import { OutgoingMessage } from '../OutgoingMessage.
|
|
3
|
+
import type { OutgoingMessageArguments } from '../types.ts'
|
|
4
|
+
import { MessageType } from '../types.ts'
|
|
5
|
+
import { OutgoingMessage } from '../OutgoingMessage.ts'
|
|
6
6
|
|
|
7
7
|
export class SyncStepOneMessage extends OutgoingMessage {
|
|
8
8
|
type = MessageType.Sync
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as encoding from 'lib0/encoding'
|
|
2
2
|
import * as syncProtocol from 'y-protocols/sync'
|
|
3
|
-
import type { OutgoingMessageArguments } from '../types.
|
|
4
|
-
import { MessageType } from '../types.
|
|
5
|
-
import { OutgoingMessage } from '../OutgoingMessage.
|
|
3
|
+
import type { OutgoingMessageArguments } from '../types.ts'
|
|
4
|
+
import { MessageType } from '../types.ts'
|
|
5
|
+
import { OutgoingMessage } from '../OutgoingMessage.ts'
|
|
6
6
|
|
|
7
7
|
export class SyncStepTwoMessage extends OutgoingMessage {
|
|
8
8
|
type = MessageType.Sync
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { writeVarString, writeVarUint } from 'lib0/encoding'
|
|
2
2
|
import { writeUpdate } from 'y-protocols/sync'
|
|
3
|
-
import type { OutgoingMessageArguments } from '../types.
|
|
4
|
-
import { MessageType } from '../types.
|
|
5
|
-
import { OutgoingMessage } from '../OutgoingMessage.
|
|
3
|
+
import type { OutgoingMessageArguments } from '../types.ts'
|
|
4
|
+
import { MessageType } from '../types.ts'
|
|
5
|
+
import { OutgoingMessage } from '../OutgoingMessage.ts'
|
|
6
6
|
|
|
7
7
|
export class UpdateMessage extends OutgoingMessage {
|
|
8
8
|
type = MessageType.Sync
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './HocuspocusProvider.
|
|
2
|
-
export * from './HocuspocusProviderWebsocket.
|
|
3
|
-
export * from './types.
|
|
1
|
+
export * from './HocuspocusProvider.ts'
|
|
2
|
+
export * from './HocuspocusProviderWebsocket.ts'
|
|
3
|
+
export * from './types.ts'
|