unoffical wafrn mirror wafrn.net
atproto social-network activitypub
1
fork

Configure Feed

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

add string escape to ask content

+74 -126
+13 -68
package-lock.json
··· 1097 1097 "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.0.8.tgz", 1098 1098 "integrity": "sha512-1YXHZQO/LYiExbg7sZhiqqF5fMcH17iVgK1tI2Gk90Yy0HQAuqnteOv3pPGgUfLowNOWK0sGhCYbB2Lq21LA3w==", 1099 1099 "license": "MIT", 1100 - "peer": true, 1101 1100 "dependencies": { 1102 1101 "tslib": "^2.3.0" 1103 1102 }, ··· 1690 1689 "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-21.0.6.tgz", 1691 1690 "integrity": "sha512-5Gw8mXtKXvcvDMWEciPLRYB6Ja5vsikLAidZsdCEIF6Bc51GmoqT5Tk/Ke+ciCd5Hq9Aco/IcHxT1RC3470lZg==", 1692 1691 "license": "MIT", 1693 - "peer": true, 1694 1692 "dependencies": { 1695 1693 "parse5": "^8.0.0", 1696 1694 "tslib": "^2.3.0" ··· 1706 1704 "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.0.5.tgz", 1707 1705 "integrity": "sha512-UYFQqn9Ow1wFVSwdB/xfjmZo4Yb7CUNxilbeYDFIybesfxXSdjMJBbXLtV0+icIhjmqfSUm2gTls6WIrG8qv9A==", 1708 1706 "license": "MIT", 1709 - "peer": true, 1710 1707 "dependencies": { 1711 1708 "@angular-devkit/architect": "0.2100.5", 1712 1709 "@angular-devkit/core": "21.0.5", ··· 1742 1739 "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.0.8.tgz", 1743 1740 "integrity": "sha512-on1B4oc/pf7IlkbG08Et/cCDSX8dpZz9iwp3zMFN/0JvorspyL5YOovFJfjdpmjdlrIi+ToGImwyIkY9P8Mblw==", 1744 1741 "license": "MIT", 1745 - "peer": true, 1746 1742 "dependencies": { 1747 1743 "tslib": "^2.3.0" 1748 1744 }, ··· 1759 1755 "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.0.8.tgz", 1760 1756 "integrity": "sha512-k/EPMuNvfn0eebEMmVcwhMlCWqzER/BEHVqTQCKsAAt7AuYZuluz7oR8Ypw96v3jbY+ZaH1ZvAzrK6URzryhOg==", 1761 1757 "license": "MIT", 1762 - "peer": true, 1763 1758 "dependencies": { 1764 1759 "tslib": "^2.3.0" 1765 1760 }, ··· 1773 1768 "integrity": "sha512-+i/wFvi5FTg47Ei+aiFf8j3iYfjQ79ieg8oJM86+Mw4bNwEKQqvWcpmKjoqcfmCescuw0sr2DXU6OEeX+yWeVg==", 1774 1769 "dev": true, 1775 1770 "license": "MIT", 1776 - "peer": true, 1777 1771 "dependencies": { 1778 1772 "@babel/core": "7.28.4", 1779 1773 "@jridgewell/sourcemap-codec": "^1.4.14", ··· 1806 1800 "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.0.8.tgz", 1807 1801 "integrity": "sha512-8dNolIQn8WHrD3PsqGuPrujxDX5hjpMbioifIByjjX9yaJy9on7AewVGb8m/DHVwWQ1eGVAGmvW9wt+h+nlzLg==", 1808 1802 "license": "MIT", 1809 - "peer": true, 1810 1803 "dependencies": { 1811 1804 "tslib": "^2.3.0" 1812 1805 }, ··· 1832 1825 "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.0.8.tgz", 1833 1826 "integrity": "sha512-H03A50elawXO53xkz0Aytar5kYT14GLeaj6dLKc1kcR5NqvX9Y/R7z3bY52tvypAdIR8CmPT7ad07TlT4O9lkg==", 1834 1827 "license": "MIT", 1835 - "peer": true, 1836 1828 "dependencies": { 1837 1829 "@standard-schema/spec": "^1.0.0", 1838 1830 "tslib": "^2.3.0" ··· 1869 1861 "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.0.8.tgz", 1870 1862 "integrity": "sha512-5rPyrP6n6ClO0ZEUXndS2/Xb7nZrbjjYWOxgfCb+ZTCiU7eyN6zhSmicKk2dLQxE1M15wbTa87dN6/Ytuq2uvg==", 1871 1863 "license": "MIT", 1872 - "peer": true, 1873 1864 "dependencies": { 1874 1865 "tslib": "^2.3.0" 1875 1866 }, ··· 1928 1919 "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-21.0.8.tgz", 1929 1920 "integrity": "sha512-+FubNXcazaSSf00ZpacWp3uw1j9G0yMGfRCYOWL32+KGcTBi1U/PVtJZpWeZbcbqaq3f6I1fjyBI3PNW7ETgbg==", 1930 1921 "license": "MIT", 1931 - "peer": true, 1932 1922 "dependencies": { 1933 1923 "tslib": "^2.3.0" 1934 1924 }, ··· 3332 3322 "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", 3333 3323 "dev": true, 3334 3324 "license": "MIT", 3335 - "peer": true, 3336 3325 "dependencies": { 3337 3326 "@babel/code-frame": "^7.27.1", 3338 3327 "@babel/generator": "^7.28.3", ··· 5147 5136 } 5148 5137 ], 5149 5138 "license": "MIT", 5150 - "peer": true, 5151 5139 "engines": { 5152 5140 "node": ">=18" 5153 5141 }, ··· 5189 5177 } 5190 5178 ], 5191 5179 "license": "MIT", 5192 - "peer": true, 5193 5180 "engines": { 5194 5181 "node": ">=18" 5195 5182 } ··· 6613 6600 "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.9.0.tgz", 6614 6601 "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", 6615 6602 "license": "MIT", 6616 - "peer": true, 6617 6603 "dependencies": { 6618 6604 "@inquirer/checkbox": "^4.3.0", 6619 6605 "@inquirer/confirm": "^5.1.19", ··· 7263 7249 "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", 7264 7250 "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", 7265 7251 "license": "MIT", 7266 - "peer": true, 7267 7252 "dependencies": { 7268 7253 "accepts": "^2.0.0", 7269 7254 "body-parser": "^2.2.1", ··· 10811 10796 "dependencies": { 10812 10797 "@types/trusted-types": "*" 10813 10798 } 10799 + }, 10800 + "node_modules/@types/escape-html": { 10801 + "version": "1.0.4", 10802 + "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", 10803 + "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==", 10804 + "license": "MIT" 10814 10805 }, 10815 10806 "node_modules/@types/eslint": { 10816 10807 "version": "9.6.1", ··· 11045 11036 "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.28.tgz", 11046 11037 "integrity": "sha512-VyKBr25BuFDzBFCK5sUM6ZXiWfqgCTwTAOK8qzGV/m9FCirXYDlmczJ+d5dXBAQALGCdRRdbteKYfJ84NGEusw==", 11047 11038 "license": "MIT", 11048 - "peer": true, 11049 11039 "dependencies": { 11050 11040 "undici-types": "~6.21.0" 11051 11041 } ··· 11256 11246 "version": "13.15.10", 11257 11247 "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz", 11258 11248 "integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==", 11259 - "license": "MIT", 11260 - "peer": true 11249 + "license": "MIT" 11261 11250 }, 11262 11251 "node_modules/@types/web-push": { 11263 11252 "version": "3.6.4", ··· 11310 11299 "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz", 11311 11300 "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", 11312 11301 "license": "MIT", 11313 - "peer": true, 11314 11302 "dependencies": { 11315 11303 "@typescript-eslint/scope-manager": "8.52.0", 11316 11304 "@typescript-eslint/types": "8.52.0", ··· 11413 11401 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.52.0.tgz", 11414 11402 "integrity": "sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==", 11415 11403 "license": "MIT", 11416 - "peer": true, 11417 11404 "engines": { 11418 11405 "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 11419 11406 }, ··· 11478 11465 "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.52.0.tgz", 11479 11466 "integrity": "sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==", 11480 11467 "license": "MIT", 11481 - "peer": true, 11482 11468 "dependencies": { 11483 11469 "@eslint-community/eslint-utils": "^4.9.1", 11484 11470 "@typescript-eslint/scope-manager": "8.52.0", ··· 11772 11758 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 11773 11759 "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 11774 11760 "license": "MIT", 11775 - "peer": true, 11776 11761 "bin": { 11777 11762 "acorn": "bin/acorn" 11778 11763 }, ··· 11867 11852 "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 11868 11853 "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 11869 11854 "license": "MIT", 11870 - "peer": true, 11871 11855 "dependencies": { 11872 11856 "fast-deep-equal": "^3.1.3", 11873 11857 "fast-uri": "^3.0.1", ··· 12753 12737 } 12754 12738 ], 12755 12739 "license": "MIT", 12756 - "peer": true, 12757 12740 "dependencies": { 12758 12741 "baseline-browser-mapping": "^2.9.0", 12759 12742 "caniuse-lite": "^1.0.30001759", ··· 12828 12811 "hasInstallScript": true, 12829 12812 "license": "MIT", 12830 12813 "optional": true, 12831 - "peer": true, 12832 12814 "dependencies": { 12833 12815 "node-gyp-build": "^4.3.0" 12834 12816 }, ··· 14990 14972 "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", 14991 14973 "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", 14992 14974 "license": "MIT", 14993 - "peer": true, 14994 14975 "dependencies": { 14995 14976 "@eslint-community/eslint-utils": "^4.8.0", 14996 14977 "@eslint-community/regexpp": "^4.12.1", ··· 15414 15395 "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", 15415 15396 "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", 15416 15397 "license": "MIT", 15417 - "peer": true, 15418 15398 "dependencies": { 15419 15399 "accepts": "~1.3.8", 15420 15400 "array-flatten": "1.1.1", ··· 15483 15463 "express": "^4.0.0 || ^5.0.0-alpha.1" 15484 15464 } 15485 15465 }, 15486 - "node_modules/express-ws/node_modules/utf-8-validate": { 15487 - "version": "5.0.10", 15488 - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", 15489 - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", 15490 - "hasInstallScript": true, 15491 - "license": "MIT", 15492 - "optional": true, 15493 - "peer": true, 15494 - "dependencies": { 15495 - "node-gyp-build": "^4.3.0" 15496 - }, 15497 - "engines": { 15498 - "node": ">=6.14.2" 15499 - } 15500 - }, 15501 15466 "node_modules/express-ws/node_modules/ws": { 15502 15467 "version": "7.5.10", 15503 15468 "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", ··· 17686 17651 "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", 17687 17652 "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", 17688 17653 "dev": true, 17689 - "license": "MIT", 17690 - "peer": true 17654 + "license": "MIT" 17691 17655 }, 17692 17656 "node_modules/jest-worker": { 17693 17657 "version": "27.5.1", ··· 17710 17674 "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", 17711 17675 "devOptional": true, 17712 17676 "license": "MIT", 17713 - "peer": true, 17714 17677 "bin": { 17715 17678 "jiti": "lib/jiti-cli.mjs" 17716 17679 } ··· 18086 18049 "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", 18087 18050 "dev": true, 18088 18051 "license": "MIT", 18089 - "peer": true, 18090 18052 "dependencies": { 18091 18053 "@colors/colors": "1.5.0", 18092 18054 "body-parser": "^1.19.0", ··· 18467 18429 "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", 18468 18430 "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", 18469 18431 "license": "MIT", 18470 - "peer": true, 18471 18432 "engines": { 18472 18433 "node": ">=14.16" 18473 18434 }, ··· 18577 18538 "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", 18578 18539 "dev": true, 18579 18540 "license": "Apache-2.0", 18580 - "peer": true, 18581 18541 "dependencies": { 18582 18542 "copy-anything": "^2.0.1", 18583 18543 "parse-node-version": "^1.0.1", ··· 21061 21021 "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", 21062 21022 "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", 21063 21023 "license": "MIT", 21064 - "peer": true, 21065 21024 "dependencies": { 21066 21025 "pg-connection-string": "^2.9.1", 21067 21026 "pg-pool": "^3.10.1", ··· 21402 21361 } 21403 21362 ], 21404 21363 "license": "MIT", 21405 - "peer": true, 21406 21364 "dependencies": { 21407 21365 "nanoid": "^3.3.11", 21408 21366 "picocolors": "^1.1.1", ··· 21614 21572 "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", 21615 21573 "dev": true, 21616 21574 "license": "MIT", 21617 - "peer": true, 21618 21575 "bin": { 21619 21576 "prettier": "bin/prettier.cjs" 21620 21577 }, ··· 21866 21823 "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", 21867 21824 "dev": true, 21868 21825 "license": "MIT", 21869 - "peer": true, 21870 21826 "dependencies": { 21871 21827 "@eslint-community/eslint-utils": "^4.2.0", 21872 21828 "@eslint-community/regexpp": "^4.6.1", ··· 22467 22423 "version": "0.2.2", 22468 22424 "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", 22469 22425 "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", 22470 - "license": "Apache-2.0", 22471 - "peer": true 22426 + "license": "Apache-2.0" 22472 22427 }, 22473 22428 "node_modules/regenerate": { 22474 22429 "version": "1.4.2", ··· 22914 22869 "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", 22915 22870 "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", 22916 22871 "license": "Apache-2.0", 22917 - "peer": true, 22918 22872 "dependencies": { 22919 22873 "tslib": "^2.1.0" 22920 22874 } ··· 23011 22965 "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", 23012 22966 "dev": true, 23013 22967 "license": "MIT", 23014 - "peer": true, 23015 22968 "dependencies": { 23016 22969 "chokidar": "^4.0.0", 23017 22970 "immutable": "^5.0.2", ··· 24604 24557 "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", 24605 24558 "dev": true, 24606 24559 "license": "BSD-2-Clause", 24607 - "peer": true, 24608 24560 "dependencies": { 24609 24561 "@jridgewell/source-map": "^0.3.3", 24610 24562 "acorn": "^8.15.0", ··· 24962 24914 "version": "2.8.1", 24963 24915 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 24964 24916 "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 24965 - "license": "0BSD", 24966 - "peer": true 24917 + "license": "0BSD" 24967 24918 }, 24968 24919 "node_modules/tsx": { 24969 24920 "version": "4.21.0", 24970 24921 "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", 24971 24922 "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", 24972 24923 "license": "MIT", 24973 - "peer": true, 24974 24924 "dependencies": { 24975 24925 "esbuild": "~0.27.0", 24976 24926 "get-tsconfig": "^4.7.5" ··· 25541 25491 "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 25542 25492 "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 25543 25493 "license": "Apache-2.0", 25544 - "peer": true, 25545 25494 "bin": { 25546 25495 "tsc": "bin/tsc", 25547 25496 "tsserver": "bin/tsserver" ··· 26033 25982 "hasInstallScript": true, 26034 25983 "license": "MIT", 26035 25984 "optional": true, 26036 - "peer": true, 26037 25985 "dependencies": { 26038 25986 "node-gyp-build": "^4.3.0" 26039 25987 }, ··· 26190 26138 "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", 26191 26139 "dev": true, 26192 26140 "license": "MIT", 26193 - "peer": true, 26194 26141 "dependencies": { 26195 26142 "esbuild": "^0.25.0", 26196 26143 "fdir": "^6.5.0", ··· 26452 26399 "integrity": "sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==", 26453 26400 "dev": true, 26454 26401 "license": "MIT", 26455 - "peer": true, 26456 26402 "dependencies": { 26457 26403 "@types/eslint-scope": "^3.7.7", 26458 26404 "@types/estree": "^1.0.8", ··· 27244 27190 "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", 27245 27191 "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", 27246 27192 "license": "MIT", 27247 - "peer": true, 27248 27193 "funding": { 27249 27194 "url": "https://github.com/sponsors/colinhacks" 27250 27195 } ··· 27262 27207 "version": "0.15.1", 27263 27208 "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", 27264 27209 "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", 27265 - "license": "MIT", 27266 - "peer": true 27210 + "license": "MIT" 27267 27211 }, 27268 27212 "node_modules/zwitch": { 27269 27213 "version": "2.0.4", ··· 27300 27244 "@types/color": "^4.2.0", 27301 27245 "@types/cors": "^2.8.12", 27302 27246 "@types/dompurify": "^3.0.5", 27247 + "@types/escape-html": "^1.0.4", 27303 27248 "@types/express": "^4.17.21", 27304 27249 "@types/express-ws": "^3.0.5", 27305 27250 "@types/fluent-ffmpeg": "^2.1.27", ··· 27335 27280 "csv-parse": "^5.4.0", 27336 27281 "did-resolver": "^4.1.0", 27337 27282 "dompurify": "^3.2.4", 27283 + "escape-html": "^1.0.3", 27338 27284 "exiftool": "^0.0.3", 27339 27285 "expo-server-sdk": "^3.14.0", 27340 27286 "express": "^4.21.2", ··· 27560 27506 "integrity": "sha512-7vWt41cjKTRwNPYushQihIHdRnJ8fBy5HYBjMro+nemBQfoVuXY0JXgCctf3Jb3JGUCKxlIw/SYYRsaJ+1rj2w==", 27561 27507 "dev": true, 27562 27508 "license": "BSD-2-Clause", 27563 - "peer": true, 27564 27509 "dependencies": { 27565 27510 "@typescript-eslint/scope-manager": "8.0.0-alpha.38", 27566 27511 "@typescript-eslint/types": "8.0.0-alpha.38",
+2
packages/backend/package.json
··· 38 38 "@types/color": "^4.2.0", 39 39 "@types/cors": "^2.8.12", 40 40 "@types/dompurify": "^3.0.5", 41 + "@types/escape-html": "^1.0.4", 41 42 "@types/express": "^4.17.21", 42 43 "@types/express-ws": "^3.0.5", 43 44 "@types/fluent-ffmpeg": "^2.1.27", ··· 73 74 "csv-parse": "^5.4.0", 74 75 "did-resolver": "^4.1.0", 75 76 "dompurify": "^3.2.4", 77 + "escape-html": "^1.0.3", 76 78 "exiftool": "^0.0.3", 77 79 "expo-server-sdk": "^3.14.0", 78 80 "express": "^4.21.2",
+23 -23
packages/backend/routes/users.ts
··· 17 17 UserOptions 18 18 } from '../models/index.js' 19 19 import { adminToken, authenticateToken } from '../utils/authenticateToken.js' 20 - 20 + import escape from 'escape-html'; 21 21 import generateRandomString from '../utils/generateRandomString.js' 22 22 import getIp from '../utils/getIP.js' 23 23 import sendEmail from '../utils/sendEmail.js' ··· 328 328 const emailSent = completeEnvironment.disableRequireSendEmail 329 329 ? true 330 330 : sendEmail({ 331 - email, 332 - subject: `Welcome to ${instanceHost}, please verify your email!`, 333 - body: `\ 331 + email, 332 + subject: `Welcome to ${instanceHost}, please verify your email!`, 333 + body: `\ 334 334 <h1>Welcome to ${instanceUrl}</h1> 335 335 <p>To activate your account, <a href="${activationLink}">verify your email</a>.</p> 336 336 <br /> 337 337 <p>If you can't see the link above, copy this link: ${activationLink}</p> 338 338 ` 339 - }) 339 + }) 340 340 await Promise.all([userWithEmail, emailSent]) 341 341 await generateUserKeyPairQueue.add('generateUserKeyPair', { 342 342 userId: (await userWithEmail).id ··· 647 647 const user = (await User.findByPk(req.jwtData?.userId as string)) as User 648 648 const password = req.body.oldPassword 649 649 const newPassword = req.body.newPassword 650 - if(await bcrypt.compare(password, user.password)) { 650 + if (await bcrypt.compare(password, user.password)) { 651 651 await updatePassword(user, newPassword) 652 - res.send({success: true}) 652 + res.send({ success: true }) 653 653 } 654 654 655 655 res.status(403) ··· 1075 1075 let followed = blog.isRemoteUser 1076 1076 ? blog.followingCount 1077 1077 : Follows.count({ 1078 - where: { 1079 - followerId: blog.id, 1080 - accepted: true 1081 - } 1082 - }) 1078 + where: { 1079 + followerId: blog.id, 1080 + accepted: true 1081 + } 1082 + }) 1083 1083 let followers = blog.isRemoteUser 1084 1084 ? blog.followerCount 1085 1085 : Follows.count({ 1086 - where: { 1087 - followedId: blog.id, 1088 - accepted: true 1089 - } 1090 - }) 1086 + where: { 1087 + followedId: blog.id, 1088 + accepted: true 1089 + } 1090 + }) 1091 1091 const publicOptions = UserOptions.findAll({ 1092 1092 where: { 1093 1093 userId: blog.id, ··· 1126 1126 1127 1127 const postCount = blog 1128 1128 ? await Post.count({ 1129 - where: { 1130 - userId: blog.id 1131 - } 1132 - }) 1129 + where: { 1130 + userId: blog.id 1131 + } 1132 + }) 1133 1133 : 0 1134 1134 1135 1135 followed = await followed ··· 1727 1727 1728 1728 const question = req.body.question ? req.body.question.substring(0, 10240) : '' 1729 1729 const ask = await Ask.create({ 1730 - question: question, 1730 + question: escape(question), 1731 1731 apObject: null, 1732 1732 creationIp: getIp(req), 1733 1733 answered: false, ··· 1963 1963 message = `Alias not detected` 1964 1964 } 1965 1965 } 1966 - } catch (error) {} 1966 + } catch (error) { } 1967 1967 } 1968 1968 1969 1969 res.status(success ? 200 : 500)
+34 -34
packages/backend/utils/activitypub/getPostThreadRecursive.ts
··· 46 46 ThreadViewPost, 47 47 } from "@atproto/api/dist/client/types/app/bsky/feed/defs.js"; 48 48 import { getAdminUser } from "../getAdminAndDeletedUser.js"; 49 + import escapeHTML from "escape-html"; 49 50 50 51 const updateMediaDataQueue = new Queue("processRemoteMediaData", { 51 52 connection: completeEnvironment.bullmqConnection, ··· 195 196 return { href: elem }; 196 197 }); 197 198 } 198 - let federatedAsks: fediverseTag[] = postPetition.tag?.filter((elem: fediverseTag) => elem.type === "AskQuestion" ) 199 - 199 + let federatedAsks: fediverseTag[] = postPetition.tag?.filter((elem: fediverseTag) => elem.type === "AskQuestion") 200 + 200 201 const fediEmojis: any[] = postPetition.tag?.filter( 201 202 (elem: fediverseTag) => elem.type === "Emoji" 202 203 ); 203 204 204 205 const privacy = getApObjectPrivacy(postPetition, remoteUser); 205 206 206 - let postTextContent = `${ 207 - postPetition.content ? postPetition.content : "" 208 - }`; // Fix for bridgy giving this as undefined 207 + let postTextContent = `${postPetition.content ? postPetition.content : "" 208 + }`; // Fix for bridgy giving this as undefined 209 209 if (postPetition.type == "Video") { 210 210 // peertube federation. We just add a link to the video, federating this is HELL 211 211 postTextContent = ··· 236 236 userId: 237 237 remoteUserServerBaned || remoteUser.banned 238 238 ? ( 239 - await deletedUser 240 - )?.id 239 + await deletedUser 240 + )?.id 241 241 : remoteUser.id, 242 242 description: remoteFile.name, 243 243 ipUpload: "IMAGE_FROM_OTHER_FEDIVERSE_INSTANCE", ··· 327 327 bskyUri = undefined; 328 328 } 329 329 } 330 - } catch {} 330 + } catch { } 331 331 } 332 332 } 333 333 } ··· 337 337 content_warning: postPetition.summary 338 338 ? postPetition.summary 339 339 : remoteUser.NSFW 340 - ? "User is marked as NSFW by this instance staff. Possible NSFW without tagging" 341 - : "", 340 + ? "User is marked as NSFW by this instance staff. Possible NSFW without tagging" 341 + : "", 342 342 createdAt: createdAt, 343 343 updatedAt: createdAt, 344 344 userId: ··· 354 354 bskyCid: postPetition.blueskyCid, 355 355 ...(bskyCid && bskyUri 356 356 ? { 357 - bskyCid, 358 - bskyUri, 359 - } 357 + bskyCid, 358 + bskyUri, 359 + } 360 360 : {}), 361 361 }; 362 362 ··· 478 478 newPost.setQuoted(quotes); 479 479 480 480 try { 481 - if(federatedAsks && federatedAsks.length) { 482 - await Ask.destroy({ 483 - where: { 484 - postId: newPost.id 485 - } 486 - }) 487 - const askTag = federatedAsks[0]; // only first ask sorryyy 488 - if(askTag.actor && askTag.representation && askTag.name) { 489 - const asker = askTag.actor != 'anonymous' ? await getRemoteActor(askTag.actor, user ) : undefined; 490 - const askText = askTag.name; 491 - const htmlToRemove = askTag.representation 492 - await Ask.create({ 493 - postId: newPost.id, 494 - userAsked: newPost.userId, 495 - userAsker: asker?.id, 496 - question: askText 481 + if (federatedAsks && federatedAsks.length) { 482 + await Ask.destroy({ 483 + where: { 484 + postId: newPost.id 485 + } 497 486 }) 498 - newPost.content = newPost.content.replace(htmlToRemove, '') 487 + const askTag = federatedAsks[0]; // only first ask sorryyy 488 + if (askTag.actor && askTag.representation && askTag.name) { 489 + const asker = askTag.actor != 'anonymous' ? await getRemoteActor(askTag.actor, user) : undefined; 490 + const askText = askTag.name; 491 + const htmlToRemove = askTag.representation 492 + await Ask.create({ 493 + postId: newPost.id, 494 + userAsked: newPost.userId, 495 + userAsker: asker?.id, 496 + question: escapeHTML(askText) 497 + }) 498 + newPost.content = newPost.content.replace(htmlToRemove, '') 499 + } 499 500 } 500 - } 501 501 } catch (error) { 502 502 logger.info({ 503 503 message: `Error setting wafrn ask`, ··· 529 529 } 530 530 try { 531 531 await addAsksToPost(newPost, fediTags); 532 - } catch (error) {} 532 + } catch (error) { } 533 533 if (mentionedUsersIds.length != 0) { 534 534 await processMentions(newPost, mentionedUsersIds); 535 535 } ··· 548 548 )[1]; 549 549 } 550 550 await Ask.create({ 551 - question: askContent, 551 + question: escapeHTML(askContent), 552 552 userAsker: newPost.userId, 553 553 userAsked: mentions[0].id, 554 554 answered: false, ··· 600 600 }, 601 601 } 602 602 ); 603 - } catch {} 603 + } catch { } 604 604 await QuestionPoll.update( 605 605 { 606 606 postId: newPost.id,
+2 -1
packages/backend/utils/maintenanceTasks/importCohost.ts
··· 6 6 import generateRandomString from '../generateRandomString.js' 7 7 import { Ask, Media, Post } from '../../models/index.js' 8 8 import { Privacy } from '../../models/post.js' 9 + import escapeHTML from 'escape-html' 9 10 const markdownConverter = new showdown.Converter({ 10 11 simplifiedAutoLink: true, 11 12 literalMidWordUnderscores: true, ··· 67 68 case 'ask': { 68 69 // TODO attach ask to post. 69 70 const askData = await Ask.create({ 70 - question: block.ask?.content, 71 + question: escapeHTML(block.ask?.content), 71 72 createdAt: new Date(block.ask?.sentAt as string), 72 73 updatedAt: new Date(block.ask?.sentAt as string), 73 74 answered: true,