@observertc/observer-js 0.30.6-beta → 0.40.0-beta

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 (55) hide show
  1. package/lib/ObservedCall.d.ts +6 -13
  2. package/lib/ObservedCall.d.ts.map +1 -1
  3. package/lib/ObservedCall.js +24 -104
  4. package/lib/ObservedClient.d.ts +16 -27
  5. package/lib/ObservedClient.d.ts.map +1 -1
  6. package/lib/ObservedClient.js +360 -523
  7. package/lib/ObservedInboundTrack.d.ts +3 -8
  8. package/lib/ObservedInboundTrack.d.ts.map +1 -1
  9. package/lib/ObservedInboundTrack.js +74 -154
  10. package/lib/ObservedOutboundTrack.d.ts +9 -8
  11. package/lib/ObservedOutboundTrack.d.ts.map +1 -1
  12. package/lib/ObservedOutboundTrack.js +76 -130
  13. package/lib/ObservedPeerConnection.d.ts +17 -15
  14. package/lib/ObservedPeerConnection.d.ts.map +1 -1
  15. package/lib/ObservedPeerConnection.js +64 -173
  16. package/lib/ObservedSfu.d.ts +5 -7
  17. package/lib/ObservedSfu.d.ts.map +1 -1
  18. package/lib/ObservedSfu.js +10 -74
  19. package/lib/Observer.d.ts +5 -6
  20. package/lib/Observer.d.ts.map +1 -1
  21. package/lib/Observer.js +28 -31
  22. package/lib/common/types.d.ts +0 -55
  23. package/lib/common/types.d.ts.map +1 -1
  24. package/lib/index.d.ts +5 -7
  25. package/lib/index.d.ts.map +1 -1
  26. package/package.json +1 -1
  27. package/src/ObservedCall.ts +27 -87
  28. package/src/ObservedClient.ts +425 -582
  29. package/src/ObservedInboundTrack.ts +14 -65
  30. package/src/ObservedOutboundTrack.ts +32 -53
  31. package/src/ObservedPeerConnection.ts +55 -117
  32. package/src/ObservedSfu.ts +11 -46
  33. package/src/Observer.ts +11 -16
  34. package/src/common/types.ts +0 -69
  35. package/src/index.ts +5 -7
  36. package/lib/models/Models.d.ts +0 -642
  37. package/lib/models/Models.d.ts.map +0 -1
  38. package/lib/models/Models.js +0 -481
  39. package/lib/models/samples_pb.d.ts +0 -2452
  40. package/lib/models/samples_pb.d.ts.map +0 -1
  41. package/lib/models/samples_pb.js +0 -1495
  42. package/lib/storages/ObserverStorage.d.ts +0 -87
  43. package/lib/storages/ObserverStorage.d.ts.map +0 -1
  44. package/lib/storages/ObserverStorage.js +0 -2
  45. package/lib/storages/SimpleStorage.d.ts +0 -19
  46. package/lib/storages/SimpleStorage.d.ts.map +0 -1
  47. package/lib/storages/SimpleStorage.js +0 -106
  48. package/lib/storages/StorageProvider.d.ts +0 -16
  49. package/lib/storages/StorageProvider.d.ts.map +0 -1
  50. package/lib/storages/StorageProvider.js +0 -29
  51. package/src/models/Models.ts +0 -1103
  52. package/src/models/samples_pb.ts +0 -4061
  53. package/src/storages/ObserverStorage.ts +0 -99
  54. package/src/storages/SimpleStorage.ts +0 -120
  55. package/src/storages/StorageProvider.ts +0 -42
@@ -1,14 +1,11 @@
1
1
  import { EventEmitter } from 'events';
2
- import * as Models from './models/Models';
3
2
  import { Observer } from './Observer';
4
- import { createSingleExecutor } from './common/SingleExecutor';
5
3
  import { SfuSample } from '@observertc/sample-schemas-js';
6
4
 
7
- export type ObservedSfuConfig<AppData extends Record<string, unknown> = Record<string, unknown>> = {
5
+ export type ObservedSfuModel= {
8
6
  serviceId: string;
9
7
  sfuId: string;
10
8
  joined?: number;
11
- appData: AppData;
12
9
  };
13
10
 
14
11
  export type ObservedSfuEvents = {
@@ -24,36 +21,13 @@ export declare interface ObservedSfu {
24
21
  }
25
22
 
26
23
  export class ObservedSfu<AppData extends Record<string, unknown> = Record<string, unknown>> extends EventEmitter {
27
- public static async create<T extends Record<string, unknown> = Record<string, unknown>>(
28
- config: ObservedSfuConfig<T>,
29
- observer: Observer,
30
- // reportsCollector: ReportsCollector,
31
- ) {
32
- const model = new Models.Sfu({
33
- serviceId: config.serviceId,
34
- sfuId: config.sfuId,
35
- sfuTransportIds: [],
36
- joined: BigInt(config.joined ?? Date.now()),
37
- });
38
- const result = new ObservedSfu(
39
- model,
40
- observer,
41
- config.appData,
42
- );
43
-
44
- const alreadyInserted = await observer.storage.sfuStorage.insert(config.sfuId, model);
45
-
46
- if (alreadyInserted) throw new Error(`Sfu with id ${config.sfuId} already exists`);
47
-
48
- return result;
49
- }
24
+ public readonly created = Date.now();
50
25
 
51
26
  private _updated = Date.now();
52
- private readonly _execute = createSingleExecutor();
53
27
  private _closed = false;
54
28
 
55
- private constructor(
56
- private readonly _model: Models.Sfu,
29
+ public constructor(
30
+ private readonly _model: ObservedSfuModel,
57
31
  public readonly observer: Observer,
58
32
  public readonly appData: AppData,
59
33
  ) {
@@ -75,6 +49,10 @@ export class ObservedSfu<AppData extends Record<string, unknown> = Record<string
75
49
  return Number(this._model.joined!);
76
50
  }
77
51
 
52
+ public get updated() {
53
+ return this._updated;
54
+ }
55
+
78
56
  public get closed() {
79
57
  return this._closed;
80
58
  }
@@ -85,24 +63,11 @@ export class ObservedSfu<AppData extends Record<string, unknown> = Record<string
85
63
  this.emit('close');
86
64
  }
87
65
 
88
- public async update(sample: SfuSample) {
66
+ public update(sample: SfuSample) {
89
67
  if (this._closed) throw new Error(`Sfu ${this.sfuId} is closed`);
90
68
  if (sample.sfuId !== this.sfuId) throw new Error(`Sfu ${this.sfuId} is not the same as sample.sfuId`);
91
69
 
92
- return this._execute(async () => {
93
- if (this._closed) throw new Error(`Sfu ${this.sfuId} is closed`);
94
- await this._save();
95
- this.emit('update');
96
- });
97
- }
98
-
99
- private async _save() {
100
- if (this._closed) throw new Error(`Sfu ${this.sfuId} is closed`);
101
-
102
- return this._execute(async () => {
103
- if (this._closed) throw new Error(`Sfu ${this.sfuId} is closed`);
104
- await this.observer.storage.sfuStorage.set(this.sfuId, this._model);
105
- });
70
+ this._updated = Date.now();
71
+ this.emit('update');
106
72
  }
107
-
108
73
  }
package/src/Observer.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import { createLogger } from './common/logger';
2
- import { StorageProvider, createSimpleStorageProvider } from './storages/StorageProvider';
3
- import { ObservedCall, ObservedCallConfig } from './ObservedCall';
2
+ import { ObservedCall, ObservedCallModel } from './ObservedCall';
4
3
  import { ReportsCollector } from './ReportsCollector';
5
4
  import { EventEmitter } from 'events';
6
5
  import { PartialBy } from './common/utils';
7
- import { createCallStartedEventReport } from './common/callEventReports';
6
+ import { createCallEndedEventReport, createCallStartedEventReport } from './common/callEventReports';
8
7
 
9
8
  const logger = createLogger('Observer');
10
9
 
@@ -36,8 +35,6 @@ export type ObserverConfig = {
36
35
  maxCollectingTimeInMs?: number | undefined;
37
36
 
38
37
  maxEntryIdleTimeInMs?: number | undefined;
39
-
40
- storages?: StorageProvider;
41
38
  };
42
39
 
43
40
  export declare interface Observer {
@@ -63,9 +60,7 @@ export class Observer extends EventEmitter {
63
60
  providedConfig
64
61
  );
65
62
 
66
- const storages = providedConfig.storages ?? createSimpleStorageProvider();
67
-
68
- return new Observer(config, storages);
63
+ return new Observer(config);
69
64
  }
70
65
 
71
66
  public readonly reports = new ReportsCollector();
@@ -74,7 +69,6 @@ export class Observer extends EventEmitter {
74
69
  private _closed = false;
75
70
  public constructor(
76
71
  public readonly config: ObserverConfig,
77
- public readonly storage: StorageProvider,
78
72
  ) {
79
73
  super();
80
74
  logger.debug('Observer is created with config', this.config);
@@ -91,25 +85,26 @@ export class Observer extends EventEmitter {
91
85
  this.reports.on('newreport', onNewReport);
92
86
  }
93
87
 
94
- public async createObservedCall<T extends Record<string, unknown> = Record<string, unknown>>(
95
- config: PartialBy<ObservedCallConfig<T>, 'serviceId' | 'started'>
96
- ): Promise<ObservedCall<T>> {
88
+ public createObservedCall<T extends Record<string, unknown> = Record<string, unknown>>(
89
+ config: PartialBy<ObservedCallModel, 'serviceId' | 'started'> & { appData: T }
90
+ ): ObservedCall<T> {
97
91
  if (this._closed) {
98
92
  throw new Error('Attempted to create a call source on a closed observer');
99
93
  }
100
94
 
101
- const call = await ObservedCall.create({
95
+ const { appData, ...model } = config;
96
+ const call = new ObservedCall({
97
+ ...model,
102
98
  serviceId: this.config.defaultServiceId,
103
99
  started: Date.now(),
104
- ...config,
105
- }, this);
100
+ }, this, appData);
106
101
 
107
102
  if (this._closed) throw new Error('Cannot create an observed call on a closed observer');
108
103
  if (this._observedCalls.has(call.callId)) throw new Error(`Observed Call with id ${call.callId} already exists`);
109
104
 
110
105
  call.once('close', () => {
111
106
  this._observedCalls.delete(call.callId);
112
- this.reports.addCallEventReport(createCallStartedEventReport(
107
+ this.reports.addCallEventReport(createCallEndedEventReport(
113
108
  call.serviceId,
114
109
  call.roomId,
115
110
  call.callId,
@@ -18,78 +18,9 @@ import {
18
18
  SfuSctpStreamReport,
19
19
  SFUTransportReport,
20
20
  } from '@observertc/report-schemas-js';
21
- import * as Models from '../models/Models';
22
- import { StorageProvider } from '../storages/StorageProvider';
23
- import { Message } from '@bufbuild/protobuf';
24
21
 
25
22
  export type MediaKind = 'audio' | 'video';
26
23
 
27
- export interface EvaluatorContext {
28
- readonly startedCallIds: string[];
29
- readonly endedCalls: (Omit<Models.Call, keyof Message> & {
30
- ended: number;
31
- })[];
32
-
33
- readonly joinedClientIds: string[];
34
- readonly detachedClients: (Omit<Models.Client, keyof Message> & {
35
- detached: number;
36
- })[];
37
-
38
- readonly openedPeerConnectionIds: string[];
39
- readonly closedPeerConnections: (Omit<Models.PeerConnection, keyof Message> & {
40
- closed: number;
41
- })[];
42
-
43
- readonly addedInboundAudioTrackIds: string[];
44
- readonly removedInboundAudioTracks: (Omit<Models.InboundTrack, keyof Message> & {
45
- removed: number;
46
- })[];
47
-
48
- readonly addedInboundVideoTrackIds: string[];
49
- readonly removedInboundVideoTracks: (Omit<Models.InboundTrack, keyof Message> & {
50
- removed: number;
51
- })[];
52
-
53
- readonly addedOutboundAudioTrackIds: string[];
54
- readonly removedOutboundAudioTracks: (Omit<Models.OutboundTrack, keyof Message> & {
55
- removed: number;
56
- })[];
57
-
58
- readonly addedOutboundVideoTrackIds: string[];
59
- readonly removedOutboundVideoTracks: (Omit<Models.OutboundTrack, keyof Message> & {
60
- removed: number;
61
- })[];
62
-
63
- readonly joinedSfuIds: string[];
64
- readonly detachedSfus: (Omit<Models.Sfu, keyof Message> & {
65
- detached: number;
66
- })[];
67
-
68
- readonly openedSfuTransportIds: string[];
69
- readonly closedSfuTransports: (Omit<Models.SfuTransport, keyof Message> & {
70
- closed: number;
71
- })[];
72
-
73
- readonly addedSfuInbounRtpPadIds: string[];
74
- readonly removedSfuInbounRtpPadIds: (Omit<Models.SfuInboundRtpPad, keyof Message> & {
75
- removed: number;
76
- })[];
77
-
78
- readonly addedSfuOutbounRtpPadIds: string[];
79
- readonly removedSfuOutbounRtpPadIds: (Omit<Models.SfuOutboundRtpPad, keyof Message> & {
80
- removed: number;
81
- })[];
82
-
83
- readonly openedSfuSctpChannelIds: string[];
84
- readonly closedSfuSctpChannels: (Omit<Models.SfuSctpChannel, keyof Message> & {
85
- closed: number;
86
- })[];
87
-
88
- readonly storages: StorageProvider;
89
- readonly reports: ObserverSinkContext;
90
-
91
- }
92
-
93
24
  // export type EvaluatorMiddleware = Middleware<EvaluatorContext>;
94
25
 
95
26
  export interface ObserverSinkContext {
package/src/index.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  export type { ObserverConfig, ObserverEvents } from './Observer';
2
2
 
3
3
  export { Observer } from './Observer';
4
- export type { ObserverStorage } from './storages/ObserverStorage';
5
- export type { StorageProvider } from './storages/StorageProvider';
6
4
 
7
5
  export * as SampleSchema from '@observertc/sample-schemas-js';
8
6
  export * as ReportSchema from '@observertc/report-schemas-js';
@@ -54,12 +52,12 @@ export type {
54
52
  SFUTransportReport,
55
53
  } from '@observertc/report-schemas-js';
56
54
 
57
- export type { ObservedClient, ObservedClientConfig } from './ObservedClient';
58
- export type { ObservedPeerConnection, ObservedPeerConnectionConfig, ObservedPeerConnectionEvents } from './ObservedPeerConnection';
59
- export type { ObservedInboundTrack, ObservedInboundTrackConfig, ObservedInboundTrackEvents } from './ObservedInboundTrack';
60
- export type { ObservedOutboundTrack, ObservedOutboundTrackConfig, ObservedOutboundTrackEvents } from './ObservedOutboundTrack';
55
+ export type { ObservedClient, ObservedClientModel } from './ObservedClient';
56
+ export type { ObservedPeerConnection, ObservedPeerConnectionModel, ObservedPeerConnectionEvents } from './ObservedPeerConnection';
57
+ export type { ObservedInboundTrack, ObservedInboundTrackModel, ObservedInboundTrackEvents } from './ObservedInboundTrack';
58
+ export type { ObservedOutboundTrack, ObservedOutboundTrackModel, ObservedOutboundTrackEvents } from './ObservedOutboundTrack';
61
59
 
62
- export type { EvaluatorContext, ObserverSinkContext } from './common/types';
60
+ export type { ObserverSinkContext } from './common/types';
63
61
 
64
62
  import { Observer, ObserverConfig } from './Observer';
65
63
  export function createObserver(config?: Partial<ObserverConfig>) {