werift 0.24.3 → 0.25.0-alpha.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 (168) hide show
  1. package/README.md +116 -113
  2. package/lib/common/src/event.js +2 -1
  3. package/lib/common/src/event.js.map +1 -1
  4. package/lib/common/src/transport.d.ts +22 -2
  5. package/lib/common/src/transport.js +84 -26
  6. package/lib/common/src/transport.js.map +1 -1
  7. package/lib/ice/src/exceptions.d.ts +9 -0
  8. package/lib/ice/src/exceptions.js +23 -1
  9. package/lib/ice/src/exceptions.js.map +1 -1
  10. package/lib/ice/src/ice.d.ts +40 -0
  11. package/lib/ice/src/ice.js +194 -28
  12. package/lib/ice/src/ice.js.map +1 -1
  13. package/lib/ice/src/iceBase.d.ts +26 -0
  14. package/lib/ice/src/iceBase.js.map +1 -1
  15. package/lib/ice/src/stun/const.d.ts +7 -0
  16. package/lib/ice/src/stun/const.js +8 -0
  17. package/lib/ice/src/stun/const.js.map +1 -1
  18. package/lib/ice/src/stun/protocol.js +1 -4
  19. package/lib/ice/src/stun/protocol.js.map +1 -1
  20. package/lib/ice/src/stun/tcpProtocol.d.ts +7 -1
  21. package/lib/ice/src/stun/tcpProtocol.js +65 -14
  22. package/lib/ice/src/stun/tcpProtocol.js.map +1 -1
  23. package/lib/ice/src/stun/transaction.d.ts +12 -1
  24. package/lib/ice/src/stun/transaction.js +37 -4
  25. package/lib/ice/src/stun/transaction.js.map +1 -1
  26. package/lib/ice/src/turn/protocol.d.ts +79 -22
  27. package/lib/ice/src/turn/protocol.js +282 -78
  28. package/lib/ice/src/turn/protocol.js.map +1 -1
  29. package/lib/ice/src/types/model.d.ts +8 -0
  30. package/lib/ice/src/types/model.js.map +1 -1
  31. package/lib/index.mjs +5646 -3451
  32. package/lib/nonstandard/index.mjs +287 -1004
  33. package/lib/polyfill/dom.mjs +23794 -0
  34. package/lib/polyfill/index.mjs +23794 -0
  35. package/lib/rtp/src/extra/container/mp4/container.js +12 -4
  36. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  37. package/lib/rtp/src/extra/processor/mp4.js +8 -3
  38. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  39. package/lib/rtp/src/extra/processor/mp4Callback.js +3 -1
  40. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  41. package/lib/sctp/src/chunk.d.ts +5 -0
  42. package/lib/sctp/src/chunk.js +16 -11
  43. package/lib/sctp/src/chunk.js.map +1 -1
  44. package/lib/sctp/src/index.d.ts +3 -1
  45. package/lib/sctp/src/index.js +10 -1
  46. package/lib/sctp/src/index.js.map +1 -1
  47. package/lib/sctp/src/sctp.d.ts +12 -3
  48. package/lib/sctp/src/sctp.js +51 -18
  49. package/lib/sctp/src/sctp.js.map +1 -1
  50. package/lib/webrtc/src/const.js +2 -0
  51. package/lib/webrtc/src/const.js.map +1 -1
  52. package/lib/webrtc/src/errors.d.ts +9 -1
  53. package/lib/webrtc/src/errors.js +19 -0
  54. package/lib/webrtc/src/errors.js.map +1 -1
  55. package/lib/webrtc/src/media/codec.d.ts +5 -0
  56. package/lib/webrtc/src/media/codec.js +21 -0
  57. package/lib/webrtc/src/media/codec.js.map +1 -1
  58. package/lib/webrtc/src/media/codecCompatibility.d.ts +23 -0
  59. package/lib/webrtc/src/media/codecCompatibility.js +138 -0
  60. package/lib/webrtc/src/media/codecCompatibility.js.map +1 -0
  61. package/lib/webrtc/src/media/index.d.ts +1 -0
  62. package/lib/webrtc/src/media/index.js +1 -0
  63. package/lib/webrtc/src/media/index.js.map +1 -1
  64. package/lib/webrtc/src/media/router.d.ts +2 -0
  65. package/lib/webrtc/src/media/router.js +23 -3
  66. package/lib/webrtc/src/media/router.js.map +1 -1
  67. package/lib/webrtc/src/media/rtpReceiver.d.ts +12 -0
  68. package/lib/webrtc/src/media/rtpReceiver.js +35 -0
  69. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  70. package/lib/webrtc/src/media/rtpSender.d.ts +65 -4
  71. package/lib/webrtc/src/media/rtpSender.js +264 -35
  72. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  73. package/lib/webrtc/src/media/rtpTransceiver.d.ts +42 -0
  74. package/lib/webrtc/src/media/rtpTransceiver.js +157 -4
  75. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  76. package/lib/webrtc/src/media/track.d.ts +29 -1
  77. package/lib/webrtc/src/media/track.js +164 -5
  78. package/lib/webrtc/src/media/track.js.map +1 -1
  79. package/lib/webrtc/src/nonstandard/index.d.ts +0 -1
  80. package/lib/webrtc/src/nonstandard/index.js +0 -1
  81. package/lib/webrtc/src/nonstandard/index.js.map +1 -1
  82. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +2 -1
  83. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  84. package/lib/webrtc/src/nonstandard/userMedia.d.ts +1 -2
  85. package/lib/webrtc/src/nonstandard/userMedia.js +30 -14
  86. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  87. package/lib/webrtc/src/peerConnection.d.ts +127 -5
  88. package/lib/webrtc/src/peerConnection.js +629 -143
  89. package/lib/webrtc/src/peerConnection.js.map +1 -1
  90. package/lib/webrtc/src/polyfill/api.d.ts +14 -0
  91. package/lib/webrtc/src/polyfill/api.js +23 -0
  92. package/lib/webrtc/src/polyfill/api.js.map +1 -0
  93. package/lib/webrtc/src/polyfill/browserIdentity.d.ts +11 -0
  94. package/lib/webrtc/src/polyfill/browserIdentity.js +59 -0
  95. package/lib/webrtc/src/polyfill/browserIdentity.js.map +1 -0
  96. package/lib/webrtc/src/polyfill/dom.d.ts +11 -0
  97. package/lib/webrtc/src/polyfill/dom.js +18 -0
  98. package/lib/webrtc/src/polyfill/dom.js.map +1 -0
  99. package/lib/webrtc/src/polyfill/existingMediaDevices.d.ts +2 -0
  100. package/lib/webrtc/src/polyfill/existingMediaDevices.js +22 -0
  101. package/lib/webrtc/src/polyfill/existingMediaDevices.js.map +1 -0
  102. package/lib/webrtc/src/polyfill/globals.d.ts +28 -0
  103. package/lib/webrtc/src/polyfill/globals.js +3 -0
  104. package/lib/webrtc/src/polyfill/globals.js.map +1 -0
  105. package/lib/webrtc/src/polyfill/index.d.ts +2 -0
  106. package/lib/webrtc/src/polyfill/index.js +19 -0
  107. package/lib/webrtc/src/polyfill/index.js.map +1 -0
  108. package/lib/webrtc/src/polyfill/install.d.ts +13 -0
  109. package/lib/webrtc/src/polyfill/install.js +266 -0
  110. package/lib/webrtc/src/polyfill/install.js.map +1 -0
  111. package/lib/webrtc/src/polyfill/mediaDevices.d.ts +38 -0
  112. package/lib/webrtc/src/polyfill/mediaDevices.js +228 -0
  113. package/lib/webrtc/src/polyfill/mediaDevices.js.map +1 -0
  114. package/lib/webrtc/src/polyfill/mediaRegister.d.ts +51 -0
  115. package/lib/webrtc/src/polyfill/mediaRegister.js +14 -0
  116. package/lib/webrtc/src/polyfill/mediaRegister.js.map +1 -0
  117. package/lib/webrtc/src/polyfill/peerConnectionConfig.d.ts +3 -0
  118. package/lib/webrtc/src/polyfill/peerConnectionConfig.js +52 -0
  119. package/lib/webrtc/src/polyfill/peerConnectionConfig.js.map +1 -0
  120. package/lib/webrtc/src/polyfill/registers/callback.d.ts +16 -0
  121. package/lib/webrtc/src/polyfill/registers/callback.js +57 -0
  122. package/lib/webrtc/src/polyfill/registers/callback.js.map +1 -0
  123. package/lib/webrtc/src/polyfill/registers/empty.d.ts +2 -0
  124. package/lib/webrtc/src/polyfill/registers/empty.js +28 -0
  125. package/lib/webrtc/src/polyfill/registers/empty.js.map +1 -0
  126. package/lib/webrtc/src/polyfill/registers/mp4Webm.d.ts +36 -0
  127. package/lib/webrtc/src/polyfill/registers/mp4Webm.js +242 -0
  128. package/lib/webrtc/src/polyfill/registers/mp4Webm.js.map +1 -0
  129. package/lib/webrtc/src/polyfill/registers/rtpRtcp.d.ts +17 -0
  130. package/lib/webrtc/src/polyfill/registers/rtpRtcp.js +143 -0
  131. package/lib/webrtc/src/polyfill/registers/rtpRtcp.js.map +1 -0
  132. package/lib/webrtc/src/polyfill/rtcSessionDescription.d.ts +18 -0
  133. package/lib/webrtc/src/polyfill/rtcSessionDescription.js +36 -0
  134. package/lib/webrtc/src/polyfill/rtcSessionDescription.js.map +1 -0
  135. package/lib/webrtc/src/polyfill/rtpCodec.d.ts +17 -0
  136. package/lib/webrtc/src/polyfill/rtpCodec.js +93 -0
  137. package/lib/webrtc/src/polyfill/rtpCodec.js.map +1 -0
  138. package/lib/webrtc/src/polyfill/selectSettings.d.ts +31 -0
  139. package/lib/webrtc/src/polyfill/selectSettings.js +156 -0
  140. package/lib/webrtc/src/polyfill/selectSettings.js.map +1 -0
  141. package/lib/webrtc/src/polyfill/sourceIo.d.ts +21 -0
  142. package/lib/webrtc/src/polyfill/sourceIo.js +298 -0
  143. package/lib/webrtc/src/polyfill/sourceIo.js.map +1 -0
  144. package/lib/webrtc/src/polyfill/trackStop.d.ts +4 -0
  145. package/lib/webrtc/src/polyfill/trackStop.js +16 -0
  146. package/lib/webrtc/src/polyfill/trackStop.js.map +1 -0
  147. package/lib/webrtc/src/sctpManager.d.ts +2 -1
  148. package/lib/webrtc/src/sctpManager.js +5 -2
  149. package/lib/webrtc/src/sctpManager.js.map +1 -1
  150. package/lib/webrtc/src/sdp.d.ts +1 -1
  151. package/lib/webrtc/src/sdp.js +5 -6
  152. package/lib/webrtc/src/sdp.js.map +1 -1
  153. package/lib/webrtc/src/sdpManager.d.ts +38 -1
  154. package/lib/webrtc/src/sdpManager.js +236 -30
  155. package/lib/webrtc/src/sdpManager.js.map +1 -1
  156. package/lib/webrtc/src/secureTransportManager.d.ts +43 -12
  157. package/lib/webrtc/src/secureTransportManager.js +123 -47
  158. package/lib/webrtc/src/secureTransportManager.js.map +1 -1
  159. package/lib/webrtc/src/transceiverManager.d.ts +91 -6
  160. package/lib/webrtc/src/transceiverManager.js +477 -62
  161. package/lib/webrtc/src/transceiverManager.js.map +1 -1
  162. package/lib/webrtc/src/transport/ice.d.ts +8 -0
  163. package/lib/webrtc/src/transport/ice.js +17 -1
  164. package/lib/webrtc/src/transport/ice.js.map +1 -1
  165. package/lib/webrtc/src/transport/sctp.d.ts +3 -2
  166. package/lib/webrtc/src/transport/sctp.js +8 -2
  167. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  168. package/package.json +14 -3
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertUserAgentOption = exports.CHROME111_COMPAT_USER_AGENT = void 0;
4
+ exports.parseUserAgentOption = parseUserAgentOption;
5
+ exports.shouldReplaceUserAgent = shouldReplaceUserAgent;
6
+ exports.resolveInstalledUserAgent = resolveInstalledUserAgent;
7
+ exports.applyUserAgent = applyUserAgent;
8
+ exports.installUserAgent = installUserAgent;
9
+ /**
10
+ * Chromium 111+ として mediasoup-client の Chrome111 Handler が選ぶ固定 User-Agent。
11
+ * 実行中 Node の major から Chrome バージョンを合成しない。
12
+ */
13
+ exports.CHROME111_COMPAT_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36";
14
+ const NODE_USER_AGENT = /^Node\.js\/\d+/;
15
+ function parseUserAgentOption(userAgent) {
16
+ if (userAgent === undefined) {
17
+ return undefined;
18
+ }
19
+ if (typeof userAgent !== "string" || userAgent.trim() === "") {
20
+ throw new TypeError("userAgent must be a non-empty string");
21
+ }
22
+ return userAgent;
23
+ }
24
+ function shouldReplaceUserAgent(current) {
25
+ if (typeof current !== "string") {
26
+ return true;
27
+ }
28
+ if (current.trim() === "") {
29
+ return true;
30
+ }
31
+ return NODE_USER_AGENT.test(current);
32
+ }
33
+ function resolveInstalledUserAgent(current, explicit) {
34
+ if (explicit !== undefined) {
35
+ return explicit;
36
+ }
37
+ if (!shouldReplaceUserAgent(current)) {
38
+ return undefined;
39
+ }
40
+ return exports.CHROME111_COMPAT_USER_AGENT;
41
+ }
42
+ function applyUserAgent(navigatorObject, userAgent) {
43
+ Object.defineProperty(navigatorObject, "userAgent", {
44
+ configurable: true,
45
+ enumerable: true,
46
+ writable: true,
47
+ value: userAgent,
48
+ });
49
+ }
50
+ function installUserAgent(navigatorObject, explicit) {
51
+ const current = navigatorObject.userAgent;
52
+ const next = resolveInstalledUserAgent(current, explicit);
53
+ if (next === undefined) {
54
+ return;
55
+ }
56
+ applyUserAgent(navigatorObject, next);
57
+ }
58
+ exports.assertUserAgentOption = parseUserAgentOption;
59
+ //# sourceMappingURL=browserIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserIdentity.js","sourceRoot":"","sources":["../../../../src/polyfill/browserIdentity.ts"],"names":[],"mappings":";;;AASA,oDAQC;AAED,wDAQC;AAED,8DAWC;AAED,wCAUC;AAED,4CAUC;AAhED;;;GAGG;AACU,QAAA,2BAA2B,GACtC,uGAAuG,CAAC;AAE1G,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,SAAgB,oBAAoB,CAAC,SAAkB;IACrD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7D,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,yBAAyB,CACvC,OAAgB,EAChB,QAA4B;IAE5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,mCAA2B,CAAC;AACrC,CAAC;AAED,SAAgB,cAAc,CAC5B,eAAuB,EACvB,SAAiB;IAEjB,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,WAAW,EAAE;QAClD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,gBAAgB,CAC9B,eAAuB,EACvB,QAA4B;IAE5B,MAAM,OAAO,GAAI,eAA2C,CAAC,SAAS,CAAC;IACvE,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAEY,QAAA,qBAAqB,GAAG,oBAAoB,CAAC","sourcesContent":["/**\n * Chromium 111+ として mediasoup-client の Chrome111 Handler が選ぶ固定 User-Agent。\n * 実行中 Node の major から Chrome バージョンを合成しない。\n */\nexport const CHROME111_COMPAT_USER_AGENT =\n \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36\";\n\nconst NODE_USER_AGENT = /^Node\\.js\\/\\d+/;\n\nexport function parseUserAgentOption(userAgent: unknown): string | undefined {\n if (userAgent === undefined) {\n return undefined;\n }\n if (typeof userAgent !== \"string\" || userAgent.trim() === \"\") {\n throw new TypeError(\"userAgent must be a non-empty string\");\n }\n return userAgent;\n}\n\nexport function shouldReplaceUserAgent(current: unknown): boolean {\n if (typeof current !== \"string\") {\n return true;\n }\n if (current.trim() === \"\") {\n return true;\n }\n return NODE_USER_AGENT.test(current);\n}\n\nexport function resolveInstalledUserAgent(\n current: unknown,\n explicit: string | undefined,\n): string | undefined {\n if (explicit !== undefined) {\n return explicit;\n }\n if (!shouldReplaceUserAgent(current)) {\n return undefined;\n }\n return CHROME111_COMPAT_USER_AGENT;\n}\n\nexport function applyUserAgent(\n navigatorObject: object,\n userAgent: string,\n): void {\n Object.defineProperty(navigatorObject, \"userAgent\", {\n configurable: true,\n enumerable: true,\n writable: true,\n value: userAgent,\n });\n}\n\nexport function installUserAgent(\n navigatorObject: object,\n explicit: string | undefined,\n): void {\n const current = (navigatorObject as { userAgent?: unknown }).userAgent;\n const next = resolveInstalledUserAgent(current, explicit);\n if (next === undefined) {\n return;\n }\n applyUserAgent(navigatorObject, next);\n}\n\nexport const assertUserAgentOption = parseUserAgentOption;\n"]}
@@ -0,0 +1,11 @@
1
+ import type { Event } from "../imports/common";
2
+ import type { Extensions, RtcpPacket, RtpPacket } from "../imports/rtp";
3
+ export * from "./api";
4
+ declare global {
5
+ interface MediaStreamTrack {
6
+ writeRtp(rtp: RtpPacket | Buffer): void;
7
+ writeRtcp(rtcp: RtcpPacket): void;
8
+ readonly onReceiveRtp: Event<[RtpPacket, Extensions?]>;
9
+ readonly onReceiveRtcp: Event<[RtcpPacket]>;
10
+ }
11
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./api"), exports);
18
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../../src/polyfill/dom.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,wCAAsB","sourcesContent":["import type { Event } from \"../imports/common\";\nimport type { Extensions, RtcpPacket, RtpPacket } from \"../imports/rtp\";\n\nexport * from \"./api\";\n\ndeclare global {\n interface MediaStreamTrack {\n writeRtp(rtp: RtpPacket | Buffer): void;\n writeRtcp(rtcp: RtcpPacket): void;\n readonly onReceiveRtp: Event<[RtpPacket, Extensions?]>;\n readonly onReceiveRtcp: Event<[RtcpPacket]>;\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export type ExistingMediaDevicesMode = "overwrite" | "throw" | "noop";
2
+ export declare function shouldInstallMediaDevices(existingMediaDevices: unknown, mode?: ExistingMediaDevicesMode): "install" | "skip";
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldInstallMediaDevices = shouldInstallMediaDevices;
4
+ function shouldInstallMediaDevices(existingMediaDevices, mode = "overwrite") {
5
+ if (!hasGetUserMedia(existingMediaDevices)) {
6
+ return "install";
7
+ }
8
+ switch (mode) {
9
+ case "overwrite":
10
+ return "install";
11
+ case "noop":
12
+ return "skip";
13
+ case "throw":
14
+ throw new Error('navigator.mediaDevices already exists; pass existingMediaDevices: "overwrite" to replace it');
15
+ }
16
+ }
17
+ function hasGetUserMedia(value) {
18
+ return (value != null &&
19
+ typeof value === "object" &&
20
+ typeof value.getUserMedia === "function");
21
+ }
22
+ //# sourceMappingURL=existingMediaDevices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"existingMediaDevices.js","sourceRoot":"","sources":["../../../../src/polyfill/existingMediaDevices.ts"],"names":[],"mappings":";;AAEA,8DAiBC;AAjBD,SAAgB,yBAAyB,CACvC,oBAA6B,EAC7B,OAAiC,WAAW;IAE5C,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO;YACV,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,CACL,KAAK,IAAI,IAAI;QACb,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAQ,KAAoC,CAAC,YAAY,KAAK,UAAU,CACzE,CAAC;AACJ,CAAC","sourcesContent":["export type ExistingMediaDevicesMode = \"overwrite\" | \"throw\" | \"noop\";\n\nexport function shouldInstallMediaDevices(\n existingMediaDevices: unknown,\n mode: ExistingMediaDevicesMode = \"overwrite\",\n): \"install\" | \"skip\" {\n if (!hasGetUserMedia(existingMediaDevices)) {\n return \"install\";\n }\n switch (mode) {\n case \"overwrite\":\n return \"install\";\n case \"noop\":\n return \"skip\";\n case \"throw\":\n throw new Error(\n 'navigator.mediaDevices already exists; pass existingMediaDevices: \"overwrite\" to replace it',\n );\n }\n}\n\nfunction hasGetUserMedia(value: unknown): boolean {\n return (\n value != null &&\n typeof value === \"object\" &&\n typeof (value as { getUserMedia?: unknown }).getUserMedia === \"function\"\n );\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import type { RTCDataChannel as WeriftRTCDataChannel } from "../dataChannel";
2
+ import type { OverconstrainedError as WeriftOverconstrainedError } from "../errors";
3
+ import type { MediaStream as WeriftMediaStream, MediaStreamTrack as WeriftMediaStreamTrack, RTCRtpReceiver as WeriftRTCRtpReceiver, RTCRtpSender as WeriftRTCRtpSender, RTCRtpTransceiver as WeriftRTCRtpTransceiver } from "../media";
4
+ import type { RTCPeerConnection as WeriftRTCPeerConnection, RTCTrackEvent as WeriftRTCTrackEvent } from "../peerConnection";
5
+ import type { RTCDtlsTransport as WeriftRTCDtlsTransport } from "../transport/dtls";
6
+ import type { RTCIceCandidate as WeriftRTCIceCandidate, RTCIceTransport as WeriftRTCIceTransport } from "../transport/ice";
7
+ import type { MediaDevices } from "./mediaDevices";
8
+ import type { PolyfillRTCSessionDescription } from "./rtcSessionDescription";
9
+ declare global {
10
+ var RTCPeerConnection: typeof WeriftRTCPeerConnection;
11
+ var RTCSessionDescription: typeof PolyfillRTCSessionDescription;
12
+ var RTCIceCandidate: typeof WeriftRTCIceCandidate;
13
+ var RTCDataChannel: typeof WeriftRTCDataChannel;
14
+ var MediaStream: typeof WeriftMediaStream;
15
+ var MediaStreamTrack: typeof WeriftMediaStreamTrack;
16
+ var RTCRtpSender: typeof WeriftRTCRtpSender;
17
+ var RTCRtpReceiver: typeof WeriftRTCRtpReceiver;
18
+ var RTCRtpTransceiver: typeof WeriftRTCRtpTransceiver;
19
+ var RTCIceTransport: typeof WeriftRTCIceTransport;
20
+ var RTCDtlsTransport: typeof WeriftRTCDtlsTransport;
21
+ var RTCTrackEvent: typeof WeriftRTCTrackEvent;
22
+ var OverconstrainedError: typeof WeriftOverconstrainedError;
23
+ interface Navigator {
24
+ mediaDevices: MediaDevices;
25
+ userAgent: string;
26
+ }
27
+ var navigator: Navigator;
28
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=globals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globals.js","sourceRoot":"","sources":["../../../../src/polyfill/globals.ts"],"names":[],"mappings":"","sourcesContent":["import type { RTCDataChannel as WeriftRTCDataChannel } from \"../dataChannel\";\nimport type { OverconstrainedError as WeriftOverconstrainedError } from \"../errors\";\nimport type {\n MediaStream as WeriftMediaStream,\n MediaStreamTrack as WeriftMediaStreamTrack,\n RTCRtpReceiver as WeriftRTCRtpReceiver,\n RTCRtpSender as WeriftRTCRtpSender,\n RTCRtpTransceiver as WeriftRTCRtpTransceiver,\n} from \"../media\";\nimport type {\n RTCPeerConnection as WeriftRTCPeerConnection,\n RTCTrackEvent as WeriftRTCTrackEvent,\n} from \"../peerConnection\";\nimport type { RTCDtlsTransport as WeriftRTCDtlsTransport } from \"../transport/dtls\";\nimport type {\n RTCIceCandidate as WeriftRTCIceCandidate,\n RTCIceTransport as WeriftRTCIceTransport,\n} from \"../transport/ice\";\nimport type { MediaDevices } from \"./mediaDevices\";\nimport type { PolyfillRTCSessionDescription } from \"./rtcSessionDescription\";\n\ndeclare global {\n var RTCPeerConnection: typeof WeriftRTCPeerConnection;\n var RTCSessionDescription: typeof PolyfillRTCSessionDescription;\n var RTCIceCandidate: typeof WeriftRTCIceCandidate;\n var RTCDataChannel: typeof WeriftRTCDataChannel;\n var MediaStream: typeof WeriftMediaStream;\n var MediaStreamTrack: typeof WeriftMediaStreamTrack;\n var RTCRtpSender: typeof WeriftRTCRtpSender;\n var RTCRtpReceiver: typeof WeriftRTCRtpReceiver;\n var RTCRtpTransceiver: typeof WeriftRTCRtpTransceiver;\n var RTCIceTransport: typeof WeriftRTCIceTransport;\n var RTCDtlsTransport: typeof WeriftRTCDtlsTransport;\n var RTCTrackEvent: typeof WeriftRTCTrackEvent;\n var OverconstrainedError: typeof WeriftOverconstrainedError;\n\n interface Navigator {\n mediaDevices: MediaDevices;\n userAgent: string;\n }\n\n var navigator: Navigator;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from "./api";
2
+ import "./globals";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./api"), exports);
18
+ require("./globals");
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/polyfill/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,qBAAmB","sourcesContent":["export * from \"./api\";\nimport \"./globals\";\n"]}
@@ -0,0 +1,13 @@
1
+ import { type RTCPeerConnectionConfig } from "../peerConnection";
2
+ import { type ExistingMediaDevicesMode } from "./existingMediaDevices";
3
+ import type { MediaRegister } from "./mediaRegister";
4
+ export interface InstallPolyfillOptions {
5
+ mediaRegister: MediaRegister[];
6
+ /** Default configuration for every RTCPeerConnection created by this install. */
7
+ peerConnectionConfig?: RTCPeerConnectionConfig;
8
+ existingMediaDevices?: ExistingMediaDevicesMode;
9
+ target?: object;
10
+ /** navigator.userAgent に設定する値。指定時は既存値より優先する */
11
+ userAgent?: string;
12
+ }
13
+ export declare function installPolyfill(options: InstallPolyfillOptions): () => void;
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.installPolyfill = installPolyfill;
37
+ const dataChannel_1 = require("../dataChannel");
38
+ const errors_1 = require("../errors");
39
+ const media_1 = require("../media");
40
+ const peerConnection_1 = require("../peerConnection");
41
+ const dtls_1 = require("../transport/dtls");
42
+ const ice_1 = require("../transport/ice");
43
+ const browserIdentity = __importStar(require("./browserIdentity"));
44
+ const existingMediaDevices_1 = require("./existingMediaDevices");
45
+ const mediaDevices_1 = require("./mediaDevices");
46
+ const peerConnectionConfig_1 = require("./peerConnectionConfig");
47
+ const empty_1 = require("./registers/empty");
48
+ const rtcSessionDescription_1 = require("./rtcSessionDescription");
49
+ const INSTALLED_KEYS = [
50
+ "RTCPeerConnection",
51
+ "RTCSessionDescription",
52
+ "RTCIceCandidate",
53
+ "RTCDataChannel",
54
+ "MediaStream",
55
+ "MediaStreamTrack",
56
+ "RTCRtpSender",
57
+ "RTCRtpReceiver",
58
+ "RTCRtpTransceiver",
59
+ "RTCIceTransport",
60
+ "RTCDtlsTransport",
61
+ "RTCTrackEvent",
62
+ "OverconstrainedError",
63
+ ];
64
+ function installPolyfill(options) {
65
+ if (options == null || typeof options !== "object") {
66
+ throw new TypeError("installPolyfill requires an options object");
67
+ }
68
+ if (!("mediaRegister" in options) || options.mediaRegister == undefined) {
69
+ throw new TypeError("mediaRegister is required");
70
+ }
71
+ if (!Array.isArray(options.mediaRegister)) {
72
+ throw new TypeError("mediaRegister must be an array");
73
+ }
74
+ if ("peerConnectionConfig" in options &&
75
+ options.peerConnectionConfig !== undefined &&
76
+ (options.peerConnectionConfig === null ||
77
+ typeof options.peerConnectionConfig !== "object" ||
78
+ Array.isArray(options.peerConnectionConfig))) {
79
+ throw new TypeError("peerConnectionConfig must be an object");
80
+ }
81
+ const explicitUserAgent = browserIdentity.assertUserAgentOption(options.userAgent);
82
+ const target = (options.target ?? globalThis);
83
+ const mediaAction = (0, existingMediaDevices_1.shouldInstallMediaDevices)(getExistingMediaDevices(target), options.existingMediaDevices ?? "overwrite");
84
+ const registers = options.mediaRegister.length === 0
85
+ ? [(0, empty_1.createEmptyRegister)()]
86
+ : options.mediaRegister;
87
+ const boundRegisters = bindRegisters(registers);
88
+ const previous = snapshot(target, INSTALLED_KEYS);
89
+ previous.window = descriptorOf(target, "window");
90
+ const previousNavigator = snapshotNavigator(target);
91
+ const mediaDevices = new mediaDevices_1.MediaDevices(boundRegisters);
92
+ try {
93
+ assign(target, "RTCPeerConnection", (0, peerConnectionConfig_1.createPolyfillRTCPeerConnection)(options.peerConnectionConfig));
94
+ assign(target, "RTCSessionDescription", rtcSessionDescription_1.PolyfillRTCSessionDescription);
95
+ assign(target, "RTCIceCandidate", ice_1.RTCIceCandidate);
96
+ assign(target, "RTCDataChannel", dataChannel_1.RTCDataChannel);
97
+ assign(target, "MediaStream", media_1.MediaStream);
98
+ assign(target, "MediaStreamTrack", media_1.MediaStreamTrack);
99
+ assign(target, "RTCRtpSender", media_1.RTCRtpSender);
100
+ assign(target, "RTCRtpReceiver", media_1.RTCRtpReceiver);
101
+ assign(target, "RTCRtpTransceiver", media_1.RTCRtpTransceiver);
102
+ assign(target, "RTCIceTransport", ice_1.RTCIceTransport);
103
+ assign(target, "RTCDtlsTransport", dtls_1.RTCDtlsTransport);
104
+ assign(target, "RTCTrackEvent", peerConnection_1.RTCTrackEvent);
105
+ assign(target, "OverconstrainedError", errors_1.OverconstrainedError);
106
+ if (mediaAction === "install") {
107
+ installMediaDevices(target, mediaDevices);
108
+ }
109
+ const navigatorObject = ensureNavigator(target);
110
+ browserIdentity.installUserAgent(navigatorObject, explicitUserAgent);
111
+ if (target.window == null) {
112
+ assign(target, "window", target);
113
+ }
114
+ }
115
+ catch (error) {
116
+ restore(target, previous);
117
+ restoreNavigator(target, previousNavigator);
118
+ mediaDevices.cleanup();
119
+ throw error;
120
+ }
121
+ return () => {
122
+ restore(target, previous);
123
+ restoreNavigator(target, previousNavigator);
124
+ mediaDevices.cleanup();
125
+ };
126
+ }
127
+ function bindRegisters(registers) {
128
+ const used = new Set();
129
+ for (const register of registers) {
130
+ const explicitId = explicitDeviceId(register.deviceId);
131
+ if (explicitId == undefined) {
132
+ continue;
133
+ }
134
+ if (used.has(explicitId)) {
135
+ throw new Error(`Duplicate mediaRegister deviceId: ${explicitId}`);
136
+ }
137
+ used.add(explicitId);
138
+ }
139
+ let sequence = 0;
140
+ return registers.map((register) => {
141
+ const deviceId = explicitDeviceId(register.deviceId) ??
142
+ nextGeneratedDeviceId(used, () => ++sequence);
143
+ return {
144
+ get mimeType() {
145
+ return register.mimeType;
146
+ },
147
+ get mimeTypeByKind() {
148
+ return register.mimeTypeByKind;
149
+ },
150
+ get kinds() {
151
+ return register.kinds;
152
+ },
153
+ deviceId,
154
+ groupId: register.groupId,
155
+ label: register.label,
156
+ prepare: register.prepare?.bind(register),
157
+ createTracks: (request) => register.createTracks(request),
158
+ stop: register.stop?.bind(register),
159
+ };
160
+ });
161
+ }
162
+ function explicitDeviceId(deviceId) {
163
+ if (deviceId == undefined || deviceId === "") {
164
+ return undefined;
165
+ }
166
+ return deviceId;
167
+ }
168
+ function nextGeneratedDeviceId(used, nextSequence) {
169
+ let deviceId;
170
+ do {
171
+ deviceId = `werift-device-${nextSequence()}`;
172
+ } while (used.has(deviceId));
173
+ used.add(deviceId);
174
+ return deviceId;
175
+ }
176
+ function getExistingMediaDevices(target) {
177
+ const navigatorValue = target.navigator;
178
+ if (!navigatorValue || typeof navigatorValue !== "object") {
179
+ return undefined;
180
+ }
181
+ return navigatorValue.mediaDevices;
182
+ }
183
+ function ensureNavigator(target) {
184
+ let navigatorValue = target.navigator;
185
+ if (!navigatorValue || typeof navigatorValue !== "object") {
186
+ navigatorValue = {};
187
+ assign(target, "navigator", navigatorValue);
188
+ }
189
+ return navigatorValue;
190
+ }
191
+ function installMediaDevices(target, mediaDevices) {
192
+ assign(ensureNavigator(target), "mediaDevices", mediaDevices);
193
+ }
194
+ function snapshot(target, keys) {
195
+ const previous = {};
196
+ for (const key of keys) {
197
+ previous[key] = descriptorOf(target, key);
198
+ }
199
+ return previous;
200
+ }
201
+ function snapshotNavigator(target) {
202
+ const navigatorValue = target.navigator;
203
+ const navigatorObject = navigatorValue && typeof navigatorValue === "object"
204
+ ? navigatorValue
205
+ : undefined;
206
+ return {
207
+ hadOwnNavigator: hasOwn(target, "navigator"),
208
+ navigatorDesc: descriptorOf(target, "navigator"),
209
+ navigatorObject,
210
+ hadOwnMediaDevices: navigatorObject
211
+ ? hasOwn(navigatorObject, "mediaDevices")
212
+ : false,
213
+ mediaDevicesDesc: navigatorObject
214
+ ? descriptorOf(navigatorObject, "mediaDevices")
215
+ : undefined,
216
+ hadOwnUserAgent: navigatorObject
217
+ ? hasOwn(navigatorObject, "userAgent")
218
+ : false,
219
+ userAgentDesc: navigatorObject
220
+ ? descriptorOf(navigatorObject, "userAgent")
221
+ : undefined,
222
+ };
223
+ }
224
+ function restoreNavigator(target, previous) {
225
+ if (previous.navigatorObject) {
226
+ restoreOwnProperty(previous.navigatorObject, "userAgent", previous.hadOwnUserAgent, previous.userAgentDesc);
227
+ restoreOwnProperty(previous.navigatorObject, "mediaDevices", previous.hadOwnMediaDevices, previous.mediaDevicesDesc);
228
+ }
229
+ restoreOwnProperty(target, "navigator", previous.hadOwnNavigator, previous.navigatorDesc);
230
+ }
231
+ function restoreOwnProperty(target, key, hadOwn, descriptor) {
232
+ if (hadOwn) {
233
+ if (descriptor) {
234
+ Object.defineProperty(target, key, descriptor);
235
+ }
236
+ return;
237
+ }
238
+ if (hasOwn(target, key)) {
239
+ delete target[key];
240
+ }
241
+ }
242
+ function hasOwn(target, key) {
243
+ return Object.prototype.hasOwnProperty.call(target, key);
244
+ }
245
+ function restore(target, previous) {
246
+ for (const [key, descriptor] of Object.entries(previous)) {
247
+ if (descriptor) {
248
+ Object.defineProperty(target, key, descriptor);
249
+ }
250
+ else {
251
+ delete target[key];
252
+ }
253
+ }
254
+ }
255
+ function assign(target, key, value) {
256
+ Object.defineProperty(target, key, {
257
+ configurable: true,
258
+ enumerable: true,
259
+ writable: true,
260
+ value,
261
+ });
262
+ }
263
+ function descriptorOf(target, key) {
264
+ return Object.getOwnPropertyDescriptor(target, key);
265
+ }
266
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../src/polyfill/install.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,0CAgFC;AAjID,gDAAgD;AAChD,sCAAiD;AACjD,oCAMkB;AAClB,sDAAgF;AAChF,4CAAqD;AACrD,0CAAoE;AACpE,mEAAqD;AACrD,iEAGgC;AAChC,iDAA8C;AAE9C,iEAAyE;AACzE,6CAAwD;AACxD,mEAAwE;AAExE,MAAM,cAAc,GAAG;IACrB,mBAAmB;IACnB,uBAAuB;IACvB,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;IACb,kBAAkB;IAClB,cAAc;IACd,gBAAgB;IAChB,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,sBAAsB;CACd,CAAC;AAYX,SAAgB,eAAe,CAAC,OAA+B;IAC7D,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,CAAC,eAAe,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,aAAa,IAAI,SAAS,EAAE,CAAC;QACxE,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;IACxD,CAAC;IACD,IACE,sBAAsB,IAAI,OAAO;QACjC,OAAO,CAAC,oBAAoB,KAAK,SAAS;QAC1C,CAAC,OAAO,CAAC,oBAAoB,KAAK,IAAI;YACpC,OAAO,OAAO,CAAC,oBAAoB,KAAK,QAAQ;YAChD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAC9C,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,iBAAiB,GAAG,eAAe,CAAC,qBAAqB,CAC7D,OAAO,CAAC,SAAS,CAClB,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAA4B,CAAC;IACzE,MAAM,WAAW,GAAG,IAAA,gDAAyB,EAC3C,uBAAuB,CAAC,MAAM,CAAC,EAC/B,OAAO,CAAC,oBAAoB,IAAI,WAAW,CAC5C,CAAC;IACF,MAAM,SAAS,GACb,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CAAC,IAAA,2BAAmB,GAAE,CAAC;QACzB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC5B,MAAM,cAAc,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEpD,MAAM,YAAY,GAAG,IAAI,2BAAY,CAAC,cAAc,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,CACJ,MAAM,EACN,mBAAmB,EACnB,IAAA,sDAA+B,EAAC,OAAO,CAAC,oBAAoB,CAAC,CAC9D,CAAC;QACF,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,qDAA6B,CAAC,CAAC;QACvE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,qBAAe,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,4BAAc,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,mBAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,wBAAgB,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,oBAAY,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,sBAAc,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,yBAAiB,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,qBAAe,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,uBAAgB,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,8BAAa,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,EAAE,sBAAsB,EAAE,6BAAoB,CAAC,CAAC;QAE7D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAChD,eAAe,CAAC,gBAAgB,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAErE,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1B,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC5C,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1B,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC5C,YAAY,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,SAA0B;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qCAAqC,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChC,MAAM,QAAQ,GACZ,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACnC,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO;YACL,IAAI,QAAQ;gBACV,OAAO,QAAQ,CAAC,QAAQ,CAAC;YAC3B,CAAC;YACD,IAAI,cAAc;gBAChB,OAAO,QAAQ,CAAC,cAAc,CAAC;YACjC,CAAC;YACD,IAAI,KAAK;gBACP,OAAO,QAAQ,CAAC,KAAK,CAAC;YACxB,CAAC;YACD,QAAQ;YACR,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;YACzC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC;YACzD,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;SACpC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA4B;IACpD,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC7C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAiB,EAAE,YAA0B;IAC1E,IAAI,QAAgB,CAAC;IACrB,GAAG,CAAC;QACF,QAAQ,GAAG,iBAAiB,YAAY,EAAE,EAAE,CAAC;IAC/C,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;IAC7B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA+B;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC;IACxC,IAAI,CAAC,cAAc,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAQ,cAA6C,CAAC,YAAY,CAAC;AACrE,CAAC;AAED,SAAS,eAAe,CAAC,MAA+B;IACtD,IAAI,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC;IACtC,IAAI,CAAC,cAAc,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QAC1D,cAAc,GAAG,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,cAAyC,CAAC;AACnD,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAA+B,EAC/B,YAA0B;IAE1B,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AAChE,CAAC;AAID,SAAS,QAAQ,CAAC,MAA+B,EAAE,IAAuB;IACxE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA+B;IACxD,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC;IACxC,MAAM,eAAe,GACnB,cAAc,IAAI,OAAO,cAAc,KAAK,QAAQ;QAClD,CAAC,CAAE,cAAyB;QAC5B,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO;QACL,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;QAC5C,aAAa,EAAE,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC;QAChD,eAAe;QACf,kBAAkB,EAAE,eAAe;YACjC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;YACzC,CAAC,CAAC,KAAK;QACT,gBAAgB,EAAE,eAAe;YAC/B,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,cAAc,CAAC;YAC/C,CAAC,CAAC,SAAS;QACb,eAAe,EAAE,eAAe;YAC9B,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC;YACtC,CAAC,CAAC,KAAK;QACT,aAAa,EAAE,eAAe;YAC5B,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC;YAC5C,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,MAA+B,EAC/B,QAA8C;IAE9C,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC7B,kBAAkB,CAChB,QAAQ,CAAC,eAAe,EACxB,WAAW,EACX,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,aAAa,CACvB,CAAC;QACF,kBAAkB,CAChB,QAAQ,CAAC,eAAe,EACxB,cAAc,EACd,QAAQ,CAAC,kBAAkB,EAC3B,QAAQ,CAAC,gBAAgB,CAC1B,CAAC;IACJ,CAAC;IACD,kBAAkB,CAChB,MAAM,EACN,WAAW,EACX,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,aAAa,CACvB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAc,EACd,GAAW,EACX,MAAe,EACf,UAA0C;IAE1C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACxB,OAAQ,MAAkC,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,MAAc,EAAE,GAAW;IACzC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,OAAO,CAAC,MAA+B,EAAE,QAAkB;IAClE,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,MAA+B,EAAE,GAAW,EAAE,KAAc;IAC1E,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;QACjC,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;QACd,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,GAAW;IAC/C,OAAO,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC","sourcesContent":["import { RTCDataChannel } from \"../dataChannel\";\nimport { OverconstrainedError } from \"../errors\";\nimport {\n MediaStream,\n MediaStreamTrack,\n RTCRtpReceiver,\n RTCRtpSender,\n RTCRtpTransceiver,\n} from \"../media\";\nimport { type RTCPeerConnectionConfig, RTCTrackEvent } from \"../peerConnection\";\nimport { RTCDtlsTransport } from \"../transport/dtls\";\nimport { RTCIceCandidate, RTCIceTransport } from \"../transport/ice\";\nimport * as browserIdentity from \"./browserIdentity\";\nimport {\n type ExistingMediaDevicesMode,\n shouldInstallMediaDevices,\n} from \"./existingMediaDevices\";\nimport { MediaDevices } from \"./mediaDevices\";\nimport type { BoundMediaRegister, MediaRegister } from \"./mediaRegister\";\nimport { createPolyfillRTCPeerConnection } from \"./peerConnectionConfig\";\nimport { createEmptyRegister } from \"./registers/empty\";\nimport { PolyfillRTCSessionDescription } from \"./rtcSessionDescription\";\n\nconst INSTALLED_KEYS = [\n \"RTCPeerConnection\",\n \"RTCSessionDescription\",\n \"RTCIceCandidate\",\n \"RTCDataChannel\",\n \"MediaStream\",\n \"MediaStreamTrack\",\n \"RTCRtpSender\",\n \"RTCRtpReceiver\",\n \"RTCRtpTransceiver\",\n \"RTCIceTransport\",\n \"RTCDtlsTransport\",\n \"RTCTrackEvent\",\n \"OverconstrainedError\",\n] as const;\n\nexport interface InstallPolyfillOptions {\n mediaRegister: MediaRegister[];\n /** Default configuration for every RTCPeerConnection created by this install. */\n peerConnectionConfig?: RTCPeerConnectionConfig;\n existingMediaDevices?: ExistingMediaDevicesMode;\n target?: object;\n /** navigator.userAgent に設定する値。指定時は既存値より優先する */\n userAgent?: string;\n}\n\nexport function installPolyfill(options: InstallPolyfillOptions): () => void {\n if (options == null || typeof options !== \"object\") {\n throw new TypeError(\"installPolyfill requires an options object\");\n }\n if (!(\"mediaRegister\" in options) || options.mediaRegister == undefined) {\n throw new TypeError(\"mediaRegister is required\");\n }\n if (!Array.isArray(options.mediaRegister)) {\n throw new TypeError(\"mediaRegister must be an array\");\n }\n if (\n \"peerConnectionConfig\" in options &&\n options.peerConnectionConfig !== undefined &&\n (options.peerConnectionConfig === null ||\n typeof options.peerConnectionConfig !== \"object\" ||\n Array.isArray(options.peerConnectionConfig))\n ) {\n throw new TypeError(\"peerConnectionConfig must be an object\");\n }\n\n const explicitUserAgent = browserIdentity.assertUserAgentOption(\n options.userAgent,\n );\n\n const target = (options.target ?? globalThis) as Record<string, unknown>;\n const mediaAction = shouldInstallMediaDevices(\n getExistingMediaDevices(target),\n options.existingMediaDevices ?? \"overwrite\",\n );\n const registers =\n options.mediaRegister.length === 0\n ? [createEmptyRegister()]\n : options.mediaRegister;\n const boundRegisters = bindRegisters(registers);\n const previous = snapshot(target, INSTALLED_KEYS);\n previous.window = descriptorOf(target, \"window\");\n const previousNavigator = snapshotNavigator(target);\n\n const mediaDevices = new MediaDevices(boundRegisters);\n try {\n assign(\n target,\n \"RTCPeerConnection\",\n createPolyfillRTCPeerConnection(options.peerConnectionConfig),\n );\n assign(target, \"RTCSessionDescription\", PolyfillRTCSessionDescription);\n assign(target, \"RTCIceCandidate\", RTCIceCandidate);\n assign(target, \"RTCDataChannel\", RTCDataChannel);\n assign(target, \"MediaStream\", MediaStream);\n assign(target, \"MediaStreamTrack\", MediaStreamTrack);\n assign(target, \"RTCRtpSender\", RTCRtpSender);\n assign(target, \"RTCRtpReceiver\", RTCRtpReceiver);\n assign(target, \"RTCRtpTransceiver\", RTCRtpTransceiver);\n assign(target, \"RTCIceTransport\", RTCIceTransport);\n assign(target, \"RTCDtlsTransport\", RTCDtlsTransport);\n assign(target, \"RTCTrackEvent\", RTCTrackEvent);\n assign(target, \"OverconstrainedError\", OverconstrainedError);\n\n if (mediaAction === \"install\") {\n installMediaDevices(target, mediaDevices);\n }\n\n const navigatorObject = ensureNavigator(target);\n browserIdentity.installUserAgent(navigatorObject, explicitUserAgent);\n\n if (target.window == null) {\n assign(target, \"window\", target);\n }\n } catch (error) {\n restore(target, previous);\n restoreNavigator(target, previousNavigator);\n mediaDevices.cleanup();\n throw error;\n }\n\n return () => {\n restore(target, previous);\n restoreNavigator(target, previousNavigator);\n mediaDevices.cleanup();\n };\n}\n\nfunction bindRegisters(registers: MediaRegister[]): BoundMediaRegister[] {\n const used = new Set<string>();\n for (const register of registers) {\n const explicitId = explicitDeviceId(register.deviceId);\n if (explicitId == undefined) {\n continue;\n }\n if (used.has(explicitId)) {\n throw new Error(`Duplicate mediaRegister deviceId: ${explicitId}`);\n }\n used.add(explicitId);\n }\n\n let sequence = 0;\n return registers.map((register) => {\n const deviceId =\n explicitDeviceId(register.deviceId) ??\n nextGeneratedDeviceId(used, () => ++sequence);\n return {\n get mimeType() {\n return register.mimeType;\n },\n get mimeTypeByKind() {\n return register.mimeTypeByKind;\n },\n get kinds() {\n return register.kinds;\n },\n deviceId,\n groupId: register.groupId,\n label: register.label,\n prepare: register.prepare?.bind(register),\n createTracks: (request) => register.createTracks(request),\n stop: register.stop?.bind(register),\n };\n });\n}\n\nfunction explicitDeviceId(deviceId: string | undefined) {\n if (deviceId == undefined || deviceId === \"\") {\n return undefined;\n }\n return deviceId;\n}\n\nfunction nextGeneratedDeviceId(used: Set<string>, nextSequence: () => number) {\n let deviceId: string;\n do {\n deviceId = `werift-device-${nextSequence()}`;\n } while (used.has(deviceId));\n used.add(deviceId);\n return deviceId;\n}\n\nfunction getExistingMediaDevices(target: Record<string, unknown>) {\n const navigatorValue = target.navigator;\n if (!navigatorValue || typeof navigatorValue !== \"object\") {\n return undefined;\n }\n return (navigatorValue as { mediaDevices?: unknown }).mediaDevices;\n}\n\nfunction ensureNavigator(target: Record<string, unknown>) {\n let navigatorValue = target.navigator;\n if (!navigatorValue || typeof navigatorValue !== \"object\") {\n navigatorValue = {};\n assign(target, \"navigator\", navigatorValue);\n }\n return navigatorValue as Record<string, unknown>;\n}\n\nfunction installMediaDevices(\n target: Record<string, unknown>,\n mediaDevices: MediaDevices,\n) {\n assign(ensureNavigator(target), \"mediaDevices\", mediaDevices);\n}\n\ntype Snapshot = Partial<Record<string, PropertyDescriptor | undefined>>;\n\nfunction snapshot(target: Record<string, unknown>, keys: readonly string[]) {\n const previous: Snapshot = {};\n for (const key of keys) {\n previous[key] = descriptorOf(target, key);\n }\n return previous;\n}\n\nfunction snapshotNavigator(target: Record<string, unknown>) {\n const navigatorValue = target.navigator;\n const navigatorObject =\n navigatorValue && typeof navigatorValue === \"object\"\n ? (navigatorValue as object)\n : undefined;\n return {\n hadOwnNavigator: hasOwn(target, \"navigator\"),\n navigatorDesc: descriptorOf(target, \"navigator\"),\n navigatorObject,\n hadOwnMediaDevices: navigatorObject\n ? hasOwn(navigatorObject, \"mediaDevices\")\n : false,\n mediaDevicesDesc: navigatorObject\n ? descriptorOf(navigatorObject, \"mediaDevices\")\n : undefined,\n hadOwnUserAgent: navigatorObject\n ? hasOwn(navigatorObject, \"userAgent\")\n : false,\n userAgentDesc: navigatorObject\n ? descriptorOf(navigatorObject, \"userAgent\")\n : undefined,\n };\n}\n\nfunction restoreNavigator(\n target: Record<string, unknown>,\n previous: ReturnType<typeof snapshotNavigator>,\n) {\n if (previous.navigatorObject) {\n restoreOwnProperty(\n previous.navigatorObject,\n \"userAgent\",\n previous.hadOwnUserAgent,\n previous.userAgentDesc,\n );\n restoreOwnProperty(\n previous.navigatorObject,\n \"mediaDevices\",\n previous.hadOwnMediaDevices,\n previous.mediaDevicesDesc,\n );\n }\n restoreOwnProperty(\n target,\n \"navigator\",\n previous.hadOwnNavigator,\n previous.navigatorDesc,\n );\n}\n\nfunction restoreOwnProperty(\n target: object,\n key: string,\n hadOwn: boolean,\n descriptor: PropertyDescriptor | undefined,\n) {\n if (hadOwn) {\n if (descriptor) {\n Object.defineProperty(target, key, descriptor);\n }\n return;\n }\n if (hasOwn(target, key)) {\n delete (target as Record<string, unknown>)[key];\n }\n}\n\nfunction hasOwn(target: object, key: string) {\n return Object.prototype.hasOwnProperty.call(target, key);\n}\n\nfunction restore(target: Record<string, unknown>, previous: Snapshot) {\n for (const [key, descriptor] of Object.entries(previous)) {\n if (descriptor) {\n Object.defineProperty(target, key, descriptor);\n } else {\n delete target[key];\n }\n }\n}\n\nfunction assign(target: Record<string, unknown>, key: string, value: unknown) {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value,\n });\n}\n\nfunction descriptorOf(target: object, key: string) {\n return Object.getOwnPropertyDescriptor(target, key);\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import { EventTarget } from "../helper";
2
+ import { MediaStream } from "../media/track";
3
+ import type { BoundMediaRegister, MediaStreamConstraints } from "./mediaRegister";
4
+ export declare class MediaDevices extends EventTarget {
5
+ private readonly registers;
6
+ ondevicechange: ((this: MediaDevices, ev: Event) => unknown) | null;
7
+ private readonly activeStops;
8
+ private readonly failedRegisters;
9
+ private readonly disposeAbort;
10
+ private disposed;
11
+ constructor(registers: BoundMediaRegister[]);
12
+ getSupportedConstraints(): {
13
+ deviceId: true;
14
+ groupId: true;
15
+ mimeType: true;
16
+ };
17
+ enumerateDevices(): Promise<MediaDeviceInfoLike[]>;
18
+ getUserMedia: (constraints?: MediaStreamConstraints) => Promise<MediaStream>;
19
+ getDisplayMedia: (constraints?: MediaStreamConstraints) => Promise<MediaStream>;
20
+ cleanup(): void;
21
+ private prepareRegisters;
22
+ private createKindTracks;
23
+ private shouldSurfacePrepareFailure;
24
+ private watchTrack;
25
+ private throwIfDisposed;
26
+ }
27
+ export interface MediaDeviceInfoLike {
28
+ deviceId: string;
29
+ groupId: string;
30
+ kind: "audioinput" | "videoinput" | "audiooutput";
31
+ label: string;
32
+ toJSON(): {
33
+ deviceId: string;
34
+ groupId: string;
35
+ kind: string;
36
+ label: string;
37
+ };
38
+ }