@hocuspocus/provider 2.0.3 → 2.0.5

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.
@@ -2,6 +2,12 @@ export interface CloseEvent {
2
2
  code: number;
3
3
  reason: string;
4
4
  }
5
+ /**
6
+ * The server is terminating the connection because a data frame was received
7
+ * that is too large.
8
+ * See: https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent/code
9
+ */
10
+ export declare const MessageTooBig: CloseEvent;
5
11
  /**
6
12
  * The server successfully processed the request, asks that the requester reset
7
13
  * its document view, and is not returning any content.
@@ -1,6 +1,6 @@
1
1
  import RedisClient, { ClusterNode, ClusterOptions, RedisOptions } from 'ioredis';
2
2
  import Redlock from 'redlock';
3
- import { Document, Extension, afterLoadDocumentPayload, afterStoreDocumentPayload, onDisconnectPayload, onStoreDocumentPayload, onAwarenessUpdatePayload, onChangePayload, Debugger, onConfigurePayload, onListenPayload, beforeBroadcastStatelessPayload } from '@hocuspocus/server';
3
+ import { Extension, afterLoadDocumentPayload, afterStoreDocumentPayload, onDisconnectPayload, onStoreDocumentPayload, onAwarenessUpdatePayload, onChangePayload, Debugger, onConfigurePayload, onListenPayload, beforeBroadcastStatelessPayload, Hocuspocus } from '@hocuspocus/server';
4
4
  export type RedisInstance = RedisClient.Cluster | RedisClient.Redis;
5
5
  export interface Configuration {
6
6
  /**
@@ -58,7 +58,7 @@ export declare class Redis implements Extension {
58
58
  configuration: Configuration;
59
59
  pub: RedisInstance;
60
60
  sub: RedisInstance;
61
- documents: Map<string, Document>;
61
+ instance: Hocuspocus;
62
62
  redlock: Redlock;
63
63
  locks: Map<string, Redlock.Lock>;
64
64
  logger: Debugger;
@@ -108,7 +108,7 @@ export declare class Redis implements Extension {
108
108
  * Make sure to *not* listen for further changes, when there’s
109
109
  * noone connected anymore.
110
110
  */
111
- onDisconnect: ({ document, documentName }: onDisconnectPayload) => Promise<void>;
111
+ onDisconnect: ({ documentName }: onDisconnectPayload) => Promise<void>;
112
112
  beforeBroadcastStateless(data: beforeBroadcastStatelessPayload): Promise<number>;
113
113
  /**
114
114
  * Kill the Redlock connection immediately.
@@ -0,0 +1,11 @@
1
+ import { CompleteHocuspocusProviderWebsocketConfiguration, HocuspocusProviderWebsocket } from './HocuspocusProviderWebsocket';
2
+ export type TiptapCollabProviderWebsocketConfiguration = Partial<CompleteHocuspocusProviderWebsocketConfiguration> & AdditionalTiptapCollabProviderWebsocketConfiguration;
3
+ export interface AdditionalTiptapCollabProviderWebsocketConfiguration {
4
+ /**
5
+ * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev
6
+ */
7
+ appId: string;
8
+ }
9
+ export declare class TiptapCollabProviderWebsocket extends HocuspocusProviderWebsocket {
10
+ constructor(configuration: TiptapCollabProviderWebsocketConfiguration);
11
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './HocuspocusProvider';
2
2
  export * from './TiptapCollabProvider';
3
+ export * from './TiptapCollabProviderWebsocket';
3
4
  export * from './HocuspocusProviderWebsocket';
4
5
  export * from './types';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hocuspocus/provider",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "hocuspocus provider",
5
5
  "homepage": "https://hocuspocus.dev",
6
6
  "keywords": [
@@ -28,7 +28,7 @@
28
28
  "dist"
29
29
  ],
30
30
  "dependencies": {
31
- "@hocuspocus/common": "^2.0.3",
31
+ "@hocuspocus/common": "^2.0.5",
32
32
  "@lifeomic/attempt": "^3.0.2",
33
33
  "lib0": "^0.2.47",
34
34
  "ws": "^7.5.9"
@@ -319,6 +319,8 @@ export class HocuspocusProvider extends EventEmitter {
319
319
  }
320
320
 
321
321
  async onOpen(event: Event) {
322
+ this.isAuthenticated = false
323
+
322
324
  this.emit('open', { event })
323
325
 
324
326
  if (this.isAuthenticationRequired) {
@@ -4,7 +4,7 @@ import * as url from 'lib0/url'
4
4
  import type { MessageEvent } from 'ws'
5
5
  import { retry } from '@lifeomic/attempt'
6
6
  import {
7
- Forbidden, Unauthorized, WsReadyStates,
7
+ Forbidden, MessageTooBig, Unauthorized, WsReadyStates,
8
8
  } from '@hocuspocus/common'
9
9
  import { Event } from 'ws'
10
10
  import EventEmitter from './EventEmitter'
@@ -425,6 +425,11 @@ export class HocuspocusProviderWebsocket extends EventEmitter {
425
425
  }
426
426
  }
427
427
 
428
+ if (event.code === MessageTooBig.code) {
429
+ console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`)
430
+ this.shouldConnect = false
431
+ }
432
+
428
433
  if (this.connectionAttempt) {
429
434
  // That connection attempt failed.
430
435
  this.rejectConnectionAttempt()
@@ -2,9 +2,8 @@ import {
2
2
  HocuspocusProvider,
3
3
  HocuspocusProviderConfiguration,
4
4
  } from './HocuspocusProvider'
5
- import {
6
- HocuspocusProviderWebsocket,
7
- } from './HocuspocusProviderWebsocket'
5
+
6
+ import { TiptapCollabProviderWebsocket } from './TiptapCollabProviderWebsocket'
8
7
 
9
8
  export type TiptapCollabProviderConfiguration =
10
9
  Required<Pick<HocuspocusProviderConfiguration, 'name'>> &
@@ -21,11 +20,11 @@ export interface AdditionalTiptapCollabProviderConfiguration {
21
20
  export class TiptapCollabProvider extends HocuspocusProvider {
22
21
  constructor(configuration: TiptapCollabProviderConfiguration) {
23
22
  if (!configuration.websocketProvider) {
24
- configuration.websocketProvider = new HocuspocusProviderWebsocket({ url: `wss://${configuration.appId}.collab.tiptap.cloud` })
23
+ configuration.websocketProvider = new TiptapCollabProviderWebsocket({ appId: configuration.appId })
25
24
  }
26
25
 
27
26
  if (!configuration.token) {
28
- configuration.token = 'notoken'
27
+ configuration.token = 'notoken' // need to send a token anyway (which will be ignored)
29
28
  }
30
29
 
31
30
  super(configuration as HocuspocusProviderConfiguration)
@@ -0,0 +1,21 @@
1
+ import {
2
+ CompleteHocuspocusProviderWebsocketConfiguration,
3
+ HocuspocusProviderWebsocket, HocuspocusProviderWebsocketConfiguration,
4
+ } from './HocuspocusProviderWebsocket'
5
+
6
+ export type TiptapCollabProviderWebsocketConfiguration =
7
+ Partial<CompleteHocuspocusProviderWebsocketConfiguration> &
8
+ AdditionalTiptapCollabProviderWebsocketConfiguration
9
+
10
+ export interface AdditionalTiptapCollabProviderWebsocketConfiguration {
11
+ /**
12
+ * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev
13
+ */
14
+ appId: string,
15
+ }
16
+
17
+ export class TiptapCollabProviderWebsocket extends HocuspocusProviderWebsocket {
18
+ constructor(configuration: TiptapCollabProviderWebsocketConfiguration) {
19
+ super({ ...configuration as HocuspocusProviderWebsocketConfiguration, url: `wss://${configuration.appId}.collab.tiptap.cloud` })
20
+ }
21
+ }
package/src/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './HocuspocusProvider'
2
2
  export * from './TiptapCollabProvider'
3
+ export * from './TiptapCollabProviderWebsocket'
3
4
  export * from './HocuspocusProviderWebsocket'
4
5
  export * from './types'
@@ -1,12 +0,0 @@
1
- import { HocuspocusProvider, HocuspocusProviderConfiguration } from './HocuspocusProvider';
2
- import { HocuspocusProviderWebsocketConfiguration } from './HocuspocusProviderWebsocket';
3
- export type HocuspocusCloudProviderConfiguration = Required<Pick<HocuspocusProviderConfiguration, 'name'>> & Partial<HocuspocusProviderConfiguration> & Partial<Pick<HocuspocusProviderWebsocketConfiguration, 'url'>> & AdditionalHocuspocusCloudProviderConfiguration;
4
- export interface AdditionalHocuspocusCloudProviderConfiguration {
5
- /**
6
- * A Hocuspocus Cloud key, get one here: https://hocuspocus.cloud/
7
- */
8
- key: string;
9
- }
10
- export declare class HocuspocusCloudProvider extends HocuspocusProvider {
11
- constructor(configuration: HocuspocusCloudProviderConfiguration);
12
- }
@@ -1,41 +0,0 @@
1
- import {
2
- HocuspocusProvider,
3
- HocuspocusProviderConfiguration,
4
- } from './HocuspocusProvider'
5
- import {
6
- HocuspocusProviderWebsocket,
7
- HocuspocusProviderWebsocketConfiguration,
8
- } from './HocuspocusProviderWebsocket'
9
-
10
- export type HocuspocusCloudProviderConfiguration =
11
- Required<Pick<HocuspocusProviderConfiguration, 'name'>> &
12
- Partial<HocuspocusProviderConfiguration> &
13
- Partial<Pick<HocuspocusProviderWebsocketConfiguration, 'url'>> &
14
- AdditionalHocuspocusCloudProviderConfiguration
15
-
16
- export interface AdditionalHocuspocusCloudProviderConfiguration {
17
- /**
18
- * A Hocuspocus Cloud key, get one here: https://hocuspocus.cloud/
19
- */
20
- key: string,
21
- }
22
-
23
- export class HocuspocusCloudProvider extends HocuspocusProvider {
24
- constructor(configuration: HocuspocusCloudProviderConfiguration) {
25
- if (!configuration.url) {
26
- configuration.url = 'wss://connect.hocuspocus.cloud'
27
- }
28
-
29
- if (configuration.key) {
30
- if (!configuration.parameters) {
31
- configuration.parameters = {}
32
- }
33
-
34
- configuration.parameters.key = configuration.key
35
- }
36
-
37
- configuration.websocketProvider = new HocuspocusProviderWebsocket({ url: configuration.url })
38
-
39
- super(configuration as HocuspocusProviderConfiguration)
40
- }
41
- }