@principal-ai/control-tower-core 0.1.1 → 0.1.2

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.
@@ -5,6 +5,9 @@ import type { IStorageAdapter } from '../abstractions/StorageAdapter';
5
5
  import type { RoomManager } from '../abstractions/RoomManager';
6
6
  import type { LockManager } from '../abstractions/LockManager';
7
7
  import { TypedEventEmitter } from '../abstractions/EventEmitter';
8
+ import type { Server as HttpServer } from 'http';
9
+ import type { Server as HttpsServer } from 'https';
10
+ import type { WebSocketServer } from 'ws';
8
11
  export interface ServerConfig {
9
12
  transport: ITransportAdapter;
10
13
  auth?: IAuthAdapter;
@@ -12,6 +15,9 @@ export interface ServerConfig {
12
15
  roomManager: RoomManager;
13
16
  lockManager: LockManager;
14
17
  defaultRoomConfig?: Partial<RoomConfig>;
18
+ httpServer?: HttpServer | HttpsServer;
19
+ webSocketPath?: string;
20
+ webSocketServer?: WebSocketServer;
15
21
  }
16
22
  export interface ConnectedClient {
17
23
  id: string;
@@ -79,8 +85,11 @@ export declare class BaseServer extends TypedEventEmitter<ServerEvents> {
79
85
  private clients;
80
86
  private clientMessageHandlers;
81
87
  private running;
88
+ private initialized;
89
+ private mode;
82
90
  constructor(config: ServerConfig);
83
- start(port: number): Promise<void>;
91
+ start(port?: number): Promise<void>;
92
+ initialize(): Promise<void>;
84
93
  stop(): Promise<void>;
85
94
  private handleTransportMessage;
86
95
  private handleTransportError;
@@ -101,5 +110,7 @@ export declare class BaseServer extends TypedEventEmitter<ServerEvents> {
101
110
  getConnectedClients(): ConnectedClient[];
102
111
  getClient(clientId: string): ConnectedClient | null;
103
112
  isRunning(): boolean;
113
+ getMode(): 'standalone' | 'integration';
114
+ isInitialized(): boolean;
104
115
  }
105
116
  //# sourceMappingURL=BaseServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseServer.d.ts","sourceRoot":"","sources":["../../src/server/BaseServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseServer.d.ts","sourceRoot":"","sources":["../../src/server/BaseServer.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,15 @@ export class BaseServer extends TypedEventEmitter {
5
5
  this.clients = new Map();
6
6
  this.clientMessageHandlers = new Map();
7
7
  this.running = false;
8
+ this.initialized = false;
8
9
  this.config = config;
9
10
  this.transport = config.transport;
10
11
  this.auth = config.auth;
11
12
  this.storage = config.storage;
12
13
  this.roomManager = config.roomManager;
13
14
  this.lockManager = config.lockManager;
15
+ // Determine mode based on configuration
16
+ this.mode = (config.httpServer || config.webSocketServer) ? 'integration' : 'standalone';
14
17
  // Set up transport event handlers
15
18
  this.transport.onMessage(this.handleTransportMessage.bind(this));
16
19
  this.transport.onError(this.handleTransportError.bind(this));
@@ -18,12 +21,19 @@ export class BaseServer extends TypedEventEmitter {
18
21
  }
19
22
  // Server Lifecycle
20
23
  async start(port) {
24
+ if (this.mode === 'integration') {
25
+ throw new Error('Cannot use start() in integration mode. Use initialize() instead.');
26
+ }
27
+ if (!port) {
28
+ throw new Error('Port is required for standalone mode');
29
+ }
21
30
  if (this.running) {
22
31
  throw new Error('Server is already running');
23
32
  }
24
33
  try {
25
34
  await this.transport.connect(`ws://localhost:${port}`, { url: `ws://localhost:${port}` });
26
35
  this.running = true;
36
+ this.initialized = true;
27
37
  await this.emit('started', { port });
28
38
  }
29
39
  catch (error) {
@@ -31,6 +41,45 @@ export class BaseServer extends TypedEventEmitter {
31
41
  throw error;
32
42
  }
33
43
  }
44
+ async initialize() {
45
+ if (this.mode === 'standalone') {
46
+ throw new Error('Cannot use initialize() in standalone mode. Use start() instead.');
47
+ }
48
+ if (this.initialized) {
49
+ throw new Error('Server is already initialized');
50
+ }
51
+ try {
52
+ const transport = this.transport;
53
+ if (this.config.webSocketServer) {
54
+ // Attach to existing WebSocket server
55
+ if (typeof transport.attachToWebSocketServer === 'function') {
56
+ await transport.attachToWebSocketServer(this.config.webSocketServer);
57
+ }
58
+ else {
59
+ throw new Error('Transport adapter does not support attachToWebSocketServer');
60
+ }
61
+ }
62
+ else if (this.config.httpServer) {
63
+ // Attach to existing HTTP server
64
+ if (typeof transport.attach === 'function') {
65
+ await transport.attach(this.config.httpServer, this.config.webSocketPath || '/ws');
66
+ }
67
+ else {
68
+ throw new Error('Transport adapter does not support attach');
69
+ }
70
+ }
71
+ else {
72
+ throw new Error('Either httpServer or webSocketServer must be provided in integration mode');
73
+ }
74
+ this.running = true;
75
+ this.initialized = true;
76
+ await this.emit('started', { port: 0 }); // Port 0 indicates integration mode
77
+ }
78
+ catch (error) {
79
+ await this.emit('error', { error: error, context: 'server_initialize' });
80
+ throw error;
81
+ }
82
+ }
34
83
  async stop() {
35
84
  if (!this.running) {
36
85
  return;
@@ -364,4 +413,10 @@ export class BaseServer extends TypedEventEmitter {
364
413
  isRunning() {
365
414
  return this.running;
366
415
  }
416
+ getMode() {
417
+ return this.mode;
418
+ }
419
+ isInitialized() {
420
+ return this.initialized;
421
+ }
367
422
  }
@@ -5,6 +5,9 @@ import type { RoomManager } from '../abstractions/RoomManager';
5
5
  import type { LockManager } from '../abstractions/LockManager';
6
6
  import type { RoomConfig } from '../types';
7
7
  import { BaseServer } from './BaseServer';
8
+ import type { Server as HttpServer } from 'http';
9
+ import type { Server as HttpsServer } from 'https';
10
+ import type { WebSocketServer } from 'ws';
8
11
  export declare class ServerBuilder {
9
12
  private transport?;
10
13
  private auth?;
@@ -12,12 +15,18 @@ export declare class ServerBuilder {
12
15
  private roomManager?;
13
16
  private lockManager?;
14
17
  private defaultRoomConfig?;
18
+ private httpServer?;
19
+ private webSocketPath?;
20
+ private webSocketServer?;
15
21
  withTransport(transport: ITransportAdapter): this;
16
22
  withAuth(auth: IAuthAdapter): this;
17
23
  withStorage(storage: IStorageAdapter): this;
18
24
  withRoomManager(roomManager: RoomManager): this;
19
25
  withLockManager(lockManager: LockManager): this;
20
26
  withDefaultRoomConfig(config: Partial<RoomConfig>): this;
27
+ withHttpServer(server: HttpServer | HttpsServer): this;
28
+ withWebSocketPath(path: string): this;
29
+ withWebSocketServer(wss: WebSocketServer): this;
21
30
  build(): BaseServer;
22
31
  }
23
32
  //# sourceMappingURL=ServerBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServerBuilder.d.ts","sourceRoot":"","sources":["../../src/server/ServerBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAE7D,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAC,CAAoB;IACtC,OAAO,CAAC,IAAI,CAAC,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAkB;IAClC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,iBAAiB,CAAC,CAAsB;IAEhD,aAAa,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAKjD,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKlC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAK3C,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAK/C,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAK/C,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAKxD,KAAK,IAAI,UAAU;CA4BpB"}
1
+ {"version":3,"file":"ServerBuilder.d.ts","sourceRoot":"","sources":["../../src/server/ServerBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAE1C,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAC,CAAoB;IACtC,OAAO,CAAC,IAAI,CAAC,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAkB;IAClC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,iBAAiB,CAAC,CAAsB;IAChD,OAAO,CAAC,UAAU,CAAC,CAA2B;IAC9C,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAkB;IAE1C,aAAa,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAKjD,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKlC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAK3C,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAK/C,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAK/C,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAKxD,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI;IAKtD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKrC,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAK/C,KAAK,IAAI,UAAU;CA+BpB"}
@@ -24,6 +24,18 @@ export class ServerBuilder {
24
24
  this.defaultRoomConfig = config;
25
25
  return this;
26
26
  }
27
+ withHttpServer(server) {
28
+ this.httpServer = server;
29
+ return this;
30
+ }
31
+ withWebSocketPath(path) {
32
+ this.webSocketPath = path;
33
+ return this;
34
+ }
35
+ withWebSocketServer(wss) {
36
+ this.webSocketServer = wss;
37
+ return this;
38
+ }
27
39
  build() {
28
40
  if (!this.transport) {
29
41
  throw new Error('Transport adapter is required');
@@ -44,7 +56,10 @@ export class ServerBuilder {
44
56
  maxUsers: 50,
45
57
  maxHistory: 100,
46
58
  permissions: ['read', 'write']
47
- }
59
+ },
60
+ httpServer: this.httpServer,
61
+ webSocketPath: this.webSocketPath,
62
+ webSocketServer: this.webSocketServer
48
63
  };
49
64
  return new BaseServer(config);
50
65
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ai/control-tower-core",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Centralized, runtime-agnostic library for real-time collaboration and synchronization",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -38,12 +38,15 @@
38
38
  "devDependencies": {
39
39
  "@eslint/js": "^9.36.0",
40
40
  "@types/bun": "latest",
41
+ "@types/ws": "^8.18.1",
41
42
  "@typescript-eslint/eslint-plugin": "^8.44.0",
42
43
  "@typescript-eslint/parser": "^8.44.0",
43
44
  "eslint": "^9.36.0",
44
45
  "typescript": "^5.3.3"
45
46
  },
46
- "dependencies": {},
47
+ "dependencies": {
48
+ "ws": "^8.18.3"
49
+ },
47
50
  "engines": {
48
51
  "bun": ">=1.0.0"
49
52
  }