@hocuspocus/extension-throttle 1.0.0-alpha.57 → 1.0.0-alpha.60

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.
@@ -1,12 +1,10 @@
1
- import { Extension, onChangePayload, onLoadDocumentPayload, storePayload } from '@hocuspocus/server';
1
+ import { Extension, onChangePayload, onLoadDocumentPayload, storePayload, fetchPayload } from '@hocuspocus/server';
2
2
  export interface DatabaseConfiguration {
3
3
  /**
4
4
  * Pass a Promise to retrieve updates from your database. The Promise should resolve to
5
5
  * an array of items with Y.js-compatible binary data.
6
6
  */
7
- fetch: ({ documentName }: {
8
- documentName: string;
9
- }) => Promise<Uint8Array | null>;
7
+ fetch: (data: fetchPayload) => Promise<Uint8Array | null>;
10
8
  /**
11
9
  * Pass a function to store updates in your database.
12
10
  */
@@ -24,7 +22,7 @@ export declare class Database implements Extension {
24
22
  /**
25
23
  * Get stored data from the database.
26
24
  */
27
- onLoadDocument({ document, documentName }: onLoadDocumentPayload): Promise<any>;
25
+ onLoadDocument(data: onLoadDocumentPayload): Promise<any>;
28
26
  /**
29
27
  * Store new updates in the database.
30
28
  */
@@ -1,6 +1,6 @@
1
1
  import RedisClient from 'ioredis';
2
2
  import Redlock from 'redlock';
3
- import { Document, Extension, afterLoadDocumentPayload, afterStoreDocumentPayload, onDisconnectPayload, onStoreDocumentPayload, onAwarenessUpdatePayload, Debugger, onConfigurePayload, onListenPayload } from '@hocuspocus/server';
3
+ import { Document, Extension, afterLoadDocumentPayload, afterStoreDocumentPayload, onDisconnectPayload, onStoreDocumentPayload, onAwarenessUpdatePayload, onChangePayload, Debugger, onConfigurePayload, onListenPayload } from '@hocuspocus/server';
4
4
  export interface Configuration {
5
5
  /**
6
6
  * Redis port
@@ -75,13 +75,17 @@ export declare class Redis implements Extension {
75
75
  /**
76
76
  * Handle awareness update messages received directly by this Hocuspocus instance.
77
77
  */
78
- onAwarenessUpdate({ documentName, awareness }: onAwarenessUpdatePayload): Promise<number>;
78
+ onAwarenessUpdate({ documentName, awareness, added, updated, removed, }: onAwarenessUpdatePayload): Promise<number>;
79
79
  /**
80
80
  * Handle incoming messages published on all subscribed document channels.
81
81
  * Note that this will also include messages from ourselves as it is not possible
82
82
  * in Redis to filter these.
83
83
  */
84
84
  private handleIncomingMessage;
85
+ /**
86
+ * if the ydoc changed, we'll need to inform other Hocuspocus servers about it.
87
+ */
88
+ onChange(data: onChangePayload): Promise<any>;
85
89
  /**
86
90
  * Make sure to *not* listen for further changes, when there’s
87
91
  * noone connected anymore.
@@ -110,6 +110,7 @@ export declare class HocuspocusProvider extends EventEmitter {
110
110
  shouldConnect: boolean;
111
111
  status: WebSocketStatus;
112
112
  isSynced: boolean;
113
+ unsyncedChanges: number;
113
114
  isAuthenticated: boolean;
114
115
  lastMessageReceived: number;
115
116
  mux: mutex.mutex;
@@ -120,6 +121,7 @@ export declare class HocuspocusProvider extends EventEmitter {
120
121
  } | null;
121
122
  constructor(configuration: HocuspocusProviderConfiguration);
122
123
  setConfiguration(configuration?: Partial<HocuspocusProviderConfiguration>): void;
124
+ boundConnect: () => Promise<void>;
123
125
  connect(): Promise<void>;
124
126
  createWebSocketConnection(): Promise<unknown>;
125
127
  resolveConnectionAttempt(): void;
@@ -127,8 +129,11 @@ export declare class HocuspocusProvider extends EventEmitter {
127
129
  rejectConnectionAttempt(): void;
128
130
  get document(): Y.Doc;
129
131
  get awareness(): Awareness;
132
+ get hasUnsyncedChanges(): boolean;
130
133
  checkConnection(): void;
131
134
  forceSync(): void;
135
+ boundBeforeUnload: () => void;
136
+ beforeUnload(): void;
132
137
  registerEventListeners(): void;
133
138
  documentUpdateHandler(update: Uint8Array, origin: any): void;
134
139
  awarenessUpdateHandler({ added, updated, removed }: any, origin: any): void;
@@ -148,6 +153,7 @@ export declare class HocuspocusProvider extends EventEmitter {
148
153
  onClose(event: CloseEvent): void;
149
154
  destroy(): void;
150
155
  get broadcastChannel(): string;
156
+ boundBroadcastChannelSubscriber: (data: ArrayBuffer) => void;
151
157
  broadcastChannelSubscriber(data: ArrayBuffer): void;
152
158
  subscribeToBroadcastChannel(): void;
153
159
  disconnectBroadcastChannel(): void;
@@ -19,7 +19,7 @@ export declare class Document extends Doc {
19
19
  /**
20
20
  * Constructor.
21
21
  */
22
- constructor(name: string, logger: Debugger);
22
+ constructor(name: string, logger: Debugger, yDocOptions: {});
23
23
  /**
24
24
  * Check if the Document is empty
25
25
  */
@@ -12,6 +12,10 @@ export declare const defaultConfiguration: {
12
12
  debounce: number;
13
13
  maxDebounce: number;
14
14
  quiet: boolean;
15
+ yDocOptions: {
16
+ gc: boolean;
17
+ gcFilter: () => boolean;
18
+ };
15
19
  };
16
20
  /**
17
21
  * Hocuspocus Server
@@ -8,6 +8,6 @@ export declare class MessageReceiver {
8
8
  logger: Debugger;
9
9
  constructor(message: IncomingMessage, logger: Debugger);
10
10
  apply(document: Document, connection?: Connection, reply?: (message: Uint8Array) => void): void;
11
- readSyncMessage(message: IncomingMessage, document: Document, connection?: Connection, reply?: (message: Uint8Array) => void): 0 | 2 | 1;
11
+ readSyncMessage(message: IncomingMessage, document: Document, connection?: Connection, reply?: (message: Uint8Array) => void, requestFirstSync?: boolean): 0 | 2 | 1;
12
12
  applyQueryAwarenessMessage(awareness: Awareness, reply?: (message: Uint8Array) => void): void;
13
13
  }
@@ -7,6 +7,7 @@ export declare class OutgoingMessage {
7
7
  category?: string;
8
8
  constructor();
9
9
  createSyncMessage(): OutgoingMessage;
10
+ createSyncReplyMessage(): OutgoingMessage;
10
11
  createAwarenessUpdateMessage(awareness: Awareness, changedClients?: Array<any>): OutgoingMessage;
11
12
  writeQueryAwareness(): OutgoingMessage;
12
13
  writeAuthenticated(): OutgoingMessage;
@@ -9,7 +9,8 @@ export declare enum MessageType {
9
9
  Sync = 0,
10
10
  Awareness = 1,
11
11
  Auth = 2,
12
- QueryAwareness = 3
12
+ QueryAwareness = 3,
13
+ SyncReply = 4
13
14
  }
14
15
  export interface AwarenessUpdate {
15
16
  added: Array<any>;
@@ -48,7 +49,7 @@ export declare type HookName = 'onConfigure' | 'onListen' | 'onUpgrade' | 'onCon
48
49
  * @deprecated onCreateDocument is deprecated, use onLoadDocument instead
49
50
  */
50
51
  'onCreateDocument' | 'onLoadDocument' | 'afterLoadDocument' | 'onChange' | 'onStoreDocument' | 'afterStoreDocument' | 'onAwarenessUpdate' | 'onRequest' | 'onDisconnect' | 'onDestroy';
51
- export declare type HookPayload = onConfigurePayload | onListenPayload | onUpgradePayload | onConnectPayload | connectedPayload | onAuthenticatePayload | onLoadDocumentPayload | onLoadDocumentPayload | onLoadDocumentPayload | onChangePayload | onStoreDocumentPayload | afterStoreDocumentPayload | onAwarenessUpdatePayload | onRequestPayload | onDisconnectPayload | onDestroyPayload;
52
+ export declare type HookPayload = onConfigurePayload | onListenPayload | onUpgradePayload | onConnectPayload | connectedPayload | onAuthenticatePayload | onLoadDocumentPayload | onChangePayload | onStoreDocumentPayload | afterStoreDocumentPayload | onAwarenessUpdatePayload | onRequestPayload | onDisconnectPayload | onDestroyPayload;
52
53
  export interface Configuration extends Extension {
53
54
  /**
54
55
  * A name for the instance, used for logging.
@@ -79,6 +80,13 @@ export interface Configuration extends Extension {
79
80
  * By default, the servers show a start screen. If passed false, the server will start quietly.
80
81
  */
81
82
  quiet: boolean;
83
+ /**
84
+ * options to pass to the ydoc document
85
+ */
86
+ yDocOptions: {
87
+ gc: boolean;
88
+ gcFilter: () => boolean;
89
+ };
82
90
  /**
83
91
  * Function which returns the (customized) document name based on the request
84
92
  */
@@ -179,6 +187,16 @@ export declare type StatesArray = {
179
187
  clientId: number;
180
188
  [key: string | number]: any;
181
189
  }[];
190
+ export interface fetchPayload {
191
+ context: any;
192
+ document: Document;
193
+ documentName: string;
194
+ instance: Hocuspocus;
195
+ requestHeaders: IncomingHttpHeaders;
196
+ requestParameters: URLSearchParams;
197
+ socketId: string;
198
+ connection: ConnectionConfiguration;
199
+ }
182
200
  export interface storePayload extends onStoreDocumentPayload {
183
201
  state: Buffer;
184
202
  }
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hocuspocus/extension-throttle",
3
- "version": "1.0.0-alpha.57",
3
+ "version": "1.0.0-alpha.60",
4
4
  "description": "hocuspocus throttle extension",
5
5
  "homepage": "https://hocuspocus.dev",
6
6
  "keywords": [
@@ -27,7 +27,7 @@
27
27
  "dist"
28
28
  ],
29
29
  "dependencies": {
30
- "@hocuspocus/server": "^1.0.0-alpha.101"
30
+ "@hocuspocus/server": "^1.0.0-alpha.104"
31
31
  },
32
- "gitHead": "b0a04ffe8d56cfa6b269a2c8ad7f64c92b108de0"
32
+ "gitHead": "02845d914742af88c8ef034adf072fcaadb48208"
33
33
  }