@hocuspocus/extension-database 1.0.0-alpha.1
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/LICENSE.md +21 -0
- package/README.md +14 -0
- package/dist/hocuspocus-database.cjs +66 -0
- package/dist/hocuspocus-database.cjs.map +1 -0
- package/dist/hocuspocus-database.esm.js +42 -0
- package/dist/hocuspocus-database.esm.js.map +1 -0
- package/dist/packages/common/src/auth.d.ts +6 -0
- package/dist/packages/common/src/index.d.ts +1 -0
- package/dist/packages/extension-database/src/Database.d.ts +36 -0
- package/dist/packages/extension-database/src/index.d.ts +1 -0
- package/dist/packages/extension-logger/src/Logger.d.ts +62 -0
- package/dist/packages/extension-logger/src/index.d.ts +1 -0
- package/dist/packages/extension-monitor/src/Collector.d.ts +62 -0
- package/dist/packages/extension-monitor/src/Dashboard.d.ts +29 -0
- package/dist/packages/extension-monitor/src/Storage.d.ts +35 -0
- package/dist/packages/extension-monitor/src/index.d.ts +38 -0
- package/dist/packages/extension-redis/src/Redis.d.ts +16 -0
- package/dist/packages/extension-redis/src/RedisCluster.d.ts +4 -0
- package/dist/packages/extension-redis/src/index.d.ts +2 -0
- package/dist/packages/extension-rocksdb/src/index.d.ts +22 -0
- package/dist/packages/extension-sqlite/src/SQLite.d.ts +26 -0
- package/dist/packages/extension-sqlite/src/index.d.ts +1 -0
- package/dist/packages/extension-throttle/src/index.d.ts +20 -0
- package/dist/packages/extension-webhook/src/index.d.ts +59 -0
- package/dist/packages/provider/src/EventEmitter.d.ts +9 -0
- package/dist/packages/provider/src/HocuspocusCloudProvider.d.ts +10 -0
- package/dist/packages/provider/src/HocuspocusProvider.d.ts +158 -0
- package/dist/packages/provider/src/IncomingMessage.d.ts +14 -0
- package/dist/packages/provider/src/MessageReceiver.d.ts +13 -0
- package/dist/packages/provider/src/MessageSender.d.ts +10 -0
- package/dist/packages/provider/src/OutgoingMessage.d.ts +9 -0
- package/dist/packages/provider/src/OutgoingMessages/AuthenticationMessage.d.ts +7 -0
- package/dist/packages/provider/src/OutgoingMessages/AwarenessMessage.d.ts +8 -0
- package/dist/packages/provider/src/OutgoingMessages/QueryAwarenessMessage.d.ts +8 -0
- package/dist/packages/provider/src/OutgoingMessages/SyncStepOneMessage.d.ts +8 -0
- package/dist/packages/provider/src/OutgoingMessages/SyncStepTwoMessage.d.ts +8 -0
- package/dist/packages/provider/src/OutgoingMessages/UpdateMessage.d.ts +7 -0
- package/dist/packages/provider/src/index.d.ts +4 -0
- package/dist/packages/provider/src/types.d.ts +34 -0
- package/dist/packages/provider/src/utils/awarenessStatesToArray.d.ts +4 -0
- package/dist/packages/provider/src/utils/index.d.ts +1 -0
- package/dist/packages/server/src/CloseEvents.d.ts +4 -0
- package/dist/packages/server/src/Connection.d.ts +63 -0
- package/dist/packages/server/src/Debugger.d.ts +15 -0
- package/dist/packages/server/src/Document.d.ts +75 -0
- package/dist/packages/server/src/Hocuspocus.d.ts +89 -0
- package/dist/packages/server/src/IncomingMessage.d.ts +19 -0
- package/dist/packages/server/src/MessageReceiver.d.ts +10 -0
- package/dist/packages/server/src/OutgoingMessage.d.ts +16 -0
- package/dist/packages/server/src/index.d.ts +2 -0
- package/dist/packages/server/src/types.d.ts +158 -0
- package/dist/packages/transformer/src/Prosemirror.d.ts +11 -0
- package/dist/packages/transformer/src/Tiptap.d.ts +10 -0
- package/dist/packages/transformer/src/index.d.ts +3 -0
- package/dist/packages/transformer/src/types.d.ts +5 -0
- package/dist/playground/backend/src/default.d.ts +1 -0
- package/dist/playground/backend/src/express.d.ts +1 -0
- package/dist/playground/backend/src/koa.d.ts +1 -0
- package/dist/playground/backend/src/load-document.d.ts +1 -0
- package/dist/playground/backend/src/monitor.d.ts +1 -0
- package/dist/playground/backend/src/redis.d.ts +1 -0
- package/dist/playground/backend/src/slow.d.ts +1 -0
- package/dist/playground/backend/src/webhook.d.ts +1 -0
- package/package.json +36 -0
- package/src/Database.ts +60 -0
- package/src/index.ts +1 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'http';
|
|
3
|
+
import { URLSearchParams } from 'url';
|
|
4
|
+
import { Socket } from 'net';
|
|
5
|
+
import Document from './Document';
|
|
6
|
+
import { Hocuspocus } from './Hocuspocus';
|
|
7
|
+
export declare enum MessageType {
|
|
8
|
+
Unknown = -1,
|
|
9
|
+
Sync = 0,
|
|
10
|
+
Awareness = 1,
|
|
11
|
+
Auth = 2
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* State of the WebSocket connection.
|
|
15
|
+
* https://developer.mozilla.org/de/docs/Web/API/WebSocket/readyState
|
|
16
|
+
*/
|
|
17
|
+
export declare enum WsReadyStates {
|
|
18
|
+
Connecting = 0,
|
|
19
|
+
Open = 1,
|
|
20
|
+
Closing = 2,
|
|
21
|
+
Closed = 3
|
|
22
|
+
}
|
|
23
|
+
export interface AwarenessUpdate {
|
|
24
|
+
added: Array<any>;
|
|
25
|
+
updated: Array<any>;
|
|
26
|
+
removed: Array<any>;
|
|
27
|
+
}
|
|
28
|
+
export interface ConnectionConfig {
|
|
29
|
+
readOnly: boolean;
|
|
30
|
+
isAuthenticated: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface Extension {
|
|
33
|
+
onAuthenticate?(data: onAuthenticatePayload): Promise<any>;
|
|
34
|
+
onChange?(data: onChangePayload): Promise<any>;
|
|
35
|
+
onConnect?(data: onConnectPayload): Promise<any>;
|
|
36
|
+
onConfigure?(data: onConfigurePayload): Promise<any>;
|
|
37
|
+
/**
|
|
38
|
+
* @deprecated onCreateDocument is deprecated, use onLoadDocument instead
|
|
39
|
+
*/
|
|
40
|
+
onCreateDocument?(data: onLoadDocumentPayload): Promise<any>;
|
|
41
|
+
onLoadDocument?(data: onLoadDocumentPayload): Promise<any>;
|
|
42
|
+
onDestroy?(data: onDestroyPayload): Promise<any>;
|
|
43
|
+
onDisconnect?(data: onDisconnectPayload): Promise<any>;
|
|
44
|
+
onListen?(data: onListenPayload): Promise<any>;
|
|
45
|
+
onRequest?(data: onRequestPayload): Promise<any>;
|
|
46
|
+
onUpgrade?(data: onUpgradePayload): Promise<any>;
|
|
47
|
+
}
|
|
48
|
+
export declare type Hook = 'onAuthenticate' | 'onChange' | 'onConnect' | 'onConfigure' |
|
|
49
|
+
/**
|
|
50
|
+
* @deprecated onCreateDocument is deprecated, use onLoadDocument instead
|
|
51
|
+
*/
|
|
52
|
+
'onCreateDocument' | 'onLoadDocument' | 'onDestroy' | 'onDisconnect' | 'onListen' | 'onRequest' | 'onUpgrade';
|
|
53
|
+
export interface Configuration extends Extension {
|
|
54
|
+
/**
|
|
55
|
+
* A name for the instance, used for logging.
|
|
56
|
+
*/
|
|
57
|
+
name: string | null;
|
|
58
|
+
/**
|
|
59
|
+
* A list of hocuspocus extenions.
|
|
60
|
+
*/
|
|
61
|
+
extensions: Array<Extension>;
|
|
62
|
+
/**
|
|
63
|
+
* The port which the server listens on.
|
|
64
|
+
*/
|
|
65
|
+
port: number | null;
|
|
66
|
+
/**
|
|
67
|
+
* Defines in which interval the server sends a ping, and closes the connection when no pong is sent back.
|
|
68
|
+
*/
|
|
69
|
+
timeout: number;
|
|
70
|
+
/**
|
|
71
|
+
* By default, the servers show a start screen. If passed false, the server will start quietly.
|
|
72
|
+
*/
|
|
73
|
+
quiet: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Function which returns the (customized) document name based on the request
|
|
76
|
+
*/
|
|
77
|
+
getDocumentName?(data: {
|
|
78
|
+
documentName: string;
|
|
79
|
+
request: IncomingMessage;
|
|
80
|
+
requestParameters: URLSearchParams;
|
|
81
|
+
}): string | Promise<string>;
|
|
82
|
+
}
|
|
83
|
+
export interface onAuthenticatePayload {
|
|
84
|
+
documentName: string;
|
|
85
|
+
instance: Hocuspocus;
|
|
86
|
+
requestHeaders: IncomingHttpHeaders;
|
|
87
|
+
requestParameters: URLSearchParams;
|
|
88
|
+
socketId: string;
|
|
89
|
+
token: string;
|
|
90
|
+
connection: ConnectionConfig;
|
|
91
|
+
}
|
|
92
|
+
export interface onConnectPayload {
|
|
93
|
+
documentName: string;
|
|
94
|
+
instance: Hocuspocus;
|
|
95
|
+
request: IncomingMessage;
|
|
96
|
+
requestHeaders: IncomingHttpHeaders;
|
|
97
|
+
requestParameters: URLSearchParams;
|
|
98
|
+
socketId: string;
|
|
99
|
+
connection: ConnectionConfig;
|
|
100
|
+
}
|
|
101
|
+
export interface onLoadDocumentPayload {
|
|
102
|
+
context: any;
|
|
103
|
+
document: Document;
|
|
104
|
+
documentName: string;
|
|
105
|
+
instance: Hocuspocus;
|
|
106
|
+
requestHeaders: IncomingHttpHeaders;
|
|
107
|
+
requestParameters: URLSearchParams;
|
|
108
|
+
socketId: string;
|
|
109
|
+
connection: ConnectionConfig;
|
|
110
|
+
}
|
|
111
|
+
export interface onChangePayload {
|
|
112
|
+
clientsCount: number;
|
|
113
|
+
context: any;
|
|
114
|
+
document: Document;
|
|
115
|
+
documentName: string;
|
|
116
|
+
instance: Hocuspocus;
|
|
117
|
+
requestHeaders: IncomingHttpHeaders;
|
|
118
|
+
requestParameters: URLSearchParams;
|
|
119
|
+
update: Uint8Array;
|
|
120
|
+
socketId: string;
|
|
121
|
+
}
|
|
122
|
+
export interface onDisconnectPayload {
|
|
123
|
+
clientsCount: number;
|
|
124
|
+
context: any;
|
|
125
|
+
document: Document;
|
|
126
|
+
documentName: string;
|
|
127
|
+
instance: Hocuspocus;
|
|
128
|
+
requestHeaders: IncomingHttpHeaders;
|
|
129
|
+
requestParameters: URLSearchParams;
|
|
130
|
+
socketId: string;
|
|
131
|
+
}
|
|
132
|
+
export interface onRequestPayload {
|
|
133
|
+
request: IncomingMessage;
|
|
134
|
+
response: ServerResponse;
|
|
135
|
+
instance: Hocuspocus;
|
|
136
|
+
}
|
|
137
|
+
export interface onUpgradePayload {
|
|
138
|
+
head: any;
|
|
139
|
+
request: IncomingMessage;
|
|
140
|
+
socket: Socket;
|
|
141
|
+
instance: Hocuspocus;
|
|
142
|
+
}
|
|
143
|
+
export interface onListenPayload {
|
|
144
|
+
port: number;
|
|
145
|
+
}
|
|
146
|
+
export interface onDestroyPayload {
|
|
147
|
+
instance: Hocuspocus;
|
|
148
|
+
}
|
|
149
|
+
export interface onConfigurePayload {
|
|
150
|
+
configuration: Configuration;
|
|
151
|
+
version: string;
|
|
152
|
+
yjsVersion: string;
|
|
153
|
+
instance: Hocuspocus;
|
|
154
|
+
}
|
|
155
|
+
export interface CloseEvent {
|
|
156
|
+
code: number;
|
|
157
|
+
reason: string;
|
|
158
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Doc } from 'yjs';
|
|
2
|
+
import { Schema } from 'prosemirror-model';
|
|
3
|
+
import { Transformer } from './types';
|
|
4
|
+
declare class Prosemirror implements Transformer {
|
|
5
|
+
defaultSchema: Schema;
|
|
6
|
+
schema(schema: Schema): Prosemirror;
|
|
7
|
+
fromYdoc(document: Doc, fieldName?: string | Array<string>): any;
|
|
8
|
+
toYdoc(document: any, fieldName?: string | Array<string>, schema?: Schema): Doc;
|
|
9
|
+
}
|
|
10
|
+
export declare const ProsemirrorTransformer: Prosemirror;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Doc } from 'yjs';
|
|
2
|
+
import { Extensions } from '@tiptap/core/dist/packages/core/src/types';
|
|
3
|
+
import { Transformer } from './types';
|
|
4
|
+
export declare class Tiptap implements Transformer {
|
|
5
|
+
defaultExtensions: Extensions;
|
|
6
|
+
extensions(extensions: Extensions): Tiptap;
|
|
7
|
+
fromYdoc(document: Doc, fieldName?: string | Array<string>): any;
|
|
8
|
+
toYdoc(document: any, fieldName?: string | Array<string>, extensions?: Extensions): Doc;
|
|
9
|
+
}
|
|
10
|
+
export declare const TiptapTransformer: Tiptap;
|
|
@@ -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 {};
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hocuspocus/extension-database",
|
|
3
|
+
"description": "a generic Hocuspocus persistence driver for the database",
|
|
4
|
+
"version": "1.0.0-alpha.1",
|
|
5
|
+
"homepage": "https://hocuspocus.dev",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"hocuspocus",
|
|
8
|
+
"yjs"
|
|
9
|
+
],
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"main": "dist/hocuspocus-database.esm.js",
|
|
13
|
+
"module": "dist/hocuspocus-database.esm.js",
|
|
14
|
+
"types": "dist/packages/extension-database/src/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
"source": {
|
|
17
|
+
"import": "./src"
|
|
18
|
+
},
|
|
19
|
+
"default": {
|
|
20
|
+
"import": "./dist/hocuspocus-database.esm.js",
|
|
21
|
+
"require": "./dist/hocuspocus-database.cjs"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"src",
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@hocuspocus/server": "^1.0.0-alpha.87",
|
|
30
|
+
"yjs": "^13.5.22"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"gitHead": "8ffe8d8f4d10ba33f4f203806bd1d4415bef5dc3"
|
|
36
|
+
}
|
package/src/Database.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Extension, onChangePayload, onLoadDocumentPayload } from '@hocuspocus/server'
|
|
2
|
+
import * as Y from 'yjs'
|
|
3
|
+
|
|
4
|
+
export interface DatabaseConfiguration {
|
|
5
|
+
/**
|
|
6
|
+
* Pass a Promise to retrieve updates from your database. The Promise should resolve to
|
|
7
|
+
* an array of items with Y.js-compatible binary data.
|
|
8
|
+
*/
|
|
9
|
+
fetchUpdates: ({ documentName }: { documentName: string}) => Promise<Uint8Array[]>,
|
|
10
|
+
/**
|
|
11
|
+
* Pass a function to store updates in your database.
|
|
12
|
+
*/
|
|
13
|
+
storeUpdate: ({ update, documentName }: { update: Buffer, documentName: string}) => void,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export class Database implements Extension {
|
|
17
|
+
/**
|
|
18
|
+
* Default configuration
|
|
19
|
+
*/
|
|
20
|
+
configuration: DatabaseConfiguration = {
|
|
21
|
+
fetchUpdates: async () => [],
|
|
22
|
+
storeUpdate: async () => null,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Constructor
|
|
27
|
+
*/
|
|
28
|
+
constructor(configuration: Partial<DatabaseConfiguration>) {
|
|
29
|
+
this.configuration = {
|
|
30
|
+
...this.configuration,
|
|
31
|
+
...configuration,
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Get stored data from the database.
|
|
37
|
+
*/
|
|
38
|
+
async onLoadDocument({ document, documentName }: onLoadDocumentPayload): Promise<any> {
|
|
39
|
+
const updates = await this.configuration.fetchUpdates({ documentName })
|
|
40
|
+
|
|
41
|
+
if (updates && updates.length) {
|
|
42
|
+
updates.forEach((update: any) => {
|
|
43
|
+
Y.applyUpdate(document, update)
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return document
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Store new updates in the database.
|
|
52
|
+
*/
|
|
53
|
+
async onChange({ document, documentName }: onChangePayload) {
|
|
54
|
+
const update = Buffer.from(
|
|
55
|
+
Y.encodeStateAsUpdate(document),
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
return this.configuration.storeUpdate({ update, documentName })
|
|
59
|
+
}
|
|
60
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Database'
|