@observertc/observer-js 1.0.0-beta.1 → 1.0.0-beta.3

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.
Files changed (40) hide show
  1. package/lib/ObservedCall.d.ts +4 -19
  2. package/lib/ObservedCall.d.ts.map +1 -1
  3. package/lib/ObservedCall.js +20 -43
  4. package/lib/ObservedCallEventMonitor.d.ts +3 -0
  5. package/lib/ObservedCallEventMonitor.d.ts.map +1 -1
  6. package/lib/ObservedCallEventMonitor.js +7 -0
  7. package/lib/ObservedClient.d.ts +6 -18
  8. package/lib/ObservedClient.d.ts.map +1 -1
  9. package/lib/ObservedClient.js +119 -41
  10. package/lib/ObservedInboundTrack.d.ts +2 -0
  11. package/lib/ObservedInboundTrack.d.ts.map +1 -1
  12. package/lib/ObservedInboundTrack.js +32 -0
  13. package/lib/ObservedOutboundTrack.d.ts +2 -0
  14. package/lib/ObservedOutboundTrack.d.ts.map +1 -1
  15. package/lib/ObservedOutboundTrack.js +5 -0
  16. package/lib/ObservedPeerConnection.d.ts +3 -3
  17. package/lib/ObservedPeerConnection.d.ts.map +1 -1
  18. package/lib/ObservedPeerConnection.js +15 -0
  19. package/lib/Observer.d.ts +2 -5
  20. package/lib/Observer.d.ts.map +1 -1
  21. package/lib/Observer.js +10 -10
  22. package/lib/ObserverEventMonitor.d.ts +3 -0
  23. package/lib/ObserverEventMonitor.d.ts.map +1 -1
  24. package/lib/ObserverEventMonitor.js +7 -0
  25. package/lib/Reports.d.ts +85 -0
  26. package/lib/Reports.d.ts.map +1 -0
  27. package/lib/Reports.js +2 -0
  28. package/lib/index.d.ts +1 -0
  29. package/lib/index.d.ts.map +1 -1
  30. package/package.json +1 -1
  31. package/src/ObservedCall.ts +25 -55
  32. package/src/ObservedCallEventMonitor.ts +10 -0
  33. package/src/ObservedClient.ts +141 -46
  34. package/src/ObservedInboundTrack.ts +32 -2
  35. package/src/ObservedOutboundTrack.ts +8 -0
  36. package/src/ObservedPeerConnection.ts +19 -3
  37. package/src/Observer.ts +11 -10
  38. package/src/ObserverEventMonitor.ts +10 -0
  39. package/src/Reports.ts +87 -0
  40. package/src/index.ts +4 -0
@@ -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: [];
@@ -40,18 +41,6 @@ export declare class ObservedCall<AppData extends Record<string, unknown> = Reco
40
41
  remoteTrackResolver?: RemoteTrackResolver;
41
42
  totalAddedClients: number;
42
43
  totalRemovedClients: number;
43
- totalClientsReceivedAudioBytes: number;
44
- totalClientsReceivedVideoBytes: number;
45
- totalClientsReceivedDataChannelBytes: number;
46
- totalClientsReceivedBytes: number;
47
- totalClientsSentAudioBytes: number;
48
- totalClientsSentDataChannelBytes: number;
49
- totalClientsSentVideoBytes: number;
50
- totalClientsSentBytes: number;
51
- totalRttLt50Measurements: number;
52
- totalRttLt150Measurements: number;
53
- totalRttLt300Measurements: number;
54
- totalRttGtOrEq300Measurements: number;
55
44
  numberOfIssues: number;
56
45
  numberOfPeerConnections: number;
57
46
  numberOfInboundRtpStreams: number;
@@ -59,17 +48,13 @@ export declare class ObservedCall<AppData extends Record<string, unknown> = Reco
59
48
  numberOfDataChannels: number;
60
49
  maxNumberOfClients: number;
61
50
  deltaNumberOfIssues: number;
62
- deltaRttLt50Measurements: number;
63
- deltaRttLt150Measurements: number;
64
- deltaRttLt300Measurements: number;
65
- deltaRttGtOrEq300Measurements: number;
66
51
  appData: AppData;
67
52
  closed: boolean;
68
53
  startedAt?: number;
69
54
  endedAt?: number;
70
55
  closedAt?: number;
71
- private _callStartedEvent;
72
- private _callEndedEvent;
56
+ readonly settings: Pick<ObservedCallSettings, 'closeCallIfEmptyForMs'>;
57
+ private closeTimer?;
73
58
  constructor(settings: ObservedCallSettings<AppData>, observer: Observer);
74
59
  get numberOfClients(): number;
75
60
  get score(): number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedCall.d.ts","sourceRoot":"","sources":["../src/ObservedCall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObservedCall.d.ts","sourceRoot":"","sources":["../src/ObservedCall.ts"],"names":[],"mappings":"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"}
@@ -24,18 +24,6 @@ class ObservedCall extends events_1.EventEmitter {
24
24
  remoteTrackResolver;
25
25
  totalAddedClients = 0;
26
26
  totalRemovedClients = 0;
27
- totalClientsReceivedAudioBytes = 0;
28
- totalClientsReceivedVideoBytes = 0;
29
- totalClientsReceivedDataChannelBytes = 0;
30
- totalClientsReceivedBytes = 0;
31
- totalClientsSentAudioBytes = 0;
32
- totalClientsSentDataChannelBytes = 0;
33
- totalClientsSentVideoBytes = 0;
34
- totalClientsSentBytes = 0;
35
- totalRttLt50Measurements = 0;
36
- totalRttLt150Measurements = 0;
37
- totalRttLt300Measurements = 0;
38
- totalRttGtOrEq300Measurements = 0;
39
27
  numberOfIssues = 0;
40
28
  numberOfPeerConnections = 0;
41
29
  numberOfInboundRtpStreams = 0;
@@ -43,17 +31,17 @@ class ObservedCall extends events_1.EventEmitter {
43
31
  numberOfDataChannels = 0;
44
32
  maxNumberOfClients = 0;
45
33
  deltaNumberOfIssues = 0;
46
- deltaRttLt50Measurements = 0;
47
- deltaRttLt150Measurements = 0;
48
- deltaRttLt300Measurements = 0;
49
- deltaRttGtOrEq300Measurements = 0;
34
+ // public deltaRttLt50Measurements = 0;
35
+ // public deltaRttLt150Measurements = 0;
36
+ // public deltaRttLt300Measurements = 0;
37
+ // public deltaRttGtOrEq300Measurements = 0;
50
38
  appData;
51
39
  closed = false;
52
40
  startedAt;
53
41
  endedAt;
54
42
  closedAt;
55
- _callStartedEvent;
56
- _callEndedEvent;
43
+ settings;
44
+ closeTimer;
57
45
  constructor(settings, observer) {
58
46
  super();
59
47
  this.observer = observer;
@@ -85,11 +73,8 @@ class ObservedCall extends events_1.EventEmitter {
85
73
  case 'mediasoup-sfu':
86
74
  break;
87
75
  }
88
- this._callStartedEvent = {
89
- emitted: false,
90
- };
91
- this._callEndedEvent = {
92
- emitted: false,
76
+ this.settings = {
77
+ closeCallIfEmptyForMs: settings.closeCallIfEmptyForMs,
93
78
  };
94
79
  }
95
80
  get numberOfClients() {
@@ -130,6 +115,9 @@ class ObservedCall extends events_1.EventEmitter {
130
115
  throw new Error(`Call ${this.callId} is closed`);
131
116
  if (this.observedClients.has(settings.clientId))
132
117
  throw new Error(`Client with id ${settings.clientId} already exists`);
118
+ if (!settings.closeClientIfIdleForMs) {
119
+ settings.closeClientIfIdleForMs = this.observer.config.closeClientIfIdleForMs;
120
+ }
133
121
  const result = new ObservedClient_1.ObservedClient(settings, this);
134
122
  const wasEmpty = this.observedClients.size === 0;
135
123
  const onUpdate = () => this._onClientUpdate(result);
@@ -142,6 +130,11 @@ class ObservedCall extends events_1.EventEmitter {
142
130
  this.observedClients.delete(settings.clientId);
143
131
  if (this.observedClients.size === 0) {
144
132
  this.emit('empty');
133
+ if (this.settings.closeCallIfEmptyForMs) {
134
+ this.closeTimer = setTimeout(() => {
135
+ this.close();
136
+ }, this.settings.closeCallIfEmptyForMs);
137
+ }
145
138
  }
146
139
  ++this.totalRemovedClients;
147
140
  });
@@ -151,6 +144,10 @@ class ObservedCall extends events_1.EventEmitter {
151
144
  ++this.totalAddedClients;
152
145
  this.observedClients.set(settings.clientId, result);
153
146
  this.maxNumberOfClients = Math.max(this.maxNumberOfClients, this.observedClients.size);
147
+ if (this.closeTimer) {
148
+ clearTimeout(this.closeTimer);
149
+ this.closeTimer = undefined;
150
+ }
154
151
  this.emit('newclient', result);
155
152
  if (wasEmpty) {
156
153
  this.emit('not-empty');
@@ -177,28 +174,8 @@ class ObservedCall extends events_1.EventEmitter {
177
174
  this.scoreCalculator.update();
178
175
  this.emit('update');
179
176
  this.deltaNumberOfIssues = 0;
180
- this.deltaRttLt50Measurements = 0;
181
- this.deltaRttLt150Measurements = 0;
182
- this.deltaRttLt300Measurements = 0;
183
- this.deltaRttGtOrEq300Measurements = 0;
184
177
  }
185
178
  _onClientUpdate(client) {
186
- this.totalClientsReceivedAudioBytes += client.deltaReceivedAudioBytes;
187
- this.totalClientsReceivedVideoBytes += client.deltaReceivedVideoBytes;
188
- this.totalClientsReceivedDataChannelBytes += client.deltaDataChannelBytesReceived;
189
- this.totalClientsReceivedBytes += client.deltaTransportReceivedBytes;
190
- this.totalClientsSentAudioBytes += client.deltaSentAudioBytes;
191
- this.totalClientsSentVideoBytes += client.deltaSentVideoBytes;
192
- this.totalClientsSentDataChannelBytes += client.deltaDataChannelBytesSent;
193
- this.totalClientsSentBytes += client.deltaTransportSentBytes;
194
- this.deltaRttLt50Measurements += client.deltaRttLt50Measurements;
195
- this.deltaRttLt150Measurements += client.deltaRttLt150Measurements;
196
- this.deltaRttLt300Measurements += client.deltaRttLt300Measurements;
197
- this.deltaRttGtOrEq300Measurements += client.deltaRttGtOrEq300Measurements;
198
- this.totalRttLt50Measurements += client.deltaRttLt50Measurements;
199
- this.totalRttLt150Measurements += client.deltaRttLt150Measurements;
200
- this.totalRttLt300Measurements += client.deltaRttLt300Measurements;
201
- this.totalRttGtOrEq300Measurements += client.deltaRttGtOrEq300Measurements;
202
179
  this.deltaNumberOfIssues += client.deltaNumberOfIssues;
203
180
  this.numberOfIssues += client.deltaNumberOfIssues;
204
181
  if (client.usingTURN) {
@@ -13,6 +13,7 @@ import { ObservedMediaSource } from './ObservedMediaSource';
13
13
  import { ObservedOutboundRtp } from './ObservedOutboundRtp';
14
14
  import { ObservedOutboundTrack } from './ObservedOutboundTrack';
15
15
  import { ObservedPeerConnection } from './ObservedPeerConnection';
16
+ import { TrackReport } from './Reports';
16
17
  import { ClientEvent, ClientIssue, ClientMetaData, ClientSample, ExtensionStat } from './schema/ClientSample';
17
18
  export declare class ObservedCallEventMonitor<Context> {
18
19
  readonly call: ObservedCall;
@@ -64,6 +65,7 @@ export declare class ObservedCallEventMonitor<Context> {
64
65
  onRemovedMediaPlayout?: (mediaPlayout: ObservedMediaPlayout, ctx: Context) => void;
65
66
  onMediaSourceAdded?: (mediaSource: ObservedMediaSource, ctx: Context) => void;
66
67
  onMediaSourceRemoved?: (mediaSource: ObservedMediaSource, ctx: Context) => void;
68
+ onTrackReport?: (trackReport: TrackReport, ctx: Context) => void;
67
69
  private _onCallAdded;
68
70
  private _onClientAdded;
69
71
  private _onClientRejoined;
@@ -100,5 +102,6 @@ export declare class ObservedCallEventMonitor<Context> {
100
102
  private _onClientLeft;
101
103
  private _onUserMediaError;
102
104
  private _onUsingTurn;
105
+ private _onTrackReport;
103
106
  }
104
107
  //# sourceMappingURL=ObservedCallEventMonitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedCallEventMonitor.d.ts","sourceRoot":"","sources":["../src/ObservedCallEventMonitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObservedCallEventMonitor.d.ts","sourceRoot":"","sources":["../src/ObservedCallEventMonitor.ts"],"names":[],"mappings":"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"}
@@ -92,6 +92,7 @@ class ObservedCallEventMonitor {
92
92
  onRemovedMediaPlayout;
93
93
  onMediaSourceAdded;
94
94
  onMediaSourceRemoved;
95
+ onTrackReport;
95
96
  _onCallAdded(call) {
96
97
  const onCallEmpty = () => this.onCallEmpty?.(call, this.context);
97
98
  const onCallNotEmpty = () => this.onCallNotEmpty?.(call, this.context);
@@ -119,6 +120,7 @@ class ObservedCallEventMonitor {
119
120
  const onUserMediaError = (error) => this._onUserMediaError(observedClient, error);
120
121
  const onClientUpdated = (...args) => this.onClientUpdated?.(observedClient, args[0], this.context);
121
122
  const onClientEvent = (event) => this.onClientEvent?.(observedClient, event, this.context);
123
+ const onTrackReport = (trackReport) => this._onTrackReport(observedClient, trackReport);
122
124
  observedClient.once('close', () => {
123
125
  observedClient.off('newpeerconnection', this._onPeerConnconnectionAdded);
124
126
  observedClient.off('issue', onClientIssue);
@@ -130,6 +132,7 @@ class ObservedCallEventMonitor {
130
132
  observedClient.off('usingturn', onUsingTurn);
131
133
  observedClient.off('update', onClientUpdated);
132
134
  observedClient.off('clientEvent', onClientEvent);
135
+ observedClient.off('trackreport', onTrackReport);
133
136
  this.onClientClosed?.(observedClient, this.context);
134
137
  });
135
138
  observedClient.on('newpeerconnection', this._onPeerConnconnectionAdded);
@@ -143,6 +146,7 @@ class ObservedCallEventMonitor {
143
146
  observedClient.on('extensionStats', onClientExtensionStats);
144
147
  observedClient.on('update', onClientUpdated);
145
148
  observedClient.on('clientEvent', onClientEvent);
149
+ observedClient.on('trackreport', onTrackReport);
146
150
  this.onClientAdded?.(observedClient, this.context);
147
151
  }
148
152
  _onClientRejoined(observedClient) {
@@ -310,5 +314,8 @@ class ObservedCallEventMonitor {
310
314
  _onUsingTurn(observedClient, usingTurn) {
311
315
  this.onClientUsingTurn?.(observedClient, usingTurn, this.context);
312
316
  }
317
+ _onTrackReport(client, trackReport) {
318
+ this.onTrackReport?.(trackReport, this.context);
319
+ }
313
320
  }
314
321
  exports.ObservedCallEventMonitor = ObservedCallEventMonitor;
@@ -6,9 +6,11 @@ import * as MetaData from './schema/ClientMetaTypes';
6
6
  import { ObservedCall } from './ObservedCall';
7
7
  import { CalculatedScore } from './scores/CalculatedScore';
8
8
  import { Detectors } from './detectors/Detectors';
9
+ import { ClientReport, TrackReport } from './Reports';
9
10
  export type ObservedClientSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
10
11
  clientId: string;
11
12
  appData?: AppData;
13
+ closeClientIfIdleForMs?: number;
12
14
  };
13
15
  export type ObservedClientEvents = {
14
16
  update: [sample: ClientSample, elapsedTimeInMs: number];
@@ -23,6 +25,7 @@ export type ObservedClientEvents = {
23
25
  extensionStats: [ExtensionStat];
24
26
  clientEvent: [ClientEvent];
25
27
  newpeerconnection: [ObservedPeerConnection];
28
+ trackreport: [TrackReport];
26
29
  };
27
30
  export declare interface ObservedClient {
28
31
  on<U extends keyof ObservedClientEvents>(event: U, listener: (...args: ObservedClientEvents[U]) => void): this;
@@ -36,6 +39,7 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
36
39
  readonly clientId: string;
37
40
  readonly observedPeerConnections: Map<string, ObservedPeerConnection>;
38
41
  readonly calculatedScore: CalculatedScore;
42
+ readonly settings: Pick<ObservedClientSettings, 'closeClientIfIdleForMs'>;
39
43
  appData: AppData;
40
44
  attachments?: Record<string, unknown>;
41
45
  updated: number;
@@ -54,19 +58,6 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
54
58
  usingTCP: boolean;
55
59
  availableOutgoingBitrate: number;
56
60
  availableIncomingBitrate: number;
57
- totalInboundPacketsLost: number;
58
- totalInboundPacketsReceived: number;
59
- totalOutboundPacketsSent: number;
60
- totalDataChannelBytesSent: number;
61
- totalDataChannelBytesReceived: number;
62
- totalDataChannelMessagesSent: number;
63
- totalDataChannelMessagesReceived: number;
64
- totalReceivedAudioBytes: number;
65
- totalReceivedVideoBytes: number;
66
- totalSentAudioBytes: number;
67
- totalSentVideoBytes: number;
68
- totalSentBytes: number;
69
- totalReceivedBytes: number;
70
61
  deltaReceivedAudioBytes: number;
71
62
  deltaReceivedVideoBytes: number;
72
63
  deltaSentAudioBytes: number;
@@ -96,17 +87,14 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
96
87
  numberOfOutboundRtpStreams: number;
97
88
  numberOfOutboundTracks: number;
98
89
  numberOfDataChannels: number;
99
- totalRttLt50Measurements: number;
100
- totalRttLt150Measurements: number;
101
- totalRttLt300Measurements: number;
102
- totalRttGtOrEq300Measurements: number;
103
90
  deltaNumberOfIssues: number;
104
91
  totalScoreSum: number;
105
92
  numberOfScoreMeasurements: number;
106
- totalNumberOfIssues: number;
93
+ readonly report: ClientReport;
107
94
  readonly mediaDevices: MetaData.MediaDeviceInfo[];
108
95
  issues: ClientIssue[];
109
96
  private _injections;
97
+ private closeTimer?;
110
98
  constructor(settings: ObservedClientSettings<AppData>, call: ObservedCall);
111
99
  get numberOfPeerConnections(): number;
112
100
  get score(): number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}
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;AAClD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAMtD,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;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IACxD,KAAK,EAAE,EAAE,CAAC;IACV,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC;IACrB,QAAQ,EAAE,CAAC,cAAc,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,EAAE,CAAC;IACT,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;IACzB,cAAc,EAAE,CAAC,aAAa,CAAC,CAAC;IAChC,WAAW,EAAE,CAAC,WAAW,CAAC,CAAC;IAE3B,iBAAiB,EAAE,CAAC,sBAAsB,CAAC,CAAC;IAE5C,WAAW,EAAE,CAAC,WAAW,CAAC,CAAC;CAC3B,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,cAAc;IACtC,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/G,GAAG,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAChH,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACjH,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CAChG;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,YAAY;aAqGpC,IAAI,EAAE,YAAY;IApGhG,SAAgB,SAAS,EAAE,SAAS,CAAC;IAErC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,uBAAuB,sCAA6C;IACpF,SAAgB,eAAe,EAAE,eAAe,CAG9C;IAEF,SAAgB,QAAQ,EAAE,IAAI,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC;IAE1E,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEtC,OAAO,SAAc;IACrB,eAAe,SAAK;IACpB,MAAM,UAAS;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,eAAe,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAC3C,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC7B,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAM;IAEhC,SAAS,UAAS;IAClB,QAAQ,UAAS;IACjB,wBAAwB,SAAK;IAC7B,wBAAwB,SAAK;IAoB7B,uBAAuB,SAAK;IAC5B,uBAAuB,SAAK;IAC5B,mBAAmB,SAAK;IACxB,mBAAmB,SAAK;IACxB,yBAAyB,SAAK;IAC9B,6BAA6B,SAAK;IAClC,4BAA4B,SAAK;IACjC,gCAAgC,SAAK;IACrC,uBAAuB,SAAK;IAC5B,2BAA2B,SAAK;IAChC,wBAAwB,SAAK;IAC7B,uBAAuB,SAAK;IAC5B,2BAA2B,SAAK;IAChC,wBAAwB,SAAK;IAC7B,yBAAyB,SAAK;IAC9B,yBAAyB,SAAK;IAC9B,6BAA6B,SAAK;IAElC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,mBAAmB,SAAK;IACxB,mBAAmB,SAAK;IACxB,qBAAqB,SAAK;IAC1B,qBAAqB,SAAK;IAE1B,yBAAyB,SAAK;IAC9B,oBAAoB,SAAK;IACzB,0BAA0B,SAAK;IAC/B,sBAAsB,SAAK;IAC3B,oBAAoB,SAAK;IAEzB,mBAAmB,SAAK;IAExB,aAAa,SAAK;IAClB,yBAAyB,SAAK;IAGrC,SAAgB,MAAM,EAAE,YAAY,CAAC;IAErC,SAAgB,YAAY,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAM;IACvD,MAAM,EAAE,WAAW,EAAE,CAAM;IAElC,OAAO,CAAC,WAAW,CAAkH;IAErI,OAAO,CAAC,UAAU,CAAC,CAAgC;gBAEhC,QAAQ,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAkB,IAAI,EAAE,YAAY;IAmDhG,IAAW,uBAAuB,WAEjC;IAED,IAAW,KAAK,uBAEf;IAEM,KAAK;IAsBL,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAmMzC,OAAO,CAAC,mBAAmB;IAoPpB,cAAc,CAAC,QAAQ,EAAE,cAAc;IAQvC,WAAW,CAAC,KAAK,EAAE,WAAW;IAQ9B,WAAW,CAAC,KAAK,EAAE,WAAW;IAQ9B,mBAAmB,CAAC,IAAI,EAAE,aAAa;IAQvC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAS5C,WAAW,CAAC,QAAQ,EAAE,cAAc;IAyBpC,QAAQ,CAAC,KAAK,EAAE,WAAW;IAS3B,iBAAiB,CAAC,KAAK,EAAE,aAAa;IAK7C,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,gBAAgB;CAwFxB"}
@@ -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();
@@ -37,19 +38,23 @@ class ObservedClient extends events_1.EventEmitter {
37
38
  usingTCP = false;
38
39
  availableOutgoingBitrate = 0;
39
40
  availableIncomingBitrate = 0;
40
- totalInboundPacketsLost = 0;
41
- totalInboundPacketsReceived = 0;
42
- totalOutboundPacketsSent = 0;
43
- totalDataChannelBytesSent = 0;
44
- totalDataChannelBytesReceived = 0;
45
- totalDataChannelMessagesSent = 0;
46
- totalDataChannelMessagesReceived = 0;
47
- totalReceivedAudioBytes = 0;
48
- totalReceivedVideoBytes = 0;
49
- totalSentAudioBytes = 0;
50
- totalSentVideoBytes = 0;
51
- totalSentBytes = 0;
52
- totalReceivedBytes = 0;
41
+ // public totalInboundPacketsLost = 0;
42
+ // public totalInboundPacketsReceived = 0;
43
+ // public totalOutboundPacketsSent = 0;
44
+ // public totalDataChannelBytesSent = 0;
45
+ // public totalDataChannelBytesReceived = 0;
46
+ // public totalDataChannelMessagesSent = 0;
47
+ // public totalDataChannelMessagesReceived = 0;
48
+ // public totalReceivedAudioBytes = 0;
49
+ // public totalReceivedVideoBytes = 0;
50
+ // public totalSentAudioBytes = 0;
51
+ // public totalSentVideoBytes = 0;
52
+ // public totalSentBytes = 0;
53
+ // public totalReceivedBytes = 0;
54
+ // public totalRttLt50Measurements = 0;
55
+ // public totalRttLt150Measurements = 0;
56
+ // public totalRttLt300Measurements = 0;
57
+ // public totalRttGtOrEq300Measurements = 0;
53
58
  deltaReceivedAudioBytes = 0;
54
59
  deltaReceivedVideoBytes = 0;
55
60
  deltaSentAudioBytes = 0;
@@ -79,17 +84,15 @@ class ObservedClient extends events_1.EventEmitter {
79
84
  numberOfOutboundRtpStreams = 0;
80
85
  numberOfOutboundTracks = 0;
81
86
  numberOfDataChannels = 0;
82
- totalRttLt50Measurements = 0;
83
- totalRttLt150Measurements = 0;
84
- totalRttLt300Measurements = 0;
85
- totalRttGtOrEq300Measurements = 0;
86
87
  deltaNumberOfIssues = 0;
87
88
  totalScoreSum = 0;
88
89
  numberOfScoreMeasurements = 0;
89
- totalNumberOfIssues = 0;
90
+ // public totalNumberOfIssues = 0;
91
+ report;
90
92
  mediaDevices = [];
91
93
  issues = [];
92
94
  _injections = {};
95
+ closeTimer;
93
96
  constructor(settings, call) {
94
97
  super();
95
98
  this.call = call;
@@ -97,6 +100,46 @@ class ObservedClient extends events_1.EventEmitter {
97
100
  this.clientId = settings.clientId;
98
101
  this.appData = settings.appData ?? {};
99
102
  this.detectors = new Detectors_1.Detectors();
103
+ this.settings = {
104
+ closeClientIfIdleForMs: settings.closeClientIfIdleForMs,
105
+ };
106
+ this.report = {
107
+ callId: this.call.callId,
108
+ clientId: this.clientId,
109
+ rttDistribution: {
110
+ gtOrEq300ms: 0,
111
+ lt50ms: 0,
112
+ lt150ms: 0,
113
+ lt300ms: 0,
114
+ count: 0,
115
+ sum: 0,
116
+ },
117
+ scoreDistribution: {
118
+ '0': 0,
119
+ '1': 0,
120
+ '2': 0,
121
+ '3': 0,
122
+ '4': 0,
123
+ '5': 0,
124
+ count: 0,
125
+ sum: 0,
126
+ },
127
+ issues: {},
128
+ totalAudioBytesReceived: 0,
129
+ totalVideoBytesReceived: 0,
130
+ totalAudioBytesSent: 0,
131
+ totalVideoBytesSent: 0,
132
+ totalDataChannelBytesReceived: 0,
133
+ totalDataChannelBytesSent: 0,
134
+ totalDataChannelMessagesReceived: 0,
135
+ totalDataChannelMessagesSent: 0,
136
+ totalInboundRtpBytesReceived: 0,
137
+ totalInboundRtpPacketsLost: 0,
138
+ totalInboundRtpPacketsReceived: 0,
139
+ totalOutboundRtpBytesSent: 0,
140
+ totalOutboundRtpPacketsSent: 0,
141
+ totalNumberOfIssues: 0,
142
+ };
100
143
  }
101
144
  get numberOfPeerConnections() {
102
145
  return this.observedPeerConnections.size;
@@ -125,6 +168,10 @@ class ObservedClient extends events_1.EventEmitter {
125
168
  accept(sample) {
126
169
  if (this.closed)
127
170
  throw new Error(`Client ${this.clientId} is closed`);
171
+ if (this.closeTimer) {
172
+ clearTimeout(this.closeTimer);
173
+ this.closeTimer = undefined;
174
+ }
128
175
  const now = Date.now();
129
176
  const elapsedInMs = now - this.updated;
130
177
  const elapsedInSeconds = elapsedInMs / 1000;
@@ -215,16 +262,22 @@ class ObservedClient extends events_1.EventEmitter {
215
262
  }
216
263
  if (observedPeerConnection.currentRttInMs < 50) {
217
264
  this.deltaRttLt50Measurements += 1;
265
+ this.report.rttDistribution.lt50ms += 1;
218
266
  }
219
267
  else if (observedPeerConnection.currentRttInMs < 150) {
220
268
  this.deltaRttLt150Measurements += 1;
269
+ this.report.rttDistribution.lt150ms += 1;
221
270
  }
222
271
  else if (observedPeerConnection.currentRttInMs < 300) {
223
272
  this.deltaRttLt300Measurements += 1;
273
+ this.report.rttDistribution.lt300ms += 1;
224
274
  }
225
275
  else if (300 <= observedPeerConnection.currentRttInMs) {
226
276
  this.deltaRttGtOrEq300Measurements += 1;
277
+ this.report.rttDistribution.gtOrEq300ms += 1;
227
278
  }
279
+ this.report.rttDistribution.count += 1;
280
+ this.report.rttDistribution.sum += observedPeerConnection.currentRttInMs;
228
281
  sumOfRtts += observedPeerConnection.currentRttInMs;
229
282
  ++numberOfRttMeasurements;
230
283
  }
@@ -234,30 +287,32 @@ class ObservedClient extends events_1.EventEmitter {
234
287
  }
235
288
  // emit new attachments?
236
289
  this.attachments = sample.attachments;
237
- this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
238
- this.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
239
- this.totalDataChannelMessagesReceived += this.deltaDataChannelMessagesReceived;
240
- this.totalDataChannelMessagesSent += this.deltaDataChannelMessagesSent;
241
- this.totalInboundPacketsLost += this.deltaInboundPacketsLost;
242
- this.totalInboundPacketsReceived += this.deltaInboundPacketsReceived;
243
- this.totalOutboundPacketsSent += this.deltaOutboundPacketsSent;
244
- this.totalReceivedAudioBytes += this.deltaReceivedAudioBytes;
245
- this.totalReceivedVideoBytes += this.deltaReceivedVideoBytes;
246
- this.totalSentAudioBytes += this.deltaSentAudioBytes;
247
- this.totalSentVideoBytes += this.deltaSentVideoBytes;
248
- this.totalReceivedBytes += this.deltaTransportReceivedBytes;
249
- this.totalSentBytes += this.deltaTransportSentBytes;
250
- this.totalRttLt50Measurements += this.deltaRttLt50Measurements;
251
- this.totalRttLt150Measurements += this.deltaRttLt150Measurements;
252
- this.totalRttLt300Measurements += this.deltaRttLt300Measurements;
253
- this.totalRttGtOrEq300Measurements += this.deltaRttGtOrEq300Measurements;
254
- this.totalNumberOfIssues += this.deltaNumberOfIssues;
290
+ this.report.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
291
+ this.report.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
292
+ this.report.totalDataChannelMessagesReceived += this.deltaDataChannelMessagesReceived;
293
+ this.report.totalDataChannelMessagesSent += this.deltaDataChannelMessagesSent;
294
+ this.report.totalInboundRtpPacketsLost += this.deltaInboundPacketsLost;
295
+ this.report.totalInboundRtpPacketsReceived += this.deltaInboundPacketsReceived;
296
+ this.report.totalOutboundRtpPacketsSent += this.deltaOutboundPacketsSent;
297
+ this.report.totalAudioBytesReceived += this.deltaReceivedAudioBytes;
298
+ this.report.totalVideoBytesReceived += this.deltaReceivedVideoBytes;
299
+ this.report.totalAudioBytesSent += this.deltaSentAudioBytes;
300
+ this.report.totalVideoBytesSent += this.deltaSentVideoBytes;
301
+ this.report.totalInboundRtpBytesReceived += this.deltaTransportReceivedBytes;
302
+ this.report.totalOutboundRtpBytesSent += this.deltaTransportSentBytes;
303
+ this.report.totalNumberOfIssues += this.deltaNumberOfIssues;
255
304
  this.receivingAudioBitrate = (this.deltaReceivedAudioBytes * 8) / (elapsedInSeconds);
256
- this.receivingVideoBitrate = (this.totalReceivedVideoBytes * 8) / (elapsedInSeconds);
305
+ this.receivingVideoBitrate = (this.deltaReceivedVideoBytes * 8) / (elapsedInSeconds);
257
306
  this.sendingAudioBitrate = (this.deltaSentAudioBytes * 8) / (elapsedInSeconds);
258
307
  this.sendingVideoBitrate = (this.deltaSentVideoBytes * 8) / (elapsedInSeconds);
259
308
  this.currentAvgRttInMs = 0 < numberOfRttMeasurements ? sumOfRtts / numberOfRttMeasurements : undefined;
260
309
  this.calculatedScore.value = sample.score;
310
+ if (sample.score !== undefined) {
311
+ const bucket = Math.floor(sample.score).toString();
312
+ this.report.scoreDistribution[bucket] = (this.report.scoreDistribution[bucket] ?? 0) + 1;
313
+ this.report.scoreDistribution.count += 1;
314
+ this.report.scoreDistribution.sum += sample.score;
315
+ }
261
316
  this.detectors.update();
262
317
  this.lastSampleTimestamp = sample.timestamp;
263
318
  // emit update
@@ -268,6 +323,11 @@ class ObservedClient extends events_1.EventEmitter {
268
323
  this.totalScoreSum += this.calculatedScore.value;
269
324
  ++this.numberOfScoreMeasurements;
270
325
  }
326
+ if (this.settings.closeClientIfIdleForMs !== undefined) {
327
+ this.closeTimer = setTimeout(() => {
328
+ this.close();
329
+ }, this.settings.closeClientIfIdleForMs);
330
+ }
271
331
  }
272
332
  _processClientEvent(event, postBuffer) {
273
333
  // eslint-disable-next-line no-console
@@ -574,6 +634,7 @@ class ObservedClient extends events_1.EventEmitter {
574
634
  addIssue(issue) {
575
635
  if (this.closed)
576
636
  return;
637
+ this.report.issues[issue.type] = (this.report.issues[issue.type] ?? 0) + 1;
577
638
  this.emit('issue', issue);
578
639
  this.call.observer.emit('client-issue', this, issue);
579
640
  }
@@ -587,12 +648,29 @@ class ObservedClient extends events_1.EventEmitter {
587
648
  if (!sample.peerConnectionId) {
588
649
  return (logger.warn(`ObservedClient received an invalid PeerConnectionSample (missing peerConnectionId field). ClientId: ${this.clientId}, CallId: ${this.call.callId}`, sample), void 0);
589
650
  }
590
- observedPeerConnection = new ObservedPeerConnection_1.ObservedPeerConnection(sample.peerConnectionId, this);
591
- observedPeerConnection.once('close', () => {
651
+ const newObservedPeerConnection = new ObservedPeerConnection_1.ObservedPeerConnection(sample.peerConnectionId, this);
652
+ const onInboundTrackRemoved = (track) => {
653
+ this.emit('trackreport', {
654
+ direction: 'inbound',
655
+ ...track.report,
656
+ });
657
+ };
658
+ const onOutboundTrackRemoved = (track) => {
659
+ this.emit('trackreport', {
660
+ direction: 'outbound',
661
+ ...track.report,
662
+ });
663
+ };
664
+ newObservedPeerConnection.once('close', () => {
665
+ newObservedPeerConnection?.off('removed-inbound-track', onInboundTrackRemoved);
666
+ newObservedPeerConnection?.off('removed-outbound-track', onOutboundTrackRemoved);
592
667
  this.observedPeerConnections.delete(sample.peerConnectionId);
593
668
  });
594
- this.observedPeerConnections.set(sample.peerConnectionId, observedPeerConnection);
595
- this.emit('newpeerconnection', observedPeerConnection);
669
+ newObservedPeerConnection.on('removed-inbound-track', onInboundTrackRemoved);
670
+ newObservedPeerConnection.on('removed-outbound-track', onOutboundTrackRemoved);
671
+ this.observedPeerConnections.set(sample.peerConnectionId, newObservedPeerConnection);
672
+ this.emit('newpeerconnection', newObservedPeerConnection);
673
+ observedPeerConnection = newObservedPeerConnection;
596
674
  }
597
675
  observedPeerConnection.accept(sample);
598
676
  return observedPeerConnection;
@@ -5,6 +5,7 @@ import { Detectors } from './detectors/Detectors';
5
5
  import { ObservedPeerConnection } from './ObservedPeerConnection';
6
6
  import { ObservedInboundRtp } from './ObservedInboundRtp';
7
7
  import { ObservedMediaPlayout } from './ObservedMediaPlayout';
8
+ import { InboundTrackReport } from './Reports';
8
9
  export declare class ObservedInboundTrack implements InboundTrackSample {
9
10
  timestamp: number;
10
11
  readonly id: string;
@@ -15,6 +16,7 @@ export declare class ObservedInboundTrack implements InboundTrackSample {
15
16
  readonly detectors: Detectors;
16
17
  readonly calculatedScore: CalculatedScore;
17
18
  appData?: Record<string, unknown>;
19
+ report: InboundTrackReport;
18
20
  private _visited;
19
21
  addedAt?: number | undefined;
20
22
  removedAt?: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ObservedInboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundTrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,oBAAqB,YAAW,kBAAkB;IAkBtD,SAAS,EAAE,MAAM;aACR,EAAE,EAAE,MAAM;aACV,IAAI,EAAE,SAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAtBhC,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,SAAgB,eAAe,EAAE,eAAe,CAG9C;IACK,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,OAAO,CAAC,QAAQ,CAAS;IAElB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAG1C,SAAS,EAAE,MAAM,EACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,SAAS,EACd,eAAe,EAAE,sBAAsB,EACvC,WAAW,CAAC,gCAAoB,EAChC,aAAa,CAAC,kCAAsB;IAKtD,IAAW,KAAK,uBAEf;IAED,IAAW,OAAO,YAMjB;IAEM,iBAAiB;IAIjB,aAAa;IAIb,eAAe;IAIf,sBAAsB;IAItB,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;CAU9C"}
1
+ {"version":3,"file":"ObservedInboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundTrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,qBAAa,oBAAqB,YAAW,kBAAkB;IAmBtD,SAAS,EAAE,MAAM;aACR,EAAE,EAAE,MAAM;aACV,IAAI,EAAE,SAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAvBhC,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,SAAgB,eAAe,EAAE,eAAe,CAG9C;IACK,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAS;IAElB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAG1C,SAAS,EAAE,MAAM,EACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,SAAS,EACd,eAAe,EAAE,sBAAsB,EACvC,WAAW,CAAC,gCAAoB,EAChC,aAAa,CAAC,kCAAsB;IAoBtD,IAAW,KAAK,uBAEf;IAED,IAAW,OAAO,YAMjB;IAEM,iBAAiB;IAIjB,aAAa;IAIb,eAAe;IAIf,sBAAsB;IAItB,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;CAuB9C"}