├── .editorconfig ├── .gitattributes ├── .gitignore ├── .yarn └── releases │ └── yarn-4.7.0.cjs ├── .yarnrc.yml ├── LICENSE ├── README.md ├── build └── build-patch.cts ├── encryption.plugin.js ├── package.json ├── rollup.config.js ├── src ├── index.ts ├── lib │ ├── components │ │ ├── encryptionButton.ts │ │ ├── encryptionInput.ts │ │ ├── index.ts │ │ └── updatePanel.ts │ ├── config.ts │ ├── crypto.ts │ ├── helpers.ts │ ├── index.ts │ ├── log.ts │ ├── storage.ts │ └── styles.ts └── types │ └── index.d.ts ├── tsconfig.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | 7 | [*.{js,json,yml}] 8 | charset = utf-8 9 | indent_style = space 10 | indent_size = 2 11 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | /.yarn/** linguist-vendored 2 | /.yarn/releases/* binary 3 | /.yarn/plugins/**/* binary 4 | /.pnp.* binary linguist-generated 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | .env.local 3 | 4 | .yarn/* 5 | !.yarn/patches 6 | !.yarn/plugins 7 | !.yarn/releases 8 | !.yarn/sdks 9 | !.yarn/versions 10 | 11 | node_modules/ 12 | npm-debug.log 13 | yarn-error.log 14 | 15 | !encryption.plugin.js 16 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | compressionLevel: mixed 2 | 3 | enableGlobalCache: false 4 | 5 | nodeLinker: node-modules 6 | 7 | yarnPath: .yarn/releases/yarn-4.7.0.cjs 8 | -------------------------------------------------------------------------------- /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 2020 Harry Merritt 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. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Discord Encryption 2 | 3 | > We're back baby :) 4 | 5 | An experimental encryption solution for Discord using [BetterDiscord](https://github.com/rauenzi/BetterDiscordApp/releases). 6 | 7 | Download the `encryption.plugin.js` from the releases [here](https://github.com/hmerritt/discord-encryption/releases/latest). 8 | 9 | ## Features 10 | 11 | Adds ability to encrypt / decrypt messages on discord using a set password 12 | 13 | - Utilizes AES-256 encryption via the [crypto-js library](https://www.npmjs.com/package/crypto-js) 14 | - Passwords are saved per-chat 15 | - Messages are decrypted the moment they are receved with little to no delay 16 | - Encrypted messages appear as green 17 | - Messages that fail to be decrypted (most likely due to an incorrect password) display a message and appear as red 18 | 19 | ![Context](https://i.imgur.com/aKGUqEn.png) 20 | ![Context](https://i.imgur.com/FqfRAAO.png) 21 | 22 | ## How to use 23 | 24 | ### Install 25 | 26 | - Install Discord 27 | - Install BetterDiscord 28 | - Navigate to Discord Preferences -> BD/Plugins -> Open Plugin Folder 29 | - Place 'encryption.plugin.js' in BetterDiscord's plugin folder 30 | - Enable encryption in the BD/Plugins preference pane. 31 | 32 | > It may ask to install an additional plugin `0PluginLibrary.plugin` which is required - It should install itself if you click `download`. 33 | 34 | ![Context](https://i.imgur.com/H2Z7N7I.png) 35 | ![Context](https://i.imgur.com/Ea0AdqO.png) 36 | 37 | ### Usage 38 | 39 | - To toggle the encryption simply click the lock icon. You will be prompted for a password, if none is found for the chat channel. 40 | - Received messages are decrypted automatically 41 | - To view or change the encryption password simply right-click the lock icon and an input box will appear - passwords are automatically saved as you type 42 | 43 | ![Context](https://i.imgur.com/Zumi9SZ.png) 44 | 45 | ### Encrypted Message 46 | 47 | ![Context](https://imgur.com/xaZ19kI.png) 48 | 49 | ### Decrypted Message 50 | 51 | ![Context](https://imgur.com/bL9foML.png) 52 | 53 | ## Development 54 | 55 | This plugin uses [`rollup`](https://rollupjs.org/) to bundle what's in `src` into the final `encryption.plugin.js` script. 56 | 57 | Getting `rollup` to work with `BetterDiscord` was a **gamechanger** as it allows the plugin to use multiple src files instead of just one. This makes development much nicer. 58 | 59 | How to build Build: 60 | 61 | ``` 62 | $ yarn && yarn build 63 | ``` 64 | 65 | > This runs both `rollup`, and a `build-patch` script to add the required `BetterDiscord` META tags. 66 | -------------------------------------------------------------------------------- /build/build-patch.cts: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const os = require('os'); 3 | const pathfs = require('path'); 4 | const prependFile = require('prepend-file'); 5 | const { config } = require('../src/lib/config'); 6 | 7 | const isDev = process.argv?.[2] === 'dev'; 8 | const pluginOutputFile = pathfs.join(__dirname, '../', 'encryption.plugin.js'); 9 | const betterDiscordPluginDir = `C:/Users/${os.userInfo().username}/AppData/Roaming/BetterDiscord/plugins`; 10 | 11 | const main = async () => { 12 | console.log(`> Patching build`); 13 | 14 | console.log(`> Adding META data to plugin output file`); 15 | await prependFile(pluginOutputFile, `/** 16 | * @name ${config.nameTitle} 17 | * @version ${config.version.current} 18 | * @description ${config.description} 19 | * @author ${config.author.github_username} 20 | * @website ${config.link.repository} 21 | * @source ${config.link.source} 22 | * @updateUrl ${config.link.source} 23 | */ 24 | `); 25 | 26 | if (isDev) { 27 | console.log(`> Copy output file to betterDiscord plugin directory`); 28 | fs.copyFileSync(pluginOutputFile, `${betterDiscordPluginDir}/encryption.plugin.js`); 29 | } 30 | 31 | console.log('> Patching complete :)'); 32 | }; 33 | 34 | (async () => { 35 | await main(); 36 | process.exit(); 37 | })(); 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-encryption", 3 | "version": "2.1.0", 4 | "type": "module", 5 | "description": "An experimental encryption solution for Discord", 6 | "scripts": { 7 | "build": "rollup -c && tsx ./build/build-patch.cts", 8 | "build:dev": "rollup -c && tsx ./build/build-patch.cts dev", 9 | "update": "yarn upgrade-interactive" 10 | }, 11 | "dependencies": { 12 | "crypto-js": "^4.2.0", 13 | "dayjs": "^1.11.13", 14 | "jquery": "^3.7.1" 15 | }, 16 | "devDependencies": { 17 | "@rollup/plugin-commonjs": "^28.0.3", 18 | "@rollup/plugin-node-resolve": "^16.0.1", 19 | "@rollup/plugin-typescript": "^12.1.2", 20 | "@types/crypto-js": "^4.2.2", 21 | "@types/node": "^20.17.24", 22 | "prepend-file": "^2.0.1", 23 | "rollup": "^4.35.0", 24 | "tslib": "^2.8.1", 25 | "tsx": "^4.19.3", 26 | "typescript": "^5.8.2" 27 | }, 28 | "repository": { 29 | "type": "git", 30 | "url": "https://github.com/hmerritt/discord-encryption.git" 31 | }, 32 | "packageManager": "yarn@4.7.0" 33 | } 34 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import commonjs from '@rollup/plugin-commonjs'; 3 | import resolve from '@rollup/plugin-node-resolve'; 4 | import typescript from '@rollup/plugin-typescript'; 5 | 6 | // https://rollupjs.org/introduction/ 7 | export default { 8 | input: 'src/index.ts', 9 | output: { 10 | file: 'encryption.plugin.js', 11 | format: 'cjs', // cjs | es 12 | sourcemap: false 13 | }, 14 | plugins: [ 15 | typescript(), 16 | resolve(), 17 | commonjs(), 18 | ], 19 | define: { 20 | "process.env": {}, 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | config, 3 | Config, 4 | Dummy, 5 | decryptAllMessages, 6 | downloadRequiredLibraryIfMissing, 7 | encrypt, 8 | getChannelId, 9 | getOrCreateUserData, 10 | getUserData, 11 | inject, 12 | injectLog, 13 | isEncryptionOn, 14 | isMessageEncrypted, 15 | log, 16 | PREFIX, 17 | removeElements, 18 | styles, 19 | } from "lib"; 20 | 21 | import { encryptionButton, encryptionInput, updatePanel } from "lib/components"; 22 | 23 | downloadRequiredLibraryIfMissing(); 24 | 25 | export default !window.ZeresPluginLibrary 26 | ? Dummy 27 | : (([Plugin, Api]) => { 28 | const plugin = (Plugin, Api) => { 29 | const { 30 | DiscordClasses, 31 | DiscordModules, 32 | DOMTools, 33 | Patcher, 34 | ReactTools, 35 | Utilities, 36 | WebpackModules, 37 | } = Api; 38 | 39 | return class Encryption extends Plugin { 40 | script: Config; 41 | components: any; 42 | 43 | /* 44 | * Define global variables 45 | */ 46 | constructor() { 47 | super(); 48 | injectLog(); 49 | 50 | // Script metadata 51 | this.script = { ...config }; 52 | 53 | // Stores component data 54 | this.components = {}; 55 | } 56 | 57 | /* 58 | * Runs once on plugin load (before start) 59 | */ 60 | load() { 61 | injectLog(); 62 | 63 | // Initialize DOM components 64 | this.initializeComponents(); 65 | 66 | // Check for new version 67 | this.checkForUpdate(); 68 | } 69 | 70 | /* 71 | * Runs each time plugin starts (after load on initial start) 72 | */ 73 | start() { 74 | // Inject styles 75 | inject("styles", "head", "append", this.components.styles); 76 | 77 | this.bootstrapUi(); 78 | 79 | Patcher.before( 80 | DiscordModules.MessageActions, 81 | "sendMessage", 82 | (t, a) => { 83 | let message = a[1].content; 84 | 85 | if ( 86 | isEncryptionOn(getUserData(), getChannelId()) && 87 | !isMessageEncrypted(message) && 88 | message.length > 0 89 | ) { 90 | const enc = 91 | PREFIX + 92 | encrypt( 93 | message, 94 | getOrCreateUserData(getUserData(), getChannelId()) 95 | ); 96 | 97 | a[1].content = enc; 98 | } 99 | } 100 | ); 101 | 102 | Patcher.after( 103 | DiscordModules.MessageActions, 104 | "receiveMessage", 105 | function () { 106 | this.bootstrapUi(); 107 | 108 | setTimeout( 109 | function () { 110 | this.bootstrapUi(); 111 | }.bind(this), 112 | 1000 113 | ); 114 | }.bind(this) 115 | ); 116 | } 117 | 118 | /* 119 | * Runs when plugin has been stopped 120 | */ 121 | stop() { 122 | // Remove all elements that have been injected 123 | removeElements(`[${this.script.name}]`); 124 | } 125 | 126 | /** 127 | * Runs after every channel switch 128 | */ 129 | onSwitch() { 130 | this.bootstrapUi(); 131 | 132 | setTimeout( 133 | function () { 134 | this.bootstrapUi(); 135 | }.bind(this), 136 | 1000 137 | ); 138 | } 139 | 140 | //-------------------------------------------------------------------- 141 | //-------------------------------------------------------------------- 142 | 143 | initializeComponents() { 144 | /* 145 | * CSS 146 | */ 147 | this.components.styles = ` 150 | `; 151 | 152 | /* 153 | * Register components 154 | */ 155 | this.components.updatePanel = updatePanel( 156 | this.script, 157 | getUserData() 158 | ); 159 | this.components.encryptionButton = encryptionButton( 160 | this.script, 161 | getUserData() 162 | ); 163 | this.components.encryptionInput = encryptionInput( 164 | this.script, 165 | getUserData() 166 | ); 167 | } 168 | 169 | bootstrapUi() { 170 | /* 171 | * Inject UI elements. Decode messages. 172 | */ 173 | this.components.encryptionInput.toggleInput("hide"); 174 | 175 | const channelId = getChannelId() || "global"; 176 | const channelState = getOrCreateUserData(getUserData(), channelId); 177 | 178 | this.components.encryptionButton.inject(); 179 | channelState.state && decryptAllMessages(channelState); 180 | } 181 | 182 | //-------------------------------------------------------------------- 183 | //-------------------------------------------------------------------- 184 | 185 | /* 186 | * Checks GitHub for a newer version of the script 187 | */ 188 | async checkForUpdate() { 189 | // Skip checking if user has previously chosen to ignore the update 190 | if (this.script.version.ignoreUpdate) return; 191 | log("Checking for updates..."); 192 | 193 | try { 194 | // Get latest script from GitHub 195 | const res = await ( 196 | await fetch(this.script.link.sourceConfig) 197 | ).text(); 198 | 199 | // Extract latest version from script 200 | const latestMatch = res.match(/(\d.\d.\d)/); 201 | const latest = latestMatch == null ? "" : latestMatch[0]; 202 | 203 | // Update global var with latest version 204 | this.script.version.latest = latest; 205 | 206 | // Make script versions a number (remove '.') 207 | const currentVersion = this.script.version.current.replace( 208 | /\./g, 209 | "" 210 | ); 211 | const latestVersion = latest.replace(/\./g, ""); 212 | 213 | // Compare current and latest version 214 | if (currentVersion < latestVersion) { 215 | // Update is available 216 | this.script.version.update = true; 217 | log( 218 | `An update is available! [${currentVersion} => ${latestVersion}]` 219 | ); 220 | 221 | // add update pop-up to ui 222 | this.components.updatePanel.inject(); 223 | } 224 | } catch (err) { 225 | log("error", `Error checking for updates: ${err}`); 226 | } 227 | } 228 | }; 229 | }; 230 | 231 | return plugin(Plugin, Api); 232 | })( 233 | window.ZeresPluginLibrary.buildPlugin({ 234 | info: { 235 | name: config.nameTitle, 236 | authors: [config.author], 237 | version: config.version.current, 238 | description: config.description, 239 | github: config.link.repository, 240 | github_raw: config.link.source, 241 | }, 242 | main: "index.js", 243 | }) 244 | ); 245 | -------------------------------------------------------------------------------- /src/lib/components/encryptionButton.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | 3 | import { 4 | checkInputPassword, 5 | getEncryptionPassword, 6 | isEncryptionOn, 7 | saveUserData, 8 | } from "../storage"; 9 | import { fade, getChannelId, getOrCreateUserData, inject } from "../helpers"; 10 | import { Config, UserData } from "../config"; 11 | import { encryptionInput } from "./encryptionInput"; 12 | 13 | /** 14 | * Encryption button 15 | */ 16 | 17 | const componentName = "encryptionButton"; 18 | 19 | const html = (script: Config, userData: UserData) => { 20 | const $button = document.createElement("button"); 21 | $button.setAttribute(script.name, componentName); 22 | $button.setAttribute("state", `${isEncryptionOn(userData) ?? false}`); 23 | $button.setAttribute("class", componentName); 24 | 25 | $button.innerHTML = ` 26 | 27 | 28 | 29 | `; 30 | 31 | $button.onclick = (evt: any) => { 32 | toggleState(script, userData); 33 | $(`[role="textbox"]`).focus(); 34 | }; 35 | 36 | // bind right click to adding encryption input 37 | $button.oncontextmenu = (evt: any) => { 38 | evt.preventDefault(); 39 | encryptionInput(script, userData).toggleInput(""); 40 | $("#encryptionInput input").val(getEncryptionPassword(userData)); 41 | checkInputPassword(); 42 | }; 43 | 44 | return $button; 45 | }; 46 | 47 | const close = (script: Config, userData: UserData, delay = 0) => { 48 | script.version.ignoreUpdate = true; 49 | fade(`[${script.name}].${componentName}`, "out", delay); 50 | }; 51 | 52 | const toggleState = (script: Config, userData: UserData) => { 53 | const $button = $(`[${script.name}].${componentName}`); 54 | const channelId = getChannelId() || "global"; 55 | getOrCreateUserData(userData, channelId); 56 | 57 | if (isEncryptionOn(userData, channelId)) { 58 | $button.attr("state", "false"); 59 | userData[channelId].state = false; 60 | } else { 61 | $button.attr("state", "true"); 62 | userData[channelId].state = true; 63 | } 64 | 65 | saveUserData(userData); 66 | }; 67 | 68 | export const encryptionButton = (script: Config, userData: UserData) => ({ 69 | html: () => html(script, userData), 70 | close: (delay = 0) => close(script, userData, delay), 71 | inject: () => 72 | inject( 73 | componentName, 74 | `[class^=attachWrapper] > button`, 75 | "after", 76 | html(script, userData) 77 | ), 78 | // 79 | toggleState: () => toggleState(script, userData), 80 | }); 81 | -------------------------------------------------------------------------------- /src/lib/components/encryptionInput.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | 3 | import { log } from "../log"; 4 | import { Config, UserData } from "../config"; 5 | import { getChannelId, fade, inject, getOrCreateUserData } from "../helpers"; 6 | import { checkInputPassword, saveUserData } from "../storage"; 7 | 8 | /** 9 | * Encryption input 10 | */ 11 | 12 | const componentName = "encryptionInput"; 13 | 14 | const html = (script: Config, userData: UserData) => { 15 | const $div = document.createElement("div"); 16 | $div.setAttribute("id", componentName); 17 | $div.setAttribute(script.name, componentName); 18 | $div.setAttribute("class", `${componentName} animated fadeInUp`); 19 | 20 | $div.innerHTML = ` 21 | 22 | 23 | 24 | 25 | `; 26 | 27 | // Change password on typing. 28 | $div.onkeyup = (evt: any) => { 29 | // set password and save in storage 30 | checkInputPassword(); 31 | const channelId = getChannelId() || "global"; 32 | getOrCreateUserData(userData, channelId); 33 | userData[channelId].password = evt.target.value; 34 | saveUserData(userData); 35 | }; 36 | 37 | // Toggle between **** and text for the password 38 | $div.querySelector("svg").onclick = (evt: any) => { 39 | evt.preventDefault(); 40 | if ($("#encryptionInput input").attr("type") == "password") { 41 | $("#encryptionInput input").attr("type", "text"); 42 | $("#encryptionInput svg path").attr( 43 | "d", 44 | "M11.83,9L15,12.16C15,12.11 15,12.05 15,12A3,3 0 0,0 12,9C11.94,9 11.89,9 11.83,9M7.53,9.8L9.08,11.35C9.03,11.56 9,11.77 9,12A3,3 0 0,0 12,15C12.22,15 12.44,14.97 12.65,14.92L14.2,16.47C13.53,16.8 12.79,17 12,17A5,5 0 0,1 7,12C7,11.21 7.2,10.47 7.53,9.8M2,4.27L4.28,6.55L4.73,7C3.08,8.3 1.78,10 1,12C2.73,16.39 7,19.5 12,19.5C13.55,19.5 15.03,19.2 16.38,18.66L16.81,19.08L19.73,22L21,20.73L3.27,3M12,7A5,5 0 0,1 17,12C17,12.64 16.87,13.26 16.64,13.82L19.57,16.75C21.07,15.5 22.27,13.86 23,12C21.27,7.61 17,4.5 12,4.5C10.6,4.5 9.26,4.75 8,5.2L10.17,7.35C10.74,7.13 11.35,7 12,7Z" 45 | ); 46 | } else { 47 | $("#encryptionInput input").attr("type", "password"); 48 | $("#encryptionInput svg path").attr( 49 | "d", 50 | "M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9M12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17M12,4.5C7,4.5 2.73,7.61 1,12C2.73,16.39 7,19.5 12,19.5C17,19.5 21.27,16.39 23,12C21.27,7.61 17,4.5 12,4.5Z" 51 | ); 52 | } 53 | }; 54 | 55 | return $div; 56 | }; 57 | 58 | const close = (script: Config, userData: UserData, delay = 0) => { 59 | script.version.ignoreUpdate = true; 60 | fade(`[${script.name}].${componentName}`, "out", delay); 61 | }; 62 | 63 | const toggleInput = (script: Config, userData: UserData, action = "") => { 64 | if (action == "show" || (action == "" && $("#encryptionInput").length == 0)) { 65 | inject(componentName, `form`, "before", html(script, userData)); 66 | } else { 67 | $("#encryptionInput").removeClass("fadeInUp").addClass("fadeOutDown"); 68 | setTimeout(function () { 69 | $("#encryptionInput").remove(); 70 | }, 288); 71 | } 72 | }; 73 | 74 | export const encryptionInput = (script: Config, userData: UserData) => ({ 75 | html: () => html(script, userData), 76 | close: (delay = 0) => close(script, userData, delay), 77 | inject: () => inject(componentName, "form", "before", html(script, userData)), 78 | // 79 | toggleInput: (action = "") => toggleInput(script, userData, action), 80 | }); 81 | -------------------------------------------------------------------------------- /src/lib/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./encryptionButton"; 2 | export * from "./encryptionInput"; 3 | export * from "./updatePanel"; 4 | -------------------------------------------------------------------------------- /src/lib/components/updatePanel.ts: -------------------------------------------------------------------------------- 1 | import { Config, UserData } from "../config"; 2 | import { fade, inject } from "../helpers"; 3 | 4 | /** 5 | * Update panel. Displays when an update is available. 6 | */ 7 | 8 | const componentName = "updatePanel"; 9 | 10 | const html = (script: Config, userData: UserData) => { 11 | const $div = document.createElement("div"); 12 | $div.setAttribute(script.name, componentName); 13 | $div.setAttribute("class", `${componentName} animated fadeInUp`); 14 | 15 | $div.innerHTML = ` 16 |

An update is available for the discord encryption plugin!

17 | No Thanks 18 | `; 19 | 20 | $div.onclick = (evt: any) => { 21 | // Open link to GitHub if: 22 | // 1. User didn't click on close button 23 | // 2. ignoreUpdates is true 24 | if (evt?.target?.localName !== "span" && !script.version.ignoreUpdate) { 25 | window.open(script.link.repository, "_blank"); 26 | } 27 | 28 | close(script, userData, 0); 29 | }; 30 | 31 | return $div; 32 | }; 33 | 34 | const close = (script: Config, userData: UserData, delay = 0) => { 35 | script.version.ignoreUpdate = true; 36 | fade(`[${script.name}].${componentName}`, "out", delay); 37 | }; 38 | 39 | export const updatePanel = (script: Config, userData: UserData) => ({ 40 | html: () => html(script, userData), 41 | close: (delay = 0) => close(script, userData, delay), 42 | inject: () => inject(componentName, "form", "after", html(script, userData)), 43 | }); 44 | -------------------------------------------------------------------------------- /src/lib/config.ts: -------------------------------------------------------------------------------- 1 | export const config = { 2 | name: "encryptionPlugin", 3 | nameTitle: "Encryption", 4 | description: "Message encryption using AES-256", 5 | author: { 6 | name: "Harry Merritt", 7 | github_username: "hmerritt", 8 | twitter_username: "hmrrtt", 9 | }, 10 | version: { 11 | current: "2.1.0", 12 | latest: "", 13 | update: false, 14 | ignoreUpdate: false, 15 | }, 16 | link: { 17 | repository: "https://github.com/hmerritt/discord-encryption", 18 | source: 19 | "https://github.com/hmerritt/discord-encryption/releases/latest/download/encryption.plugin.js", 20 | sourceConfig: 21 | "https://raw.githubusercontent.com/hmerritt/discord-encryption/master/src/lib/config.ts", 22 | }, 23 | }; 24 | 25 | export type Config = typeof config; 26 | export type UserData = Record; 27 | -------------------------------------------------------------------------------- /src/lib/crypto.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | import crypto from "crypto-js"; 3 | 4 | import { UserData } from "./config"; 5 | 6 | export const PREFIX = "#!aes/"; 7 | 8 | export const encrypt = (msg: string, channelData: UserData["global"]) => { 9 | if (isMessageEncrypted(msg)) return msg; 10 | 11 | const key = crypto.SHA512(channelData.password); 12 | const iv = crypto.enc.Hex.parse("00000000000000000000000000000000"); 13 | 14 | return crypto.AES.encrypt(msg, key, { 15 | iv: iv, 16 | padding: crypto.pad.Iso10126, 17 | }).toString(); 18 | }; 19 | 20 | export const decrypt = (msg: string, channelData: UserData["global"]) => { 21 | if (isMessageEncrypted(msg)) msg = msg.substring(6); 22 | 23 | const key = crypto.SHA512(channelData.password); 24 | const iv = crypto.enc.Hex.parse("00000000000000000000000000000000"); 25 | 26 | return crypto.AES.decrypt(msg, key, { 27 | iv: iv, 28 | padding: crypto.pad.Iso10126, 29 | }).toString(crypto.enc.Utf8); 30 | }; 31 | 32 | export const isMessageEncrypted = (msg: string) => { 33 | if (msg.substring(0, 6) === PREFIX) return true; 34 | return false; 35 | }; 36 | 37 | //-------------------------------------------------------------------- 38 | //-------------------------------------------------------------------- 39 | 40 | export const decryptAllMessages = (channelData: UserData["global"]) => { 41 | // Loop all messages 42 | let markup = $(`div[class*="messageContent"]`); 43 | if (markup.length == 0) markup = $(`div[id*="message-content"]`); 44 | 45 | $(markup).each(function () { 46 | try { 47 | const message = $(this).text().trim(); 48 | if (!isMessageEncrypted(message)) return; 49 | 50 | const decrypted = decrypt(message, channelData); 51 | if (!decrypted) throw "decryption failed"; 52 | 53 | $(this).html(decrypted).addClass("decrypted"); 54 | } catch (e) { 55 | $(this) 56 | .html("(failed to decrypt. most likely the wrong password)") 57 | .addClass("not-decrypted"); 58 | } 59 | }); 60 | }; 61 | -------------------------------------------------------------------------------- /src/lib/helpers.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | 3 | import { UserData, config } from "./config"; 4 | 5 | /** 6 | * Checks if an element exists in the DOM. 7 | */ 8 | export const elementExists = (querySelector) => { 9 | if ($(querySelector).length === 0) return false; 10 | return true; 11 | }; 12 | 13 | /** 14 | * Fade an object in/out. 15 | */ 16 | export const fade = (querySelector, fadeType, delay = 0) => { 17 | setTimeout(function () { 18 | if (fadeType === "in") { 19 | $(querySelector).removeClass("fadeOutDown").addClass("fadeInUp"); 20 | } else if (fadeType === "out") { 21 | $(querySelector).removeClass("fadeInUp").addClass("fadeOutDown"); 22 | setTimeout(function () { 23 | $(querySelector).remove(); 24 | }, 500); 25 | } 26 | }, delay); 27 | }; 28 | 29 | /** 30 | * The channel id for current chat. 31 | */ 32 | export const getChannelId = () => { 33 | return window.location.pathname.split("/").pop(); 34 | }; 35 | 36 | /** 37 | * Create object if it does not exist. 38 | */ 39 | export const getOrCreateUserData = ( 40 | userData: UserData, 41 | channelId = "global" 42 | ) => { 43 | if (!userData[channelId]) { 44 | userData[channelId] = { 45 | state: userData?.global?.state ?? false, 46 | password: userData?.global?.password ?? "", 47 | }; 48 | } 49 | 50 | return userData[channelId]; 51 | }; 52 | 53 | /** 54 | * Inject content into the page. Prevents multiple injections. 55 | */ 56 | export const inject = (name, querySelector, how, content) => { 57 | // Check if element has already been injected 58 | if (!elementExists(`[${config.name}=${name}]`)) { 59 | // Decide how to add the content into the page 60 | switch (how) { 61 | case "append": 62 | $(querySelector).append(content); 63 | break; 64 | 65 | case "prepend": 66 | $(querySelector).prepend(content); 67 | break; 68 | 69 | case "after": 70 | $(querySelector).after(content); 71 | break; 72 | 73 | case "before": 74 | $(querySelector).before(content); 75 | break; 76 | } 77 | } 78 | }; 79 | 80 | export const padChar = ( 81 | str: string | number, 82 | size = 5, 83 | char = " ", 84 | append = false 85 | ): string => { 86 | str = String(str); 87 | while (str.length < size) str = append ? str + char : char + str; 88 | return str; 89 | }; 90 | 91 | export const removeElements = (querySelector) => { 92 | $(querySelector).remove(); 93 | }; 94 | 95 | //-------------------------------------------------------------------- 96 | //-------------------------------------------------------------------- 97 | 98 | export class Dummy { 99 | constructor() {} 100 | start() {} 101 | stop() {} 102 | } 103 | 104 | export const downloadRequiredLibraryIfMissing = () => { 105 | if (window.ZeresPluginLibrary) return; 106 | 107 | window.BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.nameTitle} is missing. Please click Download Now to install it.`, { 108 | confirmText: "Download Now", 109 | cancelText: "Cancel", 110 | onConfirm: () => { 111 | require("request").get("https://betterdiscord.app/gh-redirect?id=9", async (err, resp, body) => { 112 | if (err) return require("electron").shell.openExternal("https://betterdiscord.app/Download?id=9"); 113 | if (resp.statusCode === 302) { 114 | require("request").get(resp.headers.location, async (error, response, content) => { 115 | if (error) return require("electron").shell.openExternal("https://betterdiscord.app/Download?id=9"); 116 | await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), content, r)); 117 | }); 118 | } 119 | else { 120 | await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body, r)); 121 | } 122 | }); 123 | } 124 | }); 125 | } 126 | -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./config"; 2 | export * from "./crypto"; 3 | export * from "./helpers"; 4 | export * from "./log"; 5 | export * from "./storage"; 6 | export * from "./styles"; 7 | -------------------------------------------------------------------------------- /src/lib/log.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | import dayjs from "dayjs"; 4 | 5 | import { padChar } from "./helpers"; 6 | import { config } from "./config"; 7 | 8 | enum ConsoleFunctions { 9 | debug = "debug", 10 | error = "error", 11 | info = "info", 12 | log = "log", 13 | table = "table", 14 | trace = "trace", 15 | warn = "warn", 16 | } 17 | 18 | type chars = string | number; 19 | const styles = ["color: #888"].join(";"); 20 | const timestamp = () => dayjs().format("HH:mm:ss.SSS"); 21 | const padStr = (str: chars = "", c = 5) => padChar(str, c, " ", true); 22 | 23 | // Internal log store class. Keeps track of log times and counts per namespace. 24 | // 25 | // Injects into global object as `window.logStore`. 26 | export class LogStore { 27 | defaultNamespace: string; 28 | logStore: Record; 29 | 30 | constructor() { 31 | this.defaultNamespace = "_log"; 32 | this.logStore = { 33 | _log: [Date.now(), 1], 34 | }; 35 | } 36 | 37 | get(namespace = this.defaultNamespace) { 38 | return this.logStore?.[namespace]; 39 | } 40 | 41 | getTime(namespace = this.defaultNamespace) { 42 | return this.logStore?.[namespace]?.[0] || Date.now(); 43 | } 44 | 45 | getCount(namespace = this.defaultNamespace) { 46 | return this.logStore?.[namespace]?.[1] || 1; 47 | } 48 | 49 | set(namespace = this.defaultNamespace, time = Date.now(), count = 1) { 50 | return (this.logStore[namespace] = [time, count]); 51 | } 52 | 53 | increment(namespace = this.defaultNamespace) { 54 | return this.set(namespace, Date.now(), this.getCount(namespace) + 1); 55 | } 56 | } 57 | 58 | export type LogStoreType = LogStore; 59 | 60 | const timestampString = (diff: chars, namespace?: string) => { 61 | const ts = `${timestamp()} +${padStr(diff)}`; 62 | const prefix = `%c${ts} [${config.name}]%s`; 63 | 64 | if (namespace === window.logStore.defaultNamespace) { 65 | return `${prefix}`; 66 | } 67 | 68 | return `${prefix} ${padStr(namespace, 10)}`; 69 | }; 70 | 71 | const _log = (namespace: string, logLevel: any, ...args: any[]) => { 72 | const timeElapsed = dayjs().diff( 73 | window.logStore.getTime(namespace), 74 | "millisecond" 75 | ); 76 | const stringToLog = timestampString(timeElapsed, namespace); 77 | window.logStore.increment(namespace); 78 | 79 | // Special case for table. No timestamp or styles as it messes with the table. 80 | if (logLevel === "table") { 81 | return console.table(...args); 82 | } 83 | 84 | if (ConsoleFunctions[logLevel as ConsoleFunctions]) { 85 | console[ConsoleFunctions[logLevel as ConsoleFunctions]]( 86 | stringToLog, 87 | styles, 88 | "", 89 | ...args 90 | ); 91 | } else { 92 | console.log(stringToLog, styles, "", logLevel, ...args); 93 | } 94 | }; 95 | 96 | /** 97 | * log in development only (`NODE_ENV !== "production"`) 98 | * 99 | * Adds a timestamp and timediff to each log automatically. 100 | */ 101 | export const log = (logLevel: any, ...args: any[]) => { 102 | _log(window.logStore.defaultNamespace, logLevel, ...args); 103 | }; 104 | 105 | /** 106 | * Alias for `log`, plus namespaces logs to keep them separate. 107 | * 108 | * @example debug("socket", "msg received") -> "[socket] msg recieved" 109 | */ 110 | export const debug = (namespace: string, logLevel: any, ...args: any[]) => { 111 | _log(namespace, logLevel, ...args); 112 | }; 113 | 114 | export const injectLog = () => { 115 | window.logStore = new LogStore(); 116 | window.log = log; 117 | window.debug = debug; 118 | }; 119 | -------------------------------------------------------------------------------- /src/lib/storage.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | 3 | import { log } from "./log"; 4 | import { getChannelId } from "./helpers"; 5 | import { UserData, config } from "./config"; 6 | 7 | export const getUserData = (): UserData => { 8 | const defaultUserData = { 9 | global: { 10 | password: "", 11 | state: false, 12 | }, 13 | }; 14 | 15 | try { 16 | if (typeof window?.BdApi?.getData !== "undefined") { 17 | const getUserData = window?.BdApi?.getData(config.name, config.name); 18 | return JSON.parse(getUserData); 19 | } 20 | 21 | if (typeof localStorage !== "undefined") { 22 | const getUserData = JSON.parse(localStorage.getItem(config.name) || ""); 23 | if (getUserData?.global) return getUserData; 24 | } 25 | } catch (error) { 26 | log("error", "Error parsing local storage", error); 27 | } 28 | 29 | return defaultUserData; 30 | }; 31 | 32 | export const saveUserData = (userData: UserData) => { 33 | try { 34 | if (typeof window?.BdApi?.setData !== "undefined") { 35 | return window?.BdApi?.setData( 36 | config.name, 37 | config.name, 38 | JSON.stringify(userData) 39 | ); 40 | } 41 | 42 | if (typeof localStorage !== "undefined") { 43 | return localStorage.setItem(config.name, JSON.stringify(userData)); 44 | } 45 | 46 | log("warn", "No storage found, did not save data"); 47 | } catch (error) { 48 | log("error", "Error saving to local storage", error); 49 | } 50 | }; 51 | 52 | export const isEncryptionOn = ( 53 | userData: any, 54 | channelId = getChannelId() || "" 55 | ) => { 56 | const globalState = userData?.global?.state; 57 | const chatState = userData?.[channelId]?.state; 58 | return globalState || chatState ? true : false; 59 | }; 60 | 61 | export const getEncryptionPassword = ( 62 | userData: any, 63 | channelId = getChannelId() || "" 64 | ): string => { 65 | return userData?.[channelId]?.password || userData?.global?.password || ""; 66 | }; 67 | 68 | export const checkInputPassword = () => { 69 | // if password is less than 3 - turn red 70 | if ($("#encryptionInput input").val().length < 3) { 71 | $("#encryptionInput").removeClass("nice-password"); 72 | } else { 73 | $("#encryptionInput").addClass("nice-password"); 74 | } 75 | }; 76 | -------------------------------------------------------------------------------- /src/lib/styles.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 3 | /** 4 | * Passthrough tag literal. Useful for syntax highlighting only. 5 | */ 6 | const css = (strings, ...values) => String.raw({ raw: strings }, ...values); 7 | 8 | /* 9 | * CSS styles 10 | */ 11 | export const styles = css` 12 | form div[class^="attachWrapper"] { 13 | display: flex; 14 | } 15 | 16 | .encryptionButton { 17 | top: 0; 18 | height: 44px; 19 | padding: 10px 8px; 20 | padding-right: 18px; 21 | position: sticky; 22 | background: none; 23 | transition: all 280ms ease; 24 | -webkit-transition: all 280ms ease; 25 | } 26 | .encryptionButton svg { 27 | width: 24px; 28 | height: 24px; 29 | } 30 | 31 | .encryptionButton[state="true"] path { 32 | fill: #43b581; 33 | } 34 | .encryptionButton[state="false"] path { 35 | fill: #b9bbbe; 36 | } 37 | 38 | .encryptionButton[state="true"]:hover path { 39 | fill: #1c9c6d; 40 | } 41 | .encryptionButton[state="false"]:hover path { 42 | fill: #dedede; 43 | } 44 | 45 | #encryptionInput { 46 | position: relative; 47 | width: 280px; 48 | height: 40px; 49 | overflow: hidden; 50 | margin-left: 16px; 51 | border-radius: 5px; 52 | background-color: #ff2949; 53 | -webkit-transition: all 280ms ease 10ms; 54 | transition: all 280ms ease 10ms; 55 | } 56 | 57 | #encryptionInput svg { 58 | position: absolute; 59 | cursor: pointer; 60 | top: 8px; 61 | left: 10px; 62 | z-index: 1; 63 | } 64 | 65 | #encryptionInput input { 66 | position: absolute; 67 | top: 0px; 68 | left: 34px; 69 | width: 100%; 70 | height: 100%; 71 | border: none; 72 | text-indent: 4px; 73 | border-radius: 5px; 74 | background-color: #ff2949; 75 | -webkit-transition: all 280ms ease; 76 | transition: all 280ms ease; 77 | outline: 0px !important; 78 | -webkit-appearance: none; 79 | -webkit-box-shadow: none; 80 | box-shadow: none; 81 | resize: none; 82 | color: #ddd; 83 | font-size: 0.88em; 84 | padding: 1px 8px; 85 | white-space: nowrap; 86 | } 87 | #encryptionInput input::placeholder { 88 | color: #ddd; 89 | } 90 | 91 | #encryptionInput.nice-password, 92 | #encryptionInput.nice-password input { 93 | background-color: rgb(67, 181, 129); 94 | } 95 | 96 | .decrypted { 97 | color: #43b581 !important; 98 | } 99 | .decrypted a { 100 | color: #1c9c6d !important; 101 | } 102 | .not-decrypted { 103 | color: #ff2949 !important; 104 | } 105 | 106 | .updatePanel { 107 | position: absolute; 108 | display: flex; 109 | align-items: center; 110 | top: 15px; 111 | left: 0px; 112 | width: 100%; 113 | height: 40px; 114 | z-index: 10; 115 | overflow: hidden; 116 | cursor: pointer; 117 | border-radius: 5px; 118 | background-color: #7289da; 119 | -webkit-user-select: none; 120 | user-select: none; 121 | transition: all 280ms ease 40ms; 122 | -webkit-transition: all 280ms ease 40ms; 123 | } 124 | .updatePanel:hover { 125 | background-color: #677bc4; 126 | } 127 | .updatePanel:active { 128 | background-color: #5b6eae; 129 | } 130 | 131 | .updatePanel h2 { 132 | color: #fff; 133 | font-size: 0.85em; 134 | margin-left: 1.2em; 135 | white-space: nowrap; 136 | text-overflow: ellipsis; 137 | overflow: hidden; 138 | } 139 | 140 | .updatePanel span[action="close"] { 141 | cursor: pointer; 142 | display: flex; 143 | justify-content: center; 144 | align-items: center; 145 | width: 77px; 146 | height: 24px; 147 | white-space: nowrap; 148 | margin-right: 1.2em; 149 | margin-left: auto; 150 | border-radius: 3px; 151 | border: 1px solid #fff; 152 | text-align: center; 153 | font-size: 0.85em; 154 | color: #fff; 155 | } 156 | .updatePanel span[action="close"]:hover { 157 | color: #7289da; 158 | background-color: #fff; 159 | } 160 | 161 | .animated { 162 | animation-duration: 280ms; 163 | animation-fill-mode: both; 164 | -webkit-animation-duration: 280ms; 165 | -webkit-animation-fill-mode: both; 166 | } 167 | 168 | .fadeInUp { 169 | opacity: 0; 170 | animation-name: fadeInUp; 171 | -webkit-animation-name: fadeInUp; 172 | } 173 | .fadeOutDown { 174 | opacity: 1; 175 | animation-name: fadeOutDown; 176 | -webkit-animation-name: fadeOutDown; 177 | } 178 | 179 | @keyframes fadeInUp { 180 | from { 181 | transform: translate3d(0, -6px, 0); 182 | } 183 | 184 | to { 185 | transform: translate3d(0, -16px, 0); 186 | opacity: 1; 187 | } 188 | } 189 | @-webkit-keyframes fadeInUp { 190 | from { 191 | transform: translate3d(0, -6px, 0); 192 | } 193 | 194 | to { 195 | transform: translate3d(0, -16px, 0); 196 | opacity: 1; 197 | } 198 | } 199 | @keyframes fadeOutDown { 200 | from { 201 | transform: translate3d(0, -16px, 0); 202 | } 203 | 204 | to { 205 | transform: translate3d(0, -6px, 0); 206 | opacity: 0; 207 | } 208 | } 209 | @-webkit-keyframes fadeOutDown { 210 | from { 211 | transform: translate3d(0, -16px, 0); 212 | } 213 | 214 | to { 215 | transform: translate3d(0, -6px, 0); 216 | opacity: 0; 217 | } 218 | } 219 | `; 220 | -------------------------------------------------------------------------------- /src/types/index.d.ts: -------------------------------------------------------------------------------- 1 | type BdApiPartial = { 2 | ContextMenu: any; 3 | DOM: any; 4 | Data: { 5 | delete: (pluginName: string, key: string) => void; 6 | load: (pluginName: string, key: string) => any; 7 | save: (pluginName: string, key: string, data: any) => void; 8 | }; 9 | Patcher: any; 10 | Plugins: any; 11 | React: any; 12 | ReactDOM: any; 13 | ReactUtils: any; 14 | Themes: any; 15 | UI: any; 16 | Utils: any; 17 | Webpack: any; 18 | [x: string]: any; 19 | }; 20 | 21 | declare global { 22 | var BdApi: BdApiPartial; 23 | var ZeresPluginLibrary: any; 24 | 25 | interface Window { 26 | BdApi: BdApiPartial; 27 | ZeresPluginLibrary: any; 28 | } 29 | } 30 | 31 | export {}; 32 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "allowSyntheticDefaultImports": true, 5 | "baseUrl": "src", 6 | "lib": ["es6", "dom"], 7 | "module": "ES6", 8 | "target": "ES6", 9 | "moduleResolution": "Node", 10 | "typeRoots": ["./node_modules/@types", "./src/types"] 11 | }, 12 | "include": ["src/**/*"] 13 | } 14 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 8 6 | cacheKey: 10 7 | 8 | "@esbuild/aix-ppc64@npm:0.25.1": 9 | version: 0.25.1 10 | resolution: "@esbuild/aix-ppc64@npm:0.25.1" 11 | conditions: os=aix & cpu=ppc64 12 | languageName: node 13 | linkType: hard 14 | 15 | "@esbuild/android-arm64@npm:0.25.1": 16 | version: 0.25.1 17 | resolution: "@esbuild/android-arm64@npm:0.25.1" 18 | conditions: os=android & cpu=arm64 19 | languageName: node 20 | linkType: hard 21 | 22 | "@esbuild/android-arm@npm:0.25.1": 23 | version: 0.25.1 24 | resolution: "@esbuild/android-arm@npm:0.25.1" 25 | conditions: os=android & cpu=arm 26 | languageName: node 27 | linkType: hard 28 | 29 | "@esbuild/android-x64@npm:0.25.1": 30 | version: 0.25.1 31 | resolution: "@esbuild/android-x64@npm:0.25.1" 32 | conditions: os=android & cpu=x64 33 | languageName: node 34 | linkType: hard 35 | 36 | "@esbuild/darwin-arm64@npm:0.25.1": 37 | version: 0.25.1 38 | resolution: "@esbuild/darwin-arm64@npm:0.25.1" 39 | conditions: os=darwin & cpu=arm64 40 | languageName: node 41 | linkType: hard 42 | 43 | "@esbuild/darwin-x64@npm:0.25.1": 44 | version: 0.25.1 45 | resolution: "@esbuild/darwin-x64@npm:0.25.1" 46 | conditions: os=darwin & cpu=x64 47 | languageName: node 48 | linkType: hard 49 | 50 | "@esbuild/freebsd-arm64@npm:0.25.1": 51 | version: 0.25.1 52 | resolution: "@esbuild/freebsd-arm64@npm:0.25.1" 53 | conditions: os=freebsd & cpu=arm64 54 | languageName: node 55 | linkType: hard 56 | 57 | "@esbuild/freebsd-x64@npm:0.25.1": 58 | version: 0.25.1 59 | resolution: "@esbuild/freebsd-x64@npm:0.25.1" 60 | conditions: os=freebsd & cpu=x64 61 | languageName: node 62 | linkType: hard 63 | 64 | "@esbuild/linux-arm64@npm:0.25.1": 65 | version: 0.25.1 66 | resolution: "@esbuild/linux-arm64@npm:0.25.1" 67 | conditions: os=linux & cpu=arm64 68 | languageName: node 69 | linkType: hard 70 | 71 | "@esbuild/linux-arm@npm:0.25.1": 72 | version: 0.25.1 73 | resolution: "@esbuild/linux-arm@npm:0.25.1" 74 | conditions: os=linux & cpu=arm 75 | languageName: node 76 | linkType: hard 77 | 78 | "@esbuild/linux-ia32@npm:0.25.1": 79 | version: 0.25.1 80 | resolution: "@esbuild/linux-ia32@npm:0.25.1" 81 | conditions: os=linux & cpu=ia32 82 | languageName: node 83 | linkType: hard 84 | 85 | "@esbuild/linux-loong64@npm:0.25.1": 86 | version: 0.25.1 87 | resolution: "@esbuild/linux-loong64@npm:0.25.1" 88 | conditions: os=linux & cpu=loong64 89 | languageName: node 90 | linkType: hard 91 | 92 | "@esbuild/linux-mips64el@npm:0.25.1": 93 | version: 0.25.1 94 | resolution: "@esbuild/linux-mips64el@npm:0.25.1" 95 | conditions: os=linux & cpu=mips64el 96 | languageName: node 97 | linkType: hard 98 | 99 | "@esbuild/linux-ppc64@npm:0.25.1": 100 | version: 0.25.1 101 | resolution: "@esbuild/linux-ppc64@npm:0.25.1" 102 | conditions: os=linux & cpu=ppc64 103 | languageName: node 104 | linkType: hard 105 | 106 | "@esbuild/linux-riscv64@npm:0.25.1": 107 | version: 0.25.1 108 | resolution: "@esbuild/linux-riscv64@npm:0.25.1" 109 | conditions: os=linux & cpu=riscv64 110 | languageName: node 111 | linkType: hard 112 | 113 | "@esbuild/linux-s390x@npm:0.25.1": 114 | version: 0.25.1 115 | resolution: "@esbuild/linux-s390x@npm:0.25.1" 116 | conditions: os=linux & cpu=s390x 117 | languageName: node 118 | linkType: hard 119 | 120 | "@esbuild/linux-x64@npm:0.25.1": 121 | version: 0.25.1 122 | resolution: "@esbuild/linux-x64@npm:0.25.1" 123 | conditions: os=linux & cpu=x64 124 | languageName: node 125 | linkType: hard 126 | 127 | "@esbuild/netbsd-arm64@npm:0.25.1": 128 | version: 0.25.1 129 | resolution: "@esbuild/netbsd-arm64@npm:0.25.1" 130 | conditions: os=netbsd & cpu=arm64 131 | languageName: node 132 | linkType: hard 133 | 134 | "@esbuild/netbsd-x64@npm:0.25.1": 135 | version: 0.25.1 136 | resolution: "@esbuild/netbsd-x64@npm:0.25.1" 137 | conditions: os=netbsd & cpu=x64 138 | languageName: node 139 | linkType: hard 140 | 141 | "@esbuild/openbsd-arm64@npm:0.25.1": 142 | version: 0.25.1 143 | resolution: "@esbuild/openbsd-arm64@npm:0.25.1" 144 | conditions: os=openbsd & cpu=arm64 145 | languageName: node 146 | linkType: hard 147 | 148 | "@esbuild/openbsd-x64@npm:0.25.1": 149 | version: 0.25.1 150 | resolution: "@esbuild/openbsd-x64@npm:0.25.1" 151 | conditions: os=openbsd & cpu=x64 152 | languageName: node 153 | linkType: hard 154 | 155 | "@esbuild/sunos-x64@npm:0.25.1": 156 | version: 0.25.1 157 | resolution: "@esbuild/sunos-x64@npm:0.25.1" 158 | conditions: os=sunos & cpu=x64 159 | languageName: node 160 | linkType: hard 161 | 162 | "@esbuild/win32-arm64@npm:0.25.1": 163 | version: 0.25.1 164 | resolution: "@esbuild/win32-arm64@npm:0.25.1" 165 | conditions: os=win32 & cpu=arm64 166 | languageName: node 167 | linkType: hard 168 | 169 | "@esbuild/win32-ia32@npm:0.25.1": 170 | version: 0.25.1 171 | resolution: "@esbuild/win32-ia32@npm:0.25.1" 172 | conditions: os=win32 & cpu=ia32 173 | languageName: node 174 | linkType: hard 175 | 176 | "@esbuild/win32-x64@npm:0.25.1": 177 | version: 0.25.1 178 | resolution: "@esbuild/win32-x64@npm:0.25.1" 179 | conditions: os=win32 & cpu=x64 180 | languageName: node 181 | linkType: hard 182 | 183 | "@isaacs/cliui@npm:^8.0.2": 184 | version: 8.0.2 185 | resolution: "@isaacs/cliui@npm:8.0.2" 186 | dependencies: 187 | string-width: "npm:^5.1.2" 188 | string-width-cjs: "npm:string-width@^4.2.0" 189 | strip-ansi: "npm:^7.0.1" 190 | strip-ansi-cjs: "npm:strip-ansi@^6.0.1" 191 | wrap-ansi: "npm:^8.1.0" 192 | wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" 193 | checksum: 10/e9ed5fd27c3aec1095e3a16e0c0cf148d1fee55a38665c35f7b3f86a9b5d00d042ddaabc98e8a1cb7463b9378c15f22a94eb35e99469c201453eb8375191f243 194 | languageName: node 195 | linkType: hard 196 | 197 | "@jridgewell/sourcemap-codec@npm:^1.5.0": 198 | version: 1.5.0 199 | resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" 200 | checksum: 10/4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd 201 | languageName: node 202 | linkType: hard 203 | 204 | "@npmcli/fs@npm:^3.1.0": 205 | version: 3.1.0 206 | resolution: "@npmcli/fs@npm:3.1.0" 207 | dependencies: 208 | semver: "npm:^7.3.5" 209 | checksum: 10/f3a7ab3a31de65e42aeb6ed03ed035ef123d2de7af4deb9d4a003d27acc8618b57d9fb9d259fe6c28ca538032a028f37337264388ba27d26d37fff7dde22476e 210 | languageName: node 211 | linkType: hard 212 | 213 | "@pkgjs/parseargs@npm:^0.11.0": 214 | version: 0.11.0 215 | resolution: "@pkgjs/parseargs@npm:0.11.0" 216 | checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff 217 | languageName: node 218 | linkType: hard 219 | 220 | "@rollup/plugin-commonjs@npm:^28.0.3": 221 | version: 28.0.3 222 | resolution: "@rollup/plugin-commonjs@npm:28.0.3" 223 | dependencies: 224 | "@rollup/pluginutils": "npm:^5.0.1" 225 | commondir: "npm:^1.0.1" 226 | estree-walker: "npm:^2.0.2" 227 | fdir: "npm:^6.2.0" 228 | is-reference: "npm:1.2.1" 229 | magic-string: "npm:^0.30.3" 230 | picomatch: "npm:^4.0.2" 231 | peerDependencies: 232 | rollup: ^2.68.0||^3.0.0||^4.0.0 233 | peerDependenciesMeta: 234 | rollup: 235 | optional: true 236 | checksum: 10/b30bd8cfb20dda9ec6c5008d18a834d054015669708fda1c77fc45571278260be50752ef5eaf54b55d06096e51fba98b97efd75f14281ea8c9399e0031e3cfb8 237 | languageName: node 238 | linkType: hard 239 | 240 | "@rollup/plugin-node-resolve@npm:^16.0.1": 241 | version: 16.0.1 242 | resolution: "@rollup/plugin-node-resolve@npm:16.0.1" 243 | dependencies: 244 | "@rollup/pluginutils": "npm:^5.0.1" 245 | "@types/resolve": "npm:1.20.2" 246 | deepmerge: "npm:^4.2.2" 247 | is-module: "npm:^1.0.0" 248 | resolve: "npm:^1.22.1" 249 | peerDependencies: 250 | rollup: ^2.78.0||^3.0.0||^4.0.0 251 | peerDependenciesMeta: 252 | rollup: 253 | optional: true 254 | checksum: 10/88fee8c003a5730cca2c06edd200ec6a46c7ab28bed3a99aea6d3070f34f980f575fcbea906946579e41b0be6fd7a2fbc24cdf0ca24f172a555f130726915d8b 255 | languageName: node 256 | linkType: hard 257 | 258 | "@rollup/plugin-typescript@npm:^12.1.2": 259 | version: 12.1.2 260 | resolution: "@rollup/plugin-typescript@npm:12.1.2" 261 | dependencies: 262 | "@rollup/pluginutils": "npm:^5.1.0" 263 | resolve: "npm:^1.22.1" 264 | peerDependencies: 265 | rollup: ^2.14.0||^3.0.0||^4.0.0 266 | tslib: "*" 267 | typescript: ">=3.7.0" 268 | peerDependenciesMeta: 269 | rollup: 270 | optional: true 271 | tslib: 272 | optional: true 273 | checksum: 10/1fd201b9430125686bcdb3eecfa4f8d9d5005a9d454f2d733c0fdc0f58e28f772209ecbfe4f5d1a42a2a7ac25746a5f37d15897d695326eaea0fe3a30857375d 274 | languageName: node 275 | linkType: hard 276 | 277 | "@rollup/pluginutils@npm:^5.0.1": 278 | version: 5.0.2 279 | resolution: "@rollup/pluginutils@npm:5.0.2" 280 | dependencies: 281 | "@types/estree": "npm:^1.0.0" 282 | estree-walker: "npm:^2.0.2" 283 | picomatch: "npm:^2.3.1" 284 | peerDependencies: 285 | rollup: ^1.20.0||^2.0.0||^3.0.0 286 | peerDependenciesMeta: 287 | rollup: 288 | optional: true 289 | checksum: 10/7aebf04d5d25d7d2e9514cc8f81a49b11f093b29eae2862da29022532b66e3de4681f537cc785fdcf438bcdefa3af4453470e7951ca91d6ebea2f41d6aea42d3 290 | languageName: node 291 | linkType: hard 292 | 293 | "@rollup/pluginutils@npm:^5.1.0": 294 | version: 5.1.4 295 | resolution: "@rollup/pluginutils@npm:5.1.4" 296 | dependencies: 297 | "@types/estree": "npm:^1.0.0" 298 | estree-walker: "npm:^2.0.2" 299 | picomatch: "npm:^4.0.2" 300 | peerDependencies: 301 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 302 | peerDependenciesMeta: 303 | rollup: 304 | optional: true 305 | checksum: 10/598f628988af25541a9a6c6ef154aaf350f8be3238884e500cc0e47138684071abe490563c953f9bda9e8b113ecb1f99c11abfb9dbaf4f72cdd62e257a673fa3 306 | languageName: node 307 | linkType: hard 308 | 309 | "@rollup/rollup-android-arm-eabi@npm:4.35.0": 310 | version: 4.35.0 311 | resolution: "@rollup/rollup-android-arm-eabi@npm:4.35.0" 312 | conditions: os=android & cpu=arm 313 | languageName: node 314 | linkType: hard 315 | 316 | "@rollup/rollup-android-arm64@npm:4.35.0": 317 | version: 4.35.0 318 | resolution: "@rollup/rollup-android-arm64@npm:4.35.0" 319 | conditions: os=android & cpu=arm64 320 | languageName: node 321 | linkType: hard 322 | 323 | "@rollup/rollup-darwin-arm64@npm:4.35.0": 324 | version: 4.35.0 325 | resolution: "@rollup/rollup-darwin-arm64@npm:4.35.0" 326 | conditions: os=darwin & cpu=arm64 327 | languageName: node 328 | linkType: hard 329 | 330 | "@rollup/rollup-darwin-x64@npm:4.35.0": 331 | version: 4.35.0 332 | resolution: "@rollup/rollup-darwin-x64@npm:4.35.0" 333 | conditions: os=darwin & cpu=x64 334 | languageName: node 335 | linkType: hard 336 | 337 | "@rollup/rollup-freebsd-arm64@npm:4.35.0": 338 | version: 4.35.0 339 | resolution: "@rollup/rollup-freebsd-arm64@npm:4.35.0" 340 | conditions: os=freebsd & cpu=arm64 341 | languageName: node 342 | linkType: hard 343 | 344 | "@rollup/rollup-freebsd-x64@npm:4.35.0": 345 | version: 4.35.0 346 | resolution: "@rollup/rollup-freebsd-x64@npm:4.35.0" 347 | conditions: os=freebsd & cpu=x64 348 | languageName: node 349 | linkType: hard 350 | 351 | "@rollup/rollup-linux-arm-gnueabihf@npm:4.35.0": 352 | version: 4.35.0 353 | resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.35.0" 354 | conditions: os=linux & cpu=arm & libc=glibc 355 | languageName: node 356 | linkType: hard 357 | 358 | "@rollup/rollup-linux-arm-musleabihf@npm:4.35.0": 359 | version: 4.35.0 360 | resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.35.0" 361 | conditions: os=linux & cpu=arm & libc=musl 362 | languageName: node 363 | linkType: hard 364 | 365 | "@rollup/rollup-linux-arm64-gnu@npm:4.35.0": 366 | version: 4.35.0 367 | resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.35.0" 368 | conditions: os=linux & cpu=arm64 & libc=glibc 369 | languageName: node 370 | linkType: hard 371 | 372 | "@rollup/rollup-linux-arm64-musl@npm:4.35.0": 373 | version: 4.35.0 374 | resolution: "@rollup/rollup-linux-arm64-musl@npm:4.35.0" 375 | conditions: os=linux & cpu=arm64 & libc=musl 376 | languageName: node 377 | linkType: hard 378 | 379 | "@rollup/rollup-linux-loongarch64-gnu@npm:4.35.0": 380 | version: 4.35.0 381 | resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.35.0" 382 | conditions: os=linux & cpu=loong64 & libc=glibc 383 | languageName: node 384 | linkType: hard 385 | 386 | "@rollup/rollup-linux-powerpc64le-gnu@npm:4.35.0": 387 | version: 4.35.0 388 | resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.35.0" 389 | conditions: os=linux & cpu=ppc64 & libc=glibc 390 | languageName: node 391 | linkType: hard 392 | 393 | "@rollup/rollup-linux-riscv64-gnu@npm:4.35.0": 394 | version: 4.35.0 395 | resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.35.0" 396 | conditions: os=linux & cpu=riscv64 & libc=glibc 397 | languageName: node 398 | linkType: hard 399 | 400 | "@rollup/rollup-linux-s390x-gnu@npm:4.35.0": 401 | version: 4.35.0 402 | resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.35.0" 403 | conditions: os=linux & cpu=s390x & libc=glibc 404 | languageName: node 405 | linkType: hard 406 | 407 | "@rollup/rollup-linux-x64-gnu@npm:4.35.0": 408 | version: 4.35.0 409 | resolution: "@rollup/rollup-linux-x64-gnu@npm:4.35.0" 410 | conditions: os=linux & cpu=x64 & libc=glibc 411 | languageName: node 412 | linkType: hard 413 | 414 | "@rollup/rollup-linux-x64-musl@npm:4.35.0": 415 | version: 4.35.0 416 | resolution: "@rollup/rollup-linux-x64-musl@npm:4.35.0" 417 | conditions: os=linux & cpu=x64 & libc=musl 418 | languageName: node 419 | linkType: hard 420 | 421 | "@rollup/rollup-win32-arm64-msvc@npm:4.35.0": 422 | version: 4.35.0 423 | resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.35.0" 424 | conditions: os=win32 & cpu=arm64 425 | languageName: node 426 | linkType: hard 427 | 428 | "@rollup/rollup-win32-ia32-msvc@npm:4.35.0": 429 | version: 4.35.0 430 | resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.35.0" 431 | conditions: os=win32 & cpu=ia32 432 | languageName: node 433 | linkType: hard 434 | 435 | "@rollup/rollup-win32-x64-msvc@npm:4.35.0": 436 | version: 4.35.0 437 | resolution: "@rollup/rollup-win32-x64-msvc@npm:4.35.0" 438 | conditions: os=win32 & cpu=x64 439 | languageName: node 440 | linkType: hard 441 | 442 | "@tootallnate/once@npm:2": 443 | version: 2.0.0 444 | resolution: "@tootallnate/once@npm:2.0.0" 445 | checksum: 10/ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 446 | languageName: node 447 | linkType: hard 448 | 449 | "@types/crypto-js@npm:^4.2.2": 450 | version: 4.2.2 451 | resolution: "@types/crypto-js@npm:4.2.2" 452 | checksum: 10/a40fc5a9219fd33f54ba3e094c5e5ab2904d3106681a76f1029bb038976591e9c8959099963bf4474fde21c2d8d00c1f896445206a3a58f85588f9cb1bd96a9a 453 | languageName: node 454 | linkType: hard 455 | 456 | "@types/estree@npm:*, @types/estree@npm:^1.0.0": 457 | version: 1.0.1 458 | resolution: "@types/estree@npm:1.0.1" 459 | checksum: 10/f252569c002506c61ad913e778aa69415908078c46c78c901ccad77bc66cd34f1e1b9babefb8ff0d27c07a15fb0824755edd7bb3fa7ea828f32ae0fe5faa9962 460 | languageName: node 461 | linkType: hard 462 | 463 | "@types/estree@npm:1.0.6": 464 | version: 1.0.6 465 | resolution: "@types/estree@npm:1.0.6" 466 | checksum: 10/9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d 467 | languageName: node 468 | linkType: hard 469 | 470 | "@types/node@npm:^20.17.24": 471 | version: 20.17.24 472 | resolution: "@types/node@npm:20.17.24" 473 | dependencies: 474 | undici-types: "npm:~6.19.2" 475 | checksum: 10/0c5fe294b003656b0f95ffce295c08e7ed3fa814ba9bf891e146dced90322d186e63837db9d9bb14d4f294fbe1a6fa1c89ced0b173380c8aaeb90de6c3eddb3b 476 | languageName: node 477 | linkType: hard 478 | 479 | "@types/resolve@npm:1.20.2": 480 | version: 1.20.2 481 | resolution: "@types/resolve@npm:1.20.2" 482 | checksum: 10/1bff0d3875e7e1557b6c030c465beca9bf3b1173ebc6937cac547654b0af3bb3ff0f16470e9c4d7c5dc308ad9ac8627c38dbff24ef698b66673ff5bd4ead7f7e 483 | languageName: node 484 | linkType: hard 485 | 486 | "abbrev@npm:^1.0.0": 487 | version: 1.1.1 488 | resolution: "abbrev@npm:1.1.1" 489 | checksum: 10/2d882941183c66aa665118bafdab82b7a177e9add5eb2776c33e960a4f3c89cff88a1b38aba13a456de01d0dd9d66a8bea7c903268b21ea91dd1097e1e2e8243 490 | languageName: node 491 | linkType: hard 492 | 493 | "agent-base@npm:6, agent-base@npm:^6.0.2": 494 | version: 6.0.2 495 | resolution: "agent-base@npm:6.0.2" 496 | dependencies: 497 | debug: "npm:4" 498 | checksum: 10/21fb903e0917e5cb16591b4d0ef6a028a54b83ac30cd1fca58dece3d4e0990512a8723f9f83130d88a41e2af8b1f7be1386fda3ea2d181bb1a62155e75e95e23 499 | languageName: node 500 | linkType: hard 501 | 502 | "agentkeepalive@npm:^4.2.1": 503 | version: 4.3.0 504 | resolution: "agentkeepalive@npm:4.3.0" 505 | dependencies: 506 | debug: "npm:^4.1.0" 507 | depd: "npm:^2.0.0" 508 | humanize-ms: "npm:^1.2.1" 509 | checksum: 10/f791317eb4b42278d094547669b9b745e19e5d783bb42a8695820c94098ef18fc99f9d2777b5871cae76d761e45b0add8e6703e044de5d74d47181038ec7b536 510 | languageName: node 511 | linkType: hard 512 | 513 | "aggregate-error@npm:^3.0.0": 514 | version: 3.1.0 515 | resolution: "aggregate-error@npm:3.1.0" 516 | dependencies: 517 | clean-stack: "npm:^2.0.0" 518 | indent-string: "npm:^4.0.0" 519 | checksum: 10/1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 520 | languageName: node 521 | linkType: hard 522 | 523 | "ansi-regex@npm:^5.0.1": 524 | version: 5.0.1 525 | resolution: "ansi-regex@npm:5.0.1" 526 | checksum: 10/2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b 527 | languageName: node 528 | linkType: hard 529 | 530 | "ansi-regex@npm:^6.0.1": 531 | version: 6.0.1 532 | resolution: "ansi-regex@npm:6.0.1" 533 | checksum: 10/1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 534 | languageName: node 535 | linkType: hard 536 | 537 | "ansi-styles@npm:^4.0.0": 538 | version: 4.3.0 539 | resolution: "ansi-styles@npm:4.3.0" 540 | dependencies: 541 | color-convert: "npm:^2.0.1" 542 | checksum: 10/b4494dfbfc7e4591b4711a396bd27e540f8153914123dccb4cdbbcb514015ada63a3809f362b9d8d4f6b17a706f1d7bea3c6f974b15fa5ae76b5b502070889ff 543 | languageName: node 544 | linkType: hard 545 | 546 | "ansi-styles@npm:^6.1.0": 547 | version: 6.2.1 548 | resolution: "ansi-styles@npm:6.2.1" 549 | checksum: 10/70fdf883b704d17a5dfc9cde206e698c16bcd74e7f196ab821511651aee4f9f76c9514bdfa6ca3a27b5e49138b89cb222a28caf3afe4567570139577f991df32 550 | languageName: node 551 | linkType: hard 552 | 553 | "aproba@npm:^1.0.3 || ^2.0.0": 554 | version: 2.0.0 555 | resolution: "aproba@npm:2.0.0" 556 | checksum: 10/c2b9a631298e8d6f3797547e866db642f68493808f5b37cd61da778d5f6ada890d16f668285f7d60bd4fc3b03889bd590ffe62cf81b700e9bb353431238a0a7b 557 | languageName: node 558 | linkType: hard 559 | 560 | "are-we-there-yet@npm:^3.0.0": 561 | version: 3.0.1 562 | resolution: "are-we-there-yet@npm:3.0.1" 563 | dependencies: 564 | delegates: "npm:^1.0.0" 565 | readable-stream: "npm:^3.6.0" 566 | checksum: 10/390731720e1bf9ed5d0efc635ea7df8cbc4c90308b0645a932f06e8495a0bf1ecc7987d3b97e805f62a17d6c4b634074b25200aa4d149be2a7b17250b9744bc4 567 | languageName: node 568 | linkType: hard 569 | 570 | "balanced-match@npm:^1.0.0": 571 | version: 1.0.2 572 | resolution: "balanced-match@npm:1.0.2" 573 | checksum: 10/9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 574 | languageName: node 575 | linkType: hard 576 | 577 | "brace-expansion@npm:^1.1.7": 578 | version: 1.1.11 579 | resolution: "brace-expansion@npm:1.1.11" 580 | dependencies: 581 | balanced-match: "npm:^1.0.0" 582 | concat-map: "npm:0.0.1" 583 | checksum: 10/faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 584 | languageName: node 585 | linkType: hard 586 | 587 | "brace-expansion@npm:^2.0.1": 588 | version: 2.0.1 589 | resolution: "brace-expansion@npm:2.0.1" 590 | dependencies: 591 | balanced-match: "npm:^1.0.0" 592 | checksum: 10/a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 593 | languageName: node 594 | linkType: hard 595 | 596 | "cacache@npm:^17.0.0": 597 | version: 17.1.3 598 | resolution: "cacache@npm:17.1.3" 599 | dependencies: 600 | "@npmcli/fs": "npm:^3.1.0" 601 | fs-minipass: "npm:^3.0.0" 602 | glob: "npm:^10.2.2" 603 | lru-cache: "npm:^7.7.1" 604 | minipass: "npm:^5.0.0" 605 | minipass-collect: "npm:^1.0.2" 606 | minipass-flush: "npm:^1.0.5" 607 | minipass-pipeline: "npm:^1.2.4" 608 | p-map: "npm:^4.0.0" 609 | ssri: "npm:^10.0.0" 610 | tar: "npm:^6.1.11" 611 | unique-filename: "npm:^3.0.0" 612 | checksum: 10/216fb41c739b845c5acbc1f8a01876ccc6293644e701ad0abb7acb87b648a12abc2af5fc4b86df2d82731d0f7d6beebee85e62b1d59211535ed72de4b8b0fce6 613 | languageName: node 614 | linkType: hard 615 | 616 | "chownr@npm:^2.0.0": 617 | version: 2.0.0 618 | resolution: "chownr@npm:2.0.0" 619 | checksum: 10/c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f 620 | languageName: node 621 | linkType: hard 622 | 623 | "clean-stack@npm:^2.0.0": 624 | version: 2.2.0 625 | resolution: "clean-stack@npm:2.2.0" 626 | checksum: 10/2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 627 | languageName: node 628 | linkType: hard 629 | 630 | "color-convert@npm:^2.0.1": 631 | version: 2.0.1 632 | resolution: "color-convert@npm:2.0.1" 633 | dependencies: 634 | color-name: "npm:~1.1.4" 635 | checksum: 10/fa00c91b4332b294de06b443923246bccebe9fab1b253f7fe1772d37b06a2269b4039a85e309abe1fe11b267b11c08d1d0473fda3badd6167f57313af2887a64 636 | languageName: node 637 | linkType: hard 638 | 639 | "color-name@npm:~1.1.4": 640 | version: 1.1.4 641 | resolution: "color-name@npm:1.1.4" 642 | checksum: 10/b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 643 | languageName: node 644 | linkType: hard 645 | 646 | "color-support@npm:^1.1.3": 647 | version: 1.1.3 648 | resolution: "color-support@npm:1.1.3" 649 | bin: 650 | color-support: bin.js 651 | checksum: 10/4bcfe30eea1498fe1cabc852bbda6c9770f230ea0e4faf4611c5858b1b9e4dde3730ac485e65f54ca182f4c50b626c1bea7c8441ceda47367a54a818c248aa7a 652 | languageName: node 653 | linkType: hard 654 | 655 | "commondir@npm:^1.0.1": 656 | version: 1.0.1 657 | resolution: "commondir@npm:1.0.1" 658 | checksum: 10/4620bc4936a4ef12ce7dfcd272bb23a99f2ad68889a4e4ad766c9f8ad21af982511934d6f7050d4a8bde90011b1c15d56e61a1b4576d9913efbf697a20172d6c 659 | languageName: node 660 | linkType: hard 661 | 662 | "concat-map@npm:0.0.1": 663 | version: 0.0.1 664 | resolution: "concat-map@npm:0.0.1" 665 | checksum: 10/9680699c8e2b3af0ae22592cb764acaf973f292a7b71b8a06720233011853a58e256c89216a10cbe889727532fd77f8bcd49a760cedfde271b8e006c20e079f2 666 | languageName: node 667 | linkType: hard 668 | 669 | "console-control-strings@npm:^1.1.0": 670 | version: 1.1.0 671 | resolution: "console-control-strings@npm:1.1.0" 672 | checksum: 10/27b5fa302bc8e9ae9e98c03c66d76ca289ad0c61ce2fe20ab288d288bee875d217512d2edb2363fc83165e88f1c405180cf3f5413a46e51b4fe1a004840c6cdb 673 | languageName: node 674 | linkType: hard 675 | 676 | "cross-spawn@npm:^7.0.0": 677 | version: 7.0.3 678 | resolution: "cross-spawn@npm:7.0.3" 679 | dependencies: 680 | path-key: "npm:^3.1.0" 681 | shebang-command: "npm:^2.0.0" 682 | which: "npm:^2.0.1" 683 | checksum: 10/e1a13869d2f57d974de0d9ef7acbf69dc6937db20b918525a01dacb5032129bd552d290d886d981e99f1b624cb03657084cc87bd40f115c07ecf376821c729ce 684 | languageName: node 685 | linkType: hard 686 | 687 | "crypto-js@npm:^4.2.0": 688 | version: 4.2.0 689 | resolution: "crypto-js@npm:4.2.0" 690 | checksum: 10/c7bcc56a6e01c3c397e95aa4a74e4241321f04677f9a618a8f48a63b5781617248afb9adb0629824792e7ec20ca0d4241a49b6b2938ae6f973ec4efc5c53c924 691 | languageName: node 692 | linkType: hard 693 | 694 | "dayjs@npm:^1.11.13": 695 | version: 1.11.13 696 | resolution: "dayjs@npm:1.11.13" 697 | checksum: 10/7374d63ab179b8d909a95e74790def25c8986e329ae989840bacb8b1888be116d20e1c4eee75a69ea0dfbae13172efc50ef85619d304ee7ca3c01d5878b704f5 698 | languageName: node 699 | linkType: hard 700 | 701 | "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.3": 702 | version: 4.3.4 703 | resolution: "debug@npm:4.3.4" 704 | dependencies: 705 | ms: "npm:2.1.2" 706 | peerDependenciesMeta: 707 | supports-color: 708 | optional: true 709 | checksum: 10/0073c3bcbd9cb7d71dd5f6b55be8701af42df3e56e911186dfa46fac3a5b9eb7ce7f377dd1d3be6db8977221f8eb333d945216f645cf56f6b688cd484837d255 710 | languageName: node 711 | linkType: hard 712 | 713 | "deepmerge@npm:^4.2.2": 714 | version: 4.3.1 715 | resolution: "deepmerge@npm:4.3.1" 716 | checksum: 10/058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 717 | languageName: node 718 | linkType: hard 719 | 720 | "delegates@npm:^1.0.0": 721 | version: 1.0.0 722 | resolution: "delegates@npm:1.0.0" 723 | checksum: 10/a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd 724 | languageName: node 725 | linkType: hard 726 | 727 | "depd@npm:^2.0.0": 728 | version: 2.0.0 729 | resolution: "depd@npm:2.0.0" 730 | checksum: 10/c0c8ff36079ce5ada64f46cc9d6fd47ebcf38241105b6e0c98f412e8ad91f084bcf906ff644cc3a4bd876ca27a62accb8b0fff72ea6ed1a414b89d8506f4a5ca 731 | languageName: node 732 | linkType: hard 733 | 734 | "discord-encryption@workspace:.": 735 | version: 0.0.0-use.local 736 | resolution: "discord-encryption@workspace:." 737 | dependencies: 738 | "@rollup/plugin-commonjs": "npm:^28.0.3" 739 | "@rollup/plugin-node-resolve": "npm:^16.0.1" 740 | "@rollup/plugin-typescript": "npm:^12.1.2" 741 | "@types/crypto-js": "npm:^4.2.2" 742 | "@types/node": "npm:^20.17.24" 743 | crypto-js: "npm:^4.2.0" 744 | dayjs: "npm:^1.11.13" 745 | jquery: "npm:^3.7.1" 746 | prepend-file: "npm:^2.0.1" 747 | rollup: "npm:^4.35.0" 748 | tslib: "npm:^2.8.1" 749 | tsx: "npm:^4.19.3" 750 | typescript: "npm:^5.8.2" 751 | languageName: unknown 752 | linkType: soft 753 | 754 | "eastasianwidth@npm:^0.2.0": 755 | version: 0.2.0 756 | resolution: "eastasianwidth@npm:0.2.0" 757 | checksum: 10/9b1d3e1baefeaf7d70799db8774149cef33b97183a6addceeba0cf6b85ba23ee2686f302f14482006df32df75d32b17c509c143a3689627929e4a8efaf483952 758 | languageName: node 759 | linkType: hard 760 | 761 | "emoji-regex@npm:^8.0.0": 762 | version: 8.0.0 763 | resolution: "emoji-regex@npm:8.0.0" 764 | checksum: 10/c72d67a6821be15ec11997877c437491c313d924306b8da5d87d2a2bcc2cec9903cb5b04ee1a088460501d8e5b44f10df82fdc93c444101a7610b80c8b6938e1 765 | languageName: node 766 | linkType: hard 767 | 768 | "emoji-regex@npm:^9.2.2": 769 | version: 9.2.2 770 | resolution: "emoji-regex@npm:9.2.2" 771 | checksum: 10/915acf859cea7131dac1b2b5c9c8e35c4849e325a1d114c30adb8cd615970f6dca0e27f64f3a4949d7d6ed86ecd79a1c5c63f02e697513cddd7b5835c90948b8 772 | languageName: node 773 | linkType: hard 774 | 775 | "encoding@npm:^0.1.13": 776 | version: 0.1.13 777 | resolution: "encoding@npm:0.1.13" 778 | dependencies: 779 | iconv-lite: "npm:^0.6.2" 780 | checksum: 10/bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f 781 | languageName: node 782 | linkType: hard 783 | 784 | "env-paths@npm:^2.2.0": 785 | version: 2.2.1 786 | resolution: "env-paths@npm:2.2.1" 787 | checksum: 10/65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e 788 | languageName: node 789 | linkType: hard 790 | 791 | "err-code@npm:^2.0.2": 792 | version: 2.0.3 793 | resolution: "err-code@npm:2.0.3" 794 | checksum: 10/1d20d825cdcce8d811bfbe86340f4755c02655a7feb2f13f8c880566d9d72a3f6c92c192a6867632e490d6da67b678271f46e01044996a6443e870331100dfdd 795 | languageName: node 796 | linkType: hard 797 | 798 | "esbuild@npm:~0.25.0": 799 | version: 0.25.1 800 | resolution: "esbuild@npm:0.25.1" 801 | dependencies: 802 | "@esbuild/aix-ppc64": "npm:0.25.1" 803 | "@esbuild/android-arm": "npm:0.25.1" 804 | "@esbuild/android-arm64": "npm:0.25.1" 805 | "@esbuild/android-x64": "npm:0.25.1" 806 | "@esbuild/darwin-arm64": "npm:0.25.1" 807 | "@esbuild/darwin-x64": "npm:0.25.1" 808 | "@esbuild/freebsd-arm64": "npm:0.25.1" 809 | "@esbuild/freebsd-x64": "npm:0.25.1" 810 | "@esbuild/linux-arm": "npm:0.25.1" 811 | "@esbuild/linux-arm64": "npm:0.25.1" 812 | "@esbuild/linux-ia32": "npm:0.25.1" 813 | "@esbuild/linux-loong64": "npm:0.25.1" 814 | "@esbuild/linux-mips64el": "npm:0.25.1" 815 | "@esbuild/linux-ppc64": "npm:0.25.1" 816 | "@esbuild/linux-riscv64": "npm:0.25.1" 817 | "@esbuild/linux-s390x": "npm:0.25.1" 818 | "@esbuild/linux-x64": "npm:0.25.1" 819 | "@esbuild/netbsd-arm64": "npm:0.25.1" 820 | "@esbuild/netbsd-x64": "npm:0.25.1" 821 | "@esbuild/openbsd-arm64": "npm:0.25.1" 822 | "@esbuild/openbsd-x64": "npm:0.25.1" 823 | "@esbuild/sunos-x64": "npm:0.25.1" 824 | "@esbuild/win32-arm64": "npm:0.25.1" 825 | "@esbuild/win32-ia32": "npm:0.25.1" 826 | "@esbuild/win32-x64": "npm:0.25.1" 827 | dependenciesMeta: 828 | "@esbuild/aix-ppc64": 829 | optional: true 830 | "@esbuild/android-arm": 831 | optional: true 832 | "@esbuild/android-arm64": 833 | optional: true 834 | "@esbuild/android-x64": 835 | optional: true 836 | "@esbuild/darwin-arm64": 837 | optional: true 838 | "@esbuild/darwin-x64": 839 | optional: true 840 | "@esbuild/freebsd-arm64": 841 | optional: true 842 | "@esbuild/freebsd-x64": 843 | optional: true 844 | "@esbuild/linux-arm": 845 | optional: true 846 | "@esbuild/linux-arm64": 847 | optional: true 848 | "@esbuild/linux-ia32": 849 | optional: true 850 | "@esbuild/linux-loong64": 851 | optional: true 852 | "@esbuild/linux-mips64el": 853 | optional: true 854 | "@esbuild/linux-ppc64": 855 | optional: true 856 | "@esbuild/linux-riscv64": 857 | optional: true 858 | "@esbuild/linux-s390x": 859 | optional: true 860 | "@esbuild/linux-x64": 861 | optional: true 862 | "@esbuild/netbsd-arm64": 863 | optional: true 864 | "@esbuild/netbsd-x64": 865 | optional: true 866 | "@esbuild/openbsd-arm64": 867 | optional: true 868 | "@esbuild/openbsd-x64": 869 | optional: true 870 | "@esbuild/sunos-x64": 871 | optional: true 872 | "@esbuild/win32-arm64": 873 | optional: true 874 | "@esbuild/win32-ia32": 875 | optional: true 876 | "@esbuild/win32-x64": 877 | optional: true 878 | bin: 879 | esbuild: bin/esbuild 880 | checksum: 10/f1dcaa7c72133c4e130dc7a6c05158d48d7ccf6643efb12fd0c5a9727226a9249d3ea4a4ea34f879c4559819d9dd706a968fd34d5c180ae019ea0403246c5564 881 | languageName: node 882 | linkType: hard 883 | 884 | "estree-walker@npm:^2.0.2": 885 | version: 2.0.2 886 | resolution: "estree-walker@npm:2.0.2" 887 | checksum: 10/b02109c5d46bc2ed47de4990eef770f7457b1159a229f0999a09224d2b85ffeed2d7679cffcff90aeb4448e94b0168feb5265b209cdec29aad50a3d6e93d21e2 888 | languageName: node 889 | linkType: hard 890 | 891 | "exponential-backoff@npm:^3.1.1": 892 | version: 3.1.1 893 | resolution: "exponential-backoff@npm:3.1.1" 894 | checksum: 10/2d9bbb6473de7051f96790d5f9a678f32e60ed0aa70741dc7fdc96fec8d631124ec3374ac144387604f05afff9500f31a1d45bd9eee4cdc2e4f9ad2d9b9d5dbd 895 | languageName: node 896 | linkType: hard 897 | 898 | "fdir@npm:^6.2.0": 899 | version: 6.4.3 900 | resolution: "fdir@npm:6.4.3" 901 | peerDependencies: 902 | picomatch: ^3 || ^4 903 | peerDependenciesMeta: 904 | picomatch: 905 | optional: true 906 | checksum: 10/8e6d20f4590dc168de1374a9cadaa37e20ca6e0b822aa247c230e7ea1d9e9674a68cd816146435e4ecc98f9285091462ab7e5e56eebc9510931a1794e4db68b2 907 | languageName: node 908 | linkType: hard 909 | 910 | "foreground-child@npm:^3.1.0": 911 | version: 3.1.1 912 | resolution: "foreground-child@npm:3.1.1" 913 | dependencies: 914 | cross-spawn: "npm:^7.0.0" 915 | signal-exit: "npm:^4.0.1" 916 | checksum: 10/087edd44857d258c4f73ad84cb8df980826569656f2550c341b27adf5335354393eec24ea2fabd43a253233fb27cee177ebe46bd0b7ea129c77e87cb1e9936fb 917 | languageName: node 918 | linkType: hard 919 | 920 | "fs-minipass@npm:^2.0.0": 921 | version: 2.1.0 922 | resolution: "fs-minipass@npm:2.1.0" 923 | dependencies: 924 | minipass: "npm:^3.0.0" 925 | checksum: 10/03191781e94bc9a54bd376d3146f90fe8e082627c502185dbf7b9b3032f66b0b142c1115f3b2cc5936575fc1b44845ce903dd4c21bec2a8d69f3bd56f9cee9ec 926 | languageName: node 927 | linkType: hard 928 | 929 | "fs-minipass@npm:^3.0.0": 930 | version: 3.0.2 931 | resolution: "fs-minipass@npm:3.0.2" 932 | dependencies: 933 | minipass: "npm:^5.0.0" 934 | checksum: 10/1c071b5b8fc5b553ad2bd40f85988bc4d78d80eee766d0082a67dcff9a2536fd4fdd5fa2441661f799fa95000054296e4f900d6e96b2a025d173d325f3adf458 935 | languageName: node 936 | linkType: hard 937 | 938 | "fs.realpath@npm:^1.0.0": 939 | version: 1.0.0 940 | resolution: "fs.realpath@npm:1.0.0" 941 | checksum: 10/e703107c28e362d8d7b910bbcbfd371e640a3bb45ae157a362b5952c0030c0b6d4981140ec319b347bce7adc025dd7813da1ff908a945ac214d64f5402a51b96 942 | languageName: node 943 | linkType: hard 944 | 945 | "fsevents@npm:~2.3.2": 946 | version: 2.3.2 947 | resolution: "fsevents@npm:2.3.2" 948 | dependencies: 949 | node-gyp: "npm:latest" 950 | checksum: 10/6b5b6f5692372446ff81cf9501c76e3e0459a4852b3b5f1fc72c103198c125a6b8c72f5f166bdd76ffb2fca261e7f6ee5565daf80dca6e571e55bcc589cc1256 951 | conditions: os=darwin 952 | languageName: node 953 | linkType: hard 954 | 955 | "fsevents@npm:~2.3.3": 956 | version: 2.3.3 957 | resolution: "fsevents@npm:2.3.3" 958 | dependencies: 959 | node-gyp: "npm:latest" 960 | checksum: 10/4c1ade961ded57cdbfbb5cac5106ec17bc8bccd62e16343c569a0ceeca83b9dfef87550b4dc5cbb89642da412b20c5071f304c8c464b80415446e8e155a038c0 961 | conditions: os=darwin 962 | languageName: node 963 | linkType: hard 964 | 965 | "fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": 966 | version: 2.3.2 967 | resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" 968 | dependencies: 969 | node-gyp: "npm:latest" 970 | conditions: os=darwin 971 | languageName: node 972 | linkType: hard 973 | 974 | "fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": 975 | version: 2.3.3 976 | resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" 977 | dependencies: 978 | node-gyp: "npm:latest" 979 | conditions: os=darwin 980 | languageName: node 981 | linkType: hard 982 | 983 | "function-bind@npm:^1.1.1": 984 | version: 1.1.1 985 | resolution: "function-bind@npm:1.1.1" 986 | checksum: 10/d83f2968030678f0b8c3f2183d63dcd969344eb8b55b4eb826a94ccac6de8b87c95bebffda37a6386c74f152284eb02956ff2c496897f35d32bdc2628ac68ac5 987 | languageName: node 988 | linkType: hard 989 | 990 | "gauge@npm:^4.0.3": 991 | version: 4.0.4 992 | resolution: "gauge@npm:4.0.4" 993 | dependencies: 994 | aproba: "npm:^1.0.3 || ^2.0.0" 995 | color-support: "npm:^1.1.3" 996 | console-control-strings: "npm:^1.1.0" 997 | has-unicode: "npm:^2.0.1" 998 | signal-exit: "npm:^3.0.7" 999 | string-width: "npm:^4.2.3" 1000 | strip-ansi: "npm:^6.0.1" 1001 | wide-align: "npm:^1.1.5" 1002 | checksum: 10/09535dd53b5ced6a34482b1fa9f3929efdeac02f9858569cde73cef3ed95050e0f3d095706c1689614059898924b7a74aa14042f51381a1ccc4ee5c29d2389c4 1003 | languageName: node 1004 | linkType: hard 1005 | 1006 | "get-tsconfig@npm:^4.7.5": 1007 | version: 4.10.0 1008 | resolution: "get-tsconfig@npm:4.10.0" 1009 | dependencies: 1010 | resolve-pkg-maps: "npm:^1.0.0" 1011 | checksum: 10/5259b5c99a1957114337d9d0603b4a305ec9e29fa6cac7d2fbf634ba6754a0cc88bfd281a02416ce64e604b637d3cb239185381a79a5842b17fb55c097b38c4b 1012 | languageName: node 1013 | linkType: hard 1014 | 1015 | "glob@npm:^10.2.2": 1016 | version: 10.3.3 1017 | resolution: "glob@npm:10.3.3" 1018 | dependencies: 1019 | foreground-child: "npm:^3.1.0" 1020 | jackspeak: "npm:^2.0.3" 1021 | minimatch: "npm:^9.0.1" 1022 | minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" 1023 | path-scurry: "npm:^1.10.1" 1024 | bin: 1025 | glob: dist/cjs/src/bin.js 1026 | checksum: 10/0d1a59dff5d5d7085f9c1e3b0c9c3a7e3a199a013ef8f800c0886e3cfe6f8e293f7847081021a97f96616bf778c053c6937382675f369ec8231c8b95d3ba11e2 1027 | languageName: node 1028 | linkType: hard 1029 | 1030 | "glob@npm:^7.1.3, glob@npm:^7.1.4": 1031 | version: 7.2.3 1032 | resolution: "glob@npm:7.2.3" 1033 | dependencies: 1034 | fs.realpath: "npm:^1.0.0" 1035 | inflight: "npm:^1.0.4" 1036 | inherits: "npm:2" 1037 | minimatch: "npm:^3.1.1" 1038 | once: "npm:^1.3.0" 1039 | path-is-absolute: "npm:^1.0.0" 1040 | checksum: 10/59452a9202c81d4508a43b8af7082ca5c76452b9fcc4a9ab17655822e6ce9b21d4f8fbadabe4fe3faef448294cec249af305e2cd824b7e9aaf689240e5e96a7b 1041 | languageName: node 1042 | linkType: hard 1043 | 1044 | "graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.2.6": 1045 | version: 4.2.11 1046 | resolution: "graceful-fs@npm:4.2.11" 1047 | checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 1048 | languageName: node 1049 | linkType: hard 1050 | 1051 | "has-unicode@npm:^2.0.1": 1052 | version: 2.0.1 1053 | resolution: "has-unicode@npm:2.0.1" 1054 | checksum: 10/041b4293ad6bf391e21c5d85ed03f412506d6623786b801c4ab39e4e6ca54993f13201bceb544d92963f9e0024e6e7fbf0cb1d84c9d6b31cb9c79c8c990d13d8 1055 | languageName: node 1056 | linkType: hard 1057 | 1058 | "has@npm:^1.0.3": 1059 | version: 1.0.3 1060 | resolution: "has@npm:1.0.3" 1061 | dependencies: 1062 | function-bind: "npm:^1.1.1" 1063 | checksum: 10/a449f3185b1d165026e8d25f6a8c3390bd25c201ff4b8c1aaf948fc6a5fcfd6507310b8c00c13a3325795ea9791fcc3d79d61eafa313b5750438fc19183df57b 1064 | languageName: node 1065 | linkType: hard 1066 | 1067 | "http-cache-semantics@npm:^4.1.1": 1068 | version: 4.1.1 1069 | resolution: "http-cache-semantics@npm:4.1.1" 1070 | checksum: 10/362d5ed66b12ceb9c0a328fb31200b590ab1b02f4a254a697dc796850cc4385603e75f53ec59f768b2dad3bfa1464bd229f7de278d2899a0e3beffc634b6683f 1071 | languageName: node 1072 | linkType: hard 1073 | 1074 | "http-proxy-agent@npm:^5.0.0": 1075 | version: 5.0.0 1076 | resolution: "http-proxy-agent@npm:5.0.0" 1077 | dependencies: 1078 | "@tootallnate/once": "npm:2" 1079 | agent-base: "npm:6" 1080 | debug: "npm:4" 1081 | checksum: 10/5ee19423bc3e0fd5f23ce991b0755699ad2a46a440ce9cec99e8126bb98448ad3479d2c0ea54be5519db5b19a4ffaa69616bac01540db18506dd4dac3dc418f0 1082 | languageName: node 1083 | linkType: hard 1084 | 1085 | "https-proxy-agent@npm:^5.0.0": 1086 | version: 5.0.1 1087 | resolution: "https-proxy-agent@npm:5.0.1" 1088 | dependencies: 1089 | agent-base: "npm:6" 1090 | debug: "npm:4" 1091 | checksum: 10/f0dce7bdcac5e8eaa0be3c7368bb8836ed010fb5b6349ffb412b172a203efe8f807d9a6681319105ea1b6901e1972c7b5ea899672a7b9aad58309f766dcbe0df 1092 | languageName: node 1093 | linkType: hard 1094 | 1095 | "humanize-ms@npm:^1.2.1": 1096 | version: 1.2.1 1097 | resolution: "humanize-ms@npm:1.2.1" 1098 | dependencies: 1099 | ms: "npm:^2.0.0" 1100 | checksum: 10/9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 1101 | languageName: node 1102 | linkType: hard 1103 | 1104 | "iconv-lite@npm:^0.6.2": 1105 | version: 0.6.3 1106 | resolution: "iconv-lite@npm:0.6.3" 1107 | dependencies: 1108 | safer-buffer: "npm:>= 2.1.2 < 3.0.0" 1109 | checksum: 10/24e3292dd3dadaa81d065c6f8c41b274a47098150d444b96e5f53b4638a9a71482921ea6a91a1f59bb71d9796de25e04afd05919fa64c360347ba65d3766f10f 1110 | languageName: node 1111 | linkType: hard 1112 | 1113 | "imurmurhash@npm:^0.1.4": 1114 | version: 0.1.4 1115 | resolution: "imurmurhash@npm:0.1.4" 1116 | checksum: 10/2d30b157a91fe1c1d7c6f653cbf263f039be6c5bfa959245a16d4ee191fc0f2af86c08545b6e6beeb041c56b574d2d5b9f95343d378ab49c0f37394d541e7fc8 1117 | languageName: node 1118 | linkType: hard 1119 | 1120 | "indent-string@npm:^4.0.0": 1121 | version: 4.0.0 1122 | resolution: "indent-string@npm:4.0.0" 1123 | checksum: 10/cd3f5cbc9ca2d624c6a1f53f12e6b341659aba0e2d3254ae2b4464aaea8b4294cdb09616abbc59458f980531f2429784ed6a420d48d245bcad0811980c9efae9 1124 | languageName: node 1125 | linkType: hard 1126 | 1127 | "inflight@npm:^1.0.4": 1128 | version: 1.0.6 1129 | resolution: "inflight@npm:1.0.6" 1130 | dependencies: 1131 | once: "npm:^1.3.0" 1132 | wrappy: "npm:1" 1133 | checksum: 10/d2ebd65441a38c8336c223d1b80b921b9fa737e37ea466fd7e253cb000c64ae1f17fa59e68130ef5bda92cfd8d36b83d37dab0eb0a4558bcfec8e8cdfd2dcb67 1134 | languageName: node 1135 | linkType: hard 1136 | 1137 | "inherits@npm:2, inherits@npm:^2.0.3": 1138 | version: 2.0.4 1139 | resolution: "inherits@npm:2.0.4" 1140 | checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 1141 | languageName: node 1142 | linkType: hard 1143 | 1144 | "ip@npm:^2.0.0": 1145 | version: 2.0.0 1146 | resolution: "ip@npm:2.0.0" 1147 | checksum: 10/1270b11e534a466fb4cf4426cbcc3a907c429389f7f4e4e3b288b42823562e88d6a509ceda8141a507de147ca506141f745005c0aa144569d94cf24a54eb52bc 1148 | languageName: node 1149 | linkType: hard 1150 | 1151 | "is-core-module@npm:^2.12.0": 1152 | version: 2.12.1 1153 | resolution: "is-core-module@npm:2.12.1" 1154 | dependencies: 1155 | has: "npm:^1.0.3" 1156 | checksum: 10/35d5f90c95f7c737d287121e924bdfcad0a47b33efd7f89c58e9ab3810b43b1f1d377b641797326bde500e47edf5a7bf74a464e0c336a5c7e827b13fa41b57af 1157 | languageName: node 1158 | linkType: hard 1159 | 1160 | "is-fullwidth-code-point@npm:^3.0.0": 1161 | version: 3.0.0 1162 | resolution: "is-fullwidth-code-point@npm:3.0.0" 1163 | checksum: 10/44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 1164 | languageName: node 1165 | linkType: hard 1166 | 1167 | "is-lambda@npm:^1.0.1": 1168 | version: 1.0.1 1169 | resolution: "is-lambda@npm:1.0.1" 1170 | checksum: 10/93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 1171 | languageName: node 1172 | linkType: hard 1173 | 1174 | "is-module@npm:^1.0.0": 1175 | version: 1.0.0 1176 | resolution: "is-module@npm:1.0.0" 1177 | checksum: 10/8cd5390730c7976fb4e8546dd0b38865ee6f7bacfa08dfbb2cc07219606755f0b01709d9361e01f13009bbbd8099fa2927a8ed665118a6105d66e40f1b838c3f 1178 | languageName: node 1179 | linkType: hard 1180 | 1181 | "is-reference@npm:1.2.1": 1182 | version: 1.2.1 1183 | resolution: "is-reference@npm:1.2.1" 1184 | dependencies: 1185 | "@types/estree": "npm:*" 1186 | checksum: 10/e7b48149f8abda2c10849ea51965904d6a714193d68942ad74e30522231045acf06cbfae5a4be2702fede5d232e61bf50b3183acdc056e6e3afe07fcf4f4b2bc 1187 | languageName: node 1188 | linkType: hard 1189 | 1190 | "is-stream@npm:^2.0.0": 1191 | version: 2.0.1 1192 | resolution: "is-stream@npm:2.0.1" 1193 | checksum: 10/b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 1194 | languageName: node 1195 | linkType: hard 1196 | 1197 | "isexe@npm:^2.0.0": 1198 | version: 2.0.0 1199 | resolution: "isexe@npm:2.0.0" 1200 | checksum: 10/7c9f715c03aff08f35e98b1fadae1b9267b38f0615d501824f9743f3aab99ef10e303ce7db3f186763a0b70a19de5791ebfc854ff884d5a8c4d92211f642ec92 1201 | languageName: node 1202 | linkType: hard 1203 | 1204 | "jackspeak@npm:^2.0.3": 1205 | version: 2.2.2 1206 | resolution: "jackspeak@npm:2.2.2" 1207 | dependencies: 1208 | "@isaacs/cliui": "npm:^8.0.2" 1209 | "@pkgjs/parseargs": "npm:^0.11.0" 1210 | dependenciesMeta: 1211 | "@pkgjs/parseargs": 1212 | optional: true 1213 | checksum: 10/0f43b70bddaf42f5fa4373c78d46819d2b9e5c1e7a245d53bc7b8693b0c6c7925985fadc5e4c4b2aafa9207c8b108e8ffd15c9f0ab59fd6be60e7326749e4010 1214 | languageName: node 1215 | linkType: hard 1216 | 1217 | "jquery@npm:^3.7.1": 1218 | version: 3.7.1 1219 | resolution: "jquery@npm:3.7.1" 1220 | checksum: 10/17be9929f5fa37697d9848284f0d108c543318ef79ec794e130cd0c49f6c050d60c803a69e8cfa16fa19f5ff7cdb814a6905cceab0831186560c65ed113cd579 1221 | languageName: node 1222 | linkType: hard 1223 | 1224 | "lru-cache@npm:^6.0.0": 1225 | version: 6.0.0 1226 | resolution: "lru-cache@npm:6.0.0" 1227 | dependencies: 1228 | yallist: "npm:^4.0.0" 1229 | checksum: 10/fc1fe2ee205f7c8855fa0f34c1ab0bcf14b6229e35579ec1fd1079f31d6fc8ef8eb6fd17f2f4d99788d7e339f50e047555551ebd5e434dda503696e7c6591825 1230 | languageName: node 1231 | linkType: hard 1232 | 1233 | "lru-cache@npm:^7.7.1": 1234 | version: 7.18.3 1235 | resolution: "lru-cache@npm:7.18.3" 1236 | checksum: 10/6029ca5aba3aacb554e919d7ef804fffd4adfc4c83db00fac8248c7c78811fb6d4b6f70f7fd9d55032b3823446546a007edaa66ad1f2377ae833bd983fac5d98 1237 | languageName: node 1238 | linkType: hard 1239 | 1240 | "lru-cache@npm:^9.1.1 || ^10.0.0": 1241 | version: 10.0.0 1242 | resolution: "lru-cache@npm:10.0.0" 1243 | checksum: 10/590e00d6ccd76a1ada056585be3fd6dbddda395fc9359390cff38669c69c3fa1792dd6c4c46a9b1b411f032cd2e979d9e664f1628163292ecdfeada98c3da1f3 1244 | languageName: node 1245 | linkType: hard 1246 | 1247 | "magic-string@npm:^0.30.3": 1248 | version: 0.30.17 1249 | resolution: "magic-string@npm:0.30.17" 1250 | dependencies: 1251 | "@jridgewell/sourcemap-codec": "npm:^1.5.0" 1252 | checksum: 10/2f71af2b0afd78c2e9012a29b066d2c8ba45a9cd0c8070f7fd72de982fb1c403b4e3afdb1dae00691d56885ede66b772ef6bedf765e02e3a7066208fe2fec4aa 1253 | languageName: node 1254 | linkType: hard 1255 | 1256 | "make-dir@npm:^3.0.0": 1257 | version: 3.1.0 1258 | resolution: "make-dir@npm:3.1.0" 1259 | dependencies: 1260 | semver: "npm:^6.0.0" 1261 | checksum: 10/484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 1262 | languageName: node 1263 | linkType: hard 1264 | 1265 | "make-fetch-happen@npm:^11.0.3": 1266 | version: 11.1.1 1267 | resolution: "make-fetch-happen@npm:11.1.1" 1268 | dependencies: 1269 | agentkeepalive: "npm:^4.2.1" 1270 | cacache: "npm:^17.0.0" 1271 | http-cache-semantics: "npm:^4.1.1" 1272 | http-proxy-agent: "npm:^5.0.0" 1273 | https-proxy-agent: "npm:^5.0.0" 1274 | is-lambda: "npm:^1.0.1" 1275 | lru-cache: "npm:^7.7.1" 1276 | minipass: "npm:^5.0.0" 1277 | minipass-fetch: "npm:^3.0.0" 1278 | minipass-flush: "npm:^1.0.5" 1279 | minipass-pipeline: "npm:^1.2.4" 1280 | negotiator: "npm:^0.6.3" 1281 | promise-retry: "npm:^2.0.1" 1282 | socks-proxy-agent: "npm:^7.0.0" 1283 | ssri: "npm:^10.0.0" 1284 | checksum: 10/b4b442cfaaec81db159f752a5f2e3ee3d7aa682782868fa399200824ec6298502e01bdc456e443dc219bcd5546c8e4471644d54109c8599841dc961d17a805fa 1285 | languageName: node 1286 | linkType: hard 1287 | 1288 | "minimatch@npm:^3.1.1": 1289 | version: 3.1.2 1290 | resolution: "minimatch@npm:3.1.2" 1291 | dependencies: 1292 | brace-expansion: "npm:^1.1.7" 1293 | checksum: 10/e0b25b04cd4ec6732830344e5739b13f8690f8a012d73445a4a19fbc623f5dd481ef7a5827fde25954cd6026fede7574cc54dc4643c99d6c6b653d6203f94634 1294 | languageName: node 1295 | linkType: hard 1296 | 1297 | "minimatch@npm:^9.0.1": 1298 | version: 9.0.3 1299 | resolution: "minimatch@npm:9.0.3" 1300 | dependencies: 1301 | brace-expansion: "npm:^2.0.1" 1302 | checksum: 10/c81b47d28153e77521877649f4bab48348d10938df9e8147a58111fe00ef89559a2938de9f6632910c4f7bf7bb5cd81191a546167e58d357f0cfb1e18cecc1c5 1303 | languageName: node 1304 | linkType: hard 1305 | 1306 | "minipass-collect@npm:^1.0.2": 1307 | version: 1.0.2 1308 | resolution: "minipass-collect@npm:1.0.2" 1309 | dependencies: 1310 | minipass: "npm:^3.0.0" 1311 | checksum: 10/14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 1312 | languageName: node 1313 | linkType: hard 1314 | 1315 | "minipass-fetch@npm:^3.0.0": 1316 | version: 3.0.3 1317 | resolution: "minipass-fetch@npm:3.0.3" 1318 | dependencies: 1319 | encoding: "npm:^0.1.13" 1320 | minipass: "npm:^5.0.0" 1321 | minipass-sized: "npm:^1.0.3" 1322 | minizlib: "npm:^2.1.2" 1323 | dependenciesMeta: 1324 | encoding: 1325 | optional: true 1326 | checksum: 10/045339fa8fa2f2a544da203c38e91e6329a6c8d0d563db42db2e32bd863b0d7127692f456dcdd171bcd3123af12ce04072d3fc276571c85085a9870db7dea69a 1327 | languageName: node 1328 | linkType: hard 1329 | 1330 | "minipass-flush@npm:^1.0.5": 1331 | version: 1.0.5 1332 | resolution: "minipass-flush@npm:1.0.5" 1333 | dependencies: 1334 | minipass: "npm:^3.0.0" 1335 | checksum: 10/56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf 1336 | languageName: node 1337 | linkType: hard 1338 | 1339 | "minipass-pipeline@npm:^1.2.4": 1340 | version: 1.2.4 1341 | resolution: "minipass-pipeline@npm:1.2.4" 1342 | dependencies: 1343 | minipass: "npm:^3.0.0" 1344 | checksum: 10/b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b 1345 | languageName: node 1346 | linkType: hard 1347 | 1348 | "minipass-sized@npm:^1.0.3": 1349 | version: 1.0.3 1350 | resolution: "minipass-sized@npm:1.0.3" 1351 | dependencies: 1352 | minipass: "npm:^3.0.0" 1353 | checksum: 10/40982d8d836a52b0f37049a0a7e5d0f089637298e6d9b45df9c115d4f0520682a78258905e5c8b180fb41b593b0a82cc1361d2c74b45f7ada66334f84d1ecfdd 1354 | languageName: node 1355 | linkType: hard 1356 | 1357 | "minipass@npm:^3.0.0": 1358 | version: 3.3.6 1359 | resolution: "minipass@npm:3.3.6" 1360 | dependencies: 1361 | yallist: "npm:^4.0.0" 1362 | checksum: 10/a5c6ef069f70d9a524d3428af39f2b117ff8cd84172e19b754e7264a33df460873e6eb3d6e55758531580970de50ae950c496256bb4ad3691a2974cddff189f0 1363 | languageName: node 1364 | linkType: hard 1365 | 1366 | "minipass@npm:^5.0.0": 1367 | version: 5.0.0 1368 | resolution: "minipass@npm:5.0.0" 1369 | checksum: 10/61682162d29f45d3152b78b08bab7fb32ca10899bc5991ffe98afc18c9e9543bd1e3be94f8b8373ba6262497db63607079dc242ea62e43e7b2270837b7347c93 1370 | languageName: node 1371 | linkType: hard 1372 | 1373 | "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0": 1374 | version: 7.0.2 1375 | resolution: "minipass@npm:7.0.2" 1376 | checksum: 10/25d3afc74e21e84d35134de33d8e7ba5ff3741f84c415553548e12ee21a280926b9fbdf5656c78e81dcb0ca28fd72505533415ae0b4b9b8b0c432273dffb65f6 1377 | languageName: node 1378 | linkType: hard 1379 | 1380 | "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": 1381 | version: 2.1.2 1382 | resolution: "minizlib@npm:2.1.2" 1383 | dependencies: 1384 | minipass: "npm:^3.0.0" 1385 | yallist: "npm:^4.0.0" 1386 | checksum: 10/ae0f45436fb51344dcb87938446a32fbebb540d0e191d63b35e1c773d47512e17307bf54aa88326cc6d176594d00e4423563a091f7266c2f9a6872cdc1e234d1 1387 | languageName: node 1388 | linkType: hard 1389 | 1390 | "mkdirp@npm:^1.0.3": 1391 | version: 1.0.4 1392 | resolution: "mkdirp@npm:1.0.4" 1393 | bin: 1394 | mkdirp: bin/cmd.js 1395 | checksum: 10/d71b8dcd4b5af2fe13ecf3bd24070263489404fe216488c5ba7e38ece1f54daf219e72a833a3a2dc404331e870e9f44963a33399589490956bff003a3404d3b2 1396 | languageName: node 1397 | linkType: hard 1398 | 1399 | "ms@npm:2.1.2": 1400 | version: 2.1.2 1401 | resolution: "ms@npm:2.1.2" 1402 | checksum: 10/673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f 1403 | languageName: node 1404 | linkType: hard 1405 | 1406 | "ms@npm:^2.0.0": 1407 | version: 2.1.3 1408 | resolution: "ms@npm:2.1.3" 1409 | checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d 1410 | languageName: node 1411 | linkType: hard 1412 | 1413 | "negotiator@npm:^0.6.3": 1414 | version: 0.6.3 1415 | resolution: "negotiator@npm:0.6.3" 1416 | checksum: 10/2723fb822a17ad55c93a588a4bc44d53b22855bf4be5499916ca0cab1e7165409d0b288ba2577d7b029f10ce18cf2ed8e703e5af31c984e1e2304277ef979837 1417 | languageName: node 1418 | linkType: hard 1419 | 1420 | "node-gyp@npm:latest": 1421 | version: 9.4.0 1422 | resolution: "node-gyp@npm:9.4.0" 1423 | dependencies: 1424 | env-paths: "npm:^2.2.0" 1425 | exponential-backoff: "npm:^3.1.1" 1426 | glob: "npm:^7.1.4" 1427 | graceful-fs: "npm:^4.2.6" 1428 | make-fetch-happen: "npm:^11.0.3" 1429 | nopt: "npm:^6.0.0" 1430 | npmlog: "npm:^6.0.0" 1431 | rimraf: "npm:^3.0.2" 1432 | semver: "npm:^7.3.5" 1433 | tar: "npm:^6.1.2" 1434 | which: "npm:^2.0.2" 1435 | bin: 1436 | node-gyp: bin/node-gyp.js 1437 | checksum: 10/458317127c63877365f227b18ef2362b013b7f8440b35ae722935e61b31e6b84ec0e3625ab07f90679e2f41a1d5a7df6c4049fdf8e7b3c81fcf22775147b47ac 1438 | languageName: node 1439 | linkType: hard 1440 | 1441 | "nopt@npm:^6.0.0": 1442 | version: 6.0.0 1443 | resolution: "nopt@npm:6.0.0" 1444 | dependencies: 1445 | abbrev: "npm:^1.0.0" 1446 | bin: 1447 | nopt: bin/nopt.js 1448 | checksum: 10/3c1128e07cd0241ae66d6e6a472170baa9f3e84dd4203950ba8df5bafac4efa2166ce917a57ef02b01ba7c40d18b2cc64b29b225fd3640791fe07b24f0b33a32 1449 | languageName: node 1450 | linkType: hard 1451 | 1452 | "npmlog@npm:^6.0.0": 1453 | version: 6.0.2 1454 | resolution: "npmlog@npm:6.0.2" 1455 | dependencies: 1456 | are-we-there-yet: "npm:^3.0.0" 1457 | console-control-strings: "npm:^1.1.0" 1458 | gauge: "npm:^4.0.3" 1459 | set-blocking: "npm:^2.0.0" 1460 | checksum: 10/82b123677e62deb9e7472e27b92386c09e6e254ee6c8bcd720b3011013e4168bc7088e984f4fbd53cb6e12f8b4690e23e4fa6132689313e0d0dc4feea45489bb 1461 | languageName: node 1462 | linkType: hard 1463 | 1464 | "once@npm:^1.3.0": 1465 | version: 1.4.0 1466 | resolution: "once@npm:1.4.0" 1467 | dependencies: 1468 | wrappy: "npm:1" 1469 | checksum: 10/cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 1470 | languageName: node 1471 | linkType: hard 1472 | 1473 | "p-map@npm:^4.0.0": 1474 | version: 4.0.0 1475 | resolution: "p-map@npm:4.0.0" 1476 | dependencies: 1477 | aggregate-error: "npm:^3.0.0" 1478 | checksum: 10/7ba4a2b1e24c05e1fc14bbaea0fc6d85cf005ae7e9c9425d4575550f37e2e584b1af97bcde78eacd7559208f20995988d52881334db16cf77bc1bcf68e48ed7c 1479 | languageName: node 1480 | linkType: hard 1481 | 1482 | "path-is-absolute@npm:^1.0.0": 1483 | version: 1.0.1 1484 | resolution: "path-is-absolute@npm:1.0.1" 1485 | checksum: 10/060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 1486 | languageName: node 1487 | linkType: hard 1488 | 1489 | "path-key@npm:^3.1.0": 1490 | version: 3.1.1 1491 | resolution: "path-key@npm:3.1.1" 1492 | checksum: 10/55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 1493 | languageName: node 1494 | linkType: hard 1495 | 1496 | "path-parse@npm:^1.0.7": 1497 | version: 1.0.7 1498 | resolution: "path-parse@npm:1.0.7" 1499 | checksum: 10/49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a 1500 | languageName: node 1501 | linkType: hard 1502 | 1503 | "path-scurry@npm:^1.10.1": 1504 | version: 1.10.1 1505 | resolution: "path-scurry@npm:1.10.1" 1506 | dependencies: 1507 | lru-cache: "npm:^9.1.1 || ^10.0.0" 1508 | minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" 1509 | checksum: 10/eebfb8304fef1d4f7e1486df987e4fd77413de4fce16508dea69fcf8eb318c09a6b15a7a2f4c22877cec1cb7ecbd3071d18ca9de79eeece0df874a00f1f0bdc8 1510 | languageName: node 1511 | linkType: hard 1512 | 1513 | "picomatch@npm:^2.3.1": 1514 | version: 2.3.1 1515 | resolution: "picomatch@npm:2.3.1" 1516 | checksum: 10/60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc 1517 | languageName: node 1518 | linkType: hard 1519 | 1520 | "picomatch@npm:^4.0.2": 1521 | version: 4.0.2 1522 | resolution: "picomatch@npm:4.0.2" 1523 | checksum: 10/ce617b8da36797d09c0baacb96ca8a44460452c89362d7cb8f70ca46b4158ba8bc3606912de7c818eb4a939f7f9015cef3c766ec8a0c6bfc725fdc078e39c717 1524 | languageName: node 1525 | linkType: hard 1526 | 1527 | "prepend-file@npm:^2.0.1": 1528 | version: 2.0.1 1529 | resolution: "prepend-file@npm:2.0.1" 1530 | dependencies: 1531 | temp-write: "npm:^4.0.0" 1532 | checksum: 10/c58ab2a1abe32d0ef7c819496ebeeb63358e1cd3d12191ab1fb0dad0645cd2fb0f7023e3ced7412cfb84ff79d753a9a8bfea5aa1db810ab1dab085a7c4444bf9 1533 | languageName: node 1534 | linkType: hard 1535 | 1536 | "promise-retry@npm:^2.0.1": 1537 | version: 2.0.1 1538 | resolution: "promise-retry@npm:2.0.1" 1539 | dependencies: 1540 | err-code: "npm:^2.0.2" 1541 | retry: "npm:^0.12.0" 1542 | checksum: 10/96e1a82453c6c96eef53a37a1d6134c9f2482f94068f98a59145d0986ca4e497bf110a410adf73857e588165eab3899f0ebcf7b3890c1b3ce802abc0d65967d4 1543 | languageName: node 1544 | linkType: hard 1545 | 1546 | "readable-stream@npm:^3.6.0": 1547 | version: 3.6.2 1548 | resolution: "readable-stream@npm:3.6.2" 1549 | dependencies: 1550 | inherits: "npm:^2.0.3" 1551 | string_decoder: "npm:^1.1.1" 1552 | util-deprecate: "npm:^1.0.1" 1553 | checksum: 10/d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048 1554 | languageName: node 1555 | linkType: hard 1556 | 1557 | "resolve-pkg-maps@npm:^1.0.0": 1558 | version: 1.0.0 1559 | resolution: "resolve-pkg-maps@npm:1.0.0" 1560 | checksum: 10/0763150adf303040c304009231314d1e84c6e5ebfa2d82b7d94e96a6e82bacd1dcc0b58ae257315f3c8adb89a91d8d0f12928241cba2df1680fbe6f60bf99b0e 1561 | languageName: node 1562 | linkType: hard 1563 | 1564 | "resolve@npm:^1.22.1": 1565 | version: 1.22.3 1566 | resolution: "resolve@npm:1.22.3" 1567 | dependencies: 1568 | is-core-module: "npm:^2.12.0" 1569 | path-parse: "npm:^1.0.7" 1570 | supports-preserve-symlinks-flag: "npm:^1.0.0" 1571 | bin: 1572 | resolve: bin/resolve 1573 | checksum: 10/3d733800d5f7525df912e9c4a68ee14574f42fa3676651debe6d2f6f55f8eef35626ad6330745da52943d695760f1ac7ee85b2c24f48be111f744aba7cb2e06d 1574 | languageName: node 1575 | linkType: hard 1576 | 1577 | "resolve@patch:resolve@npm%3A^1.22.1#optional!builtin": 1578 | version: 1.22.3 1579 | resolution: "resolve@patch:resolve@npm%3A1.22.3#optional!builtin::version=1.22.3&hash=c3c19d" 1580 | dependencies: 1581 | is-core-module: "npm:^2.12.0" 1582 | path-parse: "npm:^1.0.7" 1583 | supports-preserve-symlinks-flag: "npm:^1.0.0" 1584 | bin: 1585 | resolve: bin/resolve 1586 | checksum: 10/b775dffbad4d4ed3ae498a37d33a96282d64de50955f7642258aeaa2886e419598f4dfe837c0e31bcc6eb448287c1578e899dffe49eca76ef393bf8605a3b543 1587 | languageName: node 1588 | linkType: hard 1589 | 1590 | "retry@npm:^0.12.0": 1591 | version: 0.12.0 1592 | resolution: "retry@npm:0.12.0" 1593 | checksum: 10/1f914879f97e7ee931ad05fe3afa629bd55270fc6cf1c1e589b6a99fab96d15daad0fa1a52a00c729ec0078045fe3e399bd4fd0c93bcc906957bdc17f89cb8e6 1594 | languageName: node 1595 | linkType: hard 1596 | 1597 | "rimraf@npm:^3.0.2": 1598 | version: 3.0.2 1599 | resolution: "rimraf@npm:3.0.2" 1600 | dependencies: 1601 | glob: "npm:^7.1.3" 1602 | bin: 1603 | rimraf: bin.js 1604 | checksum: 10/063ffaccaaaca2cfd0ef3beafb12d6a03dd7ff1260d752d62a6077b5dfff6ae81bea571f655bb6b589d366930ec1bdd285d40d560c0dae9b12f125e54eb743d5 1605 | languageName: node 1606 | linkType: hard 1607 | 1608 | "rollup@npm:^4.35.0": 1609 | version: 4.35.0 1610 | resolution: "rollup@npm:4.35.0" 1611 | dependencies: 1612 | "@rollup/rollup-android-arm-eabi": "npm:4.35.0" 1613 | "@rollup/rollup-android-arm64": "npm:4.35.0" 1614 | "@rollup/rollup-darwin-arm64": "npm:4.35.0" 1615 | "@rollup/rollup-darwin-x64": "npm:4.35.0" 1616 | "@rollup/rollup-freebsd-arm64": "npm:4.35.0" 1617 | "@rollup/rollup-freebsd-x64": "npm:4.35.0" 1618 | "@rollup/rollup-linux-arm-gnueabihf": "npm:4.35.0" 1619 | "@rollup/rollup-linux-arm-musleabihf": "npm:4.35.0" 1620 | "@rollup/rollup-linux-arm64-gnu": "npm:4.35.0" 1621 | "@rollup/rollup-linux-arm64-musl": "npm:4.35.0" 1622 | "@rollup/rollup-linux-loongarch64-gnu": "npm:4.35.0" 1623 | "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.35.0" 1624 | "@rollup/rollup-linux-riscv64-gnu": "npm:4.35.0" 1625 | "@rollup/rollup-linux-s390x-gnu": "npm:4.35.0" 1626 | "@rollup/rollup-linux-x64-gnu": "npm:4.35.0" 1627 | "@rollup/rollup-linux-x64-musl": "npm:4.35.0" 1628 | "@rollup/rollup-win32-arm64-msvc": "npm:4.35.0" 1629 | "@rollup/rollup-win32-ia32-msvc": "npm:4.35.0" 1630 | "@rollup/rollup-win32-x64-msvc": "npm:4.35.0" 1631 | "@types/estree": "npm:1.0.6" 1632 | fsevents: "npm:~2.3.2" 1633 | dependenciesMeta: 1634 | "@rollup/rollup-android-arm-eabi": 1635 | optional: true 1636 | "@rollup/rollup-android-arm64": 1637 | optional: true 1638 | "@rollup/rollup-darwin-arm64": 1639 | optional: true 1640 | "@rollup/rollup-darwin-x64": 1641 | optional: true 1642 | "@rollup/rollup-freebsd-arm64": 1643 | optional: true 1644 | "@rollup/rollup-freebsd-x64": 1645 | optional: true 1646 | "@rollup/rollup-linux-arm-gnueabihf": 1647 | optional: true 1648 | "@rollup/rollup-linux-arm-musleabihf": 1649 | optional: true 1650 | "@rollup/rollup-linux-arm64-gnu": 1651 | optional: true 1652 | "@rollup/rollup-linux-arm64-musl": 1653 | optional: true 1654 | "@rollup/rollup-linux-loongarch64-gnu": 1655 | optional: true 1656 | "@rollup/rollup-linux-powerpc64le-gnu": 1657 | optional: true 1658 | "@rollup/rollup-linux-riscv64-gnu": 1659 | optional: true 1660 | "@rollup/rollup-linux-s390x-gnu": 1661 | optional: true 1662 | "@rollup/rollup-linux-x64-gnu": 1663 | optional: true 1664 | "@rollup/rollup-linux-x64-musl": 1665 | optional: true 1666 | "@rollup/rollup-win32-arm64-msvc": 1667 | optional: true 1668 | "@rollup/rollup-win32-ia32-msvc": 1669 | optional: true 1670 | "@rollup/rollup-win32-x64-msvc": 1671 | optional: true 1672 | fsevents: 1673 | optional: true 1674 | bin: 1675 | rollup: dist/bin/rollup 1676 | checksum: 10/1fd13b8cb874106727cc4241e7b09167b835247185f52a0ac0d4b302df6dd01feec32e53ee3fead757c0c033f8b15ae6f0e093854de1878ae9e5dee37ec52579 1677 | languageName: node 1678 | linkType: hard 1679 | 1680 | "safe-buffer@npm:~5.2.0": 1681 | version: 5.2.1 1682 | resolution: "safe-buffer@npm:5.2.1" 1683 | checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 1684 | languageName: node 1685 | linkType: hard 1686 | 1687 | "safer-buffer@npm:>= 2.1.2 < 3.0.0": 1688 | version: 2.1.2 1689 | resolution: "safer-buffer@npm:2.1.2" 1690 | checksum: 10/7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83 1691 | languageName: node 1692 | linkType: hard 1693 | 1694 | "semver@npm:^6.0.0": 1695 | version: 6.3.1 1696 | resolution: "semver@npm:6.3.1" 1697 | bin: 1698 | semver: bin/semver.js 1699 | checksum: 10/1ef3a85bd02a760c6ef76a45b8c1ce18226de40831e02a00bad78485390b98b6ccaa31046245fc63bba4a47a6a592b6c7eedc65cc47126e60489f9cc1ce3ed7e 1700 | languageName: node 1701 | linkType: hard 1702 | 1703 | "semver@npm:^7.3.5": 1704 | version: 7.5.4 1705 | resolution: "semver@npm:7.5.4" 1706 | dependencies: 1707 | lru-cache: "npm:^6.0.0" 1708 | bin: 1709 | semver: bin/semver.js 1710 | checksum: 10/985dec0d372370229a262c737063860fabd4a1c730662c1ea3200a2f649117761a42184c96df62a0e885e76fbd5dace41087d6c1ac0351b13c0df5d6bcb1b5ac 1711 | languageName: node 1712 | linkType: hard 1713 | 1714 | "set-blocking@npm:^2.0.0": 1715 | version: 2.0.0 1716 | resolution: "set-blocking@npm:2.0.0" 1717 | checksum: 10/8980ebf7ae9eb945bb036b6e283c547ee783a1ad557a82babf758a065e2fb6ea337fd82cac30dd565c1e606e423f30024a19fff7afbf4977d784720c4026a8ef 1718 | languageName: node 1719 | linkType: hard 1720 | 1721 | "shebang-command@npm:^2.0.0": 1722 | version: 2.0.0 1723 | resolution: "shebang-command@npm:2.0.0" 1724 | dependencies: 1725 | shebang-regex: "npm:^3.0.0" 1726 | checksum: 10/6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa 1727 | languageName: node 1728 | linkType: hard 1729 | 1730 | "shebang-regex@npm:^3.0.0": 1731 | version: 3.0.0 1732 | resolution: "shebang-regex@npm:3.0.0" 1733 | checksum: 10/1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 1734 | languageName: node 1735 | linkType: hard 1736 | 1737 | "signal-exit@npm:^3.0.7": 1738 | version: 3.0.7 1739 | resolution: "signal-exit@npm:3.0.7" 1740 | checksum: 10/a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 1741 | languageName: node 1742 | linkType: hard 1743 | 1744 | "signal-exit@npm:^4.0.1": 1745 | version: 4.0.2 1746 | resolution: "signal-exit@npm:4.0.2" 1747 | checksum: 10/99d49eab7f24aeed79e44999500d5ff4b9fbb560b0e1f8d47096c54d625b995aeaec3032cce44527adf2de0c303731a8356e234a348d6801214a8a3385a1ff8e 1748 | languageName: node 1749 | linkType: hard 1750 | 1751 | "smart-buffer@npm:^4.2.0": 1752 | version: 4.2.0 1753 | resolution: "smart-buffer@npm:4.2.0" 1754 | checksum: 10/927484aa0b1640fd9473cee3e0a0bcad6fce93fd7bbc18bac9ad0c33686f5d2e2c422fba24b5899c184524af01e11dd2bd051c2bf2b07e47aff8ca72cbfc60d2 1755 | languageName: node 1756 | linkType: hard 1757 | 1758 | "socks-proxy-agent@npm:^7.0.0": 1759 | version: 7.0.0 1760 | resolution: "socks-proxy-agent@npm:7.0.0" 1761 | dependencies: 1762 | agent-base: "npm:^6.0.2" 1763 | debug: "npm:^4.3.3" 1764 | socks: "npm:^2.6.2" 1765 | checksum: 10/26c75d9c62a9ed3fd494df60e65e88da442f78e0d4bc19bfd85ac37bd2c67470d6d4bba5202e804561cda6674db52864c9e2a2266775f879bc8d89c1445a5f4c 1766 | languageName: node 1767 | linkType: hard 1768 | 1769 | "socks@npm:^2.6.2": 1770 | version: 2.7.1 1771 | resolution: "socks@npm:2.7.1" 1772 | dependencies: 1773 | ip: "npm:^2.0.0" 1774 | smart-buffer: "npm:^4.2.0" 1775 | checksum: 10/5074f7d6a13b3155fa655191df1c7e7a48ce3234b8ccf99afa2ccb56591c195e75e8bb78486f8e9ea8168e95a29573cbaad55b2b5e195160ae4d2ea6811ba833 1776 | languageName: node 1777 | linkType: hard 1778 | 1779 | "ssri@npm:^10.0.0": 1780 | version: 10.0.4 1781 | resolution: "ssri@npm:10.0.4" 1782 | dependencies: 1783 | minipass: "npm:^5.0.0" 1784 | checksum: 10/3f3dc4a0bbde19a67a4e7bdbef0c94ea92643a5f835565c09107f0c3696de9079f65742e641b449e978db69751ac6e85dfdc3f2c2abfe221d1c346d5b7ed077f 1785 | languageName: node 1786 | linkType: hard 1787 | 1788 | "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.3": 1789 | version: 4.2.3 1790 | resolution: "string-width@npm:4.2.3" 1791 | dependencies: 1792 | emoji-regex: "npm:^8.0.0" 1793 | is-fullwidth-code-point: "npm:^3.0.0" 1794 | strip-ansi: "npm:^6.0.1" 1795 | checksum: 10/e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb 1796 | languageName: node 1797 | linkType: hard 1798 | 1799 | "string-width@npm:^5.0.1, string-width@npm:^5.1.2": 1800 | version: 5.1.2 1801 | resolution: "string-width@npm:5.1.2" 1802 | dependencies: 1803 | eastasianwidth: "npm:^0.2.0" 1804 | emoji-regex: "npm:^9.2.2" 1805 | strip-ansi: "npm:^7.0.1" 1806 | checksum: 10/7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 1807 | languageName: node 1808 | linkType: hard 1809 | 1810 | "string_decoder@npm:^1.1.1": 1811 | version: 1.3.0 1812 | resolution: "string_decoder@npm:1.3.0" 1813 | dependencies: 1814 | safe-buffer: "npm:~5.2.0" 1815 | checksum: 10/54d23f4a6acae0e93f999a585e673be9e561b65cd4cca37714af1e893ab8cd8dfa52a9e4f58f48f87b4a44918d3a9254326cb80ed194bf2e4c226e2b21767e56 1816 | languageName: node 1817 | linkType: hard 1818 | 1819 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": 1820 | version: 6.0.1 1821 | resolution: "strip-ansi@npm:6.0.1" 1822 | dependencies: 1823 | ansi-regex: "npm:^5.0.1" 1824 | checksum: 10/ae3b5436d34fadeb6096367626ce987057713c566e1e7768818797e00ac5d62023d0f198c4e681eae9e20701721980b26a64a8f5b91238869592a9c6800719a2 1825 | languageName: node 1826 | linkType: hard 1827 | 1828 | "strip-ansi@npm:^7.0.1": 1829 | version: 7.1.0 1830 | resolution: "strip-ansi@npm:7.1.0" 1831 | dependencies: 1832 | ansi-regex: "npm:^6.0.1" 1833 | checksum: 10/475f53e9c44375d6e72807284024ac5d668ee1d06010740dec0b9744f2ddf47de8d7151f80e5f6190fc8f384e802fdf9504b76a7e9020c9faee7103623338be2 1834 | languageName: node 1835 | linkType: hard 1836 | 1837 | "supports-preserve-symlinks-flag@npm:^1.0.0": 1838 | version: 1.0.0 1839 | resolution: "supports-preserve-symlinks-flag@npm:1.0.0" 1840 | checksum: 10/a9dc19ae2220c952bd2231d08ddeecb1b0328b61e72071ff4000c8384e145cc07c1c0bdb3b5a1cb06e186a7b2790f1dee793418b332f6ddf320de25d9125be7e 1841 | languageName: node 1842 | linkType: hard 1843 | 1844 | "tar@npm:^6.1.11, tar@npm:^6.1.2": 1845 | version: 6.1.15 1846 | resolution: "tar@npm:6.1.15" 1847 | dependencies: 1848 | chownr: "npm:^2.0.0" 1849 | fs-minipass: "npm:^2.0.0" 1850 | minipass: "npm:^5.0.0" 1851 | minizlib: "npm:^2.1.1" 1852 | mkdirp: "npm:^1.0.3" 1853 | yallist: "npm:^4.0.0" 1854 | checksum: 10/4848b92da8581e64ce4d8a760b47468dd9d212a4612846d8dd75b5c224a42c66ed5bcf8cfa9e9cd2eb64ebe1351413fb3eac93324a4eee536f0941beefa1f2eb 1855 | languageName: node 1856 | linkType: hard 1857 | 1858 | "temp-dir@npm:^1.0.0": 1859 | version: 1.0.0 1860 | resolution: "temp-dir@npm:1.0.0" 1861 | checksum: 10/cb2b58ddfb12efa83e939091386ad73b425c9a8487ea0095fe4653192a40d49184a771a1beba99045fbd011e389fd563122d79f54f82be86a55620667e08a6b2 1862 | languageName: node 1863 | linkType: hard 1864 | 1865 | "temp-write@npm:^4.0.0": 1866 | version: 4.0.0 1867 | resolution: "temp-write@npm:4.0.0" 1868 | dependencies: 1869 | graceful-fs: "npm:^4.1.15" 1870 | is-stream: "npm:^2.0.0" 1871 | make-dir: "npm:^3.0.0" 1872 | temp-dir: "npm:^1.0.0" 1873 | uuid: "npm:^3.3.2" 1874 | checksum: 10/4f94187662968b7cc9d88d7f8eeecc9e7317e26d640d2f90e833151e1049702ec6c63512d095b8bd69c09735eb5b5bfba9bb37dbed3bf2fe8b01076ffa161338 1875 | languageName: node 1876 | linkType: hard 1877 | 1878 | "tslib@npm:^2.8.1": 1879 | version: 2.8.1 1880 | resolution: "tslib@npm:2.8.1" 1881 | checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 1882 | languageName: node 1883 | linkType: hard 1884 | 1885 | "tsx@npm:^4.19.3": 1886 | version: 4.19.3 1887 | resolution: "tsx@npm:4.19.3" 1888 | dependencies: 1889 | esbuild: "npm:~0.25.0" 1890 | fsevents: "npm:~2.3.3" 1891 | get-tsconfig: "npm:^4.7.5" 1892 | dependenciesMeta: 1893 | fsevents: 1894 | optional: true 1895 | bin: 1896 | tsx: dist/cli.mjs 1897 | checksum: 10/a7e7f41e5593b242772050abacf51908aa8a6d4d9ea6c29e80161eb557d664a0f4cc8d38d0c8c151fddb6c2e9e337af27ba0e269c9707ccd7eeff0e0ea7fcf98 1898 | languageName: node 1899 | linkType: hard 1900 | 1901 | "typescript@npm:^5.8.2": 1902 | version: 5.8.2 1903 | resolution: "typescript@npm:5.8.2" 1904 | bin: 1905 | tsc: bin/tsc 1906 | tsserver: bin/tsserver 1907 | checksum: 10/dbc2168a55d56771f4d581997be52bab5cbc09734fec976cfbaabd787e61fb4c6cf9125fd48c6f98054ce549c77ecedefc7f64252a830dd8e9c3381f61fbeb78 1908 | languageName: node 1909 | linkType: hard 1910 | 1911 | "typescript@patch:typescript@npm%3A^5.8.2#optional!builtin": 1912 | version: 5.8.2 1913 | resolution: "typescript@patch:typescript@npm%3A5.8.2#optional!builtin::version=5.8.2&hash=5786d5" 1914 | bin: 1915 | tsc: bin/tsc 1916 | tsserver: bin/tsserver 1917 | checksum: 10/97920a082ffc57583b1cb6bc4faa502acc156358e03f54c7fc7fdf0b61c439a717f4c9070c449ee9ee683d4cfc3bb203127c2b9794b2950f66d9d307a4ff262c 1918 | languageName: node 1919 | linkType: hard 1920 | 1921 | "undici-types@npm:~6.19.2": 1922 | version: 6.19.8 1923 | resolution: "undici-types@npm:6.19.8" 1924 | checksum: 10/cf0b48ed4fc99baf56584afa91aaffa5010c268b8842f62e02f752df209e3dea138b372a60a963b3b2576ed932f32329ce7ddb9cb5f27a6c83040d8cd74b7a70 1925 | languageName: node 1926 | linkType: hard 1927 | 1928 | "unique-filename@npm:^3.0.0": 1929 | version: 3.0.0 1930 | resolution: "unique-filename@npm:3.0.0" 1931 | dependencies: 1932 | unique-slug: "npm:^4.0.0" 1933 | checksum: 10/8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df 1934 | languageName: node 1935 | linkType: hard 1936 | 1937 | "unique-slug@npm:^4.0.0": 1938 | version: 4.0.0 1939 | resolution: "unique-slug@npm:4.0.0" 1940 | dependencies: 1941 | imurmurhash: "npm:^0.1.4" 1942 | checksum: 10/40912a8963fc02fb8b600cf50197df4a275c602c60de4cac4f75879d3c48558cfac48de08a25cc10df8112161f7180b3bbb4d662aadb711568602f9eddee54f0 1943 | languageName: node 1944 | linkType: hard 1945 | 1946 | "util-deprecate@npm:^1.0.1": 1947 | version: 1.0.2 1948 | resolution: "util-deprecate@npm:1.0.2" 1949 | checksum: 10/474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 1950 | languageName: node 1951 | linkType: hard 1952 | 1953 | "uuid@npm:^3.3.2": 1954 | version: 3.4.0 1955 | resolution: "uuid@npm:3.4.0" 1956 | bin: 1957 | uuid: ./bin/uuid 1958 | checksum: 10/4f2b86432b04cc7c73a0dd1bcf11f1fc18349d65d2e4e32dd0fc658909329a1e0cc9244aa93f34c0cccfdd5ae1af60a149251a5f420ec3ac4223a3dab198fb2e 1959 | languageName: node 1960 | linkType: hard 1961 | 1962 | "which@npm:^2.0.1, which@npm:^2.0.2": 1963 | version: 2.0.2 1964 | resolution: "which@npm:2.0.2" 1965 | dependencies: 1966 | isexe: "npm:^2.0.0" 1967 | bin: 1968 | node-which: ./bin/node-which 1969 | checksum: 10/4782f8a1d6b8fc12c65e968fea49f59752bf6302dc43036c3bf87da718a80710f61a062516e9764c70008b487929a73546125570acea95c5b5dcc8ac3052c70f 1970 | languageName: node 1971 | linkType: hard 1972 | 1973 | "wide-align@npm:^1.1.5": 1974 | version: 1.1.5 1975 | resolution: "wide-align@npm:1.1.5" 1976 | dependencies: 1977 | string-width: "npm:^1.0.2 || 2 || 3 || 4" 1978 | checksum: 10/d5f8027b9a8255a493a94e4ec1b74a27bff6679d5ffe29316a3215e4712945c84ef73ca4045c7e20ae7d0c72f5f57f296e04a4928e773d4276a2f1222e4c2e99 1979 | languageName: node 1980 | linkType: hard 1981 | 1982 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 1983 | version: 7.0.0 1984 | resolution: "wrap-ansi@npm:7.0.0" 1985 | dependencies: 1986 | ansi-styles: "npm:^4.0.0" 1987 | string-width: "npm:^4.1.0" 1988 | strip-ansi: "npm:^6.0.0" 1989 | checksum: 10/cebdaeca3a6880da410f75209e68cd05428580de5ad24535f22696d7d9cab134d1f8498599f344c3cf0fb37c1715807a183778d8c648d6cc0cb5ff2bb4236540 1990 | languageName: node 1991 | linkType: hard 1992 | 1993 | "wrap-ansi@npm:^8.1.0": 1994 | version: 8.1.0 1995 | resolution: "wrap-ansi@npm:8.1.0" 1996 | dependencies: 1997 | ansi-styles: "npm:^6.1.0" 1998 | string-width: "npm:^5.0.1" 1999 | strip-ansi: "npm:^7.0.1" 2000 | checksum: 10/7b1e4b35e9bb2312d2ee9ee7dc95b8cb5f8b4b5a89f7dde5543fe66c1e3715663094defa50d75454ac900bd210f702d575f15f3f17fa9ec0291806d2578d1ddf 2001 | languageName: node 2002 | linkType: hard 2003 | 2004 | "wrappy@npm:1": 2005 | version: 1.0.2 2006 | resolution: "wrappy@npm:1.0.2" 2007 | checksum: 10/159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 2008 | languageName: node 2009 | linkType: hard 2010 | 2011 | "yallist@npm:^4.0.0": 2012 | version: 4.0.0 2013 | resolution: "yallist@npm:4.0.0" 2014 | checksum: 10/4cb02b42b8a93b5cf50caf5d8e9beb409400a8a4d85e83bb0685c1457e9ac0b7a00819e9f5991ac25ffabb56a78e2f017c1acc010b3a1babfe6de690ba531abd 2015 | languageName: node 2016 | linkType: hard 2017 | --------------------------------------------------------------------------------