@rgby/collab-sdk 1.0.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/index.d.ts +169 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/package.json +28 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hocuspocus Module SDK
|
|
3
|
+
*
|
|
4
|
+
* Types and helpers for building distributable modules.
|
|
5
|
+
*/
|
|
6
|
+
import type { Extension } from "@hocuspocus/server";
|
|
7
|
+
import type { Hono } from "hono";
|
|
8
|
+
export interface ModuleManifest {
|
|
9
|
+
/** Unique module identifier (reverse domain notation) */
|
|
10
|
+
id: string;
|
|
11
|
+
/** Semantic version */
|
|
12
|
+
version: string;
|
|
13
|
+
/** Display name */
|
|
14
|
+
name?: string;
|
|
15
|
+
/** Description */
|
|
16
|
+
description?: string;
|
|
17
|
+
/** What this module contributes */
|
|
18
|
+
contributes: ModuleContributions;
|
|
19
|
+
/** Required permissions */
|
|
20
|
+
permissions?: ModulePermissions;
|
|
21
|
+
/** Module dependencies (other module IDs) */
|
|
22
|
+
dependencies?: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface ModuleContributions {
|
|
25
|
+
hocuspocus?: boolean;
|
|
26
|
+
workers?: boolean;
|
|
27
|
+
events?: string[];
|
|
28
|
+
routes?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface ModulePermissions {
|
|
31
|
+
events?: ('emit' | 'subscribe')[];
|
|
32
|
+
workers?: ('cpu' | 'io' | 'network')[];
|
|
33
|
+
}
|
|
34
|
+
export interface WorkerInput<T = unknown> {
|
|
35
|
+
taskId: string;
|
|
36
|
+
moduleId: string;
|
|
37
|
+
payload: T;
|
|
38
|
+
context: {
|
|
39
|
+
timestamp: string;
|
|
40
|
+
requestId?: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface WorkerEffect {
|
|
44
|
+
type: 'emit' | 'schedule' | 'noop';
|
|
45
|
+
event?: string;
|
|
46
|
+
payload?: unknown;
|
|
47
|
+
taskId?: string;
|
|
48
|
+
delay?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface WorkerTask<TInput = unknown> {
|
|
51
|
+
id: string;
|
|
52
|
+
handler: (input: WorkerInput<TInput>) => Promise<WorkerEffect | WorkerEffect[]>;
|
|
53
|
+
priority?: number;
|
|
54
|
+
timeout?: number;
|
|
55
|
+
}
|
|
56
|
+
export type EventHandler<T = unknown> = (payload: T) => void | Promise<void>;
|
|
57
|
+
export interface EventSubscription {
|
|
58
|
+
event: string;
|
|
59
|
+
handler: EventHandler;
|
|
60
|
+
filter?: (payload: unknown) => boolean;
|
|
61
|
+
}
|
|
62
|
+
export type ModuleRouteFactory = (router: Hono) => void;
|
|
63
|
+
export interface ModuleDefinition {
|
|
64
|
+
manifest: ModuleManifest;
|
|
65
|
+
hocuspocus?: Extension;
|
|
66
|
+
workers?: WorkerTask[];
|
|
67
|
+
events?: EventSubscription[];
|
|
68
|
+
routes?: ModuleRouteFactory;
|
|
69
|
+
/**
|
|
70
|
+
* Client-side TipTap extensions
|
|
71
|
+
* These will be dynamically loaded on the client.
|
|
72
|
+
*/
|
|
73
|
+
clientExtensions?: TipTapExtensionDefinition[];
|
|
74
|
+
/**
|
|
75
|
+
* Services/APIs exported by this module for other modules to use.
|
|
76
|
+
*/
|
|
77
|
+
exports?: Record<string, any>;
|
|
78
|
+
/**
|
|
79
|
+
* Database extensions
|
|
80
|
+
*/
|
|
81
|
+
database?: {
|
|
82
|
+
/** SQL Migrations */
|
|
83
|
+
migrations?: MigrationDefinition[];
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Lifecycle hooks
|
|
87
|
+
*/
|
|
88
|
+
hooks?: ModuleHooks;
|
|
89
|
+
/**
|
|
90
|
+
* Global middleware to inject
|
|
91
|
+
*/
|
|
92
|
+
middleware?: ModuleMiddleware[];
|
|
93
|
+
}
|
|
94
|
+
export interface TipTapExtensionDefinition {
|
|
95
|
+
name: string;
|
|
96
|
+
options?: Record<string, any>;
|
|
97
|
+
/** Absolute path to the extension script file on the server */
|
|
98
|
+
scriptPath?: string;
|
|
99
|
+
/** Public URL to load the script from (populated by server) */
|
|
100
|
+
scriptUrl?: string;
|
|
101
|
+
}
|
|
102
|
+
export interface ModuleHooks {
|
|
103
|
+
/** Called when module is initialized (before server start) */
|
|
104
|
+
onInit?: (context: ModuleContext) => Promise<void> | void;
|
|
105
|
+
/** Called when server has started (Hono & Hocuspocus ready) */
|
|
106
|
+
onServerStart?: (app: Hono, hocuspocus: Extension) => Promise<void> | void;
|
|
107
|
+
/** Called when server is stopping */
|
|
108
|
+
onServerStop?: () => Promise<void> | void;
|
|
109
|
+
/** Called when a user connects (Hocuspocus event) */
|
|
110
|
+
onUserConnect?: (data: any) => Promise<void> | void;
|
|
111
|
+
}
|
|
112
|
+
export interface ModuleMiddleware {
|
|
113
|
+
path: string;
|
|
114
|
+
handler: (c: any, next: any) => Promise<void> | Response | Promise<Response>;
|
|
115
|
+
}
|
|
116
|
+
export interface ServiceRegistry {
|
|
117
|
+
/** Get a service exported by another module */
|
|
118
|
+
get<T = any>(serviceName: string): T | undefined;
|
|
119
|
+
}
|
|
120
|
+
export interface MigrationDefinition {
|
|
121
|
+
version: number;
|
|
122
|
+
up: string;
|
|
123
|
+
down?: string;
|
|
124
|
+
}
|
|
125
|
+
export interface ModuleContext {
|
|
126
|
+
/** Module's own ID */
|
|
127
|
+
moduleId: string;
|
|
128
|
+
/** Emit an event (if permitted) */
|
|
129
|
+
emit: (event: string, payload: unknown) => void;
|
|
130
|
+
/** Schedule a worker task */
|
|
131
|
+
schedule: (taskId: string, payload: unknown, delay?: number) => void;
|
|
132
|
+
/** Get logger scoped to this module */
|
|
133
|
+
log: ModuleLogger;
|
|
134
|
+
/** Access to the database instance */
|
|
135
|
+
db: any;
|
|
136
|
+
/** Read-only server configuration */
|
|
137
|
+
config: any;
|
|
138
|
+
/** Access to Hocuspocus instance */
|
|
139
|
+
hocuspocus: any;
|
|
140
|
+
/** Service registry to look up other modules' exports */
|
|
141
|
+
services: ServiceRegistry;
|
|
142
|
+
}
|
|
143
|
+
export interface ModuleLogger {
|
|
144
|
+
debug: (message: string, ...args: unknown[]) => void;
|
|
145
|
+
info: (message: string, ...args: unknown[]) => void;
|
|
146
|
+
warn: (message: string, ...args: unknown[]) => void;
|
|
147
|
+
error: (message: string, ...args: unknown[]) => void;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Define a module with type checking
|
|
151
|
+
*/
|
|
152
|
+
export declare function defineModule(definition: ModuleDefinition): ModuleDefinition;
|
|
153
|
+
/**
|
|
154
|
+
* Define a worker task with type checking
|
|
155
|
+
*/
|
|
156
|
+
export declare function defineWorkerTask<T = unknown>(task: WorkerTask<T>): WorkerTask<T>;
|
|
157
|
+
/**
|
|
158
|
+
* Create an emit effect
|
|
159
|
+
*/
|
|
160
|
+
export declare function emit(event: string, payload: unknown): WorkerEffect;
|
|
161
|
+
/**
|
|
162
|
+
* Create a schedule effect
|
|
163
|
+
*/
|
|
164
|
+
export declare function schedule(taskId: string, payload?: unknown, delay?: number): WorkerEffect;
|
|
165
|
+
/**
|
|
166
|
+
* Create a noop effect
|
|
167
|
+
*/
|
|
168
|
+
export declare function noop(): WorkerEffect;
|
|
169
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hocuspocus Module SDK
|
|
4
|
+
*
|
|
5
|
+
* Types and helpers for building distributable modules.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.defineModule = defineModule;
|
|
9
|
+
exports.defineWorkerTask = defineWorkerTask;
|
|
10
|
+
exports.emit = emit;
|
|
11
|
+
exports.schedule = schedule;
|
|
12
|
+
exports.noop = noop;
|
|
13
|
+
/**
|
|
14
|
+
* Define a module with type checking
|
|
15
|
+
*/
|
|
16
|
+
function defineModule(definition) {
|
|
17
|
+
return definition;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Define a worker task with type checking
|
|
21
|
+
*/
|
|
22
|
+
function defineWorkerTask(task) {
|
|
23
|
+
return task;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create an emit effect
|
|
27
|
+
*/
|
|
28
|
+
function emit(event, payload) {
|
|
29
|
+
return { type: 'emit', event, payload };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a schedule effect
|
|
33
|
+
*/
|
|
34
|
+
function schedule(taskId, payload, delay) {
|
|
35
|
+
return { type: 'schedule', taskId, payload, delay };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a noop effect
|
|
39
|
+
*/
|
|
40
|
+
function noop() {
|
|
41
|
+
return { type: 'noop' };
|
|
42
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rgby/collab-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "SDK for building Hocuspocus modules",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"prepublishOnly": "npm run build"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"hocuspocus",
|
|
16
|
+
"module",
|
|
17
|
+
"sdk",
|
|
18
|
+
"collaborative",
|
|
19
|
+
"yjs"
|
|
20
|
+
],
|
|
21
|
+
"peerDependencies": {
|
|
22
|
+
"@hocuspocus/server": "^2.0.0"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"typescript": "^5.0.0",
|
|
26
|
+
"@hocuspocus/server": "^2.0.0"
|
|
27
|
+
}
|
|
28
|
+
}
|