@principal-ai/control-tower-core 0.1.25 → 0.2.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/abstractions/AuthAdapter.d.ts +1 -1
- package/dist/abstractions/AuthAdapter.d.ts.map +1 -1
- package/dist/abstractions/DefaultLockManager.d.ts +2 -2
- package/dist/abstractions/DefaultLockManager.d.ts.map +1 -1
- package/dist/abstractions/DefaultLockManager.js +7 -8
- package/dist/abstractions/DefaultPresenceManager.d.ts +4 -4
- package/dist/abstractions/DefaultPresenceManager.d.ts.map +1 -1
- package/dist/abstractions/DefaultPresenceManager.js +25 -25
- package/dist/abstractions/DefaultRoomManager.d.ts +3 -3
- package/dist/abstractions/DefaultRoomManager.d.ts.map +1 -1
- package/dist/abstractions/DefaultRoomManager.js +6 -4
- package/dist/abstractions/EventEmitter.d.ts.map +1 -1
- package/dist/abstractions/LockManager.d.ts +1 -1
- package/dist/abstractions/LockManager.d.ts.map +1 -1
- package/dist/abstractions/LockManager.js +1 -1
- package/dist/abstractions/PresenceExtension.d.ts +2 -2
- package/dist/abstractions/PresenceExtension.d.ts.map +1 -1
- package/dist/abstractions/PresenceManager.d.ts +1 -1
- package/dist/abstractions/PresenceManager.d.ts.map +1 -1
- package/dist/abstractions/PresenceManager.js +5 -5
- package/dist/abstractions/RoomManager.d.ts +2 -2
- package/dist/abstractions/RoomManager.d.ts.map +1 -1
- package/dist/abstractions/StorageAdapter.d.ts +4 -4
- package/dist/abstractions/StorageAdapter.d.ts.map +1 -1
- package/dist/abstractions/TransportAdapter.d.ts +4 -4
- package/dist/abstractions/TransportAdapter.d.ts.map +1 -1
- package/dist/abstractions/index.d.ts +11 -11
- package/dist/abstractions/index.d.ts.map +1 -1
- package/dist/abstractions/index.js +9 -9
- package/dist/adapters/mock/MockAuthAdapter.d.ts +2 -2
- package/dist/adapters/mock/MockAuthAdapter.d.ts.map +1 -1
- package/dist/adapters/mock/MockAuthAdapter.js +13 -11
- package/dist/adapters/mock/MockRTCDataChannel.d.ts +83 -0
- package/dist/adapters/mock/MockRTCDataChannel.d.ts.map +1 -0
- package/dist/adapters/mock/MockRTCDataChannel.js +146 -0
- package/dist/adapters/mock/MockRTCPeerConnection.d.ts +168 -0
- package/dist/adapters/mock/MockRTCPeerConnection.d.ts.map +1 -0
- package/dist/adapters/mock/MockRTCPeerConnection.js +449 -0
- package/dist/adapters/mock/MockStorageAdapter.d.ts +1 -1
- package/dist/adapters/mock/MockStorageAdapter.d.ts.map +1 -1
- package/dist/adapters/mock/MockStorageAdapter.js +18 -18
- package/dist/adapters/mock/MockTransportAdapter.d.ts +2 -2
- package/dist/adapters/mock/MockTransportAdapter.d.ts.map +1 -1
- package/dist/adapters/mock/MockTransportAdapter.js +38 -38
- package/dist/adapters/mock/index.d.ts +5 -3
- package/dist/adapters/mock/index.d.ts.map +1 -1
- package/dist/adapters/mock/index.js +10 -5
- package/dist/adapters/webrtc/WebRTCSignalingAdapter.d.ts +135 -0
- package/dist/adapters/webrtc/WebRTCSignalingAdapter.d.ts.map +1 -0
- package/dist/adapters/webrtc/WebRTCSignalingAdapter.js +368 -0
- package/dist/adapters/webrtc/index.d.ts +2 -0
- package/dist/adapters/webrtc/index.d.ts.map +1 -0
- package/dist/adapters/webrtc/index.js +5 -0
- package/dist/adapters/websocket/BrowserWebSocketTransportAdapter.d.ts +75 -0
- package/dist/adapters/websocket/BrowserWebSocketTransportAdapter.d.ts.map +1 -0
- package/dist/adapters/websocket/BrowserWebSocketTransportAdapter.js +231 -0
- package/dist/adapters/websocket/WebSocketClientTransportAdapter.d.ts +3 -3
- package/dist/adapters/websocket/WebSocketClientTransportAdapter.d.ts.map +1 -1
- package/dist/adapters/websocket/WebSocketClientTransportAdapter.js +38 -38
- package/dist/adapters/websocket/WebSocketServerTransportAdapter.d.ts +7 -7
- package/dist/adapters/websocket/WebSocketServerTransportAdapter.d.ts.map +1 -1
- package/dist/adapters/websocket/WebSocketServerTransportAdapter.js +94 -91
- package/dist/adapters/websocket/browser.d.ts +2 -0
- package/dist/adapters/websocket/browser.d.ts.map +1 -0
- package/dist/adapters/websocket/browser.js +6 -0
- package/dist/adapters/websocket/index.d.ts +3 -2
- package/dist/adapters/websocket/index.d.ts.map +1 -1
- package/dist/adapters/websocket/index.js +7 -3
- package/dist/adapters/websocket/node.d.ts +3 -0
- package/dist/adapters/websocket/node.d.ts.map +1 -0
- package/dist/adapters/websocket/node.js +8 -0
- package/dist/client/BaseClient.d.ts +6 -6
- package/dist/client/BaseClient.d.ts.map +1 -1
- package/dist/client/BaseClient.js +86 -72
- package/dist/client/ClientBuilder.d.ts +5 -5
- package/dist/client/ClientBuilder.d.ts.map +1 -1
- package/dist/client/ClientBuilder.js +3 -3
- package/dist/client/PresenceClient.d.ts +4 -4
- package/dist/client/PresenceClient.d.ts.map +1 -1
- package/dist/client/PresenceClient.js +30 -30
- package/dist/client/index.d.ts +3 -3
- package/dist/client/index.d.ts.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -19
- package/dist/index.js.map +27 -23
- package/dist/index.mjs +1585 -558
- package/dist/index.mjs.map +27 -23
- package/dist/server/BaseServer.d.ts +13 -13
- package/dist/server/BaseServer.d.ts.map +1 -1
- package/dist/server/BaseServer.js +218 -143
- package/dist/server/ExperimentalAPI.d.ts +7 -7
- package/dist/server/ExperimentalAPI.d.ts.map +1 -1
- package/dist/server/ExperimentalAPI.js +22 -22
- package/dist/server/ServerBuilder.d.ts +11 -11
- package/dist/server/ServerBuilder.d.ts.map +1 -1
- package/dist/server/ServerBuilder.js +10 -10
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -3
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/events.d.ts +10 -10
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/experimental.d.ts +2 -2
- package/dist/types/experimental.d.ts.map +1 -1
- package/dist/types/experimental.js +1 -1
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -2
- package/dist/types/lock.d.ts +2 -2
- package/dist/types/lock.d.ts.map +1 -1
- package/dist/types/presence.d.ts +3 -3
- package/dist/types/presence.d.ts.map +1 -1
- package/dist/types/room.d.ts +4 -4
- package/dist/types/room.d.ts.map +1 -1
- package/dist/types/room.js +2 -2
- package/package.json +15 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthAdapter.d.ts","sourceRoot":"","sources":["../../src/abstractions/AuthAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"AuthAdapter.d.ts","sourceRoot":"","sources":["../../src/abstractions/AuthAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAE5B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAGpD,aAAa,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,YAAY,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG3C,eAAe,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC;IAGlC,cAAc,CAAC,IAAI,OAAO,CAAC;IAC3B,cAAc,CAAC,IAAI,MAAM,CAAC;CAC1B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Lock, LockRequest } from
|
|
2
|
-
import { LockManager } from
|
|
1
|
+
import type { Lock, LockRequest } from "../types/index.js";
|
|
2
|
+
import { LockManager } from "./LockManager.js";
|
|
3
3
|
export declare class DefaultLockManager extends LockManager {
|
|
4
4
|
acquireLock(userId: string, username: string, request: LockRequest): Promise<Lock>;
|
|
5
5
|
releaseLock(lockId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultLockManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/DefaultLockManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"DefaultLockManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/DefaultLockManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,kBAAmB,SAAQ,WAAW;IAC5C,WAAW,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC;IAkDV,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB1C,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAS3C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAM7C,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAI9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtD,UAAU,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC;IAiBV,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAelE,OAAO,CAAC,UAAU;YAIJ,YAAY;CA2B1B"}
|
|
@@ -4,7 +4,7 @@ exports.DefaultLockManager = void 0;
|
|
|
4
4
|
const LockManager_js_1 = require("./LockManager.js");
|
|
5
5
|
class DefaultLockManager extends LockManager_js_1.LockManager {
|
|
6
6
|
async acquireLock(userId, username, request) {
|
|
7
|
-
const { path, type =
|
|
7
|
+
const { path, type = "file", priority = "normal", ttl, branch, metadata, } = request;
|
|
8
8
|
// Check if user already has a lock on this path
|
|
9
9
|
const userLocks = this.lockState.userLocks.get(userId) || new Set();
|
|
10
10
|
if (userLocks.has(path)) {
|
|
@@ -30,7 +30,7 @@ class DefaultLockManager extends LockManager_js_1.LockManager {
|
|
|
30
30
|
expiresAt: ttl ? Date.now() + ttl : undefined,
|
|
31
31
|
priority,
|
|
32
32
|
branch,
|
|
33
|
-
metadata
|
|
33
|
+
metadata,
|
|
34
34
|
};
|
|
35
35
|
// Store lock
|
|
36
36
|
this.lockState.locks.set(lockId, lock);
|
|
@@ -76,14 +76,13 @@ class DefaultLockManager extends LockManager_js_1.LockManager {
|
|
|
76
76
|
return null;
|
|
77
77
|
}
|
|
78
78
|
async getUserLocks(userId) {
|
|
79
|
-
return Array.from(this.lockState.locks.values())
|
|
80
|
-
.filter(lock => lock.userId === userId);
|
|
79
|
+
return Array.from(this.lockState.locks.values()).filter((lock) => lock.userId === userId);
|
|
81
80
|
}
|
|
82
81
|
async getAllLocks() {
|
|
83
82
|
return Array.from(this.lockState.locks.values());
|
|
84
83
|
}
|
|
85
84
|
async isLocked(path) {
|
|
86
|
-
return await this.getLock(path) !== null;
|
|
85
|
+
return (await this.getLock(path)) !== null;
|
|
87
86
|
}
|
|
88
87
|
async getQueueLength(path) {
|
|
89
88
|
const queue = this.lockState.queue.get(path);
|
|
@@ -106,7 +105,7 @@ class DefaultLockManager extends LockManager_js_1.LockManager {
|
|
|
106
105
|
username,
|
|
107
106
|
requestedAt: Date.now(),
|
|
108
107
|
resolve: () => { },
|
|
109
|
-
reject: () => { }
|
|
108
|
+
reject: () => { },
|
|
110
109
|
};
|
|
111
110
|
queue.push(queueItem);
|
|
112
111
|
this.lockState.queue.set(path, queue);
|
|
@@ -116,7 +115,7 @@ class DefaultLockManager extends LockManager_js_1.LockManager {
|
|
|
116
115
|
if (!queue) {
|
|
117
116
|
return;
|
|
118
117
|
}
|
|
119
|
-
const index = queue.findIndex(item => item.userId === userId);
|
|
118
|
+
const index = queue.findIndex((item) => item.userId === userId);
|
|
120
119
|
if (index !== -1) {
|
|
121
120
|
queue.splice(index, 1);
|
|
122
121
|
if (queue.length === 0) {
|
|
@@ -144,7 +143,7 @@ class DefaultLockManager extends LockManager_js_1.LockManager {
|
|
|
144
143
|
priority: item.priority,
|
|
145
144
|
ttl: item.ttl,
|
|
146
145
|
branch: item.branch,
|
|
147
|
-
metadata: item.metadata
|
|
146
|
+
metadata: item.metadata,
|
|
148
147
|
});
|
|
149
148
|
item.resolve(lock);
|
|
150
149
|
}
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* For multi-server deployments, implement a custom PresenceManager
|
|
8
8
|
* backed by Redis or another shared data store.
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
11
|
-
import type {
|
|
12
|
-
import type {
|
|
13
|
-
import
|
|
10
|
+
import type { BaseServer } from "../server/BaseServer.js";
|
|
11
|
+
import type { ActivityUpdate, DeviceInfo, PresenceChangeEvent, PresenceConfig, PresenceStatus, UserPresence } from "../types/presence.js";
|
|
12
|
+
import type { ExtendedUserPresence, PresenceExtension } from "./PresenceExtension.js";
|
|
13
|
+
import { PresenceManager } from "./PresenceManager.js";
|
|
14
14
|
export declare class DefaultPresenceManager<TExtendedData = Record<string, unknown>> extends PresenceManager {
|
|
15
15
|
private userPresences;
|
|
16
16
|
private deviceToUser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultPresenceManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/DefaultPresenceManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"DefaultPresenceManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/DefaultPresenceManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EACX,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACX,oBAAoB,EACpB,iBAAiB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAWvD,qBAAa,sBAAsB,CAClC,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACtC,SAAQ,eAAe;IACxB,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,MAAM,CAAC,CAAa;gBAG3B,MAAM,CAAC,EAAE,cAAc,GAAG;QACzB,UAAU,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;KAChD;IAMF;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAInC;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3C;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAC9B,OAAO,CAAC,YAAY,CAAC;IAgIlB,gBAAgB,CACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAuEzB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAiC7D,eAAe,CACpB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,oBAAoB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IAyBhD,gBAAgB,CACrB,OAAO,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAa/B,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAE,CAAC;IA4BhE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IASrD,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,YAAY,CAAC;IAUlB,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA4EnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAIjC;;OAEG;IACH,kBAAkB,IAAI,MAAM;CAG5B"}
|
|
@@ -62,10 +62,10 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
62
62
|
type: deviceInfo?.type,
|
|
63
63
|
connectedAt: now,
|
|
64
64
|
lastActivity: now,
|
|
65
|
-
metadata: deviceInfo?.metadata
|
|
65
|
+
metadata: deviceInfo?.metadata,
|
|
66
66
|
};
|
|
67
67
|
presence.devices.set(deviceId, device);
|
|
68
|
-
presence.status =
|
|
68
|
+
presence.status = "online";
|
|
69
69
|
presence.lastActivity = now;
|
|
70
70
|
this.userPresences.set(userId, presence);
|
|
71
71
|
this.deviceToUser.set(deviceId, userId);
|
|
@@ -84,13 +84,13 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
84
84
|
if (this.config.broadcastPresenceUpdates && this.server) {
|
|
85
85
|
const experimental = this.server.experimental;
|
|
86
86
|
await experimental?.broadcastAuthenticated({
|
|
87
|
-
type:
|
|
87
|
+
type: "presence:user_online",
|
|
88
88
|
payload: {
|
|
89
89
|
userId,
|
|
90
90
|
deviceId,
|
|
91
|
-
status:
|
|
92
|
-
timestamp: now
|
|
93
|
-
}
|
|
91
|
+
status: "online",
|
|
92
|
+
timestamp: now,
|
|
93
|
+
},
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
return presence;
|
|
@@ -102,11 +102,11 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
102
102
|
// New user
|
|
103
103
|
presence = {
|
|
104
104
|
userId,
|
|
105
|
-
status:
|
|
105
|
+
status: "online",
|
|
106
106
|
devices: new Map(),
|
|
107
107
|
firstConnectedAt: now,
|
|
108
108
|
lastActivity: now,
|
|
109
|
-
metadata: {}
|
|
109
|
+
metadata: {},
|
|
110
110
|
};
|
|
111
111
|
this.userPresences.set(userId, presence);
|
|
112
112
|
}
|
|
@@ -116,7 +116,7 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
116
116
|
type: deviceInfo?.type,
|
|
117
117
|
connectedAt: now,
|
|
118
118
|
lastActivity: now,
|
|
119
|
-
metadata: deviceInfo?.metadata
|
|
119
|
+
metadata: deviceInfo?.metadata,
|
|
120
120
|
};
|
|
121
121
|
presence.devices.set(deviceId, device);
|
|
122
122
|
presence.status = this.calculatePresenceStatus(presence.devices, now);
|
|
@@ -137,13 +137,13 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
137
137
|
if (!wasOnline && this.config.broadcastPresenceUpdates && this.server) {
|
|
138
138
|
const experimental = this.server.experimental;
|
|
139
139
|
await experimental?.broadcastAuthenticated({
|
|
140
|
-
type:
|
|
140
|
+
type: "presence:user_online",
|
|
141
141
|
payload: {
|
|
142
142
|
userId,
|
|
143
143
|
deviceId,
|
|
144
|
-
status:
|
|
145
|
-
timestamp: now
|
|
146
|
-
}
|
|
144
|
+
status: "online",
|
|
145
|
+
timestamp: now,
|
|
146
|
+
},
|
|
147
147
|
});
|
|
148
148
|
}
|
|
149
149
|
return presence;
|
|
@@ -168,14 +168,14 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
168
168
|
if (this.config.broadcastPresenceUpdates && this.server) {
|
|
169
169
|
const experimental = this.server.experimental;
|
|
170
170
|
await experimental?.broadcastAuthenticated({
|
|
171
|
-
type:
|
|
171
|
+
type: "presence:user_offline",
|
|
172
172
|
payload: {
|
|
173
173
|
userId,
|
|
174
174
|
deviceId,
|
|
175
|
-
status:
|
|
175
|
+
status: "offline",
|
|
176
176
|
timestamp: now,
|
|
177
|
-
gracePeriod: this.config.gracePeriod
|
|
178
|
-
}
|
|
177
|
+
gracePeriod: this.config.gracePeriod,
|
|
178
|
+
},
|
|
179
179
|
});
|
|
180
180
|
}
|
|
181
181
|
if (this.config.gracePeriod > 0) {
|
|
@@ -183,7 +183,7 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
183
183
|
this.gracePeriodEntries.set(userId, {
|
|
184
184
|
userId,
|
|
185
185
|
disconnectedAt: now,
|
|
186
|
-
previousPresence: presence
|
|
186
|
+
previousPresence: presence,
|
|
187
187
|
});
|
|
188
188
|
this.userPresences.delete(userId);
|
|
189
189
|
return null;
|
|
@@ -231,7 +231,7 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
231
231
|
presence.status = this.calculatePresenceStatus(presence.devices, timestamp);
|
|
232
232
|
// Call extension hooks
|
|
233
233
|
for (const ext of this.extensions) {
|
|
234
|
-
await ext.onActivity?.(userId, deviceId, activityType ||
|
|
234
|
+
await ext.onActivity?.(userId, deviceId, activityType || "heartbeat");
|
|
235
235
|
}
|
|
236
236
|
return presence;
|
|
237
237
|
}
|
|
@@ -251,7 +251,7 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
251
251
|
}
|
|
252
252
|
return {
|
|
253
253
|
...basePresence,
|
|
254
|
-
extended: extendedData
|
|
254
|
+
extended: extendedData,
|
|
255
255
|
};
|
|
256
256
|
}
|
|
257
257
|
return basePresence;
|
|
@@ -269,7 +269,7 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
269
269
|
async getOnlineUsers() {
|
|
270
270
|
const online = [];
|
|
271
271
|
for (const presence of this.userPresences.values()) {
|
|
272
|
-
if (presence.status ===
|
|
272
|
+
if (presence.status === "online") {
|
|
273
273
|
// Check visibility with extensions
|
|
274
274
|
let visible = true;
|
|
275
275
|
for (const ext of this.extensions) {
|
|
@@ -332,7 +332,7 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
332
332
|
previousStatus,
|
|
333
333
|
status: newStatus,
|
|
334
334
|
timestamp: now,
|
|
335
|
-
reason:
|
|
335
|
+
reason: "heartbeat_timeout",
|
|
336
336
|
});
|
|
337
337
|
}
|
|
338
338
|
// If no devices left, move to grace period
|
|
@@ -341,7 +341,7 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
341
341
|
this.gracePeriodEntries.set(userId, {
|
|
342
342
|
userId,
|
|
343
343
|
disconnectedAt: now,
|
|
344
|
-
previousPresence: presence
|
|
344
|
+
previousPresence: presence,
|
|
345
345
|
});
|
|
346
346
|
}
|
|
347
347
|
this.userPresences.delete(userId);
|
|
@@ -356,9 +356,9 @@ class DefaultPresenceManager extends PresenceManager_js_1.PresenceManager {
|
|
|
356
356
|
changes.push({
|
|
357
357
|
userId,
|
|
358
358
|
previousStatus: entry.previousPresence.status,
|
|
359
|
-
status:
|
|
359
|
+
status: "offline",
|
|
360
360
|
timestamp: now,
|
|
361
|
-
reason:
|
|
361
|
+
reason: "grace_period_expired",
|
|
362
362
|
});
|
|
363
363
|
}
|
|
364
364
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Room,
|
|
2
|
-
import { RoomManager } from
|
|
1
|
+
import type { Event, Room, RoomConfig, RoomState, RoomUser } from "../types/index.js";
|
|
2
|
+
import { RoomManager } from "./RoomManager.js";
|
|
3
3
|
export declare class DefaultRoomManager extends RoomManager {
|
|
4
4
|
createRoom(id: string, config: RoomConfig): Promise<Room>;
|
|
5
5
|
deleteRoom(id: string): Promise<void>;
|
|
@@ -10,6 +10,6 @@ export declare class DefaultRoomManager extends RoomManager {
|
|
|
10
10
|
getUsersInRoom(roomId: string): Promise<RoomUser[]>;
|
|
11
11
|
addEventToHistory(roomId: string, event: Event): Promise<void>;
|
|
12
12
|
getEventHistory(roomId: string, limit?: number): Promise<Event[]>;
|
|
13
|
-
updateUserStatus(roomId: string, userId: string, status: RoomUser[
|
|
13
|
+
updateUserStatus(roomId: string, userId: string, status: RoomUser["status"]): Promise<void>;
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=DefaultRoomManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultRoomManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/DefaultRoomManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"DefaultRoomManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/DefaultRoomManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,KAAK,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,kBAAmB,SAAQ,WAAW;IAC5C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,eAAe,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,cAAc,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IAWV,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIvD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IASnD,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9D,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAUjE,gBAAgB,CACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;CAYhB"}
|
|
@@ -11,13 +11,13 @@ class DefaultRoomManager extends RoomManager_js_1.RoomManager {
|
|
|
11
11
|
maxUsers: config.maxUsers,
|
|
12
12
|
maxHistory: config.maxHistory,
|
|
13
13
|
permissions: config.permissions,
|
|
14
|
-
metadata: config.metadata || {}
|
|
14
|
+
metadata: config.metadata || {},
|
|
15
15
|
};
|
|
16
16
|
const roomState = {
|
|
17
17
|
room,
|
|
18
18
|
users: new Map(),
|
|
19
19
|
eventHistory: [],
|
|
20
|
-
locks: new Map()
|
|
20
|
+
locks: new Map(),
|
|
21
21
|
};
|
|
22
22
|
this.rooms.set(id, roomState);
|
|
23
23
|
return room;
|
|
@@ -30,7 +30,8 @@ class DefaultRoomManager extends RoomManager_js_1.RoomManager {
|
|
|
30
30
|
if (!roomState) {
|
|
31
31
|
throw new Error(`Room ${roomId} not found`);
|
|
32
32
|
}
|
|
33
|
-
if (roomState.room.maxUsers &&
|
|
33
|
+
if (roomState.room.maxUsers &&
|
|
34
|
+
roomState.users.size >= roomState.room.maxUsers) {
|
|
34
35
|
throw new Error(`Room ${roomId} is full`);
|
|
35
36
|
}
|
|
36
37
|
roomState.users.set(user.id, user);
|
|
@@ -68,7 +69,8 @@ class DefaultRoomManager extends RoomManager_js_1.RoomManager {
|
|
|
68
69
|
}
|
|
69
70
|
roomState.eventHistory.push(event);
|
|
70
71
|
// Trim history if needed
|
|
71
|
-
if (roomState.room.maxHistory &&
|
|
72
|
+
if (roomState.room.maxHistory &&
|
|
73
|
+
roomState.eventHistory.length > roomState.room.maxHistory) {
|
|
72
74
|
roomState.eventHistory = roomState.eventHistory.slice(-roomState.room.maxHistory);
|
|
73
75
|
}
|
|
74
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../src/abstractions/EventEmitter.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC;AAEhC,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7E,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC;AAEvC,qBAAa,iBAAiB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../src/abstractions/EventEmitter.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC;AAEhC,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7E,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC;AAEvC,qBAAa,iBAAiB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAEvE,OAAO,CAAC,SAAS,CAA2D;IAC5E,OAAO,CAAC,aAAa,CAGjB;IAEJ,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EACzB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACjC,aAAa;IAShB,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAC3B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACjC,aAAa;IAShB,GAAG,CAAC,CAAC,SAAS,MAAM,OAAO,EAC1B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACjC,IAAI;IAKD,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EACjC,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,IAAI,CAAC;IAmBhB,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,OAAO,GAAG,IAAI;IAU/C,aAAa,CAAC,KAAK,EAAE,MAAM,OAAO,GAAG,MAAM;CAK3C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Lock, LockRequest, LockState } from
|
|
1
|
+
import type { Lock, LockRequest, LockState } from "../types/index.js";
|
|
2
2
|
export declare abstract class LockManager {
|
|
3
3
|
protected lockState: LockState;
|
|
4
4
|
abstract acquireLock(userId: string, username: string, request: LockRequest): Promise<Lock>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LockManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/LockManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"LockManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/LockManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEtE,8BAAsB,WAAW;IAChC,SAAS,CAAC,SAAS,EAAE,SAAS,CAI5B;IAEF,QAAQ,CAAC,WAAW,CACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC;IAChB,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACnD,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACxD,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACtD,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACtD,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/D,QAAQ,CAAC,UAAU,CAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC;IAChB,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CACrE"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - React to room joins/leaves
|
|
11
11
|
* - Track application-specific presence state
|
|
12
12
|
*/
|
|
13
|
-
import type { UserPresence } from
|
|
13
|
+
import type { UserPresence } from "../types/presence.js";
|
|
14
14
|
/**
|
|
15
15
|
* Extension for adding custom presence data and behavior
|
|
16
16
|
*
|
|
@@ -93,7 +93,7 @@ export interface PresenceExtension<TExtendedData = Record<string, unknown>> {
|
|
|
93
93
|
* @param deviceId - Device/client identifier
|
|
94
94
|
* @param activityType - Type of activity
|
|
95
95
|
*/
|
|
96
|
-
onActivity?(userId: string, deviceId: string, activityType:
|
|
96
|
+
onActivity?(userId: string, deviceId: string, activityType: "heartbeat" | "message" | "user_action"): Promise<void> | void;
|
|
97
97
|
/**
|
|
98
98
|
* Lifecycle: Called when extension is initialized
|
|
99
99
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresenceExtension.d.ts","sourceRoot":"","sources":["../../src/abstractions/PresenceExtension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PresenceExtension.d.ts","sourceRoot":"","sources":["../../src/abstractions/PresenceExtension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzE;;;;;;OAMG;IACH,YAAY,CAAC,CACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAExB;;;;;;;OAOG;IACH,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEvE;;;;;;OAMG;IACH,iBAAiB,CAAC,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAExB;;;;;OAKG;IACH,oBAAoB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE9E;;;;;;;;OAQG;IACH,YAAY,CAAC,CACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAExB;;;;;;OAMG;IACH,UAAU,CAAC,CACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAExB;;;;;;;OAOG;IACH,eAAe,CAAC,CACf,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC;IAExD;;;;;;;;OAQG;IACH,eAAe,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAE7D;;;;;;OAMG;IACH,UAAU,CAAC,CACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,GACnD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEpC;;;;OAIG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC5E,SAAQ,YAAY;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;CACzB"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Manages global user presence tracking independent of room membership.
|
|
5
5
|
* Supports multi-device connections, activity monitoring, and grace periods.
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { ActivityUpdate, DeviceInfo, PresenceChangeEvent, PresenceConfig, PresenceStatus, UserPresence } from "../types/presence.js";
|
|
8
8
|
/**
|
|
9
9
|
* Abstract class for managing user presence
|
|
10
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresenceManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/PresenceManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"PresenceManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/PresenceManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACX,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;GAQG;AACH,8BAAsB,eAAe;IACpC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAE/B,MAAM,CAAC,EAAE,cAAc;IAanC;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,CACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAC9B,OAAO,CAAC,YAAY,CAAC;IAExB;;;;;;;;OAQG;IACH,QAAQ,CAAC,gBAAgB,CACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAE/B;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAEtE;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAEtE;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CACxB,OAAO,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAErC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAElD;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAE9D;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,YAAY,CAAC;IAExB;;;;;;;;;OASG;IACH,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAE5D;;;;OAIG;IACH,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAI/C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;;;;;OAQG;IACH,SAAS,CAAC,uBAAuB,CAChC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAChC,GAAG,GAAE,MAAmB,GACtB,cAAc;IAoBjB;;;;;;OAMG;IACH,SAAS,CAAC,sBAAsB,CAC/B,MAAM,EAAE,UAAU,EAClB,GAAG,GAAE,MAAmB,GACtB,OAAO;CAKV"}
|
|
@@ -26,7 +26,7 @@ class PresenceManager {
|
|
|
26
26
|
disconnectThreshold: config?.disconnectThreshold ?? 3,
|
|
27
27
|
gracePeriod: config?.gracePeriod ?? 30000,
|
|
28
28
|
trackDeviceActivity: config?.trackDeviceActivity ?? true,
|
|
29
|
-
broadcastPresenceUpdates: config?.broadcastPresenceUpdates ?? true
|
|
29
|
+
broadcastPresenceUpdates: config?.broadcastPresenceUpdates ?? true,
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
@@ -52,18 +52,18 @@ class PresenceManager {
|
|
|
52
52
|
*/
|
|
53
53
|
calculatePresenceStatus(devices, now = Date.now()) {
|
|
54
54
|
if (devices.size === 0) {
|
|
55
|
-
return
|
|
55
|
+
return "offline";
|
|
56
56
|
}
|
|
57
57
|
const heartbeatTimeout = this.config.heartbeatInterval * this.config.awayThreshold;
|
|
58
58
|
// Check if ANY device is active (within heartbeat threshold)
|
|
59
59
|
for (const device of devices.values()) {
|
|
60
60
|
const timeSinceActivity = now - device.lastActivity;
|
|
61
61
|
if (timeSinceActivity < heartbeatTimeout) {
|
|
62
|
-
return
|
|
62
|
+
return "online";
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
// All devices are idle
|
|
66
|
-
return
|
|
66
|
+
return "away";
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
69
|
* Check if a device should be disconnected due to missed heartbeats
|
|
@@ -74,7 +74,7 @@ class PresenceManager {
|
|
|
74
74
|
*/
|
|
75
75
|
shouldDisconnectDevice(device, now = Date.now()) {
|
|
76
76
|
const timeout = this.config.heartbeatInterval * this.config.disconnectThreshold;
|
|
77
|
-
return
|
|
77
|
+
return now - device.lastActivity > timeout;
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
exports.PresenceManager = PresenceManager;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Room,
|
|
1
|
+
import type { Event, Room, RoomConfig, RoomState, RoomUser } from "../types/index.js";
|
|
2
2
|
export declare abstract class RoomManager {
|
|
3
3
|
protected rooms: Map<string, RoomState>;
|
|
4
4
|
abstract createRoom(id: string, config: RoomConfig): Promise<Room>;
|
|
@@ -10,6 +10,6 @@ export declare abstract class RoomManager {
|
|
|
10
10
|
abstract getUsersInRoom(roomId: string): Promise<RoomUser[]>;
|
|
11
11
|
abstract addEventToHistory(roomId: string, event: Event): Promise<void>;
|
|
12
12
|
abstract getEventHistory(roomId: string, limit?: number): Promise<Event[]>;
|
|
13
|
-
abstract updateUserStatus(roomId: string, userId: string, status: RoomUser[
|
|
13
|
+
abstract updateUserStatus(roomId: string, userId: string, status: RoomUser["status"]): Promise<void>;
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=RoomManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/RoomManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"RoomManager.d.ts","sourceRoot":"","sources":["../../src/abstractions/RoomManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,KAAK,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,MAAM,mBAAmB,CAAC;AAE3B,8BAAsB,WAAW;IAChC,SAAS,CAAC,KAAK,yBAAgC;IAE/C,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAChE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACjE,QAAQ,CAAC,eAAe,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,aAAa,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAChB,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAChE,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5D,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IACvE,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAC1E,QAAQ,CAAC,gBAAgB,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;CAChB"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export type StorageOperation = {
|
|
2
|
-
type:
|
|
2
|
+
type: "get";
|
|
3
3
|
key: string;
|
|
4
4
|
} | {
|
|
5
|
-
type:
|
|
5
|
+
type: "set";
|
|
6
6
|
key: string;
|
|
7
7
|
value: unknown;
|
|
8
8
|
ttl?: number;
|
|
9
9
|
} | {
|
|
10
|
-
type:
|
|
10
|
+
type: "delete";
|
|
11
11
|
key: string;
|
|
12
12
|
} | {
|
|
13
|
-
type:
|
|
13
|
+
type: "exists";
|
|
14
14
|
key: string;
|
|
15
15
|
};
|
|
16
16
|
export interface IStorageAdapter {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAdapter.d.ts","sourceRoot":"","sources":["../../src/abstractions/StorageAdapter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"StorageAdapter.d.ts","sourceRoot":"","sources":["../../src/abstractions/StorageAdapter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACzB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC/B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3D"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { Server as
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
1
|
+
import type { Server as HttpServer } from "http";
|
|
2
|
+
import type { Server as HttpsServer } from "https";
|
|
3
|
+
import type { WebSocketServer } from "ws";
|
|
4
|
+
import type { CloseHandler, ConnectionOptions, ConnectionState, ErrorHandler, Message, MessageHandler } from "../types/index.js";
|
|
5
5
|
export interface ITransportAdapter {
|
|
6
6
|
connect(url: string, options?: ConnectionOptions): Promise<void>;
|
|
7
7
|
disconnect(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransportAdapter.d.ts","sourceRoot":"","sources":["../../src/abstractions/TransportAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"TransportAdapter.d.ts","sourceRoot":"","sources":["../../src/abstractions/TransportAdapter.ts"],"names":[],"mappings":"AAAA,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;AAC1C,OAAO,KAAK,EACX,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,OAAO,EACP,cAAc,EACd,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,iBAAiB;IAEjC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IACzC,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,QAAQ,IAAI,eAAe,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IAGvB,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,uBAAuB,CAAC,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export { LockManager } from
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
1
|
+
export { IAuthAdapter } from "./AuthAdapter.js";
|
|
2
|
+
export { DefaultLockManager } from "./DefaultLockManager.js";
|
|
3
|
+
export { DefaultPresenceManager } from "./DefaultPresenceManager.js";
|
|
4
|
+
export { DefaultRoomManager } from "./DefaultRoomManager.js";
|
|
5
|
+
export { EventListener, TypedEventEmitter, UnsubscribeFn, } from "./EventEmitter.js";
|
|
6
|
+
export { LockManager } from "./LockManager.js";
|
|
7
|
+
export { type ExtendedUserPresence, type PresenceExtension, } from "./PresenceExtension.js";
|
|
8
|
+
export { PresenceManager } from "./PresenceManager.js";
|
|
9
|
+
export { RoomManager } from "./RoomManager.js";
|
|
10
|
+
export { IStorageAdapter, StorageOperation } from "./StorageAdapter.js";
|
|
11
|
+
export { ITransportAdapter } from "./TransportAdapter.js";
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/abstractions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/abstractions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACN,aAAa,EACb,iBAAiB,EACjB,aAAa,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.RoomManager = exports.PresenceManager = exports.LockManager = exports.TypedEventEmitter = exports.DefaultRoomManager = exports.DefaultPresenceManager = exports.DefaultLockManager = void 0;
|
|
4
|
+
var DefaultLockManager_js_1 = require("./DefaultLockManager.js");
|
|
5
|
+
Object.defineProperty(exports, "DefaultLockManager", { enumerable: true, get: function () { return DefaultLockManager_js_1.DefaultLockManager; } });
|
|
6
|
+
var DefaultPresenceManager_js_1 = require("./DefaultPresenceManager.js");
|
|
7
|
+
Object.defineProperty(exports, "DefaultPresenceManager", { enumerable: true, get: function () { return DefaultPresenceManager_js_1.DefaultPresenceManager; } });
|
|
8
|
+
var DefaultRoomManager_js_1 = require("./DefaultRoomManager.js");
|
|
9
|
+
Object.defineProperty(exports, "DefaultRoomManager", { enumerable: true, get: function () { return DefaultRoomManager_js_1.DefaultRoomManager; } });
|
|
4
10
|
var EventEmitter_js_1 = require("./EventEmitter.js");
|
|
5
11
|
Object.defineProperty(exports, "TypedEventEmitter", { enumerable: true, get: function () { return EventEmitter_js_1.TypedEventEmitter; } });
|
|
6
|
-
var RoomManager_js_1 = require("./RoomManager.js");
|
|
7
|
-
Object.defineProperty(exports, "RoomManager", { enumerable: true, get: function () { return RoomManager_js_1.RoomManager; } });
|
|
8
12
|
var LockManager_js_1 = require("./LockManager.js");
|
|
9
13
|
Object.defineProperty(exports, "LockManager", { enumerable: true, get: function () { return LockManager_js_1.LockManager; } });
|
|
10
|
-
var DefaultRoomManager_js_1 = require("./DefaultRoomManager.js");
|
|
11
|
-
Object.defineProperty(exports, "DefaultRoomManager", { enumerable: true, get: function () { return DefaultRoomManager_js_1.DefaultRoomManager; } });
|
|
12
|
-
var DefaultLockManager_js_1 = require("./DefaultLockManager.js");
|
|
13
|
-
Object.defineProperty(exports, "DefaultLockManager", { enumerable: true, get: function () { return DefaultLockManager_js_1.DefaultLockManager; } });
|
|
14
14
|
var PresenceManager_js_1 = require("./PresenceManager.js");
|
|
15
15
|
Object.defineProperty(exports, "PresenceManager", { enumerable: true, get: function () { return PresenceManager_js_1.PresenceManager; } });
|
|
16
|
-
var
|
|
17
|
-
Object.defineProperty(exports, "
|
|
16
|
+
var RoomManager_js_1 = require("./RoomManager.js");
|
|
17
|
+
Object.defineProperty(exports, "RoomManager", { enumerable: true, get: function () { return RoomManager_js_1.RoomManager; } });
|