werift 0.23.0 → 0.24.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 (145) hide show
  1. package/README.md +46 -0
  2. package/lib/common/src/transport.d.ts +22 -9
  3. package/lib/common/src/transport.js +152 -25
  4. package/lib/common/src/transport.js.map +1 -1
  5. package/lib/ice/src/candidate.d.ts +16 -1
  6. package/lib/ice/src/candidate.js +99 -15
  7. package/lib/ice/src/candidate.js.map +1 -1
  8. package/lib/ice/src/ice.d.ts +2 -0
  9. package/lib/ice/src/ice.js +171 -41
  10. package/lib/ice/src/ice.js.map +1 -1
  11. package/lib/ice/src/iceBase.d.ts +23 -2
  12. package/lib/ice/src/iceBase.js +63 -1
  13. package/lib/ice/src/iceBase.js.map +1 -1
  14. package/lib/ice/src/index.d.ts +2 -0
  15. package/lib/ice/src/index.js +2 -0
  16. package/lib/ice/src/index.js.map +1 -1
  17. package/lib/ice/src/stun/const.d.ts +1 -26
  18. package/lib/ice/src/stun/const.js +15 -54
  19. package/lib/ice/src/stun/const.js.map +1 -1
  20. package/lib/ice/src/stun/message.d.ts +1 -25
  21. package/lib/ice/src/stun/message.js +15 -149
  22. package/lib/ice/src/stun/message.js.map +1 -1
  23. package/lib/ice/src/stun/protocol.d.ts +1 -1
  24. package/lib/ice/src/stun/protocol.js +2 -2
  25. package/lib/ice/src/stun/protocol.js.map +1 -1
  26. package/lib/ice/src/stun/tcpFrame.d.ts +5 -0
  27. package/lib/ice/src/stun/tcpFrame.js +26 -0
  28. package/lib/ice/src/stun/tcpFrame.js.map +1 -0
  29. package/lib/ice/src/stun/tcpProtocol.d.ts +51 -0
  30. package/lib/ice/src/stun/tcpProtocol.js +326 -0
  31. package/lib/ice/src/stun/tcpProtocol.js.map +1 -0
  32. package/lib/ice/src/stun/transaction.d.ts +2 -1
  33. package/lib/ice/src/stun/transaction.js +9 -3
  34. package/lib/ice/src/stun/transaction.js.map +1 -1
  35. package/lib/ice/src/turn/frame.d.ts +1 -0
  36. package/lib/ice/src/turn/frame.js +18 -0
  37. package/lib/ice/src/turn/frame.js.map +1 -0
  38. package/lib/ice/src/turn/protocol.d.ts +9 -7
  39. package/lib/ice/src/turn/protocol.js +32 -44
  40. package/lib/ice/src/turn/protocol.js.map +1 -1
  41. package/lib/ice/src/types/model.d.ts +1 -1
  42. package/lib/ice/src/types/model.js.map +1 -1
  43. package/lib/{ice → ice-server}/src/stun/attributes.d.ts +12 -5
  44. package/lib/{ice → ice-server}/src/stun/attributes.js +60 -19
  45. package/lib/ice-server/src/stun/attributes.js.map +1 -0
  46. package/lib/ice-server/src/stun/const.d.ts +28 -0
  47. package/lib/ice-server/src/stun/const.js +88 -0
  48. package/lib/ice-server/src/stun/const.js.map +1 -0
  49. package/lib/ice-server/src/stun/message.d.ts +37 -0
  50. package/lib/ice-server/src/stun/message.js +190 -0
  51. package/lib/ice-server/src/stun/message.js.map +1 -0
  52. package/lib/ice-server/src/turn/auth.d.ts +1 -0
  53. package/lib/ice-server/src/turn/auth.js +10 -0
  54. package/lib/ice-server/src/turn/auth.js.map +1 -0
  55. package/lib/ice-server/src/turn/frame.d.ts +13 -0
  56. package/lib/ice-server/src/turn/frame.js +69 -0
  57. package/lib/ice-server/src/turn/frame.js.map +1 -0
  58. package/lib/index.mjs +2688 -855
  59. package/lib/nonstandard/index.mjs +1753 -403
  60. package/lib/rtp/src/extra/container/mp4/container.d.ts +9 -6
  61. package/lib/rtp/src/extra/container/mp4/container.js +258 -173
  62. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  63. package/lib/rtp/src/extra/container/mp4/h264.d.ts +1 -0
  64. package/lib/rtp/src/extra/container/mp4/h264.js +13 -0
  65. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  66. package/lib/rtp/src/extra/processor/mp4.d.ts +11 -7
  67. package/lib/rtp/src/extra/processor/mp4.js +115 -60
  68. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  69. package/lib/rtp/src/extra/processor/mp4Callback.d.ts +2 -3
  70. package/lib/rtp/src/extra/processor/mp4Callback.js +5 -3
  71. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  72. package/lib/webrtc/src/dataChannel.d.ts +3 -2
  73. package/lib/webrtc/src/dataChannel.js +9 -2
  74. package/lib/webrtc/src/dataChannel.js.map +1 -1
  75. package/lib/webrtc/src/errors.d.ts +3 -0
  76. package/lib/webrtc/src/errors.js +11 -0
  77. package/lib/webrtc/src/errors.js.map +1 -0
  78. package/lib/webrtc/src/helper.d.ts +5 -1
  79. package/lib/webrtc/src/helper.js +33 -1
  80. package/lib/webrtc/src/helper.js.map +1 -1
  81. package/lib/webrtc/src/media/receiver/statistics.d.ts +4 -1
  82. package/lib/webrtc/src/media/receiver/statistics.js +22 -0
  83. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  84. package/lib/webrtc/src/media/rtpReceiver.d.ts +15 -2
  85. package/lib/webrtc/src/media/rtpReceiver.js +135 -20
  86. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  87. package/lib/webrtc/src/media/rtpSender.d.ts +32 -7
  88. package/lib/webrtc/src/media/rtpSender.js +177 -28
  89. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  90. package/lib/webrtc/src/media/rtpTransceiver.d.ts +13 -4
  91. package/lib/webrtc/src/media/rtpTransceiver.js +26 -5
  92. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  93. package/lib/webrtc/src/media/stats.d.ts +15 -1
  94. package/lib/webrtc/src/media/stats.js +55 -1
  95. package/lib/webrtc/src/media/stats.js.map +1 -1
  96. package/lib/webrtc/src/media/track.d.ts +2 -1
  97. package/lib/webrtc/src/media/track.js +7 -1
  98. package/lib/webrtc/src/media/track.js.map +1 -1
  99. package/lib/webrtc/src/nonstandard/dummyMedia.d.ts +19 -0
  100. package/lib/webrtc/src/nonstandard/dummyMedia.js +157 -0
  101. package/lib/webrtc/src/nonstandard/dummyMedia.js.map +1 -0
  102. package/lib/webrtc/src/nonstandard/navigator.d.ts +18 -8
  103. package/lib/webrtc/src/nonstandard/navigator.js +96 -32
  104. package/lib/webrtc/src/nonstandard/navigator.js.map +1 -1
  105. package/lib/webrtc/src/nonstandard/userMedia/packetizer.d.ts +16 -0
  106. package/lib/webrtc/src/nonstandard/userMedia/packetizer.js +360 -0
  107. package/lib/webrtc/src/nonstandard/userMedia/packetizer.js.map +1 -0
  108. package/lib/webrtc/src/nonstandard/userMedia.d.ts +71 -31
  109. package/lib/webrtc/src/nonstandard/userMedia.js +454 -108
  110. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  111. package/lib/webrtc/src/peerConnection.d.ts +183 -50
  112. package/lib/webrtc/src/peerConnection.js +458 -109
  113. package/lib/webrtc/src/peerConnection.js.map +1 -1
  114. package/lib/webrtc/src/sctpManager.d.ts +1 -1
  115. package/lib/webrtc/src/sctpManager.js +27 -7
  116. package/lib/webrtc/src/sctpManager.js.map +1 -1
  117. package/lib/webrtc/src/sdp.d.ts +10 -7
  118. package/lib/webrtc/src/sdp.js +39 -9
  119. package/lib/webrtc/src/sdp.js.map +1 -1
  120. package/lib/webrtc/src/sdpManager.d.ts +4 -3
  121. package/lib/webrtc/src/sdpManager.js +50 -27
  122. package/lib/webrtc/src/sdpManager.js.map +1 -1
  123. package/lib/webrtc/src/secureTransportManager.d.ts +13 -4
  124. package/lib/webrtc/src/secureTransportManager.js +100 -22
  125. package/lib/webrtc/src/secureTransportManager.js.map +1 -1
  126. package/lib/webrtc/src/transceiverManager.d.ts +5 -4
  127. package/lib/webrtc/src/transceiverManager.js +61 -62
  128. package/lib/webrtc/src/transceiverManager.js.map +1 -1
  129. package/lib/webrtc/src/transport/dtls.d.ts +15 -4
  130. package/lib/webrtc/src/transport/dtls.js +91 -23
  131. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  132. package/lib/webrtc/src/transport/ice.d.ts +21 -3
  133. package/lib/webrtc/src/transport/ice.js +159 -30
  134. package/lib/webrtc/src/transport/ice.js.map +1 -1
  135. package/lib/webrtc/src/transport/sctp.d.ts +1 -0
  136. package/lib/webrtc/src/transport/sctp.js +9 -6
  137. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  138. package/lib/webrtc/src/utils.d.ts +12 -4
  139. package/lib/webrtc/src/utils.js +118 -16
  140. package/lib/webrtc/src/utils.js.map +1 -1
  141. package/package.json +7 -4
  142. package/lib/ice/src/stun/attributes.js.map +0 -1
  143. package/lib/rtp/src/extra/container/mp4/mp4box.d.ts +0 -5
  144. package/lib/rtp/src/extra/container/mp4/mp4box.js +0 -32
  145. package/lib/rtp/src/extra/container/mp4/mp4box.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { type Address } from "./imports/common";
1
2
  import { type MediaDirection } from "./media/rtpTransceiver";
2
3
  import { MediaStreamTrack } from "./media/track";
3
4
  import type { RTCIceServer } from "./peerConnection";
@@ -13,6 +14,7 @@ export declare const microTime: () => bigint;
13
14
  export declare const timestampSeconds: () => number;
14
15
  /**https://datatracker.ietf.org/doc/html/rfc3550#section-4 */
15
16
  export declare const ntpTime: () => bigint;
17
+ export declare const ntpTimeToEpochMs: (ntp: bigint) => any;
16
18
  /**
17
19
  * https://datatracker.ietf.org/doc/html/rfc3550#section-4
18
20
  * @param ntp
@@ -20,11 +22,17 @@ export declare const ntpTime: () => bigint;
20
22
  */
21
23
  export declare const compactNtp: (ntp: bigint) => number;
22
24
  export declare function parseIceServers(iceServers: RTCIceServer[]): {
23
- stunServer: readonly [string, number] | undefined;
24
- turnServer: readonly [string, number] | undefined;
25
- turnUsername: string | undefined;
26
- turnPassword: string | undefined;
25
+ stunServer?: Address;
26
+ turnServer?: Address;
27
+ turnUsername?: string;
28
+ turnPassword?: string;
29
+ turnTransport?: "udp" | "tcp" | "tls";
27
30
  };
31
+ export declare function resolveTurnTransport({ configuredTurnTransport, forceTurnTCP, parsedTurnTransport, }: {
32
+ parsedTurnTransport?: "udp" | "tcp" | "tls";
33
+ configuredTurnTransport?: "udp" | "tcp" | "tls";
34
+ forceTurnTCP: boolean;
35
+ }): "tcp" | "tls" | "udp" | undefined;
28
36
  /**
29
37
  *
30
38
  * @param signatureHash
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deepMerge = exports.MediaStreamTrackFactory = exports.createSelfSignedCertificate = exports.compactNtp = exports.ntpTime = exports.timestampSeconds = exports.microTime = exports.milliTime = exports.andDirection = void 0;
3
+ exports.deepMerge = exports.MediaStreamTrackFactory = exports.createSelfSignedCertificate = exports.compactNtp = exports.ntpTimeToEpochMs = exports.ntpTime = exports.timestampSeconds = exports.microTime = exports.milliTime = exports.andDirection = void 0;
4
4
  exports.fingerprint = fingerprint;
5
5
  exports.normalizeFingerprintAlgorithm = normalizeFingerprintAlgorithm;
6
6
  exports.normalizeFingerprintValue = normalizeFingerprintValue;
@@ -8,6 +8,7 @@ exports.isDtls = isDtls;
8
8
  exports.reverseSimulcastDirection = reverseSimulcastDirection;
9
9
  exports.reverseDirection = reverseDirection;
10
10
  exports.parseIceServers = parseIceServers;
11
+ exports.resolveTurnTransport = resolveTurnTransport;
11
12
  /* eslint-disable prefer-const */
12
13
  const crypto_1 = require("crypto");
13
14
  const dgram_1 = require("dgram");
@@ -76,6 +77,11 @@ const ntpTime = () => {
76
77
  return buf.readBigUInt64BE();
77
78
  };
78
79
  exports.ntpTime = ntpTime;
80
+ const ntpTimeToEpochMs = (ntp) => {
81
+ const [seconds, milliseconds] = (0, common_1.bufferReader)((0, common_1.bufferWriter)([8], [ntp]), [4, 4]);
82
+ return seconds * 1000 + milliseconds + Date.UTC(1900, 0, 1);
83
+ };
84
+ exports.ntpTimeToEpochMs = ntpTimeToEpochMs;
79
85
  /**
80
86
  * https://datatracker.ietf.org/doc/html/rfc3550#section-4
81
87
  * @param ntp
@@ -88,24 +94,120 @@ const compactNtp = (ntp) => {
88
94
  };
89
95
  exports.compactNtp = compactNtp;
90
96
  function parseIceServers(iceServers) {
91
- const url2Address = (url) => {
92
- if (!url)
93
- return;
94
- const [address, port] = url.split(":");
95
- return [address, Number.parseInt(port)];
96
- };
97
- const stunServer = url2Address(iceServers.find(({ urls }) => urls.includes("stun:"))?.urls.slice(5));
98
- const turnServer = url2Address(iceServers.find(({ urls }) => urls.includes("turn:"))?.urls.slice(5));
99
- const { credential, username } = iceServers.find(({ urls }) => urls.includes("turn:")) || {};
100
- const options = {
101
- stunServer,
102
- turnServer,
103
- turnUsername: username,
104
- turnPassword: credential,
105
- };
97
+ const options = {};
98
+ for (const iceServer of iceServers) {
99
+ const urls = Array.isArray(iceServer.urls)
100
+ ? iceServer.urls
101
+ : [iceServer.urls];
102
+ for (const url of urls) {
103
+ const parsed = parseIceServerUrl(url);
104
+ if (!parsed) {
105
+ continue;
106
+ }
107
+ if (!options.stunServer && parsed.kind === "stun") {
108
+ options.stunServer = parsed.address;
109
+ }
110
+ if (!options.turnServer && parsed.kind === "turn") {
111
+ options.turnServer = parsed.address;
112
+ options.turnTransport = parsed.transport;
113
+ options.turnUsername = iceServer.username;
114
+ options.turnPassword = iceServer.credential;
115
+ }
116
+ }
117
+ }
106
118
  log("iceOptions", options);
107
119
  return options;
108
120
  }
121
+ function resolveTurnTransport({ configuredTurnTransport, forceTurnTCP, parsedTurnTransport, }) {
122
+ if (parsedTurnTransport) {
123
+ return parsedTurnTransport;
124
+ }
125
+ if (configuredTurnTransport) {
126
+ return configuredTurnTransport;
127
+ }
128
+ if (forceTurnTCP) {
129
+ return "tcp";
130
+ }
131
+ return undefined;
132
+ }
133
+ function parseIceServerUrl(url) {
134
+ const matched = /^(stun|stuns|turn|turns):(.+)$/i.exec(url.trim());
135
+ if (!matched) {
136
+ return;
137
+ }
138
+ const [, rawScheme, rawRest] = matched;
139
+ const scheme = rawScheme.toLowerCase();
140
+ const [authority] = rawRest.split("?", 1);
141
+ const [, query = ""] = rawRest.split("?");
142
+ const address = parseAddress(authority, defaultPort(scheme));
143
+ if (!address) {
144
+ return;
145
+ }
146
+ if (scheme === "stun" || scheme === "stuns") {
147
+ return { kind: "stun", address };
148
+ }
149
+ const queryParams = new URLSearchParams(query);
150
+ const transportParam = queryParams.get("transport");
151
+ const transport = resolveParsedTurnTransport({
152
+ scheme,
153
+ transportParam,
154
+ });
155
+ if (transport === "invalid") {
156
+ return;
157
+ }
158
+ return {
159
+ kind: "turn",
160
+ address,
161
+ transport,
162
+ };
163
+ }
164
+ function resolveParsedTurnTransport({ scheme, transportParam, }) {
165
+ if (transportParam == null) {
166
+ return scheme === "turns" ? "tls" : undefined;
167
+ }
168
+ if (transportParam === "udp") {
169
+ return scheme === "turns" ? "invalid" : "udp";
170
+ }
171
+ if (transportParam === "tcp") {
172
+ return scheme === "turns" ? "tls" : "tcp";
173
+ }
174
+ return "invalid";
175
+ }
176
+ function defaultPort(scheme) {
177
+ if (scheme === "stuns" || scheme === "turns") {
178
+ return 5349;
179
+ }
180
+ return 3478;
181
+ }
182
+ function parseAddress(value, fallbackPort) {
183
+ const authority = value.startsWith("//") ? value.slice(2) : value;
184
+ if (!authority) {
185
+ return;
186
+ }
187
+ if (authority.startsWith("[")) {
188
+ const closingBracket = authority.indexOf("]");
189
+ if (closingBracket === -1) {
190
+ return;
191
+ }
192
+ const host = authority.slice(1, closingBracket);
193
+ const port = parsePort(authority.slice(closingBracket + 1), fallbackPort);
194
+ return [host, port];
195
+ }
196
+ const firstColon = authority.indexOf(":");
197
+ const lastColon = authority.lastIndexOf(":");
198
+ if (firstColon !== -1 && firstColon === lastColon) {
199
+ return [
200
+ authority.slice(0, firstColon),
201
+ parsePort(authority.slice(firstColon + 1), fallbackPort),
202
+ ];
203
+ }
204
+ return [authority, fallbackPort];
205
+ }
206
+ function parsePort(value, fallbackPort) {
207
+ const portString = value.startsWith(":") ? value.slice(1) : value;
208
+ const port = Number.parseInt(portString, 10);
209
+ return Number.isFinite(port) ? port : fallbackPort;
210
+ }
109
211
  /**
110
212
  *
111
213
  * @param signatureHash
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable prefer-const */\nimport { createHash } from \"crypto\";\nimport { createSocket } from \"dgram\";\n\nimport { performance } from \"perf_hooks\";\n\nimport {\n type Address,\n bufferReader,\n bufferWriter,\n debug,\n randomPort,\n} from \"./imports/common\";\nimport { CipherContext } from \"./imports/dtls\";\n\nimport { Directions, type MediaDirection } from \"./media/rtpTransceiver\";\nimport { MediaStreamTrack } from \"./media/track\";\nimport type { RTCIceServer } from \"./peerConnection\";\n\nconst log = debug(\"werift:packages/webrtc/src/utils.ts\");\n\nexport function fingerprint(file: Buffer, hashName: string) {\n const upper = (s: string) => s.toUpperCase();\n const colon = (s: any) => s.match(/(.{2})/g).join(\":\");\n\n const hash = createHash(hashName).update(file).digest(\"hex\");\n\n return colon(upper(hash));\n}\n\nconst fingerprintHashAlgorithms: Record<string, string> = {\n sha1: \"sha1\",\n \"sha-1\": \"sha1\",\n sha224: \"sha224\",\n \"sha-224\": \"sha224\",\n sha256: \"sha256\",\n \"sha-256\": \"sha256\",\n sha384: \"sha384\",\n \"sha-384\": \"sha384\",\n sha512: \"sha512\",\n \"sha-512\": \"sha512\",\n};\n\nexport function normalizeFingerprintAlgorithm(algorithm: string) {\n return fingerprintHashAlgorithms[algorithm.trim().toLowerCase()];\n}\n\nexport function normalizeFingerprintValue(value: string) {\n return value.replace(/[^0-9a-f]/gi, \"\").toLowerCase();\n}\n\nexport function isDtls(buf: Buffer) {\n const firstByte = buf[0];\n return firstByte > 19 && firstByte < 64;\n}\n\nexport function reverseSimulcastDirection(dir: \"recv\" | \"send\") {\n if (dir === \"recv\") return \"send\";\n return \"recv\";\n}\n\nexport const andDirection = (a: MediaDirection, b: MediaDirection) =>\n Directions[Directions.indexOf(a) & Directions.indexOf(b)];\n\nexport function reverseDirection(dir: MediaDirection): MediaDirection {\n if (dir === \"sendonly\") return \"recvonly\";\n if (dir === \"recvonly\") return \"sendonly\";\n return dir;\n}\n\nexport const milliTime = Date.now;\n\nconst startupTimestampInMicroseconds =\n BigInt(Date.now()) * 1000n - process.hrtime.bigint() / 1000n;\n\nexport const microTime = () => {\n return startupTimestampInMicroseconds + process.hrtime.bigint() / 1000n;\n};\n\nexport const timestampSeconds = () => Date.now() / 1000;\n\n/**https://datatracker.ietf.org/doc/html/rfc3550#section-4 */\nexport const ntpTime = () => {\n const now = performance.timeOrigin + performance.now() - Date.UTC(1900, 0, 1);\n\n const seconds = now / 1000;\n const [sec, msec] = seconds.toString().split(\".\").map(Number);\n\n const buf = bufferWriter([4, 4], [sec, msec]);\n\n return buf.readBigUInt64BE();\n};\n\n/**\n * https://datatracker.ietf.org/doc/html/rfc3550#section-4\n * @param ntp\n * @returns 32bit\n */\nexport const compactNtp = (ntp: bigint) => {\n const buf = bufferWriter([8], [ntp]);\n const [, sec, msec] = bufferReader(buf, [2, 2, 2, 2]);\n return bufferWriter([2, 2], [sec, msec]).readUInt32BE();\n};\n\nexport function parseIceServers(iceServers: RTCIceServer[]) {\n const url2Address = (url?: string) => {\n if (!url) return;\n const [address, port] = url.split(\":\");\n return [address, Number.parseInt(port)] as Address;\n };\n\n const stunServer = url2Address(\n iceServers.find(({ urls }) => urls.includes(\"stun:\"))?.urls.slice(5),\n );\n const turnServer = url2Address(\n iceServers.find(({ urls }) => urls.includes(\"turn:\"))?.urls.slice(5),\n );\n const { credential, username } =\n iceServers.find(({ urls }) => urls.includes(\"turn:\")) || {};\n\n const options = {\n stunServer,\n turnServer,\n turnUsername: username,\n turnPassword: credential,\n };\n log(\"iceOptions\", options);\n return options;\n}\n\n/**\n *\n * @param signatureHash\n * @param namedCurveAlgorithm necessary when use ecdsa\n */\nexport const createSelfSignedCertificate =\n CipherContext.createSelfSignedCertificateWithKey;\n\nexport class MediaStreamTrackFactory {\n static async rtpSource({\n port,\n kind,\n cb,\n }: {\n port?: number;\n kind: \"audio\" | \"video\";\n cb?: (buf: Buffer) => Buffer;\n }) {\n port ??= await randomPort();\n const track = new MediaStreamTrack({ kind });\n\n const udp = createSocket(\"udp4\");\n udp.bind(port);\n const onMessage = (msg: Buffer) => {\n if (cb) {\n msg = cb(msg);\n }\n track.writeRtp(msg);\n };\n udp.addListener(\"message\", onMessage);\n\n const dispose = () => {\n udp.removeListener(\"message\", onMessage);\n try {\n udp.close();\n } catch (error) {}\n };\n\n return [track, port, dispose] as const;\n }\n}\n\n/**\n * Merge two objects. If a property value in the source object is undefined or\n * when casted is equal to undefined (== undefined), then it will not overwrite\n * the value of the property in the destination object.\n */\nexport const deepMerge = <T>(dst: T, src: T) => {\n if (!dst || typeof dst !== \"object\") {\n if (src !== null && typeof src === \"object\") {\n return src;\n } else {\n return dst;\n }\n }\n\n if (!src || typeof src !== \"object\") {\n if (src == undefined) {\n return dst;\n }\n return src;\n }\n\n for (const key in src) {\n if (Object.prototype.hasOwnProperty.call(src, key)) {\n const sourceValue = src[key];\n\n if (sourceValue != undefined) {\n dst[key] = sourceValue;\n }\n }\n }\n return dst;\n};\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable prefer-const */\nimport { createHash } from \"crypto\";\nimport { createSocket } from \"dgram\";\n\nimport { performance } from \"perf_hooks\";\n\nimport {\n type Address,\n bufferReader,\n bufferWriter,\n debug,\n randomPort,\n} from \"./imports/common\";\nimport { CipherContext } from \"./imports/dtls\";\n\nimport { Directions, type MediaDirection } from \"./media/rtpTransceiver\";\nimport { MediaStreamTrack } from \"./media/track\";\nimport type { RTCIceServer } from \"./peerConnection\";\n\nconst log = debug(\"werift:packages/webrtc/src/utils.ts\");\n\nexport function fingerprint(file: Buffer, hashName: string) {\n const upper = (s: string) => s.toUpperCase();\n const colon = (s: any) => s.match(/(.{2})/g).join(\":\");\n\n const hash = createHash(hashName).update(file).digest(\"hex\");\n\n return colon(upper(hash));\n}\n\nconst fingerprintHashAlgorithms: Record<string, string> = {\n sha1: \"sha1\",\n \"sha-1\": \"sha1\",\n sha224: \"sha224\",\n \"sha-224\": \"sha224\",\n sha256: \"sha256\",\n \"sha-256\": \"sha256\",\n sha384: \"sha384\",\n \"sha-384\": \"sha384\",\n sha512: \"sha512\",\n \"sha-512\": \"sha512\",\n};\n\nexport function normalizeFingerprintAlgorithm(algorithm: string) {\n return fingerprintHashAlgorithms[algorithm.trim().toLowerCase()];\n}\n\nexport function normalizeFingerprintValue(value: string) {\n return value.replace(/[^0-9a-f]/gi, \"\").toLowerCase();\n}\n\nexport function isDtls(buf: Buffer) {\n const firstByte = buf[0];\n return firstByte > 19 && firstByte < 64;\n}\n\nexport function reverseSimulcastDirection(dir: \"recv\" | \"send\") {\n if (dir === \"recv\") return \"send\";\n return \"recv\";\n}\n\nexport const andDirection = (a: MediaDirection, b: MediaDirection) =>\n Directions[Directions.indexOf(a) & Directions.indexOf(b)];\n\nexport function reverseDirection(dir: MediaDirection): MediaDirection {\n if (dir === \"sendonly\") return \"recvonly\";\n if (dir === \"recvonly\") return \"sendonly\";\n return dir;\n}\n\nexport const milliTime = Date.now;\n\nconst startupTimestampInMicroseconds =\n BigInt(Date.now()) * 1000n - process.hrtime.bigint() / 1000n;\n\nexport const microTime = () => {\n return startupTimestampInMicroseconds + process.hrtime.bigint() / 1000n;\n};\n\nexport const timestampSeconds = () => Date.now() / 1000;\n\n/**https://datatracker.ietf.org/doc/html/rfc3550#section-4 */\nexport const ntpTime = () => {\n const now = performance.timeOrigin + performance.now() - Date.UTC(1900, 0, 1);\n\n const seconds = now / 1000;\n const [sec, msec] = seconds.toString().split(\".\").map(Number);\n\n const buf = bufferWriter([4, 4], [sec, msec]);\n\n return buf.readBigUInt64BE();\n};\n\nexport const ntpTimeToEpochMs = (ntp: bigint) => {\n const [seconds, milliseconds] = bufferReader(\n bufferWriter([8], [ntp]),\n [4, 4],\n );\n return seconds * 1000 + milliseconds + Date.UTC(1900, 0, 1);\n};\n\n/**\n * https://datatracker.ietf.org/doc/html/rfc3550#section-4\n * @param ntp\n * @returns 32bit\n */\nexport const compactNtp = (ntp: bigint) => {\n const buf = bufferWriter([8], [ntp]);\n const [, sec, msec] = bufferReader(buf, [2, 2, 2, 2]);\n return bufferWriter([2, 2], [sec, msec]).readUInt32BE();\n};\n\nexport function parseIceServers(iceServers: RTCIceServer[]) {\n const options: {\n stunServer?: Address;\n turnServer?: Address;\n turnUsername?: string;\n turnPassword?: string;\n turnTransport?: \"udp\" | \"tcp\" | \"tls\";\n } = {};\n\n for (const iceServer of iceServers) {\n const urls = Array.isArray(iceServer.urls)\n ? iceServer.urls\n : [iceServer.urls];\n for (const url of urls) {\n const parsed = parseIceServerUrl(url);\n if (!parsed) {\n continue;\n }\n\n if (!options.stunServer && parsed.kind === \"stun\") {\n options.stunServer = parsed.address;\n }\n\n if (!options.turnServer && parsed.kind === \"turn\") {\n options.turnServer = parsed.address;\n options.turnTransport = parsed.transport;\n options.turnUsername = iceServer.username;\n options.turnPassword = iceServer.credential;\n }\n }\n }\n\n log(\"iceOptions\", options);\n return options;\n}\n\nexport function resolveTurnTransport({\n configuredTurnTransport,\n forceTurnTCP,\n parsedTurnTransport,\n}: {\n parsedTurnTransport?: \"udp\" | \"tcp\" | \"tls\";\n configuredTurnTransport?: \"udp\" | \"tcp\" | \"tls\";\n forceTurnTCP: boolean;\n}) {\n if (parsedTurnTransport) {\n return parsedTurnTransport;\n }\n\n if (configuredTurnTransport) {\n return configuredTurnTransport;\n }\n\n if (forceTurnTCP) {\n return \"tcp\";\n }\n\n return undefined;\n}\n\nfunction parseIceServerUrl(url: string) {\n const matched = /^(stun|stuns|turn|turns):(.+)$/i.exec(url.trim());\n if (!matched) {\n return;\n }\n\n const [, rawScheme, rawRest] = matched;\n const scheme = rawScheme.toLowerCase() as \"stun\" | \"stuns\" | \"turn\" | \"turns\";\n const [authority] = rawRest.split(\"?\", 1);\n const [, query = \"\"] = rawRest.split(\"?\");\n const address = parseAddress(authority, defaultPort(scheme));\n if (!address) {\n return;\n }\n\n if (scheme === \"stun\" || scheme === \"stuns\") {\n return { kind: \"stun\" as const, address };\n }\n\n const queryParams = new URLSearchParams(query);\n const transportParam = queryParams.get(\"transport\");\n const transport = resolveParsedTurnTransport({\n scheme,\n transportParam,\n });\n if (transport === \"invalid\") {\n return;\n }\n\n return {\n kind: \"turn\" as const,\n address,\n transport,\n };\n}\n\nfunction resolveParsedTurnTransport({\n scheme,\n transportParam,\n}: {\n scheme: \"turn\" | \"turns\";\n transportParam: string | null;\n}): \"udp\" | \"tcp\" | \"tls\" | \"invalid\" | undefined {\n if (transportParam == null) {\n return scheme === \"turns\" ? \"tls\" : undefined;\n }\n\n if (transportParam === \"udp\") {\n return scheme === \"turns\" ? \"invalid\" : \"udp\";\n }\n\n if (transportParam === \"tcp\") {\n return scheme === \"turns\" ? \"tls\" : \"tcp\";\n }\n\n return \"invalid\";\n}\n\nfunction defaultPort(scheme: string) {\n if (scheme === \"stuns\" || scheme === \"turns\") {\n return 5349;\n }\n return 3478;\n}\n\nfunction parseAddress(\n value: string,\n fallbackPort: number,\n): Address | undefined {\n const authority = value.startsWith(\"//\") ? value.slice(2) : value;\n if (!authority) {\n return;\n }\n\n if (authority.startsWith(\"[\")) {\n const closingBracket = authority.indexOf(\"]\");\n if (closingBracket === -1) {\n return;\n }\n const host = authority.slice(1, closingBracket);\n const port = parsePort(authority.slice(closingBracket + 1), fallbackPort);\n return [host, port];\n }\n\n const firstColon = authority.indexOf(\":\");\n const lastColon = authority.lastIndexOf(\":\");\n if (firstColon !== -1 && firstColon === lastColon) {\n return [\n authority.slice(0, firstColon),\n parsePort(authority.slice(firstColon + 1), fallbackPort),\n ];\n }\n\n return [authority, fallbackPort];\n}\n\nfunction parsePort(value: string, fallbackPort: number) {\n const portString = value.startsWith(\":\") ? value.slice(1) : value;\n const port = Number.parseInt(portString, 10);\n return Number.isFinite(port) ? port : fallbackPort;\n}\n\n/**\n *\n * @param signatureHash\n * @param namedCurveAlgorithm necessary when use ecdsa\n */\nexport const createSelfSignedCertificate =\n CipherContext.createSelfSignedCertificateWithKey;\n\nexport class MediaStreamTrackFactory {\n static async rtpSource({\n port,\n kind,\n cb,\n }: {\n port?: number;\n kind: \"audio\" | \"video\";\n cb?: (buf: Buffer) => Buffer;\n }) {\n port ??= await randomPort();\n const track = new MediaStreamTrack({ kind });\n\n const udp = createSocket(\"udp4\");\n udp.bind(port);\n const onMessage = (msg: Buffer) => {\n if (cb) {\n msg = cb(msg);\n }\n track.writeRtp(msg);\n };\n udp.addListener(\"message\", onMessage);\n\n const dispose = () => {\n udp.removeListener(\"message\", onMessage);\n try {\n udp.close();\n } catch (error) {}\n };\n\n return [track, port, dispose] as const;\n }\n}\n\n/**\n * Merge two objects. If a property value in the source object is undefined or\n * when casted is equal to undefined (== undefined), then it will not overwrite\n * the value of the property in the destination object.\n */\nexport const deepMerge = <T>(dst: T, src: T) => {\n if (!dst || typeof dst !== \"object\") {\n if (src !== null && typeof src === \"object\") {\n return src;\n } else {\n return dst;\n }\n }\n\n if (!src || typeof src !== \"object\") {\n if (src == undefined) {\n return dst;\n }\n return src;\n }\n\n for (const key in src) {\n if (Object.prototype.hasOwnProperty.call(src, key)) {\n const sourceValue = src[key];\n\n if (sourceValue != undefined) {\n dst[key] = sourceValue;\n }\n }\n }\n return dst;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "werift",
3
- "version": "0.23.0",
3
+ "version": "0.24.0",
4
4
  "description": "WebRTC Implementation for TypeScript (Node.js)",
5
5
  "keywords": [
6
6
  "WebRTC",
@@ -45,7 +45,10 @@
45
45
  "test": "vitest run ./tests",
46
46
  "type": "tsc --noEmit --project ./tsconfig.json",
47
47
  "unused": "organize-imports-cli src/**/*.ts",
48
- "upgrade-interactive": "npx npm-check-updates -i"
48
+ "upgrade-interactive": "npx npm-check-updates -i",
49
+ "wpt:list": "tsx --tsconfig ./tsconfig.json tools/wpt-runner/list.ts",
50
+ "wpt": "tsx --tsconfig ./tsconfig.json tools/wpt-runner/run.ts",
51
+ "wpt:coverage": "tsx --tsconfig ./tsconfig.json tools/wpt-runner/coverage.ts"
49
52
  },
50
53
  "dependencies": {
51
54
  "@fidm/x509": "^1.2.1",
@@ -60,7 +63,7 @@
60
63
  "debug": "4.4.0",
61
64
  "int64-buffer": "1.1.0",
62
65
  "ip": "^2.0.1",
63
- "mp4box": "^0.5.3",
66
+ "mediabunny": "^1.45.2",
64
67
  "multicast-dns": "^7.2.5",
65
68
  "tweetnacl": "^1.0.3",
66
69
  "werift-common": "*",
@@ -73,4 +76,4 @@
73
76
  "node": ">=16"
74
77
  },
75
78
  "readme": "README.md"
76
- }
79
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../../../../ice/src/stun/attributes.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Int64 from \"int64-buffer\";\nimport nodeIp from \"ip\";\n\nimport type { Address } from \"../imports/common\";\nimport {\n type AttributeKeys,\n COOKIE,\n IPV4_PROTOCOL,\n IPV6_PROTOCOL,\n} from \"./const\";\n\nfunction packAddress(value: Address) {\n const [address] = value;\n\n const protocol = nodeIp.isV4Format(address) ? IPV4_PROTOCOL : IPV6_PROTOCOL;\n\n const buffer = Buffer.alloc(4);\n buffer.writeUInt8(0, 0);\n buffer.writeUInt8(protocol, 1);\n buffer.writeUInt16BE(value[1], 2);\n\n return Buffer.concat([buffer, nodeIp.toBuffer(address)]);\n}\n\nexport function unpackErrorCode(data: Buffer): [number, string] {\n if (data.length < 4) throw new Error(\"STUN error code is less than 4 bytes\");\n const codeHigh = data.readUInt8(2);\n const codeLow = data.readUInt8(3);\n const reason = data.slice(4).toString(\"utf8\");\n return [codeHigh * 100 + codeLow, reason];\n}\n\nfunction unpackAddress(data: Buffer): Address {\n if (data.length < 4)\n throw new Error(\"STUN address length is less than 4 bytes\");\n const protocol = data.readUInt8(1);\n const port = data.readUInt16BE(2);\n const address = data.slice(4);\n switch (protocol) {\n case IPV4_PROTOCOL:\n if (address.length != 4)\n throw new Error(`STUN address has invalid length for IPv4`);\n return [nodeIp.toString(address), port];\n case IPV6_PROTOCOL:\n if (address.length != 16)\n throw new Error(\"STUN address has invalid length for IPv6\");\n return [nodeIp.toString(address), port];\n default:\n throw new Error(\"STUN address has unknown protocol\");\n }\n}\n\nconst cookieBuffer = Buffer.alloc(6);\ncookieBuffer.writeUInt16BE(COOKIE >> 16, 0);\ncookieBuffer.writeUInt32BE(COOKIE, 2);\n\nfunction xorAddress(data: Buffer, transactionId: Buffer) {\n const xPad = [...cookieBuffer, ...transactionId];\n let xData = data.slice(0, 2);\n\n for (let i = 2; i < data.length; i++) {\n const num = data[i] ^ xPad[i - 2];\n const buf = Buffer.alloc(1);\n buf.writeUIntBE(num, 0, 1);\n xData = Buffer.concat([xData, buf]);\n }\n return xData;\n}\n\nexport function unpackXorAddress(data: Buffer, transactionId: Buffer): Address {\n return unpackAddress(xorAddress(data, transactionId));\n}\n\nexport function packErrorCode(value: [number, string]) {\n const buffer = Buffer.alloc(4);\n buffer.writeUInt16BE(0, 0);\n buffer.writeUInt8(Math.floor(value[0] / 100), 2);\n buffer.writeUInt8(value[0] % 100, 3);\n const encode = Buffer.from(value[1], \"utf8\");\n return Buffer.concat([buffer, encode]);\n}\n\nexport function packXorAddress(value: Address, transactionId: Buffer) {\n return xorAddress(packAddress(value), transactionId);\n}\n\nconst packUnsigned = (value: number) => {\n const buffer = Buffer.alloc(4);\n buffer.writeUInt32BE(value, 0);\n return buffer;\n};\n\nconst unpackUnsigned = (data: Buffer) => data.readUInt32BE(0);\n\nconst packUnsignedShort = (value: number) => {\n const buffer = Buffer.alloc(4);\n buffer.writeUInt16BE(value, 0);\n return buffer;\n};\n\nconst unpackUnsignedShort = (data: Buffer) => data.readUInt16BE(0);\n\nconst packUnsigned64 = (value: bigint) => {\n return new Int64.Int64BE(value.toString()).toBuffer();\n};\nconst unpackUnsigned64 = (data: Buffer) => {\n const int = new Int64.Int64BE(data);\n return BigInt(int.toString());\n};\n\nconst packString = (value: string) => Buffer.from(value, \"utf8\");\nconst unpackString = (data: Buffer) => data.toString(\"utf8\");\n\nconst packBytes = (value: Buffer) => value;\nconst unpackBytes = (data: Buffer) => data;\n\nconst packNone = (value: Buffer) => Buffer.from([]);\nconst unpackNone = (data: Buffer) => null;\n\nexport type ATTRIBUTE = [\n number,\n AttributeKey,\n (...args: any) => Buffer,\n (...args: any) => any,\n];\n\nconst ATTRIBUTES: ATTRIBUTE[] = [\n [0x0001, \"MAPPED-ADDRESS\", packAddress, unpackAddress],\n [0x0003, \"CHANGE-REQUEST\", packUnsigned, unpackUnsigned],\n [0x0004, \"SOURCE-ADDRESS\", packAddress, unpackAddress],\n [0x0005, \"CHANGED-ADDRESS\", packAddress, unpackAddress],\n [0x0006, \"USERNAME\", packString, unpackString],\n [0x0008, \"MESSAGE-INTEGRITY\", packBytes, unpackBytes],\n [0x0009, \"ERROR-CODE\", packErrorCode, unpackErrorCode],\n [0x000c, \"CHANNEL-NUMBER\", packUnsignedShort, unpackUnsignedShort],\n [0x000d, \"LIFETIME\", packUnsigned, unpackUnsigned],\n [0x0012, \"XOR-PEER-ADDRESS\", packXorAddress, unpackXorAddress],\n [0x0013, \"DATA\", packBytes, unpackBytes],\n [0x0014, \"REALM\", packString, unpackString],\n [0x0015, \"NONCE\", packBytes, unpackBytes],\n [0x0016, \"XOR-RELAYED-ADDRESS\", packXorAddress, unpackXorAddress],\n [0x0019, \"REQUESTED-TRANSPORT\", packUnsigned, unpackUnsigned],\n [0x0020, \"XOR-MAPPED-ADDRESS\", packXorAddress, unpackXorAddress],\n [0x0024, \"PRIORITY\", packUnsigned, unpackUnsigned],\n [0x0025, \"USE-CANDIDATE\", packNone, unpackNone],\n [0x8022, \"SOFTWARE\", packString, unpackString],\n [0x8028, \"FINGERPRINT\", packUnsigned, unpackUnsigned],\n [0x8029, \"ICE-CONTROLLED\", packUnsigned64, unpackUnsigned64],\n [0x802a, \"ICE-CONTROLLING\", packUnsigned64, unpackUnsigned64],\n [0x802b, \"RESPONSE-ORIGIN\", packAddress, unpackAddress],\n [0x802c, \"OTHER-ADDRESS\", packAddress, unpackAddress],\n];\n\nexport class AttributeRepository {\n constructor(protected attributes: AttributePair[] = []) {}\n\n getAttributes() {\n return this.attributes;\n }\n\n setAttribute(key: (typeof AttributeKeys)[number], value: any) {\n const exist = this.attributes.find((a) => a[0] === key);\n if (exist) {\n exist[1] = value;\n } else {\n this.attributes.push([key, value]);\n }\n return this;\n }\n\n getAttributeValue(key: AttributeKey) {\n const attribute = this.attributes.find((a) => a[0] === key);\n if (!attribute) {\n return undefined;\n }\n return attribute[1];\n }\n\n get attributesKeys(): (typeof AttributeKeys)[number][] {\n return this.attributes.map((a) => a[0]);\n }\n\n clear() {\n this.attributes = [];\n }\n}\n\nexport type AttributeKey = (typeof AttributeKeys)[number];\n\nexport type AttributePair = [AttributeKey, any];\n\nexport const ATTRIBUTES_BY_TYPE = ATTRIBUTES.reduce(\n (acc, cur) => {\n acc[cur[0]] = cur;\n return acc;\n },\n {} as { [key: string]: ATTRIBUTE },\n);\n\nexport const ATTRIBUTES_BY_NAME = ATTRIBUTES.reduce(\n (acc, cur) => {\n acc[cur[1]] = cur;\n return acc;\n },\n {} as { [key: string]: ATTRIBUTE },\n);\n"]}
@@ -1,5 +0,0 @@
1
- export type { MP4ArrayBuffer as ArrayBuffer, MP4AudioTrack as AudioTrack, MP4File as File, MP4Info as Info, Sample, SampleOptions, MP4Track as Track, TrackOptions, MP4VideoTrack as VideoTrack, } from "mp4box";
2
- export { BoxParser, ISOFile, Log, createFile as New, DataStream as Stream, } from "mp4box";
3
- import { type MP4AudioTrack, type MP4Track, type MP4VideoTrack } from "mp4box";
4
- export declare function isAudioTrack(track: MP4Track): track is MP4AudioTrack;
5
- export declare function isVideoTrack(track: MP4Track): track is MP4VideoTrack;
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Stream = exports.New = exports.Log = exports.ISOFile = exports.BoxParser = void 0;
4
- exports.isAudioTrack = isAudioTrack;
5
- exports.isVideoTrack = isVideoTrack;
6
- var mp4box_1 = require("mp4box");
7
- Object.defineProperty(exports, "BoxParser", { enumerable: true, get: function () { return mp4box_1.BoxParser; } });
8
- Object.defineProperty(exports, "ISOFile", { enumerable: true, get: function () { return mp4box_1.ISOFile; } });
9
- Object.defineProperty(exports, "Log", { enumerable: true, get: function () { return mp4box_1.Log; } });
10
- Object.defineProperty(exports, "New", { enumerable: true, get: function () { return mp4box_1.createFile; } });
11
- Object.defineProperty(exports, "Stream", { enumerable: true, get: function () { return mp4box_1.DataStream; } });
12
- const mp4box_2 = require("mp4box");
13
- function isAudioTrack(track) {
14
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
15
- return track.audio !== undefined;
16
- }
17
- function isVideoTrack(track) {
18
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
19
- return track.video !== undefined;
20
- }
21
- // TODO contribute to mp4box
22
- mp4box_2.BoxParser.dOpsBox.prototype.write = function (stream) {
23
- this.size = 11;
24
- this.writeHeader(stream);
25
- stream.writeUint8(0);
26
- stream.writeUint8(this.OutputChannelCount);
27
- stream.writeUint16(this.PreSkip);
28
- stream.writeUint32(this.InputSampleRate);
29
- stream.writeUint16(0);
30
- stream.writeUint8(0);
31
- };
32
- //# sourceMappingURL=mp4box.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mp4box.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/container/mp4/mp4box.ts"],"names":[],"mappings":";;;AA4BA,oCAGC;AAED,oCAGC;AAxBD,iCAMgB;AALd,mGAAA,SAAS,OAAA;AACT,iGAAA,OAAO,OAAA;AACP,6FAAA,GAAG,OAAA;AACH,6FAAA,UAAU,OAAO;AACjB,gGAAA,UAAU,OAAU;AAGtB,mCAMgB;AAEhB,SAAgB,YAAY,CAAC,KAAe;IAC1C,uEAAuE;IACvE,OAAQ,KAAuB,CAAC,KAAK,KAAK,SAAS,CAAC;AACtD,CAAC;AAED,SAAgB,YAAY,CAAC,KAAe;IAC1C,uEAAuE;IACvE,OAAQ,KAAuB,CAAC,KAAK,KAAK,SAAS,CAAC;AACtD,CAAC;AAED,4BAA4B;AAC5B,kBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,MAAkB;IAC9D,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAEzB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC","sourcesContent":["// Rename some stuff so it's on brand.\nexport type {\n MP4ArrayBuffer as ArrayBuffer,\n MP4AudioTrack as AudioTrack,\n MP4File as File,\n MP4Info as Info,\n Sample,\n SampleOptions,\n MP4Track as Track,\n TrackOptions,\n MP4VideoTrack as VideoTrack,\n} from \"mp4box\";\nexport {\n BoxParser,\n ISOFile,\n Log,\n createFile as New,\n DataStream as Stream,\n} from \"mp4box\";\n\nimport {\n BoxParser,\n type DataStream,\n type MP4AudioTrack,\n type MP4Track,\n type MP4VideoTrack,\n} from \"mp4box\";\n\nexport function isAudioTrack(track: MP4Track): track is MP4AudioTrack {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (track as MP4AudioTrack).audio !== undefined;\n}\n\nexport function isVideoTrack(track: MP4Track): track is MP4VideoTrack {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (track as MP4VideoTrack).video !== undefined;\n}\n\n// TODO contribute to mp4box\nBoxParser.dOpsBox.prototype.write = function (stream: DataStream) {\n this.size = 11;\n this.writeHeader(stream);\n\n stream.writeUint8(0);\n stream.writeUint8(this.OutputChannelCount);\n stream.writeUint16(this.PreSkip);\n stream.writeUint32(this.InputSampleRate);\n stream.writeUint16(0);\n stream.writeUint8(0);\n};\n"]}