@principal-ai/control-tower-core 0.1.20 → 0.1.21
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/adapters/websocket/WebSocketServerTransportAdapter.d.ts.map +1 -1
- package/dist/adapters/websocket/WebSocketServerTransportAdapter.js +53 -1
- package/dist/client/BaseClient.d.ts +20 -1
- package/dist/client/BaseClient.d.ts.map +1 -1
- package/dist/client/BaseClient.js +48 -0
- package/dist/index.js.map +5 -5
- package/dist/index.mjs +83 -3
- package/dist/index.mjs.map +5 -5
- package/dist/server/BaseServer.js +1 -1
- package/dist/types/auth.d.ts +17 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketServerTransportAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/websocket/WebSocketServerTransportAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,YAAY,EAGb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEhD,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,+BAAgC,YAAW,iBAAiB;IACvE,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,aAAa,CAAgC;IAGrD,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAG3B,OAAO,CAAC,cAAc,CAAC,CAA2B;IAClD,OAAO,CAAC,WAAW,CAAC,CAAkB;IACtC,OAAO,CAAC,aAAa,CAAC,CAAS;IAG/B,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,IAAI,CAA8C;IAG1D,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,MAAM,CAAiC;gBAEnC,MAAM,CAAC,EAAE,8BAA8B;IAUnD,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAclC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE,IAAI,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC7E,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YA2BpD,gBAAgB;YA6EhB,mBAAmB;YAuCnB,iBAAiB;
|
|
1
|
+
{"version":3,"file":"WebSocketServerTransportAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/websocket/WebSocketServerTransportAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,YAAY,EAGb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEhD,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,+BAAgC,YAAW,iBAAiB;IACvE,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,aAAa,CAAgC;IAGrD,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAG3B,OAAO,CAAC,cAAc,CAAC,CAA2B;IAClD,OAAO,CAAC,WAAW,CAAC,CAAkB;IACtC,OAAO,CAAC,aAAa,CAAC,CAAS;IAG/B,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,IAAI,CAA8C;IAG1D,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,MAAM,CAAiC;gBAEnC,MAAM,CAAC,EAAE,8BAA8B;IAUnD,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAclC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE,IAAI,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC7E,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YA2BpD,gBAAgB;YA6EhB,mBAAmB;YAuCnB,iBAAiB;IAsI/B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,YAAY;IAMd,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC3B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA4C3C,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIxC,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIpC,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIpC,QAAQ,IAAI,eAAe;IAI3B,WAAW,IAAI,OAAO;IAKtB,mBAAmB,IAAI,gBAAgB,EAAE;IAIzC,uBAAuB,IAAI,gBAAgB,EAAE;IAI7C,cAAc,IAAI,MAAM;IAIxB,OAAO,IAAI,YAAY,GAAG,aAAa;IAIvC,cAAc,IAAI,OAAO;IAIzB,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -226,7 +226,59 @@ class WebSocketServerTransportAdapter {
|
|
|
226
226
|
return;
|
|
227
227
|
}
|
|
228
228
|
try {
|
|
229
|
-
const
|
|
229
|
+
const payload = message.payload;
|
|
230
|
+
// Handle token-based authentication (from BaseClient.authenticate())
|
|
231
|
+
if (payload.token && typeof payload.token === 'string') {
|
|
232
|
+
try {
|
|
233
|
+
const tokenPayload = await this.authAdapter.validateToken(payload.token);
|
|
234
|
+
// Clear auth timeout
|
|
235
|
+
if (client.authTimeout) {
|
|
236
|
+
clearTimeout(client.authTimeout);
|
|
237
|
+
client.authTimeout = undefined;
|
|
238
|
+
}
|
|
239
|
+
// Update client state
|
|
240
|
+
client.authenticated = true;
|
|
241
|
+
client.userId = tokenPayload.userId;
|
|
242
|
+
client.metadata = tokenPayload.metadata;
|
|
243
|
+
// Send success response (using auth_result for consistency with BaseServer)
|
|
244
|
+
this.sendToClient(client, {
|
|
245
|
+
id: this.generateId(),
|
|
246
|
+
type: 'auth_result',
|
|
247
|
+
payload: {
|
|
248
|
+
success: true,
|
|
249
|
+
userId: client.userId
|
|
250
|
+
},
|
|
251
|
+
timestamp: Date.now()
|
|
252
|
+
});
|
|
253
|
+
// Notify handlers about authentication
|
|
254
|
+
const authMessage = {
|
|
255
|
+
id: this.generateId(),
|
|
256
|
+
type: 'client_authenticated',
|
|
257
|
+
payload: {
|
|
258
|
+
clientId: client.id,
|
|
259
|
+
userId: client.userId,
|
|
260
|
+
metadata: client.metadata
|
|
261
|
+
},
|
|
262
|
+
timestamp: Date.now()
|
|
263
|
+
};
|
|
264
|
+
this.messageHandlers.forEach(handler => handler(authMessage));
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
this.sendToClient(client, {
|
|
269
|
+
id: this.generateId(),
|
|
270
|
+
type: 'auth_result',
|
|
271
|
+
payload: {
|
|
272
|
+
success: false,
|
|
273
|
+
error: error.message
|
|
274
|
+
},
|
|
275
|
+
timestamp: Date.now()
|
|
276
|
+
});
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Handle credential-based authentication
|
|
281
|
+
const credentials = payload;
|
|
230
282
|
const result = await this.authAdapter.authenticate(credentials);
|
|
231
283
|
if (result.success) {
|
|
232
284
|
// Clear auth timeout
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ConnectionState, Event, RoomState, RoomUser, LockRequest, Lock, Credentials } from '../types/index.js';
|
|
1
|
+
import type { ConnectionState, Event, RoomState, RoomUser, LockRequest, Lock, Credentials, AuthenticatePayload } from '../types/index.js';
|
|
2
2
|
import type { ITransportAdapter } from '../abstractions/TransportAdapter.js';
|
|
3
3
|
import type { IAuthAdapter } from '../abstractions/AuthAdapter.js';
|
|
4
4
|
import type { IStorageAdapter } from '../abstractions/StorageAdapter.js';
|
|
@@ -19,6 +19,12 @@ export interface ClientEvents {
|
|
|
19
19
|
connected: {
|
|
20
20
|
url: string;
|
|
21
21
|
};
|
|
22
|
+
authenticated: {
|
|
23
|
+
userId: string;
|
|
24
|
+
};
|
|
25
|
+
authentication_failed: {
|
|
26
|
+
error: string;
|
|
27
|
+
};
|
|
22
28
|
disconnected: {
|
|
23
29
|
code: number;
|
|
24
30
|
reason: string;
|
|
@@ -76,6 +82,18 @@ export declare class BaseClient extends TypedEventEmitter<ClientEvents> {
|
|
|
76
82
|
connect(url: string, credentials?: Credentials): Promise<void>;
|
|
77
83
|
disconnect(): Promise<void>;
|
|
78
84
|
reconnect(): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Send an authenticate message to the server with the current token.
|
|
87
|
+
* This must be called after connect() to complete the authentication handshake.
|
|
88
|
+
*
|
|
89
|
+
* @param options Optional authentication options including deviceId and metadata
|
|
90
|
+
* @throws Error if client is not connected or no auth token is available
|
|
91
|
+
*/
|
|
92
|
+
authenticate(options?: Omit<AuthenticatePayload, 'token'>): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Check if the client has an auth token available.
|
|
95
|
+
*/
|
|
96
|
+
hasAuthToken(): boolean;
|
|
79
97
|
joinRoom(roomId: string): Promise<void>;
|
|
80
98
|
leaveRoom(): Promise<void>;
|
|
81
99
|
broadcast(event: Event): Promise<void>;
|
|
@@ -89,6 +107,7 @@ export declare class BaseClient extends TypedEventEmitter<ClientEvents> {
|
|
|
89
107
|
private handleMessage;
|
|
90
108
|
private handleError;
|
|
91
109
|
private handleClose;
|
|
110
|
+
private handleAuthResult;
|
|
92
111
|
private handleRoomJoined;
|
|
93
112
|
private handleRoomLeft;
|
|
94
113
|
private handleEventBroadcast;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseClient.d.ts","sourceRoot":"","sources":["../../src/client/BaseClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGf,KAAK,EACL,SAAS,EACT,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,WAAW,
|
|
1
|
+
{"version":3,"file":"BaseClient.d.ts","sourceRoot":"","sources":["../../src/client/BaseClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,6 +115,40 @@ class BaseClient extends EventEmitter_js_1.TypedEventEmitter {
|
|
|
115
115
|
}
|
|
116
116
|
await this.connect(this.lastConnectionUrl, this.lastCredentials || undefined);
|
|
117
117
|
}
|
|
118
|
+
// Authentication
|
|
119
|
+
/**
|
|
120
|
+
* Send an authenticate message to the server with the current token.
|
|
121
|
+
* This must be called after connect() to complete the authentication handshake.
|
|
122
|
+
*
|
|
123
|
+
* @param options Optional authentication options including deviceId and metadata
|
|
124
|
+
* @throws Error if client is not connected or no auth token is available
|
|
125
|
+
*/
|
|
126
|
+
async authenticate(options) {
|
|
127
|
+
if (this.connectionState !== 'connected') {
|
|
128
|
+
throw new Error('Client must be connected to authenticate');
|
|
129
|
+
}
|
|
130
|
+
if (!this.authToken) {
|
|
131
|
+
throw new Error('No auth token available. Connect with credentials first.');
|
|
132
|
+
}
|
|
133
|
+
const payload = {
|
|
134
|
+
token: this.authToken,
|
|
135
|
+
...options
|
|
136
|
+
};
|
|
137
|
+
const message = {
|
|
138
|
+
id: this.generateId(),
|
|
139
|
+
type: 'authenticate',
|
|
140
|
+
payload,
|
|
141
|
+
timestamp: Date.now()
|
|
142
|
+
};
|
|
143
|
+
await this.transport.send(message);
|
|
144
|
+
// Response will be handled in handleMessage via auth_result
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if the client has an auth token available.
|
|
148
|
+
*/
|
|
149
|
+
hasAuthToken() {
|
|
150
|
+
return this.authToken !== null;
|
|
151
|
+
}
|
|
118
152
|
// Room Management
|
|
119
153
|
async joinRoom(roomId) {
|
|
120
154
|
if (this.connectionState !== 'connected') {
|
|
@@ -205,6 +239,9 @@ class BaseClient extends EventEmitter_js_1.TypedEventEmitter {
|
|
|
205
239
|
async handleMessage(message) {
|
|
206
240
|
try {
|
|
207
241
|
switch (message.type) {
|
|
242
|
+
case 'auth_result':
|
|
243
|
+
await this.handleAuthResult(message.payload);
|
|
244
|
+
break;
|
|
208
245
|
case 'room_joined':
|
|
209
246
|
await this.handleRoomJoined(message.payload);
|
|
210
247
|
break;
|
|
@@ -250,6 +287,17 @@ class BaseClient extends EventEmitter_js_1.TypedEventEmitter {
|
|
|
250
287
|
}
|
|
251
288
|
}
|
|
252
289
|
}
|
|
290
|
+
async handleAuthResult(payload) {
|
|
291
|
+
if (payload.success) {
|
|
292
|
+
if (payload.userId) {
|
|
293
|
+
this.userId = payload.userId;
|
|
294
|
+
}
|
|
295
|
+
await this.emit('authenticated', { userId: this.userId || '' });
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
await this.emit('authentication_failed', { error: payload.error || 'Authentication failed' });
|
|
299
|
+
}
|
|
300
|
+
}
|
|
253
301
|
async handleRoomJoined(payload) {
|
|
254
302
|
this.currentRoomId = payload.roomId;
|
|
255
303
|
// Deserialize the plain objects back to Maps
|