mediasfu-shared 1.2.1 → 1.2.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 (42) hide show
  1. package/CHANGELOG.md +17 -4
  2. package/README.md +145 -131
  3. package/dist/consumers/connectIps.d.ts.map +1 -1
  4. package/dist/consumers/index.cjs +1 -1
  5. package/dist/consumers/index.js +1 -1
  6. package/dist/{getParticipantMedia-DC_Nca8S.cjs → getParticipantMedia-AwwtMCTz.cjs} +4 -4
  7. package/dist/getParticipantMedia-AwwtMCTz.cjs.map +1 -0
  8. package/dist/{getParticipantMedia-Bu_aZlxe.js → getParticipantMedia-CyaOk2oD.js} +4 -4
  9. package/dist/getParticipantMedia-CyaOk2oD.js.map +1 -0
  10. package/dist/index.cjs +36 -7
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.js +37 -8
  13. package/dist/index.js.map +1 -1
  14. package/dist/index.native.cjs +3 -3
  15. package/dist/index.native.js +3 -3
  16. package/dist/{joinLocalRoom-7ibqv7zZ.js → joinLocalRoom-Bu3gz27d.js} +2 -2
  17. package/dist/{joinLocalRoom-7ibqv7zZ.js.map → joinLocalRoom-Bu3gz27d.js.map} +1 -1
  18. package/dist/{joinLocalRoom-BJBDvTYh.cjs → joinLocalRoom-Cii5D5IG.cjs} +2 -2
  19. package/dist/{joinLocalRoom-BJBDvTYh.cjs.map → joinLocalRoom-Cii5D5IG.cjs.map} +1 -1
  20. package/dist/methods/recording/startRecording.d.ts.map +1 -1
  21. package/dist/methods/utils/headless/virtualBackground.d.ts +13 -1
  22. package/dist/methods/utils/headless/virtualBackground.d.ts.map +1 -1
  23. package/dist/methods/utils/virtualBackgroundCompositor.d.ts +4 -0
  24. package/dist/methods/utils/virtualBackgroundCompositor.d.ts.map +1 -1
  25. package/dist/sockets/SocketManager.d.ts +0 -27
  26. package/dist/sockets/SocketManager.d.ts.map +1 -1
  27. package/dist/types/index.cjs +2 -2
  28. package/dist/types/index.js +2 -2
  29. package/dist/{updateParticipantAudioDecibels-C_MygF6q.js → updateParticipantAudioDecibels-CnEXJBmc.js} +85 -13
  30. package/dist/updateParticipantAudioDecibels-CnEXJBmc.js.map +1 -0
  31. package/dist/{updateParticipantAudioDecibels-bZ6R8WHj.cjs → updateParticipantAudioDecibels-QZyahisU.cjs} +85 -13
  32. package/dist/updateParticipantAudioDecibels-QZyahisU.cjs.map +1 -0
  33. package/package.json +1 -1
  34. package/src/consumers/connectIps.ts +46 -7
  35. package/src/methods/recording/startRecording.ts +7 -1
  36. package/src/methods/utils/headless/virtualBackground.ts +34 -2
  37. package/src/methods/utils/virtualBackgroundCompositor.ts +18 -1
  38. package/src/sockets/SocketManager.ts +54 -7
  39. package/dist/getParticipantMedia-Bu_aZlxe.js.map +0 -1
  40. package/dist/getParticipantMedia-DC_Nca8S.cjs.map +0 -1
  41. package/dist/updateParticipantAudioDecibels-C_MygF6q.js.map +0 -1
  42. package/dist/updateParticipantAudioDecibels-bZ6R8WHj.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"startRecording.d.ts","sourceRoot":"","sources":["../../../src/methods/recording/startRecording.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEvE,MAAM,WAAW,wBACf,SAAQ,0BAA0B,EAChC,2BAA2B;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6BAA6B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACzD,iBAAiB,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,OAAO,CAAA;IACtB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACjD,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACzC,eAAe,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,iBAAiB,EAAE,OAAO,CAAA;IAC1B,eAAe,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,mBAAmB,EAAE,iCAAiC,CAAA;IACtD,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;IACnD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,GAAG,CAAA;CAChB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB,MAAM,MAAM,iCAAiC,GAAG,CAAC,OAAO,EAAE;IACxD,UAAU,EAAE,GAAG,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,wBAAwB,CAAA;CACrC;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,qBAAqB,KAC3B,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AACH,eAAO,MAAM,cAAc,EAAE,kBAmI5B,CAAA"}
1
+ {"version":3,"file":"startRecording.d.ts","sourceRoot":"","sources":["../../../src/methods/recording/startRecording.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEvE,MAAM,WAAW,wBACf,SAAQ,0BAA0B,EAChC,2BAA2B;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6BAA6B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACzD,iBAAiB,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,OAAO,CAAA;IACtB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACjD,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACzC,eAAe,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,iBAAiB,EAAE,OAAO,CAAA;IAC1B,eAAe,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,mBAAmB,EAAE,iCAAiC,CAAA;IACtD,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;IACnD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,GAAG,CAAA;CAChB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB,MAAM,MAAM,iCAAiC,GAAG,CAAC,OAAO,EAAE;IACxD,UAAU,EAAE,GAAG,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,wBAAwB,CAAA;CACrC;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,qBAAqB,KAC3B,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AACH,eAAO,MAAM,cAAc,EAAE,kBAyI5B,CAAA"}
@@ -23,6 +23,11 @@ export interface ApplyVirtualBackgroundOptions extends HeadlessOptions {
23
23
  * A trailing slash is added if missing.
24
24
  */
25
25
  assetPath?: string;
26
+ /**
27
+ * Blur the area behind the segmented person by this many pixels. When this
28
+ * is greater than zero it takes precedence over `image`. Defaults to 0.
29
+ */
30
+ blurPixels?: number;
26
31
  }
27
32
  export type ApplyVirtualBackgroundType = (options: ApplyVirtualBackgroundOptions) => Promise<HeadlessActionResult & {
28
33
  stream: MediaStream | null;
@@ -55,9 +60,16 @@ export type ApplyVirtualBackgroundType = (options: ApplyVirtualBackgroundOptions
55
60
  * await clearVirtualBackground({ parameters });
56
61
  * ```
57
62
  */
58
- export declare function applyVirtualBackground({ parameters, image, frameRate, modelSelection, publish, assetPath, }: ApplyVirtualBackgroundOptions): Promise<HeadlessActionResult & {
63
+ export declare function applyVirtualBackground({ parameters, image, frameRate, modelSelection, publish, assetPath, blurPixels, }: ApplyVirtualBackgroundOptions): Promise<HeadlessActionResult & {
59
64
  stream: MediaStream | null;
60
65
  }>;
66
+ export interface ApplyBackgroundBlurOptions extends Omit<ApplyVirtualBackgroundOptions, 'image'> {
67
+ /** Blur strength in CSS pixels. Defaults to 16. */
68
+ blurPixels?: number;
69
+ }
70
+ /** Apply person-aware background blur through the standard processed-track lifecycle. */
71
+ export declare function applyBackgroundBlur({ blurPixels, ...options }: ApplyBackgroundBlurOptions): ReturnType<ApplyVirtualBackgroundType>;
72
+ export type ApplyBackgroundBlurType = typeof applyBackgroundBlur;
61
73
  export type ClearVirtualBackgroundType = (options: HeadlessOptions) => Promise<HeadlessActionResult>;
62
74
  /**
63
75
  * Remove the virtual background and go back to the raw camera.
@@ -1 +1 @@
1
- {"version":3,"file":"virtualBackground.d.ts","sourceRoot":"","sources":["../../../../src/methods/utils/headless/virtualBackground.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAgCrD,MAAM,WAAW,6BAA8B,SAAQ,eAAe;IACpE;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,CAAC;IAC5D,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,6BAA6B,KACnC,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,KAAK,EACL,SAAc,EACd,cAAkB,EAClB,OAAc,EACd,SAAyB,GAC1B,EAAE,6BAA6B,GAAG,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAwIhG;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,GACX,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuBjD;AAED,wEAAwE;AACxE,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD"}
1
+ {"version":3,"file":"virtualBackground.d.ts","sourceRoot":"","sources":["../../../../src/methods/utils/headless/virtualBackground.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAmCrD,MAAM,WAAW,6BAA8B,SAAQ,eAAe;IACpE;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,CAAC;IAC5D,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,6BAA6B,KACnC,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,KAAK,EACL,SAAc,EACd,cAAkB,EAClB,OAAc,EACd,SAAyB,EACzB,UAAc,GACf,EAAE,6BAA6B,GAAG,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CA4IhG;AAED,MAAM,WAAW,0BAA2B,SAAQ,IAAI,CAAC,6BAA6B,EAAE,OAAO,CAAC;IAC9F,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,EAClC,UAA2C,EAC3C,GAAG,OAAO,EACX,EAAE,0BAA0B,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAMrE;AAED,MAAM,MAAM,uBAAuB,GAAG,OAAO,mBAAmB,CAAC;AAEjE,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,GACX,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuBjD;AAED,wEAAwE;AACxE,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD"}
@@ -9,6 +9,10 @@ export interface CompositeVirtualBackgroundFrameOptions {
9
9
  repeatPattern?: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat';
10
10
  blurFallbackPixels?: number;
11
11
  }
12
+ /** Stable room-state value used by every web UI surface for background blur. */
13
+ export declare const VIRTUAL_BACKGROUND_BLUR = "blur";
14
+ export declare const DEFAULT_BACKGROUND_BLUR_PIXELS = 16;
15
+ export declare function isVirtualBackgroundBlur(value: unknown): boolean;
12
16
  /**
13
17
  * Paint the segmented person over a replacement background.
14
18
  *
@@ -1 +1 @@
1
- {"version":3,"file":"virtualBackgroundCompositor.d.ts","sourceRoot":"","sources":["../../../src/methods/utils/virtualBackgroundCompositor.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,sCAAsC;IACrD,GAAG,EAAE,wBAAwB,CAAC;IAC9B,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,eAAe,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,GAAG,EACH,gBAAgB,EAChB,WAAW,EACX,eAAsB,EACtB,KAAK,EACL,MAAM,EACN,aAAwB,EACxB,kBAAsB,GACvB,EAAE,sCAAsC,GAAG,IAAI,CAuB/C"}
1
+ {"version":3,"file":"virtualBackgroundCompositor.d.ts","sourceRoot":"","sources":["../../../src/methods/utils/virtualBackgroundCompositor.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,sCAAsC;IACrD,GAAG,EAAE,wBAAwB,CAAC;IAC9B,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,eAAe,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,GAAG,EACH,gBAAgB,EAChB,WAAW,EACX,eAAsB,EACtB,KAAK,EACL,MAAM,EACN,aAAwB,EACxB,kBAAsB,GACvB,EAAE,sCAAsC,GAAG,IAAI,CAgC/C"}
@@ -28,33 +28,6 @@ export interface DisconnectSocketOptions {
28
28
  export type ConnectSocketType = (options: ConnectSocketOptions) => Promise<Socket>;
29
29
  export type DisconnectSocketType = (options: DisconnectSocketOptions) => Promise<boolean>;
30
30
  export type ConnectLocalSocketType = (options: ConnectLocalSocketOptions) => Promise<ResponseLocalConnection>;
31
- /**
32
- * Connects to a media socket using the provided connection options.
33
- *
34
- * @param {ConnectSocketOptions} options - The connection options.
35
- * @param {string} options.apiUserName - The API username.
36
- * @param {string} [options.apiKey] - The API key (optional if apiToken is provided).
37
- * @param {string} [options.apiToken] - The API token (optional if apiKey is provided).
38
- * @param {string} options.link - The socket link.
39
- *
40
- * @returns {Promise<Socket>} A promise that resolves to the connected socket.
41
- *
42
- * @example
43
- * ```typescript
44
- * const options = {
45
- * apiUserName: 'user123',
46
- * apiKey: 'yourApiKeyHere',
47
- * link: 'https://socketlink.com',
48
- * };
49
- *
50
- * try {
51
- * const socket = await connectSocket(options);
52
- * console.log('Connected to socket:', socket);
53
- * } catch (error) {
54
- * console.error('Failed to connect to socket:', error);
55
- * }
56
- * ```
57
- */
58
31
  declare function connectSocket({ apiUserName, apiKey, apiToken, link }: ConnectSocketOptions): Promise<Socket>;
59
32
  /**
60
33
  * Connects to a local media socket using the provided connection options.
@@ -1 +1 @@
1
- {"version":3,"file":"SocketManager.d.ts","sourceRoot":"","sources":["../../src/sockets/SocketManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAe9C,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,2BAA2B,CAAC;CACpC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,gBAAgB,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AACnF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1F,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAG9G;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,iBAAe,aAAa,CAC1B,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,oBAAoB,GAC5D,OAAO,CAAC,MAAM,CAAC,CAsEjB;AAGD;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,iBAAe,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,yBAAyB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAuBvG;AAED;;;;;;;;;;;;;;;;;GAiBG;AAEH,iBAAe,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAKrF;AAED,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"SocketManager.d.ts","sourceRoot":"","sources":["../../src/sockets/SocketManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAe9C,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,2BAA2B,CAAC;CACpC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,gBAAgB,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AACnF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1F,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAkC9G,iBAAe,aAAa,CAC1B,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,oBAAoB,GAC5D,OAAO,CAAC,MAAM,CAAC,CAkHjB;AAGD;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,iBAAe,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,yBAAyB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAuBvG;AAED;;;;;;;;;;;;;;;;;GAiBG;AAEH,iBAAe,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAKrF;AAED,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const joinLocalRoom = require("../joinLocalRoom-BJBDvTYh.cjs");
4
- const updateParticipantAudioDecibels = require("../updateParticipantAudioDecibels-bZ6R8WHj.cjs");
3
+ const joinLocalRoom = require("../joinLocalRoom-Cii5D5IG.cjs");
4
+ const updateParticipantAudioDecibels = require("../updateParticipantAudioDecibels-QZyahisU.cjs");
5
5
  const joinRoomOnMediaSFU = require("../joinRoomOnMediaSFU-CC8RVJgr.cjs");
6
6
  exports.addVideosGrid = joinLocalRoom.addVideosGrid;
7
7
  exports.breakoutRoomUpdated = joinLocalRoom.breakoutRoomUpdated;
@@ -1,5 +1,5 @@
1
- import { a, b, d, c, e, f, j, m, p, u } from "../joinLocalRoom-7ibqv7zZ.js";
2
- import { Y, Z, a as a2, _, $, b as b2, W, d as d2, e as e2, f as f2, g, h, i, j as j2, k, l, m as m2, c as c2, a0, n, o, p as p2, q, r, s, a1, a2 as a22, a3, t, X, T, v, U, w, x, y, V, C, G, z, A, a4, B, D, E, F, a5, N, H, I, J, K, L, M, O, P, Q, R, S, u as u2, a6, a7 } from "../updateParticipantAudioDecibels-C_MygF6q.js";
1
+ import { a, b, d, c, e, f, j, m, p, u } from "../joinLocalRoom-Bu3gz27d.js";
2
+ import { Y, Z, a as a2, _, $, b as b2, W, d as d2, e as e2, f as f2, g, h, i, j as j2, k, l, m as m2, c as c2, a0, n, o, p as p2, q, r, s, a1, a2 as a22, a3, t, X, T, v, U, w, x, y, V, C, G, z, A, a4, B, D, E, F, a5, N, H, I, J, K, L, M, O, P, Q, R, S, u as u2, a6, a7 } from "../updateParticipantAudioDecibels-CnEXJBmc.js";
3
3
  import { e as e3, a as a8, c as c3, b as b3, d as d3, h as h2, t as t2 } from "../joinRoomOnMediaSFU-y6vJ1OBo.js";
4
4
  export {
5
5
  a as addVideosGrid,
@@ -765,6 +765,7 @@ async function validateApiKeyToken(value) {
765
765
  }
766
766
  return true;
767
767
  }
768
+ const CONNECT_TIMEOUT_MS = 12e3;
768
769
  async function connectSocket({ apiUserName, apiKey, apiToken, link }) {
769
770
  if (!apiUserName) {
770
771
  throw new Error("API username required.");
@@ -808,7 +809,21 @@ async function connectSocket({ apiUserName, apiKey, apiToken, link }) {
808
809
  }
809
810
  });
810
811
  }
811
- socket.on("connection-success", ({ socketId }) => {
812
+ let settled = false;
813
+ let timeoutHandle;
814
+ const cleanupHandshake = () => {
815
+ if (timeoutHandle) clearTimeout(timeoutHandle);
816
+ socket.off("connection-success", handleConnectionSuccess);
817
+ socket.off("connect_error", handleConnectError);
818
+ socket.off("disconnect", handleDisconnectBeforeReady);
819
+ };
820
+ const settle = (action) => {
821
+ if (settled) return;
822
+ settled = true;
823
+ cleanupHandshake();
824
+ action();
825
+ };
826
+ const handleConnectionSuccess = ({ socketId }) => {
812
827
  let conn = "media";
813
828
  try {
814
829
  if (link.includes("mediasfu.com") && (link.match(/c/g)?.length ?? 0) > 1) {
@@ -817,11 +832,35 @@ async function connectSocket({ apiUserName, apiKey, apiToken, link }) {
817
832
  } catch {
818
833
  }
819
834
  console.log(`Connected to ${conn} socket with ID: ${socketId}`);
820
- resolve(socket);
821
- });
822
- socket.on("connect_error", (error) => {
823
- reject(new Error("Error connecting to media socket: " + error.message));
824
- });
835
+ settle(() => resolve(socket));
836
+ };
837
+ const handleConnectError = (error) => {
838
+ settle(() => {
839
+ socket.disconnect();
840
+ reject(new Error("Error connecting to media socket: " + error.message));
841
+ });
842
+ };
843
+ const handleDisconnectBeforeReady = (reason) => {
844
+ settle(
845
+ () => reject(
846
+ new Error(
847
+ "Media socket closed before the room was ready (" + reason + ")."
848
+ )
849
+ )
850
+ );
851
+ };
852
+ socket.on("connection-success", handleConnectionSuccess);
853
+ socket.on("connect_error", handleConnectError);
854
+ socket.on("disconnect", handleDisconnectBeforeReady);
855
+ timeoutHandle = setTimeout(() => {
856
+ settle(() => {
857
+ try {
858
+ socket.disconnect();
859
+ } catch {
860
+ }
861
+ reject(new Error("Timed out connecting to media socket."));
862
+ });
863
+ }, CONNECT_TIMEOUT_MS);
825
864
  });
826
865
  }
827
866
  async function connectLocalSocket({ link }) {
@@ -1193,10 +1232,19 @@ const joinConsumeRoom = async ({
1193
1232
  };
1194
1233
  const pendingConsumeConnections = /* @__PURE__ */ new WeakMap();
1195
1234
  const normalizeConsumeEndpoint = (ip) => ip.trim().toLowerCase().replace(/\.$/, "");
1196
- const hasConsumeEndpoint = (consumeSockets, endpoint) => consumeSockets.some((socketObj) => {
1197
- const ip = Object.keys(socketObj)[0];
1198
- return Boolean(ip) && normalizeConsumeEndpoint(ip) === endpoint;
1199
- });
1235
+ const hasConsumeEndpoint = (consumeSockets, endpoint) => {
1236
+ for (let index = consumeSockets.length - 1; index >= 0; index -= 1) {
1237
+ const socketObj = consumeSockets[index];
1238
+ const ip = Object.keys(socketObj)[0];
1239
+ if (!ip || normalizeConsumeEndpoint(ip) !== endpoint) continue;
1240
+ const socket = socketObj[ip];
1241
+ if (socket?.connected && socket.id) return true;
1242
+ socket?.removeAllListeners?.();
1243
+ socket?.disconnect?.();
1244
+ consumeSockets.splice(index, 1);
1245
+ }
1246
+ return false;
1247
+ };
1200
1248
  async function reserveConsumeEndpoint(consumeSockets, ip, reservationOwner = consumeSockets) {
1201
1249
  const endpoint = normalizeConsumeEndpoint(ip);
1202
1250
  if (!endpoint || endpoint === "none") return null;
@@ -1220,6 +1268,9 @@ async function reserveConsumeEndpoint(consumeSockets, ip, reservationOwner = con
1220
1268
  return (didConnect = false) => {
1221
1269
  if (pendingForSockets?.get(endpoint) === reservation) {
1222
1270
  pendingForSockets.delete(endpoint);
1271
+ if (pendingForSockets.size === 0) {
1272
+ pendingConsumeConnections.delete(reservationOwner);
1273
+ }
1223
1274
  }
1224
1275
  resolvePending(didConnect === true);
1225
1276
  };
@@ -1256,8 +1307,9 @@ const connectIps = async ({
1256
1307
  );
1257
1308
  if (!releaseReservation) continue;
1258
1309
  let connected = false;
1310
+ let remote_sock = null;
1259
1311
  try {
1260
- const remote_sock = await connectSocket({ apiUserName, apiKey, apiToken, link: `https://${ip}.mediasfu.com` });
1312
+ remote_sock = await connectSocket({ apiUserName, apiKey, apiToken, link: `https://${ip}.mediasfu.com` });
1261
1313
  if (remote_sock.id) {
1262
1314
  if (!roomRecvIPs.includes(ip)) {
1263
1315
  roomRecvIPs.push(ip);
@@ -1288,16 +1340,36 @@ const connectIps = async ({
1288
1340
  parameters
1289
1341
  });
1290
1342
  if (!data.rtpCapabilities) {
1291
- return [consume_sockets, roomRecvIPs];
1343
+ throw new Error(`Consume room ${ip} did not return RTP capabilities.`);
1292
1344
  }
1293
1345
  }
1294
1346
  consume_sockets.push({ [ip]: remote_sock });
1295
1347
  updateConsume_sockets(consume_sockets);
1296
1348
  connected = true;
1349
+ remote_sock.on("disconnect", () => {
1350
+ const socketIndex = consume_sockets.findIndex(
1351
+ (socketObj) => socketObj[ip] === remote_sock
1352
+ );
1353
+ if (socketIndex >= 0) {
1354
+ consume_sockets.splice(socketIndex, 1);
1355
+ updateConsume_sockets(consume_sockets);
1356
+ }
1357
+ const recvIndex = roomRecvIPs.indexOf(ip);
1358
+ if (recvIndex >= 0) {
1359
+ roomRecvIPs.splice(recvIndex, 1);
1360
+ updateRoomRecvIPs(roomRecvIPs);
1361
+ }
1362
+ remote_sock?.removeAllListeners?.();
1363
+ remote_sock?.disconnect();
1364
+ });
1297
1365
  }
1298
1366
  } catch (error) {
1299
1367
  console.log("connectIps error", error);
1300
1368
  } finally {
1369
+ if (!connected && remote_sock) {
1370
+ remote_sock.removeAllListeners?.();
1371
+ remote_sock.disconnect();
1372
+ }
1301
1373
  releaseReservation(connected);
1302
1374
  }
1303
1375
  }
@@ -5429,4 +5501,4 @@ export {
5429
5501
  processConsumerTransportsAudio as y,
5430
5502
  readjust as z
5431
5503
  };
5432
- //# sourceMappingURL=updateParticipantAudioDecibels-C_MygF6q.js.map
5504
+ //# sourceMappingURL=updateParticipantAudioDecibels-CnEXJBmc.js.map