diff --git a/package.json b/package.json index 6e143f21b7c07..9f255466e138d 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "vue-observe-visibility": "^2.0.0-alpha.1", "vue-router": "^5.1.0", "vuex": "^4.1.0", - "youtubei.js": "^17.0.1" + "youtubei.js": "^17.2.0" }, "devDependencies": { "@babel/core": "^8.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 055cbe4bd66a7..0c6906102c210 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,8 +75,8 @@ importers: specifier: ^4.1.0 version: 4.1.0(vue@3.5.39(typescript@6.0.3)) youtubei.js: - specifier: ^17.0.1 - version: 17.0.1 + specifier: ^17.2.0 + version: 17.2.0 devDependencies: '@babel/core': specifier: ^8.0.1 @@ -113,7 +113,7 @@ importers: version: 42.4.1 electron-builder: specifier: ^26.15.3 - version: 26.15.3(electron-builder-squirrel-windows@26.8.1) + version: 26.15.3(electron-builder-squirrel-windows@26.15.3) eslint: specifier: ^10.6.0 version: 10.6.0(jiti@2.7.0) @@ -210,9 +210,6 @@ importers: packages: - 7zip-bin@5.2.0: - resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} @@ -771,10 +768,6 @@ packages: peerDependencies: postcss-selector-parser: ^7.1.1 - '@develar/schema-utils@2.6.5': - resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} - engines: {node: '>= 8.9.0'} - '@discoveryjs/json-ext@1.1.0': resolution: {integrity: sha512-Xc3VhU02wqZ1HvHRJUwL09HkZSTvidqY5Ya0NXBSYOxAp+Ln9dcJr9fySI+CkONzP3PekQo9WdzCv0PGER/mOA==} engines: {node: '>=14.17.0'} @@ -820,11 +813,6 @@ packages: engines: {node: '>=22.12.0'} hasBin: true - '@electron/rebuild@4.0.6': - resolution: {integrity: sha512-323ygp5Lz4DP2nVu54NLCx4n0TKsQ3OMDG3PPeOFjOTMDtSxGbCi7mQfWBc5C80pp+9awEsiHx9HR9DfAM/IEQ==} - engines: {node: '>=22.12.0'} - hasBin: true - '@electron/universal@2.0.3': resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} engines: {node: '>=16.4'} @@ -1230,36 +1218,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.6': resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.6': resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} @@ -1547,51 +1541,61 @@ packages: resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.12.2': resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} cpu: [loong64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-loong64-musl@1.12.2': resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} cpu: [loong64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.12.2': resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.12.2': resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-openharmony-arm64@1.12.2': resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} @@ -1764,11 +1768,6 @@ packages: ajv: optional: true - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - ajv-keywords@5.1.0: resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: @@ -1805,9 +1804,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - app-builder-lib@26.15.3: resolution: {integrity: sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==} engines: {node: '>=14.0.0'} @@ -1815,13 +1811,6 @@ packages: dmg-builder: 26.15.3 electron-builder-squirrel-windows: 26.15.3 - app-builder-lib@26.8.1: - resolution: {integrity: sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==} - engines: {node: '>=14.0.0'} - peerDependencies: - dmg-builder: 26.8.1 - electron-builder-squirrel-windows: 26.8.1 - are-docs-informative@0.0.2: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} @@ -1962,10 +1951,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builder-util-runtime@9.5.1: - resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} - engines: {node: '>=12.0.0'} - builder-util-runtime@9.7.0: resolution: {integrity: sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==} engines: {node: '>=12.0.0'} @@ -1974,9 +1959,6 @@ packages: resolution: {integrity: sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==} engines: {node: '>=14.0.0'} - builder-util@26.8.1: - resolution: {integrity: sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==} - builtin-modules@5.3.0: resolution: {integrity: sha512-hMQUl2bUFG339QygPM97E+mc8OY1IAchORZxm4a/frcYwKzozMzRVDBwHW0NjOqGElLm2O37AVQE8ikxlZHrMQ==} engines: {node: '>=18.20'} @@ -2447,8 +2429,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-builder-squirrel-windows@26.8.1: - resolution: {integrity: sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA==} + electron-builder-squirrel-windows@26.15.3: + resolution: {integrity: sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==} electron-builder@26.15.3: resolution: {integrity: sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==} @@ -2470,9 +2452,6 @@ packages: electron-publish@26.15.3: resolution: {integrity: sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==} - electron-publish@26.8.1: - resolution: {integrity: sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==} - electron-to-chromium@1.5.382: resolution: {integrity: sha512-8ETaWbV6SZOrno+G93Ffd9ENsMtetqdnqj4nlfxFW90Sm5GgnuV28Kf62hqQVD6VUgzm7qFQKsTsAPmeUiU3Ug==} @@ -2825,6 +2804,9 @@ packages: picomatch: optional: true + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} + file-entry-cache@11.1.5: resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==} @@ -2906,10 +2888,6 @@ packages: resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} engines: {node: '>=14.14'} - fs-extra@11.3.6: - resolution: {integrity: sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==} - engines: {node: '>=14.14'} - fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -3811,10 +3789,6 @@ packages: resolution: {integrity: sha512-Erq5w/t3syw3s4sDsUaX4QttIdBPsGKTT1DTRsCkTonGggczhlDKm/wDX3o+HPJpQ41EjXCbcmXf0tgr5YZJXw==} engines: {node: '>=22.12.0'} - node-abi@4.32.0: - resolution: {integrity: sha512-2cvOMwK7aQ8eQhHTG9DBK/akKfNaJDwtbxgUaA1u3BHGpd6cbUvWCbA0u3aKan+s7Nl60tMGx4tn11+VS1fiUA==} - engines: {node: '>=22.12.0'} - node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -4559,7 +4533,6 @@ packages: shaka-player@5.1.12: resolution: {integrity: sha512-luGIzJ/H201aY0Hobs5853vY1eRJXPHH+u3oSWiTAYoufq5s/yIbRZS1QwCsj3f3Fyxc2C3HfptfI0brjE+RIQ==} - engines: {node: '>=18'} shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} @@ -4817,10 +4790,6 @@ packages: resolution: {integrity: sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==} engines: {node: '>=18'} - tar@7.5.19: - resolution: {integrity: sha512-4LeEWl96twnS2Q7Bz4MGqgazLqO+hJN63GZxXoIqh1T3VweYD997gbU1ItNsQafqqXTXd5WFyFdReLtwvRBNiw==} - engines: {node: '>=18'} - temp-file@3.4.0: resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} @@ -5270,13 +5239,11 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - youtubei.js@17.0.1: - resolution: {integrity: sha512-1lO4b8UqMDzE0oh2qEGzbBOd4UYRdxn/4PdpRM7BGTHxM6ddsEsKZTu90jp8V9FHVgC2h1UirQyqoqLiKwl+Zg==} + youtubei.js@17.2.0: + resolution: {integrity: sha512-XLNsgRKO1h7t4i9tIMWSQSeWdD7Ujkk5v1m5YCaumaHMhu/xuLqtO3M0Hq7CXNup9HlJ1NGrT1Y+HLIHnL6Ujg==} snapshots: - 7zip-bin@5.2.0: {} - '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -5910,11 +5877,6 @@ snapshots: dependencies: postcss-selector-parser: 7.1.4 - '@develar/schema-utils@2.6.5': - dependencies: - ajv: 6.15.0 - ajv-keywords: 3.5.2(ajv@6.15.0) - '@discoveryjs/json-ext@1.1.0': {} '@double-great/stylelint-a11y@3.5.0(stylelint@17.14.0(typescript@6.0.3))': @@ -5993,17 +5955,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/rebuild@4.0.6': - dependencies: - '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3 - node-abi: 4.32.0 - node-api-version: 0.2.1 - node-gyp: 12.4.0 - read-binary-file-arch: 1.0.6 - transitivePeerDependencies: - - supports-color - '@electron/universal@2.0.3': dependencies: '@electron/asar': 3.4.1 @@ -6020,7 +5971,7 @@ snapshots: dependencies: cross-dirname: 0.1.0 debug: 4.4.3 - fs-extra: 11.3.6 + fs-extra: 11.3.5 minimist: 1.2.8 postject: 1.0.0-alpha.6 transitivePeerDependencies: @@ -7066,10 +7017,6 @@ snapshots: optionalDependencies: ajv: 8.20.0 - ajv-keywords@3.5.2(ajv@6.15.0): - dependencies: - ajv: 6.15.0 - ajv-keywords@5.1.0(ajv@8.20.0): dependencies: ajv: 8.20.0 @@ -7106,9 +7053,7 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 - app-builder-bin@5.0.0-alpha.12: {} - - app-builder-lib@26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.8.1): + app-builder-lib@26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3): dependencies: '@electron/asar': 3.4.1 '@electron/fuses': 1.8.0 @@ -7129,11 +7074,11 @@ snapshots: chromium-pickle-js: 0.2.0 ci-info: 4.3.1 debug: 4.4.3 - dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.8.1) + dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.15.3) dotenv: 16.6.1 dotenv-expand: 11.0.7 ejs: 3.1.10 - electron-builder-squirrel-windows: 26.8.1(dmg-builder@26.15.3) + electron-builder-squirrel-windows: 26.15.3(dmg-builder@26.15.3) electron-publish: 26.15.3 fs-extra: 10.1.0 hosted-git-info: 4.1.0 @@ -7156,49 +7101,6 @@ snapshots: transitivePeerDependencies: - supports-color - app-builder-lib@26.8.1(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.8.1): - dependencies: - '@develar/schema-utils': 2.6.5 - '@electron/asar': 3.4.1 - '@electron/fuses': 1.8.0 - '@electron/get': 3.1.0 - '@electron/notarize': 2.5.0 - '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.0.6 - '@electron/universal': 2.0.3 - '@malept/flatpak-bundler': 0.4.0 - '@types/fs-extra': 9.0.13 - async-exit-hook: 2.0.1 - builder-util: 26.8.1 - builder-util-runtime: 9.5.1 - chromium-pickle-js: 0.2.0 - ci-info: 4.3.1 - debug: 4.4.3 - dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.8.1) - dotenv: 16.6.1 - dotenv-expand: 11.0.7 - ejs: 3.1.10 - electron-builder-squirrel-windows: 26.8.1(dmg-builder@26.15.3) - electron-publish: 26.8.1 - fs-extra: 10.1.0 - hosted-git-info: 4.1.0 - isbinaryfile: 5.0.7 - jiti: 2.7.0 - js-yaml: 4.3.0 - json5: 2.2.3 - lazy-val: 1.0.5 - minimatch: 10.2.5 - plist: 3.1.0 - proper-lockfile: 4.1.2 - resedit: 1.7.2 - semver: 7.7.4 - tar: 7.5.19 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - are-docs-informative@0.0.2: {} argparse@2.0.1: {} @@ -7331,13 +7233,6 @@ snapshots: buffer-from@1.1.2: {} - builder-util-runtime@9.5.1: - dependencies: - debug: 4.4.3 - sax: 1.6.0 - transitivePeerDependencies: - - supports-color - builder-util-runtime@9.7.0: dependencies: debug: 4.4.3 @@ -7364,27 +7259,6 @@ snapshots: transitivePeerDependencies: - supports-color - builder-util@26.8.1: - dependencies: - 7zip-bin: 5.2.0 - '@types/debug': 4.1.13 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - fs-extra: 10.1.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - js-yaml: 4.3.0 - sanitize-filename: 1.6.4 - source-map-support: 0.5.21 - stat-mode: 1.0.0 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - transitivePeerDependencies: - - supports-color - builtin-modules@5.3.0: {} bundle-name@4.1.0: @@ -7782,9 +7656,9 @@ snapshots: minimatch: 3.1.5 p-limit: 3.1.0 - dmg-builder@26.15.3(electron-builder-squirrel-windows@26.8.1): + dmg-builder@26.15.3(electron-builder-squirrel-windows@26.15.3): dependencies: - app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.8.1) + app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) builder-util: 26.15.3 fs-extra: 10.1.0 js-yaml: 4.3.0 @@ -7867,23 +7741,23 @@ snapshots: dependencies: jake: 10.9.4 - electron-builder-squirrel-windows@26.8.1(dmg-builder@26.15.3): + electron-builder-squirrel-windows@26.15.3(dmg-builder@26.15.3): dependencies: - app-builder-lib: 26.8.1(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.8.1) - builder-util: 26.8.1 + app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) + builder-util: 26.15.3 electron-winstaller: 5.4.0 transitivePeerDependencies: - dmg-builder - supports-color - electron-builder@26.15.3(electron-builder-squirrel-windows@26.8.1): + electron-builder@26.15.3(electron-builder-squirrel-windows@26.15.3): dependencies: - app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.8.1) + app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) builder-util: 26.15.3 builder-util-runtime: 9.7.0 chalk: 4.1.2 ci-info: 4.4.0 - dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.8.1) + dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.15.3) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 @@ -7920,19 +7794,6 @@ snapshots: transitivePeerDependencies: - supports-color - electron-publish@26.8.1: - dependencies: - '@types/fs-extra': 9.0.13 - builder-util: 26.8.1 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - form-data: 4.0.6 - fs-extra: 10.1.0 - lazy-val: 1.0.5 - mime: 2.6.0 - transitivePeerDependencies: - - supports-color - electron-to-chromium@1.5.382: {} electron-winstaller@5.4.0: @@ -8345,6 +8206,8 @@ snapshots: optionalDependencies: picomatch: 4.0.4 + fflate@0.8.3: {} + file-entry-cache@11.1.5: dependencies: flat-cache: 6.1.23 @@ -8435,13 +8298,6 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 - fs-extra@11.3.6: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 - optional: true - fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -9246,10 +9102,6 @@ snapshots: dependencies: semver: 7.7.4 - node-abi@4.32.0: - dependencies: - semver: 7.7.4 - node-addon-api@7.1.1: optional: true @@ -10286,14 +10138,6 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 - tar@7.5.19: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.3 - minizlib: 3.1.0 - yallist: 5.0.0 - temp-file@3.4.0: dependencies: async-exit-hook: 2.0.1 @@ -10808,7 +10652,8 @@ snapshots: yocto-queue@0.1.0: {} - youtubei.js@17.0.1: + youtubei.js@17.2.0: dependencies: '@bufbuild/protobuf': 2.1.0 + fflate: 0.8.3 meriyah: 6.1.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8a3d7c2824a9c..543675b4d9b40 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -11,3 +11,6 @@ allowBuilds: overrides: uuid@<11.1.1: '>=11.1.1' + +minimumReleaseAgeExclude: +- "youtubei.js" diff --git a/src/renderer/helpers/api/local.js b/src/renderer/helpers/api/local.js index e93c2f81cec30..71d09616d6c17 100644 --- a/src/renderer/helpers/api/local.js +++ b/src/renderer/helpers/api/local.js @@ -140,22 +140,22 @@ export async function getLocalPlaylist(id) { */ /** - * @param {import('youtubei.js').YTNodes.ContinuationItem} continuationItem + * @param {import('youtubei.js').YTNodes.ContinuationItem | import('youtubei.js').YTNodes.ContinuationItemView} continuationItemOrView * @param {import('youtubei.js').Actions} actions */ -function serializeContinuationItem(continuationItem, actions) { +function serializeContinuation(continuationItemOrView, actions) { let path, payload // Based on YouTube.js' NavigationEndpoint#call() - if (continuationItem.endpoint.command.is(YTNodes.CommandExecutorCommand)) { + if (continuationItemOrView.endpoint.command.is(YTNodes.CommandExecutorCommand)) { /** @type {import('youtubei.js').Helpers.YTNode & import('youtubei.js').APIResponseTypes.IEndpoint} */ - const command = continuationItem.endpoint.command.commands.at(-1) + const command = continuationItemOrView.endpoint.command.commands.at(-1) path = command.getApiPath() payload = command.buildRequest() } else { - path = continuationItem.endpoint.metadata.api_url - payload = continuationItem.endpoint.payload + path = continuationItemOrView.endpoint.metadata.api_url + payload = continuationItemOrView.endpoint.payload } /** @type {SerializedContinuation} */ @@ -169,18 +169,21 @@ function serializeContinuationItem(continuationItem, actions) { } /** + * @template {import('youtubei.js').YTNodes} N * @param {import('youtubei.js').Mixins.Feed} feed + * @param {import('youtubei.js').YTNodeConstructor[]} types + * @return {N} */ -function extractFeedContinuationItem(feed) { +function extractFeedContinuation(feed, types) { let continuationItem if (feed.page.header_memo) { - const headerContinuations = feed.page.header_memo.getType(YTNodes.ContinuationItem) - continuationItem = feed.memo.getType(YTNodes.ContinuationItem).find( + const headerContinuations = feed.page.header_memo.getType(...types) + continuationItem = feed.memo.getType(...types).find( (continuation) => !headerContinuations.includes(continuation) ) } else { - continuationItem = feed.memo.getType(YTNodes.ContinuationItem)[0] + continuationItem = feed.memo.getType(types)[0] } if (!continuationItem) { @@ -197,22 +200,22 @@ function extractFeedContinuationItem(feed) { export function extractLocalCacheablePlaylistContinuation(playlist) { const sectionList = playlist.memo.getType(YTNodes.SectionList)[0] - let continuationItem + let continuationItemOrView // No section list means there can't be additional continuation nodes here, // so no need to check. if (!sectionList) { - continuationItem = extractFeedContinuationItem(playlist) + continuationItemOrView = extractFeedContinuation(playlist, [YTNodes.ContinuationItem, YTNodes.ContinuationItemView]) } else { - continuationItem = playlist.memo.getType(YTNodes.ContinuationItem) + continuationItemOrView = playlist.memo.getType(YTNodes.ContinuationItem, YTNodes.ContinuationItemView) .find((node) => !sectionList.contents.includes(node)) } - if (!continuationItem) { + if (!continuationItemOrView) { throw new Utils.InnertubeError('There are no continuations.') } - return serializeContinuationItem(continuationItem, playlist.actions) + return serializeContinuation(continuationItemOrView, playlist.actions) } /** @@ -221,9 +224,9 @@ export function extractLocalCacheablePlaylistContinuation(playlist) { * @returns {SerializedContinuation} */ export function extractLocalCacheableSearchContinuation(search) { - const continuationItem = extractFeedContinuationItem(search) + const continuationItem = extractFeedContinuation(search, [YTNodes.ContinuationItem]) - return serializeContinuationItem(continuationItem, search.actions) + return serializeContinuation(continuationItem, search.actions) } /** @@ -736,9 +739,7 @@ export async function getLocalChannelVideos(id) { // if the channel doesn't have a videos tab, YouTube returns the home tab instead // so we need to check that we got the right tab if (videosTab.current_tab?.endpoint.metadata.url?.endsWith('/videos')) { - // TODO: restore usage of official API instead of memo after youtubei.js 17.1.0 released - // videos = parseLocalChannelVideos(videosTab.videos, channelId, name) - videos = parseLocalChannelVideos([...videosTab.memo.getType(YTNodes.LockupView)], channelId, name) + videos = parseLocalChannelVideos(videosTab.videos, channelId, name) } else if (name.endsWith('- Topic') && !!videosTab.metadata.music_artist_name) { try { const playlist = await innertube.getPlaylist(getChannelPlaylistId(channelId, 'videos', 'newest')) @@ -798,14 +799,10 @@ export async function getLocalChannelLiveStreams(id) { // work around YouTube bug where it will return a bunch of responses with only continuations in them // e.g. https://www.youtube.com/@TWLIVES/streams - // TODO: restore usage of official API instead of memo after youtubei.js 17.1.0 released - // let tempVideos = liveStreamsTab.videos - let tempVideos = [...liveStreamsTab.memo.getType(YTNodes.LockupView)] + let tempVideos = liveStreamsTab.videos while (tempVideos.length === 0 && liveStreamsTab.has_continuation) { liveStreamsTab = await liveStreamsTab.getContinuation() - // TODO: restore usage of official API instead of memo after youtubei.js 17.1.0 released - // tempVideos = liveStreamsTab.videos - tempVideos = [...liveStreamsTab.memo.getType(YTNodes.LockupView)] + tempVideos = liveStreamsTab.videos } videos = parseLocalChannelVideos(tempVideos, channelId, name) @@ -1356,6 +1353,8 @@ export function parseLocalPlaylistVideo(video) { viewCount, lengthSeconds: '' } + } else if (video.type === 'LockupView') { + return parseLockupView(video) } else { /** @type {import('youtubei.js').YTNodes.PlaylistVideo} */ const video_ = video diff --git a/src/renderer/views/Channel/Channel.vue b/src/renderer/views/Channel/Channel.vue index af98c5c97d1be..254e87d70277f 100644 --- a/src/renderer/views/Channel/Channel.vue +++ b/src/renderer/views/Channel/Channel.vue @@ -1111,9 +1111,7 @@ async function getChannelVideosLocal() { return } - // TODO: restore usage of official API instead of memo after youtubei.js 17.1.0 released - // latestVideos.value = parseLocalChannelVideos(videosTab.videos, id.value, channelName.value) - latestVideos.value = parseLocalChannelVideos([...videosTab.memo.getType(YTNodes.LockupView)], id.value, channelName.value) + latestVideos.value = parseLocalChannelVideos(videosTab.videos, id.value, channelName.value) videoContinuationData.value = videosTab.has_continuation ? videosTab : null isElementListLoading.value = false } @@ -1158,9 +1156,7 @@ async function getChannelVideosLocalMore() { */ const continuation = await videoContinuationData.value.getContinuation() - // TODO: restore usage of official API instead of memo after youtubei.js 17.1.0 released - // latestVideos.value = latestVideos.value.concat(parseLocalChannelVideos(continuation.videos, id.value, channelName.value)) - latestVideos.value = latestVideos.value.concat(parseLocalChannelVideos([...continuation.memo.getType(YTNodes.LockupView)], id.value, channelName.value)) + latestVideos.value = latestVideos.value.concat(parseLocalChannelVideos(continuation.videos, id.value, channelName.value)) videoContinuationData.value = continuation.has_continuation ? continuation : null } } catch (err) { @@ -1399,14 +1395,10 @@ async function getChannelLiveLocal() { // work around YouTube bug where it will return a bunch of responses with only continuations in them // e.g. https://www.youtube.com/@TWLIVES/streams - // TODO: restore usage of official API instead of memo after youtubei.js 17.1.0 released - // let videos = liveTab.videos - let videos = [...liveTab.memo.getType(YTNodes.LockupView)] + let videos = liveTab.videos while (videos.length === 0 && liveTab.has_continuation) { liveTab = await liveTab.getContinuation() - // TODO: restore usage of official API instead of memo after youtubei.js 17.1.0 released - // videos = liveTab.videos - videos = [...liveTab.memo.getType(YTNodes.LockupView)] + videos = liveTab.videos } latestLive.value = parseLocalChannelVideos(videos, id.value, channelName.value) @@ -1441,9 +1433,7 @@ async function getChannelLiveLocalMore() { */ const continuation = await liveContinuationData.value.getContinuation() - // TODO: restore usage of official API instead of memo after youtubei.js 17.1.0 released - // latestLive.value = latestLive.value.concat(parseLocalChannelVideos(continuation.videos, id.value, channelName.value)) - latestLive.value = latestLive.value.concat(parseLocalChannelVideos([...continuation.memo.getType(YTNodes.LockupView)], id.value, channelName.value)) + latestLive.value = latestLive.value.concat(parseLocalChannelVideos(continuation.videos, id.value, channelName.value)) liveContinuationData.value = continuation.has_continuation ? continuation : null } catch (err) { console.error(err)