faker.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { WebSocket } from "mock-socket";
  2. import "webrtc-adapter";
  3. const fakeGlobals = {
  4. WebSocket,
  5. MediaStream: class MediaStream {
  6. private readonly _tracks: MediaStreamTrack[] = [];
  7. constructor(tracks?: MediaStreamTrack[]) {
  8. if (tracks) {
  9. this._tracks = tracks;
  10. }
  11. }
  12. getTracks(): MediaStreamTrack[] {
  13. return this._tracks;
  14. }
  15. addTrack(track: MediaStreamTrack) {
  16. this._tracks.push(track);
  17. }
  18. },
  19. MediaStreamTrack: class MediaStreamTrack {
  20. kind: string;
  21. id: string;
  22. private static _idCounter = 0;
  23. constructor() {
  24. this.id = `track#${fakeGlobals.MediaStreamTrack._idCounter++}`;
  25. }
  26. },
  27. RTCPeerConnection: class RTCPeerConnection {
  28. private _senders: RTCRtpSender[] = [];
  29. close() {}
  30. addTrack(track: MediaStreamTrack, ..._stream: MediaStream[]): RTCRtpSender {
  31. const newSender = new RTCRtpSender();
  32. newSender.replaceTrack(track);
  33. this._senders.push(newSender);
  34. return newSender;
  35. }
  36. // removeTrack(_: RTCRtpSender): void { }
  37. getSenders(): RTCRtpSender[] {
  38. return this._senders;
  39. }
  40. },
  41. RTCRtpSender: class RTCRtpSender {
  42. readonly dtmf: RTCDTMFSender | null;
  43. readonly rtcpTransport: RTCDtlsTransport | null;
  44. track: MediaStreamTrack | null;
  45. readonly transport: RTCDtlsTransport | null;
  46. replaceTrack(withTrack: MediaStreamTrack | null): Promise<void> {
  47. this.track = withTrack;
  48. return Promise.resolve();
  49. }
  50. },
  51. };
  52. Object.assign(global, fakeGlobals);
  53. Object.assign(window, fakeGlobals);