Browse Source

int pro
Signed-off-by: Caner <40012261+Canees@users.noreply.github.com>

Caner 3 years ago
parent
commit
10f91a9669
4 changed files with 1189 additions and 0 deletions
  1. 69 0
      ffmpeg.js
  2. 79 0
      index.htm
  3. 1026 0
      package-lock.json
  4. 15 0
      package.json

+ 69 - 0
ffmpeg.js

@@ -0,0 +1,69 @@
+const { MediaStreamTrack, randomPort,  RTCPeerConnection,  RTCRtpCodecParameters,  RtpPacket } = require('werift')
+const {Server} = require('ws')
+const {createSocket} = require('dgram')
+const {exec} = require('child_process')
+
+
+// open answer.html
+
+const server = new Server({ port: 8888 });
+console.log("start");
+
+server.on("connection", async (socket) => {
+  const payloadType = 96;
+  const pc = new RTCPeerConnection({
+    codecs: {
+      audio: [],
+      video: [
+        new RTCRtpCodecParameters({
+          mimeType: "video/h264",
+          clockRate: 90000,
+          payloadType: payloadType,
+        }),
+      ],
+    },
+  });
+
+  const track = new MediaStreamTrack({ kind: "video" })
+  
+  randomPort().then((port) => {
+    const udp = createSocket("udp4");
+    udp.bind(port);
+    // test vp8
+    // exec(`D:/ffmpeg-4.4-full_build/bin/ffmpeg.exe -re -f lavfi -i testsrc=size=640x480:rate=30 -vcodec libvpx -cpu-used 5 -deadline 1 -g 10 -error-resilient 1 -auto-alt-ref 1 -f rtp rtp://127.0.0.1:${port}`,(error, stdout, stderr) => {
+    //   if (error) {
+    //     console.error(`exec error: ${error}`);
+    //     return;
+    //   }
+    //   console.log(`stdout: ${stdout}`);
+    //   console.error(`stderr: ${stderr}`);
+    // })
+
+    // video h264
+    exec(`D:/ffmpeg-4.4-full_build/bin/ffmpeg.exe -f dshow -video_size 640x480 -i video="Logitech HD Webcam C525" -pix_fmt yuv420p -c:v h264 -g 10 -preset ultrafast -tune zerolatency -f rtp rtp://127.0.0.1:${port}`,(error, stdout, stderr) => {
+      if (error) {
+        console.error(`exec error: ${error}`);
+        return;
+      }
+    })
+    
+    udp.on("message", (data) => {
+      const rtp = RtpPacket.deSerialize(data);
+      rtp.header.payloadType = payloadType;
+      track.writeRtp(rtp);
+    });
+
+  });
+
+  
+  pc.addTransceiver(track, { direction: "sendonly" });
+
+
+  await pc.setLocalDescription(await pc.createOffer());
+  const sdp = JSON.stringify(pc.localDescription);
+  socket.send(sdp);
+
+  socket.on("message", (data) => {
+    pc.setRemoteDescription(JSON.parse(data));
+  });
+});

+ 79 - 0
index.htm

@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html lang="ja">
+  <head>
+    <meta charset="UTF-8" />
+    <title>Answer</title>
+    <script
+      crossorigin
+      src="https://unpkg.com/react@16/umd/react.development.js"
+    ></script>
+    <script
+      crossorigin
+      src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"
+    ></script>
+    <script
+      crossorigin
+      src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"
+    ></script>
+    <script src="https://cdn.jsdelivr.net/npm/babel-regenerator-runtime@6.5.0/runtime.min.js"></script>
+  </head>
+  <body>
+    <div class="main">
+      <div class="section" id="app1"></div>
+    </div>
+    <script type="text/babel">
+      let rtc;
+
+      const App = () => {
+        const [log, setLog] = React.useState([]);
+        const videoRef = React.useRef();
+
+        React.useEffect(() => {
+          (async () => {
+            const socket = new WebSocket("ws://localhost:8888");
+            await new Promise((r) => (socket.onopen = r));
+            console.log("open websocket");
+
+            const offer = await new Promise(
+              (r) => (socket.onmessage = (ev) => r(JSON.parse(ev.data)))
+            );
+            console.log("offer", offer.sdp);
+
+            const peer = (rtc = new RTCPeerConnection({
+              iceServers: [],
+            }));
+            peer.onicecandidate = ({ candidate }) => {
+              if (!candidate) {
+                const sdp = JSON.stringify(peer.localDescription);
+                socket.send(sdp);
+              }
+            };
+            peer.oniceconnectionstatechange = () => {
+              console.log(
+                "oniceconnectionstatechange",
+                peer.iceConnectionState
+              );
+            };
+            peer.ontrack = (e) => {
+              console.log("ontrack", e);
+              videoRef.current.srcObject = e.streams[0];
+            };
+
+            await peer.setRemoteDescription(offer);
+            const answer = await peer.createAnswer();
+            await peer.setLocalDescription(answer);
+          })();
+        }, []);
+
+        return (
+          <div>
+            answer
+            <video ref={videoRef} autoPlay muted />
+          </div>
+        );
+      };
+
+      ReactDOM.render(<App />, document.getElementById("app1"));
+    </script>
+  </body>
+</html>

+ 1026 - 0
package-lock.json

@@ -0,0 +1,1026 @@
+{
+  "name": "test",
+  "version": "1.0.0",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "test",
+      "version": "1.0.0",
+      "license": "ISC",
+      "dependencies": {
+        "werift": "^0.15.8",
+        "ws": "^8.8.0"
+      }
+    },
+    "node_modules/@fidm/asn1": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/@fidm/asn1/-/asn1-1.0.4.tgz",
+      "integrity": "sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@fidm/x509": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@fidm/x509/-/x509-1.2.1.tgz",
+      "integrity": "sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==",
+      "dependencies": {
+        "@fidm/asn1": "^1.0.4",
+        "tweetnacl": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@minhducsun2002/leb128": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/@minhducsun2002/leb128/-/leb128-0.2.0.tgz",
+      "integrity": "sha512-XckPQO6CDP0LAg3ZHIBZcjIWXgdM5vGhwhixZU78UEwaXwc33LXPl1KfvV8jCyrdU2YzplCvaNK3Mm0MDh6t1Q=="
+    },
+    "node_modules/@peculiar/asn1-cms": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-cms/-/asn1-cms-2.2.0.tgz",
+      "integrity": "sha512-8lJe4OC83NUA/rP4/J8Zjd3Lsxbx8lkBcVWDkUJNFAsfWqDdhlwmNyhg8h0x0jr8NJ6QOCTwJ18VIs58X54/ow==",
+      "dependencies": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "@peculiar/asn1-x509-attr": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/asn1-csr": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-csr/-/asn1-csr-2.2.0.tgz",
+      "integrity": "sha512-kj/pjv+Mn0culffDaxjaInZPvoAcJUuJvk3JUeGNoe5N9pIK6Bcrtt7dfA1u+NgI7K1y1TBDAzTQoYxfxmsRbA==",
+      "dependencies": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/asn1-ecc": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-ecc/-/asn1-ecc-2.2.0.tgz",
+      "integrity": "sha512-/fMm9loLLLQcbZSGM0B4eNedgmagJPvwqklVRtG8OBTLidKZN3U/dmiemiKx8hf3w5IYwu52OxMSch88BHpuGQ==",
+      "dependencies": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/asn1-pfx": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-pfx/-/asn1-pfx-2.2.0.tgz",
+      "integrity": "sha512-FrGzBQpVr2IwY6iYcmN5cp8IRGDhDsM+EzBRUs6fodvAGm8cchGid9WZszqRpBG8YCOBZXZ38bR0r6gdmH9q7g==",
+      "dependencies": {
+        "@peculiar/asn1-cms": "^2.2.0",
+        "@peculiar/asn1-pkcs8": "^2.2.0",
+        "@peculiar/asn1-rsa": "^2.2.0",
+        "@peculiar/asn1-schema": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/asn1-pkcs8": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.2.0.tgz",
+      "integrity": "sha512-tbVTUYevN1PftXz8qKvvddroGC1nHZtvsVCTRMGwMV9x5MNs6YWqxAkM5jAV75PVfwQvWSbrvQmQlo2epBYjtg==",
+      "dependencies": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/asn1-pkcs9": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.2.0.tgz",
+      "integrity": "sha512-gJPS7/64OjQSFPFBys2klRb32bKBCraPOmrfzuTM3FvUh+yroomG8RBtnDR4Xn8QxzOIwvMape+FqPsNQ2ldPg==",
+      "dependencies": {
+        "@peculiar/asn1-cms": "^2.2.0",
+        "@peculiar/asn1-pfx": "^2.2.0",
+        "@peculiar/asn1-pkcs8": "^2.2.0",
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "@peculiar/asn1-x509-attr": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/asn1-rsa": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-rsa/-/asn1-rsa-2.2.0.tgz",
+      "integrity": "sha512-t6CIvXYpjEzos5iXwg6QSFdKce3c3Iw9M658qARdIpbWDvosNHeVn7e97IYdmJU0sDS4ech1aS2GLuKFFKmcew==",
+      "dependencies": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/asn1-schema": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-schema/-/asn1-schema-2.2.0.tgz",
+      "integrity": "sha512-1ENEJNY7Lwlua/1wvzpYP194WtjQBfFxvde2FlzfBFh/ln6wvChrtxlORhbKEnYswzn6fOC4c7HdC5izLPMTJg==",
+      "dependencies": {
+        "asn1js": "^3.0.5",
+        "pvtsutils": "^1.3.2",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/asn1-x509": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-x509/-/asn1-x509-2.2.0.tgz",
+      "integrity": "sha512-YORcf7XFy9TKWGnPmK2MNQqAJgIvGNaCrK8vUF/ZRO+BnahZJOgX2HuEiEmoAozZpSlyJnI6CGJOABOjPiDucA==",
+      "dependencies": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "ipaddr.js": "^2.0.1",
+        "pvtsutils": "^1.3.2",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/asn1-x509-attr": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.2.0.tgz",
+      "integrity": "sha512-SWX6pYWTxNy2bBcvOJriBhC7CaqvD9JQ+XUWrmiVrbw8hmzJS3Jcv6JMRfSuitjmmEE+W2wvY0s8zmghDrQK+A==",
+      "dependencies": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@peculiar/json-schema": {
+      "version": "1.1.12",
+      "resolved": "https://registry.npmmirror.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz",
+      "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==",
+      "dependencies": {
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/@peculiar/webcrypto": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/webcrypto/-/webcrypto-1.4.0.tgz",
+      "integrity": "sha512-U58N44b2m3OuTgpmKgf0LPDOmP3bhwNz01vAnj1mBwxBASRhptWYK+M3zG+HBkDqGQM+bFsoIihTW8MdmPXEqg==",
+      "dependencies": {
+        "@peculiar/asn1-schema": "^2.1.6",
+        "@peculiar/json-schema": "^1.1.12",
+        "pvtsutils": "^1.3.2",
+        "tslib": "^2.4.0",
+        "webcrypto-core": "^1.7.4"
+      },
+      "engines": {
+        "node": ">=10.12.0"
+      }
+    },
+    "node_modules/@peculiar/x509": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmmirror.com/@peculiar/x509/-/x509-1.7.2.tgz",
+      "integrity": "sha512-yMECIsGaRBWV2GFLVxTFD6L9zdRcaFWOQO5MKPHACE4vz/7GJzRfW3trehL5KnvSnQHPXAmt8zPGLctjn488/w==",
+      "dependencies": {
+        "@peculiar/asn1-cms": "^2.1.9",
+        "@peculiar/asn1-csr": "^2.1.9",
+        "@peculiar/asn1-ecc": "^2.1.9",
+        "@peculiar/asn1-pkcs9": "^2.1.9",
+        "@peculiar/asn1-rsa": "^2.1.9",
+        "@peculiar/asn1-schema": "^2.1.9",
+        "@peculiar/asn1-x509": "^2.1.9",
+        "pvtsutils": "^1.3.2",
+        "reflect-metadata": "^0.1.13",
+        "tslib": "^2.4.0",
+        "tsyringe": "^4.7.0"
+      }
+    },
+    "node_modules/@shinyoshiaki/ebml-builder": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/@shinyoshiaki/ebml-builder/-/ebml-builder-0.0.1.tgz",
+      "integrity": "sha512-rz1LklnlZ0yvVIt924yRGu+R87Fhfa06BdRIZR6GF6SXVSBTD9wCQmN6opXQLuSkoKXleWJwF3PW1ls8DGZjtw==",
+      "dependencies": {
+        "lodash.memoize": "^4.1.2"
+      }
+    },
+    "node_modules/aes-js": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/aes-js/-/aes-js-3.1.2.tgz",
+      "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ=="
+    },
+    "node_modules/asn1js": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmmirror.com/asn1js/-/asn1js-3.0.5.tgz",
+      "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==",
+      "dependencies": {
+        "pvtsutils": "^1.3.2",
+        "pvutils": "^1.1.3",
+        "tslib": "^2.4.0"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/big-integer": {
+      "version": "1.6.51",
+      "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.51.tgz",
+      "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/binary-data": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmmirror.com/binary-data/-/binary-data-0.6.0.tgz",
+      "integrity": "sha512-HGiT0ir03tS1u7iWdW5xjJfbPpvxH2qJbPFxXW0I3P5iOzkbjN/cJy5GlpAwmjHW5CiayGOxZ/ytLzXmYgdgqQ==",
+      "dependencies": {
+        "generate-function": "^2.3.1",
+        "is-plain-object": "^2.0.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/bn.js": {
+      "version": "4.12.0",
+      "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz",
+      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
+    },
+    "node_modules/brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="
+    },
+    "node_modules/buffer-crc32": {
+      "version": "0.2.13",
+      "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+      "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/date-fns": {
+      "version": "2.28.0",
+      "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.28.0.tgz",
+      "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==",
+      "engines": {
+        "node": ">=0.11"
+      }
+    },
+    "node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/elliptic": {
+      "version": "6.5.4",
+      "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz",
+      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+      "dependencies": {
+        "bn.js": "^4.11.9",
+        "brorand": "^1.1.0",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.1",
+        "inherits": "^2.0.4",
+        "minimalistic-assert": "^1.0.1",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "node_modules/generate-function": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/generate-function/-/generate-function-2.3.1.tgz",
+      "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+      "dependencies": {
+        "is-property": "^1.0.2"
+      }
+    },
+    "node_modules/hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "node_modules/hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+      "dependencies": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "node_modules/int64-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/int64-buffer/-/int64-buffer-1.0.1.tgz",
+      "integrity": "sha512-+3azY4pXrjAupJHU1V9uGERWlhoqNswJNji6aD/02xac7oxol508AsMC5lxKhEqyZeDFy3enq5OGWXF4u75hiw==",
+      "engines": {
+        "node": ">= 4.5.0"
+      }
+    },
+    "node_modules/ip": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmmirror.com/ip/-/ip-1.1.8.tgz",
+      "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="
+    },
+    "node_modules/ipaddr.js": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
+      "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "dependencies": {
+        "isobject": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-property": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-property/-/is-property-1.0.2.tgz",
+      "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
+    },
+    "node_modules/isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/jspack": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmmirror.com/jspack/-/jspack-0.0.4.tgz",
+      "integrity": "sha512-DC/lSTXYDDdYWzyY/9A1kMzp6Ov9mCRhZQ1cGg4te2w3y4/aKZTSspvbYN4LUsvSzMCb/H8z4TV9mYYW/bs3PQ=="
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+    },
+    "node_modules/lodash.memoize": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
+    },
+    "node_modules/minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+    },
+    "node_modules/minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
+    },
+    "node_modules/ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "node_modules/nano-time": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/nano-time/-/nano-time-1.0.0.tgz",
+      "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==",
+      "dependencies": {
+        "big-integer": "^1.6.16"
+      }
+    },
+    "node_modules/p-cancelable": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-2.1.1.tgz",
+      "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pvtsutils": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmmirror.com/pvtsutils/-/pvtsutils-1.3.2.tgz",
+      "integrity": "sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==",
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/pvutils": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/pvutils/-/pvutils-1.1.3.tgz",
+      "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/reflect-metadata": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
+      "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
+    },
+    "node_modules/rx.mini": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/rx.mini/-/rx.mini-1.1.0.tgz",
+      "integrity": "sha512-SgejtK4cAYpORQeIfwY8DWkanwhi8DAmlJKaUjmcPjNlq6OLBix0qVTYtj2aXxh7tsvO34hd4PQpP263ZrcwYg=="
+    },
+    "node_modules/tslib": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz",
+      "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
+    },
+    "node_modules/tsyringe": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmmirror.com/tsyringe/-/tsyringe-4.7.0.tgz",
+      "integrity": "sha512-ncFDM1jTLsok4ejMvSW5jN1VGPQD48y2tfAR0pdptWRKYX4bkbqPt92k7KJ5RFJ1KV36JEs/+TMh7I6OUgj74g==",
+      "dependencies": {
+        "tslib": "^1.9.3"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
+    "node_modules/tsyringe/node_modules/tslib": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz",
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+    },
+    "node_modules/turbo-crc32": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/turbo-crc32/-/turbo-crc32-1.0.1.tgz",
+      "integrity": "sha512-8yyRd1ZdNp+AQLGqi3lTaA2k81JjlIZOyFQEsi7GQWBgirnQOxjqVtDEbYHM2Z4yFdJ5AQw0fxBLLnDCl6RXoQ==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/tweetnacl": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-1.0.3.tgz",
+      "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
+    },
+    "node_modules/uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
+    "node_modules/webcrypto-core": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/webcrypto-core/-/webcrypto-core-1.7.5.tgz",
+      "integrity": "sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==",
+      "dependencies": {
+        "@peculiar/asn1-schema": "^2.1.6",
+        "@peculiar/json-schema": "^1.1.12",
+        "asn1js": "^3.0.1",
+        "pvtsutils": "^1.3.2",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/werift": {
+      "version": "0.15.8",
+      "resolved": "https://registry.npmmirror.com/werift/-/werift-0.15.8.tgz",
+      "integrity": "sha512-hfuG1OPcHnvLOyD4rIXrqQcavGvbo1z1xZuS0WeMzwmQi5M636CFR8gpgdLV4qh9cRlFmmHSfSd8ZjfoUJL6ZQ==",
+      "dependencies": {
+        "@fidm/x509": "^1.2.1",
+        "@minhducsun2002/leb128": "^0.2.0",
+        "@peculiar/webcrypto": "^1.4.0",
+        "@peculiar/x509": "^1.7.2",
+        "@shinyoshiaki/ebml-builder": "^0.0.1",
+        "aes-js": "^3.1.2",
+        "binary-data": "^0.6.0",
+        "buffer-crc32": "^0.2.13",
+        "date-fns": "^2.28.0",
+        "debug": "^4.3.4",
+        "elliptic": "^6.5.3",
+        "int64-buffer": "^1.0.1",
+        "ip": "^1.1.8",
+        "jspack": "^0.0.4",
+        "lodash": "^4.17.20",
+        "nano-time": "^1.0.0",
+        "p-cancelable": "^2.1.1",
+        "rx.mini": "^1.1.0",
+        "turbo-crc32": "^1.0.1",
+        "tweetnacl": "^1.0.3",
+        "uuid": "^8.3.2"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/ws": {
+      "version": "8.8.0",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.8.0.tgz",
+      "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==",
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": "^5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    }
+  },
+  "dependencies": {
+    "@fidm/asn1": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/@fidm/asn1/-/asn1-1.0.4.tgz",
+      "integrity": "sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ=="
+    },
+    "@fidm/x509": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@fidm/x509/-/x509-1.2.1.tgz",
+      "integrity": "sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==",
+      "requires": {
+        "@fidm/asn1": "^1.0.4",
+        "tweetnacl": "^1.0.1"
+      }
+    },
+    "@minhducsun2002/leb128": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/@minhducsun2002/leb128/-/leb128-0.2.0.tgz",
+      "integrity": "sha512-XckPQO6CDP0LAg3ZHIBZcjIWXgdM5vGhwhixZU78UEwaXwc33LXPl1KfvV8jCyrdU2YzplCvaNK3Mm0MDh6t1Q=="
+    },
+    "@peculiar/asn1-cms": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-cms/-/asn1-cms-2.2.0.tgz",
+      "integrity": "sha512-8lJe4OC83NUA/rP4/J8Zjd3Lsxbx8lkBcVWDkUJNFAsfWqDdhlwmNyhg8h0x0jr8NJ6QOCTwJ18VIs58X54/ow==",
+      "requires": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "@peculiar/asn1-x509-attr": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/asn1-csr": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-csr/-/asn1-csr-2.2.0.tgz",
+      "integrity": "sha512-kj/pjv+Mn0culffDaxjaInZPvoAcJUuJvk3JUeGNoe5N9pIK6Bcrtt7dfA1u+NgI7K1y1TBDAzTQoYxfxmsRbA==",
+      "requires": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/asn1-ecc": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-ecc/-/asn1-ecc-2.2.0.tgz",
+      "integrity": "sha512-/fMm9loLLLQcbZSGM0B4eNedgmagJPvwqklVRtG8OBTLidKZN3U/dmiemiKx8hf3w5IYwu52OxMSch88BHpuGQ==",
+      "requires": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/asn1-pfx": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-pfx/-/asn1-pfx-2.2.0.tgz",
+      "integrity": "sha512-FrGzBQpVr2IwY6iYcmN5cp8IRGDhDsM+EzBRUs6fodvAGm8cchGid9WZszqRpBG8YCOBZXZ38bR0r6gdmH9q7g==",
+      "requires": {
+        "@peculiar/asn1-cms": "^2.2.0",
+        "@peculiar/asn1-pkcs8": "^2.2.0",
+        "@peculiar/asn1-rsa": "^2.2.0",
+        "@peculiar/asn1-schema": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/asn1-pkcs8": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.2.0.tgz",
+      "integrity": "sha512-tbVTUYevN1PftXz8qKvvddroGC1nHZtvsVCTRMGwMV9x5MNs6YWqxAkM5jAV75PVfwQvWSbrvQmQlo2epBYjtg==",
+      "requires": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/asn1-pkcs9": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.2.0.tgz",
+      "integrity": "sha512-gJPS7/64OjQSFPFBys2klRb32bKBCraPOmrfzuTM3FvUh+yroomG8RBtnDR4Xn8QxzOIwvMape+FqPsNQ2ldPg==",
+      "requires": {
+        "@peculiar/asn1-cms": "^2.2.0",
+        "@peculiar/asn1-pfx": "^2.2.0",
+        "@peculiar/asn1-pkcs8": "^2.2.0",
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "@peculiar/asn1-x509-attr": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/asn1-rsa": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-rsa/-/asn1-rsa-2.2.0.tgz",
+      "integrity": "sha512-t6CIvXYpjEzos5iXwg6QSFdKce3c3Iw9M658qARdIpbWDvosNHeVn7e97IYdmJU0sDS4ech1aS2GLuKFFKmcew==",
+      "requires": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/asn1-schema": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-schema/-/asn1-schema-2.2.0.tgz",
+      "integrity": "sha512-1ENEJNY7Lwlua/1wvzpYP194WtjQBfFxvde2FlzfBFh/ln6wvChrtxlORhbKEnYswzn6fOC4c7HdC5izLPMTJg==",
+      "requires": {
+        "asn1js": "^3.0.5",
+        "pvtsutils": "^1.3.2",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/asn1-x509": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-x509/-/asn1-x509-2.2.0.tgz",
+      "integrity": "sha512-YORcf7XFy9TKWGnPmK2MNQqAJgIvGNaCrK8vUF/ZRO+BnahZJOgX2HuEiEmoAozZpSlyJnI6CGJOABOjPiDucA==",
+      "requires": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "ipaddr.js": "^2.0.1",
+        "pvtsutils": "^1.3.2",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/asn1-x509-attr": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.2.0.tgz",
+      "integrity": "sha512-SWX6pYWTxNy2bBcvOJriBhC7CaqvD9JQ+XUWrmiVrbw8hmzJS3Jcv6JMRfSuitjmmEE+W2wvY0s8zmghDrQK+A==",
+      "requires": {
+        "@peculiar/asn1-schema": "^2.2.0",
+        "@peculiar/asn1-x509": "^2.2.0",
+        "asn1js": "^3.0.5",
+        "tslib": "^2.4.0"
+      }
+    },
+    "@peculiar/json-schema": {
+      "version": "1.1.12",
+      "resolved": "https://registry.npmmirror.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz",
+      "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==",
+      "requires": {
+        "tslib": "^2.0.0"
+      }
+    },
+    "@peculiar/webcrypto": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/@peculiar/webcrypto/-/webcrypto-1.4.0.tgz",
+      "integrity": "sha512-U58N44b2m3OuTgpmKgf0LPDOmP3bhwNz01vAnj1mBwxBASRhptWYK+M3zG+HBkDqGQM+bFsoIihTW8MdmPXEqg==",
+      "requires": {
+        "@peculiar/asn1-schema": "^2.1.6",
+        "@peculiar/json-schema": "^1.1.12",
+        "pvtsutils": "^1.3.2",
+        "tslib": "^2.4.0",
+        "webcrypto-core": "^1.7.4"
+      }
+    },
+    "@peculiar/x509": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmmirror.com/@peculiar/x509/-/x509-1.7.2.tgz",
+      "integrity": "sha512-yMECIsGaRBWV2GFLVxTFD6L9zdRcaFWOQO5MKPHACE4vz/7GJzRfW3trehL5KnvSnQHPXAmt8zPGLctjn488/w==",
+      "requires": {
+        "@peculiar/asn1-cms": "^2.1.9",
+        "@peculiar/asn1-csr": "^2.1.9",
+        "@peculiar/asn1-ecc": "^2.1.9",
+        "@peculiar/asn1-pkcs9": "^2.1.9",
+        "@peculiar/asn1-rsa": "^2.1.9",
+        "@peculiar/asn1-schema": "^2.1.9",
+        "@peculiar/asn1-x509": "^2.1.9",
+        "pvtsutils": "^1.3.2",
+        "reflect-metadata": "^0.1.13",
+        "tslib": "^2.4.0",
+        "tsyringe": "^4.7.0"
+      }
+    },
+    "@shinyoshiaki/ebml-builder": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/@shinyoshiaki/ebml-builder/-/ebml-builder-0.0.1.tgz",
+      "integrity": "sha512-rz1LklnlZ0yvVIt924yRGu+R87Fhfa06BdRIZR6GF6SXVSBTD9wCQmN6opXQLuSkoKXleWJwF3PW1ls8DGZjtw==",
+      "requires": {
+        "lodash.memoize": "^4.1.2"
+      }
+    },
+    "aes-js": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/aes-js/-/aes-js-3.1.2.tgz",
+      "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ=="
+    },
+    "asn1js": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmmirror.com/asn1js/-/asn1js-3.0.5.tgz",
+      "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==",
+      "requires": {
+        "pvtsutils": "^1.3.2",
+        "pvutils": "^1.1.3",
+        "tslib": "^2.4.0"
+      }
+    },
+    "big-integer": {
+      "version": "1.6.51",
+      "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.51.tgz",
+      "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg=="
+    },
+    "binary-data": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmmirror.com/binary-data/-/binary-data-0.6.0.tgz",
+      "integrity": "sha512-HGiT0ir03tS1u7iWdW5xjJfbPpvxH2qJbPFxXW0I3P5iOzkbjN/cJy5GlpAwmjHW5CiayGOxZ/ytLzXmYgdgqQ==",
+      "requires": {
+        "generate-function": "^2.3.1",
+        "is-plain-object": "^2.0.3"
+      }
+    },
+    "bn.js": {
+      "version": "4.12.0",
+      "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz",
+      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="
+    },
+    "buffer-crc32": {
+      "version": "0.2.13",
+      "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+      "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="
+    },
+    "date-fns": {
+      "version": "2.28.0",
+      "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.28.0.tgz",
+      "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw=="
+    },
+    "debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "requires": {
+        "ms": "2.1.2"
+      }
+    },
+    "elliptic": {
+      "version": "6.5.4",
+      "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz",
+      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+      "requires": {
+        "bn.js": "^4.11.9",
+        "brorand": "^1.1.0",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.1",
+        "inherits": "^2.0.4",
+        "minimalistic-assert": "^1.0.1",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "generate-function": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/generate-function/-/generate-function-2.3.1.tgz",
+      "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+      "requires": {
+        "is-property": "^1.0.2"
+      }
+    },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+      "requires": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "int64-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/int64-buffer/-/int64-buffer-1.0.1.tgz",
+      "integrity": "sha512-+3azY4pXrjAupJHU1V9uGERWlhoqNswJNji6aD/02xac7oxol508AsMC5lxKhEqyZeDFy3enq5OGWXF4u75hiw=="
+    },
+    "ip": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmmirror.com/ip/-/ip-1.1.8.tgz",
+      "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="
+    },
+    "ipaddr.js": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
+      "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng=="
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-property": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-property/-/is-property-1.0.2.tgz",
+      "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg=="
+    },
+    "jspack": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmmirror.com/jspack/-/jspack-0.0.4.tgz",
+      "integrity": "sha512-DC/lSTXYDDdYWzyY/9A1kMzp6Ov9mCRhZQ1cGg4te2w3y4/aKZTSspvbYN4LUsvSzMCb/H8z4TV9mYYW/bs3PQ=="
+    },
+    "lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+    },
+    "lodash.memoize": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
+    },
+    "minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+    },
+    "minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
+    },
+    "ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "nano-time": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/nano-time/-/nano-time-1.0.0.tgz",
+      "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==",
+      "requires": {
+        "big-integer": "^1.6.16"
+      }
+    },
+    "p-cancelable": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-2.1.1.tgz",
+      "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="
+    },
+    "pvtsutils": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmmirror.com/pvtsutils/-/pvtsutils-1.3.2.tgz",
+      "integrity": "sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==",
+      "requires": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "pvutils": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/pvutils/-/pvutils-1.1.3.tgz",
+      "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ=="
+    },
+    "reflect-metadata": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
+      "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
+    },
+    "rx.mini": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/rx.mini/-/rx.mini-1.1.0.tgz",
+      "integrity": "sha512-SgejtK4cAYpORQeIfwY8DWkanwhi8DAmlJKaUjmcPjNlq6OLBix0qVTYtj2aXxh7tsvO34hd4PQpP263ZrcwYg=="
+    },
+    "tslib": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz",
+      "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
+    },
+    "tsyringe": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmmirror.com/tsyringe/-/tsyringe-4.7.0.tgz",
+      "integrity": "sha512-ncFDM1jTLsok4ejMvSW5jN1VGPQD48y2tfAR0pdptWRKYX4bkbqPt92k7KJ5RFJ1KV36JEs/+TMh7I6OUgj74g==",
+      "requires": {
+        "tslib": "^1.9.3"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.14.1",
+          "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz",
+          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+        }
+      }
+    },
+    "turbo-crc32": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/turbo-crc32/-/turbo-crc32-1.0.1.tgz",
+      "integrity": "sha512-8yyRd1ZdNp+AQLGqi3lTaA2k81JjlIZOyFQEsi7GQWBgirnQOxjqVtDEbYHM2Z4yFdJ5AQw0fxBLLnDCl6RXoQ=="
+    },
+    "tweetnacl": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-1.0.3.tgz",
+      "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
+    },
+    "uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+    },
+    "webcrypto-core": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/webcrypto-core/-/webcrypto-core-1.7.5.tgz",
+      "integrity": "sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==",
+      "requires": {
+        "@peculiar/asn1-schema": "^2.1.6",
+        "@peculiar/json-schema": "^1.1.12",
+        "asn1js": "^3.0.1",
+        "pvtsutils": "^1.3.2",
+        "tslib": "^2.4.0"
+      }
+    },
+    "werift": {
+      "version": "0.15.8",
+      "resolved": "https://registry.npmmirror.com/werift/-/werift-0.15.8.tgz",
+      "integrity": "sha512-hfuG1OPcHnvLOyD4rIXrqQcavGvbo1z1xZuS0WeMzwmQi5M636CFR8gpgdLV4qh9cRlFmmHSfSd8ZjfoUJL6ZQ==",
+      "requires": {
+        "@fidm/x509": "^1.2.1",
+        "@minhducsun2002/leb128": "^0.2.0",
+        "@peculiar/webcrypto": "^1.4.0",
+        "@peculiar/x509": "^1.7.2",
+        "@shinyoshiaki/ebml-builder": "^0.0.1",
+        "aes-js": "^3.1.2",
+        "binary-data": "^0.6.0",
+        "buffer-crc32": "^0.2.13",
+        "date-fns": "^2.28.0",
+        "debug": "^4.3.4",
+        "elliptic": "^6.5.3",
+        "int64-buffer": "^1.0.1",
+        "ip": "^1.1.8",
+        "jspack": "^0.0.4",
+        "lodash": "^4.17.20",
+        "nano-time": "^1.0.0",
+        "p-cancelable": "^2.1.1",
+        "rx.mini": "^1.1.0",
+        "turbo-crc32": "^1.0.1",
+        "tweetnacl": "^1.0.3",
+        "uuid": "^8.3.2"
+      }
+    },
+    "ws": {
+      "version": "8.8.0",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.8.0.tgz",
+      "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==",
+      "requires": {}
+    }
+  }
+}

+ 15 - 0
package.json

@@ -0,0 +1,15 @@
+{
+  "name": "test",
+  "version": "1.0.0",
+  "description": "",
+  "main": "ffmpeg.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "werift": "^0.15.8",
+    "ws": "^8.8.0"
+  }
+}