node-datachannel 0.26.0 → 0.28.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 (103) hide show
  1. package/.eslintrc.json +25 -25
  2. package/.prettierignore +4 -0
  3. package/.prettierrc +1 -0
  4. package/API.md +4 -4
  5. package/BULDING.md +11 -2
  6. package/CMakeLists.txt +37 -13
  7. package/README.md +22 -18
  8. package/dist/cjs/index.cjs.map +1 -1
  9. package/dist/cjs/lib/datachannel-stream.cjs +13 -13
  10. package/dist/cjs/lib/datachannel-stream.cjs.map +1 -1
  11. package/dist/cjs/lib/index.cjs +1 -3
  12. package/dist/cjs/lib/index.cjs.map +1 -1
  13. package/dist/cjs/lib/websocket-server.cjs.map +1 -1
  14. package/dist/cjs/lib/websocket.cjs.map +1 -1
  15. package/dist/cjs/polyfill/Events.cjs +52 -3
  16. package/dist/cjs/polyfill/Events.cjs.map +1 -1
  17. package/dist/cjs/polyfill/Exception.cjs.map +1 -1
  18. package/dist/cjs/polyfill/RTCCertificate.cjs +5 -2
  19. package/dist/cjs/polyfill/RTCCertificate.cjs.map +1 -1
  20. package/dist/cjs/polyfill/RTCDataChannel.cjs +27 -19
  21. package/dist/cjs/polyfill/RTCDataChannel.cjs.map +1 -1
  22. package/dist/cjs/polyfill/RTCDtlsTransport.cjs +6 -5
  23. package/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +1 -1
  24. package/dist/cjs/polyfill/RTCError.cjs +9 -2
  25. package/dist/cjs/polyfill/RTCError.cjs.map +1 -1
  26. package/dist/cjs/polyfill/RTCIceCandidate.cjs +13 -8
  27. package/dist/cjs/polyfill/RTCIceCandidate.cjs.map +1 -1
  28. package/dist/cjs/polyfill/RTCIceTransport.cjs +26 -16
  29. package/dist/cjs/polyfill/RTCIceTransport.cjs.map +1 -1
  30. package/dist/cjs/polyfill/RTCPeerConnection.cjs +80 -70
  31. package/dist/cjs/polyfill/RTCPeerConnection.cjs.map +1 -1
  32. package/dist/cjs/polyfill/RTCSctpTransport.cjs +9 -11
  33. package/dist/cjs/polyfill/RTCSctpTransport.cjs.map +1 -1
  34. package/dist/cjs/polyfill/RTCSessionDescription.cjs +10 -2
  35. package/dist/cjs/polyfill/RTCSessionDescription.cjs.map +1 -1
  36. package/dist/cjs/polyfill/index.cjs.map +1 -1
  37. package/dist/esm/index.mjs.map +1 -1
  38. package/dist/esm/lib/datachannel-stream.mjs.map +1 -1
  39. package/dist/esm/lib/index.mjs +1 -3
  40. package/dist/esm/lib/index.mjs.map +1 -1
  41. package/dist/esm/lib/websocket-server.mjs.map +1 -1
  42. package/dist/esm/lib/websocket.mjs.map +1 -1
  43. package/dist/esm/polyfill/Events.mjs +52 -4
  44. package/dist/esm/polyfill/Events.mjs.map +1 -1
  45. package/dist/esm/polyfill/Exception.mjs.map +1 -1
  46. package/dist/esm/polyfill/RTCCertificate.mjs +5 -2
  47. package/dist/esm/polyfill/RTCCertificate.mjs.map +1 -1
  48. package/dist/esm/polyfill/RTCDataChannel.mjs +27 -19
  49. package/dist/esm/polyfill/RTCDataChannel.mjs.map +1 -1
  50. package/dist/esm/polyfill/RTCDtlsTransport.mjs +6 -5
  51. package/dist/esm/polyfill/RTCDtlsTransport.mjs.map +1 -1
  52. package/dist/esm/polyfill/RTCError.mjs +9 -2
  53. package/dist/esm/polyfill/RTCError.mjs.map +1 -1
  54. package/dist/esm/polyfill/RTCIceCandidate.mjs +13 -8
  55. package/dist/esm/polyfill/RTCIceCandidate.mjs.map +1 -1
  56. package/dist/esm/polyfill/RTCIceTransport.mjs +26 -17
  57. package/dist/esm/polyfill/RTCIceTransport.mjs.map +1 -1
  58. package/dist/esm/polyfill/RTCPeerConnection.mjs +80 -70
  59. package/dist/esm/polyfill/RTCPeerConnection.mjs.map +1 -1
  60. package/dist/esm/polyfill/RTCSctpTransport.mjs +9 -11
  61. package/dist/esm/polyfill/RTCSctpTransport.mjs.map +1 -1
  62. package/dist/esm/polyfill/RTCSessionDescription.mjs +10 -2
  63. package/dist/esm/polyfill/RTCSessionDescription.mjs.map +1 -1
  64. package/dist/esm/polyfill/index.mjs.map +1 -1
  65. package/dist/types/lib/index.d.ts +5 -2
  66. package/dist/types/lib/types.d.ts +6 -6
  67. package/dist/types/polyfill/Events.d.ts +3 -3
  68. package/dist/types/polyfill/RTCCertificate.d.ts +1 -0
  69. package/dist/types/polyfill/RTCDataChannel.d.ts +6 -6
  70. package/dist/types/polyfill/RTCDtlsTransport.d.ts +4 -6
  71. package/dist/types/polyfill/RTCError.d.ts +1 -0
  72. package/dist/types/polyfill/RTCIceCandidate.d.ts +1 -1
  73. package/dist/types/polyfill/RTCIceTransport.d.ts +16 -10
  74. package/dist/types/polyfill/RTCPeerConnection.d.ts +29 -22
  75. package/dist/types/polyfill/RTCSctpTransport.d.ts +2 -4
  76. package/dist/types/polyfill/RTCSessionDescription.d.ts +1 -0
  77. package/jest.config.ts +8 -8
  78. package/package.json +114 -112
  79. package/rollup.config.mjs +1 -1
  80. package/src/cpp/data-channel-wrapper.cpp +11 -0
  81. package/src/cpp/main.cpp +14 -0
  82. package/src/cpp/peer-connection-wrapper.cpp +9 -1
  83. package/src/cpp/peer-connection-wrapper.h +5 -1
  84. package/src/cpp/rtc-wrapper.cpp +18 -0
  85. package/src/index.ts +0 -1
  86. package/src/lib/datachannel-stream.ts +83 -84
  87. package/src/lib/index.ts +165 -139
  88. package/src/lib/types.ts +97 -72
  89. package/src/lib/websocket-server.ts +25 -25
  90. package/src/lib/websocket.ts +19 -19
  91. package/src/polyfill/Events.ts +65 -19
  92. package/src/polyfill/Exception.ts +24 -24
  93. package/src/polyfill/README.md +8 -8
  94. package/src/polyfill/RTCCertificate.ts +16 -12
  95. package/src/polyfill/RTCDataChannel.ts +198 -192
  96. package/src/polyfill/RTCDtlsTransport.ts +38 -39
  97. package/src/polyfill/RTCError.ts +63 -56
  98. package/src/polyfill/RTCIceCandidate.ts +120 -116
  99. package/src/polyfill/RTCIceTransport.ts +71 -64
  100. package/src/polyfill/RTCPeerConnection.ts +436 -420
  101. package/src/polyfill/RTCSctpTransport.ts +43 -47
  102. package/src/polyfill/RTCSessionDescription.ts +26 -17
  103. package/src/polyfill/index.ts +22 -22
package/.eslintrc.json CHANGED
@@ -1,27 +1,27 @@
1
1
  {
2
- "env": {
3
- "browser": false,
4
- "es6": true,
5
- "node": true
6
- },
7
- "parser": "@typescript-eslint/parser",
8
- "parserOptions": {
9
- "project": "tsconfig.json",
10
- "sourceType": "module",
11
- "ecmaVersion": 2020
12
- },
13
- "plugins": ["@typescript-eslint", "jest"],
14
- "extends": [
15
- "eslint:recommended",
16
- "plugin:@typescript-eslint/recommended",
17
- "plugin:jest/recommended",
18
- "prettier"
19
- ],
20
- "rules": {
21
- // The following rule is enabled only to supplement the inline suppression
22
- // examples, and because it is not a recommended rule, you should either
23
- // disable it, or understand what it enforces.
24
- // https://typescript-eslint.io/rules/explicit-function-return-type/
25
- "@typescript-eslint/explicit-function-return-type": "warn"
26
- }
2
+ "env": {
3
+ "browser": false,
4
+ "es6": true,
5
+ "node": true
6
+ },
7
+ "parser": "@typescript-eslint/parser",
8
+ "parserOptions": {
9
+ "project": "tsconfig.json",
10
+ "sourceType": "module",
11
+ "ecmaVersion": 2020
12
+ },
13
+ "plugins": ["@typescript-eslint", "jest"],
14
+ "extends": [
15
+ "eslint:recommended",
16
+ "plugin:@typescript-eslint/recommended",
17
+ "plugin:jest/recommended",
18
+ "prettier"
19
+ ],
20
+ "rules": {
21
+ // The following rule is enabled only to supplement the inline suppression
22
+ // examples, and because it is not a recommended rule, you should either
23
+ // disable it, or understand what it enforces.
24
+ // https://typescript-eslint.io/rules/explicit-function-return-type/
25
+ "@typescript-eslint/explicit-function-return-type": "warn"
27
26
  }
27
+ }
@@ -0,0 +1,4 @@
1
+ test/wpt-tests/wpt
2
+ vcpkg
3
+ out
4
+ .webpack
package/.prettierrc CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "singleQuote": true,
3
3
  "trailingComma": "all",
4
+ "printWidth": 100,
4
5
  "overrides": [
5
6
  {
6
7
  "files": ["*.ts", "*.mts"],
package/API.md CHANGED
@@ -6,8 +6,8 @@
6
6
 
7
7
  let pc = new PeerConnection(peerName[,options])
8
8
 
9
- - peerName `<string>` Peer name to use for logs etc..
10
- - options `<Object>` WebRTC Config Options
9
+ - peerName `<string>` Peer name to use for logs etc..
10
+ - options `<Object>` WebRTC Config Options
11
11
 
12
12
  ```
13
13
  export interface RtcConfig {
@@ -77,8 +77,8 @@ Add remote candidate info
77
77
 
78
78
  Create new data-channel
79
79
 
80
- - label `<string>` Data channel name
81
- - config `<Object>` Data channel options
80
+ - label `<string>` Data channel name
81
+ - config `<Object>` Data channel options
82
82
 
83
83
  ```
84
84
  export interface DataChannelInitConfig {
package/BULDING.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Build
2
2
 
3
3
  ## Requirements
4
- * cmake >= V3.14
5
- * [libdatachannel dependencies](https://github.com/paullouisageneau/libdatachannel/blob/master/README.md#dependencies)
4
+
5
+ - cmake >= V3.14
6
+ - [libdatachannel dependencies](https://github.com/paullouisageneau/libdatachannel/blob/master/README.md#dependencies)
6
7
 
7
8
  ## Building from source
8
9
 
@@ -13,6 +14,7 @@
13
14
  ```
14
15
 
15
16
  Other Options
17
+
16
18
  ```sh
17
19
  # Use GnuTLS instead of OpenSSL (Default False)
18
20
  > npm run install-gnu-tls
@@ -21,3 +23,10 @@ Other Options
21
23
  # libnice-dev packet should be installed. (eg. sudo apt install libnice-dev)
22
24
  > npm run install-nice
23
25
  ```
26
+
27
+ Compile without Media and Websocket
28
+ ```sh
29
+ npx cmake-js clean
30
+ npx cmake-js configure --CDNO_MEDIA=ON --CDNO_WEBSOCKET=ON
31
+ npx cmake-js build
32
+ ```
package/CMakeLists.txt CHANGED
@@ -2,15 +2,13 @@ cmake_minimum_required(VERSION 3.15)
2
2
  cmake_policy(SET CMP0091 NEW)
3
3
  cmake_policy(SET CMP0042 NEW)
4
4
 
5
- project(node_datachannel VERSION 0.26.0)
5
+ project(node_datachannel VERSION 0.28.0)
6
6
 
7
7
  # -Dnapi_build_version=8
8
8
  add_definitions(-DNAPI_VERSION=8)
9
9
 
10
10
  include_directories(${CMAKE_JS_INC})
11
11
 
12
- set(CMAKE_BUILD_TYPE Release)
13
-
14
12
  if(WIN32)
15
13
  set(OPENSSL_MSVC_STATIC_RT TRUE)
16
14
  set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
@@ -20,6 +18,11 @@ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
20
18
  set(CMAKE_C_FLAGS "-Wno-error=unused-but-set-variable -Wno-error=strict-prototypes")
21
19
  endif()
22
20
 
21
+ # Add -frtti only for Linux and macOS
22
+ if (NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
23
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frtti")
24
+ endif()
25
+
23
26
  set(OPENSSL_USE_STATIC_LIBS TRUE)
24
27
  find_package(OpenSSL REQUIRED)
25
28
 
@@ -29,12 +32,13 @@ include(FetchContent)
29
32
  FetchContent_Declare(
30
33
  libdatachannel
31
34
  GIT_REPOSITORY https://github.com/paullouisageneau/libdatachannel.git
32
- GIT_TAG "v0.22.2"
35
+ GIT_TAG "aa57f4285936a878fb96f4f84085ee84d20c3397" # v0.22.2+
33
36
  )
34
37
 
35
38
  option(NO_MEDIA "Disable media transport support in libdatachannel" OFF)
36
39
  option(NO_WEBSOCKET "Disable WebSocket support in libdatachannel" OFF)
37
40
 
41
+ set(FETCHCONTENT_QUIET OFF)
38
42
  FetchContent_GetProperties(libdatachannel)
39
43
 
40
44
  if(NOT libdatachannel)
@@ -42,25 +46,45 @@ if(NOT libdatachannel)
42
46
  add_subdirectory(${libdatachannel_SOURCE_DIR} ${libdatachannel_BINARY_DIR} EXCLUDE_FROM_ALL)
43
47
  endif()
44
48
 
45
- add_library(${PROJECT_NAME} SHARED
46
- src/cpp/rtc-wrapper.cpp
47
- src/cpp/media-direction.cpp
48
- src/cpp/media-rtcpreceivingsession-wrapper.cpp
49
- src/cpp/media-track-wrapper.cpp
50
- src/cpp/media-audio-wrapper.cpp
51
- src/cpp/media-video-wrapper.cpp
49
+ # Create Source File List
50
+ set(SRC_FILES
51
+ src/cpp/rtc-wrapper.cpp
52
52
  src/cpp/data-channel-wrapper.cpp
53
53
  src/cpp/peer-connection-wrapper.cpp
54
54
  src/cpp/thread-safe-callback.cpp
55
- src/cpp/web-socket-wrapper.cpp
56
- src/cpp/web-socket-server-wrapper.cpp
57
55
  src/cpp/main.cpp
58
56
  ${CMAKE_JS_SRC}
59
57
  )
60
58
 
59
+ if(NOT NO_MEDIA)
60
+ list(APPEND SRC_FILES
61
+ src/cpp/media-direction.cpp
62
+ src/cpp/media-rtcpreceivingsession-wrapper.cpp
63
+ src/cpp/media-track-wrapper.cpp
64
+ src/cpp/media-audio-wrapper.cpp
65
+ src/cpp/media-video-wrapper.cpp
66
+ )
67
+ endif()
68
+
69
+ if(NOT NO_WEBSOCKET)
70
+ list(APPEND SRC_FILES
71
+ src/cpp/web-socket-wrapper.cpp
72
+ src/cpp/web-socket-server-wrapper.cpp
73
+ )
74
+ endif()
75
+
76
+ add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
77
+
61
78
  set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17)
62
79
  set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
63
80
 
81
+ # Set the output directory for all build types
82
+ # set_target_properties(${PROJECT_NAME} PROPERTIES
83
+ # RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/binary
84
+ # LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/binary
85
+ # ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/binary
86
+ # )
87
+
64
88
  target_include_directories(${PROJECT_NAME} PRIVATE
65
89
  ${CMAKE_SOURCE_DIR}/node_modules/node-addon-api
66
90
  ${CMAKE_BINARY_DIR}/_deps/libdatachannel-src/include
package/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  ![Linux CI Build](https://github.com/murat-dogan/node-datachannel/workflows/Build%20-%20Linux/badge.svg) ![Windows CI Build](https://github.com/murat-dogan/node-datachannel/workflows/Build%20-%20Win/badge.svg) ![Mac x64 CI Build](https://github.com/murat-dogan/node-datachannel/workflows/Build%20-%20Mac%20x64/badge.svg) ![Mac M1 CI Build](https://github.com/murat-dogan/node-datachannel/workflows/Build%20-%20Mac%20M1/badge.svg)
4
4
 
5
- - Lightweight
6
- - No need to deal with WebRTC stack!
7
- - Small binary sizes (~8MB for Linux x64)
8
- - Type infos for Typescript
9
- - Integrated WebSocket Client & Server Implementation
5
+ - Lightweight
6
+ - No need to deal with WebRTC stack!
7
+ - Small binary sizes (~8MB for Linux x64)
8
+ - Type infos for Typescript
9
+ - Integrated WebSocket Client & Server Implementation
10
10
 
11
11
  This project is Node.js bindings for [libdatachannel](https://github.com/paullouisageneau/libdatachannel) library.
12
12
 
@@ -62,39 +62,43 @@ nodeDataChannel.initLogger('Debug');
62
62
  let dc1 = null;
63
63
  let dc2 = null;
64
64
 
65
- let peer1 = new nodeDataChannel.PeerConnection('Peer1', { iceServers: ['stun:stun.l.google.com:19302'] });
65
+ let peer1 = new nodeDataChannel.PeerConnection('Peer1', {
66
+ iceServers: ['stun:stun.l.google.com:19302'],
67
+ });
66
68
 
67
69
  peer1.onLocalDescription((sdp, type) => {
68
- peer2.setRemoteDescription(sdp, type);
70
+ peer2.setRemoteDescription(sdp, type);
69
71
  });
70
72
  peer1.onLocalCandidate((candidate, mid) => {
71
- peer2.addRemoteCandidate(candidate, mid);
73
+ peer2.addRemoteCandidate(candidate, mid);
72
74
  });
73
75
 
74
- let peer2 = new nodeDataChannel.PeerConnection('Peer2', { iceServers: ['stun:stun.l.google.com:19302'] });
76
+ let peer2 = new nodeDataChannel.PeerConnection('Peer2', {
77
+ iceServers: ['stun:stun.l.google.com:19302'],
78
+ });
75
79
 
76
80
  peer2.onLocalDescription((sdp, type) => {
77
- peer1.setRemoteDescription(sdp, type);
81
+ peer1.setRemoteDescription(sdp, type);
78
82
  });
79
83
  peer2.onLocalCandidate((candidate, mid) => {
80
- peer1.addRemoteCandidate(candidate, mid);
84
+ peer1.addRemoteCandidate(candidate, mid);
81
85
  });
82
86
  peer2.onDataChannel((dc) => {
83
- dc2 = dc;
84
- dc2.onMessage((msg) => {
85
- console.log('Peer2 Received Msg:', msg);
86
- });
87
- dc2.sendMessage('Hello From Peer2');
87
+ dc2 = dc;
88
+ dc2.onMessage((msg) => {
89
+ console.log('Peer2 Received Msg:', msg);
90
+ });
91
+ dc2.sendMessage('Hello From Peer2');
88
92
  });
89
93
 
90
94
  dc1 = peer1.createDataChannel('test');
91
95
 
92
96
  dc1.onOpen(() => {
93
- dc1.sendMessage('Hello from Peer1');
97
+ dc1.sendMessage('Hello from Peer1');
94
98
  });
95
99
 
96
100
  dc1.onMessage((msg) => {
97
- console.log('Peer1 Received Msg:', msg);
101
+ console.log('Peer1 Received Msg:', msg);
98
102
  });
99
103
  ```
100
104
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["// This file is created for builder process\n// So builder can find and compile all files and folders\n// Not intended to be imported directly\n\nimport n from './lib/index';\nimport p from './polyfill/index';\n\n\nexport const nodeDataChannel = n;\nexport const polyfill = p;\n"],"names":["n","p"],"mappings":";;;;;AAQO,MAAM,eAAkB,GAAAA,cAAA;AACxB,MAAM,QAAW,GAAAC;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["// This file is created for builder process\n// So builder can find and compile all files and folders\n// Not intended to be imported directly\n\nimport n from './lib/index';\nimport p from './polyfill/index';\n\nexport const nodeDataChannel = n;\nexport const polyfill = p;\n"],"names":["n","p"],"mappings":";;;;;AAOO,MAAM,eAAkB,GAAAA,cAAA;AACxB,MAAM,QAAW,GAAAC;;;;;"}
@@ -5,20 +5,20 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var stream = require('stream');
6
6
 
7
7
  function _interopNamespaceDefault(e) {
8
- var n = Object.create(null);
9
- if (e) {
10
- Object.keys(e).forEach(function (k) {
11
- if (k !== 'default') {
12
- var d = Object.getOwnPropertyDescriptor(e, k);
13
- Object.defineProperty(n, k, d.get ? d : {
14
- enumerable: true,
15
- get: function () { return e[k]; }
16
- });
17
- }
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
18
16
  });
19
- }
20
- n.default = e;
21
- return Object.freeze(n);
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
22
  }
23
23
 
24
24
  var stream__namespace = /*#__PURE__*/_interopNamespaceDefault(stream);
@@ -1 +1 @@
1
- {"version":3,"file":"datachannel-stream.cjs","sources":["../../../src/lib/datachannel-stream.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as stream from 'stream';\n\n/**\n * Turns a node-datachannel DataChannel into a real Node.js stream, complete with buffering,\n * backpressure (up to a point - if the buffer fills up, messages are dropped), and\n * support for piping data elsewhere.\n *\n * Read & written data may be either UTF-8 strings or Buffers - this difference exists at\n * the protocol level, and is preserved here throughout.\n */\nexport default class DataChannelStream extends stream.Duplex {\n private _rawChannel: any;\n private _readActive: boolean;\n\n\n constructor(rawChannel: any, streamOptions?: Omit<stream.DuplexOptions, 'objectMode'>) {\n super({\n allowHalfOpen: false, // Default to autoclose on end().\n ...streamOptions,\n objectMode: true, // Preserve the string/buffer distinction (WebRTC treats them differently)\n });\n\n this._rawChannel = rawChannel;\n this._readActive = true;\n\n rawChannel.onMessage((msg: any) => {\n if (!this._readActive) return; // If the buffer is full, drop messages.\n\n // If the push is rejected, we pause reading until the next call to _read().\n this._readActive = this.push(msg);\n });\n\n // When the DataChannel closes, the readable & writable ends close\n rawChannel.onClosed(() => {\n this.push(null);\n this.destroy();\n });\n\n rawChannel.onError((errMsg: string) => {\n this.destroy(new Error(`DataChannel error: ${errMsg}`));\n });\n\n // Buffer all writes until the DataChannel opens\n if (!rawChannel.isOpen()) {\n this.cork();\n rawChannel.onOpen(() => this.uncork());\n }\n }\n\n _read(): void {\n // Stop dropping messages, if the buffer filling up meant we were doing so before.\n this._readActive = true;\n }\n\n _write(chunk, _encoding, callback): void {\n let sentOk;\n\n try {\n if (Buffer.isBuffer(chunk)) {\n sentOk = this._rawChannel.sendMessageBinary(chunk);\n } else if (typeof chunk === 'string') {\n sentOk = this._rawChannel.sendMessage(chunk);\n } else {\n const typeName = chunk.constructor.name || typeof chunk;\n throw new Error(`Cannot write ${typeName} to DataChannel stream`);\n }\n } catch (err) {\n return callback(err);\n }\n\n if (sentOk) {\n callback(null);\n } else {\n callback(new Error('Failed to write to DataChannel'));\n }\n }\n\n _final(callback): void {\n if (!this.allowHalfOpen) this.destroy();\n callback(null);\n }\n\n _destroy(maybeErr, callback): void {\n // When the stream is destroyed, we close the DataChannel.\n this._rawChannel.close();\n callback(maybeErr);\n }\n\n get label(): string {\n return this._rawChannel.getLabel();\n }\n\n get id(): number {\n return this._rawChannel.getId();\n }\n\n get protocol(): string {\n return this._rawChannel.getProtocol();\n }\n}\n"],"names":["stream"],"mappings":"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"}
1
+ {"version":3,"file":"datachannel-stream.cjs","sources":["../../../src/lib/datachannel-stream.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as stream from 'stream';\n\n/**\n * Turns a node-datachannel DataChannel into a real Node.js stream, complete with buffering,\n * backpressure (up to a point - if the buffer fills up, messages are dropped), and\n * support for piping data elsewhere.\n *\n * Read & written data may be either UTF-8 strings or Buffers - this difference exists at\n * the protocol level, and is preserved here throughout.\n */\nexport default class DataChannelStream extends stream.Duplex {\n private _rawChannel: any;\n private _readActive: boolean;\n\n constructor(rawChannel: any, streamOptions?: Omit<stream.DuplexOptions, 'objectMode'>) {\n super({\n allowHalfOpen: false, // Default to autoclose on end().\n ...streamOptions,\n objectMode: true, // Preserve the string/buffer distinction (WebRTC treats them differently)\n });\n\n this._rawChannel = rawChannel;\n this._readActive = true;\n\n rawChannel.onMessage((msg: any) => {\n if (!this._readActive) return; // If the buffer is full, drop messages.\n\n // If the push is rejected, we pause reading until the next call to _read().\n this._readActive = this.push(msg);\n });\n\n // When the DataChannel closes, the readable & writable ends close\n rawChannel.onClosed(() => {\n this.push(null);\n this.destroy();\n });\n\n rawChannel.onError((errMsg: string) => {\n this.destroy(new Error(`DataChannel error: ${errMsg}`));\n });\n\n // Buffer all writes until the DataChannel opens\n if (!rawChannel.isOpen()) {\n this.cork();\n rawChannel.onOpen(() => this.uncork());\n }\n }\n\n _read(): void {\n // Stop dropping messages, if the buffer filling up meant we were doing so before.\n this._readActive = true;\n }\n\n _write(chunk, _encoding, callback): void {\n let sentOk;\n\n try {\n if (Buffer.isBuffer(chunk)) {\n sentOk = this._rawChannel.sendMessageBinary(chunk);\n } else if (typeof chunk === 'string') {\n sentOk = this._rawChannel.sendMessage(chunk);\n } else {\n const typeName = chunk.constructor.name || typeof chunk;\n throw new Error(`Cannot write ${typeName} to DataChannel stream`);\n }\n } catch (err) {\n return callback(err);\n }\n\n if (sentOk) {\n callback(null);\n } else {\n callback(new Error('Failed to write to DataChannel'));\n }\n }\n\n _final(callback): void {\n if (!this.allowHalfOpen) this.destroy();\n callback(null);\n }\n\n _destroy(maybeErr, callback): void {\n // When the stream is destroyed, we close the DataChannel.\n this._rawChannel.close();\n callback(maybeErr);\n }\n\n get label(): string {\n return this._rawChannel.getLabel();\n }\n\n get id(): number {\n return this._rawChannel.getId();\n }\n\n get protocol(): string {\n return this._rawChannel.getProtocol();\n }\n}\n"],"names":["stream"],"mappings":"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"}
@@ -27,9 +27,7 @@ const Video = nodeDatachannel.default.Video;
27
27
  const Track = nodeDatachannel.default.Track;
28
28
  const DataChannel = nodeDatachannel.default.DataChannel;
29
29
  const PeerConnection = nodeDatachannel.default.PeerConnection;
30
- class RtcpReceivingSession {
31
- //
32
- }
30
+ const RtcpReceivingSession = nodeDatachannel.default.RtcpReceivingSession;
33
31
  const DataChannelStream = datachannelStream.default;
34
32
  var n = {
35
33
  initLogger,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/lib/index.ts"],"sourcesContent":["import nodeDataChannel from './node-datachannel';\nimport _DataChannelStream from './datachannel-stream';\nimport { WebSocketServer } from './websocket-server';\nimport { Channel, DataChannelInitConfig, DescriptionType, Direction, LogLevel, RtcConfig, RTCIceConnectionState, RTCIceGatheringState, RTCPeerConnectionState, RTCSignalingState, SctpSettings, SelectedCandidateInfo } from './types';\nimport { WebSocket } from './websocket';\n\nexport function preload(): void { nodeDataChannel.preload(); }\nexport function initLogger(level: LogLevel): void { nodeDataChannel.initLogger(level); }\nexport function cleanup(): void { nodeDataChannel.cleanup(); }\nexport function setSctpSettings(settings: SctpSettings): void { nodeDataChannel.setSctpSettings(settings); }\nexport function getLibraryVersion(): string { return nodeDataChannel.getLibraryVersion(); }\n\nexport interface Audio {\n addAudioCodec(payloadType: number, codec: string, profile?: string): void;\n addOpusCodec(payloadType: number, profile?: string): string;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Audio: {\n new(mid: string, dir: Direction): Audio\n} = nodeDataChannel.Audio\n\n\nexport interface Video {\n addVideoCodec(payloadType: number, codec: string, profile?: string): void;\n addH264Codec(payloadType: number, profile?: string): void;\n addVP8Codec(payloadType: number): void;\n addVP9Codec(payloadType: number): void;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Video: {\n new(mid: string, dir: Direction): Video\n} = nodeDataChannel.Video\n\nexport interface Track {\n direction(): Direction;\n mid(): string;\n type(): string;\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer): boolean;\n isOpen(): boolean;\n isClosed(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n requestBitrate(bitRate: number): boolean;\n setBufferedAmountLowThreshold(newSize: number): void;\n requestKeyframe(): boolean;\n setMediaHandler(handler: RtcpReceivingSession): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onMessage(cb: (msg: Buffer) => void): void;\n}\nexport const Track: {\n new(): Track\n} = nodeDataChannel.Track\n\nexport interface DataChannel extends Channel {\n getLabel(): string;\n getId(): number;\n getProtocol(): string;\n\n // Channel implementation\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer | Uint8Array): boolean;\n isOpen(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n setBufferedAmountLowThreshold(newSize: number): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onBufferedAmountLow(cb: () => void): void;\n onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;\n}\nexport const DataChannel: {\n // DataChannel implementation\n} = nodeDataChannel.DataChannel\n\nexport interface PeerConnection {\n close(): void;\n setLocalDescription(type?: DescriptionType): void;\n setRemoteDescription(sdp: string, type: DescriptionType): void;\n localDescription(): { type: DescriptionType; sdp: string } | null;\n remoteDescription(): { type: DescriptionType; sdp: string } | null;\n addRemoteCandidate(candidate: string, mid: string): void;\n createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;\n addTrack(media: Video | Audio): Track;\n hasMedia(): boolean;\n state(): RTCPeerConnectionState;\n iceState(): RTCIceConnectionState;\n signalingState(): RTCSignalingState;\n gatheringState(): RTCIceGatheringState;\n onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;\n onLocalCandidate(cb: (candidate: string, mid: string) => void): void;\n onStateChange(cb: (state: string) => void): void;\n onIceStateChange(cb: (state: string) => void): void;\n onSignalingStateChange(cb: (state: string) => void): void;\n onGatheringStateChange(cb: (state: string) => void): void;\n onDataChannel(cb: (dc: DataChannel) => void): void;\n onTrack(cb: (track: Track) => void): void;\n bytesSent(): number;\n bytesReceived(): number;\n rtt(): number;\n getSelectedCandidatePair(): { local: SelectedCandidateInfo; remote: SelectedCandidateInfo } | null;\n maxDataChannelId(): number;\n maxMessageSize(): number;\n}\nexport const PeerConnection: {\n new(peerName: string, config: RtcConfig): PeerConnection\n} = nodeDataChannel.PeerConnection\n\nexport class RtcpReceivingSession {\n //\n}\n\nexport { WebSocketServer } from './websocket-server';\nexport { WebSocket } from './websocket';\n\nexport const DataChannelStream = _DataChannelStream;\n\nexport default {\n initLogger,\n cleanup,\n preload,\n setSctpSettings,\n getLibraryVersion,\n RtcpReceivingSession,\n Track,\n Video,\n Audio,\n DataChannel,\n PeerConnection,\n WebSocket,\n WebSocketServer,\n DataChannelStream\n};\n\n\n// Types\n// https://github.com/murat-dogan/node-datachannel/issues/300\nexport * from './types';\n"],"names":["nodeDataChannel","_DataChannelStream","WebSocket","WebSocketServer"],"mappings":";;;;;;;;;AAMO,SAAS,OAAgB,GAAA;AAAE,EAAAA,uBAAA,CAAgB,OAAQ,EAAA,CAAA;AAAG,CAAA;AACtD,SAAS,WAAW,KAAuB,EAAA;AAAE,EAAAA,uBAAA,CAAgB,WAAW,KAAK,CAAA,CAAA;AAAG,CAAA;AAChF,SAAS,OAAgB,GAAA;AAAE,EAAAA,uBAAA,CAAgB,OAAQ,EAAA,CAAA;AAAG,CAAA;AACtD,SAAS,gBAAgB,QAA8B,EAAA;AAAE,EAAAA,uBAAA,CAAgB,gBAAgB,QAAQ,CAAA,CAAA;AAAG,CAAA;AACpG,SAAS,iBAA4B,GAAA;AAAE,EAAA,OAAOA,wBAAgB,iBAAkB,EAAA,CAAA;AAAG,CAAA;AAwBnF,MAAM,QAETA,uBAAgB,CAAA,MAAA;AA2Bb,MAAM,QAETA,uBAAgB,CAAA,MAAA;AAsBb,MAAM,QAETA,uBAAgB,CAAA,MAAA;AAqBb,MAAM,cAETA,uBAAgB,CAAA,YAAA;AA+Bb,MAAM,iBAETA,uBAAgB,CAAA,eAAA;AAEb,MAAM,oBAAqB,CAAA;AAAA;AAElC,CAAA;AAKO,MAAM,iBAAoB,GAAAC,0BAAA;AAEjC,QAAe;AAAA,EACX,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,aACAC,mBAAA;AAAA,mBACAC,+BAAA;AAAA,EACA,iBAAA;AACJ,CAAA;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/lib/index.ts"],"sourcesContent":["import nodeDataChannel from './node-datachannel';\nimport _DataChannelStream from './datachannel-stream';\nimport { WebSocketServer } from './websocket-server';\nimport {\n Channel,\n DataChannelInitConfig,\n DescriptionType,\n Direction,\n LogLevel,\n RtcConfig,\n RTCIceConnectionState,\n RTCIceGatheringState,\n RTCPeerConnectionState,\n RTCSignalingState,\n SctpSettings,\n SelectedCandidateInfo,\n} from './types';\nimport { WebSocket } from './websocket';\n\nexport function preload(): void {\n nodeDataChannel.preload();\n}\nexport function initLogger(level: LogLevel): void {\n nodeDataChannel.initLogger(level);\n}\nexport function cleanup(): void {\n nodeDataChannel.cleanup();\n}\nexport function setSctpSettings(settings: SctpSettings): void {\n nodeDataChannel.setSctpSettings(settings);\n}\nexport function getLibraryVersion(): string {\n return nodeDataChannel.getLibraryVersion();\n}\n\nexport interface Audio {\n addAudioCodec(payloadType: number, codec: string, profile?: string): void;\n addOpusCodec(payloadType: number, profile?: string): string;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Audio: {\n new (mid: string, dir: Direction): Audio;\n} = nodeDataChannel.Audio;\n\nexport interface Video {\n addVideoCodec(payloadType: number, codec: string, profile?: string): void;\n addH264Codec(payloadType: number, profile?: string): void;\n addVP8Codec(payloadType: number): void;\n addVP9Codec(payloadType: number): void;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Video: {\n new (mid: string, dir: Direction): Video;\n} = nodeDataChannel.Video;\n\nexport interface Track {\n direction(): Direction;\n mid(): string;\n type(): string;\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer): boolean;\n isOpen(): boolean;\n isClosed(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n requestBitrate(bitRate: number): boolean;\n setBufferedAmountLowThreshold(newSize: number): void;\n requestKeyframe(): boolean;\n setMediaHandler(handler: RtcpReceivingSession): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onMessage(cb: (msg: Buffer) => void): void;\n}\nexport const Track: {\n new (): Track;\n} = nodeDataChannel.Track;\n\nexport interface DataChannel extends Channel {\n getLabel(): string;\n getId(): number;\n getProtocol(): string;\n\n // Channel implementation\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer | Uint8Array): boolean;\n isOpen(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n setBufferedAmountLowThreshold(newSize: number): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onBufferedAmountLow(cb: () => void): void;\n onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;\n}\nexport const DataChannel: {\n // DataChannel implementation\n} = nodeDataChannel.DataChannel;\n\nexport interface PeerConnection {\n close(): void;\n setLocalDescription(type?: DescriptionType): void;\n setRemoteDescription(sdp: string, type: DescriptionType): void;\n localDescription(): { type: DescriptionType; sdp: string } | null;\n remoteDescription(): { type: DescriptionType; sdp: string } | null;\n addRemoteCandidate(candidate: string, mid: string): void;\n createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;\n addTrack(media: Video | Audio): Track;\n hasMedia(): boolean;\n state(): RTCPeerConnectionState;\n iceState(): RTCIceConnectionState;\n signalingState(): RTCSignalingState;\n gatheringState(): RTCIceGatheringState;\n onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;\n onLocalCandidate(cb: (candidate: string, mid: string) => void): void;\n onStateChange(cb: (state: string) => void): void;\n onIceStateChange(cb: (state: string) => void): void;\n onSignalingStateChange(cb: (state: string) => void): void;\n onGatheringStateChange(cb: (state: string) => void): void;\n onDataChannel(cb: (dc: DataChannel) => void): void;\n onTrack(cb: (track: Track) => void): void;\n bytesSent(): number;\n bytesReceived(): number;\n rtt(): number;\n getSelectedCandidatePair(): {\n local: SelectedCandidateInfo;\n remote: SelectedCandidateInfo;\n } | null;\n maxDataChannelId(): number;\n maxMessageSize(): number;\n}\nexport const PeerConnection: {\n new (peerName: string, config: RtcConfig): PeerConnection;\n} = nodeDataChannel.PeerConnection;\n\nexport interface RtcpReceivingSession {}\n\nexport const RtcpReceivingSession: {\n new (): RtcpReceivingSession;\n} = nodeDataChannel.RtcpReceivingSession;\n\nexport { WebSocketServer } from './websocket-server';\nexport { WebSocket } from './websocket';\n\nexport const DataChannelStream = _DataChannelStream;\n\nexport default {\n initLogger,\n cleanup,\n preload,\n setSctpSettings,\n getLibraryVersion,\n RtcpReceivingSession,\n Track,\n Video,\n Audio,\n DataChannel,\n PeerConnection,\n WebSocket,\n WebSocketServer,\n DataChannelStream,\n};\n\n// Types\n// https://github.com/murat-dogan/node-datachannel/issues/300\nexport * from './types';\n"],"names":["nodeDataChannel","_DataChannelStream","WebSocket","WebSocketServer"],"mappings":";;;;;;;;;AAmBO,SAAS,OAAgB,GAAA;AAC9B,EAAAA,uBAAA,CAAgB,OAAQ,EAAA,CAAA;AAC1B,CAAA;AACO,SAAS,WAAW,KAAuB,EAAA;AAChD,EAAAA,uBAAA,CAAgB,WAAW,KAAK,CAAA,CAAA;AAClC,CAAA;AACO,SAAS,OAAgB,GAAA;AAC9B,EAAAA,uBAAA,CAAgB,OAAQ,EAAA,CAAA;AAC1B,CAAA;AACO,SAAS,gBAAgB,QAA8B,EAAA;AAC5D,EAAAA,uBAAA,CAAgB,gBAAgB,QAAQ,CAAA,CAAA;AAC1C,CAAA;AACO,SAAS,iBAA4B,GAAA;AAC1C,EAAA,OAAOA,wBAAgB,iBAAkB,EAAA,CAAA;AAC3C,CAAA;AAwBO,MAAM,QAETA,uBAAgB,CAAA,MAAA;AA0Bb,MAAM,QAETA,uBAAgB,CAAA,MAAA;AAsBb,MAAM,QAETA,uBAAgB,CAAA,MAAA;AAqBb,MAAM,cAETA,uBAAgB,CAAA,YAAA;AAkCb,MAAM,iBAETA,uBAAgB,CAAA,eAAA;AAIb,MAAM,uBAETA,uBAAgB,CAAA,qBAAA;AAKb,MAAM,iBAAoB,GAAAC,0BAAA;AAEjC,QAAe;AAAA,EACb,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,aACAC,mBAAA;AAAA,mBACAC,+BAAA;AAAA,EACA,iBAAA;AACF,CAAA;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-server.cjs","sources":["../../../src/lib/websocket-server.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport nodeDataChannel from './node-datachannel';\nimport { WebSocketServerConfiguration } from './types';\nimport { WebSocket } from './websocket';\n\nexport class WebSocketServer extends EventEmitter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #server: any;\n #clients: WebSocket[] = [];\n\n constructor(options: WebSocketServerConfiguration) {\n super();\n this.#server = new nodeDataChannel.WebSocketServer(options);\n\n this.#server.onClient((client) => {\n this.emit('client', client);\n this.#clients.push(client);\n });\n }\n\n port(): number {\n return this.#server?.port() || 0;\n }\n\n stop(): void {\n this.#clients.forEach((client) => {\n client?.close();\n });\n this.#server?.stop();\n this.#server = null;\n this.removeAllListeners();\n }\n\n onClient(cb: (clientSocket: WebSocket) => void): void {\n if (this.#server) this.on('client', cb);\n }\n}\n"],"names":["EventEmitter","nodeDataChannel"],"mappings":";;;;;;;;;;;;AAAA,IAAA,OAAA,EAAA,QAAA,CAAA;AAKO,MAAM,wBAAwBA,mBAAa,CAAA;AAAA,EAK9C,YAAY,OAAuC,EAAA;AAC/C,IAAM,KAAA,EAAA,CAAA;AAJV;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,EAAwB,EAAC,CAAA,CAAA;AAIrB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,IAAIC,uBAAgB,CAAA,eAAA,CAAgB,OAAO,CAAA,CAAA,CAAA;AAE1D,IAAK,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,QAAS,CAAA,CAAC,MAAW,KAAA;AAC9B,MAAK,IAAA,CAAA,IAAA,CAAK,UAAU,MAAM,CAAA,CAAA;AAC1B,MAAK,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,KAAK,MAAM,CAAA,CAAA;AAAA,KAC5B,CAAA,CAAA;AAAA,GACL;AAAA,EAEA,IAAe,GAAA;AACX,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,OAAS,CAAA,EAAA,IAAA,EAAU,IAAA,CAAA,CAAA;AAAA,GACnC;AAAA,EAEA,IAAa,GAAA;AACT,IAAK,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,OAAQ,CAAA,CAAC,MAAW,KAAA;AAC9B,MAAA,MAAA,EAAQ,KAAM,EAAA,CAAA;AAAA,KACjB,CAAA,CAAA;AACD,IAAA,YAAA,CAAA,IAAA,EAAK,UAAS,IAAK,EAAA,CAAA;AACnB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,IAAA,CAAA,CAAA;AACf,IAAA,IAAA,CAAK,kBAAmB,EAAA,CAAA;AAAA,GAC5B;AAAA,EAEA,SAAS,EAA6C,EAAA;AAClD,IAAA,IAAI,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,EAAc,IAAA,CAAA,EAAA,CAAG,UAAU,EAAE,CAAA,CAAA;AAAA,GAC1C;AACJ,CAAA;AA7BI,OAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
1
+ {"version":3,"file":"websocket-server.cjs","sources":["../../../src/lib/websocket-server.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport nodeDataChannel from './node-datachannel';\nimport { WebSocketServerConfiguration } from './types';\nimport { WebSocket } from './websocket';\n\nexport class WebSocketServer extends EventEmitter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #server: any;\n #clients: WebSocket[] = [];\n\n constructor(options: WebSocketServerConfiguration) {\n super();\n this.#server = new nodeDataChannel.WebSocketServer(options);\n\n this.#server.onClient((client) => {\n this.emit('client', client);\n this.#clients.push(client);\n });\n }\n\n port(): number {\n return this.#server?.port() || 0;\n }\n\n stop(): void {\n this.#clients.forEach((client) => {\n client?.close();\n });\n this.#server?.stop();\n this.#server = null;\n this.removeAllListeners();\n }\n\n onClient(cb: (clientSocket: WebSocket) => void): void {\n if (this.#server) this.on('client', cb);\n }\n}\n"],"names":["EventEmitter","nodeDataChannel"],"mappings":";;;;;;;;;;;;AAAA,IAAA,OAAA,EAAA,QAAA,CAAA;AAKO,MAAM,wBAAwBA,mBAAa,CAAA;AAAA,EAKhD,YAAY,OAAuC,EAAA;AACjD,IAAM,KAAA,EAAA,CAAA;AAJR;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,EAAwB,EAAC,CAAA,CAAA;AAIvB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,IAAIC,uBAAgB,CAAA,eAAA,CAAgB,OAAO,CAAA,CAAA,CAAA;AAE1D,IAAK,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,QAAS,CAAA,CAAC,MAAW,KAAA;AAChC,MAAK,IAAA,CAAA,IAAA,CAAK,UAAU,MAAM,CAAA,CAAA;AAC1B,MAAK,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,KAAK,MAAM,CAAA,CAAA;AAAA,KAC1B,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAe,GAAA;AACb,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,OAAS,CAAA,EAAA,IAAA,EAAU,IAAA,CAAA,CAAA;AAAA,GACjC;AAAA,EAEA,IAAa,GAAA;AACX,IAAK,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,OAAQ,CAAA,CAAC,MAAW,KAAA;AAChC,MAAA,MAAA,EAAQ,KAAM,EAAA,CAAA;AAAA,KACf,CAAA,CAAA;AACD,IAAA,YAAA,CAAA,IAAA,EAAK,UAAS,IAAK,EAAA,CAAA;AACnB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,IAAA,CAAA,CAAA;AACf,IAAA,IAAA,CAAK,kBAAmB,EAAA,CAAA;AAAA,GAC1B;AAAA,EAEA,SAAS,EAA6C,EAAA;AACpD,IAAA,IAAI,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,EAAc,IAAA,CAAA,EAAA,CAAG,UAAU,EAAE,CAAA,CAAA;AAAA,GACxC;AACF,CAAA;AA7BE,OAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.cjs","sources":["../../../src/lib/websocket.ts"],"sourcesContent":["import nodeDataChannel from './node-datachannel';\nimport { Channel, WebSocketServerConfiguration } from './types';\n\nexport interface WebSocket extends Channel {\n open(url: string): void;\n forceClose(): void;\n remoteAddress(): string | undefined;\n path(): string | undefined;\n\n // Channel implementation\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Uint8Array): boolean;\n isOpen(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n setBufferedAmountLowThreshold(newSize: number): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onBufferedAmountLow(cb: () => void): void;\n onMessage(cb: (msg: string | Buffer) => void): void;\n}\nexport const WebSocket: {\n new(config?: WebSocketServerConfiguration): WebSocket\n} = nodeDataChannel.WebSocket\n"],"names":["nodeDataChannel"],"mappings":";;;;AAuBO,MAAM,YAETA,uBAAgB,CAAA;;;;"}
1
+ {"version":3,"file":"websocket.cjs","sources":["../../../src/lib/websocket.ts"],"sourcesContent":["import nodeDataChannel from './node-datachannel';\nimport { Channel, WebSocketServerConfiguration } from './types';\n\nexport interface WebSocket extends Channel {\n open(url: string): void;\n forceClose(): void;\n remoteAddress(): string | undefined;\n path(): string | undefined;\n\n // Channel implementation\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Uint8Array): boolean;\n isOpen(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n setBufferedAmountLowThreshold(newSize: number): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onBufferedAmountLow(cb: () => void): void;\n onMessage(cb: (msg: string | Buffer) => void): void;\n}\nexport const WebSocket: {\n new (config?: WebSocketServerConfiguration): WebSocket;\n} = nodeDataChannel.WebSocket;\n"],"names":["nodeDataChannel"],"mappings":";;;;AAuBO,MAAM,YAETA,uBAAgB,CAAA;;;;"}
@@ -1,5 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ var RTCDataChannel = require('./RTCDataChannel.cjs');
4
+ var RTCError = require('./RTCError.cjs');
5
+
3
6
  var __typeError = (msg) => {
4
7
  throw TypeError(msg);
5
8
  };
@@ -7,7 +10,7 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
7
10
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
8
11
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
9
12
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
10
- var _candidate, _channel;
13
+ var _candidate, _channel, _error;
11
14
  class RTCPeerConnectionIceEvent extends Event {
12
15
  constructor(candidate) {
13
16
  super("icecandidate");
@@ -17,13 +20,31 @@ class RTCPeerConnectionIceEvent extends Event {
17
20
  get candidate() {
18
21
  return __privateGet(this, _candidate);
19
22
  }
23
+ get url() {
24
+ return "";
25
+ }
20
26
  }
21
27
  _candidate = new WeakMap();
22
28
  class RTCDataChannelEvent extends Event {
23
- constructor(type, eventInitDict) {
29
+ constructor(type = "datachannel", eventInitDict) {
24
30
  super(type);
25
31
  __privateAdd(this, _channel);
26
- if (type && !eventInitDict.channel) throw new TypeError("channel member is required");
32
+ if (arguments.length === 0)
33
+ throw new TypeError(
34
+ `Failed to construct 'RTCDataChannelEvent': 2 arguments required, but only ${arguments.length} present.`
35
+ );
36
+ if (typeof eventInitDict !== "object")
37
+ throw new TypeError(
38
+ "Failed to construct 'RTCDataChannelEvent': The provided value is not of type 'RTCDataChannelEventInit'."
39
+ );
40
+ if (!eventInitDict.channel)
41
+ throw new TypeError(
42
+ "Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Required member is undefined."
43
+ );
44
+ if (eventInitDict.channel.constructor !== RTCDataChannel.default)
45
+ throw new TypeError(
46
+ "Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Failed to convert value to 'RTCDataChannel'."
47
+ );
27
48
  __privateSet(this, _channel, eventInitDict?.channel);
28
49
  }
29
50
  get channel() {
@@ -31,7 +52,35 @@ class RTCDataChannelEvent extends Event {
31
52
  }
32
53
  }
33
54
  _channel = new WeakMap();
55
+ class RTCErrorEvent extends Event {
56
+ constructor(type, init) {
57
+ if (arguments.length < 2)
58
+ throw new TypeError(
59
+ `Failed to construct 'RTCErrorEvent': 2 arguments required, but only ${arguments.length} present.`
60
+ );
61
+ if (typeof init !== "object")
62
+ throw new TypeError(
63
+ "Failed to construct 'RTCErrorEvent': The provided value is not of type 'RTCErrorEventInit'."
64
+ );
65
+ if (!init.error)
66
+ throw new TypeError(
67
+ "Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Required member is undefined."
68
+ );
69
+ if (init.error.constructor !== RTCError.default)
70
+ throw new TypeError(
71
+ "Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Failed to convert value to 'RTCError'."
72
+ );
73
+ super(type || "error");
74
+ __privateAdd(this, _error);
75
+ __privateSet(this, _error, init.error);
76
+ }
77
+ get error() {
78
+ return __privateGet(this, _error);
79
+ }
80
+ }
81
+ _error = new WeakMap();
34
82
 
35
83
  exports.RTCDataChannelEvent = RTCDataChannelEvent;
84
+ exports.RTCErrorEvent = RTCErrorEvent;
36
85
  exports.RTCPeerConnectionIceEvent = RTCPeerConnectionIceEvent;
37
86
  //# sourceMappingURL=Events.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Events.cjs","sources":["../../../src/polyfill/Events.ts"],"sourcesContent":["import RTCDataChannel from './RTCDataChannel';\nimport RTCIceCandidate from './RTCIceCandidate';\n\n\nexport class RTCPeerConnectionIceEvent extends Event implements globalThis.RTCPeerConnectionIceEvent {\n #candidate: RTCIceCandidate;\n\n constructor(candidate: RTCIceCandidate) {\n super('icecandidate');\n\n this.#candidate = candidate;\n }\n\n get candidate(): RTCIceCandidate {\n return this.#candidate;\n }\n}\n\nexport class RTCDataChannelEvent extends Event implements globalThis.RTCDataChannelEvent {\n #channel: RTCDataChannel;\n\n constructor(type: string, eventInitDict: globalThis.RTCDataChannelEventInit) {\n super(type);\n\n if (type && !eventInitDict.channel) throw new TypeError('channel member is required');\n\n this.#channel = eventInitDict?.channel as RTCDataChannel;\n }\n\n get channel(): RTCDataChannel {\n return this.#channel;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAAA,IAAA,UAAA,EAAA,QAAA,CAAA;AAIO,MAAM,kCAAkC,KAAsD,CAAA;AAAA,EAGjG,YAAY,SAA4B,EAAA;AACpC,IAAA,KAAA,CAAM,cAAc,CAAA,CAAA;AAHxB,IAAA,YAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAKI,IAAA,YAAA,CAAA,IAAA,EAAK,UAAa,EAAA,SAAA,CAAA,CAAA;AAAA,GACtB;AAAA,EAEA,IAAI,SAA6B,GAAA;AAC7B,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAAA,GAChB;AACJ,CAAA;AAXI,UAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAaG,MAAM,4BAA4B,KAAgD,CAAA;AAAA,EAGrF,WAAA,CAAY,MAAc,aAAmD,EAAA;AACzE,IAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAHd,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAKI,IAAA,IAAI,QAAQ,CAAC,aAAA,CAAc,SAAe,MAAA,IAAI,UAAU,4BAA4B,CAAA,CAAA;AAEpF,IAAA,YAAA,CAAA,IAAA,EAAK,UAAW,aAAe,EAAA,OAAA,CAAA,CAAA;AAAA,GACnC;AAAA,EAEA,IAAI,OAA0B,GAAA;AAC1B,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GAChB;AACJ,CAAA;AAbI,QAAA,GAAA,IAAA,OAAA,EAAA;;;;;"}
1
+ {"version":3,"file":"Events.cjs","sources":["../../../src/polyfill/Events.ts"],"sourcesContent":["import RTCDataChannel from './RTCDataChannel';\nimport RTCError from './RTCError';\n\nexport class RTCPeerConnectionIceEvent extends Event implements globalThis.RTCPeerConnectionIceEvent {\n #candidate: globalThis.RTCIceCandidate;\n\n constructor(candidate: globalThis.RTCIceCandidate) {\n super('icecandidate');\n\n this.#candidate = candidate;\n }\n\n get candidate(): globalThis.RTCIceCandidate {\n return this.#candidate;\n }\n\n get url(): string {\n return '';\n }\n}\n\nexport class RTCDataChannelEvent extends Event implements globalThis.RTCDataChannelEvent {\n #channel: RTCDataChannel;\n\n constructor(type: string = 'datachannel', eventInitDict: globalThis.RTCDataChannelEventInit) {\n super(type);\n\n if (arguments.length === 0)\n throw new TypeError(\n `Failed to construct 'RTCDataChannelEvent': 2 arguments required, but only ${arguments.length} present.`,\n );\n if (typeof eventInitDict !== 'object')\n throw new TypeError(\n \"Failed to construct 'RTCDataChannelEvent': The provided value is not of type 'RTCDataChannelEventInit'.\",\n );\n if (!eventInitDict.channel)\n throw new TypeError(\n \"Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Required member is undefined.\",\n );\n if (eventInitDict.channel.constructor !== RTCDataChannel)\n throw new TypeError(\n \"Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Failed to convert value to 'RTCDataChannel'.\",\n );\n\n this.#channel = eventInitDict?.channel;\n }\n\n get channel(): RTCDataChannel {\n return this.#channel;\n }\n}\n\nexport class RTCErrorEvent extends Event implements globalThis.RTCErrorEvent {\n #error: RTCError;\n constructor(type: string, init: globalThis.RTCErrorEventInit) {\n if (arguments.length < 2)\n throw new TypeError(\n `Failed to construct 'RTCErrorEvent': 2 arguments required, but only ${arguments.length} present.`,\n );\n if (typeof init !== 'object')\n throw new TypeError(\n \"Failed to construct 'RTCErrorEvent': The provided value is not of type 'RTCErrorEventInit'.\",\n );\n if (!init.error)\n throw new TypeError(\n \"Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Required member is undefined.\",\n );\n if (init.error.constructor !== RTCError)\n throw new TypeError(\n \"Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Failed to convert value to 'RTCError'.\",\n );\n super(type || 'error');\n this.#error = init.error;\n }\n\n get error(): RTCError {\n return this.#error;\n }\n}\n"],"names":["RTCDataChannel","RTCError"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Exception.cjs","sources":["../../../src/polyfill/Exception.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\n\nexport class InvalidStateError extends DOMException {\n constructor(msg: string) {\n super(msg, 'InvalidStateError');\n }\n};\n\nexport class TypeError extends DOMException {\n constructor(msg: string) {\n super(msg, 'TypeError');\n }\n};\n\nexport class OperationError extends DOMException {\n constructor(msg: string) {\n super(msg, 'OperationError');\n }\n};\n\nexport class NotFoundError extends DOMException {\n constructor(msg: string) {\n super(msg, 'NotFoundError');\n }\n};\n\nexport class InvalidAccessError extends DOMException {\n constructor(msg: string) {\n super(msg, 'InvalidAccessError');\n }\n};\n\nexport class SyntaxError extends DOMException {\n constructor(msg: string) {\n super(msg, 'SyntaxError');\n }\n};\n"],"names":[],"mappings":";;AAEO,MAAM,0BAA0B,YAAa,CAAA;AAAA,EAChD,YAAY,GAAa,EAAA;AACrB,IAAA,KAAA,CAAM,KAAK,mBAAmB,CAAA,CAAA;AAAA,GAClC;AACJ,CAAA;AAQO,MAAM,uBAAuB,YAAa,CAAA;AAAA,EAC7C,YAAY,GAAa,EAAA;AACrB,IAAA,KAAA,CAAM,KAAK,gBAAgB,CAAA,CAAA;AAAA,GAC/B;AACJ,CAAA;AAEO,MAAM,sBAAsB,YAAa,CAAA;AAAA,EAC5C,YAAY,GAAa,EAAA;AACrB,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA,CAAA;AAAA,GAC9B;AACJ,CAAA;AAEO,MAAM,2BAA2B,YAAa,CAAA;AAAA,EACjD,YAAY,GAAa,EAAA;AACrB,IAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA,CAAA;AAAA,GACnC;AACJ,CAAA;AAEO,MAAM,oBAAoB,YAAa,CAAA;AAAA,EAC1C,YAAY,GAAa,EAAA;AACrB,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA,CAAA;AAAA,GAC5B;AACJ;;;;;;;;"}
1
+ {"version":3,"file":"Exception.cjs","sources":["../../../src/polyfill/Exception.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\n\nexport class InvalidStateError extends DOMException {\n constructor(msg: string) {\n super(msg, 'InvalidStateError');\n }\n}\n\nexport class TypeError extends DOMException {\n constructor(msg: string) {\n super(msg, 'TypeError');\n }\n}\n\nexport class OperationError extends DOMException {\n constructor(msg: string) {\n super(msg, 'OperationError');\n }\n}\n\nexport class NotFoundError extends DOMException {\n constructor(msg: string) {\n super(msg, 'NotFoundError');\n }\n}\n\nexport class InvalidAccessError extends DOMException {\n constructor(msg: string) {\n super(msg, 'InvalidAccessError');\n }\n}\n\nexport class SyntaxError extends DOMException {\n constructor(msg: string) {\n super(msg, 'SyntaxError');\n }\n}\n"],"names":[],"mappings":";;AAEO,MAAM,0BAA0B,YAAa,CAAA;AAAA,EAClD,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,mBAAmB,CAAA,CAAA;AAAA,GAChC;AACF,CAAA;AAQO,MAAM,uBAAuB,YAAa,CAAA;AAAA,EAC/C,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,gBAAgB,CAAA,CAAA;AAAA,GAC7B;AACF,CAAA;AAEO,MAAM,sBAAsB,YAAa,CAAA;AAAA,EAC9C,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA,CAAA;AAAA,GAC5B;AACF,CAAA;AAEO,MAAM,2BAA2B,YAAa,CAAA;AAAA,EACnD,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA,CAAA;AAAA,GACjC;AACF,CAAA;AAEO,MAAM,oBAAoB,YAAa,CAAA;AAAA,EAC5C,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA,CAAA;AAAA,GAC1B;AACF;;;;;;;;"}
@@ -12,8 +12,8 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
12
12
  var _expires, _fingerprints;
13
13
  class RTCCertificate {
14
14
  constructor() {
15
- __privateAdd(this, _expires);
16
- __privateAdd(this, _fingerprints);
15
+ __privateAdd(this, _expires, 0);
16
+ __privateAdd(this, _fingerprints, []);
17
17
  __privateSet(this, _expires, null);
18
18
  __privateSet(this, _fingerprints, []);
19
19
  }
@@ -23,6 +23,9 @@ class RTCCertificate {
23
23
  getFingerprints() {
24
24
  return __privateGet(this, _fingerprints);
25
25
  }
26
+ getAlgorithm() {
27
+ return "";
28
+ }
26
29
  }
27
30
  _expires = new WeakMap();
28
31
  _fingerprints = new WeakMap();
@@ -1 +1 @@
1
- {"version":3,"file":"RTCCertificate.cjs","sources":["../../../src/polyfill/RTCCertificate.ts"],"sourcesContent":["export default class RTCCertificate implements globalThis.RTCCertificate {\n #expires: number;\n #fingerprints: globalThis.RTCDtlsFingerprint[];\n\n constructor() {\n this.#expires = null;\n this.#fingerprints = [];\n }\n\n get expires(): number {\n return this.#expires;\n }\n\n getFingerprints(): globalThis.RTCDtlsFingerprint[] {\n return this.#fingerprints;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAAA,IAAA,QAAA,EAAA,aAAA,CAAA;AAAA,MAAqB,cAAoD,CAAA;AAAA,EAIrE,WAAc,GAAA;AAHd,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAGI,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,IAAA,CAAA,CAAA;AAChB,IAAA,YAAA,CAAA,IAAA,EAAK,eAAgB,EAAC,CAAA,CAAA;AAAA,GAC1B;AAAA,EAEA,IAAI,OAAkB,GAAA;AAClB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GAChB;AAAA,EAEA,eAAmD,GAAA;AAC/C,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAAA,GAChB;AACJ,CAAA;AAfI,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,aAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
1
+ {"version":3,"file":"RTCCertificate.cjs","sources":["../../../src/polyfill/RTCCertificate.ts"],"sourcesContent":["export default class RTCCertificate implements globalThis.RTCCertificate {\n #expires: number = 0;\n #fingerprints: globalThis.RTCDtlsFingerprint[] = [];\n\n constructor() {\n this.#expires = null;\n this.#fingerprints = [];\n }\n\n get expires(): number {\n return this.#expires;\n }\n\n getFingerprints(): globalThis.RTCDtlsFingerprint[] {\n return this.#fingerprints;\n }\n\n getAlgorithm(): string {\n return '';\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAAA,IAAA,QAAA,EAAA,aAAA,CAAA;AAAA,MAAqB,cAAoD,CAAA;AAAA,EAIvE,WAAc,GAAA;AAHd,IAAmB,YAAA,CAAA,IAAA,EAAA,QAAA,EAAA,CAAA,CAAA,CAAA;AACnB,IAAA,YAAA,CAAA,IAAA,EAAA,aAAA,EAAiD,EAAC,CAAA,CAAA;AAGhD,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,IAAA,CAAA,CAAA;AAChB,IAAA,YAAA,CAAA,IAAA,EAAK,eAAgB,EAAC,CAAA,CAAA;AAAA,GACxB;AAAA,EAEA,IAAI,OAAkB,GAAA;AACpB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,eAAmD,GAAA;AACjD,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,YAAuB,GAAA;AACrB,IAAO,OAAA,EAAA,CAAA;AAAA,GACT;AACF,CAAA;AAnBE,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,aAAA,GAAA,IAAA,OAAA,EAAA;;;;"}