├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── server └── laf │ └── __websocket__ ├── src ├── bin │ └── ftong.ts ├── common │ ├── common.ts │ ├── event.ts │ └── server.ts ├── index.ts └── types │ └── wrtc.d.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | tmp 3 | dist 4 | package -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM node:16-bullseye-slim AS build 3 | # 设置工作目录 4 | WORKDIR /app 5 | # 复制 package.json 和 package-lock.json 6 | COPY package*.json ./ 7 | # 安装依赖 8 | RUN npm install --production && npm i typescript -g 9 | # 复制代码 10 | COPY . . 11 | # 构建项目 12 | RUN tsc 13 | 14 | FROM node:16-bullseye-slim AS production 15 | # 设定工作目录 16 | WORKDIR /app 17 | # 拷贝 package.json 和 package-lock.json 文件到容器内 18 | COPY package*.json ./ 19 | # 安装依赖 20 | RUN npm install --production 21 | # link 22 | RUN npm link 23 | # 复制代码 24 | COPY --from=build /app/dist ./dist 25 | # CMD 26 | CMD ["npm","run","bin","--","-r"] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ftong 2 | 3 | > 利用Webrtc进行P2P传输文件的小工具 4 | 5 | 开发背景是个人需要从服务器上传输文件到家里内网中的nas服务器,便开发出来的小工具。文件传输使用P2P传输,双方都无需有公网ip。 6 | 7 | ## 使用指南 8 | 9 | 接收 10 | 11 | ```sh 12 | ftong -r 13 | # 获得id可在发送时使用 14 | ``` 15 | 16 | 发送 17 | 18 | ```sh 19 | ftong -s -t xxx -f foo.png 20 | ``` 21 | 22 | ### 安装 23 | 24 | 25 | > 可执行文件 26 | 27 | 自行到releases下载对应平台执行文件 28 | 29 | ```sh 30 | wget xxx 31 | mv ftong-linux-x64 ftong 32 | ftong -r 33 | ``` 34 | 35 | > 编译 36 | 37 | ```sh 38 | git clone https://github.com/mtnbgx/ftong.git 39 | npm install 40 | npx tsc 41 | npm link 42 | ftong -r 43 | ``` 44 | 45 | ## 私有部署服务端 46 | 47 | 这里首先感谢laf免费提供的云函数 48 | 49 | 正常是无需部署服务端的,默认连接的是我部署上去的云函数,当然你有需要也可以自己部署一个 50 | 51 | ### 服务端源码 52 | > server/laf 53 | 54 | ### 相关引用 55 | - [Laf文档](https://doc.laf.run/guide/function/) 56 | 57 | - [Laf的Websocket](https://doc.laf.run/guide/function/websocket.html) 58 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ftong", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "ftong", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "commander": "^10.0.1", 13 | "simple-peer": "^9.11.1", 14 | "wrtc": "^0.4.7", 15 | "ws": "^8.13.0" 16 | }, 17 | "bin": { 18 | "ftong": "dist/bin/ftong.js" 19 | }, 20 | "devDependencies": { 21 | "@types/node": "^18.16.3", 22 | "@types/simple-peer": "^9.11.5", 23 | "@types/ws": "^8.5.4", 24 | "ts-node": "^10.9.1" 25 | } 26 | }, 27 | "node_modules/@cspotcode/source-map-support": { 28 | "version": "0.8.1", 29 | "resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 30 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 31 | "dev": true, 32 | "license": "MIT", 33 | "dependencies": { 34 | "@jridgewell/trace-mapping": "0.3.9" 35 | }, 36 | "engines": { 37 | "node": ">=12" 38 | } 39 | }, 40 | "node_modules/@jridgewell/resolve-uri": { 41 | "version": "3.1.1", 42 | "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 43 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 44 | "dev": true, 45 | "license": "MIT", 46 | "engines": { 47 | "node": ">=6.0.0" 48 | } 49 | }, 50 | "node_modules/@jridgewell/sourcemap-codec": { 51 | "version": "1.4.15", 52 | "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 53 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 54 | "dev": true, 55 | "license": "MIT" 56 | }, 57 | "node_modules/@jridgewell/trace-mapping": { 58 | "version": "0.3.9", 59 | "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 60 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 61 | "dev": true, 62 | "license": "MIT", 63 | "dependencies": { 64 | "@jridgewell/resolve-uri": "^3.0.3", 65 | "@jridgewell/sourcemap-codec": "^1.4.10" 66 | } 67 | }, 68 | "node_modules/@tsconfig/node10": { 69 | "version": "1.0.9", 70 | "resolved": "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.9.tgz", 71 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 72 | "dev": true, 73 | "license": "MIT" 74 | }, 75 | "node_modules/@tsconfig/node12": { 76 | "version": "1.0.11", 77 | "resolved": "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz", 78 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 79 | "dev": true, 80 | "license": "MIT" 81 | }, 82 | "node_modules/@tsconfig/node14": { 83 | "version": "1.0.3", 84 | "resolved": "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz", 85 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 86 | "dev": true, 87 | "license": "MIT" 88 | }, 89 | "node_modules/@tsconfig/node16": { 90 | "version": "1.0.3", 91 | "resolved": "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.3.tgz", 92 | "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", 93 | "dev": true, 94 | "license": "MIT" 95 | }, 96 | "node_modules/@types/node": { 97 | "version": "18.16.5", 98 | "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.16.5.tgz", 99 | "integrity": "sha512-seOA34WMo9KB+UA78qaJoCO20RJzZGVXQ5Sh6FWu0g/hfT44nKXnej3/tCQl7FL97idFpBhisLYCTB50S0EirA==", 100 | "dev": true, 101 | "license": "MIT" 102 | }, 103 | "node_modules/@types/simple-peer": { 104 | "version": "9.11.5", 105 | "resolved": "https://registry.npmmirror.com/@types/simple-peer/-/simple-peer-9.11.5.tgz", 106 | "integrity": "sha512-haXgWcAa3Y3Sn+T8lzkE4ErQUpYzhW6Cz2lh00RhQTyWt+xZ3s87wJPztUxlqSdFRqGhe2MQIBd0XsyHP3No4w==", 107 | "dev": true, 108 | "license": "MIT", 109 | "dependencies": { 110 | "@types/node": "*" 111 | } 112 | }, 113 | "node_modules/@types/ws": { 114 | "version": "8.5.4", 115 | "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.5.4.tgz", 116 | "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", 117 | "dev": true, 118 | "license": "MIT", 119 | "dependencies": { 120 | "@types/node": "*" 121 | } 122 | }, 123 | "node_modules/abbrev": { 124 | "version": "1.1.1", 125 | "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz", 126 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 127 | "license": "ISC" 128 | }, 129 | "node_modules/acorn": { 130 | "version": "8.8.2", 131 | "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz", 132 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 133 | "dev": true, 134 | "license": "MIT", 135 | "bin": { 136 | "acorn": "bin/acorn" 137 | }, 138 | "engines": { 139 | "node": ">=0.4.0" 140 | } 141 | }, 142 | "node_modules/acorn-walk": { 143 | "version": "8.2.0", 144 | "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz", 145 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 146 | "dev": true, 147 | "license": "MIT", 148 | "engines": { 149 | "node": ">=0.4.0" 150 | } 151 | }, 152 | "node_modules/ansi-regex": { 153 | "version": "2.1.1", 154 | "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", 155 | "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", 156 | "license": "MIT", 157 | "engines": { 158 | "node": ">=0.10.0" 159 | } 160 | }, 161 | "node_modules/aproba": { 162 | "version": "1.2.0", 163 | "resolved": "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz", 164 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", 165 | "license": "ISC" 166 | }, 167 | "node_modules/are-we-there-yet": { 168 | "version": "1.1.7", 169 | "resolved": "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", 170 | "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", 171 | "license": "ISC", 172 | "dependencies": { 173 | "delegates": "^1.0.0", 174 | "readable-stream": "^2.0.6" 175 | } 176 | }, 177 | "node_modules/are-we-there-yet/node_modules/readable-stream": { 178 | "version": "2.3.8", 179 | "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", 180 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 181 | "license": "MIT", 182 | "dependencies": { 183 | "core-util-is": "~1.0.0", 184 | "inherits": "~2.0.3", 185 | "isarray": "~1.0.0", 186 | "process-nextick-args": "~2.0.0", 187 | "safe-buffer": "~5.1.1", 188 | "string_decoder": "~1.1.1", 189 | "util-deprecate": "~1.0.1" 190 | } 191 | }, 192 | "node_modules/are-we-there-yet/node_modules/safe-buffer": { 193 | "version": "5.1.2", 194 | "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", 195 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 196 | "license": "MIT" 197 | }, 198 | "node_modules/are-we-there-yet/node_modules/string_decoder": { 199 | "version": "1.1.1", 200 | "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", 201 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 202 | "license": "MIT", 203 | "dependencies": { 204 | "safe-buffer": "~5.1.0" 205 | } 206 | }, 207 | "node_modules/arg": { 208 | "version": "4.1.3", 209 | "resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz", 210 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 211 | "dev": true, 212 | "license": "MIT" 213 | }, 214 | "node_modules/balanced-match": { 215 | "version": "1.0.2", 216 | "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", 217 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 218 | "license": "MIT" 219 | }, 220 | "node_modules/base64-js": { 221 | "version": "1.5.1", 222 | "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", 223 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 224 | "license": "MIT" 225 | }, 226 | "node_modules/brace-expansion": { 227 | "version": "1.1.11", 228 | "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", 229 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 230 | "license": "MIT", 231 | "dependencies": { 232 | "balanced-match": "^1.0.0", 233 | "concat-map": "0.0.1" 234 | } 235 | }, 236 | "node_modules/buffer": { 237 | "version": "6.0.3", 238 | "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz", 239 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 240 | "license": "MIT", 241 | "dependencies": { 242 | "base64-js": "^1.3.1", 243 | "ieee754": "^1.2.1" 244 | } 245 | }, 246 | "node_modules/chownr": { 247 | "version": "1.1.4", 248 | "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", 249 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", 250 | "license": "ISC" 251 | }, 252 | "node_modules/code-point-at": { 253 | "version": "1.1.0", 254 | "resolved": "https://registry.npmmirror.com/code-point-at/-/code-point-at-1.1.0.tgz", 255 | "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", 256 | "license": "MIT", 257 | "engines": { 258 | "node": ">=0.10.0" 259 | } 260 | }, 261 | "node_modules/commander": { 262 | "version": "10.0.1", 263 | "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz", 264 | "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", 265 | "license": "MIT", 266 | "engines": { 267 | "node": ">=14" 268 | } 269 | }, 270 | "node_modules/concat-map": { 271 | "version": "0.0.1", 272 | "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", 273 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 274 | "license": "MIT" 275 | }, 276 | "node_modules/console-control-strings": { 277 | "version": "1.1.0", 278 | "resolved": "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz", 279 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", 280 | "license": "ISC" 281 | }, 282 | "node_modules/core-util-is": { 283 | "version": "1.0.3", 284 | "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", 285 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 286 | "license": "MIT" 287 | }, 288 | "node_modules/create-require": { 289 | "version": "1.1.1", 290 | "resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz", 291 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 292 | "dev": true, 293 | "license": "MIT" 294 | }, 295 | "node_modules/debug": { 296 | "version": "4.3.4", 297 | "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", 298 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 299 | "license": "MIT", 300 | "dependencies": { 301 | "ms": "2.1.2" 302 | }, 303 | "engines": { 304 | "node": ">=6.0" 305 | }, 306 | "peerDependenciesMeta": { 307 | "supports-color": { 308 | "optional": true 309 | } 310 | } 311 | }, 312 | "node_modules/deep-extend": { 313 | "version": "0.6.0", 314 | "resolved": "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz", 315 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 316 | "license": "MIT", 317 | "engines": { 318 | "node": ">=4.0.0" 319 | } 320 | }, 321 | "node_modules/delegates": { 322 | "version": "1.0.0", 323 | "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz", 324 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", 325 | "license": "MIT" 326 | }, 327 | "node_modules/detect-libc": { 328 | "version": "1.0.3", 329 | "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz", 330 | "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", 331 | "license": "Apache-2.0", 332 | "bin": { 333 | "detect-libc": "bin/detect-libc.js" 334 | }, 335 | "engines": { 336 | "node": ">=0.10" 337 | } 338 | }, 339 | "node_modules/diff": { 340 | "version": "4.0.2", 341 | "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz", 342 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 343 | "dev": true, 344 | "license": "BSD-3-Clause", 345 | "engines": { 346 | "node": ">=0.3.1" 347 | } 348 | }, 349 | "node_modules/domexception": { 350 | "version": "1.0.1", 351 | "resolved": "https://registry.npmmirror.com/domexception/-/domexception-1.0.1.tgz", 352 | "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", 353 | "license": "MIT", 354 | "optional": true, 355 | "dependencies": { 356 | "webidl-conversions": "^4.0.2" 357 | } 358 | }, 359 | "node_modules/err-code": { 360 | "version": "3.0.1", 361 | "resolved": "https://registry.npmmirror.com/err-code/-/err-code-3.0.1.tgz", 362 | "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", 363 | "license": "MIT" 364 | }, 365 | "node_modules/fs-minipass": { 366 | "version": "1.2.7", 367 | "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-1.2.7.tgz", 368 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", 369 | "license": "ISC", 370 | "dependencies": { 371 | "minipass": "^2.6.0" 372 | } 373 | }, 374 | "node_modules/fs.realpath": { 375 | "version": "1.0.0", 376 | "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", 377 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 378 | "license": "ISC" 379 | }, 380 | "node_modules/gauge": { 381 | "version": "2.7.4", 382 | "resolved": "https://registry.npmmirror.com/gauge/-/gauge-2.7.4.tgz", 383 | "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", 384 | "license": "ISC", 385 | "dependencies": { 386 | "aproba": "^1.0.3", 387 | "console-control-strings": "^1.0.0", 388 | "has-unicode": "^2.0.0", 389 | "object-assign": "^4.1.0", 390 | "signal-exit": "^3.0.0", 391 | "string-width": "^1.0.1", 392 | "strip-ansi": "^3.0.1", 393 | "wide-align": "^1.1.0" 394 | } 395 | }, 396 | "node_modules/get-browser-rtc": { 397 | "version": "1.1.0", 398 | "resolved": "https://registry.npmmirror.com/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", 399 | "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==", 400 | "license": "MIT" 401 | }, 402 | "node_modules/glob": { 403 | "version": "7.2.3", 404 | "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", 405 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 406 | "license": "ISC", 407 | "dependencies": { 408 | "fs.realpath": "^1.0.0", 409 | "inflight": "^1.0.4", 410 | "inherits": "2", 411 | "minimatch": "^3.1.1", 412 | "once": "^1.3.0", 413 | "path-is-absolute": "^1.0.0" 414 | }, 415 | "engines": { 416 | "node": "*" 417 | } 418 | }, 419 | "node_modules/has-unicode": { 420 | "version": "2.0.1", 421 | "resolved": "https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz", 422 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", 423 | "license": "ISC" 424 | }, 425 | "node_modules/iconv-lite": { 426 | "version": "0.4.24", 427 | "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", 428 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 429 | "license": "MIT", 430 | "dependencies": { 431 | "safer-buffer": ">= 2.1.2 < 3" 432 | }, 433 | "engines": { 434 | "node": ">=0.10.0" 435 | } 436 | }, 437 | "node_modules/ieee754": { 438 | "version": "1.2.1", 439 | "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", 440 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 441 | "license": "BSD-3-Clause" 442 | }, 443 | "node_modules/ignore-walk": { 444 | "version": "3.0.4", 445 | "resolved": "https://registry.npmmirror.com/ignore-walk/-/ignore-walk-3.0.4.tgz", 446 | "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", 447 | "license": "ISC", 448 | "dependencies": { 449 | "minimatch": "^3.0.4" 450 | } 451 | }, 452 | "node_modules/inflight": { 453 | "version": "1.0.6", 454 | "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", 455 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 456 | "license": "ISC", 457 | "dependencies": { 458 | "once": "^1.3.0", 459 | "wrappy": "1" 460 | } 461 | }, 462 | "node_modules/inherits": { 463 | "version": "2.0.4", 464 | "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", 465 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 466 | "license": "ISC" 467 | }, 468 | "node_modules/ini": { 469 | "version": "1.3.8", 470 | "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", 471 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 472 | "license": "ISC" 473 | }, 474 | "node_modules/is-fullwidth-code-point": { 475 | "version": "1.0.0", 476 | "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 477 | "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", 478 | "license": "MIT", 479 | "dependencies": { 480 | "number-is-nan": "^1.0.0" 481 | }, 482 | "engines": { 483 | "node": ">=0.10.0" 484 | } 485 | }, 486 | "node_modules/isarray": { 487 | "version": "1.0.0", 488 | "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", 489 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 490 | "license": "MIT" 491 | }, 492 | "node_modules/make-error": { 493 | "version": "1.3.6", 494 | "resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz", 495 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 496 | "dev": true, 497 | "license": "ISC" 498 | }, 499 | "node_modules/minimatch": { 500 | "version": "3.1.2", 501 | "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", 502 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 503 | "license": "ISC", 504 | "dependencies": { 505 | "brace-expansion": "^1.1.7" 506 | }, 507 | "engines": { 508 | "node": "*" 509 | } 510 | }, 511 | "node_modules/minimist": { 512 | "version": "1.2.8", 513 | "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", 514 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 515 | "license": "MIT" 516 | }, 517 | "node_modules/minipass": { 518 | "version": "2.9.0", 519 | "resolved": "https://registry.npmmirror.com/minipass/-/minipass-2.9.0.tgz", 520 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", 521 | "license": "ISC", 522 | "dependencies": { 523 | "safe-buffer": "^5.1.2", 524 | "yallist": "^3.0.0" 525 | } 526 | }, 527 | "node_modules/minizlib": { 528 | "version": "1.3.3", 529 | "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-1.3.3.tgz", 530 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", 531 | "license": "MIT", 532 | "dependencies": { 533 | "minipass": "^2.9.0" 534 | } 535 | }, 536 | "node_modules/mkdirp": { 537 | "version": "0.5.6", 538 | "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", 539 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 540 | "license": "MIT", 541 | "dependencies": { 542 | "minimist": "^1.2.6" 543 | }, 544 | "bin": { 545 | "mkdirp": "bin/cmd.js" 546 | } 547 | }, 548 | "node_modules/ms": { 549 | "version": "2.1.2", 550 | "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", 551 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 552 | "license": "MIT" 553 | }, 554 | "node_modules/needle": { 555 | "version": "2.9.1", 556 | "resolved": "https://registry.npmmirror.com/needle/-/needle-2.9.1.tgz", 557 | "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", 558 | "license": "MIT", 559 | "dependencies": { 560 | "debug": "^3.2.6", 561 | "iconv-lite": "^0.4.4", 562 | "sax": "^1.2.4" 563 | }, 564 | "bin": { 565 | "needle": "bin/needle" 566 | }, 567 | "engines": { 568 | "node": ">= 4.4.x" 569 | } 570 | }, 571 | "node_modules/needle/node_modules/debug": { 572 | "version": "3.2.7", 573 | "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", 574 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 575 | "license": "MIT", 576 | "dependencies": { 577 | "ms": "^2.1.1" 578 | } 579 | }, 580 | "node_modules/node-pre-gyp": { 581 | "version": "0.13.0", 582 | "resolved": "https://registry.npmmirror.com/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz", 583 | "integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==", 584 | "license": "BSD-3-Clause", 585 | "dependencies": { 586 | "detect-libc": "^1.0.2", 587 | "mkdirp": "^0.5.1", 588 | "needle": "^2.2.1", 589 | "nopt": "^4.0.1", 590 | "npm-packlist": "^1.1.6", 591 | "npmlog": "^4.0.2", 592 | "rc": "^1.2.7", 593 | "rimraf": "^2.6.1", 594 | "semver": "^5.3.0", 595 | "tar": "^4" 596 | }, 597 | "bin": { 598 | "node-pre-gyp": "bin/node-pre-gyp" 599 | } 600 | }, 601 | "node_modules/nopt": { 602 | "version": "4.0.3", 603 | "resolved": "https://registry.npmmirror.com/nopt/-/nopt-4.0.3.tgz", 604 | "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", 605 | "license": "ISC", 606 | "dependencies": { 607 | "abbrev": "1", 608 | "osenv": "^0.1.4" 609 | }, 610 | "bin": { 611 | "nopt": "bin/nopt.js" 612 | } 613 | }, 614 | "node_modules/npm-bundled": { 615 | "version": "1.1.2", 616 | "resolved": "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-1.1.2.tgz", 617 | "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", 618 | "license": "ISC", 619 | "dependencies": { 620 | "npm-normalize-package-bin": "^1.0.1" 621 | } 622 | }, 623 | "node_modules/npm-normalize-package-bin": { 624 | "version": "1.0.1", 625 | "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", 626 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", 627 | "license": "ISC" 628 | }, 629 | "node_modules/npm-packlist": { 630 | "version": "1.4.8", 631 | "resolved": "https://registry.npmmirror.com/npm-packlist/-/npm-packlist-1.4.8.tgz", 632 | "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", 633 | "license": "ISC", 634 | "dependencies": { 635 | "ignore-walk": "^3.0.1", 636 | "npm-bundled": "^1.0.1", 637 | "npm-normalize-package-bin": "^1.0.1" 638 | } 639 | }, 640 | "node_modules/npmlog": { 641 | "version": "4.1.2", 642 | "resolved": "https://registry.npmmirror.com/npmlog/-/npmlog-4.1.2.tgz", 643 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 644 | "license": "ISC", 645 | "dependencies": { 646 | "are-we-there-yet": "~1.1.2", 647 | "console-control-strings": "~1.1.0", 648 | "gauge": "~2.7.3", 649 | "set-blocking": "~2.0.0" 650 | } 651 | }, 652 | "node_modules/number-is-nan": { 653 | "version": "1.0.1", 654 | "resolved": "https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz", 655 | "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", 656 | "license": "MIT", 657 | "engines": { 658 | "node": ">=0.10.0" 659 | } 660 | }, 661 | "node_modules/object-assign": { 662 | "version": "4.1.1", 663 | "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", 664 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 665 | "license": "MIT", 666 | "engines": { 667 | "node": ">=0.10.0" 668 | } 669 | }, 670 | "node_modules/once": { 671 | "version": "1.4.0", 672 | "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", 673 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 674 | "license": "ISC", 675 | "dependencies": { 676 | "wrappy": "1" 677 | } 678 | }, 679 | "node_modules/os-homedir": { 680 | "version": "1.0.2", 681 | "resolved": "https://registry.npmmirror.com/os-homedir/-/os-homedir-1.0.2.tgz", 682 | "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", 683 | "license": "MIT", 684 | "engines": { 685 | "node": ">=0.10.0" 686 | } 687 | }, 688 | "node_modules/os-tmpdir": { 689 | "version": "1.0.2", 690 | "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 691 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", 692 | "license": "MIT", 693 | "engines": { 694 | "node": ">=0.10.0" 695 | } 696 | }, 697 | "node_modules/osenv": { 698 | "version": "0.1.5", 699 | "resolved": "https://registry.npmmirror.com/osenv/-/osenv-0.1.5.tgz", 700 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 701 | "license": "ISC", 702 | "dependencies": { 703 | "os-homedir": "^1.0.0", 704 | "os-tmpdir": "^1.0.0" 705 | } 706 | }, 707 | "node_modules/path-is-absolute": { 708 | "version": "1.0.1", 709 | "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 710 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 711 | "license": "MIT", 712 | "engines": { 713 | "node": ">=0.10.0" 714 | } 715 | }, 716 | "node_modules/process-nextick-args": { 717 | "version": "2.0.1", 718 | "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 719 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 720 | "license": "MIT" 721 | }, 722 | "node_modules/queue-microtask": { 723 | "version": "1.2.3", 724 | "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", 725 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 726 | "license": "MIT" 727 | }, 728 | "node_modules/randombytes": { 729 | "version": "2.1.0", 730 | "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", 731 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 732 | "license": "MIT", 733 | "dependencies": { 734 | "safe-buffer": "^5.1.0" 735 | } 736 | }, 737 | "node_modules/rc": { 738 | "version": "1.2.8", 739 | "resolved": "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz", 740 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 741 | "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", 742 | "dependencies": { 743 | "deep-extend": "^0.6.0", 744 | "ini": "~1.3.0", 745 | "minimist": "^1.2.0", 746 | "strip-json-comments": "~2.0.1" 747 | }, 748 | "bin": { 749 | "rc": "cli.js" 750 | } 751 | }, 752 | "node_modules/readable-stream": { 753 | "version": "3.6.2", 754 | "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", 755 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 756 | "license": "MIT", 757 | "dependencies": { 758 | "inherits": "^2.0.3", 759 | "string_decoder": "^1.1.1", 760 | "util-deprecate": "^1.0.1" 761 | }, 762 | "engines": { 763 | "node": ">= 6" 764 | } 765 | }, 766 | "node_modules/rimraf": { 767 | "version": "2.7.1", 768 | "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", 769 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 770 | "license": "ISC", 771 | "dependencies": { 772 | "glob": "^7.1.3" 773 | }, 774 | "bin": { 775 | "rimraf": "bin.js" 776 | } 777 | }, 778 | "node_modules/safe-buffer": { 779 | "version": "5.2.1", 780 | "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", 781 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 782 | "license": "MIT" 783 | }, 784 | "node_modules/safer-buffer": { 785 | "version": "2.1.2", 786 | "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", 787 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 788 | "license": "MIT" 789 | }, 790 | "node_modules/sax": { 791 | "version": "1.2.4", 792 | "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", 793 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 794 | "license": "ISC" 795 | }, 796 | "node_modules/semver": { 797 | "version": "5.7.1", 798 | "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", 799 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 800 | "license": "ISC", 801 | "bin": { 802 | "semver": "bin/semver" 803 | } 804 | }, 805 | "node_modules/set-blocking": { 806 | "version": "2.0.0", 807 | "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", 808 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", 809 | "license": "ISC" 810 | }, 811 | "node_modules/signal-exit": { 812 | "version": "3.0.7", 813 | "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", 814 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 815 | "license": "ISC" 816 | }, 817 | "node_modules/simple-peer": { 818 | "version": "9.11.1", 819 | "resolved": "https://registry.npmmirror.com/simple-peer/-/simple-peer-9.11.1.tgz", 820 | "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==", 821 | "license": "MIT", 822 | "dependencies": { 823 | "buffer": "^6.0.3", 824 | "debug": "^4.3.2", 825 | "err-code": "^3.0.1", 826 | "get-browser-rtc": "^1.1.0", 827 | "queue-microtask": "^1.2.3", 828 | "randombytes": "^2.1.0", 829 | "readable-stream": "^3.6.0" 830 | } 831 | }, 832 | "node_modules/string_decoder": { 833 | "version": "1.3.0", 834 | "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", 835 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 836 | "license": "MIT", 837 | "dependencies": { 838 | "safe-buffer": "~5.2.0" 839 | } 840 | }, 841 | "node_modules/string-width": { 842 | "version": "1.0.2", 843 | "resolved": "https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz", 844 | "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", 845 | "license": "MIT", 846 | "dependencies": { 847 | "code-point-at": "^1.0.0", 848 | "is-fullwidth-code-point": "^1.0.0", 849 | "strip-ansi": "^3.0.0" 850 | }, 851 | "engines": { 852 | "node": ">=0.10.0" 853 | } 854 | }, 855 | "node_modules/strip-ansi": { 856 | "version": "3.0.1", 857 | "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", 858 | "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", 859 | "license": "MIT", 860 | "dependencies": { 861 | "ansi-regex": "^2.0.0" 862 | }, 863 | "engines": { 864 | "node": ">=0.10.0" 865 | } 866 | }, 867 | "node_modules/strip-json-comments": { 868 | "version": "2.0.1", 869 | "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 870 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 871 | "license": "MIT", 872 | "engines": { 873 | "node": ">=0.10.0" 874 | } 875 | }, 876 | "node_modules/tar": { 877 | "version": "4.4.19", 878 | "resolved": "https://registry.npmmirror.com/tar/-/tar-4.4.19.tgz", 879 | "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", 880 | "license": "ISC", 881 | "dependencies": { 882 | "chownr": "^1.1.4", 883 | "fs-minipass": "^1.2.7", 884 | "minipass": "^2.9.0", 885 | "minizlib": "^1.3.3", 886 | "mkdirp": "^0.5.5", 887 | "safe-buffer": "^5.2.1", 888 | "yallist": "^3.1.1" 889 | }, 890 | "engines": { 891 | "node": ">=4.5" 892 | } 893 | }, 894 | "node_modules/ts-node": { 895 | "version": "10.9.1", 896 | "resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz", 897 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 898 | "dev": true, 899 | "license": "MIT", 900 | "dependencies": { 901 | "@cspotcode/source-map-support": "^0.8.0", 902 | "@tsconfig/node10": "^1.0.7", 903 | "@tsconfig/node12": "^1.0.7", 904 | "@tsconfig/node14": "^1.0.0", 905 | "@tsconfig/node16": "^1.0.2", 906 | "acorn": "^8.4.1", 907 | "acorn-walk": "^8.1.1", 908 | "arg": "^4.1.0", 909 | "create-require": "^1.1.0", 910 | "diff": "^4.0.1", 911 | "make-error": "^1.1.1", 912 | "v8-compile-cache-lib": "^3.0.1", 913 | "yn": "3.1.1" 914 | }, 915 | "bin": { 916 | "ts-node": "dist/bin.js", 917 | "ts-node-cwd": "dist/bin-cwd.js", 918 | "ts-node-esm": "dist/bin-esm.js", 919 | "ts-node-script": "dist/bin-script.js", 920 | "ts-node-transpile-only": "dist/bin-transpile.js", 921 | "ts-script": "dist/bin-script-deprecated.js" 922 | }, 923 | "peerDependencies": { 924 | "@swc/core": ">=1.2.50", 925 | "@swc/wasm": ">=1.2.50", 926 | "@types/node": "*", 927 | "typescript": ">=2.7" 928 | }, 929 | "peerDependenciesMeta": { 930 | "@swc/core": { 931 | "optional": true 932 | }, 933 | "@swc/wasm": { 934 | "optional": true 935 | } 936 | } 937 | }, 938 | "node_modules/typescript": { 939 | "version": "5.0.4", 940 | "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.0.4.tgz", 941 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 942 | "dev": true, 943 | "license": "Apache-2.0", 944 | "peer": true, 945 | "bin": { 946 | "tsc": "bin/tsc", 947 | "tsserver": "bin/tsserver" 948 | }, 949 | "engines": { 950 | "node": ">=12.20" 951 | } 952 | }, 953 | "node_modules/util-deprecate": { 954 | "version": "1.0.2", 955 | "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", 956 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 957 | "license": "MIT" 958 | }, 959 | "node_modules/v8-compile-cache-lib": { 960 | "version": "3.0.1", 961 | "resolved": "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 962 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 963 | "dev": true, 964 | "license": "MIT" 965 | }, 966 | "node_modules/webidl-conversions": { 967 | "version": "4.0.2", 968 | "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz", 969 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", 970 | "license": "BSD-2-Clause", 971 | "optional": true 972 | }, 973 | "node_modules/wide-align": { 974 | "version": "1.1.5", 975 | "resolved": "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz", 976 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 977 | "license": "ISC", 978 | "dependencies": { 979 | "string-width": "^1.0.2 || 2 || 3 || 4" 980 | } 981 | }, 982 | "node_modules/wrappy": { 983 | "version": "1.0.2", 984 | "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", 985 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 986 | "license": "ISC" 987 | }, 988 | "node_modules/wrtc": { 989 | "version": "0.4.7", 990 | "resolved": "https://registry.npmmirror.com/wrtc/-/wrtc-0.4.7.tgz", 991 | "integrity": "sha512-P6Hn7VT4lfSH49HxLHcHhDq+aFf/jd9dPY7lDHeFhZ22N3858EKuwm2jmnlPzpsRGEPaoF6XwkcxY5SYnt4f/g==", 992 | "hasInstallScript": true, 993 | "license": "BSD-2-Clause", 994 | "dependencies": { 995 | "node-pre-gyp": "^0.13.0" 996 | }, 997 | "engines": { 998 | "node": "^8.11.2 || >=10.0.0" 999 | }, 1000 | "optionalDependencies": { 1001 | "domexception": "^1.0.1" 1002 | } 1003 | }, 1004 | "node_modules/ws": { 1005 | "version": "8.13.0", 1006 | "resolved": "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz", 1007 | "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", 1008 | "license": "MIT", 1009 | "engines": { 1010 | "node": ">=10.0.0" 1011 | }, 1012 | "peerDependencies": { 1013 | "bufferutil": "^4.0.1", 1014 | "utf-8-validate": ">=5.0.2" 1015 | }, 1016 | "peerDependenciesMeta": { 1017 | "bufferutil": { 1018 | "optional": true 1019 | }, 1020 | "utf-8-validate": { 1021 | "optional": true 1022 | } 1023 | } 1024 | }, 1025 | "node_modules/yallist": { 1026 | "version": "3.1.1", 1027 | "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", 1028 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 1029 | "license": "ISC" 1030 | }, 1031 | "node_modules/yn": { 1032 | "version": "3.1.1", 1033 | "resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz", 1034 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 1035 | "dev": true, 1036 | "license": "MIT", 1037 | "engines": { 1038 | "node": ">=6" 1039 | } 1040 | } 1041 | }, 1042 | "dependencies": { 1043 | "@cspotcode/source-map-support": { 1044 | "version": "0.8.1", 1045 | "resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 1046 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 1047 | "dev": true, 1048 | "requires": { 1049 | "@jridgewell/trace-mapping": "0.3.9" 1050 | } 1051 | }, 1052 | "@jridgewell/resolve-uri": { 1053 | "version": "3.1.1", 1054 | "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 1055 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 1056 | "dev": true 1057 | }, 1058 | "@jridgewell/sourcemap-codec": { 1059 | "version": "1.4.15", 1060 | "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 1061 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 1062 | "dev": true 1063 | }, 1064 | "@jridgewell/trace-mapping": { 1065 | "version": "0.3.9", 1066 | "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 1067 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 1068 | "dev": true, 1069 | "requires": { 1070 | "@jridgewell/resolve-uri": "^3.0.3", 1071 | "@jridgewell/sourcemap-codec": "^1.4.10" 1072 | } 1073 | }, 1074 | "@tsconfig/node10": { 1075 | "version": "1.0.9", 1076 | "resolved": "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.9.tgz", 1077 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 1078 | "dev": true 1079 | }, 1080 | "@tsconfig/node12": { 1081 | "version": "1.0.11", 1082 | "resolved": "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz", 1083 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 1084 | "dev": true 1085 | }, 1086 | "@tsconfig/node14": { 1087 | "version": "1.0.3", 1088 | "resolved": "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz", 1089 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 1090 | "dev": true 1091 | }, 1092 | "@tsconfig/node16": { 1093 | "version": "1.0.3", 1094 | "resolved": "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.3.tgz", 1095 | "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", 1096 | "dev": true 1097 | }, 1098 | "@types/node": { 1099 | "version": "18.16.5", 1100 | "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.16.5.tgz", 1101 | "integrity": "sha512-seOA34WMo9KB+UA78qaJoCO20RJzZGVXQ5Sh6FWu0g/hfT44nKXnej3/tCQl7FL97idFpBhisLYCTB50S0EirA==", 1102 | "dev": true 1103 | }, 1104 | "@types/simple-peer": { 1105 | "version": "9.11.5", 1106 | "resolved": "https://registry.npmmirror.com/@types/simple-peer/-/simple-peer-9.11.5.tgz", 1107 | "integrity": "sha512-haXgWcAa3Y3Sn+T8lzkE4ErQUpYzhW6Cz2lh00RhQTyWt+xZ3s87wJPztUxlqSdFRqGhe2MQIBd0XsyHP3No4w==", 1108 | "dev": true, 1109 | "requires": { 1110 | "@types/node": "*" 1111 | } 1112 | }, 1113 | "@types/ws": { 1114 | "version": "8.5.4", 1115 | "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.5.4.tgz", 1116 | "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", 1117 | "dev": true, 1118 | "requires": { 1119 | "@types/node": "*" 1120 | } 1121 | }, 1122 | "abbrev": { 1123 | "version": "1.1.1", 1124 | "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz", 1125 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 1126 | }, 1127 | "acorn": { 1128 | "version": "8.8.2", 1129 | "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz", 1130 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 1131 | "dev": true 1132 | }, 1133 | "acorn-walk": { 1134 | "version": "8.2.0", 1135 | "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz", 1136 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 1137 | "dev": true 1138 | }, 1139 | "ansi-regex": { 1140 | "version": "2.1.1", 1141 | "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", 1142 | "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" 1143 | }, 1144 | "aproba": { 1145 | "version": "1.2.0", 1146 | "resolved": "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz", 1147 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 1148 | }, 1149 | "are-we-there-yet": { 1150 | "version": "1.1.7", 1151 | "resolved": "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", 1152 | "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", 1153 | "requires": { 1154 | "delegates": "^1.0.0", 1155 | "readable-stream": "^2.0.6" 1156 | }, 1157 | "dependencies": { 1158 | "readable-stream": { 1159 | "version": "2.3.8", 1160 | "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", 1161 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 1162 | "requires": { 1163 | "core-util-is": "~1.0.0", 1164 | "inherits": "~2.0.3", 1165 | "isarray": "~1.0.0", 1166 | "process-nextick-args": "~2.0.0", 1167 | "safe-buffer": "~5.1.1", 1168 | "string_decoder": "~1.1.1", 1169 | "util-deprecate": "~1.0.1" 1170 | } 1171 | }, 1172 | "safe-buffer": { 1173 | "version": "5.1.2", 1174 | "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", 1175 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1176 | }, 1177 | "string_decoder": { 1178 | "version": "1.1.1", 1179 | "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", 1180 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1181 | "requires": { 1182 | "safe-buffer": "~5.1.0" 1183 | } 1184 | } 1185 | } 1186 | }, 1187 | "arg": { 1188 | "version": "4.1.3", 1189 | "resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz", 1190 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 1191 | "dev": true 1192 | }, 1193 | "balanced-match": { 1194 | "version": "1.0.2", 1195 | "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", 1196 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 1197 | }, 1198 | "base64-js": { 1199 | "version": "1.5.1", 1200 | "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", 1201 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1202 | }, 1203 | "brace-expansion": { 1204 | "version": "1.1.11", 1205 | "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", 1206 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1207 | "requires": { 1208 | "balanced-match": "^1.0.0", 1209 | "concat-map": "0.0.1" 1210 | } 1211 | }, 1212 | "buffer": { 1213 | "version": "6.0.3", 1214 | "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz", 1215 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 1216 | "requires": { 1217 | "base64-js": "^1.3.1", 1218 | "ieee754": "^1.2.1" 1219 | } 1220 | }, 1221 | "chownr": { 1222 | "version": "1.1.4", 1223 | "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", 1224 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 1225 | }, 1226 | "code-point-at": { 1227 | "version": "1.1.0", 1228 | "resolved": "https://registry.npmmirror.com/code-point-at/-/code-point-at-1.1.0.tgz", 1229 | "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" 1230 | }, 1231 | "commander": { 1232 | "version": "10.0.1", 1233 | "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz", 1234 | "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" 1235 | }, 1236 | "concat-map": { 1237 | "version": "0.0.1", 1238 | "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", 1239 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 1240 | }, 1241 | "console-control-strings": { 1242 | "version": "1.1.0", 1243 | "resolved": "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz", 1244 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" 1245 | }, 1246 | "core-util-is": { 1247 | "version": "1.0.3", 1248 | "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", 1249 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 1250 | }, 1251 | "create-require": { 1252 | "version": "1.1.1", 1253 | "resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz", 1254 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 1255 | "dev": true 1256 | }, 1257 | "debug": { 1258 | "version": "4.3.4", 1259 | "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", 1260 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1261 | "requires": { 1262 | "ms": "2.1.2" 1263 | } 1264 | }, 1265 | "deep-extend": { 1266 | "version": "0.6.0", 1267 | "resolved": "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz", 1268 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 1269 | }, 1270 | "delegates": { 1271 | "version": "1.0.0", 1272 | "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz", 1273 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" 1274 | }, 1275 | "detect-libc": { 1276 | "version": "1.0.3", 1277 | "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz", 1278 | "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" 1279 | }, 1280 | "diff": { 1281 | "version": "4.0.2", 1282 | "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz", 1283 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 1284 | "dev": true 1285 | }, 1286 | "domexception": { 1287 | "version": "1.0.1", 1288 | "resolved": "https://registry.npmmirror.com/domexception/-/domexception-1.0.1.tgz", 1289 | "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", 1290 | "optional": true, 1291 | "requires": { 1292 | "webidl-conversions": "^4.0.2" 1293 | } 1294 | }, 1295 | "err-code": { 1296 | "version": "3.0.1", 1297 | "resolved": "https://registry.npmmirror.com/err-code/-/err-code-3.0.1.tgz", 1298 | "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" 1299 | }, 1300 | "fs-minipass": { 1301 | "version": "1.2.7", 1302 | "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-1.2.7.tgz", 1303 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", 1304 | "requires": { 1305 | "minipass": "^2.6.0" 1306 | } 1307 | }, 1308 | "fs.realpath": { 1309 | "version": "1.0.0", 1310 | "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", 1311 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 1312 | }, 1313 | "gauge": { 1314 | "version": "2.7.4", 1315 | "resolved": "https://registry.npmmirror.com/gauge/-/gauge-2.7.4.tgz", 1316 | "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", 1317 | "requires": { 1318 | "aproba": "^1.0.3", 1319 | "console-control-strings": "^1.0.0", 1320 | "has-unicode": "^2.0.0", 1321 | "object-assign": "^4.1.0", 1322 | "signal-exit": "^3.0.0", 1323 | "string-width": "^1.0.1", 1324 | "strip-ansi": "^3.0.1", 1325 | "wide-align": "^1.1.0" 1326 | } 1327 | }, 1328 | "get-browser-rtc": { 1329 | "version": "1.1.0", 1330 | "resolved": "https://registry.npmmirror.com/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", 1331 | "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==" 1332 | }, 1333 | "glob": { 1334 | "version": "7.2.3", 1335 | "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", 1336 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1337 | "requires": { 1338 | "fs.realpath": "^1.0.0", 1339 | "inflight": "^1.0.4", 1340 | "inherits": "2", 1341 | "minimatch": "^3.1.1", 1342 | "once": "^1.3.0", 1343 | "path-is-absolute": "^1.0.0" 1344 | } 1345 | }, 1346 | "has-unicode": { 1347 | "version": "2.0.1", 1348 | "resolved": "https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz", 1349 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" 1350 | }, 1351 | "iconv-lite": { 1352 | "version": "0.4.24", 1353 | "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", 1354 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1355 | "requires": { 1356 | "safer-buffer": ">= 2.1.2 < 3" 1357 | } 1358 | }, 1359 | "ieee754": { 1360 | "version": "1.2.1", 1361 | "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", 1362 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 1363 | }, 1364 | "ignore-walk": { 1365 | "version": "3.0.4", 1366 | "resolved": "https://registry.npmmirror.com/ignore-walk/-/ignore-walk-3.0.4.tgz", 1367 | "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", 1368 | "requires": { 1369 | "minimatch": "^3.0.4" 1370 | } 1371 | }, 1372 | "inflight": { 1373 | "version": "1.0.6", 1374 | "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", 1375 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1376 | "requires": { 1377 | "once": "^1.3.0", 1378 | "wrappy": "1" 1379 | } 1380 | }, 1381 | "inherits": { 1382 | "version": "2.0.4", 1383 | "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", 1384 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1385 | }, 1386 | "ini": { 1387 | "version": "1.3.8", 1388 | "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", 1389 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 1390 | }, 1391 | "is-fullwidth-code-point": { 1392 | "version": "1.0.0", 1393 | "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1394 | "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", 1395 | "requires": { 1396 | "number-is-nan": "^1.0.0" 1397 | } 1398 | }, 1399 | "isarray": { 1400 | "version": "1.0.0", 1401 | "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", 1402 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" 1403 | }, 1404 | "make-error": { 1405 | "version": "1.3.6", 1406 | "resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz", 1407 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 1408 | "dev": true 1409 | }, 1410 | "minimatch": { 1411 | "version": "3.1.2", 1412 | "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", 1413 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1414 | "requires": { 1415 | "brace-expansion": "^1.1.7" 1416 | } 1417 | }, 1418 | "minimist": { 1419 | "version": "1.2.8", 1420 | "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", 1421 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" 1422 | }, 1423 | "minipass": { 1424 | "version": "2.9.0", 1425 | "resolved": "https://registry.npmmirror.com/minipass/-/minipass-2.9.0.tgz", 1426 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", 1427 | "requires": { 1428 | "safe-buffer": "^5.1.2", 1429 | "yallist": "^3.0.0" 1430 | } 1431 | }, 1432 | "minizlib": { 1433 | "version": "1.3.3", 1434 | "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-1.3.3.tgz", 1435 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", 1436 | "requires": { 1437 | "minipass": "^2.9.0" 1438 | } 1439 | }, 1440 | "mkdirp": { 1441 | "version": "0.5.6", 1442 | "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", 1443 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 1444 | "requires": { 1445 | "minimist": "^1.2.6" 1446 | } 1447 | }, 1448 | "ms": { 1449 | "version": "2.1.2", 1450 | "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", 1451 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1452 | }, 1453 | "needle": { 1454 | "version": "2.9.1", 1455 | "resolved": "https://registry.npmmirror.com/needle/-/needle-2.9.1.tgz", 1456 | "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", 1457 | "requires": { 1458 | "debug": "^3.2.6", 1459 | "iconv-lite": "^0.4.4", 1460 | "sax": "^1.2.4" 1461 | }, 1462 | "dependencies": { 1463 | "debug": { 1464 | "version": "3.2.7", 1465 | "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", 1466 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1467 | "requires": { 1468 | "ms": "^2.1.1" 1469 | } 1470 | } 1471 | } 1472 | }, 1473 | "node-pre-gyp": { 1474 | "version": "0.13.0", 1475 | "resolved": "https://registry.npmmirror.com/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz", 1476 | "integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==", 1477 | "requires": { 1478 | "detect-libc": "^1.0.2", 1479 | "mkdirp": "^0.5.1", 1480 | "needle": "^2.2.1", 1481 | "nopt": "^4.0.1", 1482 | "npm-packlist": "^1.1.6", 1483 | "npmlog": "^4.0.2", 1484 | "rc": "^1.2.7", 1485 | "rimraf": "^2.6.1", 1486 | "semver": "^5.3.0", 1487 | "tar": "^4" 1488 | } 1489 | }, 1490 | "nopt": { 1491 | "version": "4.0.3", 1492 | "resolved": "https://registry.npmmirror.com/nopt/-/nopt-4.0.3.tgz", 1493 | "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", 1494 | "requires": { 1495 | "abbrev": "1", 1496 | "osenv": "^0.1.4" 1497 | } 1498 | }, 1499 | "npm-bundled": { 1500 | "version": "1.1.2", 1501 | "resolved": "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-1.1.2.tgz", 1502 | "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", 1503 | "requires": { 1504 | "npm-normalize-package-bin": "^1.0.1" 1505 | } 1506 | }, 1507 | "npm-normalize-package-bin": { 1508 | "version": "1.0.1", 1509 | "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", 1510 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" 1511 | }, 1512 | "npm-packlist": { 1513 | "version": "1.4.8", 1514 | "resolved": "https://registry.npmmirror.com/npm-packlist/-/npm-packlist-1.4.8.tgz", 1515 | "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", 1516 | "requires": { 1517 | "ignore-walk": "^3.0.1", 1518 | "npm-bundled": "^1.0.1", 1519 | "npm-normalize-package-bin": "^1.0.1" 1520 | } 1521 | }, 1522 | "npmlog": { 1523 | "version": "4.1.2", 1524 | "resolved": "https://registry.npmmirror.com/npmlog/-/npmlog-4.1.2.tgz", 1525 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 1526 | "requires": { 1527 | "are-we-there-yet": "~1.1.2", 1528 | "console-control-strings": "~1.1.0", 1529 | "gauge": "~2.7.3", 1530 | "set-blocking": "~2.0.0" 1531 | } 1532 | }, 1533 | "number-is-nan": { 1534 | "version": "1.0.1", 1535 | "resolved": "https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz", 1536 | "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" 1537 | }, 1538 | "object-assign": { 1539 | "version": "4.1.1", 1540 | "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", 1541 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" 1542 | }, 1543 | "once": { 1544 | "version": "1.4.0", 1545 | "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", 1546 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1547 | "requires": { 1548 | "wrappy": "1" 1549 | } 1550 | }, 1551 | "os-homedir": { 1552 | "version": "1.0.2", 1553 | "resolved": "https://registry.npmmirror.com/os-homedir/-/os-homedir-1.0.2.tgz", 1554 | "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" 1555 | }, 1556 | "os-tmpdir": { 1557 | "version": "1.0.2", 1558 | "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1559 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" 1560 | }, 1561 | "osenv": { 1562 | "version": "0.1.5", 1563 | "resolved": "https://registry.npmmirror.com/osenv/-/osenv-0.1.5.tgz", 1564 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 1565 | "requires": { 1566 | "os-homedir": "^1.0.0", 1567 | "os-tmpdir": "^1.0.0" 1568 | } 1569 | }, 1570 | "path-is-absolute": { 1571 | "version": "1.0.1", 1572 | "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1573 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" 1574 | }, 1575 | "process-nextick-args": { 1576 | "version": "2.0.1", 1577 | "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1578 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1579 | }, 1580 | "queue-microtask": { 1581 | "version": "1.2.3", 1582 | "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", 1583 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" 1584 | }, 1585 | "randombytes": { 1586 | "version": "2.1.0", 1587 | "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", 1588 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1589 | "requires": { 1590 | "safe-buffer": "^5.1.0" 1591 | } 1592 | }, 1593 | "rc": { 1594 | "version": "1.2.8", 1595 | "resolved": "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz", 1596 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1597 | "requires": { 1598 | "deep-extend": "^0.6.0", 1599 | "ini": "~1.3.0", 1600 | "minimist": "^1.2.0", 1601 | "strip-json-comments": "~2.0.1" 1602 | } 1603 | }, 1604 | "readable-stream": { 1605 | "version": "3.6.2", 1606 | "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", 1607 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1608 | "requires": { 1609 | "inherits": "^2.0.3", 1610 | "string_decoder": "^1.1.1", 1611 | "util-deprecate": "^1.0.1" 1612 | } 1613 | }, 1614 | "rimraf": { 1615 | "version": "2.7.1", 1616 | "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", 1617 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 1618 | "requires": { 1619 | "glob": "^7.1.3" 1620 | } 1621 | }, 1622 | "safe-buffer": { 1623 | "version": "5.2.1", 1624 | "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", 1625 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1626 | }, 1627 | "safer-buffer": { 1628 | "version": "2.1.2", 1629 | "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", 1630 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1631 | }, 1632 | "sax": { 1633 | "version": "1.2.4", 1634 | "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", 1635 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 1636 | }, 1637 | "semver": { 1638 | "version": "5.7.1", 1639 | "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", 1640 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1641 | }, 1642 | "set-blocking": { 1643 | "version": "2.0.0", 1644 | "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", 1645 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 1646 | }, 1647 | "signal-exit": { 1648 | "version": "3.0.7", 1649 | "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", 1650 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1651 | }, 1652 | "simple-peer": { 1653 | "version": "9.11.1", 1654 | "resolved": "https://registry.npmmirror.com/simple-peer/-/simple-peer-9.11.1.tgz", 1655 | "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==", 1656 | "requires": { 1657 | "buffer": "^6.0.3", 1658 | "debug": "^4.3.2", 1659 | "err-code": "^3.0.1", 1660 | "get-browser-rtc": "^1.1.0", 1661 | "queue-microtask": "^1.2.3", 1662 | "randombytes": "^2.1.0", 1663 | "readable-stream": "^3.6.0" 1664 | } 1665 | }, 1666 | "string_decoder": { 1667 | "version": "1.3.0", 1668 | "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", 1669 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1670 | "requires": { 1671 | "safe-buffer": "~5.2.0" 1672 | } 1673 | }, 1674 | "string-width": { 1675 | "version": "1.0.2", 1676 | "resolved": "https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz", 1677 | "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", 1678 | "requires": { 1679 | "code-point-at": "^1.0.0", 1680 | "is-fullwidth-code-point": "^1.0.0", 1681 | "strip-ansi": "^3.0.0" 1682 | } 1683 | }, 1684 | "strip-ansi": { 1685 | "version": "3.0.1", 1686 | "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", 1687 | "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", 1688 | "requires": { 1689 | "ansi-regex": "^2.0.0" 1690 | } 1691 | }, 1692 | "strip-json-comments": { 1693 | "version": "2.0.1", 1694 | "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1695 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" 1696 | }, 1697 | "tar": { 1698 | "version": "4.4.19", 1699 | "resolved": "https://registry.npmmirror.com/tar/-/tar-4.4.19.tgz", 1700 | "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", 1701 | "requires": { 1702 | "chownr": "^1.1.4", 1703 | "fs-minipass": "^1.2.7", 1704 | "minipass": "^2.9.0", 1705 | "minizlib": "^1.3.3", 1706 | "mkdirp": "^0.5.5", 1707 | "safe-buffer": "^5.2.1", 1708 | "yallist": "^3.1.1" 1709 | } 1710 | }, 1711 | "ts-node": { 1712 | "version": "10.9.1", 1713 | "resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz", 1714 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 1715 | "dev": true, 1716 | "requires": { 1717 | "@cspotcode/source-map-support": "^0.8.0", 1718 | "@tsconfig/node10": "^1.0.7", 1719 | "@tsconfig/node12": "^1.0.7", 1720 | "@tsconfig/node14": "^1.0.0", 1721 | "@tsconfig/node16": "^1.0.2", 1722 | "acorn": "^8.4.1", 1723 | "acorn-walk": "^8.1.1", 1724 | "arg": "^4.1.0", 1725 | "create-require": "^1.1.0", 1726 | "diff": "^4.0.1", 1727 | "make-error": "^1.1.1", 1728 | "v8-compile-cache-lib": "^3.0.1", 1729 | "yn": "3.1.1" 1730 | } 1731 | }, 1732 | "typescript": { 1733 | "version": "5.0.4", 1734 | "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.0.4.tgz", 1735 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 1736 | "dev": true, 1737 | "peer": true 1738 | }, 1739 | "util-deprecate": { 1740 | "version": "1.0.2", 1741 | "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", 1742 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1743 | }, 1744 | "v8-compile-cache-lib": { 1745 | "version": "3.0.1", 1746 | "resolved": "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 1747 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 1748 | "dev": true 1749 | }, 1750 | "webidl-conversions": { 1751 | "version": "4.0.2", 1752 | "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz", 1753 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", 1754 | "optional": true 1755 | }, 1756 | "wide-align": { 1757 | "version": "1.1.5", 1758 | "resolved": "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz", 1759 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 1760 | "requires": { 1761 | "string-width": "^1.0.2 || 2 || 3 || 4" 1762 | } 1763 | }, 1764 | "wrappy": { 1765 | "version": "1.0.2", 1766 | "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", 1767 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1768 | }, 1769 | "wrtc": { 1770 | "version": "0.4.7", 1771 | "resolved": "https://registry.npmmirror.com/wrtc/-/wrtc-0.4.7.tgz", 1772 | "integrity": "sha512-P6Hn7VT4lfSH49HxLHcHhDq+aFf/jd9dPY7lDHeFhZ22N3858EKuwm2jmnlPzpsRGEPaoF6XwkcxY5SYnt4f/g==", 1773 | "requires": { 1774 | "domexception": "^1.0.1", 1775 | "node-pre-gyp": "^0.13.0" 1776 | } 1777 | }, 1778 | "ws": { 1779 | "version": "8.13.0", 1780 | "resolved": "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz", 1781 | "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", 1782 | "requires": {} 1783 | }, 1784 | "yallist": { 1785 | "version": "3.1.1", 1786 | "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", 1787 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 1788 | }, 1789 | "yn": { 1790 | "version": "3.1.1", 1791 | "resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz", 1792 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 1793 | "dev": true 1794 | } 1795 | } 1796 | } 1797 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ftong", 3 | "version": "1.0.2", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "ts-node src/index.ts", 8 | "bin-dev": "ts-node src/bin/ftong.ts", 9 | "bin": "node dist/bin/ftong.js", 10 | "build-linux": "pkg . -t node16-linux-x64 -o package/ftong-linux-x64", 11 | "build-win": "pkg . -t node16-win-x64 -o package/ftong-win-x64" 12 | }, 13 | "bin": "dist/bin/ftong.js", 14 | "pkg": { 15 | "scripts": [ 16 | "dist/**/*.js" 17 | ] 18 | }, 19 | "keywords": [], 20 | "author": "", 21 | "license": "ISC", 22 | "dependencies": { 23 | "commander": "^10.0.1", 24 | "simple-peer": "^9.11.1", 25 | "wrtc": "^0.4.7", 26 | "ws": "^8.13.0" 27 | }, 28 | "devDependencies": { 29 | "@types/node": "^18.16.3", 30 | "@types/simple-peer": "^9.11.5", 31 | "@types/ws": "^8.5.4", 32 | "ts-node": "^10.9.1" 33 | } 34 | } -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | dependencies: 4 | commander: 5 | specifier: ^10.0.1 6 | version: 10.0.1 7 | simple-peer: 8 | specifier: ^9.11.1 9 | version: 9.11.1 10 | wrtc: 11 | specifier: ^0.4.7 12 | version: 0.4.7 13 | ws: 14 | specifier: ^8.13.0 15 | version: 8.13.0 16 | 17 | devDependencies: 18 | '@types/node': 19 | specifier: ^18.16.3 20 | version: 18.16.3 21 | '@types/simple-peer': 22 | specifier: ^9.11.5 23 | version: 9.11.5 24 | '@types/ws': 25 | specifier: ^8.5.4 26 | version: 8.5.4 27 | ts-node: 28 | specifier: ^10.9.1 29 | version: 10.9.1(@types/node@18.16.3)(typescript@5.0.4) 30 | 31 | packages: 32 | 33 | /@cspotcode/source-map-support@0.8.1: 34 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 35 | engines: {node: '>=12'} 36 | dependencies: 37 | '@jridgewell/trace-mapping': 0.3.9 38 | dev: true 39 | 40 | /@jridgewell/resolve-uri@3.1.1: 41 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 42 | engines: {node: '>=6.0.0'} 43 | dev: true 44 | 45 | /@jridgewell/sourcemap-codec@1.4.15: 46 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 47 | dev: true 48 | 49 | /@jridgewell/trace-mapping@0.3.9: 50 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 51 | dependencies: 52 | '@jridgewell/resolve-uri': 3.1.1 53 | '@jridgewell/sourcemap-codec': 1.4.15 54 | dev: true 55 | 56 | /@tsconfig/node10@1.0.9: 57 | resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} 58 | dev: true 59 | 60 | /@tsconfig/node12@1.0.11: 61 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 62 | dev: true 63 | 64 | /@tsconfig/node14@1.0.3: 65 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 66 | dev: true 67 | 68 | /@tsconfig/node16@1.0.3: 69 | resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} 70 | dev: true 71 | 72 | /@types/node@18.16.3: 73 | resolution: {integrity: sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==} 74 | dev: true 75 | 76 | /@types/simple-peer@9.11.5: 77 | resolution: {integrity: sha512-haXgWcAa3Y3Sn+T8lzkE4ErQUpYzhW6Cz2lh00RhQTyWt+xZ3s87wJPztUxlqSdFRqGhe2MQIBd0XsyHP3No4w==} 78 | dependencies: 79 | '@types/node': 18.16.3 80 | dev: true 81 | 82 | /@types/ws@8.5.4: 83 | resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} 84 | dependencies: 85 | '@types/node': 18.16.3 86 | dev: true 87 | 88 | /abbrev@1.1.1: 89 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 90 | dev: false 91 | 92 | /acorn-walk@8.2.0: 93 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 94 | engines: {node: '>=0.4.0'} 95 | dev: true 96 | 97 | /acorn@8.8.2: 98 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} 99 | engines: {node: '>=0.4.0'} 100 | hasBin: true 101 | dev: true 102 | 103 | /ansi-regex@2.1.1: 104 | resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} 105 | engines: {node: '>=0.10.0'} 106 | dev: false 107 | 108 | /aproba@1.2.0: 109 | resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} 110 | dev: false 111 | 112 | /are-we-there-yet@1.1.7: 113 | resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} 114 | dependencies: 115 | delegates: 1.0.0 116 | readable-stream: 2.3.8 117 | dev: false 118 | 119 | /arg@4.1.3: 120 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 121 | dev: true 122 | 123 | /balanced-match@1.0.2: 124 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 125 | dev: false 126 | 127 | /base64-js@1.5.1: 128 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 129 | dev: false 130 | 131 | /brace-expansion@1.1.11: 132 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 133 | dependencies: 134 | balanced-match: 1.0.2 135 | concat-map: 0.0.1 136 | dev: false 137 | 138 | /buffer@6.0.3: 139 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 140 | dependencies: 141 | base64-js: 1.5.1 142 | ieee754: 1.2.1 143 | dev: false 144 | 145 | /chownr@1.1.4: 146 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 147 | dev: false 148 | 149 | /code-point-at@1.1.0: 150 | resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} 151 | engines: {node: '>=0.10.0'} 152 | dev: false 153 | 154 | /commander@10.0.1: 155 | resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} 156 | engines: {node: '>=14'} 157 | dev: false 158 | 159 | /concat-map@0.0.1: 160 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 161 | dev: false 162 | 163 | /console-control-strings@1.1.0: 164 | resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} 165 | dev: false 166 | 167 | /core-util-is@1.0.3: 168 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 169 | dev: false 170 | 171 | /create-require@1.1.1: 172 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 173 | dev: true 174 | 175 | /debug@3.2.7: 176 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 177 | peerDependencies: 178 | supports-color: '*' 179 | peerDependenciesMeta: 180 | supports-color: 181 | optional: true 182 | dependencies: 183 | ms: 2.1.2 184 | dev: false 185 | 186 | /debug@4.3.4: 187 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 188 | engines: {node: '>=6.0'} 189 | peerDependencies: 190 | supports-color: '*' 191 | peerDependenciesMeta: 192 | supports-color: 193 | optional: true 194 | dependencies: 195 | ms: 2.1.2 196 | dev: false 197 | 198 | /deep-extend@0.6.0: 199 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 200 | engines: {node: '>=4.0.0'} 201 | dev: false 202 | 203 | /delegates@1.0.0: 204 | resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} 205 | dev: false 206 | 207 | /detect-libc@1.0.3: 208 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} 209 | engines: {node: '>=0.10'} 210 | hasBin: true 211 | dev: false 212 | 213 | /diff@4.0.2: 214 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 215 | engines: {node: '>=0.3.1'} 216 | dev: true 217 | 218 | /domexception@1.0.1: 219 | resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==} 220 | requiresBuild: true 221 | dependencies: 222 | webidl-conversions: 4.0.2 223 | dev: false 224 | optional: true 225 | 226 | /err-code@3.0.1: 227 | resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} 228 | dev: false 229 | 230 | /fs-minipass@1.2.7: 231 | resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} 232 | dependencies: 233 | minipass: 2.9.0 234 | dev: false 235 | 236 | /fs.realpath@1.0.0: 237 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 238 | dev: false 239 | 240 | /gauge@2.7.4: 241 | resolution: {integrity: sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==} 242 | dependencies: 243 | aproba: 1.2.0 244 | console-control-strings: 1.1.0 245 | has-unicode: 2.0.1 246 | object-assign: 4.1.1 247 | signal-exit: 3.0.7 248 | string-width: 1.0.2 249 | strip-ansi: 3.0.1 250 | wide-align: 1.1.5 251 | dev: false 252 | 253 | /get-browser-rtc@1.1.0: 254 | resolution: {integrity: sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==} 255 | dev: false 256 | 257 | /glob@7.2.3: 258 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 259 | dependencies: 260 | fs.realpath: 1.0.0 261 | inflight: 1.0.6 262 | inherits: 2.0.4 263 | minimatch: 3.1.2 264 | once: 1.4.0 265 | path-is-absolute: 1.0.1 266 | dev: false 267 | 268 | /has-unicode@2.0.1: 269 | resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} 270 | dev: false 271 | 272 | /iconv-lite@0.4.24: 273 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 274 | engines: {node: '>=0.10.0'} 275 | dependencies: 276 | safer-buffer: 2.1.2 277 | dev: false 278 | 279 | /ieee754@1.2.1: 280 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 281 | dev: false 282 | 283 | /ignore-walk@3.0.4: 284 | resolution: {integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==} 285 | dependencies: 286 | minimatch: 3.1.2 287 | dev: false 288 | 289 | /inflight@1.0.6: 290 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 291 | dependencies: 292 | once: 1.4.0 293 | wrappy: 1.0.2 294 | dev: false 295 | 296 | /inherits@2.0.4: 297 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 298 | dev: false 299 | 300 | /ini@1.3.8: 301 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 302 | dev: false 303 | 304 | /is-fullwidth-code-point@1.0.0: 305 | resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} 306 | engines: {node: '>=0.10.0'} 307 | dependencies: 308 | number-is-nan: 1.0.1 309 | dev: false 310 | 311 | /isarray@1.0.0: 312 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 313 | dev: false 314 | 315 | /make-error@1.3.6: 316 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 317 | dev: true 318 | 319 | /minimatch@3.1.2: 320 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 321 | dependencies: 322 | brace-expansion: 1.1.11 323 | dev: false 324 | 325 | /minimist@1.2.8: 326 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 327 | dev: false 328 | 329 | /minipass@2.9.0: 330 | resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} 331 | dependencies: 332 | safe-buffer: 5.2.1 333 | yallist: 3.1.1 334 | dev: false 335 | 336 | /minizlib@1.3.3: 337 | resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} 338 | dependencies: 339 | minipass: 2.9.0 340 | dev: false 341 | 342 | /mkdirp@0.5.6: 343 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 344 | hasBin: true 345 | dependencies: 346 | minimist: 1.2.8 347 | dev: false 348 | 349 | /ms@2.1.2: 350 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 351 | dev: false 352 | 353 | /needle@2.9.1: 354 | resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==} 355 | engines: {node: '>= 4.4.x'} 356 | hasBin: true 357 | dependencies: 358 | debug: 3.2.7 359 | iconv-lite: 0.4.24 360 | sax: 1.2.4 361 | transitivePeerDependencies: 362 | - supports-color 363 | dev: false 364 | 365 | /node-pre-gyp@0.13.0: 366 | resolution: {integrity: sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==} 367 | deprecated: 'Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future' 368 | hasBin: true 369 | dependencies: 370 | detect-libc: 1.0.3 371 | mkdirp: 0.5.6 372 | needle: 2.9.1 373 | nopt: 4.0.3 374 | npm-packlist: 1.4.8 375 | npmlog: 4.1.2 376 | rc: 1.2.8 377 | rimraf: 2.7.1 378 | semver: 5.7.1 379 | tar: 4.4.19 380 | transitivePeerDependencies: 381 | - supports-color 382 | dev: false 383 | 384 | /nopt@4.0.3: 385 | resolution: {integrity: sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==} 386 | hasBin: true 387 | dependencies: 388 | abbrev: 1.1.1 389 | osenv: 0.1.5 390 | dev: false 391 | 392 | /npm-bundled@1.1.2: 393 | resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} 394 | dependencies: 395 | npm-normalize-package-bin: 1.0.1 396 | dev: false 397 | 398 | /npm-normalize-package-bin@1.0.1: 399 | resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} 400 | dev: false 401 | 402 | /npm-packlist@1.4.8: 403 | resolution: {integrity: sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==} 404 | dependencies: 405 | ignore-walk: 3.0.4 406 | npm-bundled: 1.1.2 407 | npm-normalize-package-bin: 1.0.1 408 | dev: false 409 | 410 | /npmlog@4.1.2: 411 | resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} 412 | dependencies: 413 | are-we-there-yet: 1.1.7 414 | console-control-strings: 1.1.0 415 | gauge: 2.7.4 416 | set-blocking: 2.0.0 417 | dev: false 418 | 419 | /number-is-nan@1.0.1: 420 | resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} 421 | engines: {node: '>=0.10.0'} 422 | dev: false 423 | 424 | /object-assign@4.1.1: 425 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 426 | engines: {node: '>=0.10.0'} 427 | dev: false 428 | 429 | /once@1.4.0: 430 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 431 | dependencies: 432 | wrappy: 1.0.2 433 | dev: false 434 | 435 | /os-homedir@1.0.2: 436 | resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} 437 | engines: {node: '>=0.10.0'} 438 | dev: false 439 | 440 | /os-tmpdir@1.0.2: 441 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 442 | engines: {node: '>=0.10.0'} 443 | dev: false 444 | 445 | /osenv@0.1.5: 446 | resolution: {integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==} 447 | dependencies: 448 | os-homedir: 1.0.2 449 | os-tmpdir: 1.0.2 450 | dev: false 451 | 452 | /path-is-absolute@1.0.1: 453 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 454 | engines: {node: '>=0.10.0'} 455 | dev: false 456 | 457 | /process-nextick-args@2.0.1: 458 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 459 | dev: false 460 | 461 | /queue-microtask@1.2.3: 462 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 463 | dev: false 464 | 465 | /randombytes@2.1.0: 466 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 467 | dependencies: 468 | safe-buffer: 5.2.1 469 | dev: false 470 | 471 | /rc@1.2.8: 472 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 473 | hasBin: true 474 | dependencies: 475 | deep-extend: 0.6.0 476 | ini: 1.3.8 477 | minimist: 1.2.8 478 | strip-json-comments: 2.0.1 479 | dev: false 480 | 481 | /readable-stream@2.3.8: 482 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 483 | dependencies: 484 | core-util-is: 1.0.3 485 | inherits: 2.0.4 486 | isarray: 1.0.0 487 | process-nextick-args: 2.0.1 488 | safe-buffer: 5.1.2 489 | string_decoder: 1.1.1 490 | util-deprecate: 1.0.2 491 | dev: false 492 | 493 | /readable-stream@3.6.2: 494 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 495 | engines: {node: '>= 6'} 496 | dependencies: 497 | inherits: 2.0.4 498 | string_decoder: 1.3.0 499 | util-deprecate: 1.0.2 500 | dev: false 501 | 502 | /rimraf@2.7.1: 503 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 504 | hasBin: true 505 | dependencies: 506 | glob: 7.2.3 507 | dev: false 508 | 509 | /safe-buffer@5.1.2: 510 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 511 | dev: false 512 | 513 | /safe-buffer@5.2.1: 514 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 515 | dev: false 516 | 517 | /safer-buffer@2.1.2: 518 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 519 | dev: false 520 | 521 | /sax@1.2.4: 522 | resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} 523 | dev: false 524 | 525 | /semver@5.7.1: 526 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 527 | hasBin: true 528 | dev: false 529 | 530 | /set-blocking@2.0.0: 531 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 532 | dev: false 533 | 534 | /signal-exit@3.0.7: 535 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 536 | dev: false 537 | 538 | /simple-peer@9.11.1: 539 | resolution: {integrity: sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==} 540 | dependencies: 541 | buffer: 6.0.3 542 | debug: 4.3.4 543 | err-code: 3.0.1 544 | get-browser-rtc: 1.1.0 545 | queue-microtask: 1.2.3 546 | randombytes: 2.1.0 547 | readable-stream: 3.6.2 548 | transitivePeerDependencies: 549 | - supports-color 550 | dev: false 551 | 552 | /string-width@1.0.2: 553 | resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} 554 | engines: {node: '>=0.10.0'} 555 | dependencies: 556 | code-point-at: 1.1.0 557 | is-fullwidth-code-point: 1.0.0 558 | strip-ansi: 3.0.1 559 | dev: false 560 | 561 | /string_decoder@1.1.1: 562 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 563 | dependencies: 564 | safe-buffer: 5.1.2 565 | dev: false 566 | 567 | /string_decoder@1.3.0: 568 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 569 | dependencies: 570 | safe-buffer: 5.2.1 571 | dev: false 572 | 573 | /strip-ansi@3.0.1: 574 | resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} 575 | engines: {node: '>=0.10.0'} 576 | dependencies: 577 | ansi-regex: 2.1.1 578 | dev: false 579 | 580 | /strip-json-comments@2.0.1: 581 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 582 | engines: {node: '>=0.10.0'} 583 | dev: false 584 | 585 | /tar@4.4.19: 586 | resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} 587 | engines: {node: '>=4.5'} 588 | dependencies: 589 | chownr: 1.1.4 590 | fs-minipass: 1.2.7 591 | minipass: 2.9.0 592 | minizlib: 1.3.3 593 | mkdirp: 0.5.6 594 | safe-buffer: 5.2.1 595 | yallist: 3.1.1 596 | dev: false 597 | 598 | /ts-node@10.9.1(@types/node@18.16.3)(typescript@5.0.4): 599 | resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} 600 | hasBin: true 601 | peerDependencies: 602 | '@swc/core': '>=1.2.50' 603 | '@swc/wasm': '>=1.2.50' 604 | '@types/node': '*' 605 | typescript: '>=2.7' 606 | peerDependenciesMeta: 607 | '@swc/core': 608 | optional: true 609 | '@swc/wasm': 610 | optional: true 611 | dependencies: 612 | '@cspotcode/source-map-support': 0.8.1 613 | '@tsconfig/node10': 1.0.9 614 | '@tsconfig/node12': 1.0.11 615 | '@tsconfig/node14': 1.0.3 616 | '@tsconfig/node16': 1.0.3 617 | '@types/node': 18.16.3 618 | acorn: 8.8.2 619 | acorn-walk: 8.2.0 620 | arg: 4.1.3 621 | create-require: 1.1.1 622 | diff: 4.0.2 623 | make-error: 1.3.6 624 | typescript: 5.0.4 625 | v8-compile-cache-lib: 3.0.1 626 | yn: 3.1.1 627 | dev: true 628 | 629 | /typescript@5.0.4: 630 | resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} 631 | engines: {node: '>=12.20'} 632 | hasBin: true 633 | dev: true 634 | 635 | /util-deprecate@1.0.2: 636 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 637 | dev: false 638 | 639 | /v8-compile-cache-lib@3.0.1: 640 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 641 | dev: true 642 | 643 | /webidl-conversions@4.0.2: 644 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 645 | dev: false 646 | optional: true 647 | 648 | /wide-align@1.1.5: 649 | resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} 650 | dependencies: 651 | string-width: 1.0.2 652 | dev: false 653 | 654 | /wrappy@1.0.2: 655 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 656 | dev: false 657 | 658 | /wrtc@0.4.7: 659 | resolution: {integrity: sha512-P6Hn7VT4lfSH49HxLHcHhDq+aFf/jd9dPY7lDHeFhZ22N3858EKuwm2jmnlPzpsRGEPaoF6XwkcxY5SYnt4f/g==} 660 | engines: {node: ^8.11.2 || >=10.0.0} 661 | requiresBuild: true 662 | dependencies: 663 | node-pre-gyp: 0.13.0 664 | optionalDependencies: 665 | domexception: 1.0.1 666 | transitivePeerDependencies: 667 | - supports-color 668 | dev: false 669 | bundledDependencies: 670 | - node-pre-gyp 671 | 672 | /ws@8.13.0: 673 | resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} 674 | engines: {node: '>=10.0.0'} 675 | peerDependencies: 676 | bufferutil: ^4.0.1 677 | utf-8-validate: '>=5.0.2' 678 | peerDependenciesMeta: 679 | bufferutil: 680 | optional: true 681 | utf-8-validate: 682 | optional: true 683 | dev: false 684 | 685 | /yallist@3.1.1: 686 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 687 | dev: false 688 | 689 | /yn@3.1.1: 690 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 691 | engines: {node: '>=6'} 692 | dev: true 693 | -------------------------------------------------------------------------------- /server/laf/__websocket__: -------------------------------------------------------------------------------- 1 | import cloud from '@lafjs/cloud' 2 | 3 | export async function main(ctx: FunctionContext) { 4 | // 初始化 websocket user Map 列表 5 | // 也可用数据库保存,本示例代码用的 Laf 云函数的全局缓存 6 | let wsMap = cloud.shared.get("wsMap") // 获取 wsMap 7 | if (!wsMap) { 8 | wsMap = new Map() 9 | cloud.shared.set("wsMap", wsMap) // 设置 wsMap 10 | } 11 | // websocket 连接成功 12 | if (ctx.method === "WebSocket:connection") { 13 | const userId = generateUserId() 14 | wsMap = cloud.shared.get("wsMap") // 获取 wsMap 15 | wsMap.set(userId, ctx.socket); 16 | cloud.shared.set("wsMap", wsMap) // 设置 wsMap 17 | // ctx.socket.send(JSON.stringify({ type: 'sys', id: userId })); 18 | } 19 | 20 | // websocket 消息事件 21 | if (ctx.method === "WebSocket:message") { 22 | const { data } = ctx.params; 23 | if (data === 'ping') { 24 | ctx.socket.send('pong'); 25 | return 26 | } 27 | if (data === 'pong') { 28 | return 29 | } 30 | try { 31 | const userId = getKeyByValue(wsMap, ctx.socket); 32 | const body = JSON.parse(data) 33 | // 判断from to 34 | if (body.to && body.from === userId) { 35 | const socket = wsMap.get(body.to) 36 | if (socket) { 37 | socket.send(data) 38 | } 39 | return 40 | } 41 | if (body.id) { 42 | // 以下是更换id方法 43 | const exist = wsMap.get(body.id) 44 | // 不存在就更换id把 45 | if (!exist) { 46 | wsMap.set(body.id, ctx.socket) 47 | wsMap.delete(userId); 48 | ctx.socket.send(JSON.stringify({ type: 'sys', id: body.id })); 49 | } else { 50 | ctx.socket.send(JSON.stringify({ type: 'err', msg: 'id冲突' })); 51 | ctx.socket.close() 52 | } 53 | return 54 | } 55 | if (body.query) { 56 | const userId = getKeyByValue(wsMap, ctx.socket); 57 | ctx.socket.send(JSON.stringify({ type: 'sys', id: userId })); 58 | return 59 | } 60 | } catch (e) { 61 | console.error("send to err:", e.message); 62 | } 63 | } 64 | 65 | // websocket 关闭消息 66 | if (ctx.method === "WebSocket:close") { 67 | wsMap = cloud.shared.get("wsMap") // 获取 wsMap 68 | const userId = getKeyByValue(wsMap, ctx.socket); 69 | wsMap.delete(userId); 70 | cloud.shared.set("wsMap", wsMap) // 设置 wsMap 71 | ctx.socket.send("服务端已接收到关闭事件消息,你的 userID 是:" + userId); 72 | } 73 | } 74 | // 生成随机用户 ID 75 | function generateUserId() { 76 | return Math.random().toString(36).substring(2, 15); 77 | } 78 | 79 | // 遍历 userID 80 | function getKeyByValue(map, value) { 81 | for (const [key, val] of map.entries()) { 82 | if (val === value) { 83 | return key; 84 | } 85 | } 86 | } -------------------------------------------------------------------------------- /src/bin/ftong.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import { Command } from 'commander'; 3 | import { Server } from '../common/server'; 4 | import fs from 'fs' 5 | const program = new Command(); 6 | program 7 | .option('-s, --send', 'send mode') 8 | .option('-r, --receive', 'receive mode') 9 | .option('-i, --id ', 'id') 10 | .option('-t, --to ', 'to id') 11 | .option('-f, --file ', 'file') 12 | .option('-p, --password ', 'password') 13 | .option('-d, --dir ', 'dir', './tmp') 14 | .version('1.0.0') 15 | 16 | program.parse(process.argv); 17 | const options = program.opts(); 18 | console.log('argv is %o', options) 19 | 20 | if (options.send && options.file) { 21 | const server = new Server(options.id, { password: options.password }) 22 | server.on('connect', (id) => { 23 | console.log('connect id is %s', id) 24 | server.sendFile(options.to, options.file) 25 | .then(() => { 26 | console.log('发送完成') 27 | }) 28 | .catch(() => { 29 | console.log('发送失败') 30 | }) 31 | .finally(() => { 32 | process.exit(0) 33 | }) 34 | }) 35 | } else { 36 | if (!fs.existsSync(options.dir)) { 37 | fs.mkdirSync(options.dir); 38 | } 39 | const server = new Server(options.id, { receiveDir: options.dir, password: options.password }) 40 | server.on('connect', (id) => { 41 | console.log('connect id is %s', id) 42 | }) 43 | } -------------------------------------------------------------------------------- /src/common/common.ts: -------------------------------------------------------------------------------- 1 | import { Readable } from "stream"; 2 | import crypto from 'crypto' 3 | 4 | export function pipe(source: Readable, dest: any) { 5 | source.on('data', (chunk) => { 6 | if (dest.writable) { 7 | dest.send(chunk) 8 | } 9 | }); 10 | dest.on('drain', () => { 11 | source.resume(); 12 | }); 13 | dest.emit('pipe', source); 14 | return dest; 15 | }; 16 | 17 | export function generateStr() { 18 | return Math.random().toString(36).substring(2, 15); 19 | } 20 | 21 | export function md5(text: string) { 22 | const md5 = crypto.createHash('md5') 23 | return md5.update(text + 'dsd78').digest('hex') 24 | } 25 | -------------------------------------------------------------------------------- /src/common/event.ts: -------------------------------------------------------------------------------- 1 | import { EventEmitter } from 'events' 2 | 3 | export const event = new EventEmitter() -------------------------------------------------------------------------------- /src/common/server.ts: -------------------------------------------------------------------------------- 1 | import Peer from 'simple-peer' 2 | import fs from 'fs' 3 | const wrtc = require('wrtc') 4 | import WebSocket from 'ws' 5 | import { EventEmitter } from 'events' 6 | import { generateStr, md5, pipe } from './common' 7 | import path from 'path' 8 | import { Writable } from 'stream' 9 | 10 | const url = "wss://d75mnq.laf.run/__websocket__" 11 | 12 | interface ServerOptions { 13 | receiveDir?: string 14 | password?: string 15 | } 16 | 17 | export class Server extends EventEmitter { 18 | ws!: WebSocket | null 19 | id!: string 20 | options: ServerOptions 21 | closed = false 22 | heartbeatTimeout: NodeJS.Timeout | null = null; 23 | constructor(id?: string, options?: ServerOptions) { 24 | super() 25 | if (id) { 26 | this.id = id 27 | } 28 | this.options = options || {} 29 | this.connect() 30 | } 31 | 32 | private connect() { 33 | const ws = new WebSocket(url) 34 | ws.onopen = this.onOpen.bind(this); 35 | ws.onmessage = this.onMessage.bind(this); 36 | ws.onclose = this.onClose.bind(this); 37 | ws.onerror = this.onError.bind(this); 38 | this.ws = ws 39 | } 40 | 41 | private onOpen() { 42 | console.debug("ws connected"); 43 | if (this.id) { 44 | this.send({ id: this.id }) 45 | } else { 46 | this.send({ query: 'id' }) 47 | } 48 | this.startHeartbeat(); 49 | } 50 | 51 | private onMessage(res: WebSocket.MessageEvent) { 52 | const str = res.data.toString() 53 | if (str === 'ping' || str === 'pong') { 54 | return 55 | } 56 | try { 57 | const data = JSON.parse(str) 58 | if (data.type === 'auth') { 59 | const isPasswordValid = !this.options.password || md5(this.options.password) === data.password; 60 | if (isPasswordValid) { 61 | this.receiveFile(data.from, data.no); 62 | } else { 63 | console.log('用户密码验证失败', data.from); 64 | } 65 | } 66 | if (data.type === 'signal') { 67 | this.emit(`signal-${data.from}-${data.no}`, data) 68 | } 69 | // 未设置id的话使用消息设置 70 | if (data.type === 'sys' && data.id) { 71 | this.id = data.id 72 | this.emit('connect', data.id) 73 | } 74 | if (data.type === 'err') { 75 | console.error('err', data) 76 | } 77 | } catch (e) { 78 | 79 | } 80 | } 81 | 82 | private onClose(event: WebSocket.CloseEvent) { 83 | console.log('WebSocket disconnected:', event.code, event.reason); 84 | this.stopHeartbeat(); 85 | this.reconnect(); 86 | } 87 | 88 | private onError(event: WebSocket.ErrorEvent) { 89 | console.log('WebSocket error:', event); 90 | } 91 | 92 | private reconnect() { 93 | if (this.closed) { 94 | return 95 | } 96 | setTimeout(() => { 97 | this.connect(); 98 | }, 2000); 99 | } 100 | 101 | close() { 102 | if (this.ws) { 103 | this.closed = true 104 | this.stopHeartbeat(); 105 | this.ws.close(); 106 | this.ws = null 107 | console.log('WebSocket closed'); 108 | } 109 | } 110 | 111 | private startHeartbeat() { 112 | this.heartbeatTimeout = setInterval(() => { 113 | if (this.ws && this.ws.readyState === WebSocket.OPEN) { 114 | this.ws.send('ping'); 115 | } 116 | }, 30 * 1000); 117 | } 118 | 119 | private stopHeartbeat() { 120 | if (this.heartbeatTimeout) { 121 | clearInterval(this.heartbeatTimeout); 122 | this.heartbeatTimeout = null; 123 | } 124 | } 125 | 126 | send(data: object) { 127 | if (this.ws) { 128 | this.ws.send(JSON.stringify(data)) 129 | } 130 | } 131 | 132 | // 回复 133 | reply(data: any, newData: object) { 134 | this.send({ ...newData, from: data.to, to: data.from }) 135 | } 136 | 137 | async sendFile(to: string, filePath: string) { 138 | const exist = fs.existsSync(filePath) 139 | if (!exist) { 140 | throw Error('文件不存在') 141 | } 142 | const no = generateStr() 143 | const password = this.options.password ? md5(this.options.password) : '' 144 | this.send({ type: 'auth', to, from: this.id, no, password }) 145 | const peer = new DataPeer({ id: this.id, to, server: this, initiator: false, filePath, no }) 146 | return peer.start() 147 | } 148 | 149 | async receiveFile(to: string, no: string) { 150 | try { 151 | const peer = new DataPeer({ id: this.id, to, server: this, initiator: true, no }) 152 | return await peer.start() 153 | } catch (e) { 154 | console.error(e) 155 | } 156 | } 157 | } 158 | 159 | 160 | interface Option { 161 | initiator: boolean 162 | id: string 163 | to: string 164 | server: Server 165 | filePath?: string 166 | // 随机字符串 防止并发时消息错乱 167 | no: string 168 | } 169 | 170 | class DataPeer { 171 | options: Option 172 | peer: Peer.Instance 173 | connected = false 174 | fail = false 175 | constructor(options: Option) { 176 | this.options = options 177 | this.peer = new Peer({ initiator: this.options.initiator, wrtc: wrtc, objectMode: true }) 178 | } 179 | 180 | send(obj: object) { 181 | this.peer.send(JSON.stringify(obj)) 182 | } 183 | 184 | start() { 185 | return new Promise((resolve, reject) => { 186 | this.peer.on('signal', data => { 187 | // 发送消息 188 | this.options.server.send({ from: this.options.id, to: this.options.to, no: this.options.no, type: 'signal', data }) 189 | }) 190 | this.options.server.on(`signal-${this.options.to}-${this.options.no}`, d => { 191 | this.peer.signal(d.data) 192 | }) 193 | 194 | this.peer.on('connect', () => { 195 | console.log('peer connect') 196 | this.connected = true 197 | if (this.options.filePath) { 198 | const readStream = fs.createReadStream(this.options.filePath) 199 | const name = path.basename(this.options.filePath) 200 | const info = { type: 'file-info', action: 'start', name } 201 | this.send(info) 202 | pipe(readStream, this.peer) 203 | readStream.on('end', () => { 204 | info.action = 'end' 205 | this.send(info) 206 | this.peer.end() 207 | }) 208 | } 209 | }) 210 | 211 | let stream: Writable | null 212 | this.peer.on('data', d => { 213 | if (typeof d === 'string') { 214 | try { 215 | const { action, name } = JSON.parse(d) 216 | if (action === 'start') { 217 | console.log('The received file name is %s', name) 218 | stream = fs.createWriteStream(path.join(this.options.server.options.receiveDir || './tmp', `rec_${name}`)) 219 | } 220 | if (action === 'end') { 221 | stream?.end() 222 | stream = null 223 | } 224 | } catch (e) { 225 | console.error('peer data Json fail', e) 226 | } 227 | } 228 | if (typeof d === 'object') { 229 | stream?.write(d) 230 | } 231 | }) 232 | 233 | this.peer.on('error', d => { 234 | console.log('peer error', d) 235 | this.fail = true 236 | }) 237 | 238 | let timer: NodeJS.Timeout 239 | this.peer.on('end', () => { 240 | console.log('peer end') 241 | if (timer) { 242 | clearTimeout(timer) 243 | } 244 | if (stream) { 245 | stream.end() 246 | } 247 | // 移除监听器 248 | this.options.server.removeAllListeners(`signal-${this.options.to}-${this.options.no}`) 249 | if (!this.fail) { 250 | resolve(true) 251 | } else { 252 | reject(false) 253 | } 254 | //@ts-ignore 255 | this.peer = null 256 | }) 257 | 258 | // 10秒还没连接成功就关闭吧 259 | timer = setTimeout(() => { 260 | if (!this.connected) { 261 | this.fail = true 262 | this.peer.end() 263 | } 264 | }, 10 * 1000) 265 | }) 266 | } 267 | } -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Server } from "./common/server"; 2 | 3 | const Id1 = undefined 4 | const Id2 = '2' 5 | 6 | const s1 = new Server(Id1) 7 | const s2 = new Server(Id2) 8 | 9 | s1.on('connect', (id) => { 10 | console.log('connect', id) 11 | s1.sendFile(Id2, './tmp/test.zip').then(() => { 12 | console.log('发送完成') 13 | }) 14 | }) -------------------------------------------------------------------------------- /src/types/wrtc.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'wrtc'; 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | /* Projects */ 5 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 6 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 7 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 8 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 9 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 10 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 11 | /* Language and Environment */ 12 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 13 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 14 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 15 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 16 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 17 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 18 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 19 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 20 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 21 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 22 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 23 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 24 | /* Modules */ 25 | "module": "commonjs", /* Specify what module code is generated. */ 26 | "rootDir": "./src", /* Specify the root folder within your source files. */ 27 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 28 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 29 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 30 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 31 | "typeRoots": ["./node_modules/@types", "./src/types"], /* Specify multiple folders that act like './node_modules/@types'. */ 32 | "types": ["node"], /* Specify type package names to be included without being referenced in a source file. */ 33 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 34 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 35 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 36 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 37 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 38 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 39 | // "resolveJsonModule": true, /* Enable importing .json files. */ 40 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 41 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 42 | /* JavaScript Support */ 43 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 44 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 45 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 46 | /* Emit */ 47 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 48 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 49 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 50 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 51 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 52 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 53 | "outDir": "./dist", /* Specify an output folder for all emitted files. */ 54 | // "removeComments": true, /* Disable emitting comments. */ 55 | // "noEmit": true, /* Disable emitting files from a compilation. */ 56 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 57 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 58 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 59 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 60 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 63 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 64 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 67 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 69 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 70 | /* Interop Constraints */ 71 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 72 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 74 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 76 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 77 | /* Type Checking */ 78 | "strict": true, /* Enable all strict type-checking options. */ 79 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 80 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 81 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 82 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 83 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 84 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 85 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 86 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 87 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 88 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 89 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 90 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 91 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 92 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 93 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 94 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 95 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 96 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 97 | /* Completeness */ 98 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 99 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 100 | }, 101 | "exclude": [ 102 | "server" 103 | ] 104 | } --------------------------------------------------------------------------------