@observertc/observer-js 1.0.0-beta.1 → 1.0.0-beta.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.
- package/lib/ObservedCall.d.ts +4 -3
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +13 -7
- package/lib/ObservedClient.d.ts +3 -0
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +14 -0
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +6 -0
- package/package.json +1 -1
- package/src/ObservedCall.ts +17 -13
- package/src/ObservedClient.ts +19 -0
- package/src/Observer.ts +4 -0
package/lib/ObservedCall.d.ts
CHANGED
|
@@ -11,9 +11,10 @@ import { ObservedCallEventMonitor } from './ObservedCallEventMonitor';
|
|
|
11
11
|
export type ObservedCallSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
|
|
12
12
|
callId: string;
|
|
13
13
|
appData?: AppData;
|
|
14
|
-
remoteTrackResolvePolicy?: 'p2p' | 'mediasoup-sfu';
|
|
14
|
+
remoteTrackResolvePolicy?: 'p2p' | 'mediasoup-sfu' | 'none';
|
|
15
15
|
updatePolicy?: 'update-on-any-client-updated' | 'update-when-all-client-updated' | 'update-on-interval';
|
|
16
16
|
updateIntervalInMs?: number;
|
|
17
|
+
closeCallIfEmptyForMs?: number;
|
|
17
18
|
};
|
|
18
19
|
export type ObservedCallEvents = {
|
|
19
20
|
update: [];
|
|
@@ -68,8 +69,8 @@ export declare class ObservedCall<AppData extends Record<string, unknown> = Reco
|
|
|
68
69
|
startedAt?: number;
|
|
69
70
|
endedAt?: number;
|
|
70
71
|
closedAt?: number;
|
|
71
|
-
|
|
72
|
-
private
|
|
72
|
+
readonly settings: Pick<ObservedCallSettings, 'closeCallIfEmptyForMs'>;
|
|
73
|
+
private closeTimer?;
|
|
73
74
|
constructor(settings: ObservedCallSettings<AppData>, observer: Observer);
|
|
74
75
|
get numberOfClients(): number;
|
|
75
76
|
get score(): number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedCall.d.ts","sourceRoot":"","sources":["../src/ObservedCall.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACrG,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedCall.d.ts","sourceRoot":"","sources":["../src/ObservedCall.ts"],"names":[],"mappings":"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"}
|
package/lib/ObservedCall.js
CHANGED
|
@@ -52,8 +52,8 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
52
52
|
startedAt;
|
|
53
53
|
endedAt;
|
|
54
54
|
closedAt;
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
settings;
|
|
56
|
+
closeTimer;
|
|
57
57
|
constructor(settings, observer) {
|
|
58
58
|
super();
|
|
59
59
|
this.observer = observer;
|
|
@@ -85,11 +85,8 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
85
85
|
case 'mediasoup-sfu':
|
|
86
86
|
break;
|
|
87
87
|
}
|
|
88
|
-
this.
|
|
89
|
-
|
|
90
|
-
};
|
|
91
|
-
this._callEndedEvent = {
|
|
92
|
-
emitted: false,
|
|
88
|
+
this.settings = {
|
|
89
|
+
closeCallIfEmptyForMs: settings.closeCallIfEmptyForMs,
|
|
93
90
|
};
|
|
94
91
|
}
|
|
95
92
|
get numberOfClients() {
|
|
@@ -142,6 +139,11 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
142
139
|
this.observedClients.delete(settings.clientId);
|
|
143
140
|
if (this.observedClients.size === 0) {
|
|
144
141
|
this.emit('empty');
|
|
142
|
+
if (this.settings.closeCallIfEmptyForMs) {
|
|
143
|
+
this.closeTimer = setTimeout(() => {
|
|
144
|
+
this.close();
|
|
145
|
+
}, this.settings.closeCallIfEmptyForMs);
|
|
146
|
+
}
|
|
145
147
|
}
|
|
146
148
|
++this.totalRemovedClients;
|
|
147
149
|
});
|
|
@@ -151,6 +153,10 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
151
153
|
++this.totalAddedClients;
|
|
152
154
|
this.observedClients.set(settings.clientId, result);
|
|
153
155
|
this.maxNumberOfClients = Math.max(this.maxNumberOfClients, this.observedClients.size);
|
|
156
|
+
if (this.closeTimer) {
|
|
157
|
+
clearTimeout(this.closeTimer);
|
|
158
|
+
this.closeTimer = undefined;
|
|
159
|
+
}
|
|
154
160
|
this.emit('newclient', result);
|
|
155
161
|
if (wasEmpty) {
|
|
156
162
|
this.emit('not-empty');
|
package/lib/ObservedClient.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { Detectors } from './detectors/Detectors';
|
|
|
9
9
|
export type ObservedClientSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
|
|
10
10
|
clientId: string;
|
|
11
11
|
appData?: AppData;
|
|
12
|
+
closeClientIfIdleForMs?: number;
|
|
12
13
|
};
|
|
13
14
|
export type ObservedClientEvents = {
|
|
14
15
|
update: [sample: ClientSample, elapsedTimeInMs: number];
|
|
@@ -36,6 +37,7 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
|
|
|
36
37
|
readonly clientId: string;
|
|
37
38
|
readonly observedPeerConnections: Map<string, ObservedPeerConnection>;
|
|
38
39
|
readonly calculatedScore: CalculatedScore;
|
|
40
|
+
readonly settings: Pick<ObservedClientSettings, 'closeClientIfIdleForMs'>;
|
|
39
41
|
appData: AppData;
|
|
40
42
|
attachments?: Record<string, unknown>;
|
|
41
43
|
updated: number;
|
|
@@ -107,6 +109,7 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
|
|
|
107
109
|
readonly mediaDevices: MetaData.MediaDeviceInfo[];
|
|
108
110
|
issues: ClientIssue[];
|
|
109
111
|
private _injections;
|
|
112
|
+
private closeTimer?;
|
|
110
113
|
constructor(settings: ObservedClientSettings<AppData>, call: ObservedCall);
|
|
111
114
|
get numberOfPeerConnections(): number;
|
|
112
115
|
get score(): number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAwB,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpI,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACvG,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}
|
package/lib/ObservedClient.js
CHANGED
|
@@ -18,6 +18,7 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
18
18
|
weight: 1,
|
|
19
19
|
value: undefined,
|
|
20
20
|
};
|
|
21
|
+
settings;
|
|
21
22
|
appData;
|
|
22
23
|
attachments;
|
|
23
24
|
updated = Date.now();
|
|
@@ -90,6 +91,7 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
90
91
|
mediaDevices = [];
|
|
91
92
|
issues = [];
|
|
92
93
|
_injections = {};
|
|
94
|
+
closeTimer;
|
|
93
95
|
constructor(settings, call) {
|
|
94
96
|
super();
|
|
95
97
|
this.call = call;
|
|
@@ -97,6 +99,9 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
97
99
|
this.clientId = settings.clientId;
|
|
98
100
|
this.appData = settings.appData ?? {};
|
|
99
101
|
this.detectors = new Detectors_1.Detectors();
|
|
102
|
+
this.settings = {
|
|
103
|
+
closeClientIfIdleForMs: settings.closeClientIfIdleForMs,
|
|
104
|
+
};
|
|
100
105
|
}
|
|
101
106
|
get numberOfPeerConnections() {
|
|
102
107
|
return this.observedPeerConnections.size;
|
|
@@ -125,6 +130,10 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
125
130
|
accept(sample) {
|
|
126
131
|
if (this.closed)
|
|
127
132
|
throw new Error(`Client ${this.clientId} is closed`);
|
|
133
|
+
if (this.closeTimer) {
|
|
134
|
+
clearTimeout(this.closeTimer);
|
|
135
|
+
this.closeTimer = undefined;
|
|
136
|
+
}
|
|
128
137
|
const now = Date.now();
|
|
129
138
|
const elapsedInMs = now - this.updated;
|
|
130
139
|
const elapsedInSeconds = elapsedInMs / 1000;
|
|
@@ -268,6 +277,11 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
268
277
|
this.totalScoreSum += this.calculatedScore.value;
|
|
269
278
|
++this.numberOfScoreMeasurements;
|
|
270
279
|
}
|
|
280
|
+
if (this.settings.closeClientIfIdleForMs !== undefined) {
|
|
281
|
+
this.closeTimer = setTimeout(() => {
|
|
282
|
+
this.close();
|
|
283
|
+
}, this.settings.closeClientIfIdleForMs);
|
|
284
|
+
}
|
|
271
285
|
}
|
|
272
286
|
_processClientEvent(event, postBuffer) {
|
|
273
287
|
// eslint-disable-next-line no-console
|
package/lib/Observer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Observer.d.ts","sourceRoot":"","sources":["../src/Observer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Observer.d.ts","sourceRoot":"","sources":["../src/Observer.ts"],"names":[],"mappings":"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"}
|
package/lib/Observer.js
CHANGED
|
@@ -87,6 +87,12 @@ class Observer extends events_1.EventEmitter {
|
|
|
87
87
|
if (settings.remoteTrackResolvePolicy === 'mediasoup-sfu') {
|
|
88
88
|
observedCall.remoteTrackResolver = new MediasoupRemoteTrackResolver_1.MediasoupRemoteTrackResolver(observedCall);
|
|
89
89
|
}
|
|
90
|
+
else if (settings.remoteTrackResolvePolicy === 'p2p') {
|
|
91
|
+
// For future implementation
|
|
92
|
+
}
|
|
93
|
+
else if (settings.remoteTrackResolvePolicy === 'none' || !settings.remoteTrackResolvePolicy) {
|
|
94
|
+
// do nothing
|
|
95
|
+
}
|
|
90
96
|
observedCall.once('close', () => {
|
|
91
97
|
this.observedCalls.delete(observedCall.callId);
|
|
92
98
|
observedCall.off('update', onCallUpdated);
|
package/package.json
CHANGED
package/src/ObservedCall.ts
CHANGED
|
@@ -15,9 +15,10 @@ import { ObservedCallEventMonitor } from './ObservedCallEventMonitor';
|
|
|
15
15
|
export type ObservedCallSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
|
|
16
16
|
callId: string;
|
|
17
17
|
appData?: AppData;
|
|
18
|
-
remoteTrackResolvePolicy?: 'p2p' | 'mediasoup-sfu',
|
|
18
|
+
remoteTrackResolvePolicy?: 'p2p' | 'mediasoup-sfu' | 'none',
|
|
19
19
|
updatePolicy?: 'update-on-any-client-updated' | 'update-when-all-client-updated' | 'update-on-interval',
|
|
20
20
|
updateIntervalInMs?: number,
|
|
21
|
+
closeCallIfEmptyForMs?: number,
|
|
21
22
|
};
|
|
22
23
|
|
|
23
24
|
export type ObservedCallEvents = {
|
|
@@ -86,13 +87,8 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
86
87
|
public endedAt?: number;
|
|
87
88
|
public closedAt?: number;
|
|
88
89
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
timer?: ReturnType<typeof setTimeout>,
|
|
92
|
-
};
|
|
93
|
-
private _callEndedEvent: {
|
|
94
|
-
emitted: boolean
|
|
95
|
-
};
|
|
90
|
+
public readonly settings: Pick<ObservedCallSettings, 'closeCallIfEmptyForMs'>;
|
|
91
|
+
private closeTimer?: ReturnType<typeof setTimeout>;
|
|
96
92
|
|
|
97
93
|
public constructor(
|
|
98
94
|
settings: ObservedCallSettings<AppData>,
|
|
@@ -134,11 +130,8 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
134
130
|
break;
|
|
135
131
|
}
|
|
136
132
|
|
|
137
|
-
this.
|
|
138
|
-
|
|
139
|
-
};
|
|
140
|
-
this._callEndedEvent = {
|
|
141
|
-
emitted: false,
|
|
133
|
+
this.settings = {
|
|
134
|
+
closeCallIfEmptyForMs: settings.closeCallIfEmptyForMs,
|
|
142
135
|
};
|
|
143
136
|
}
|
|
144
137
|
|
|
@@ -198,6 +191,12 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
198
191
|
|
|
199
192
|
if (this.observedClients.size === 0) {
|
|
200
193
|
this.emit('empty');
|
|
194
|
+
|
|
195
|
+
if (this.settings.closeCallIfEmptyForMs) {
|
|
196
|
+
this.closeTimer = setTimeout(() => {
|
|
197
|
+
this.close();
|
|
198
|
+
}, this.settings.closeCallIfEmptyForMs);
|
|
199
|
+
}
|
|
201
200
|
}
|
|
202
201
|
++this.totalRemovedClients;
|
|
203
202
|
});
|
|
@@ -209,6 +208,11 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
209
208
|
this.observedClients.set(settings.clientId, result);
|
|
210
209
|
this.maxNumberOfClients = Math.max(this.maxNumberOfClients, this.observedClients.size);
|
|
211
210
|
|
|
211
|
+
if (this.closeTimer) {
|
|
212
|
+
clearTimeout(this.closeTimer);
|
|
213
|
+
this.closeTimer = undefined;
|
|
214
|
+
}
|
|
215
|
+
|
|
212
216
|
this.emit('newclient', result);
|
|
213
217
|
|
|
214
218
|
if (wasEmpty) {
|
package/src/ObservedClient.ts
CHANGED
|
@@ -16,6 +16,7 @@ const logger = createLogger('ObservedClient');
|
|
|
16
16
|
export type ObservedClientSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
|
|
17
17
|
clientId: string;
|
|
18
18
|
appData?: AppData;
|
|
19
|
+
closeClientIfIdleForMs?: number;
|
|
19
20
|
};
|
|
20
21
|
|
|
21
22
|
export type ObservedClientEvents = {
|
|
@@ -51,6 +52,8 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
51
52
|
value: undefined,
|
|
52
53
|
};
|
|
53
54
|
|
|
55
|
+
public readonly settings: Pick<ObservedClientSettings, 'closeClientIfIdleForMs'>;
|
|
56
|
+
|
|
54
57
|
public appData: AppData;
|
|
55
58
|
public attachments?: Record<string, unknown>;
|
|
56
59
|
|
|
@@ -136,6 +139,8 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
136
139
|
|
|
137
140
|
private _injections: Pick<ClientSample, 'clientEvents' | 'clientIssues' | 'extensionStats' | 'attachments' | 'clientMetaItems'> = {};
|
|
138
141
|
|
|
142
|
+
private closeTimer?: ReturnType<typeof setTimeout>;
|
|
143
|
+
|
|
139
144
|
public constructor(settings: ObservedClientSettings<AppData>, public readonly call: ObservedCall) {
|
|
140
145
|
super();
|
|
141
146
|
this.setMaxListeners(Infinity);
|
|
@@ -144,6 +149,9 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
144
149
|
this.appData = settings.appData ?? {} as AppData;
|
|
145
150
|
|
|
146
151
|
this.detectors = new Detectors();
|
|
152
|
+
this.settings = {
|
|
153
|
+
closeClientIfIdleForMs: settings.closeClientIfIdleForMs,
|
|
154
|
+
};
|
|
147
155
|
}
|
|
148
156
|
|
|
149
157
|
public get numberOfPeerConnections() {
|
|
@@ -179,6 +187,11 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
179
187
|
public accept(sample: ClientSample): void {
|
|
180
188
|
if (this.closed) throw new Error(`Client ${this.clientId} is closed`);
|
|
181
189
|
|
|
190
|
+
if (this.closeTimer) {
|
|
191
|
+
clearTimeout(this.closeTimer);
|
|
192
|
+
this.closeTimer = undefined;
|
|
193
|
+
}
|
|
194
|
+
|
|
182
195
|
const now = Date.now();
|
|
183
196
|
const elapsedInMs = now - this.updated;
|
|
184
197
|
const elapsedInSeconds = elapsedInMs / 1000;
|
|
@@ -347,6 +360,12 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
347
360
|
this.totalScoreSum += this.calculatedScore.value;
|
|
348
361
|
++this.numberOfScoreMeasurements;
|
|
349
362
|
}
|
|
363
|
+
|
|
364
|
+
if (this.settings.closeClientIfIdleForMs !== undefined) {
|
|
365
|
+
this.closeTimer = setTimeout(() => {
|
|
366
|
+
this.close();
|
|
367
|
+
}, this.settings.closeClientIfIdleForMs);
|
|
368
|
+
}
|
|
350
369
|
}
|
|
351
370
|
|
|
352
371
|
private _processClientEvent(event: ClientEvent, postBuffer?: ClientEvent[]) {
|
package/src/Observer.ts
CHANGED
|
@@ -132,6 +132,10 @@ export class Observer<AppData extends Record<string, unknown> = Record<string, u
|
|
|
132
132
|
|
|
133
133
|
if (settings.remoteTrackResolvePolicy === 'mediasoup-sfu') {
|
|
134
134
|
observedCall.remoteTrackResolver = new MediasoupRemoteTrackResolver(observedCall);
|
|
135
|
+
} else if (settings.remoteTrackResolvePolicy === 'p2p') {
|
|
136
|
+
// For future implementation
|
|
137
|
+
} else if (settings.remoteTrackResolvePolicy === 'none' || !settings.remoteTrackResolvePolicy) {
|
|
138
|
+
// do nothing
|
|
135
139
|
}
|
|
136
140
|
|
|
137
141
|
observedCall.once('close', () => {
|