@hocuspocus/provider 1.0.0-alpha.26 → 1.0.0-alpha.30

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.
Files changed (91) hide show
  1. package/dist/hocuspocus-provider.cjs +132 -330
  2. package/dist/hocuspocus-provider.cjs.map +1 -1
  3. package/dist/hocuspocus-provider.esm.js +130 -329
  4. package/dist/hocuspocus-provider.esm.js.map +1 -1
  5. package/dist/packages/common/src/CloseEvents.d.ts +23 -0
  6. package/dist/packages/common/src/index.d.ts +1 -0
  7. package/dist/packages/extension-database/src/Database.d.ts +32 -0
  8. package/dist/packages/extension-database/src/index.d.ts +1 -0
  9. package/dist/packages/extension-logger/src/Logger.d.ts +7 -8
  10. package/dist/packages/extension-sqlite/src/SQLite.d.ts +26 -0
  11. package/dist/packages/extension-sqlite/src/index.d.ts +1 -0
  12. package/dist/packages/extension-webhook/src/index.d.ts +2 -3
  13. package/dist/packages/provider/src/EventEmitter.d.ts +1 -1
  14. package/dist/packages/provider/src/HocuspocusCloudProvider.d.ts +11 -0
  15. package/dist/packages/provider/src/HocuspocusProvider.d.ts +17 -9
  16. package/dist/packages/provider/src/index.d.ts +1 -0
  17. package/dist/packages/provider/src/types.d.ts +10 -0
  18. package/dist/packages/server/src/Connection.d.ts +5 -5
  19. package/dist/packages/server/src/Debugger.d.ts +1 -2
  20. package/dist/packages/server/src/Document.d.ts +8 -5
  21. package/dist/packages/server/src/Hocuspocus.d.ts +37 -16
  22. package/dist/packages/server/src/MessageReceiver.d.ts +8 -5
  23. package/dist/packages/server/src/OutgoingMessage.d.ts +1 -0
  24. package/dist/packages/server/src/index.d.ts +7 -0
  25. package/dist/packages/server/src/types.d.ts +89 -18
  26. package/dist/{demos/backend/src/express.d.ts → playground/backend/src/default.d.ts} +0 -0
  27. package/dist/{demos/backend/src/koa.d.ts → playground/backend/src/express.d.ts} +0 -0
  28. package/dist/{demos/backend/src/load-document.d.ts → playground/backend/src/koa.d.ts} +0 -0
  29. package/dist/{demos/backend/src/minimal.d.ts → playground/backend/src/load-document.d.ts} +0 -0
  30. package/dist/{demos → playground}/backend/src/monitor.d.ts +0 -0
  31. package/dist/{demos → playground}/backend/src/redis.d.ts +0 -0
  32. package/dist/{demos → playground}/backend/src/slow.d.ts +0 -0
  33. package/dist/{demos → playground}/backend/src/webhook.d.ts +0 -0
  34. package/dist/tests/extension-logger/onListen.d.ts +1 -0
  35. package/dist/tests/extension-redis/onLoadDocument.d.ts +1 -0
  36. package/dist/tests/extension-redis/onSynced.d.ts +1 -0
  37. package/dist/tests/extension-redis-rewrite/closeConnections.d.ts +1 -0
  38. package/dist/tests/extension-redis-rewrite/getConnectionCount.d.ts +1 -0
  39. package/dist/tests/extension-redis-rewrite/getDocumentsCount.d.ts +1 -0
  40. package/dist/tests/extension-redis-rewrite/onAwarenessChange.d.ts +1 -0
  41. package/dist/tests/extension-redis-rewrite/onChange.d.ts +1 -0
  42. package/dist/tests/extension-redis-rewrite/onStoreDocument.d.ts +1 -0
  43. package/dist/tests/extension-rocksdb/onLoadDocument.d.ts +1 -0
  44. package/dist/tests/provider/configuration.d.ts +1 -0
  45. package/dist/tests/provider/onAuthenticated.d.ts +1 -0
  46. package/dist/tests/provider/onAuthenticationFailed.d.ts +1 -0
  47. package/dist/tests/provider/onAwarenessChange.d.ts +1 -0
  48. package/dist/tests/provider/onAwarenessUpdate.d.ts +1 -0
  49. package/dist/tests/provider/onClose.d.ts +1 -0
  50. package/dist/tests/provider/onConnect.d.ts +1 -0
  51. package/dist/tests/provider/onDisconnect.d.ts +1 -0
  52. package/dist/tests/provider/onMessage.d.ts +1 -0
  53. package/dist/tests/provider/onOpen.d.ts +1 -0
  54. package/dist/tests/provider/onSynced.d.ts +1 -0
  55. package/dist/tests/server/address.d.ts +1 -0
  56. package/dist/tests/server/afterStoreDocument.d.ts +1 -0
  57. package/dist/tests/server/closeConnections.d.ts +1 -0
  58. package/dist/tests/server/getConnectionsCount.d.ts +1 -0
  59. package/dist/tests/server/getDocumentName.d.ts +1 -0
  60. package/dist/tests/server/getDocumentsCount.d.ts +1 -0
  61. package/dist/tests/server/getMessageLogs.d.ts +1 -0
  62. package/dist/tests/server/listen.d.ts +1 -0
  63. package/dist/tests/server/onAuthenticate.d.ts +1 -0
  64. package/dist/tests/server/onAwarenessUpdate.d.ts +1 -0
  65. package/dist/tests/server/onChange.d.ts +1 -0
  66. package/dist/tests/server/onConfigure.d.ts +1 -0
  67. package/dist/tests/server/onConnect.d.ts +1 -0
  68. package/dist/tests/server/onDestroy.d.ts +1 -0
  69. package/dist/tests/server/onDisconnect.d.ts +1 -0
  70. package/dist/tests/server/onListen.d.ts +1 -0
  71. package/dist/tests/server/onLoadDocument.d.ts +1 -0
  72. package/dist/tests/server/onRequest.d.ts +1 -0
  73. package/dist/tests/server/onStoreDocument.d.ts +1 -0
  74. package/dist/tests/server/onUpgrade.d.ts +1 -0
  75. package/dist/tests/server/requiresAuthentication.d.ts +1 -0
  76. package/dist/tests/transformer/TiptapTransformer.d.ts +1 -0
  77. package/dist/tests/utils/createDirectory.d.ts +1 -0
  78. package/dist/tests/utils/flushRedis.d.ts +1 -0
  79. package/dist/tests/utils/index.d.ts +7 -0
  80. package/dist/tests/utils/newHocuspocus.d.ts +2 -0
  81. package/dist/tests/utils/newHocuspocusProvider.d.ts +3 -0
  82. package/dist/tests/utils/redisConnectionSettings.d.ts +4 -0
  83. package/dist/tests/utils/removeDirectory.d.ts +1 -0
  84. package/dist/tests/utils/sleep.d.ts +1 -0
  85. package/package.json +6 -5
  86. package/src/EventEmitter.ts +1 -1
  87. package/src/HocuspocusCloudProvider.ts +34 -0
  88. package/src/HocuspocusProvider.ts +101 -68
  89. package/src/index.ts +1 -0
  90. package/src/types.ts +10 -0
  91. package/dist/packages/server/src/CloseEvents.d.ts +0 -4
@@ -2,13 +2,15 @@
2
2
  import { IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'http';
3
3
  import { URLSearchParams } from 'url';
4
4
  import { Socket } from 'net';
5
+ import { Awareness } from 'y-protocols/awareness';
5
6
  import Document from './Document';
6
7
  import { Hocuspocus } from './Hocuspocus';
7
8
  export declare enum MessageType {
8
9
  Unknown = -1,
9
10
  Sync = 0,
10
11
  Awareness = 1,
11
- Auth = 2
12
+ Auth = 2,
13
+ QueryAwareness = 3
12
14
  }
13
15
  /**
14
16
  * State of the WebSocket connection.
@@ -25,31 +27,37 @@ export interface AwarenessUpdate {
25
27
  updated: Array<any>;
26
28
  removed: Array<any>;
27
29
  }
28
- export interface ConnectionConfig {
30
+ export interface ConnectionConfiguration {
29
31
  readOnly: boolean;
32
+ requiresAuthentication: boolean;
30
33
  isAuthenticated: boolean;
31
34
  }
32
35
  export interface Extension {
33
- onAuthenticate?(data: onAuthenticatePayload): Promise<any>;
34
- onChange?(data: onChangePayload): Promise<any>;
35
- onConnect?(data: onConnectPayload): Promise<any>;
36
+ priority?: number;
36
37
  onConfigure?(data: onConfigurePayload): Promise<any>;
38
+ onListen?(data: onListenPayload): Promise<any>;
39
+ onUpgrade?(data: onUpgradePayload): Promise<any>;
40
+ onConnect?(data: onConnectPayload): Promise<any>;
41
+ onAuthenticate?(data: onAuthenticatePayload): Promise<any>;
37
42
  /**
38
43
  * @deprecated onCreateDocument is deprecated, use onLoadDocument instead
39
44
  */
40
45
  onCreateDocument?(data: onLoadDocumentPayload): Promise<any>;
41
46
  onLoadDocument?(data: onLoadDocumentPayload): Promise<any>;
42
- onDestroy?(data: onDestroyPayload): Promise<any>;
43
- onDisconnect?(data: onDisconnectPayload): Promise<any>;
44
- onListen?(data: onListenPayload): Promise<any>;
47
+ afterLoadDocument?(data: onLoadDocumentPayload): Promise<any>;
48
+ onChange?(data: onChangePayload): Promise<any>;
49
+ onStoreDocument?(data: onStoreDocumentPayload): Promise<any>;
50
+ afterStoreDocument?(data: afterStoreDocumentPayload): Promise<any>;
51
+ onAwarenessUpdate?(data: onAwarenessUpdatePayload): Promise<any>;
45
52
  onRequest?(data: onRequestPayload): Promise<any>;
46
- onUpgrade?(data: onUpgradePayload): Promise<any>;
53
+ onDisconnect?(data: onDisconnectPayload): Promise<any>;
54
+ onDestroy?(data: onDestroyPayload): Promise<any>;
47
55
  }
48
- export declare type Hook = 'onAuthenticate' | 'onChange' | 'onConnect' | 'onConfigure' |
56
+ export declare type Hook = 'onConfigure' | 'onListen' | 'onUpgrade' | 'onConnect' | 'onAuthenticate' |
49
57
  /**
50
58
  * @deprecated onCreateDocument is deprecated, use onLoadDocument instead
51
59
  */
52
- 'onCreateDocument' | 'onLoadDocument' | 'onDestroy' | 'onDisconnect' | 'onListen' | 'onRequest' | 'onUpgrade';
60
+ 'onCreateDocument' | 'onLoadDocument' | 'afterLoadDocument' | 'onChange' | 'onStoreDocument' | 'afterStoreDocument' | 'onAwarenessUpdate' | 'onRequest' | 'onDisconnect' | 'onDestroy';
53
61
  export interface Configuration extends Extension {
54
62
  /**
55
63
  * A name for the instance, used for logging.
@@ -67,6 +75,28 @@ export interface Configuration extends Extension {
67
75
  * Defines in which interval the server sends a ping, and closes the connection when no pong is sent back.
68
76
  */
69
77
  timeout: number;
78
+ /**
79
+ * Debounces the call of the `onStoreDocument` hook for the given amount of time in ms.
80
+ * Otherwise every single update would be persisted.
81
+ */
82
+ debounce: number;
83
+ /**
84
+ * Makes sure to call `onStoreDocument` at least in the given amount of time (ms).
85
+ */
86
+ maxDebounce: number;
87
+ /**
88
+ * By default, the servers show a start screen. If passed false, the server will start quietly.
89
+ */
90
+ quiet: boolean;
91
+ /**
92
+ * Function which returns the (customized) document name based on the request
93
+ */
94
+ getDocumentName?(data: getDocumentNamePayload): string | Promise<string>;
95
+ }
96
+ export interface getDocumentNamePayload {
97
+ documentName: string;
98
+ request: IncomingMessage;
99
+ requestParameters: URLSearchParams;
70
100
  }
71
101
  export interface onAuthenticatePayload {
72
102
  documentName: string;
@@ -75,7 +105,7 @@ export interface onAuthenticatePayload {
75
105
  requestParameters: URLSearchParams;
76
106
  socketId: string;
77
107
  token: string;
78
- connection: ConnectionConfig;
108
+ connection: ConnectionConfiguration;
79
109
  }
80
110
  export interface onConnectPayload {
81
111
  documentName: string;
@@ -84,7 +114,7 @@ export interface onConnectPayload {
84
114
  requestHeaders: IncomingHttpHeaders;
85
115
  requestParameters: URLSearchParams;
86
116
  socketId: string;
87
- connection: ConnectionConfig;
117
+ connection: ConnectionConfiguration;
88
118
  }
89
119
  export interface onLoadDocumentPayload {
90
120
  context: any;
@@ -94,7 +124,17 @@ export interface onLoadDocumentPayload {
94
124
  requestHeaders: IncomingHttpHeaders;
95
125
  requestParameters: URLSearchParams;
96
126
  socketId: string;
97
- connection: ConnectionConfig;
127
+ connection: ConnectionConfiguration;
128
+ }
129
+ export interface afterLoadDocumentPayload {
130
+ context: any;
131
+ document: Document;
132
+ documentName: string;
133
+ instance: Hocuspocus;
134
+ requestHeaders: IncomingHttpHeaders;
135
+ requestParameters: URLSearchParams;
136
+ socketId: string;
137
+ connection: ConnectionConfiguration;
98
138
  }
99
139
  export interface onChangePayload {
100
140
  clientsCount: number;
@@ -107,6 +147,41 @@ export interface onChangePayload {
107
147
  update: Uint8Array;
108
148
  socketId: string;
109
149
  }
150
+ export interface onStoreDocumentPayload {
151
+ clientsCount: number;
152
+ context: any;
153
+ document: Document;
154
+ documentName: string;
155
+ instance: Hocuspocus;
156
+ requestHeaders: IncomingHttpHeaders;
157
+ requestParameters: URLSearchParams;
158
+ socketId: string;
159
+ }
160
+ export interface afterStoreDocumentPayload extends onStoreDocumentPayload {
161
+ }
162
+ export interface onAwarenessUpdatePayload {
163
+ clientsCount: number;
164
+ context: any;
165
+ document: Document;
166
+ documentName: string;
167
+ instance: Hocuspocus;
168
+ requestHeaders: IncomingHttpHeaders;
169
+ requestParameters: URLSearchParams;
170
+ update: Uint8Array;
171
+ socketId: string;
172
+ added: number[];
173
+ updated: number[];
174
+ removed: number[];
175
+ awareness: Awareness;
176
+ states: StatesArray;
177
+ }
178
+ export declare type StatesArray = {
179
+ clientId: number;
180
+ [key: string | number]: any;
181
+ }[];
182
+ export interface storePayload extends onStoreDocumentPayload {
183
+ state: Buffer;
184
+ }
110
185
  export interface onDisconnectPayload {
111
186
  clientsCount: number;
112
187
  context: any;
@@ -140,7 +215,3 @@ export interface onConfigurePayload {
140
215
  yjsVersion: string;
141
216
  instance: Hocuspocus;
142
217
  }
143
- export interface CloseEvent {
144
- code: number;
145
- reason: string;
146
- }
File without changes
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export declare const createDirectory: (dir: string) => void;
@@ -0,0 +1 @@
1
+ export declare const flushRedis: () => Promise<string>;
@@ -0,0 +1,7 @@
1
+ export * from './createDirectory';
2
+ export * from './flushRedis';
3
+ export * from './newHocuspocus';
4
+ export * from './newHocuspocusProvider';
5
+ export * from './redisConnectionSettings';
6
+ export * from './removeDirectory';
7
+ export * from './sleep';
@@ -0,0 +1,2 @@
1
+ import { Hocuspocus, Configuration } from '@hocuspocus/server';
2
+ export declare const newHocuspocus: (options?: Partial<Configuration> | undefined) => Hocuspocus;
@@ -0,0 +1,3 @@
1
+ import { HocuspocusProvider, HocuspocusProviderConfiguration } from '@hocuspocus/provider';
2
+ import { Hocuspocus } from '@hocuspocus/server';
3
+ export declare const newHocuspocusProvider: (server: Hocuspocus, options?: Partial<Omit<HocuspocusProviderConfiguration, 'url'>>) => HocuspocusProvider;
@@ -0,0 +1,4 @@
1
+ export declare const redisConnectionSettings: {
2
+ host: string;
3
+ port: number;
4
+ };
@@ -0,0 +1 @@
1
+ export declare const removeDirectory: (dir: string) => void;
@@ -0,0 +1 @@
1
+ export declare const sleep: (time: number) => Promise<unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hocuspocus/provider",
3
- "version": "1.0.0-alpha.26",
3
+ "version": "1.0.0-alpha.30",
4
4
  "description": "hocuspocus provider",
5
5
  "homepage": "https://hocuspocus.dev",
6
6
  "keywords": [
@@ -28,10 +28,11 @@
28
28
  "dist"
29
29
  ],
30
30
  "dependencies": {
31
- "@lifeomic/attempt": "^3.0.0",
32
- "lib0": "^0.2.42",
31
+ "@hocuspocus/common": "^1.0.0-alpha.5",
32
+ "@lifeomic/attempt": "^3.0.2",
33
+ "lib0": "^0.2.43",
33
34
  "y-protocols": "^1.0.5",
34
- "yjs": "^13.5.0"
35
+ "yjs": "^13.5.24"
35
36
  },
36
- "gitHead": "0d060abd95ec14eb7e404270e1e2338b2a0db332"
37
+ "gitHead": "125d94dc3520bb5185293c9b316f66ddd9215992"
37
38
  }
@@ -36,7 +36,7 @@ export default class EventEmitter {
36
36
  return this
37
37
  }
38
38
 
39
- protected removeAllListeners(): void {
39
+ removeAllListeners(): void {
40
40
  this.callbacks = {}
41
41
  }
42
42
  }
@@ -0,0 +1,34 @@
1
+ import {
2
+ HocuspocusProvider,
3
+ HocuspocusProviderConfiguration,
4
+ } from './HocuspocusProvider'
5
+
6
+ export type HocuspocusCloudProviderConfiguration =
7
+ Required<Pick<HocuspocusProviderConfiguration, 'name'>> &
8
+ Partial<HocuspocusProviderConfiguration> &
9
+ AdditionalHocuspocusCloudProviderConfiguration
10
+
11
+ export interface AdditionalHocuspocusCloudProviderConfiguration {
12
+ /**
13
+ * A Hocuspocus Cloud key, get one here: https://hocuspocus.cloud/
14
+ */
15
+ key: string,
16
+ }
17
+
18
+ export class HocuspocusCloudProvider extends HocuspocusProvider {
19
+ constructor(configuration: HocuspocusCloudProviderConfiguration) {
20
+ if (!configuration.url) {
21
+ configuration.url = 'wss://connect.hocuspocus.cloud'
22
+ }
23
+
24
+ if (configuration.key) {
25
+ if (!configuration.parameters) {
26
+ configuration.parameters = {}
27
+ }
28
+
29
+ configuration.parameters.key = configuration.key
30
+ }
31
+
32
+ super(configuration as HocuspocusProviderConfiguration)
33
+ }
34
+ }