ATlast — you'll never need to find your favorites on another platform again. Find your favs in the ATmosphere.
atproto
16
fork

Configure Feed

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

chore(api): add ESM type, test scripts, env docs

byarielm.fyi 2c3aee7b 5c14866a

verified
+320 -2
+8
packages/api/.env.example
··· 5 5 # Get these from your Bluesky OAuth app 6 6 OAUTH_PRIVATE_KEY= 7 7 8 + # Token Encryption (optional in development, required in production) 9 + # Generate with: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" 10 + # TOKEN_ENCRYPTION_KEY= 11 + 8 12 # Server configuration 9 13 PORT=3000 10 14 NODE_ENV=development 11 15 12 16 # Frontend URL (for CORS and redirects) 13 17 FRONTEND_URL=http://localhost:5173 18 + 19 + # Testing (optional) 20 + # Run: pnpm test:login to get a session ID 21 + # TEST_SESSION=
+6 -2
packages/api/package.json
··· 1 1 { 2 2 "name": "@atlast/api", 3 3 "version": "1.0.0", 4 + "type": "module", 4 5 "description": "", 5 6 "main": "index.js", 6 7 "scripts": { 7 8 "dev": "tsx watch src/server.ts", 8 9 "build": "tsc", 9 10 "start": "node dist/server.js", 10 - "test": "echo \"Error: no test specified\" && exit 1", 11 + "test": "vitest run", 12 + "test:watch": "vitest", 13 + "test:login": "tsx scripts/test-login.ts", 11 14 "test:db": "tsx src/db/test-connection.ts" 12 15 }, 13 16 "keywords": [], ··· 30 33 "@types/node": "^24.10.4", 31 34 "@types/pg": "^8.16.0", 32 35 "tsx": "^4.21.0", 33 - "typescript": "^5.9.3" 36 + "typescript": "^5.9.3", 37 + "vitest": "^3.2.4" 34 38 } 35 39 }
+306
pnpm-lock.yaml
··· 154 154 typescript: 155 155 specifier: ^5.9.3 156 156 version: 5.9.3 157 + vitest: 158 + specifier: ^3.2.4 159 + version: 3.2.4(@types/node@24.10.4) 157 160 158 161 packages/extension: 159 162 dependencies: ··· 1414 1417 '@types/babel__traverse@7.28.0': 1415 1418 resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 1416 1419 1420 + '@types/chai@5.2.3': 1421 + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} 1422 + 1417 1423 '@types/chrome@0.0.256': 1418 1424 resolution: {integrity: sha512-NleTQw4DNzhPwObLNuQ3i3nvX1rZ1mgnx5FNHc2KP+Cj1fgd3BrT5yQ6Xvs+7H0kNsYxCY+lxhiCwsqq3JwtEg==} 1425 + 1426 + '@types/deep-eql@4.0.2': 1427 + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 1419 1428 1420 1429 '@types/estree@1.0.8': 1421 1430 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} ··· 1561 1570 peerDependencies: 1562 1571 vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 1563 1572 1573 + '@vitest/expect@3.2.4': 1574 + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} 1575 + 1576 + '@vitest/mocker@3.2.4': 1577 + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} 1578 + peerDependencies: 1579 + msw: ^2.4.9 1580 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 1581 + peerDependenciesMeta: 1582 + msw: 1583 + optional: true 1584 + vite: 1585 + optional: true 1586 + 1587 + '@vitest/pretty-format@3.2.4': 1588 + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} 1589 + 1590 + '@vitest/runner@3.2.4': 1591 + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} 1592 + 1593 + '@vitest/snapshot@3.2.4': 1594 + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} 1595 + 1596 + '@vitest/spy@3.2.4': 1597 + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} 1598 + 1599 + '@vitest/utils@3.2.4': 1600 + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} 1601 + 1564 1602 '@vue/compiler-core@3.5.26': 1565 1603 resolution: {integrity: sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==} 1566 1604 ··· 1706 1744 resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 1707 1745 engines: {node: '>= 0.4'} 1708 1746 1747 + assertion-error@2.0.1: 1748 + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 1749 + engines: {node: '>=12'} 1750 + 1709 1751 ast-module-types@6.0.1: 1710 1752 resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} 1711 1753 engines: {node: '>=18'} ··· 1812 1854 bullmq@5.66.5: 1813 1855 resolution: {integrity: sha512-DC1E7P03L+TfNHv+2SGxwNYvtb0oJPODWSKkWdfis0heU5zFW16vjM7fCjwlxMdGWw2w28EI3mTRfYLEHeQQSw==} 1814 1856 1857 + cac@6.7.14: 1858 + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 1859 + engines: {node: '>=8'} 1860 + 1815 1861 call-bind-apply-helpers@1.0.2: 1816 1862 resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 1817 1863 engines: {node: '>= 0.4'} ··· 1845 1891 caniuse-lite@1.0.30001761: 1846 1892 resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} 1847 1893 1894 + chai@5.3.3: 1895 + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} 1896 + engines: {node: '>=18'} 1897 + 1848 1898 chalk@4.1.2: 1849 1899 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1850 1900 engines: {node: '>=10'} 1901 + 1902 + check-error@2.1.3: 1903 + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} 1904 + engines: {node: '>= 16'} 1851 1905 1852 1906 chokidar@3.6.0: 1853 1907 resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} ··· 2055 2109 2056 2110 decache@4.6.2: 2057 2111 resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==} 2112 + 2113 + deep-eql@5.0.2: 2114 + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 2115 + engines: {node: '>=6'} 2058 2116 2059 2117 deep-is@0.1.4: 2060 2118 resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} ··· 2347 2405 estree-walker@2.0.2: 2348 2406 resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 2349 2407 2408 + estree-walker@3.0.3: 2409 + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 2410 + 2350 2411 esutils@2.0.3: 2351 2412 resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 2352 2413 engines: {node: '>=0.10.0'} ··· 2365 2426 execa@8.0.1: 2366 2427 resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 2367 2428 engines: {node: '>=16.17'} 2429 + 2430 + expect-type@1.3.0: 2431 + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} 2432 + engines: {node: '>=12.0.0'} 2368 2433 2369 2434 extract-zip@2.0.1: 2370 2435 resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} ··· 2837 2902 js-tokens@4.0.0: 2838 2903 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2839 2904 2905 + js-tokens@9.0.1: 2906 + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 2907 + 2840 2908 js-yaml@4.1.1: 2841 2909 resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} 2842 2910 hasBin: true ··· 2958 3026 loose-envify@1.4.0: 2959 3027 resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 2960 3028 hasBin: true 3029 + 3030 + loupe@3.2.1: 3031 + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} 2961 3032 2962 3033 lower-case@2.0.2: 2963 3034 resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} ··· 3257 3328 resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 3258 3329 engines: {node: '>=8'} 3259 3330 3331 + pathe@2.0.3: 3332 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 3333 + 3334 + pathval@2.0.1: 3335 + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} 3336 + engines: {node: '>= 14.16'} 3337 + 3260 3338 pend@1.2.0: 3261 3339 resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} 3262 3340 ··· 3857 3935 resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 3858 3936 engines: {node: '>= 0.4'} 3859 3937 3938 + siginfo@2.0.0: 3939 + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 3940 + 3860 3941 signal-exit@4.1.0: 3861 3942 resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 3862 3943 engines: {node: '>=14'} ··· 3898 3979 stack-trace@0.0.10: 3899 3980 resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} 3900 3981 3982 + stackback@0.0.2: 3983 + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 3984 + 3901 3985 standard-as-callback@2.1.0: 3902 3986 resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} 3987 + 3988 + std-env@3.10.0: 3989 + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 3903 3990 3904 3991 stop-iteration-iterator@1.1.0: 3905 3992 resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} ··· 3961 4048 resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 3962 4049 engines: {node: '>=8'} 3963 4050 4051 + strip-literal@3.1.0: 4052 + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} 4053 + 3964 4054 strip-outer@1.0.1: 3965 4055 resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} 3966 4056 engines: {node: '>=0.10.0'} ··· 4017 4107 thenify@3.3.1: 4018 4108 resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 4019 4109 4110 + tinybench@2.9.0: 4111 + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 4112 + 4113 + tinyexec@0.3.2: 4114 + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 4115 + 4020 4116 tinyglobby@0.2.15: 4021 4117 resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 4022 4118 engines: {node: '>=12.0.0'} 4119 + 4120 + tinypool@1.1.1: 4121 + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} 4122 + engines: {node: ^18.0.0 || >=20.0.0} 4123 + 4124 + tinyrainbow@2.0.0: 4125 + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 4126 + engines: {node: '>=14.0.0'} 4127 + 4128 + tinyspy@4.0.4: 4129 + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} 4130 + engines: {node: '>=14.0.0'} 4023 4131 4024 4132 tlds@1.261.0: 4025 4133 resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} ··· 4162 4270 validate-npm-package-license@3.0.4: 4163 4271 resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 4164 4272 4273 + vite-node@3.2.4: 4274 + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} 4275 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 4276 + hasBin: true 4277 + 4165 4278 vite-plugin-svgr@4.5.0: 4166 4279 resolution: {integrity: sha512-W+uoSpmVkSmNOGPSsDCWVW/DDAyv+9fap9AZXBvWiQqrboJ08j2vh0tFxTD/LjwqwAd3yYSVJgm54S/1GhbdnA==} 4167 4280 peerDependencies: ··· 4198 4311 terser: 4199 4312 optional: true 4200 4313 4314 + vitest@3.2.4: 4315 + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} 4316 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 4317 + hasBin: true 4318 + peerDependencies: 4319 + '@edge-runtime/vm': '*' 4320 + '@types/debug': ^4.1.12 4321 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 4322 + '@vitest/browser': 3.2.4 4323 + '@vitest/ui': 3.2.4 4324 + happy-dom: '*' 4325 + jsdom: '*' 4326 + peerDependenciesMeta: 4327 + '@edge-runtime/vm': 4328 + optional: true 4329 + '@types/debug': 4330 + optional: true 4331 + '@types/node': 4332 + optional: true 4333 + '@vitest/browser': 4334 + optional: true 4335 + '@vitest/ui': 4336 + optional: true 4337 + happy-dom: 4338 + optional: true 4339 + jsdom: 4340 + optional: true 4341 + 4201 4342 webextension-polyfill@0.12.0: 4202 4343 resolution: {integrity: sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==} 4203 4344 ··· 4226 4367 which@2.0.2: 4227 4368 resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 4228 4369 engines: {node: '>= 8'} 4370 + hasBin: true 4371 + 4372 + why-is-node-running@2.3.0: 4373 + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 4374 + engines: {node: '>=8'} 4229 4375 hasBin: true 4230 4376 4231 4377 winston-transport@4.9.0: ··· 5318 5464 dependencies: 5319 5465 '@babel/types': 7.28.5 5320 5466 5467 + '@types/chai@5.2.3': 5468 + dependencies: 5469 + '@types/deep-eql': 4.0.2 5470 + assertion-error: 2.0.1 5471 + 5321 5472 '@types/chrome@0.0.256': 5322 5473 dependencies: 5323 5474 '@types/filesystem': 0.0.36 5324 5475 '@types/har-format': 1.2.16 5476 + 5477 + '@types/deep-eql@4.0.2': {} 5325 5478 5326 5479 '@types/estree@1.0.8': {} 5327 5480 ··· 5529 5682 transitivePeerDependencies: 5530 5683 - supports-color 5531 5684 5685 + '@vitest/expect@3.2.4': 5686 + dependencies: 5687 + '@types/chai': 5.2.3 5688 + '@vitest/spy': 3.2.4 5689 + '@vitest/utils': 3.2.4 5690 + chai: 5.3.3 5691 + tinyrainbow: 2.0.0 5692 + 5693 + '@vitest/mocker@3.2.4(vite@5.4.21(@types/node@24.10.4))': 5694 + dependencies: 5695 + '@vitest/spy': 3.2.4 5696 + estree-walker: 3.0.3 5697 + magic-string: 0.30.21 5698 + optionalDependencies: 5699 + vite: 5.4.21(@types/node@24.10.4) 5700 + 5701 + '@vitest/pretty-format@3.2.4': 5702 + dependencies: 5703 + tinyrainbow: 2.0.0 5704 + 5705 + '@vitest/runner@3.2.4': 5706 + dependencies: 5707 + '@vitest/utils': 3.2.4 5708 + pathe: 2.0.3 5709 + strip-literal: 3.1.0 5710 + 5711 + '@vitest/snapshot@3.2.4': 5712 + dependencies: 5713 + '@vitest/pretty-format': 3.2.4 5714 + magic-string: 0.30.21 5715 + pathe: 2.0.3 5716 + 5717 + '@vitest/spy@3.2.4': 5718 + dependencies: 5719 + tinyspy: 4.0.4 5720 + 5721 + '@vitest/utils@3.2.4': 5722 + dependencies: 5723 + '@vitest/pretty-format': 3.2.4 5724 + loupe: 3.2.1 5725 + tinyrainbow: 2.0.0 5726 + 5532 5727 '@vue/compiler-core@3.5.26': 5533 5728 dependencies: 5534 5729 '@babel/parser': 7.28.5 ··· 5724 5919 get-intrinsic: 1.3.0 5725 5920 is-array-buffer: 3.0.5 5726 5921 5922 + assertion-error@2.0.1: {} 5923 + 5727 5924 ast-module-types@6.0.1: {} 5728 5925 5729 5926 ast-types-flow@0.0.8: {} ··· 5815 6012 transitivePeerDependencies: 5816 6013 - supports-color 5817 6014 6015 + cac@6.7.14: {} 6016 + 5818 6017 call-bind-apply-helpers@1.0.2: 5819 6018 dependencies: 5820 6019 es-errors: 1.3.0 ··· 5849 6048 5850 6049 caniuse-lite@1.0.30001761: {} 5851 6050 6051 + chai@5.3.3: 6052 + dependencies: 6053 + assertion-error: 2.0.1 6054 + check-error: 2.1.3 6055 + deep-eql: 5.0.2 6056 + loupe: 3.2.1 6057 + pathval: 2.0.1 6058 + 5852 6059 chalk@4.1.2: 5853 6060 dependencies: 5854 6061 ansi-styles: 4.3.0 5855 6062 supports-color: 7.2.0 6063 + 6064 + check-error@2.1.3: {} 5856 6065 5857 6066 chokidar@3.6.0: 5858 6067 dependencies: ··· 6073 6282 decache@4.6.2: 6074 6283 dependencies: 6075 6284 callsite: 1.0.0 6285 + 6286 + deep-eql@5.0.2: {} 6076 6287 6077 6288 deep-is@0.1.4: {} 6078 6289 ··· 6548 6759 6549 6760 estree-walker@2.0.2: {} 6550 6761 6762 + estree-walker@3.0.3: 6763 + dependencies: 6764 + '@types/estree': 1.0.8 6765 + 6551 6766 esutils@2.0.3: {} 6552 6767 6553 6768 event-target-shim@5.0.1: {} ··· 6571 6786 onetime: 6.0.0 6572 6787 signal-exit: 4.1.0 6573 6788 strip-final-newline: 3.0.0 6789 + 6790 + expect-type@1.3.0: {} 6574 6791 6575 6792 extract-zip@2.0.1: 6576 6793 dependencies: ··· 7055 7272 7056 7273 js-tokens@4.0.0: {} 7057 7274 7275 + js-tokens@9.0.1: {} 7276 + 7058 7277 js-yaml@4.1.1: 7059 7278 dependencies: 7060 7279 argparse: 2.0.1 ··· 7168 7387 loose-envify@1.4.0: 7169 7388 dependencies: 7170 7389 js-tokens: 4.0.0 7390 + 7391 + loupe@3.2.1: {} 7171 7392 7172 7393 lower-case@2.0.2: 7173 7394 dependencies: ··· 7456 7677 7457 7678 path-type@4.0.0: {} 7458 7679 7680 + pathe@2.0.3: {} 7681 + 7682 + pathval@2.0.1: {} 7683 + 7459 7684 pend@1.2.0: {} 7460 7685 7461 7686 pg-cloudflare@1.3.0: ··· 8026 8251 side-channel-map: 1.0.1 8027 8252 side-channel-weakmap: 1.0.2 8028 8253 8254 + siginfo@2.0.0: {} 8255 + 8029 8256 signal-exit@4.1.0: {} 8030 8257 8031 8258 slash@3.0.0: {} ··· 8062 8289 8063 8290 stack-trace@0.0.10: {} 8064 8291 8292 + stackback@0.0.2: {} 8293 + 8065 8294 standard-as-callback@2.1.0: {} 8066 8295 8296 + std-env@3.10.0: {} 8297 + 8067 8298 stop-iteration-iterator@1.1.0: 8068 8299 dependencies: 8069 8300 es-errors: 1.3.0 ··· 8159 8390 strip-final-newline@3.0.0: {} 8160 8391 8161 8392 strip-json-comments@3.1.1: {} 8393 + 8394 + strip-literal@3.1.0: 8395 + dependencies: 8396 + js-tokens: 9.0.1 8162 8397 8163 8398 strip-outer@1.0.1: 8164 8399 dependencies: ··· 8259 8494 dependencies: 8260 8495 any-promise: 1.3.0 8261 8496 8497 + tinybench@2.9.0: {} 8498 + 8499 + tinyexec@0.3.2: {} 8500 + 8262 8501 tinyglobby@0.2.15: 8263 8502 dependencies: 8264 8503 fdir: 6.5.0(picomatch@4.0.3) 8265 8504 picomatch: 4.0.3 8266 8505 8506 + tinypool@1.1.1: {} 8507 + 8508 + tinyrainbow@2.0.0: {} 8509 + 8510 + tinyspy@4.0.4: {} 8511 + 8267 8512 tlds@1.261.0: {} 8268 8513 8269 8514 tmp-promise@3.0.3: ··· 8398 8643 spdx-correct: 3.2.0 8399 8644 spdx-expression-parse: 3.0.1 8400 8645 8646 + vite-node@3.2.4(@types/node@24.10.4): 8647 + dependencies: 8648 + cac: 6.7.14 8649 + debug: 4.4.3 8650 + es-module-lexer: 1.7.0 8651 + pathe: 2.0.3 8652 + vite: 5.4.21(@types/node@24.10.4) 8653 + transitivePeerDependencies: 8654 + - '@types/node' 8655 + - less 8656 + - lightningcss 8657 + - sass 8658 + - sass-embedded 8659 + - stylus 8660 + - sugarss 8661 + - supports-color 8662 + - terser 8663 + 8401 8664 vite-plugin-svgr@4.5.0(rollup@4.54.0)(typescript@5.9.3)(vite@5.4.21(@types/node@24.10.4)): 8402 8665 dependencies: 8403 8666 '@rollup/pluginutils': 5.3.0(rollup@4.54.0) ··· 8418 8681 '@types/node': 24.10.4 8419 8682 fsevents: 2.3.3 8420 8683 8684 + vitest@3.2.4(@types/node@24.10.4): 8685 + dependencies: 8686 + '@types/chai': 5.2.3 8687 + '@vitest/expect': 3.2.4 8688 + '@vitest/mocker': 3.2.4(vite@5.4.21(@types/node@24.10.4)) 8689 + '@vitest/pretty-format': 3.2.4 8690 + '@vitest/runner': 3.2.4 8691 + '@vitest/snapshot': 3.2.4 8692 + '@vitest/spy': 3.2.4 8693 + '@vitest/utils': 3.2.4 8694 + chai: 5.3.3 8695 + debug: 4.4.3 8696 + expect-type: 1.3.0 8697 + magic-string: 0.30.21 8698 + pathe: 2.0.3 8699 + picomatch: 4.0.3 8700 + std-env: 3.10.0 8701 + tinybench: 2.9.0 8702 + tinyexec: 0.3.2 8703 + tinyglobby: 0.2.15 8704 + tinypool: 1.1.1 8705 + tinyrainbow: 2.0.0 8706 + vite: 5.4.21(@types/node@24.10.4) 8707 + vite-node: 3.2.4(@types/node@24.10.4) 8708 + why-is-node-running: 2.3.0 8709 + optionalDependencies: 8710 + '@types/node': 24.10.4 8711 + transitivePeerDependencies: 8712 + - less 8713 + - lightningcss 8714 + - msw 8715 + - sass 8716 + - sass-embedded 8717 + - stylus 8718 + - sugarss 8719 + - supports-color 8720 + - terser 8721 + 8421 8722 webextension-polyfill@0.12.0: {} 8422 8723 8423 8724 webidl-conversions@3.0.1: {} ··· 8471 8772 which@2.0.2: 8472 8773 dependencies: 8473 8774 isexe: 2.0.0 8775 + 8776 + why-is-node-running@2.3.0: 8777 + dependencies: 8778 + siginfo: 2.0.0 8779 + stackback: 0.0.2 8474 8780 8475 8781 winston-transport@4.9.0: 8476 8782 dependencies: