@observertc/observer-js 1.0.1-f31d7a4.0 → 1.1.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.
Files changed (174) hide show
  1. package/README.md +2184 -1
  2. package/dist/index.d.mts +6842 -0
  3. package/dist/index.d.ts +6842 -0
  4. package/dist/index.js +7736 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/index.mjs +7608 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/package.json +44 -18
  9. package/.eslintrc.json +0 -143
  10. package/.prettierignore +0 -5
  11. package/.prettierrc +0 -7
  12. package/jest.config.js +0 -9
  13. package/lib/ObservedCall.d.ts +0 -62
  14. package/lib/ObservedCall.d.ts.map +0 -1
  15. package/lib/ObservedCall.js +0 -127
  16. package/lib/ObservedCertificate.d.ts +0 -19
  17. package/lib/ObservedCertificate.d.ts.map +0 -1
  18. package/lib/ObservedCertificate.js +0 -38
  19. package/lib/ObservedClient.d.ts +0 -104
  20. package/lib/ObservedClient.d.ts.map +0 -1
  21. package/lib/ObservedClient.js +0 -250
  22. package/lib/ObservedCodec.d.ts +0 -22
  23. package/lib/ObservedCodec.d.ts.map +0 -1
  24. package/lib/ObservedCodec.js +0 -45
  25. package/lib/ObservedDataChannel.d.ts +0 -28
  26. package/lib/ObservedDataChannel.d.ts.map +0 -1
  27. package/lib/ObservedDataChannel.js +0 -73
  28. package/lib/ObservedIceCandidate.d.ts +0 -29
  29. package/lib/ObservedIceCandidate.d.ts.map +0 -1
  30. package/lib/ObservedIceCandidate.js +0 -59
  31. package/lib/ObservedIceCandidatePair.d.ts +0 -44
  32. package/lib/ObservedIceCandidatePair.d.ts.map +0 -1
  33. package/lib/ObservedIceCandidatePair.js +0 -111
  34. package/lib/ObservedIceTransport.d.ts +0 -32
  35. package/lib/ObservedIceTransport.d.ts.map +0 -1
  36. package/lib/ObservedIceTransport.js +0 -65
  37. package/lib/ObservedInboundRtp.d.ts +0 -92
  38. package/lib/ObservedInboundRtp.d.ts.map +0 -1
  39. package/lib/ObservedInboundRtp.js +0 -193
  40. package/lib/ObservedInboundTrack.d.ts +0 -29
  41. package/lib/ObservedInboundTrack.d.ts.map +0 -1
  42. package/lib/ObservedInboundTrack.js +0 -57
  43. package/lib/ObservedMediaPlayout.d.ts +0 -22
  44. package/lib/ObservedMediaPlayout.d.ts.map +0 -1
  45. package/lib/ObservedMediaPlayout.js +0 -42
  46. package/lib/ObservedMediaSource.d.ts +0 -28
  47. package/lib/ObservedMediaSource.d.ts.map +0 -1
  48. package/lib/ObservedMediaSource.js +0 -55
  49. package/lib/ObservedOutboundRtp.d.ts +0 -62
  50. package/lib/ObservedOutboundRtp.d.ts.map +0 -1
  51. package/lib/ObservedOutboundRtp.js +0 -144
  52. package/lib/ObservedOutboundTrack.d.ts +0 -29
  53. package/lib/ObservedOutboundTrack.d.ts.map +0 -1
  54. package/lib/ObservedOutboundTrack.js +0 -57
  55. package/lib/ObservedPeerConnection.d.ts +0 -183
  56. package/lib/ObservedPeerConnection.d.ts.map +0 -1
  57. package/lib/ObservedPeerConnection.js +0 -688
  58. package/lib/ObservedPeerConnectionTransport.d.ts +0 -17
  59. package/lib/ObservedPeerConnectionTransport.d.ts.map +0 -1
  60. package/lib/ObservedPeerConnectionTransport.js +0 -34
  61. package/lib/ObservedRemoteInboundRtp.d.ts +0 -30
  62. package/lib/ObservedRemoteInboundRtp.d.ts.map +0 -1
  63. package/lib/ObservedRemoteInboundRtp.js +0 -60
  64. package/lib/ObservedRemoteOutboundRtp.d.ts +0 -30
  65. package/lib/ObservedRemoteOutboundRtp.d.ts.map +0 -1
  66. package/lib/ObservedRemoteOutboundRtp.js +0 -60
  67. package/lib/ObservedTURN.d.ts +0 -30
  68. package/lib/ObservedTURN.d.ts.map +0 -1
  69. package/lib/ObservedTURN.js +0 -54
  70. package/lib/ObservedTurnServer.d.ts +0 -25
  71. package/lib/ObservedTurnServer.d.ts.map +0 -1
  72. package/lib/ObservedTurnServer.js +0 -59
  73. package/lib/Observer.d.ts +0 -50
  74. package/lib/Observer.d.ts.map +0 -1
  75. package/lib/Observer.js +0 -101
  76. package/lib/common/Middleware.d.ts +0 -17
  77. package/lib/common/Middleware.d.ts.map +0 -1
  78. package/lib/common/Middleware.js +0 -60
  79. package/lib/common/SingleExecutor.d.ts +0 -3
  80. package/lib/common/SingleExecutor.d.ts.map +0 -1
  81. package/lib/common/SingleExecutor.js +0 -31
  82. package/lib/common/logger.d.ts +0 -17
  83. package/lib/common/logger.d.ts.map +0 -1
  84. package/lib/common/logger.js +0 -50
  85. package/lib/common/types.d.ts +0 -3
  86. package/lib/common/types.d.ts.map +0 -1
  87. package/lib/common/types.js +0 -3
  88. package/lib/common/utils.d.ts +0 -10
  89. package/lib/common/utils.d.ts.map +0 -1
  90. package/lib/common/utils.js +0 -55
  91. package/lib/detectors/Detector.d.ts +0 -5
  92. package/lib/detectors/Detector.d.ts.map +0 -1
  93. package/lib/detectors/Detector.js +0 -3
  94. package/lib/detectors/Detectors.d.ts +0 -11
  95. package/lib/detectors/Detectors.d.ts.map +0 -1
  96. package/lib/detectors/Detectors.js +0 -34
  97. package/lib/index.d.ts +0 -26
  98. package/lib/index.d.ts.map +0 -1
  99. package/lib/index.js +0 -41
  100. package/lib/monitors/TurnUsageMonitor.d.ts +0 -1
  101. package/lib/monitors/TurnUsageMonitor.d.ts.map +0 -1
  102. package/lib/monitors/TurnUsageMonitor.js +0 -146
  103. package/lib/schema/ClientEventTypes.d.ts +0 -33
  104. package/lib/schema/ClientEventTypes.d.ts.map +0 -1
  105. package/lib/schema/ClientEventTypes.js +0 -38
  106. package/lib/schema/ClientMetaTypes.d.ts +0 -34
  107. package/lib/schema/ClientMetaTypes.d.ts.map +0 -1
  108. package/lib/schema/ClientMetaTypes.js +0 -16
  109. package/lib/schema/ClientSample.d.ts +0 -1333
  110. package/lib/schema/ClientSample.d.ts.map +0 -1
  111. package/lib/schema/ClientSample.js +0 -4
  112. package/lib/scores/CalculatedScore.d.ts +0 -6
  113. package/lib/scores/CalculatedScore.d.ts.map +0 -1
  114. package/lib/scores/CalculatedScore.js +0 -2
  115. package/lib/scores/DefaultCallScoreCalculator.d.ts +0 -7
  116. package/lib/scores/DefaultCallScoreCalculator.d.ts.map +0 -1
  117. package/lib/scores/DefaultCallScoreCalculator.js +0 -21
  118. package/lib/scores/ScoreCalculator.d.ts +0 -4
  119. package/lib/scores/ScoreCalculator.d.ts.map +0 -1
  120. package/lib/scores/ScoreCalculator.js +0 -2
  121. package/lib/utils/CallUpdater.d.ts +0 -5
  122. package/lib/utils/CallUpdater.d.ts.map +0 -1
  123. package/lib/utils/CallUpdater.js +0 -2
  124. package/lib/utils/OnAllClientCallUpdater.d.ts +0 -16
  125. package/lib/utils/OnAllClientCallUpdater.d.ts.map +0 -1
  126. package/lib/utils/OnAllClientCallUpdater.js +0 -58
  127. package/lib/utils/RemoteTrackResolver.d.ts +0 -7
  128. package/lib/utils/RemoteTrackResolver.d.ts.map +0 -1
  129. package/lib/utils/RemoteTrackResolver.js +0 -2
  130. package/lib/utils/onAnyClientCallUpdater.d.ts +0 -14
  131. package/lib/utils/onAnyClientCallUpdater.d.ts.map +0 -1
  132. package/lib/utils/onAnyClientCallUpdater.js +0 -51
  133. package/src/ObservedCall.ts +0 -176
  134. package/src/ObservedCertificate.ts +0 -43
  135. package/src/ObservedClient.ts +0 -324
  136. package/src/ObservedCodec.ts +0 -49
  137. package/src/ObservedDataChannel.ts +0 -82
  138. package/src/ObservedIceCandidate.ts +0 -64
  139. package/src/ObservedIceCandidatePair.ts +0 -118
  140. package/src/ObservedIceTransport.ts +0 -70
  141. package/src/ObservedInboundRtp.ts +0 -205
  142. package/src/ObservedInboundTrack.ts +0 -70
  143. package/src/ObservedMediaPlayout.ts +0 -49
  144. package/src/ObservedMediaSource.ts +0 -60
  145. package/src/ObservedOutboundRtp.ts +0 -156
  146. package/src/ObservedOutboundTrack.ts +0 -69
  147. package/src/ObservedPeerConnection.ts +0 -995
  148. package/src/ObservedPeerConnectionTransport.ts +0 -38
  149. package/src/ObservedRemoteInboundRtp.ts +0 -64
  150. package/src/ObservedRemoteOutboundRtp.ts +0 -65
  151. package/src/ObservedTURN.ts +0 -80
  152. package/src/ObservedTurnServer.ts +0 -72
  153. package/src/Observer.ts +0 -152
  154. package/src/common/Middleware.ts +0 -84
  155. package/src/common/SingleExecutor.ts +0 -36
  156. package/src/common/logger.ts +0 -82
  157. package/src/common/types.ts +0 -4
  158. package/src/common/utils.ts +0 -59
  159. package/src/detectors/Detector.ts +0 -6
  160. package/src/detectors/Detectors.ts +0 -38
  161. package/src/index.ts +0 -27
  162. package/src/monitors/TurnUsageMonitor.ts +0 -187
  163. package/src/schema/ClientEventTypes.ts +0 -36
  164. package/src/schema/ClientMetaTypes.ts +0 -41
  165. package/src/schema/ClientSample.ts +0 -1682
  166. package/src/scores/CalculatedScore.ts +0 -6
  167. package/src/scores/DefaultCallScoreCalculator.ts +0 -23
  168. package/src/scores/ScoreCalculator.ts +0 -3
  169. package/src/utils/CallUpdater.ts +0 -5
  170. package/src/utils/OnAllClientCallUpdater.ts +0 -68
  171. package/src/utils/RemoteTrackResolver.ts +0 -12
  172. package/src/utils/onAnyClientCallUpdater.ts +0 -59
  173. package/tsconfig.json +0 -19
  174. package/tslint.json +0 -6
package/package.json CHANGED
@@ -1,20 +1,40 @@
1
1
  {
2
2
  "name": "@observertc/observer-js",
3
- "version": "1.0.1-f31d7a4.0",
4
- "description": "Server Side NodeJS Library for processing ObserveRTC Samples",
5
- "main": "lib/index.js",
6
- "types": "lib/index.d.ts",
3
+ "version": "1.1.0",
4
+ "description": "Server-side Node.js library for processing ObserveRTC Samples",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": {
11
+ "types": "./dist/index.d.mts",
12
+ "default": "./dist/index.mjs"
13
+ },
14
+ "require": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.js"
17
+ }
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
7
23
  "engines": {
8
- "node": ">=16"
24
+ "node": ">=22"
9
25
  },
10
26
  "scripts": {
11
27
  "prepare": "npm run build",
12
- "prepublish": "pkgfiles",
13
- "prepublishOnly": "npm run lint",
28
+ "prepublishOnly": "npm run lint && npm run typecheck",
14
29
  "format": "prettier --write \"src/**/*.ts\"",
15
- "lint": "./node_modules/.bin/eslint -c .eslintrc.js src/*",
16
- "build": "tsc",
17
- "test": "jest --config jest.config.js"
30
+ "lint": "eslint -c .eslintrc.json \"src/**/*.ts\"",
31
+ "build": "tsup",
32
+ "typecheck": "tsc --noEmit",
33
+ "test": "jest --config jest.config.js",
34
+ "test:coverage": "jest --config jest.config.js --coverage",
35
+ "example": "ts-node --compiler-options '{\"module\":\"commonjs\"}' examples/sfu-observer.ts",
36
+ "example:detectors": "ts-node --compiler-options '{\"module\":\"commonjs\"}' examples/detectors.ts",
37
+ "bench": "ts-node --compiler-options '{\"module\":\"commonjs\"}' bench/detectors.bench.ts"
18
38
  },
19
39
  "keywords": [
20
40
  "webrtc",
@@ -27,27 +47,33 @@
27
47
  "dependencies": {
28
48
  "@bufbuild/protobuf": "1.1.1",
29
49
  "events": "^3.3.0",
30
- "uuid": "^8.3.2"
50
+ "uuid": "^11.1.1"
31
51
  },
32
52
  "devDependencies": {
33
53
  "@tsconfig/node20": "^1.0.2",
34
54
  "@types/jest": "^27.5.2",
35
55
  "@types/node": "^20.9.0",
36
- "@types/uuid": "^8.3.4",
37
56
  "@typescript-eslint/eslint-plugin": "^5.38.0",
38
57
  "@typescript-eslint/parser": "^5.38.0",
39
- "bufferutil": "^4.0.6",
40
58
  "eslint": "^8.24.0",
41
59
  "jest": "^27.5.0",
42
- "pkgfiles": "^2.3.0",
60
+ "mediasoup": "^3.20.3",
43
61
  "prettier": "2.8.7",
44
62
  "ts-jest": "^27.1.5",
45
- "typescript": "^4.8.3",
46
- "ts-node-dev": "^2.0.0",
47
- "utf-8-validate": "^5.0.8"
63
+ "ts-node": "^10.9.2",
64
+ "tsup": "^8.5.1",
65
+ "typescript": "^4.8.3"
48
66
  },
49
67
  "repository": {
50
68
  "type": "git",
51
- "url": "https://github.com/observertc/observer-js"
69
+ "url": "git+https://github.com/ObserveRTC/observer-js.git"
70
+ },
71
+ "peerDependencies": {
72
+ "mediasoup": ">=3.11.0"
73
+ },
74
+ "peerDependenciesMeta": {
75
+ "mediasoup": {
76
+ "optional": true
77
+ }
52
78
  }
53
79
  }
package/.eslintrc.json DELETED
@@ -1,143 +0,0 @@
1
- {
2
- "parser": "@typescript-eslint/parser",
3
- "parserOptions": {
4
- "ecmaVersion": "latest",
5
- "sourceType": "module",
6
- "project": "./tsconfig.json"
7
- },
8
- "extends": ["plugin:@typescript-eslint/recommended"],
9
- "env": { "node": true },
10
- "rules": {
11
- "array-bracket-spacing": [ 2, "always", {
12
- "objectsInArrays": true,
13
- "arraysInArrays": true
14
- }],
15
- "arrow-parens": [ 2, "always" ],
16
- "arrow-spacing": 2,
17
- "block-spacing": [ 2, "always" ],
18
- "brace-style": [ 2, "1tbs", { "allowSingleLine": true } ],
19
- "camelcase": 2,
20
- "comma-spacing": [ 2, { "before": false, "after": true } ],
21
- "comma-style": 2,
22
- "computed-property-spacing": 2,
23
- "constructor-super": 2,
24
- "func-call-spacing": 2,
25
- "generator-star-spacing": 2,
26
- "guard-for-in": 2,
27
- "indent": [ 2, "tab", { "SwitchCase": 1 } ],
28
- "@typescript-eslint/indent": [ 2, "tab", { "SwitchCase": 1 } ],
29
- "require-await": "off",
30
- "@typescript-eslint/require-await": "error",
31
- "key-spacing": [ 2, {
32
- "singleLine": {
33
- "beforeColon": false,
34
- "afterColon": true
35
- },
36
- "multiLine": {
37
- "beforeColon": false,
38
- "afterColon": true
39
- }
40
- }],
41
- "keyword-spacing": 2,
42
- "linebreak-style": [ 2, "unix" ],
43
- "lines-around-comment": [ 2, {
44
- "allowBlockStart": true,
45
- "allowObjectStart": true,
46
- "beforeBlockComment": true,
47
- "beforeLineComment": false
48
- }],
49
- "max-len": 0,
50
- "newline-after-var": 2,
51
- "newline-before-return": 2,
52
- "newline-per-chained-call": 2,
53
- "no-alert": 2,
54
- "no-caller": 2,
55
- "no-case-declarations": 2,
56
- "no-catch-shadow": 2,
57
- "no-class-assign": 2,
58
- "no-confusing-arrow": 2,
59
- "no-console": 2,
60
- "no-const-assign": 2,
61
- "no-debugger": 2,
62
- "no-dupe-args": 2,
63
- "no-dupe-keys": 2,
64
- "no-duplicate-case": 2,
65
- "no-div-regex": 2,
66
- "no-empty": [ 2, { "allowEmptyCatch": true } ],
67
- "no-empty-pattern": 2,
68
- "no-else-return": 0,
69
- "no-eval": 2,
70
- "no-extend-native": 2,
71
- "no-ex-assign": 2,
72
- "no-extra-bind": 2,
73
- "no-extra-boolean-cast": 2,
74
- "no-extra-label": 2,
75
- "no-extra-semi": 2,
76
- "no-fallthrough": 2,
77
- "no-func-assign": 2,
78
- "no-global-assign": 2,
79
- "no-implicit-coercion": 2,
80
- "no-implicit-globals": 2,
81
- "no-inner-declarations": 2,
82
- "no-invalid-regexp": 2,
83
- "no-invalid-this": 2,
84
- "no-irregular-whitespace": 2,
85
- "no-lonely-if": 2,
86
- "no-mixed-operators": 2,
87
- "no-mixed-spaces-and-tabs": 2,
88
- "no-multi-spaces": 2,
89
- "no-multi-str": 2,
90
- "no-multiple-empty-lines": [ 1, { "max": 1, "maxEOF": 0, "maxBOF": 0 } ],
91
- "no-native-reassign": 2,
92
- "no-negated-in-lhs": 2,
93
- "no-new": 2,
94
- "no-new-func": 2,
95
- "no-new-wrappers": 2,
96
- "no-obj-calls": 2,
97
- "no-proto": 2,
98
- "no-regex-spaces": 2,
99
- "no-restricted-imports": 2,
100
- "no-return-assign": 2,
101
- "no-self-assign": 2,
102
- "no-self-compare": 2,
103
- "no-sequences": 2,
104
- "no-shadow": 2,
105
- "no-shadow-restricted-names": 2,
106
- "no-spaced-func": 2,
107
- "no-sparse-arrays": 2,
108
- "no-this-before-super": 2,
109
- "no-throw-literal": 2,
110
- "no-unexpected-multiline": 2,
111
- "no-unmodified-loop-condition": 2,
112
- "no-unreachable": 2,
113
- "no-unused-vars": "off",
114
- "@typescript-eslint/no-unused-vars": "error",
115
- "no-useless-call": 2,
116
- "no-useless-computed-key": 2,
117
- "no-useless-concat": 2,
118
- "no-useless-rename": 2,
119
- "no-var": 2,
120
- "no-whitespace-before-property": 2,
121
- "object-curly-newline": 0,
122
- "object-curly-spacing": [ 2, "always" ],
123
- "object-property-newline": [ 2, { "allowMultiplePropertiesPerLine": true } ],
124
- "prefer-const": 2,
125
- "prefer-rest-params": 2,
126
- "prefer-spread": 2,
127
- "prefer-template": 2,
128
- "quotes": [ 2, "single", { "avoidEscape": true } ],
129
- "semi": [ 2, "always" ],
130
- "semi-spacing": 2,
131
- "space-before-blocks": 2,
132
- "space-before-function-paren": [ 2,
133
- {
134
- "anonymous": "never",
135
- "named": "never",
136
- "asyncArrow": "always"
137
- }],
138
- "space-in-parens": [ 2, "never" ],
139
- "spaced-comment": [ 2, "always" ],
140
- "strict": 2,
141
- "valid-typeof": 2
142
- }
143
- }
package/.prettierignore DELETED
@@ -1,5 +0,0 @@
1
- docs-generator/
2
- node_modules/
3
- package.json
4
- tsconfig.json
5
- tslint.json
package/.prettierrc DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "tabWidth": 2,
3
- "useTabs": true,
4
- "trailingComma": "es5",
5
- "singleQuote": true,
6
- "printWidth": 120
7
- }
package/jest.config.js DELETED
@@ -1,9 +0,0 @@
1
- module.exports = {
2
- roots: ['<rootDir>'],
3
- transform: {
4
- '^.+\\.tsx?$': 'ts-jest',
5
- },
6
- testPathIgnorePatterns: ["/node_modules/", "/tests/helpers/"],
7
- testRegex: '(/tests/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$',
8
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
9
- }
@@ -1,62 +0,0 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
- import { ObservedClient, ObservedClientSettings } from './ObservedClient';
4
- import { Observer } from './Observer';
5
- import { ScoreCalculator } from './scores/ScoreCalculator';
6
- import { CalculatedScore } from './scores/CalculatedScore';
7
- import { Detectors } from './detectors/Detectors';
8
- import { RemoteTrackResolver } from './utils/RemoteTrackResolver';
9
- import { CallUpdater } from './utils/CallUpdater';
10
- export type ObservedCallSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
11
- callId: string;
12
- appData?: AppData;
13
- remoteTrackResolvePolicy?: 'p2p' | 'mediasoup-sfu';
14
- callUpdaterPolicy?: 'onAnyClientUpdate' | 'onAllClientsUpdate';
15
- };
16
- export type ObservedCallEvents = {
17
- update: [];
18
- newclient: [ObservedClient];
19
- empty: [];
20
- 'not-empty': [];
21
- close: [];
22
- };
23
- export declare interface ObservedCall {
24
- on<U extends keyof ObservedCallEvents>(event: U, listener: (...args: ObservedCallEvents[U]) => void): this;
25
- off<U extends keyof ObservedCallEvents>(event: U, listener: (...args: ObservedCallEvents[U]) => void): this;
26
- once<U extends keyof ObservedCallEvents>(event: U, listener: (...args: ObservedCallEvents[U]) => void): this;
27
- emit<U extends keyof ObservedCallEvents>(event: U, ...args: ObservedCallEvents[U]): boolean;
28
- }
29
- export declare class ObservedCall<AppData extends Record<string, unknown> = Record<string, unknown>> extends EventEmitter {
30
- readonly observer: Observer;
31
- readonly detectors: Detectors;
32
- readonly callId: string;
33
- readonly observedClients: Map<string, ObservedClient<Record<string, unknown>>>;
34
- readonly calculatedScore: CalculatedScore;
35
- remoteTrackResolver?: RemoteTrackResolver;
36
- callUpdater?: CallUpdater;
37
- totalAudioBytesSent: number;
38
- totalAudioBytesReceived: number;
39
- totalVideoBytesSent: number;
40
- totalVideoBytesReceived: number;
41
- totalDataChannelBytesSent: number;
42
- totalDataChannelBytesReceived: number;
43
- numberOfPeerConnections: number;
44
- numberOfInboundRtpStreams: number;
45
- numberOfOutboundRtpStreams: number;
46
- numberOfDataChannels: number;
47
- maxNumberOfClients: number;
48
- appData?: AppData;
49
- closed: boolean;
50
- started?: number;
51
- ended?: number;
52
- scoreCalculator: ScoreCalculator;
53
- constructor(settings: ObservedCallSettings<AppData>, observer: Observer);
54
- get numberOfClients(): number;
55
- get score(): number | undefined;
56
- close(): void;
57
- getObservedClient<ClientAppData extends Record<string, unknown> = Record<string, unknown>>(clientId: string): ObservedClient<ClientAppData> | undefined;
58
- createObservedClient<ClientAppData extends Record<string, unknown> = Record<string, unknown>>(settings: ObservedClientSettings<ClientAppData>): ObservedClient<ClientAppData>;
59
- update(): void;
60
- private _onClientUpdate;
61
- }
62
- //# sourceMappingURL=ObservedCall.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObservedCall.d.ts","sourceRoot":"","sources":["../src/ObservedCall.ts"],"names":[],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ObservedCall = void 0;
4
- const events_1 = require("events");
5
- const ObservedClient_1 = require("./ObservedClient");
6
- const DefaultCallScoreCalculator_1 = require("./scores/DefaultCallScoreCalculator");
7
- const Detectors_1 = require("./detectors/Detectors");
8
- const OnAllClientCallUpdater_1 = require("./utils/OnAllClientCallUpdater");
9
- const onAnyClientCallUpdater_1 = require("./utils/onAnyClientCallUpdater");
10
- class ObservedCall extends events_1.EventEmitter {
11
- observer;
12
- detectors;
13
- callId;
14
- observedClients = new Map();
15
- calculatedScore = {
16
- weight: 1,
17
- value: undefined,
18
- };
19
- remoteTrackResolver;
20
- callUpdater;
21
- totalAudioBytesSent = 0;
22
- totalAudioBytesReceived = 0;
23
- totalVideoBytesSent = 0;
24
- totalVideoBytesReceived = 0;
25
- totalDataChannelBytesSent = 0;
26
- totalDataChannelBytesReceived = 0;
27
- numberOfPeerConnections = 0;
28
- numberOfInboundRtpStreams = 0;
29
- numberOfOutboundRtpStreams = 0;
30
- numberOfDataChannels = 0;
31
- maxNumberOfClients = 0;
32
- appData;
33
- closed = false;
34
- started;
35
- ended;
36
- scoreCalculator;
37
- constructor(settings, observer) {
38
- super();
39
- this.observer = observer;
40
- this.setMaxListeners(Infinity);
41
- this.callId = settings.callId;
42
- this.appData = settings.appData;
43
- this.scoreCalculator = new DefaultCallScoreCalculator_1.DefaultCallScoreCalculator(this);
44
- this.detectors = new Detectors_1.Detectors();
45
- switch (settings.callUpdaterPolicy) {
46
- case 'onAllClientsUpdate':
47
- this.callUpdater = new OnAllClientCallUpdater_1.OnAllClientCallUpdater(this);
48
- break;
49
- case 'onAnyClientUpdate':
50
- this.callUpdater = new onAnyClientCallUpdater_1.OnAnyClientCallUpdater(this);
51
- break;
52
- }
53
- switch (settings.remoteTrackResolvePolicy) {
54
- case 'mediasoup-sfu':
55
- break;
56
- }
57
- }
58
- get numberOfClients() {
59
- return this.observedClients.size;
60
- }
61
- get score() {
62
- return this.calculatedScore.value;
63
- }
64
- close() {
65
- if (this.closed)
66
- return;
67
- this.closed = true;
68
- [...this.observedClients.values()].forEach((client) => client.close());
69
- this.emit('close');
70
- }
71
- getObservedClient(clientId) {
72
- if (this.closed || !this.observedClients.has(clientId))
73
- return;
74
- return this.observedClients.get(clientId);
75
- }
76
- createObservedClient(settings) {
77
- if (this.closed)
78
- throw new Error(`Call ${this.callId} is closed`);
79
- if (this.observedClients.has(settings.clientId))
80
- throw new Error(`Client with id ${settings.clientId} already exists`);
81
- const result = new ObservedClient_1.ObservedClient(settings, this);
82
- const wasEmpty = this.observedClients.size === 0;
83
- const onUpdate = () => this._onClientUpdate(result);
84
- result.once('close', () => {
85
- result.off('update', onUpdate);
86
- this.observedClients.delete(settings.clientId);
87
- if (this.observedClients.size === 0) {
88
- this.emit('empty');
89
- }
90
- });
91
- result.on('update', onUpdate);
92
- this.observedClients.set(settings.clientId, result);
93
- this.maxNumberOfClients = Math.max(this.maxNumberOfClients, this.observedClients.size);
94
- this.emit('newclient', result);
95
- if (wasEmpty) {
96
- this.emit('not-empty');
97
- }
98
- return result;
99
- }
100
- update() {
101
- if (this.closed)
102
- return;
103
- this.numberOfInboundRtpStreams = 0;
104
- this.numberOfOutboundRtpStreams = 0;
105
- this.numberOfPeerConnections = 0;
106
- this.numberOfDataChannels = 0;
107
- for (const client of this.observedClients.values()) {
108
- this.numberOfInboundRtpStreams += client.numberOfInboundRtpStreams;
109
- this.numberOfOutboundRtpStreams += client.numberOfOutboundRtpStreams;
110
- this.numberOfPeerConnections += client.numberOfPeerConnections;
111
- this.numberOfDataChannels += client.numberOfDataChannels;
112
- }
113
- this.detectors.update();
114
- this.scoreCalculator.update();
115
- this.emit('update');
116
- }
117
- _onClientUpdate(client) {
118
- this.callUpdater?.onClientUpdate(client);
119
- this.totalAudioBytesReceived = client.deltaReceivedAudioBytes;
120
- this.totalAudioBytesSent = client.deltaSentAudioBytes;
121
- this.totalVideoBytesReceived = client.deltaReceivedVideoBytes;
122
- this.totalVideoBytesSent = client.deltaSentVideoBytes;
123
- this.totalDataChannelBytesReceived = client.deltaDataChannelBytesReceived;
124
- this.totalDataChannelBytesSent = client.deltaDataChannelBytesSent;
125
- }
126
- }
127
- exports.ObservedCall = ObservedCall;
@@ -1,19 +0,0 @@
1
- import { ObservedPeerConnection } from './ObservedPeerConnection';
2
- import { CertificateStats } from './schema/ClientSample';
3
- export declare class ObservedCertificate implements CertificateStats {
4
- timestamp: number;
5
- id: string;
6
- private readonly _peerConnection;
7
- appData?: Record<string, unknown>;
8
- private _visited;
9
- fingerprint?: string;
10
- fingerprintAlgorithm?: string;
11
- base64Certificate?: string;
12
- issuerCertificateId?: string;
13
- attachments?: Record<string, unknown>;
14
- constructor(timestamp: number, id: string, _peerConnection: ObservedPeerConnection);
15
- get visited(): boolean;
16
- getPeerConnection(): ObservedPeerConnection;
17
- update(stats: CertificateStats): void;
18
- }
19
- //# sourceMappingURL=ObservedCertificate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObservedCertificate.d.ts","sourceRoot":"","sources":["../src/ObservedCertificate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,qBAAa,mBAAoB,YAAW,gBAAgB;IAYnD,SAAS,EAAE,MAAM;IACjB,EAAE,EAAE,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAb1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,OAAO,CAAC,QAAQ,CAAS;IAEzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAG9B,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACA,eAAe,EAAE,sBAAsB;IAGzD,IAAW,OAAO,YAMjB;IAEM,iBAAiB;IAIjB,MAAM,CAAC,KAAK,EAAE,gBAAgB;CAUrC"}
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ObservedCertificate = void 0;
4
- class ObservedCertificate {
5
- timestamp;
6
- id;
7
- _peerConnection;
8
- appData;
9
- _visited = false;
10
- fingerprint;
11
- fingerprintAlgorithm;
12
- base64Certificate;
13
- issuerCertificateId;
14
- attachments;
15
- constructor(timestamp, id, _peerConnection) {
16
- this.timestamp = timestamp;
17
- this.id = id;
18
- this._peerConnection = _peerConnection;
19
- }
20
- get visited() {
21
- const visited = this._visited;
22
- this._visited = false;
23
- return visited;
24
- }
25
- getPeerConnection() {
26
- return this._peerConnection;
27
- }
28
- update(stats) {
29
- this._visited = true;
30
- this.timestamp = stats.timestamp;
31
- this.fingerprint = stats.fingerprint;
32
- this.fingerprintAlgorithm = stats.fingerprintAlgorithm;
33
- this.base64Certificate = stats.base64Certificate;
34
- this.issuerCertificateId = stats.issuerCertificateId;
35
- this.attachments = stats.attachments;
36
- }
37
- }
38
- exports.ObservedCertificate = ObservedCertificate;
@@ -1,104 +0,0 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
- import { ObservedPeerConnection } from './ObservedPeerConnection';
4
- import { ClientMetaData, ClientSample, ClientIssue, ExtensionStat } from './schema/ClientSample';
5
- import * as MetaData from './schema/ClientMetaTypes';
6
- import { ObservedCall } from './ObservedCall';
7
- import { CalculatedScore } from './scores/CalculatedScore';
8
- import { Detectors } from './detectors/Detectors';
9
- export type ObservedClientSettings<AppData extends Record<string, unknown> = Record<string, unknown>> = {
10
- clientId: string;
11
- appData?: AppData;
12
- };
13
- export type ObservedClientEvents = {
14
- update: [
15
- {
16
- sample: ClientSample;
17
- elapsedTimeInMs: number;
18
- }
19
- ];
20
- close: [];
21
- joined: [];
22
- issue: [ClientIssue];
23
- metaData: [ClientMetaData];
24
- rejoined: [timestamp: number];
25
- left: [];
26
- usingturn: [boolean];
27
- usermediaerror: [string];
28
- newpeerconnection: [ObservedPeerConnection];
29
- };
30
- export declare interface ObservedClient {
31
- on<U extends keyof ObservedClientEvents>(event: U, listener: (...args: ObservedClientEvents[U]) => void): this;
32
- off<U extends keyof ObservedClientEvents>(event: U, listener: (...args: ObservedClientEvents[U]) => void): this;
33
- once<U extends keyof ObservedClientEvents>(event: U, listener: (...args: ObservedClientEvents[U]) => void): this;
34
- emit<U extends keyof ObservedClientEvents>(event: U, ...args: ObservedClientEvents[U]): boolean;
35
- }
36
- export declare class ObservedClient<AppData extends Record<string, unknown> = Record<string, unknown>> extends EventEmitter {
37
- readonly call: ObservedCall;
38
- readonly detectors: Detectors;
39
- readonly clientId: string;
40
- readonly observedPeerConnections: Map<string, ObservedPeerConnection>;
41
- readonly calculatedScore: CalculatedScore;
42
- appData?: AppData;
43
- attachments?: Record<string, unknown>;
44
- updated: number;
45
- acceptedSamples: number;
46
- closed: boolean;
47
- joinedAt?: number;
48
- leftAt?: number;
49
- operationSystem?: MetaData.OperationSystem;
50
- engine?: MetaData.Engine;
51
- platform?: MetaData.Platform;
52
- browser?: MetaData.Browser;
53
- mediaConstraints: string[];
54
- usingTURN: boolean;
55
- availableOutgoingBitrate: number;
56
- availableIncomingBitrate: number;
57
- totalInboundPacketsLost: number;
58
- totalInboundPacketsReceived: number;
59
- totalOutboundPacketsSent: number;
60
- totalDataChannelBytesSent: number;
61
- totalDataChannelBytesReceived: number;
62
- totalDataChannelMessagesSent: number;
63
- totalDataChannelMessagesReceived: number;
64
- totalSentBytes: number;
65
- totalReceivedBytes: number;
66
- totalReceivedAudioBytes: number;
67
- totalReceivedVideoBytes: number;
68
- totalSentAudioBytes: number;
69
- totalSentVideoBytes: number;
70
- deltaReceivedAudioBytes: number;
71
- deltaReceivedVideoBytes: number;
72
- deltaSentAudioBytes: number;
73
- deltaSentVideoBytes: number;
74
- deltaDataChannelBytesSent: number;
75
- deltaDataChannelBytesReceived: number;
76
- deltaDataChannelMessagesSent: number;
77
- deltaDataChannelMessagesReceived: number;
78
- deltaInboundPacketsLost: number;
79
- deltaInboundPacketsReceived: number;
80
- deltaOutboundPacketsSent: number;
81
- avgRttInMs?: number;
82
- sendingAudioBitrate: number;
83
- sendingVideoBitrate: number;
84
- receivingAudioBitrate: number;
85
- receivingVideoBitrate: number;
86
- numberOfInboundRtpStreams: number;
87
- numberOfInbundTracks: number;
88
- numberOfOutboundRtpStreams: number;
89
- numberOfOutboundTracks: number;
90
- numberOfDataChannels: number;
91
- readonly mediaDevices: MetaData.MediaDeviceInfo[];
92
- issues: ClientIssue[];
93
- constructor(settings: ObservedClientSettings<AppData>, call: ObservedCall);
94
- get numberOfPeerConnections(): number;
95
- get score(): number | undefined;
96
- close(): void;
97
- accept(sample: ClientSample): void;
98
- private _processClientEvent;
99
- processMetadata(metadata: ClientMetaData): void;
100
- addIssue(issue: ClientIssue): void;
101
- addExtensionStats(stats: ExtensionStat): void;
102
- private _updatePeerConnection;
103
- }
104
- //# sourceMappingURL=ObservedClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}