@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.
@@ -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
+ }