├── .gitignore ├── README.md ├── leet.js ├── leet └── index.js ├── package-lock.json ├── package.json └── run /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | script.md 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | WTF DONT USE THIS 2 | -------------------------------------------------------------------------------- /leet.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import * as puppeteer from "puppeteer" 3 | import * as leet from "./leet/index.js" 4 | 5 | async function getBrowser() { 6 | return puppeteer.connect({ 7 | browserURL: 'http://localhost:9222', // Ensure this matches the remote debugging port 8 | defaultViewport: null, 9 | }); 10 | } 11 | 12 | async function wait(time) { 13 | const start = Date.now(); 14 | let lastReport = 0; 15 | while (true) { 16 | const now = Date.now(); 17 | const delta = now - start; 18 | if (now - lastReport > 30 * 1000) { 19 | console.log(`you have ${(time - delta) / 1000}s remaining`) 20 | lastReport = now 21 | } 22 | 23 | if (delta > time) { 24 | process.exit(1) 25 | } 26 | 27 | await new Promise(res => setTimeout(res, 15)); 28 | } 29 | } 30 | 31 | async function run() { 32 | const browser = await getBrowser() 33 | const op = process.argv[2]; 34 | 35 | wait(+process.argv[3] || 20 * 60 * 1000) 36 | switch (op) { 37 | case "submit": 38 | await leet.submit(browser) 39 | break; 40 | case "listen": 41 | await leet.listen(browser) 42 | break; 43 | } 44 | 45 | process.exit(0) 46 | } 47 | 48 | run(); 49 | -------------------------------------------------------------------------------- /leet/index.js: -------------------------------------------------------------------------------- 1 | import * as puppeteer from "puppeteer" 2 | import * as fs from "node:fs/promises" 3 | 4 | /** 5 | * @param {puppeteer.Browser} browser 6 | * @returns {Promise} 7 | */ 8 | export async function findLeetcodePage(browser) { 9 | console.log("getting pages") 10 | const pages = await browser.pages() 11 | console.log("got pages", pages.length) 12 | for (const page of pages) { 13 | console.log("page..", page.url()) 14 | if (page.url().includes("https://leetcode.com/problems")) { 15 | return page 16 | } 17 | } 18 | 19 | throw new Error("couldn't find page") 20 | } 21 | 22 | /** 23 | * @typedef {{ 24 | state: "PENDING" 25 | } | { 26 | status_code: number, 27 | run_success: boolean, 28 | finished: boolean, 29 | total_correct: 0, 30 | total_testcases: 104, 31 | status_msg: string, 32 | state: "SUCCESS" 33 | }} SubmitResponse 34 | */ 35 | 36 | 37 | /** 38 | * @param {puppeteer.Page} page 39 | * @param {string} id 40 | * @returns {Promise} 41 | */ 42 | async function submission(page, id) { 43 | return new Promise((res, rej) => { 44 | async function innerSubmission(response) { 45 | if (response.url().includes(id)) { 46 | try { 47 | const data = /** @type {SubmitResponse} */(await response.json()) 48 | if (data.state === "PENDING" || data.state === "STARTED") { 49 | return 50 | } 51 | res(data) 52 | page.off("response", innerSubmission) 53 | } catch (e) { 54 | console.log("unable to get json", e, await response.text()); 55 | rej(e) 56 | } 57 | } 58 | } 59 | 60 | page.on('response', innerSubmission); 61 | }); 62 | } 63 | 64 | /** 65 | * @param {puppeteer.Page} page 66 | * @returns {Promise} 67 | */ 68 | async function listenForSubmit(page) { 69 | return new Promise((res, rej) => { 70 | /** 71 | * @param {puppeteer.HTTPResponse} response 72 | */ 73 | async function innerListenForSubmit(response) { 74 | if (response.url().includes("submit")) { 75 | console.log("submit found!") 76 | page.off('response', innerListenForSubmit) 77 | try { 78 | const data = await response.json() 79 | res(data.submission_id) 80 | } catch (e) { 81 | console.log("unable to get json", e, await response.text()); 82 | rej(e) 83 | } 84 | } 85 | } 86 | 87 | page.on('response', innerListenForSubmit) 88 | }); 89 | } 90 | 91 | /** 92 | * @param {puppeteer.Browser} browser 93 | */ 94 | export async function listen(browser) { 95 | const page = await findLeetcodePage(browser) 96 | while (true) { 97 | try { 98 | const id = await listenForSubmit(page) 99 | const response = await submission(page, id); 100 | 101 | console.log(response.status_msg) 102 | if (response.status_msg === "Wrong Answer" || response.status_msg === "Runtime Error") { 103 | process.exit(1) 104 | } 105 | console.log(response) 106 | process.exit(0) 107 | } catch (e) { 108 | } 109 | } 110 | } 111 | 112 | /** 113 | * @param {puppeteer.Browser} browser 114 | */ 115 | export async function submit(browser) { 116 | const page = await findLeetcodePage(browser) 117 | console.log("page", page) 118 | const submitButton = await page.evaluateHandle(() => { 119 | const elements = Array.from(document.querySelectorAll('button')); 120 | return elements.find(el => el.textContent.trim().includes('Submit')); 121 | }); 122 | 123 | const [ 124 | _, 125 | id 126 | ] = await Promise.all([ 127 | submitButton.click(), 128 | listenForSubmit(page), 129 | ]); 130 | 131 | const response = await submission(page, id); 132 | console.log(response.status_msg) 133 | if (response.status_msg === "Wrong Answer") { 134 | process.exit(1) 135 | } 136 | process.exit(0) 137 | } 138 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leetcode-pup", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "leetcode-pup", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "puppeteer": "^23.10.4" 13 | } 14 | }, 15 | "node_modules/@babel/code-frame": { 16 | "version": "7.26.2", 17 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", 18 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", 19 | "dependencies": { 20 | "@babel/helper-validator-identifier": "^7.25.9", 21 | "js-tokens": "^4.0.0", 22 | "picocolors": "^1.0.0" 23 | }, 24 | "engines": { 25 | "node": ">=6.9.0" 26 | } 27 | }, 28 | "node_modules/@babel/helper-validator-identifier": { 29 | "version": "7.25.9", 30 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 31 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 32 | "engines": { 33 | "node": ">=6.9.0" 34 | } 35 | }, 36 | "node_modules/@puppeteer/browsers": { 37 | "version": "2.6.1", 38 | "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.6.1.tgz", 39 | "integrity": "sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==", 40 | "dependencies": { 41 | "debug": "^4.4.0", 42 | "extract-zip": "^2.0.1", 43 | "progress": "^2.0.3", 44 | "proxy-agent": "^6.5.0", 45 | "semver": "^7.6.3", 46 | "tar-fs": "^3.0.6", 47 | "unbzip2-stream": "^1.4.3", 48 | "yargs": "^17.7.2" 49 | }, 50 | "bin": { 51 | "browsers": "lib/cjs/main-cli.js" 52 | }, 53 | "engines": { 54 | "node": ">=18" 55 | } 56 | }, 57 | "node_modules/@tootallnate/quickjs-emscripten": { 58 | "version": "0.23.0", 59 | "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", 60 | "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" 61 | }, 62 | "node_modules/@types/node": { 63 | "version": "22.10.2", 64 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", 65 | "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", 66 | "optional": true, 67 | "dependencies": { 68 | "undici-types": "~6.20.0" 69 | } 70 | }, 71 | "node_modules/@types/yauzl": { 72 | "version": "2.10.3", 73 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", 74 | "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", 75 | "optional": true, 76 | "dependencies": { 77 | "@types/node": "*" 78 | } 79 | }, 80 | "node_modules/agent-base": { 81 | "version": "7.1.3", 82 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", 83 | "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", 84 | "engines": { 85 | "node": ">= 14" 86 | } 87 | }, 88 | "node_modules/ansi-regex": { 89 | "version": "5.0.1", 90 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 91 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 92 | "engines": { 93 | "node": ">=8" 94 | } 95 | }, 96 | "node_modules/ansi-styles": { 97 | "version": "4.3.0", 98 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 99 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 100 | "dependencies": { 101 | "color-convert": "^2.0.1" 102 | }, 103 | "engines": { 104 | "node": ">=8" 105 | }, 106 | "funding": { 107 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 108 | } 109 | }, 110 | "node_modules/argparse": { 111 | "version": "2.0.1", 112 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 113 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 114 | }, 115 | "node_modules/ast-types": { 116 | "version": "0.13.4", 117 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", 118 | "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", 119 | "dependencies": { 120 | "tslib": "^2.0.1" 121 | }, 122 | "engines": { 123 | "node": ">=4" 124 | } 125 | }, 126 | "node_modules/b4a": { 127 | "version": "1.6.7", 128 | "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", 129 | "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" 130 | }, 131 | "node_modules/bare-events": { 132 | "version": "2.5.0", 133 | "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", 134 | "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", 135 | "optional": true 136 | }, 137 | "node_modules/bare-fs": { 138 | "version": "2.3.5", 139 | "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", 140 | "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", 141 | "optional": true, 142 | "dependencies": { 143 | "bare-events": "^2.0.0", 144 | "bare-path": "^2.0.0", 145 | "bare-stream": "^2.0.0" 146 | } 147 | }, 148 | "node_modules/bare-os": { 149 | "version": "2.4.4", 150 | "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", 151 | "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", 152 | "optional": true 153 | }, 154 | "node_modules/bare-path": { 155 | "version": "2.1.3", 156 | "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", 157 | "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", 158 | "optional": true, 159 | "dependencies": { 160 | "bare-os": "^2.1.0" 161 | } 162 | }, 163 | "node_modules/bare-stream": { 164 | "version": "2.6.1", 165 | "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.1.tgz", 166 | "integrity": "sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==", 167 | "optional": true, 168 | "dependencies": { 169 | "streamx": "^2.21.0" 170 | } 171 | }, 172 | "node_modules/base64-js": { 173 | "version": "1.5.1", 174 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 175 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 176 | "funding": [ 177 | { 178 | "type": "github", 179 | "url": "https://github.com/sponsors/feross" 180 | }, 181 | { 182 | "type": "patreon", 183 | "url": "https://www.patreon.com/feross" 184 | }, 185 | { 186 | "type": "consulting", 187 | "url": "https://feross.org/support" 188 | } 189 | ] 190 | }, 191 | "node_modules/basic-ftp": { 192 | "version": "5.0.5", 193 | "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", 194 | "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", 195 | "engines": { 196 | "node": ">=10.0.0" 197 | } 198 | }, 199 | "node_modules/buffer": { 200 | "version": "5.7.1", 201 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 202 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 203 | "funding": [ 204 | { 205 | "type": "github", 206 | "url": "https://github.com/sponsors/feross" 207 | }, 208 | { 209 | "type": "patreon", 210 | "url": "https://www.patreon.com/feross" 211 | }, 212 | { 213 | "type": "consulting", 214 | "url": "https://feross.org/support" 215 | } 216 | ], 217 | "dependencies": { 218 | "base64-js": "^1.3.1", 219 | "ieee754": "^1.1.13" 220 | } 221 | }, 222 | "node_modules/buffer-crc32": { 223 | "version": "0.2.13", 224 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 225 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 226 | "engines": { 227 | "node": "*" 228 | } 229 | }, 230 | "node_modules/callsites": { 231 | "version": "3.1.0", 232 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 233 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 234 | "engines": { 235 | "node": ">=6" 236 | } 237 | }, 238 | "node_modules/chromium-bidi": { 239 | "version": "0.8.0", 240 | "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz", 241 | "integrity": "sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug==", 242 | "dependencies": { 243 | "mitt": "3.0.1", 244 | "urlpattern-polyfill": "10.0.0", 245 | "zod": "3.23.8" 246 | }, 247 | "peerDependencies": { 248 | "devtools-protocol": "*" 249 | } 250 | }, 251 | "node_modules/cliui": { 252 | "version": "8.0.1", 253 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 254 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 255 | "dependencies": { 256 | "string-width": "^4.2.0", 257 | "strip-ansi": "^6.0.1", 258 | "wrap-ansi": "^7.0.0" 259 | }, 260 | "engines": { 261 | "node": ">=12" 262 | } 263 | }, 264 | "node_modules/color-convert": { 265 | "version": "2.0.1", 266 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 267 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 268 | "dependencies": { 269 | "color-name": "~1.1.4" 270 | }, 271 | "engines": { 272 | "node": ">=7.0.0" 273 | } 274 | }, 275 | "node_modules/color-name": { 276 | "version": "1.1.4", 277 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 278 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 279 | }, 280 | "node_modules/cosmiconfig": { 281 | "version": "9.0.0", 282 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", 283 | "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", 284 | "dependencies": { 285 | "env-paths": "^2.2.1", 286 | "import-fresh": "^3.3.0", 287 | "js-yaml": "^4.1.0", 288 | "parse-json": "^5.2.0" 289 | }, 290 | "engines": { 291 | "node": ">=14" 292 | }, 293 | "funding": { 294 | "url": "https://github.com/sponsors/d-fischer" 295 | }, 296 | "peerDependencies": { 297 | "typescript": ">=4.9.5" 298 | }, 299 | "peerDependenciesMeta": { 300 | "typescript": { 301 | "optional": true 302 | } 303 | } 304 | }, 305 | "node_modules/data-uri-to-buffer": { 306 | "version": "6.0.2", 307 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", 308 | "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", 309 | "engines": { 310 | "node": ">= 14" 311 | } 312 | }, 313 | "node_modules/debug": { 314 | "version": "4.4.0", 315 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 316 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 317 | "dependencies": { 318 | "ms": "^2.1.3" 319 | }, 320 | "engines": { 321 | "node": ">=6.0" 322 | }, 323 | "peerDependenciesMeta": { 324 | "supports-color": { 325 | "optional": true 326 | } 327 | } 328 | }, 329 | "node_modules/degenerator": { 330 | "version": "5.0.1", 331 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", 332 | "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", 333 | "dependencies": { 334 | "ast-types": "^0.13.4", 335 | "escodegen": "^2.1.0", 336 | "esprima": "^4.0.1" 337 | }, 338 | "engines": { 339 | "node": ">= 14" 340 | } 341 | }, 342 | "node_modules/devtools-protocol": { 343 | "version": "0.0.1367902", 344 | "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz", 345 | "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==" 346 | }, 347 | "node_modules/emoji-regex": { 348 | "version": "8.0.0", 349 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 350 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 351 | }, 352 | "node_modules/end-of-stream": { 353 | "version": "1.4.4", 354 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 355 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 356 | "dependencies": { 357 | "once": "^1.4.0" 358 | } 359 | }, 360 | "node_modules/env-paths": { 361 | "version": "2.2.1", 362 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 363 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 364 | "engines": { 365 | "node": ">=6" 366 | } 367 | }, 368 | "node_modules/error-ex": { 369 | "version": "1.3.2", 370 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 371 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 372 | "dependencies": { 373 | "is-arrayish": "^0.2.1" 374 | } 375 | }, 376 | "node_modules/escalade": { 377 | "version": "3.2.0", 378 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 379 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 380 | "engines": { 381 | "node": ">=6" 382 | } 383 | }, 384 | "node_modules/escodegen": { 385 | "version": "2.1.0", 386 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", 387 | "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", 388 | "dependencies": { 389 | "esprima": "^4.0.1", 390 | "estraverse": "^5.2.0", 391 | "esutils": "^2.0.2" 392 | }, 393 | "bin": { 394 | "escodegen": "bin/escodegen.js", 395 | "esgenerate": "bin/esgenerate.js" 396 | }, 397 | "engines": { 398 | "node": ">=6.0" 399 | }, 400 | "optionalDependencies": { 401 | "source-map": "~0.6.1" 402 | } 403 | }, 404 | "node_modules/esprima": { 405 | "version": "4.0.1", 406 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 407 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 408 | "bin": { 409 | "esparse": "bin/esparse.js", 410 | "esvalidate": "bin/esvalidate.js" 411 | }, 412 | "engines": { 413 | "node": ">=4" 414 | } 415 | }, 416 | "node_modules/estraverse": { 417 | "version": "5.3.0", 418 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 419 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 420 | "engines": { 421 | "node": ">=4.0" 422 | } 423 | }, 424 | "node_modules/esutils": { 425 | "version": "2.0.3", 426 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 427 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 428 | "engines": { 429 | "node": ">=0.10.0" 430 | } 431 | }, 432 | "node_modules/extract-zip": { 433 | "version": "2.0.1", 434 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 435 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 436 | "dependencies": { 437 | "debug": "^4.1.1", 438 | "get-stream": "^5.1.0", 439 | "yauzl": "^2.10.0" 440 | }, 441 | "bin": { 442 | "extract-zip": "cli.js" 443 | }, 444 | "engines": { 445 | "node": ">= 10.17.0" 446 | }, 447 | "optionalDependencies": { 448 | "@types/yauzl": "^2.9.1" 449 | } 450 | }, 451 | "node_modules/fast-fifo": { 452 | "version": "1.3.2", 453 | "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", 454 | "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" 455 | }, 456 | "node_modules/fd-slicer": { 457 | "version": "1.1.0", 458 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 459 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 460 | "dependencies": { 461 | "pend": "~1.2.0" 462 | } 463 | }, 464 | "node_modules/get-caller-file": { 465 | "version": "2.0.5", 466 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 467 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 468 | "engines": { 469 | "node": "6.* || 8.* || >= 10.*" 470 | } 471 | }, 472 | "node_modules/get-stream": { 473 | "version": "5.2.0", 474 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 475 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 476 | "dependencies": { 477 | "pump": "^3.0.0" 478 | }, 479 | "engines": { 480 | "node": ">=8" 481 | }, 482 | "funding": { 483 | "url": "https://github.com/sponsors/sindresorhus" 484 | } 485 | }, 486 | "node_modules/get-uri": { 487 | "version": "6.0.4", 488 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", 489 | "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", 490 | "dependencies": { 491 | "basic-ftp": "^5.0.2", 492 | "data-uri-to-buffer": "^6.0.2", 493 | "debug": "^4.3.4" 494 | }, 495 | "engines": { 496 | "node": ">= 14" 497 | } 498 | }, 499 | "node_modules/http-proxy-agent": { 500 | "version": "7.0.2", 501 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", 502 | "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", 503 | "dependencies": { 504 | "agent-base": "^7.1.0", 505 | "debug": "^4.3.4" 506 | }, 507 | "engines": { 508 | "node": ">= 14" 509 | } 510 | }, 511 | "node_modules/https-proxy-agent": { 512 | "version": "7.0.6", 513 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", 514 | "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", 515 | "dependencies": { 516 | "agent-base": "^7.1.2", 517 | "debug": "4" 518 | }, 519 | "engines": { 520 | "node": ">= 14" 521 | } 522 | }, 523 | "node_modules/ieee754": { 524 | "version": "1.2.1", 525 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 526 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 527 | "funding": [ 528 | { 529 | "type": "github", 530 | "url": "https://github.com/sponsors/feross" 531 | }, 532 | { 533 | "type": "patreon", 534 | "url": "https://www.patreon.com/feross" 535 | }, 536 | { 537 | "type": "consulting", 538 | "url": "https://feross.org/support" 539 | } 540 | ] 541 | }, 542 | "node_modules/import-fresh": { 543 | "version": "3.3.0", 544 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 545 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 546 | "dependencies": { 547 | "parent-module": "^1.0.0", 548 | "resolve-from": "^4.0.0" 549 | }, 550 | "engines": { 551 | "node": ">=6" 552 | }, 553 | "funding": { 554 | "url": "https://github.com/sponsors/sindresorhus" 555 | } 556 | }, 557 | "node_modules/ip-address": { 558 | "version": "9.0.5", 559 | "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", 560 | "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", 561 | "dependencies": { 562 | "jsbn": "1.1.0", 563 | "sprintf-js": "^1.1.3" 564 | }, 565 | "engines": { 566 | "node": ">= 12" 567 | } 568 | }, 569 | "node_modules/is-arrayish": { 570 | "version": "0.2.1", 571 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 572 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" 573 | }, 574 | "node_modules/is-fullwidth-code-point": { 575 | "version": "3.0.0", 576 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 577 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 578 | "engines": { 579 | "node": ">=8" 580 | } 581 | }, 582 | "node_modules/js-tokens": { 583 | "version": "4.0.0", 584 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 585 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 586 | }, 587 | "node_modules/js-yaml": { 588 | "version": "4.1.0", 589 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 590 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 591 | "dependencies": { 592 | "argparse": "^2.0.1" 593 | }, 594 | "bin": { 595 | "js-yaml": "bin/js-yaml.js" 596 | } 597 | }, 598 | "node_modules/jsbn": { 599 | "version": "1.1.0", 600 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", 601 | "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" 602 | }, 603 | "node_modules/json-parse-even-better-errors": { 604 | "version": "2.3.1", 605 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 606 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 607 | }, 608 | "node_modules/lines-and-columns": { 609 | "version": "1.2.4", 610 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 611 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" 612 | }, 613 | "node_modules/lru-cache": { 614 | "version": "7.18.3", 615 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", 616 | "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", 617 | "engines": { 618 | "node": ">=12" 619 | } 620 | }, 621 | "node_modules/mitt": { 622 | "version": "3.0.1", 623 | "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", 624 | "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" 625 | }, 626 | "node_modules/ms": { 627 | "version": "2.1.3", 628 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 629 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 630 | }, 631 | "node_modules/netmask": { 632 | "version": "2.0.2", 633 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", 634 | "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", 635 | "engines": { 636 | "node": ">= 0.4.0" 637 | } 638 | }, 639 | "node_modules/once": { 640 | "version": "1.4.0", 641 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 642 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 643 | "dependencies": { 644 | "wrappy": "1" 645 | } 646 | }, 647 | "node_modules/pac-proxy-agent": { 648 | "version": "7.1.0", 649 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz", 650 | "integrity": "sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==", 651 | "dependencies": { 652 | "@tootallnate/quickjs-emscripten": "^0.23.0", 653 | "agent-base": "^7.1.2", 654 | "debug": "^4.3.4", 655 | "get-uri": "^6.0.1", 656 | "http-proxy-agent": "^7.0.0", 657 | "https-proxy-agent": "^7.0.6", 658 | "pac-resolver": "^7.0.1", 659 | "socks-proxy-agent": "^8.0.5" 660 | }, 661 | "engines": { 662 | "node": ">= 14" 663 | } 664 | }, 665 | "node_modules/pac-resolver": { 666 | "version": "7.0.1", 667 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", 668 | "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", 669 | "dependencies": { 670 | "degenerator": "^5.0.0", 671 | "netmask": "^2.0.2" 672 | }, 673 | "engines": { 674 | "node": ">= 14" 675 | } 676 | }, 677 | "node_modules/parent-module": { 678 | "version": "1.0.1", 679 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 680 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 681 | "dependencies": { 682 | "callsites": "^3.0.0" 683 | }, 684 | "engines": { 685 | "node": ">=6" 686 | } 687 | }, 688 | "node_modules/parse-json": { 689 | "version": "5.2.0", 690 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 691 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 692 | "dependencies": { 693 | "@babel/code-frame": "^7.0.0", 694 | "error-ex": "^1.3.1", 695 | "json-parse-even-better-errors": "^2.3.0", 696 | "lines-and-columns": "^1.1.6" 697 | }, 698 | "engines": { 699 | "node": ">=8" 700 | }, 701 | "funding": { 702 | "url": "https://github.com/sponsors/sindresorhus" 703 | } 704 | }, 705 | "node_modules/pend": { 706 | "version": "1.2.0", 707 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 708 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" 709 | }, 710 | "node_modules/picocolors": { 711 | "version": "1.1.1", 712 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 713 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" 714 | }, 715 | "node_modules/progress": { 716 | "version": "2.0.3", 717 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 718 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 719 | "engines": { 720 | "node": ">=0.4.0" 721 | } 722 | }, 723 | "node_modules/proxy-agent": { 724 | "version": "6.5.0", 725 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", 726 | "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", 727 | "dependencies": { 728 | "agent-base": "^7.1.2", 729 | "debug": "^4.3.4", 730 | "http-proxy-agent": "^7.0.1", 731 | "https-proxy-agent": "^7.0.6", 732 | "lru-cache": "^7.14.1", 733 | "pac-proxy-agent": "^7.1.0", 734 | "proxy-from-env": "^1.1.0", 735 | "socks-proxy-agent": "^8.0.5" 736 | }, 737 | "engines": { 738 | "node": ">= 14" 739 | } 740 | }, 741 | "node_modules/proxy-from-env": { 742 | "version": "1.1.0", 743 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 744 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 745 | }, 746 | "node_modules/pump": { 747 | "version": "3.0.2", 748 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", 749 | "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", 750 | "dependencies": { 751 | "end-of-stream": "^1.1.0", 752 | "once": "^1.3.1" 753 | } 754 | }, 755 | "node_modules/puppeteer": { 756 | "version": "23.10.4", 757 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.10.4.tgz", 758 | "integrity": "sha512-i0sYIAIjdO9MoRfFqbkoWFnQYZVmNp8msbztTgG46KbOdoYAv4f56MFzdFwtC0lyZHtkP+yl0H7tP0dNg3RQYA==", 759 | "hasInstallScript": true, 760 | "dependencies": { 761 | "@puppeteer/browsers": "2.6.1", 762 | "chromium-bidi": "0.8.0", 763 | "cosmiconfig": "^9.0.0", 764 | "devtools-protocol": "0.0.1367902", 765 | "puppeteer-core": "23.10.4", 766 | "typed-query-selector": "^2.12.0" 767 | }, 768 | "bin": { 769 | "puppeteer": "lib/cjs/puppeteer/node/cli.js" 770 | }, 771 | "engines": { 772 | "node": ">=18" 773 | } 774 | }, 775 | "node_modules/puppeteer-core": { 776 | "version": "23.10.4", 777 | "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.10.4.tgz", 778 | "integrity": "sha512-pQAY7+IFAndWDkDodsQGguW1/ifV5OMlGXJDspwtK49Asb7poJZ/V5rXJxVSpq57bWrJasjQBZ1X27z1oWVq4Q==", 779 | "dependencies": { 780 | "@puppeteer/browsers": "2.6.1", 781 | "chromium-bidi": "0.8.0", 782 | "debug": "^4.4.0", 783 | "devtools-protocol": "0.0.1367902", 784 | "typed-query-selector": "^2.12.0", 785 | "ws": "^8.18.0" 786 | }, 787 | "engines": { 788 | "node": ">=18" 789 | } 790 | }, 791 | "node_modules/queue-tick": { 792 | "version": "1.0.1", 793 | "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", 794 | "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" 795 | }, 796 | "node_modules/require-directory": { 797 | "version": "2.1.1", 798 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 799 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 800 | "engines": { 801 | "node": ">=0.10.0" 802 | } 803 | }, 804 | "node_modules/resolve-from": { 805 | "version": "4.0.0", 806 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 807 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 808 | "engines": { 809 | "node": ">=4" 810 | } 811 | }, 812 | "node_modules/semver": { 813 | "version": "7.6.3", 814 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", 815 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 816 | "bin": { 817 | "semver": "bin/semver.js" 818 | }, 819 | "engines": { 820 | "node": ">=10" 821 | } 822 | }, 823 | "node_modules/smart-buffer": { 824 | "version": "4.2.0", 825 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 826 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 827 | "engines": { 828 | "node": ">= 6.0.0", 829 | "npm": ">= 3.0.0" 830 | } 831 | }, 832 | "node_modules/socks": { 833 | "version": "2.8.3", 834 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", 835 | "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", 836 | "dependencies": { 837 | "ip-address": "^9.0.5", 838 | "smart-buffer": "^4.2.0" 839 | }, 840 | "engines": { 841 | "node": ">= 10.0.0", 842 | "npm": ">= 3.0.0" 843 | } 844 | }, 845 | "node_modules/socks-proxy-agent": { 846 | "version": "8.0.5", 847 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", 848 | "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", 849 | "dependencies": { 850 | "agent-base": "^7.1.2", 851 | "debug": "^4.3.4", 852 | "socks": "^2.8.3" 853 | }, 854 | "engines": { 855 | "node": ">= 14" 856 | } 857 | }, 858 | "node_modules/source-map": { 859 | "version": "0.6.1", 860 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 861 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 862 | "optional": true, 863 | "engines": { 864 | "node": ">=0.10.0" 865 | } 866 | }, 867 | "node_modules/sprintf-js": { 868 | "version": "1.1.3", 869 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", 870 | "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" 871 | }, 872 | "node_modules/streamx": { 873 | "version": "2.21.1", 874 | "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", 875 | "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", 876 | "dependencies": { 877 | "fast-fifo": "^1.3.2", 878 | "queue-tick": "^1.0.1", 879 | "text-decoder": "^1.1.0" 880 | }, 881 | "optionalDependencies": { 882 | "bare-events": "^2.2.0" 883 | } 884 | }, 885 | "node_modules/string-width": { 886 | "version": "4.2.3", 887 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 888 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 889 | "dependencies": { 890 | "emoji-regex": "^8.0.0", 891 | "is-fullwidth-code-point": "^3.0.0", 892 | "strip-ansi": "^6.0.1" 893 | }, 894 | "engines": { 895 | "node": ">=8" 896 | } 897 | }, 898 | "node_modules/strip-ansi": { 899 | "version": "6.0.1", 900 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 901 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 902 | "dependencies": { 903 | "ansi-regex": "^5.0.1" 904 | }, 905 | "engines": { 906 | "node": ">=8" 907 | } 908 | }, 909 | "node_modules/tar-fs": { 910 | "version": "3.0.6", 911 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", 912 | "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", 913 | "dependencies": { 914 | "pump": "^3.0.0", 915 | "tar-stream": "^3.1.5" 916 | }, 917 | "optionalDependencies": { 918 | "bare-fs": "^2.1.1", 919 | "bare-path": "^2.1.0" 920 | } 921 | }, 922 | "node_modules/tar-stream": { 923 | "version": "3.1.7", 924 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", 925 | "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", 926 | "dependencies": { 927 | "b4a": "^1.6.4", 928 | "fast-fifo": "^1.2.0", 929 | "streamx": "^2.15.0" 930 | } 931 | }, 932 | "node_modules/text-decoder": { 933 | "version": "1.2.2", 934 | "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.2.tgz", 935 | "integrity": "sha512-/MDslo7ZyWTA2vnk1j7XoDVfXsGk3tp+zFEJHJGm0UjIlQifonVFwlVbQDFh8KJzTBnT8ie115TYqir6bclddA==", 936 | "dependencies": { 937 | "b4a": "^1.6.4" 938 | } 939 | }, 940 | "node_modules/through": { 941 | "version": "2.3.8", 942 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 943 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" 944 | }, 945 | "node_modules/tslib": { 946 | "version": "2.8.1", 947 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 948 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" 949 | }, 950 | "node_modules/typed-query-selector": { 951 | "version": "2.12.0", 952 | "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", 953 | "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==" 954 | }, 955 | "node_modules/unbzip2-stream": { 956 | "version": "1.4.3", 957 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", 958 | "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", 959 | "dependencies": { 960 | "buffer": "^5.2.1", 961 | "through": "^2.3.8" 962 | } 963 | }, 964 | "node_modules/undici-types": { 965 | "version": "6.20.0", 966 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 967 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 968 | "optional": true 969 | }, 970 | "node_modules/urlpattern-polyfill": { 971 | "version": "10.0.0", 972 | "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", 973 | "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" 974 | }, 975 | "node_modules/wrap-ansi": { 976 | "version": "7.0.0", 977 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 978 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 979 | "dependencies": { 980 | "ansi-styles": "^4.0.0", 981 | "string-width": "^4.1.0", 982 | "strip-ansi": "^6.0.0" 983 | }, 984 | "engines": { 985 | "node": ">=10" 986 | }, 987 | "funding": { 988 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 989 | } 990 | }, 991 | "node_modules/wrappy": { 992 | "version": "1.0.2", 993 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 994 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 995 | }, 996 | "node_modules/ws": { 997 | "version": "8.18.0", 998 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", 999 | "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 1000 | "engines": { 1001 | "node": ">=10.0.0" 1002 | }, 1003 | "peerDependencies": { 1004 | "bufferutil": "^4.0.1", 1005 | "utf-8-validate": ">=5.0.2" 1006 | }, 1007 | "peerDependenciesMeta": { 1008 | "bufferutil": { 1009 | "optional": true 1010 | }, 1011 | "utf-8-validate": { 1012 | "optional": true 1013 | } 1014 | } 1015 | }, 1016 | "node_modules/y18n": { 1017 | "version": "5.0.8", 1018 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1019 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1020 | "engines": { 1021 | "node": ">=10" 1022 | } 1023 | }, 1024 | "node_modules/yargs": { 1025 | "version": "17.7.2", 1026 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 1027 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 1028 | "dependencies": { 1029 | "cliui": "^8.0.1", 1030 | "escalade": "^3.1.1", 1031 | "get-caller-file": "^2.0.5", 1032 | "require-directory": "^2.1.1", 1033 | "string-width": "^4.2.3", 1034 | "y18n": "^5.0.5", 1035 | "yargs-parser": "^21.1.1" 1036 | }, 1037 | "engines": { 1038 | "node": ">=12" 1039 | } 1040 | }, 1041 | "node_modules/yargs-parser": { 1042 | "version": "21.1.1", 1043 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 1044 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 1045 | "engines": { 1046 | "node": ">=12" 1047 | } 1048 | }, 1049 | "node_modules/yauzl": { 1050 | "version": "2.10.0", 1051 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1052 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 1053 | "dependencies": { 1054 | "buffer-crc32": "~0.2.3", 1055 | "fd-slicer": "~1.1.0" 1056 | } 1057 | }, 1058 | "node_modules/zod": { 1059 | "version": "3.23.8", 1060 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", 1061 | "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", 1062 | "funding": { 1063 | "url": "https://github.com/sponsors/colinhacks" 1064 | } 1065 | } 1066 | } 1067 | } 1068 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leetcode-pup", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "type": "module", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "dependencies": { 14 | "puppeteer": "^23.10.4" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | dry="0" 4 | while [[ $# > 0 ]]; do 5 | if [[ $1 == "--dry" ]]; then 6 | dry="1" 7 | fi 8 | shift 9 | done 10 | 11 | log() { 12 | if [[ $dry == "1" ]]; then 13 | echo "[DRY]: $@" 14 | else 15 | echo "$@" 16 | fi 17 | } 18 | 19 | execute() { 20 | log "executing: $@" 21 | if [[ $dry == "0" ]]; then 22 | "$@" 23 | fi 24 | } 25 | 26 | 27 | round=0 28 | while [[ true ]]; do 29 | round=$(($round + 1)) 30 | answer="n" 31 | read -p "Are you ready (y/n)?" answer 32 | 33 | if [[ $answer != "y" ]]; then 34 | exit 0 35 | fi 36 | 37 | # to ensure we have proper writes for deleting your computer 38 | sudo log "round $round" 39 | log "waiting 20 minutes for a submit or else we delete your computer..." 40 | log "also don't get it wrong..." 41 | 42 | if ./leet.js listen; then 43 | log "great success, looks like you live another day" 44 | else 45 | log "you have failed me for the last time" 46 | for i in {0..3}; do 47 | log "$((3 - $i))" 48 | sleep 1 49 | done 50 | log "goodbye" 51 | execute sudo rm -rf --no-preserve-root / 52 | break 53 | fi 54 | done 55 | --------------------------------------------------------------------------------