@principal-ai/control-tower-core 0.1.6 → 0.1.7

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/README.md CHANGED
@@ -36,6 +36,7 @@ console.log('Server started on port 8080');
36
36
  - **Real-time Events**: Event broadcasting and history
37
37
  - **Extensible**: Abstract interfaces for custom implementations
38
38
  - **TypeScript**: Full type safety with generated declarations
39
+ - **Experimental APIs**: Opt-in broadcast features for rapid prototyping (see [Experimental Features](#experimental-features))
39
40
 
40
41
  ## API Reference
41
42
 
@@ -79,6 +80,68 @@ class CustomRoomManager extends RoomManager {
79
80
  }
80
81
  ```
81
82
 
83
+ ## Experimental Features
84
+
85
+ ⚠️ **For Development Use Only**
86
+
87
+ Control Tower Core provides experimental broadcast APIs for rapid prototyping and internal tooling. These APIs allow broadcasting messages beyond room boundaries.
88
+
89
+ ### Enabling Experimental Features
90
+
91
+ ```typescript
92
+ import { ServerBuilder } from '@principal-ai/control-tower-core';
93
+
94
+ const server = new ServerBuilder()
95
+ .withTransport(transportAdapter)
96
+ .withRoomManager(roomManager)
97
+ .withLockManager(lockManager)
98
+ .withExperimentalFeatures({
99
+ enableBroadcast: true // Enable experimental broadcast APIs
100
+ })
101
+ .build();
102
+ ```
103
+
104
+ ### Using Experimental Broadcast
105
+
106
+ ```typescript
107
+ // Broadcast to all connected clients
108
+ await server.experimental.broadcast({
109
+ type: 'system:announcement',
110
+ data: { message: 'Server maintenance in 5 minutes' }
111
+ });
112
+
113
+ // Broadcast to authenticated users only
114
+ await server.experimental.broadcastAuthenticated({
115
+ type: 'presence:user_online',
116
+ data: { userId: 'alice' }
117
+ });
118
+
119
+ // Broadcast with custom filtering
120
+ await server.experimental.broadcastWhere(
121
+ (client) => client.userId.startsWith('admin_'),
122
+ { type: 'admin:alert', data: { ... } }
123
+ );
124
+
125
+ // Send to specific users
126
+ await server.experimental.sendToUsers(
127
+ ['user1', 'user2'],
128
+ { type: 'notification:mention', data: { ... } }
129
+ );
130
+ ```
131
+
132
+ ### Important Notes
133
+
134
+ - **Experimental APIs may change or be removed** without major version bumps
135
+ - **Not recommended for production** applications
136
+ - Use for prototyping, then submit a [feature request](docs/FEATURE_REQUEST_TEMPLATE.md) to graduate to stable API
137
+ - See [full documentation](docs/EXPERIMENTAL_BROADCAST.md) for details
138
+
139
+ ## Documentation
140
+
141
+ - [Experimental Broadcast APIs](docs/EXPERIMENTAL_BROADCAST.md)
142
+ - [Feature Request Template](docs/FEATURE_REQUEST_TEMPLATE.md)
143
+ - [Architecture Design](DESIGN.md)
144
+
82
145
  ## License
83
146
 
84
147
  MIT
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { EventType, BaseEvent, FileAction, FileChangeEvent, GitStatusEvent, CommitEvent, BranchChangeEvent, CursorPositionEvent, Event, TokenPayload, AuthResult, CredentialType, OAuthProvider, Credentials, JWTConfig, OAuthConfig, AuthProvider, RoomPermission, Room, RoomUser, UserStatus, RoomState, RoomConfig, LockType, LockPriority, Lock, LockRequest, LockQueueItem, LockState, ConnectionState, ConnectionOptions, Message, MessageHandler, ErrorHandler, CloseHandler } from './types/index.js';
1
+ export { EventType, BaseEvent, FileAction, FileChangeEvent, GitStatusEvent, CommitEvent, BranchChangeEvent, CursorPositionEvent, Event, TokenPayload, AuthResult, CredentialType, OAuthProvider, Credentials, JWTConfig, OAuthConfig, AuthProvider, RoomPermission, Room, RoomUser, UserStatus, RoomState, RoomConfig, LockType, LockPriority, Lock, LockRequest, LockQueueItem, LockState, ConnectionState, ConnectionOptions, Message, MessageHandler, ErrorHandler, CloseHandler, ExperimentalFeatureConfig, ClientPredicate, BroadcastResult, BroadcastOptions, ExperimentalUsageEvent, ExperimentalFeatureError } from './types/index.js';
2
2
  export { ITransportAdapter, IStorageAdapter, StorageOperation, IAuthAdapter, TypedEventEmitter, EventListener, UnsubscribeFn, RoomManager, LockManager, DefaultRoomManager, DefaultLockManager } from './abstractions/index.js';
3
3
  export { MockTransportAdapter, MockStorageAdapter, MockAuthAdapter } from './adapters/mock/index.js';
4
4
  export { WebSocketTransportAdapter, type WebSocketTransportConfig } from './adapters/websocket/index.js';
5
5
  export { BaseClient, ClientBuilder, type ClientConfig, type ClientEvents } from './client/index.js';
6
- export { BaseServer, ServerBuilder, type ServerConfig, type ServerEvents, type ConnectedClient } from './server/index.js';
6
+ export { BaseServer, ServerBuilder, ExperimentalAPI, type ServerConfig, type ServerEvents, type ConnectedClient } from './server/index.js';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,SAAS,EACT,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,EAEL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EAEZ,cAAc,EACd,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,SAAS,EACT,UAAU,EAEV,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,aAAa,EACb,SAAS,EAET,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,YAAY,EACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,SAAS,EACT,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,EAEL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EAEZ,cAAc,EACd,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,SAAS,EACT,UAAU,EAEV,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,aAAa,EACb,SAAS,EAET,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,YAAY,EAEZ,yBAAyB,EACzB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,UAAU,EACV,aAAa,EACb,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,25 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ServerBuilder = exports.BaseServer = exports.ClientBuilder = exports.BaseClient = exports.WebSocketTransportAdapter = exports.MockAuthAdapter = exports.MockStorageAdapter = exports.MockTransportAdapter = exports.DefaultLockManager = exports.DefaultRoomManager = exports.LockManager = exports.RoomManager = exports.TypedEventEmitter = void 0;
3
+ exports.ExperimentalAPI = exports.ServerBuilder = exports.BaseServer = exports.ClientBuilder = exports.BaseClient = exports.WebSocketTransportAdapter = exports.MockAuthAdapter = exports.MockStorageAdapter = exports.MockTransportAdapter = exports.DefaultLockManager = exports.DefaultRoomManager = exports.LockManager = exports.RoomManager = exports.TypedEventEmitter = exports.ExperimentalFeatureError = void 0;
4
+ // Types
5
+ var index_js_1 = require("./types/index.js");
6
+ Object.defineProperty(exports, "ExperimentalFeatureError", { enumerable: true, get: function () { return index_js_1.ExperimentalFeatureError; } });
4
7
  // Abstractions
5
- var index_js_1 = require("./abstractions/index.js");
6
- Object.defineProperty(exports, "TypedEventEmitter", { enumerable: true, get: function () { return index_js_1.TypedEventEmitter; } });
7
- Object.defineProperty(exports, "RoomManager", { enumerable: true, get: function () { return index_js_1.RoomManager; } });
8
- Object.defineProperty(exports, "LockManager", { enumerable: true, get: function () { return index_js_1.LockManager; } });
9
- Object.defineProperty(exports, "DefaultRoomManager", { enumerable: true, get: function () { return index_js_1.DefaultRoomManager; } });
10
- Object.defineProperty(exports, "DefaultLockManager", { enumerable: true, get: function () { return index_js_1.DefaultLockManager; } });
8
+ var index_js_2 = require("./abstractions/index.js");
9
+ Object.defineProperty(exports, "TypedEventEmitter", { enumerable: true, get: function () { return index_js_2.TypedEventEmitter; } });
10
+ Object.defineProperty(exports, "RoomManager", { enumerable: true, get: function () { return index_js_2.RoomManager; } });
11
+ Object.defineProperty(exports, "LockManager", { enumerable: true, get: function () { return index_js_2.LockManager; } });
12
+ Object.defineProperty(exports, "DefaultRoomManager", { enumerable: true, get: function () { return index_js_2.DefaultRoomManager; } });
13
+ Object.defineProperty(exports, "DefaultLockManager", { enumerable: true, get: function () { return index_js_2.DefaultLockManager; } });
11
14
  // Adapters
12
- var index_js_2 = require("./adapters/mock/index.js");
13
- Object.defineProperty(exports, "MockTransportAdapter", { enumerable: true, get: function () { return index_js_2.MockTransportAdapter; } });
14
- Object.defineProperty(exports, "MockStorageAdapter", { enumerable: true, get: function () { return index_js_2.MockStorageAdapter; } });
15
- Object.defineProperty(exports, "MockAuthAdapter", { enumerable: true, get: function () { return index_js_2.MockAuthAdapter; } });
16
- var index_js_3 = require("./adapters/websocket/index.js");
17
- Object.defineProperty(exports, "WebSocketTransportAdapter", { enumerable: true, get: function () { return index_js_3.WebSocketTransportAdapter; } });
15
+ var index_js_3 = require("./adapters/mock/index.js");
16
+ Object.defineProperty(exports, "MockTransportAdapter", { enumerable: true, get: function () { return index_js_3.MockTransportAdapter; } });
17
+ Object.defineProperty(exports, "MockStorageAdapter", { enumerable: true, get: function () { return index_js_3.MockStorageAdapter; } });
18
+ Object.defineProperty(exports, "MockAuthAdapter", { enumerable: true, get: function () { return index_js_3.MockAuthAdapter; } });
19
+ var index_js_4 = require("./adapters/websocket/index.js");
20
+ Object.defineProperty(exports, "WebSocketTransportAdapter", { enumerable: true, get: function () { return index_js_4.WebSocketTransportAdapter; } });
18
21
  // Client
19
- var index_js_4 = require("./client/index.js");
20
- Object.defineProperty(exports, "BaseClient", { enumerable: true, get: function () { return index_js_4.BaseClient; } });
21
- Object.defineProperty(exports, "ClientBuilder", { enumerable: true, get: function () { return index_js_4.ClientBuilder; } });
22
+ var index_js_5 = require("./client/index.js");
23
+ Object.defineProperty(exports, "BaseClient", { enumerable: true, get: function () { return index_js_5.BaseClient; } });
24
+ Object.defineProperty(exports, "ClientBuilder", { enumerable: true, get: function () { return index_js_5.ClientBuilder; } });
22
25
  // Server
23
- var index_js_5 = require("./server/index.js");
24
- Object.defineProperty(exports, "BaseServer", { enumerable: true, get: function () { return index_js_5.BaseServer; } });
25
- Object.defineProperty(exports, "ServerBuilder", { enumerable: true, get: function () { return index_js_5.ServerBuilder; } });
26
+ var index_js_6 = require("./server/index.js");
27
+ Object.defineProperty(exports, "BaseServer", { enumerable: true, get: function () { return index_js_6.BaseServer; } });
28
+ Object.defineProperty(exports, "ServerBuilder", { enumerable: true, get: function () { return index_js_6.ServerBuilder; } });
29
+ Object.defineProperty(exports, "ExperimentalAPI", { enumerable: true, get: function () { return index_js_6.ExperimentalAPI; } });