Experiment to rebuild Diffuse using web applets.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: webamp

+286 -117
+1 -1
deno.lock
··· 54 54 "npm:uri-js@^4.4.1", 55 55 "npm:vite-plugin-wasm@^3.4.1", 56 56 "npm:vite-tsconfig-paths@^5.1.4", 57 - "npm:webamp@^1.5.0", 57 + "npm:webamp@^2.1.2", 58 58 "npm:xxh32@^2.0.5" 59 59 ] 60 60 }
+252 -78
package-lock.json
··· 29 29 "throttle-debounce": "^5.0.2", 30 30 "uint8arrays": "^5.1.0", 31 31 "uri-js": "^4.4.1", 32 - "webamp": "^1.5.0", 32 + "webamp": "^2.1.2", 33 33 "xxh32": "^2.0.5" 34 34 }, 35 35 "devDependencies": { ··· 1801 1801 "win32" 1802 1802 ] 1803 1803 }, 1804 + "node_modules/@sentry/browser": { 1805 + "version": "5.9.1", 1806 + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.9.1.tgz", 1807 + "integrity": "sha512-7AOabwp9yAH9h6Xe6TfDwlLxHbUSWs+SPWHI7bPlht2yDSAqkXYGSzRr5X0XQJX9oBQdx2cEPMqHyJrbNaP/og==", 1808 + "license": "BSD-3-Clause", 1809 + "dependencies": { 1810 + "@sentry/core": "5.8.0", 1811 + "@sentry/types": "5.7.1", 1812 + "@sentry/utils": "5.8.0", 1813 + "tslib": "^1.9.3" 1814 + }, 1815 + "engines": { 1816 + "node": ">=6" 1817 + } 1818 + }, 1819 + "node_modules/@sentry/browser/node_modules/tslib": { 1820 + "version": "1.14.1", 1821 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1822 + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1823 + "license": "0BSD" 1824 + }, 1825 + "node_modules/@sentry/core": { 1826 + "version": "5.8.0", 1827 + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.8.0.tgz", 1828 + "integrity": "sha512-aAh2KLidIXJVGrxmHSVq2eVKbu7tZiYn5ylW6yzJXFetS5z4MA+JYaSBaG2inVYDEEqqMIkb17TyWxxziUDieg==", 1829 + "license": "BSD-3-Clause", 1830 + "dependencies": { 1831 + "@sentry/hub": "5.8.0", 1832 + "@sentry/minimal": "5.8.0", 1833 + "@sentry/types": "5.7.1", 1834 + "@sentry/utils": "5.8.0", 1835 + "tslib": "^1.9.3" 1836 + }, 1837 + "engines": { 1838 + "node": ">=6" 1839 + } 1840 + }, 1841 + "node_modules/@sentry/core/node_modules/tslib": { 1842 + "version": "1.14.1", 1843 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1844 + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1845 + "license": "0BSD" 1846 + }, 1847 + "node_modules/@sentry/hub": { 1848 + "version": "5.8.0", 1849 + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.8.0.tgz", 1850 + "integrity": "sha512-VdApn1ZCNwH1wwQwoO6pu53PM/qgHG+DQege0hbByluImpLBhAj9w50nXnF/8KzV4UoMIVbzCb6jXzMRmqqp9A==", 1851 + "license": "BSD-3-Clause", 1852 + "dependencies": { 1853 + "@sentry/types": "5.7.1", 1854 + "@sentry/utils": "5.8.0", 1855 + "tslib": "^1.9.3" 1856 + }, 1857 + "engines": { 1858 + "node": ">=6" 1859 + } 1860 + }, 1861 + "node_modules/@sentry/hub/node_modules/tslib": { 1862 + "version": "1.14.1", 1863 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1864 + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1865 + "license": "0BSD" 1866 + }, 1867 + "node_modules/@sentry/minimal": { 1868 + "version": "5.8.0", 1869 + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.8.0.tgz", 1870 + "integrity": "sha512-MIlFOgd+JvAUrBBmq7vr9ovRH1HvckhnwzHdoUPpKRBN+rQgTyZy1o6+kA2fASCbrRqFCP+Zk7EHMACKg8DpIw==", 1871 + "license": "BSD-3-Clause", 1872 + "dependencies": { 1873 + "@sentry/hub": "5.8.0", 1874 + "@sentry/types": "5.7.1", 1875 + "tslib": "^1.9.3" 1876 + }, 1877 + "engines": { 1878 + "node": ">=6" 1879 + } 1880 + }, 1881 + "node_modules/@sentry/minimal/node_modules/tslib": { 1882 + "version": "1.14.1", 1883 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1884 + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1885 + "license": "0BSD" 1886 + }, 1887 + "node_modules/@sentry/types": { 1888 + "version": "5.7.1", 1889 + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.7.1.tgz", 1890 + "integrity": "sha512-tbUnTYlSliXvnou5D4C8Zr+7/wJrHLbpYX1YkLXuIJRU0NSi81bHMroAuHWILcQKWhVjaV/HZzr7Y/hhWtbXVQ==", 1891 + "license": "BSD-3-Clause", 1892 + "engines": { 1893 + "node": ">=6" 1894 + } 1895 + }, 1896 + "node_modules/@sentry/utils": { 1897 + "version": "5.8.0", 1898 + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.8.0.tgz", 1899 + "integrity": "sha512-KDxUvBSYi0/dHMdunbxAxD3389pcQioLtcO6CI6zt/nJXeVFolix66cRraeQvqupdLhvOk/el649W4fCPayTHw==", 1900 + "license": "BSD-3-Clause", 1901 + "dependencies": { 1902 + "@sentry/types": "5.7.1", 1903 + "tslib": "^1.9.3" 1904 + }, 1905 + "engines": { 1906 + "node": ">=6" 1907 + } 1908 + }, 1909 + "node_modules/@sentry/utils/node_modules/tslib": { 1910 + "version": "1.14.1", 1911 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1912 + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1913 + "license": "0BSD" 1914 + }, 1804 1915 "node_modules/@shikijs/core": { 1805 1916 "version": "3.7.0", 1806 1917 "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.7.0.tgz", ··· 2065 2176 "undici-types": "~7.8.0" 2066 2177 } 2067 2178 }, 2179 + "node_modules/@types/prop-types": { 2180 + "version": "15.7.15", 2181 + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", 2182 + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", 2183 + "license": "MIT" 2184 + }, 2068 2185 "node_modules/@types/react": { 2069 - "version": "19.1.8", 2070 - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", 2071 - "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", 2186 + "version": "18.3.23", 2187 + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", 2188 + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", 2072 2189 "license": "MIT", 2073 2190 "dependencies": { 2191 + "@types/prop-types": "*", 2074 2192 "csstype": "^3.0.2" 2075 2193 } 2076 2194 }, 2077 - "node_modules/@types/react-redux": { 2078 - "version": "7.1.34", 2079 - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz", 2080 - "integrity": "sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==", 2081 - "license": "MIT", 2082 - "dependencies": { 2083 - "@types/hoist-non-react-statics": "^3.3.0", 2084 - "@types/react": "*", 2085 - "hoist-non-react-statics": "^3.3.0", 2086 - "redux": "^4.0.0" 2087 - } 2088 - }, 2089 2195 "node_modules/@types/throttle-debounce": { 2090 2196 "version": "5.0.2", 2091 2197 "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz", ··· 2098 2204 "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", 2099 2205 "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", 2100 2206 "dev": true, 2207 + "license": "MIT" 2208 + }, 2209 + "node_modules/@types/use-sync-external-store": { 2210 + "version": "0.0.3", 2211 + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", 2212 + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", 2101 2213 "license": "MIT" 2102 2214 }, 2103 2215 "node_modules/@types/wicg-file-system-access": { ··· 20155 20267 "node": ">=0.10.0" 20156 20268 } 20157 20269 }, 20158 - "node_modules/object-assign": { 20159 - "version": "4.1.1", 20160 - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 20161 - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 20162 - "license": "MIT", 20163 - "engines": { 20164 - "node": ">=0.10.0" 20165 - } 20166 - }, 20167 20270 "node_modules/object-keys": { 20168 20271 "version": "1.1.1", 20169 20272 "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", ··· 20473 20576 "node": ">=6" 20474 20577 } 20475 20578 }, 20476 - "node_modules/prop-types": { 20477 - "version": "15.8.1", 20478 - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 20479 - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 20480 - "license": "MIT", 20481 - "dependencies": { 20482 - "loose-envify": "^1.4.0", 20483 - "object-assign": "^4.1.1", 20484 - "react-is": "^16.13.1" 20485 - } 20486 - }, 20487 - "node_modules/prop-types/node_modules/react-is": { 20488 - "version": "16.13.1", 20489 - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 20490 - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", 20491 - "license": "MIT" 20492 - }, 20493 20579 "node_modules/property-information": { 20494 20580 "version": "7.1.0", 20495 20581 "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", ··· 20551 20637 "license": "MIT" 20552 20638 }, 20553 20639 "node_modules/react": { 20554 - "version": "17.0.2", 20555 - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", 20556 - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", 20640 + "version": "18.3.1", 20641 + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", 20642 + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", 20557 20643 "license": "MIT", 20644 + "peer": true, 20558 20645 "dependencies": { 20559 - "loose-envify": "^1.1.0", 20560 - "object-assign": "^4.1.1" 20646 + "loose-envify": "^1.1.0" 20561 20647 }, 20562 20648 "engines": { 20563 20649 "node": ">=0.10.0" 20564 20650 } 20565 20651 }, 20566 20652 "node_modules/react-dom": { 20567 - "version": "17.0.2", 20568 - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", 20569 - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", 20653 + "version": "18.3.1", 20654 + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", 20655 + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", 20570 20656 "license": "MIT", 20657 + "optional": true, 20658 + "peer": true, 20571 20659 "dependencies": { 20572 20660 "loose-envify": "^1.1.0", 20573 - "object-assign": "^4.1.1", 20574 - "scheduler": "^0.20.2" 20661 + "scheduler": "^0.23.2" 20575 20662 }, 20576 20663 "peerDependencies": { 20577 - "react": "17.0.2" 20664 + "react": "^18.3.1" 20578 20665 } 20579 20666 }, 20580 20667 "node_modules/react-is": { 20581 - "version": "17.0.2", 20582 - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 20583 - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 20668 + "version": "18.3.1", 20669 + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", 20670 + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", 20584 20671 "license": "MIT" 20585 20672 }, 20586 20673 "node_modules/react-redux": { 20587 - "version": "7.2.9", 20588 - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", 20589 - "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", 20674 + "version": "8.1.3", 20675 + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", 20676 + "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", 20590 20677 "license": "MIT", 20591 20678 "dependencies": { 20592 - "@babel/runtime": "^7.15.4", 20593 - "@types/react-redux": "^7.1.20", 20679 + "@babel/runtime": "^7.12.1", 20680 + "@types/hoist-non-react-statics": "^3.3.1", 20681 + "@types/use-sync-external-store": "^0.0.3", 20594 20682 "hoist-non-react-statics": "^3.3.2", 20595 - "loose-envify": "^1.4.0", 20596 - "prop-types": "^15.7.2", 20597 - "react-is": "^17.0.2" 20683 + "react-is": "^18.0.0", 20684 + "use-sync-external-store": "^1.0.0" 20598 20685 }, 20599 20686 "peerDependencies": { 20600 - "react": "^16.8.3 || ^17 || ^18" 20687 + "@types/react": "^16.8 || ^17.0 || ^18.0", 20688 + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", 20689 + "react": "^16.8 || ^17.0 || ^18.0", 20690 + "react-dom": "^16.8 || ^17.0 || ^18.0", 20691 + "react-native": ">=0.59", 20692 + "redux": "^4 || ^5.0.0-beta.0" 20601 20693 }, 20602 20694 "peerDependenciesMeta": { 20695 + "@types/react": { 20696 + "optional": true 20697 + }, 20698 + "@types/react-dom": { 20699 + "optional": true 20700 + }, 20603 20701 "react-dom": { 20604 20702 "optional": true 20605 20703 }, 20606 20704 "react-native": { 20705 + "optional": true 20706 + }, 20707 + "redux": { 20607 20708 "optional": true 20608 20709 } 20609 20710 } ··· 20642 20743 "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", 20643 20744 "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", 20644 20745 "license": "MIT", 20746 + "peer": true, 20645 20747 "dependencies": { 20646 20748 "@babel/runtime": "^7.9.2" 20647 20749 } 20648 20750 }, 20751 + "node_modules/redux-devtools-extension": { 20752 + "version": "2.13.9", 20753 + "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz", 20754 + "integrity": "sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A==", 20755 + "deprecated": "Package moved to @redux-devtools/extension.", 20756 + "license": "MIT", 20757 + "peerDependencies": { 20758 + "redux": "^3.1.0 || ^4.0.0" 20759 + } 20760 + }, 20761 + "node_modules/redux-sentry-middleware": { 20762 + "version": "0.1.8", 20763 + "resolved": "https://registry.npmjs.org/redux-sentry-middleware/-/redux-sentry-middleware-0.1.8.tgz", 20764 + "integrity": "sha512-xubpYH9RgE31tZUESeRW5agwQa19Yd6Gy+4iO09raW/2TITPO5fhJdXpVwJfpGMbIYhEmHFqE2wD5Lnz7YtAeA==", 20765 + "license": "MIT" 20766 + }, 20767 + "node_modules/redux-thunk": { 20768 + "version": "2.4.2", 20769 + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", 20770 + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", 20771 + "license": "MIT", 20772 + "peerDependencies": { 20773 + "redux": "^4" 20774 + } 20775 + }, 20649 20776 "node_modules/regenerator-runtime": { 20650 20777 "version": "0.11.1", 20651 20778 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", ··· 20997 21124 } 20998 21125 }, 20999 21126 "node_modules/scheduler": { 21000 - "version": "0.20.2", 21001 - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", 21002 - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", 21127 + "version": "0.23.2", 21128 + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", 21129 + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", 21003 21130 "license": "MIT", 21131 + "optional": true, 21132 + "peer": true, 21004 21133 "dependencies": { 21005 - "loose-envify": "^1.1.0", 21006 - "object-assign": "^4.1.1" 21134 + "loose-envify": "^1.1.0" 21007 21135 } 21008 21136 }, 21009 21137 "node_modules/semver": { ··· 21927 22055 "punycode": "^2.1.0" 21928 22056 } 21929 22057 }, 22058 + "node_modules/use-sync-external-store": { 22059 + "version": "1.5.0", 22060 + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", 22061 + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", 22062 + "license": "MIT", 22063 + "peerDependencies": { 22064 + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 22065 + } 22066 + }, 21930 22067 "node_modules/utf8-buffer": { 21931 22068 "version": "1.0.0", 21932 22069 "resolved": "https://registry.npmjs.org/utf8-buffer/-/utf8-buffer-1.0.0.tgz", ··· 22151 22288 } 22152 22289 }, 22153 22290 "node_modules/webamp": { 22154 - "version": "1.5.0", 22155 - "resolved": "https://registry.npmjs.org/webamp/-/webamp-1.5.0.tgz", 22156 - "integrity": "sha512-Rz2L90pUqg6Y/1jbtniS8RCuDD8TMwfjqv6D/4T93UfvGPGvfQR00LE/rfaHRfG6FgQfiOul7RyPXvCaEikCxg==", 22291 + "version": "2.1.2", 22292 + "resolved": "https://registry.npmjs.org/webamp/-/webamp-2.1.2.tgz", 22293 + "integrity": "sha512-WbxvG+hQ1eo5d1oLHHw6ncu87ZKj6T5BBFr0vdgUFTDKJI1kuNa4vvIzGDQAJuAPN1zRrhaq/PvX7/Hz82VR+g==", 22157 22294 "license": "MIT", 22158 22295 "dependencies": { 22296 + "@sentry/browser": "5.9.1", 22159 22297 "ani-cursor": "^0.0.4", 22160 22298 "butterchurn": "^3.0.0-beta.3", 22161 22299 "butterchurn-presets": "3.0.0-beta.4", 22162 22300 "classnames": "^2.2.5", 22163 22301 "fscreen": "^1.0.2", 22164 22302 "invariant": "^2.2.3", 22165 - "jszip": "^3.1.3", 22303 + "jszip": "^3.10.1", 22166 22304 "lodash": "^4.17.21", 22167 22305 "milkdrop-preset-converter-aws": "^0.1.6", 22168 22306 "music-metadata-browser": "^0.6.1", 22169 - "react": "^17.0.1", 22170 - "react-dom": "^17.0.1", 22171 - "react-redux": "^7.2.2", 22172 - "redux": "^4.0.5", 22307 + "react": "^19.1.0", 22308 + "react-dom": "^19.1.0", 22309 + "react-redux": "^8.0.5", 22310 + "redux": "^5.0.0-alpha.0", 22311 + "redux-devtools-extension": "^2.13.9", 22312 + "redux-sentry-middleware": "^0.1.3", 22313 + "redux-thunk": "^2.4.0", 22173 22314 "reselect": "^3.0.1", 22174 22315 "tinyqueue": "^1.2.3", 22175 22316 "winamp-eqf": "^1.0.0" 22176 22317 } 22318 + }, 22319 + "node_modules/webamp/node_modules/react": { 22320 + "version": "19.1.0", 22321 + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", 22322 + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", 22323 + "license": "MIT", 22324 + "engines": { 22325 + "node": ">=0.10.0" 22326 + } 22327 + }, 22328 + "node_modules/webamp/node_modules/react-dom": { 22329 + "version": "19.1.0", 22330 + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", 22331 + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", 22332 + "license": "MIT", 22333 + "dependencies": { 22334 + "scheduler": "^0.26.0" 22335 + }, 22336 + "peerDependencies": { 22337 + "react": "^19.1.0" 22338 + } 22339 + }, 22340 + "node_modules/webamp/node_modules/redux": { 22341 + "version": "5.0.1", 22342 + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", 22343 + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", 22344 + "license": "MIT" 22345 + }, 22346 + "node_modules/webamp/node_modules/scheduler": { 22347 + "version": "0.26.0", 22348 + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", 22349 + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", 22350 + "license": "MIT" 22177 22351 }, 22178 22352 "node_modules/webidl-conversions": { 22179 22353 "version": "3.0.1",
+1 -1
package.json
··· 24 24 "throttle-debounce": "^5.0.2", 25 25 "uint8arrays": "^5.1.0", 26 26 "uri-js": "^4.4.1", 27 - "webamp": "^1.5.0", 27 + "webamp": "^2.1.2", 28 28 "xxh32": "^2.0.5" 29 29 }, 30 30 "devDependencies": {
+1 -5
src/scripts/engine/queue/worker.ts
··· 1 1 import type { Track } from "@applets/core/types.js"; 2 - import { expose } from "../../../scripts/common.ts"; 3 2 import type { State } from "./types"; 4 - 5 - self.addEventListener("message", (event) => { 6 - console.log("QUEUE", event.data); 7 - }); 3 + import { expose } from "@scripts/common.ts"; 8 4 9 5 //////////////////////////////////////////// 10 6 // ACTIONS
+31 -32
src/scripts/theme/webamp/index.ts
··· 2 2 import Webamp from "webamp"; 3 3 4 4 import type { ManagedOutput, ResolvedUri, Track } from "@applets/core/types.d.ts"; 5 - import { applet, wait } from "@scripts/applet/common"; 5 + import { applet, inputUrl, wait } from "@scripts/applet/common"; 6 6 7 7 //////////////////////////////////////////// 8 8 // 🗂️ Applets ··· 23 23 initialTracks: [], 24 24 }); 25 25 26 + // Override 27 + const loadFromUrl = amp.media.loadFromUrl.bind(amp.media); 28 + 29 + async function loadOverride(uri: string, autoPlay: boolean) { 30 + const resp = await inputUrl(configurator.input, uri); 31 + if (!resp) throw new Error("Failed to resolve URI"); 32 + return await loadFromUrl(resp.url, autoPlay); 33 + } 34 + 35 + amp.media.loadFromUrl = loadOverride.bind(amp.media); 36 + 37 + // Render 26 38 const ampNode = document.createElement("div"); 27 39 ampNode.style = "height: 100vh; left: 0; position: absolute; top: 0; width: 100%; z-index: -1000;"; 28 40 document.body.appendChild(ampNode); 29 41 amp.renderWhenReady(ampNode); 30 42 43 + // Wait for tracks to load 31 44 wait(configurator.output, (d) => d?.tracks.state === "loaded").then(loadAndInsert); 32 45 configurator.output.ondata = loadAndInsert; 33 46 47 + // Load & insert 34 48 let inserting = false; 35 49 36 50 async function loadAndInsert() { ··· 38 52 if (inserting) return; 39 53 inserting = true; 40 54 const tracks = await loadTracks(); 55 + // TODO: Webamp shouldn't stop playing the active track whenever the playlist changes. 41 56 amp.setTracksToPlay([]); 42 - amp.appendTracks(tracks); 57 + // TODO: Webamp blows up if you add too much tracks 58 + amp.appendTracks(tracks.slice(0, 1000)); 43 59 amp.nextTrack(); 44 60 inserting = false; 45 61 } ··· 48 64 // 🛠️ 49 65 //////////////////////////////////////////// 50 66 async function loadTracks(): Promise<URLTrack[]> { 51 - return await configurator.output.data.tracks.collection.reduce( 52 - async (promise: Promise<URLTrack[]>, track: Track) => { 53 - const acc = await promise; 67 + const tracks = configurator.output.data.tracks.collection; 68 + return tracks.map((track) => { 69 + const urlTrack: URLTrack = { 70 + url: track.uri, 71 + metaData: { 72 + title: track.tags?.title || "", 73 + artist: track.tags?.artist || "", 74 + album: track.tags?.album, 75 + }, 76 + duration: track.stats?.duration, 77 + }; 54 78 55 - // TODO: Ideally the URL should only be resolved when needed, 56 - // but webamp doesn't allow for that. 57 - // Maybe you could work around it with a service worker. 58 - const resGet = await configurator.input.sendAction<ResolvedUri>( 59 - "resolve", 60 - { method: "GET", uri: track.uri }, 61 - { 62 - timeoutDuration: 60000 * 5, 63 - }, 64 - ); 65 - 66 - if (!resGet) return acc; 67 - 68 - const urlTrack: URLTrack = { 69 - url: resGet.url, 70 - metaData: { 71 - title: track.tags?.title || "", 72 - artist: track.tags?.artist || "", 73 - album: track.tags?.album, 74 - }, 75 - duration: track.stats?.duration, 76 - }; 77 - 78 - return [...acc, urlTrack]; 79 - }, 80 - Promise.resolve([]), 81 - ); 79 + return urlTrack; 80 + }); 82 81 }