[READ-ONLY] Mirror of https://github.com/danielroe/roe.dev. This is the code and content for my personal website, built in Nuxt. roe.dev
0

Configure Feed

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

feat: add linkedin token generator

+570 -979
+3
nuxt.config.ts
··· 237 237 }, 238 238 239 239 typescript: { 240 + nodeTsConfig: { 241 + include: ['../scripts'], 242 + }, 240 243 hoist: ['vite'], 241 244 }, 242 245
+4 -1
package.json
··· 16 16 "test:e2e": "playwright test test/e2e", 17 17 "test:e2e:update": "docker run --rm --network host -v $(pwd):/work/ -v /tmp/playwright-nm:/work/node_modules -w /work/ -it mcr.microsoft.com/playwright:v1.52.0-noble bash -c 'corepack enable && pnpm i && pnpm playwright test test/e2e --update-snapshots'", 18 18 "postinstall": "nuxt prepare && pnpm simple-git-hooks install", 19 - "auth:youtube": "node --env-file=.env scripts/youtube-auth.mjs", 19 + "auth:linkedin": "node --env-file=.env scripts/linkedin-auth.ts", 20 + "auth:youtube": "node --env-file=.env scripts/youtube-auth.ts", 21 + "auth:youtube:refresh": "node --env-file=.env scripts/youtube-auth.ts refresh", 20 22 "import-streambeats": "node --env-file=.env scripts/import-streambeats.mjs", 21 23 "import-streambeats:dry-run": "node --env-file=.env scripts/import-streambeats.mjs --dry-run" 22 24 }, ··· 48 50 "@unocss/postcss": "^66.1.3", 49 51 "@unocss/reset": "^66.1.3", 50 52 "@vercel/blob": "^1.1.1", 53 + "citty": "^0.1.6", 51 54 "defu": "^6.1.4", 52 55 "exsolve": "^1.0.5", 53 56 "feed": "^5.1.0",
+91 -911
pnpm-lock.yaml
··· 88 88 '@vercel/blob': 89 89 specifier: ^1.1.1 90 90 version: 1.1.1 91 + citty: 92 + specifier: ^0.1.6 93 + version: 0.1.6 91 94 defu: 92 95 specifier: ^6.1.4 93 96 version: 6.1.4 ··· 372 375 resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 373 376 engines: {node: '>=6.9.0'} 374 377 375 - '@babel/compat-data@7.28.0': 376 - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} 377 - engines: {node: '>=6.9.0'} 378 - 379 378 '@babel/compat-data@7.28.4': 380 379 resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} 381 380 engines: {node: '>=6.9.0'} ··· 477 476 478 477 '@babel/parser@7.27.7': 479 478 resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} 480 - engines: {node: '>=6.0.0'} 481 - hasBin: true 482 - 483 - '@babel/parser@7.28.3': 484 - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} 485 479 engines: {node: '>=6.0.0'} 486 480 hasBin: true 487 481 ··· 947 941 948 942 '@babel/traverse@7.28.4': 949 943 resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} 950 - engines: {node: '>=6.9.0'} 951 - 952 - '@babel/types@7.28.2': 953 - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} 954 944 engines: {node: '>=6.9.0'} 955 945 956 946 '@babel/types@7.28.4': ··· 1221 1211 cpu: [ppc64] 1222 1212 os: [aix] 1223 1213 1224 - '@esbuild/aix-ppc64@0.25.8': 1225 - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} 1226 - engines: {node: '>=18'} 1227 - cpu: [ppc64] 1228 - os: [aix] 1229 - 1230 1214 '@esbuild/aix-ppc64@0.25.9': 1231 1215 resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} 1232 1216 engines: {node: '>=18'} ··· 1239 1223 cpu: [arm64] 1240 1224 os: [android] 1241 1225 1242 - '@esbuild/android-arm64@0.25.8': 1243 - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} 1244 - engines: {node: '>=18'} 1245 - cpu: [arm64] 1246 - os: [android] 1247 - 1248 1226 '@esbuild/android-arm64@0.25.9': 1249 1227 resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} 1250 1228 engines: {node: '>=18'} ··· 1257 1235 cpu: [arm] 1258 1236 os: [android] 1259 1237 1260 - '@esbuild/android-arm@0.25.8': 1261 - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} 1262 - engines: {node: '>=18'} 1263 - cpu: [arm] 1264 - os: [android] 1265 - 1266 1238 '@esbuild/android-arm@0.25.9': 1267 1239 resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} 1268 1240 engines: {node: '>=18'} ··· 1272 1244 '@esbuild/android-x64@0.21.5': 1273 1245 resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 1274 1246 engines: {node: '>=12'} 1275 - cpu: [x64] 1276 - os: [android] 1277 - 1278 - '@esbuild/android-x64@0.25.8': 1279 - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} 1280 - engines: {node: '>=18'} 1281 1247 cpu: [x64] 1282 1248 os: [android] 1283 1249 ··· 1293 1259 cpu: [arm64] 1294 1260 os: [darwin] 1295 1261 1296 - '@esbuild/darwin-arm64@0.25.8': 1297 - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} 1298 - engines: {node: '>=18'} 1299 - cpu: [arm64] 1300 - os: [darwin] 1301 - 1302 1262 '@esbuild/darwin-arm64@0.25.9': 1303 1263 resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} 1304 1264 engines: {node: '>=18'} ··· 1311 1271 cpu: [x64] 1312 1272 os: [darwin] 1313 1273 1314 - '@esbuild/darwin-x64@0.25.8': 1315 - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} 1316 - engines: {node: '>=18'} 1317 - cpu: [x64] 1318 - os: [darwin] 1319 - 1320 1274 '@esbuild/darwin-x64@0.25.9': 1321 1275 resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} 1322 1276 engines: {node: '>=18'} ··· 1329 1283 cpu: [arm64] 1330 1284 os: [freebsd] 1331 1285 1332 - '@esbuild/freebsd-arm64@0.25.8': 1333 - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} 1334 - engines: {node: '>=18'} 1335 - cpu: [arm64] 1336 - os: [freebsd] 1337 - 1338 1286 '@esbuild/freebsd-arm64@0.25.9': 1339 1287 resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} 1340 1288 engines: {node: '>=18'} ··· 1347 1295 cpu: [x64] 1348 1296 os: [freebsd] 1349 1297 1350 - '@esbuild/freebsd-x64@0.25.8': 1351 - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} 1352 - engines: {node: '>=18'} 1353 - cpu: [x64] 1354 - os: [freebsd] 1355 - 1356 1298 '@esbuild/freebsd-x64@0.25.9': 1357 1299 resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} 1358 1300 engines: {node: '>=18'} ··· 1365 1307 cpu: [arm64] 1366 1308 os: [linux] 1367 1309 1368 - '@esbuild/linux-arm64@0.25.8': 1369 - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} 1370 - engines: {node: '>=18'} 1371 - cpu: [arm64] 1372 - os: [linux] 1373 - 1374 1310 '@esbuild/linux-arm64@0.25.9': 1375 1311 resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} 1376 1312 engines: {node: '>=18'} ··· 1383 1319 cpu: [arm] 1384 1320 os: [linux] 1385 1321 1386 - '@esbuild/linux-arm@0.25.8': 1387 - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} 1388 - engines: {node: '>=18'} 1389 - cpu: [arm] 1390 - os: [linux] 1391 - 1392 1322 '@esbuild/linux-arm@0.25.9': 1393 1323 resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} 1394 1324 engines: {node: '>=18'} ··· 1401 1331 cpu: [ia32] 1402 1332 os: [linux] 1403 1333 1404 - '@esbuild/linux-ia32@0.25.8': 1405 - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} 1406 - engines: {node: '>=18'} 1407 - cpu: [ia32] 1408 - os: [linux] 1409 - 1410 1334 '@esbuild/linux-ia32@0.25.9': 1411 1335 resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} 1412 1336 engines: {node: '>=18'} ··· 1419 1343 cpu: [loong64] 1420 1344 os: [linux] 1421 1345 1422 - '@esbuild/linux-loong64@0.25.8': 1423 - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} 1424 - engines: {node: '>=18'} 1425 - cpu: [loong64] 1426 - os: [linux] 1427 - 1428 1346 '@esbuild/linux-loong64@0.25.9': 1429 1347 resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} 1430 1348 engines: {node: '>=18'} ··· 1437 1355 cpu: [mips64el] 1438 1356 os: [linux] 1439 1357 1440 - '@esbuild/linux-mips64el@0.25.8': 1441 - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} 1442 - engines: {node: '>=18'} 1443 - cpu: [mips64el] 1444 - os: [linux] 1445 - 1446 1358 '@esbuild/linux-mips64el@0.25.9': 1447 1359 resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} 1448 1360 engines: {node: '>=18'} ··· 1455 1367 cpu: [ppc64] 1456 1368 os: [linux] 1457 1369 1458 - '@esbuild/linux-ppc64@0.25.8': 1459 - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} 1460 - engines: {node: '>=18'} 1461 - cpu: [ppc64] 1462 - os: [linux] 1463 - 1464 1370 '@esbuild/linux-ppc64@0.25.9': 1465 1371 resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} 1466 1372 engines: {node: '>=18'} ··· 1473 1379 cpu: [riscv64] 1474 1380 os: [linux] 1475 1381 1476 - '@esbuild/linux-riscv64@0.25.8': 1477 - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} 1478 - engines: {node: '>=18'} 1479 - cpu: [riscv64] 1480 - os: [linux] 1481 - 1482 1382 '@esbuild/linux-riscv64@0.25.9': 1483 1383 resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} 1484 1384 engines: {node: '>=18'} ··· 1491 1391 cpu: [s390x] 1492 1392 os: [linux] 1493 1393 1494 - '@esbuild/linux-s390x@0.25.8': 1495 - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} 1496 - engines: {node: '>=18'} 1497 - cpu: [s390x] 1498 - os: [linux] 1499 - 1500 1394 '@esbuild/linux-s390x@0.25.9': 1501 1395 resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} 1502 1396 engines: {node: '>=18'} ··· 1509 1403 cpu: [x64] 1510 1404 os: [linux] 1511 1405 1512 - '@esbuild/linux-x64@0.25.8': 1513 - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} 1514 - engines: {node: '>=18'} 1515 - cpu: [x64] 1516 - os: [linux] 1517 - 1518 1406 '@esbuild/linux-x64@0.25.9': 1519 1407 resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} 1520 1408 engines: {node: '>=18'} 1521 1409 cpu: [x64] 1522 1410 os: [linux] 1523 1411 1524 - '@esbuild/netbsd-arm64@0.25.8': 1525 - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} 1526 - engines: {node: '>=18'} 1527 - cpu: [arm64] 1528 - os: [netbsd] 1529 - 1530 1412 '@esbuild/netbsd-arm64@0.25.9': 1531 1413 resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} 1532 1414 engines: {node: '>=18'} ··· 1539 1421 cpu: [x64] 1540 1422 os: [netbsd] 1541 1423 1542 - '@esbuild/netbsd-x64@0.25.8': 1543 - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} 1544 - engines: {node: '>=18'} 1545 - cpu: [x64] 1546 - os: [netbsd] 1547 - 1548 1424 '@esbuild/netbsd-x64@0.25.9': 1549 1425 resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} 1550 1426 engines: {node: '>=18'} 1551 1427 cpu: [x64] 1552 1428 os: [netbsd] 1553 1429 1554 - '@esbuild/openbsd-arm64@0.25.8': 1555 - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} 1556 - engines: {node: '>=18'} 1557 - cpu: [arm64] 1558 - os: [openbsd] 1559 - 1560 1430 '@esbuild/openbsd-arm64@0.25.9': 1561 1431 resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} 1562 1432 engines: {node: '>=18'} ··· 1569 1439 cpu: [x64] 1570 1440 os: [openbsd] 1571 1441 1572 - '@esbuild/openbsd-x64@0.25.8': 1573 - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} 1574 - engines: {node: '>=18'} 1575 - cpu: [x64] 1576 - os: [openbsd] 1577 - 1578 1442 '@esbuild/openbsd-x64@0.25.9': 1579 1443 resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} 1580 1444 engines: {node: '>=18'} 1581 1445 cpu: [x64] 1582 1446 os: [openbsd] 1583 1447 1584 - '@esbuild/openharmony-arm64@0.25.8': 1585 - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} 1586 - engines: {node: '>=18'} 1587 - cpu: [arm64] 1588 - os: [openharmony] 1589 - 1590 1448 '@esbuild/openharmony-arm64@0.25.9': 1591 1449 resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} 1592 1450 engines: {node: '>=18'} ··· 1596 1454 '@esbuild/sunos-x64@0.21.5': 1597 1455 resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 1598 1456 engines: {node: '>=12'} 1599 - cpu: [x64] 1600 - os: [sunos] 1601 - 1602 - '@esbuild/sunos-x64@0.25.8': 1603 - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} 1604 - engines: {node: '>=18'} 1605 1457 cpu: [x64] 1606 1458 os: [sunos] 1607 1459 ··· 1617 1469 cpu: [arm64] 1618 1470 os: [win32] 1619 1471 1620 - '@esbuild/win32-arm64@0.25.8': 1621 - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} 1622 - engines: {node: '>=18'} 1623 - cpu: [arm64] 1624 - os: [win32] 1625 - 1626 1472 '@esbuild/win32-arm64@0.25.9': 1627 1473 resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} 1628 1474 engines: {node: '>=18'} ··· 1635 1481 cpu: [ia32] 1636 1482 os: [win32] 1637 1483 1638 - '@esbuild/win32-ia32@0.25.8': 1639 - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} 1640 - engines: {node: '>=18'} 1641 - cpu: [ia32] 1642 - os: [win32] 1643 - 1644 1484 '@esbuild/win32-ia32@0.25.9': 1645 1485 resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} 1646 1486 engines: {node: '>=18'} ··· 1653 1493 cpu: [x64] 1654 1494 os: [win32] 1655 1495 1656 - '@esbuild/win32-x64@0.25.8': 1657 - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} 1658 - engines: {node: '>=18'} 1659 - cpu: [x64] 1660 - os: [win32] 1661 - 1662 1496 '@esbuild/win32-x64@0.25.9': 1663 1497 resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} 1664 1498 engines: {node: '>=18'} 1665 1499 cpu: [x64] 1666 1500 os: [win32] 1667 - 1668 - '@eslint-community/eslint-utils@4.7.0': 1669 - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} 1670 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1671 - peerDependencies: 1672 - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 1673 1501 1674 1502 '@eslint-community/eslint-utils@4.8.0': 1675 1503 resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} ··· 1710 1538 1711 1539 '@eslint/eslintrc@3.3.1': 1712 1540 resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 1713 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1714 - 1715 - '@eslint/js@9.34.0': 1716 - resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} 1717 1541 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1718 1542 1719 1543 '@eslint/js@9.35.0': ··· 2094 1918 2095 1919 '@nuxt/devalue@2.0.2': 2096 1920 resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} 2097 - 2098 - '@nuxt/devtools-kit@2.6.2': 2099 - resolution: {integrity: sha512-esErdMQ0u3wXXogKQ3IE2m0fxv52w6CzPsfsXF4o5ZVrUQrQaH58ygupDAQTYdlGTgtqmEA6KkHTGG5cM6yxeg==} 2100 - peerDependencies: 2101 - vite: '>=6.0' 2102 1921 2103 1922 '@nuxt/devtools-kit@2.6.3': 2104 1923 resolution: {integrity: sha512-cDmai3Ws6AbJlYy1p4CCwc718cfbqtAjXe6oEc6q03zoJnvX1PsvKUfmU+yuowfqTSR6DZRmH4SjCBWuMjgaKQ==} ··· 3119 2938 react: ^16.9 || ^17 || ^18 || ^19 3120 2939 react-dom: ^16.9 || ^17 || ^18 || ^19 3121 2940 3122 - '@sanity/insert-menu@2.0.1': 3123 - resolution: {integrity: sha512-PBHua3RJ+YAH71YJwDgh31XROoytl28jipaJk3H2i9Btt0GwzpyaCKaqRTNWsf4k+dQ4HMFw1URrtt4WCCQTPw==} 3124 - engines: {node: '>=20.19'} 3125 - peerDependencies: 3126 - '@sanity/types': '*' 3127 - react: ^18.3 || >=19.0.0-rc 3128 - react-dom: ^18.3 || >=19.0.0-rc 3129 - react-is: ^18.3 || >=19.0.0-rc 3130 - 3131 2941 '@sanity/insert-menu@2.0.2': 3132 2942 resolution: {integrity: sha512-ltR9DNOIAQRbwuch68U3f4YM+7rTqI5WAkMle/T/VBLe3peYeqL9QyOLthynR3gfZLZR8jFU8nryH5c2xZmOxg==} 3133 2943 engines: {node: '>=20.19'} ··· 3180 2990 3181 2991 '@sanity/mutator@4.6.1': 3182 2992 resolution: {integrity: sha512-e7dB9APjAAPBlxTdEG+idWIv4EOMagZ48S7IQO977ngAt/44zU1lQj/FuVohXVBnK8737kJY0YhSkWOkeJCGtA==} 3183 - 3184 - '@sanity/presentation-comlink@1.0.28': 3185 - resolution: {integrity: sha512-3LqQQ9MZy4Vut65XYsW0mPFF3gdv/8OKQy3m7zuSIc1HkQNbSLqbD+o7KaBfDnpXQxfk6HXS2zJyrJRO87us1A==} 3186 - engines: {node: '>=18'} 3187 - peerDependencies: 3188 - '@sanity/client': ^7.8.2 3189 2993 3190 2994 '@sanity/presentation-comlink@1.0.29': 3191 2995 resolution: {integrity: sha512-IPXRqlgDEmuGMfgeovyQqgVt9X49OlZs8gOdeKM7lSj/KIBzx/X+m6MtnDdUOZpYLqROF2mIbYTmyyo3PsNmkg==} ··· 3271 3075 react: ^18 || ^19.0.0 3272 3076 styled-components: ^6.1.15 3273 3077 3274 - '@sanity/visual-editing-csm@2.0.22': 3275 - resolution: {integrity: sha512-bXV7wAit5EvCIFdWzYieMzN+8BrsLCIoMWbJpguHn0zLRZ42QBVlpDHe+UwrF+ul4uiAQrhMn7TLomrv762z4g==} 3276 - engines: {node: '>=18'} 3277 - peerDependencies: 3278 - '@sanity/client': ^7.8.1 3279 - 3280 3078 '@sanity/visual-editing-csm@2.0.23': 3281 3079 resolution: {integrity: sha512-R4r67uphMwAWkdKbA/Uveay0+q7JzDkhb/t8JPuDxteSAkM0JxbJ3cSSN7CxPMHvCVNksFPpMfCq82MalVRyCw==} 3282 3080 engines: {node: '>=18'} 3283 3081 peerDependencies: 3284 3082 '@sanity/client': ^7.8.1 3285 - 3286 - '@sanity/visual-editing-types@1.1.5': 3287 - resolution: {integrity: sha512-jDQyO59R9TG7QC6XQ5n8PVWCVRdebez1ws9d8j1HVmPzjIhWRkyQbA/xrfrtYDPo/vuVD8wUbkXOh1TScITVXQ==} 3288 - engines: {node: '>=18'} 3289 - peerDependencies: 3290 - '@sanity/client': ^7.8.1 3291 - '@sanity/types': '*' 3292 - peerDependenciesMeta: 3293 - '@sanity/types': 3294 - optional: true 3295 3083 3296 3084 '@sanity/visual-editing-types@1.1.6': 3297 3085 resolution: {integrity: sha512-CJlbFdQa0PeMhdX6mzmnu1QAhojrd/vLpPaeOFlGNXwCEgQTEoK9nR4510SQqkX6skx0uvb0YICc8M0nWVCsbw==} ··· 3371 3159 '@shikijs/core@3.12.2': 3372 3160 resolution: {integrity: sha512-L1Safnhra3tX/oJK5kYHaWmLEBJi1irASwewzY3taX5ibyXyMkkSDZlq01qigjryOBwrXSdFgTiZ3ryzSNeu7Q==} 3373 3161 3374 - '@shikijs/core@3.8.0': 3375 - resolution: {integrity: sha512-gWt8NNZFurL6FMESO4lEsmspDh0H1fyUibhx1NnEH/S3kOXgYiWa6ZFqy+dcjBLhZqCXsepuUaL1QFXk6PrpsQ==} 3376 - 3377 3162 '@shikijs/engine-javascript@3.12.2': 3378 3163 resolution: {integrity: sha512-Nm3/azSsaVS7hk6EwtHEnTythjQfwvrO5tKqMlaH9TwG1P+PNaR8M0EAKZ+GaH2DFwvcr4iSfTveyxMIvXEHMw==} 3379 - 3380 - '@shikijs/engine-javascript@3.8.0': 3381 - resolution: {integrity: sha512-IBULFFpQ1N5Cg/C7jPCGnjIKz72CcRtD0BIbNhSuXPUOxLG0bF1URsP/uLfxQFQ9ORfunCQwL7UuSX1RSRBwUQ==} 3382 3164 3383 3165 '@shikijs/engine-oniguruma@3.12.2': 3384 3166 resolution: {integrity: sha512-hozwnFHsLvujK4/CPVHNo3Bcg2EsnG8krI/ZQ2FlBlCRpPZW4XAEQmEwqegJsypsTAN9ehu2tEYe30lYKSZW/w==} 3385 3167 3386 - '@shikijs/engine-oniguruma@3.8.0': 3387 - resolution: {integrity: sha512-Tx7kR0oFzqa+rY7t80LjN8ZVtHO3a4+33EUnBVx2qYP3fGxoI9H0bvnln5ySelz9SIUTsS0/Qn+9dg5zcUMsUw==} 3388 - 3389 3168 '@shikijs/langs@3.12.2': 3390 3169 resolution: {integrity: sha512-bVx5PfuZHDSHoBal+KzJZGheFuyH4qwwcwG/n+MsWno5cTlKmaNtTsGzJpHYQ8YPbB5BdEdKU1rga5/6JGY8ww==} 3391 3170 3392 - '@shikijs/langs@3.8.0': 3393 - resolution: {integrity: sha512-mfGYuUgjQ5GgXinB5spjGlBVhG2crKRpKkfADlp8r9k/XvZhtNXxyOToSnCEnF0QNiZnJjlt5MmU9PmhRdwAbg==} 3394 - 3395 3171 '@shikijs/themes@3.12.2': 3396 3172 resolution: {integrity: sha512-fTR3QAgnwYpfGczpIbzPjlRnxyONJOerguQv1iwpyQZ9QXX4qy/XFQqXlf17XTsorxnHoJGbH/LXBvwtqDsF5A==} 3397 3173 3398 - '@shikijs/themes@3.8.0': 3399 - resolution: {integrity: sha512-yaZiLuyO23sXe16JFU76KyUMTZCJi4EMQKIrdQt7okoTzI4yAaJhVXT2Uy4k8yBIEFRiia5dtD7gC1t8m6y3oQ==} 3400 - 3401 3174 '@shikijs/transformers@3.12.2': 3402 3175 resolution: {integrity: sha512-+z1aMq4N5RoNGY8i7qnTYmG2MBYzFmwkm/yOd6cjEI7OVzcldVvzQCfxU1YbIVgsyB0xHVc2jFe1JhgoXyUoSQ==} 3403 3176 3404 3177 '@shikijs/types@3.12.2': 3405 3178 resolution: {integrity: sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==} 3406 - 3407 - '@shikijs/types@3.8.0': 3408 - resolution: {integrity: sha512-I/b/aNg0rP+kznVDo7s3UK8jMcqEGTtoPDdQ+JlQ2bcJIyu/e2iRvl42GLIDMK03/W1YOHOuhlhQ7aM+XbKUeg==} 3409 3179 3410 3180 '@shikijs/vscode-textmate@10.0.2': 3411 3181 resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} ··· 3555 3325 '@types/node@20.19.0': 3556 3326 resolution: {integrity: sha512-hfrc+1tud1xcdVTABC2JiomZJEklMcXYNTVtZLAeqTVWD+qL5jkHKT+1lOtqDdGxt+mB53DTtiz673vfjU8D1Q==} 3557 3327 3558 - '@types/node@24.0.15': 3559 - resolution: {integrity: sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==} 3560 - 3561 3328 '@types/node@24.3.1': 3562 3329 resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} 3563 3330 ··· 3687 3454 resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} 3688 3455 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 3689 3456 3690 - '@typescript-eslint/types@8.39.0': 3691 - resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} 3692 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 3693 - 3694 3457 '@typescript-eslint/types@8.39.1': 3695 3458 resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} 3696 3459 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} ··· 3776 3539 resolution: {integrity: sha512-eL9P+WDX42B6ZkNGGSkMgOyR99xeuJ2Gkj0uarhag5kaRwvwHLn/CJptZ7/oZLLIn0uTH8TQ6MG8ErhK0ymewA==} 3777 3540 engines: {node: '>=14'} 3778 3541 3779 - '@unocss/core@66.3.3': 3780 - resolution: {integrity: sha512-6WFLd92TJelVQARtCGaF+EgEoHKIVe43gkGXVoWILu0HUDRWdhv+cpcyX0RTJV22Y976AxeneU7/zmhAh+CXNg==} 3781 - 3782 3542 '@unocss/core@66.5.1': 3783 3543 resolution: {integrity: sha512-BUgN87sUIffco1d+1IuV4a1gKTI1YAFa7CTjxglLUAnopXPPJ+Q77G10zoBoFLzutiIOYLsesa3hzbQvDhosnA==} 3784 - 3785 - '@unocss/extractor-arbitrary-variants@66.3.3': 3786 - resolution: {integrity: sha512-TXzjH6FcITQ8V2x7ETHgVOlAHf3ll/ysxL+W4fMROm8jP/o7jvsg36tRfOwU0sDGo/qoCPux82ix9e6/JW0oqQ==} 3787 3544 3788 3545 '@unocss/extractor-arbitrary-variants@66.5.1': 3789 3546 resolution: {integrity: sha512-SpI2uv6bWyPyY3Tv7CxsFnHBjSTlNRcPCnfvD8gSKbAt7R+RqV0nrdkv7wSW+Woc5TYl8PClLEFSBIvo0c1h9Q==} ··· 3806 3563 '@unocss/preset-icons@66.5.1': 3807 3564 resolution: {integrity: sha512-vxlnPSzTaQZmLKcmVPhCWC6rpgpHCUSD7aFsn7jW3iZ/jTIwc4kgQjnOJZdL443LF5mxBqF15+Cm9hZRnvrWNw==} 3808 3565 3809 - '@unocss/preset-mini@66.3.3': 3810 - resolution: {integrity: sha512-pz8rgvHRYS/6fsZNtG7iArLzwANnLy5GkHY/lbuqkWhO2S2Nf7kpJCbR/uV/XeuFsLnYcZW3NLOmelfvZvJamA==} 3811 - 3812 3566 '@unocss/preset-mini@66.5.1': 3813 3567 resolution: {integrity: sha512-kBEbA0kEXRtoHQ98o4b6f9sp1u5BanPzi+GMnWdmOWvbLAiLw1vcgXGPTX3sO+gzIMrwu0Famw6xiztWzAFjWQ==} 3814 3568 ··· 3823 3577 3824 3578 '@unocss/preset-web-fonts@66.5.1': 3825 3579 resolution: {integrity: sha512-XKrkoN7ncqJxRHDMxAqTCroBcqSPgryDUZIlLhhQ4mHilSp29AdYO1RgG6Ok04w9HNmqzo3d8A8v6Z5yGrGF0w==} 3826 - 3827 - '@unocss/preset-wind3@66.3.3': 3828 - resolution: {integrity: sha512-iXmjvPqvmPTo4z7epQDqHxzlGRsbLJEgfETqTrRJeagvFG7Gs+ajS8cQhbf6wL01dSRHjvhVXi3MsIvqfHHXOw==} 3829 3580 3830 3581 '@unocss/preset-wind3@66.5.1': 3831 3582 resolution: {integrity: sha512-L1yMmKpwUWYUnScQq5jMTGvfMy/GBqVj40VS5afyOlzWnBeSkc/y4AxeW/khzGwqE/QaFcLWXiXwQVJIyxN02Q==} ··· 3838 3589 3839 3590 '@unocss/reset@66.5.1': 3840 3591 resolution: {integrity: sha512-NXDjDUn3cjATkxr7bbPdVnKkUHzEq6wSC1IRpnO8ISAXCw6JGPjuk3WJVYxHhnAlszhDxdqxVBjWRZ+zzVmrZw==} 3841 - 3842 - '@unocss/rule-utils@66.3.3': 3843 - resolution: {integrity: sha512-QKgVGV5nRRnK44/reUKFLAc5UGyl98vz3hrfk8JI8pVza58vmQWTdAB2rIpNJ5a5j+EkWfDOUlGQaOrIeYGLdg==} 3844 - engines: {node: '>=14'} 3845 3592 3846 3593 '@unocss/rule-utils@66.5.1': 3847 3594 resolution: {integrity: sha512-GuBKHrDv3bdq5N1HfOr1tD864vI1EIiovBVJSfg7x9ERA4jJSnyMpGk/hbLuDIXF25EnVdZ1lFhEpJgur9+9sw==} ··· 4593 4340 browserify-zlib@0.1.4: 4594 4341 resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} 4595 4342 4596 - browserslist@4.25.2: 4597 - resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} 4598 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 4599 - hasBin: true 4600 - 4601 4343 browserslist@4.25.4: 4602 4344 resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} 4603 4345 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} ··· 4633 4375 peerDependencies: 4634 4376 esbuild: '>=0.18' 4635 4377 4636 - c12@3.1.0: 4637 - resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==} 4638 - peerDependencies: 4639 - magicast: ^0.3.5 4640 - peerDependenciesMeta: 4641 - magicast: 4642 - optional: true 4643 - 4644 4378 c12@3.2.0: 4645 4379 resolution: {integrity: sha512-ixkEtbYafL56E6HiFuonMm1ZjoKtIo7TH68/uiEq4DAwv9NcUX2nJ95F8TrbMeNjqIkZpruo3ojXQJ+MGG5gcQ==} 4646 4380 peerDependencies: ··· 4692 4426 caniuse-api@3.0.0: 4693 4427 resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} 4694 4428 4695 - caniuse-lite@1.0.30001735: 4696 - resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} 4697 - 4698 4429 caniuse-lite@1.0.30001741: 4699 4430 resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} 4700 4431 ··· 4730 4461 chalk@4.1.2: 4731 4462 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 4732 4463 engines: {node: '>=10'} 4733 - 4734 - chalk@5.4.1: 4735 - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} 4736 - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 4737 4464 4738 4465 chalk@5.6.0: 4739 4466 resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} ··· 5007 4734 copy-anything@3.0.5: 5008 4735 resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} 5009 4736 engines: {node: '>=12.13'} 5010 - 5011 - core-js-compat@3.45.0: 5012 - resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} 5013 4737 5014 4738 core-js-compat@3.45.1: 5015 4739 resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} ··· 5469 5193 engines: {node: '>=0.10.0'} 5470 5194 hasBin: true 5471 5195 5472 - electron-to-chromium@1.5.203: 5473 - resolution: {integrity: sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==} 5474 - 5475 5196 electron-to-chromium@1.5.214: 5476 5197 resolution: {integrity: sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==} 5477 5198 ··· 5584 5305 esbuild@0.21.5: 5585 5306 resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 5586 5307 engines: {node: '>=12'} 5587 - hasBin: true 5588 - 5589 - esbuild@0.25.8: 5590 - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} 5591 - engines: {node: '>=18'} 5592 5308 hasBin: true 5593 5309 5594 5310 esbuild@0.25.9: ··· 5890 5606 5891 5607 fastq@1.19.1: 5892 5608 resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 5893 - 5894 - fdir@6.4.6: 5895 - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} 5896 - peerDependencies: 5897 - picomatch: ^3 || ^4 5898 - peerDependenciesMeta: 5899 - picomatch: 5900 - optional: true 5901 5609 5902 5610 fdir@6.5.0: 5903 5611 resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} ··· 6950 6658 resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} 6951 6659 engines: {node: '>= 10.13.0'} 6952 6660 6953 - jiti@2.4.2: 6954 - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 6955 - hasBin: true 6956 - 6957 6661 jiti@2.5.1: 6958 6662 resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} 6959 6663 hasBin: true ··· 6980 6684 js-yaml@4.1.0: 6981 6685 resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 6982 6686 hasBin: true 6983 - 6984 - jsdoc-type-pratt-parser@4.1.0: 6985 - resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} 6986 - engines: {node: '>=12.0.0'} 6987 6687 6988 6688 jsdoc-type-pratt-parser@4.8.0: 6989 6689 resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} ··· 7174 6874 loader-runner@4.3.0: 7175 6875 resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} 7176 6876 engines: {node: '>=6.11.5'} 7177 - 7178 - local-pkg@1.1.1: 7179 - resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} 7180 - engines: {node: '>=14'} 7181 6877 7182 6878 local-pkg@1.1.2: 7183 6879 resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} ··· 7734 7430 resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} 7735 7431 engines: {node: '>=18'} 7736 7432 7737 - node-fetch-native@1.6.6: 7738 - resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} 7739 - 7740 7433 node-fetch-native@1.6.7: 7741 7434 resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} 7742 7435 ··· 7764 7457 node-html-parser@6.1.13: 7765 7458 resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} 7766 7459 7767 - node-mock-http@1.0.1: 7768 - resolution: {integrity: sha512-0gJJgENizp4ghds/Ywu2FCmcRsgBTmRQzYPZm61wy+Em2sBarSka0OhQS5huLBg6od1zkNpnWMCZloQDFVvOMQ==} 7769 - 7770 - node-mock-http@1.0.2: 7771 - resolution: {integrity: sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g==} 7772 - 7773 7460 node-mock-http@1.0.3: 7774 7461 resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} 7775 - 7776 - node-releases@2.0.19: 7777 - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 7778 7462 7779 7463 node-releases@2.0.20: 7780 7464 resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==} ··· 7858 7542 7859 7543 nwsapi@2.2.22: 7860 7544 resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} 7861 - 7862 - nypm@0.6.0: 7863 - resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} 7864 - engines: {node: ^14.16.0 || >=16.10.0} 7865 - hasBin: true 7866 7545 7867 7546 nypm@0.6.1: 7868 7547 resolution: {integrity: sha512-hlacBiRiv1k9hZFiphPUkfSQ/ZfQzZDzC+8z0wL3lvDAOUu/2NnChkKuMoMjNur/9OpKuz2QsIeiPVN0xM5Q0w==} ··· 8230 7909 8231 7910 pkg-types@1.3.1: 8232 7911 resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 8233 - 8234 - pkg-types@2.2.0: 8235 - resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} 8236 7912 8237 7913 pkg-types@2.3.0: 8238 7914 resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} ··· 8558 8234 resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} 8559 8235 engines: {node: '>=0.6'} 8560 8236 8561 - quansync@0.2.10: 8562 - resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} 8563 - 8564 8237 quansync@0.2.11: 8565 8238 resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} 8566 8239 ··· 9106 8779 shiki@3.12.2: 9107 8780 resolution: {integrity: sha512-uIrKI+f9IPz1zDT+GMz+0RjzKJiijVr6WDWm9Pe3NNY6QigKCfifCEv9v9R2mDASKKjzjQ2QpFLcxaR3iHSnMA==} 9108 8781 9109 - shiki@3.8.0: 9110 - resolution: {integrity: sha512-yPqK0y68t20aakv+3aMTpUMJZd6UHaBY2/SBUDowh9M70gVUwqT0bf7Kz5CWG0AXfHtFvXCHhBBHVAzdp0ILoQ==} 9111 - 9112 8782 side-channel-list@1.0.0: 9113 8783 resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 9114 8784 engines: {node: '>= 0.4'} ··· 9153 8823 9154 8824 simple-wcswidth@1.1.2: 9155 8825 resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} 9156 - 9157 - sirv@3.0.1: 9158 - resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} 9159 - engines: {node: '>=18'} 9160 8826 9161 8827 sirv@3.0.2: 9162 8828 resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} ··· 9454 9120 postcss-html: ^1.0.0 9455 9121 stylelint: '>=14.0.0' 9456 9122 9457 - stylelint-config-recommended@16.0.0: 9458 - resolution: {integrity: sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==} 9459 - engines: {node: '>=18.12.0'} 9460 - peerDependencies: 9461 - stylelint: ^16.16.0 9462 - 9463 9123 stylelint-config-recommended@17.0.0: 9464 9124 resolution: {integrity: sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==} 9465 9125 engines: {node: '>=18.12.0'} ··· 9831 9491 undici-types@7.10.0: 9832 9492 resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} 9833 9493 9834 - undici-types@7.8.0: 9835 - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} 9836 - 9837 9494 undici@5.29.0: 9838 9495 resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} 9839 9496 engines: {node: '>=14.0'} ··· 9981 9638 unrs-resolver@1.11.1: 9982 9639 resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} 9983 9640 9984 - unstorage@1.16.1: 9985 - resolution: {integrity: sha512-gdpZ3guLDhz+zWIlYP1UwQ259tG5T5vYRzDaHMkQ1bBY1SQPutvZnrRjTFaWUUpseErJIgAZS51h6NOcZVZiqQ==} 9986 - peerDependencies: 9987 - '@azure/app-configuration': ^1.8.0 9988 - '@azure/cosmos': ^4.2.0 9989 - '@azure/data-tables': ^13.3.0 9990 - '@azure/identity': ^4.6.0 9991 - '@azure/keyvault-secrets': ^4.9.0 9992 - '@azure/storage-blob': ^12.26.0 9993 - '@capacitor/preferences': ^6.0.3 || ^7.0.0 9994 - '@deno/kv': '>=0.9.0' 9995 - '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 9996 - '@planetscale/database': ^1.19.0 9997 - '@upstash/redis': ^1.34.3 9998 - '@vercel/blob': '>=0.27.1' 9999 - '@vercel/kv': ^1.0.1 10000 - aws4fetch: ^1.0.20 10001 - db0: '>=0.2.1' 10002 - idb-keyval: ^6.2.1 10003 - ioredis: ^5.4.2 10004 - uploadthing: ^7.4.4 10005 - peerDependenciesMeta: 10006 - '@azure/app-configuration': 10007 - optional: true 10008 - '@azure/cosmos': 10009 - optional: true 10010 - '@azure/data-tables': 10011 - optional: true 10012 - '@azure/identity': 10013 - optional: true 10014 - '@azure/keyvault-secrets': 10015 - optional: true 10016 - '@azure/storage-blob': 10017 - optional: true 10018 - '@capacitor/preferences': 10019 - optional: true 10020 - '@deno/kv': 10021 - optional: true 10022 - '@netlify/blobs': 10023 - optional: true 10024 - '@planetscale/database': 10025 - optional: true 10026 - '@upstash/redis': 10027 - optional: true 10028 - '@vercel/blob': 10029 - optional: true 10030 - '@vercel/kv': 10031 - optional: true 10032 - aws4fetch: 10033 - optional: true 10034 - db0: 10035 - optional: true 10036 - idb-keyval: 10037 - optional: true 10038 - ioredis: 10039 - optional: true 10040 - uploadthing: 10041 - optional: true 10042 - 10043 9641 unstorage@1.17.1: 10044 9642 resolution: {integrity: sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==} 10045 9643 peerDependencies: ··· 10112 9710 10113 9711 unwasm@0.3.11: 10114 9712 resolution: {integrity: sha512-Vhp5gb1tusSQw5of/g3Q697srYgMXvwMgXMjcG4ZNga02fDX9coxJ9fAb0Ci38hM2Hv/U1FXRPGgjP2BYqhNoQ==} 10115 - 10116 - unwasm@0.3.9: 10117 - resolution: {integrity: sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==} 10118 9713 10119 9714 update-browserslist-db@1.1.3: 10120 9715 resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} ··· 10300 9895 vite: 10301 9896 optional: true 10302 9897 10303 - vite@7.0.5: 10304 - resolution: {integrity: sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==} 10305 - engines: {node: ^20.19.0 || >=22.12.0} 10306 - hasBin: true 10307 - peerDependencies: 10308 - '@types/node': ^20.19.0 || >=22.12.0 10309 - jiti: '>=1.21.0' 10310 - less: ^4.0.0 10311 - lightningcss: ^1.21.0 10312 - sass: ^1.70.0 10313 - sass-embedded: ^1.70.0 10314 - stylus: '>=0.54.8' 10315 - sugarss: ^5.0.0 10316 - terser: ^5.16.0 10317 - tsx: ^4.8.1 10318 - yaml: ^2.4.2 10319 - peerDependenciesMeta: 10320 - '@types/node': 10321 - optional: true 10322 - jiti: 10323 - optional: true 10324 - less: 10325 - optional: true 10326 - lightningcss: 10327 - optional: true 10328 - sass: 10329 - optional: true 10330 - sass-embedded: 10331 - optional: true 10332 - stylus: 10333 - optional: true 10334 - sugarss: 10335 - optional: true 10336 - terser: 10337 - optional: true 10338 - tsx: 10339 - optional: true 10340 - yaml: 10341 - optional: true 10342 - 10343 9898 vite@7.1.4: 10344 9899 resolution: {integrity: sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw==} 10345 9900 engines: {node: ^20.19.0 || >=22.12.0} ··· 10673 10228 engines: {node: '>= 0.10.0'} 10674 10229 hasBin: true 10675 10230 10676 - xstate@5.20.2: 10677 - resolution: {integrity: sha512-GZmLmc+WPKfFRxuTDAxCg0cUhS/ZnWaRD86DO8MKizeK4a050jd5k7UNnIQ2jJDWRig2/r0tmVXeezUNIhoz5Q==} 10678 - 10679 10231 xstate@5.21.0: 10680 10232 resolution: {integrity: sha512-y4wmqxjyAa0tgz4k3m/MgTF1kDOahE5+xLfWt5eh1sk+43DatLhKlI8lQDJZpvihZavjbD3TUgy2PRMphhhqgQ==} 10681 10233 ··· 10925 10477 js-tokens: 4.0.0 10926 10478 picocolors: 1.1.1 10927 10479 10928 - '@babel/compat-data@7.28.0': {} 10929 - 10930 10480 '@babel/compat-data@7.28.4': {} 10931 10481 10932 10482 '@babel/core@7.28.4': ··· 10963 10513 10964 10514 '@babel/helper-compilation-targets@7.27.2': 10965 10515 dependencies: 10966 - '@babel/compat-data': 7.28.0 10516 + '@babel/compat-data': 7.28.4 10967 10517 '@babel/helper-validator-option': 7.27.1 10968 10518 browserslist: 4.25.4 10969 10519 lru-cache: 5.1.1 ··· 11078 10628 '@babel/parser@7.27.7': 11079 10629 dependencies: 11080 10630 '@babel/types': 7.28.4 11081 - 11082 - '@babel/parser@7.28.3': 11083 - dependencies: 11084 - '@babel/types': 7.28.2 11085 10631 11086 10632 '@babel/parser@7.28.4': 11087 10633 dependencies: ··· 11655 11201 '@babel/template@7.27.2': 11656 11202 dependencies: 11657 11203 '@babel/code-frame': 7.27.1 11658 - '@babel/parser': 7.27.7 11204 + '@babel/parser': 7.28.4 11659 11205 '@babel/types': 7.28.4 11660 11206 11661 11207 '@babel/traverse@7.27.7': 11662 11208 dependencies: 11663 11209 '@babel/code-frame': 7.27.1 11664 11210 '@babel/generator': 7.28.3 11665 - '@babel/parser': 7.27.7 11211 + '@babel/parser': 7.28.4 11666 11212 '@babel/template': 7.27.2 11667 11213 '@babel/types': 7.28.4 11668 11214 debug: 4.4.1(supports-color@8.1.1) ··· 11682 11228 transitivePeerDependencies: 11683 11229 - supports-color 11684 11230 11685 - '@babel/types@7.28.2': 11686 - dependencies: 11687 - '@babel/helper-string-parser': 7.27.1 11688 - '@babel/helper-validator-identifier': 7.27.1 11689 - 11690 11231 '@babel/types@7.28.4': 11691 11232 dependencies: 11692 11233 '@babel/helper-string-parser': 7.27.1 ··· 11836 11377 '@commitlint/format@19.8.1': 11837 11378 dependencies: 11838 11379 '@commitlint/types': 19.8.1 11839 - chalk: 5.4.1 11380 + chalk: 5.6.0 11840 11381 11841 11382 '@commitlint/is-ignored@19.8.1': 11842 11383 dependencies: ··· 11856 11397 '@commitlint/execute-rule': 19.8.1 11857 11398 '@commitlint/resolve-extends': 19.8.1 11858 11399 '@commitlint/types': 19.8.1 11859 - chalk: 5.4.1 11400 + chalk: 5.6.0 11860 11401 cosmiconfig: 9.0.0(typescript@5.9.2) 11861 11402 cosmiconfig-typescript-loader: 6.1.0(@types/node@24.3.1)(cosmiconfig@9.0.0(typescript@5.9.2))(typescript@5.9.2) 11862 11403 lodash.isplainobject: 4.0.6 ··· 11907 11448 '@commitlint/types@19.8.1': 11908 11449 dependencies: 11909 11450 '@types/conventional-commits-parser': 5.0.1 11910 - chalk: 5.4.1 11451 + chalk: 5.6.0 11911 11452 11912 11453 '@cspotcode/source-map-support@0.8.1': 11913 11454 dependencies: ··· 12019 11560 '@esbuild/aix-ppc64@0.21.5': 12020 11561 optional: true 12021 11562 12022 - '@esbuild/aix-ppc64@0.25.8': 12023 - optional: true 12024 - 12025 11563 '@esbuild/aix-ppc64@0.25.9': 12026 11564 optional: true 12027 11565 12028 11566 '@esbuild/android-arm64@0.21.5': 12029 11567 optional: true 12030 11568 12031 - '@esbuild/android-arm64@0.25.8': 12032 - optional: true 12033 - 12034 11569 '@esbuild/android-arm64@0.25.9': 12035 11570 optional: true 12036 11571 12037 11572 '@esbuild/android-arm@0.21.5': 12038 - optional: true 12039 - 12040 - '@esbuild/android-arm@0.25.8': 12041 11573 optional: true 12042 11574 12043 11575 '@esbuild/android-arm@0.25.9': ··· 12046 11578 '@esbuild/android-x64@0.21.5': 12047 11579 optional: true 12048 11580 12049 - '@esbuild/android-x64@0.25.8': 12050 - optional: true 12051 - 12052 11581 '@esbuild/android-x64@0.25.9': 12053 11582 optional: true 12054 11583 12055 11584 '@esbuild/darwin-arm64@0.21.5': 12056 11585 optional: true 12057 11586 12058 - '@esbuild/darwin-arm64@0.25.8': 12059 - optional: true 12060 - 12061 11587 '@esbuild/darwin-arm64@0.25.9': 12062 11588 optional: true 12063 11589 12064 11590 '@esbuild/darwin-x64@0.21.5': 12065 11591 optional: true 12066 11592 12067 - '@esbuild/darwin-x64@0.25.8': 12068 - optional: true 12069 - 12070 11593 '@esbuild/darwin-x64@0.25.9': 12071 11594 optional: true 12072 11595 12073 11596 '@esbuild/freebsd-arm64@0.21.5': 12074 - optional: true 12075 - 12076 - '@esbuild/freebsd-arm64@0.25.8': 12077 11597 optional: true 12078 11598 12079 11599 '@esbuild/freebsd-arm64@0.25.9': 12080 11600 optional: true 12081 11601 12082 11602 '@esbuild/freebsd-x64@0.21.5': 12083 - optional: true 12084 - 12085 - '@esbuild/freebsd-x64@0.25.8': 12086 11603 optional: true 12087 11604 12088 11605 '@esbuild/freebsd-x64@0.25.9': ··· 12091 11608 '@esbuild/linux-arm64@0.21.5': 12092 11609 optional: true 12093 11610 12094 - '@esbuild/linux-arm64@0.25.8': 12095 - optional: true 12096 - 12097 11611 '@esbuild/linux-arm64@0.25.9': 12098 11612 optional: true 12099 11613 12100 11614 '@esbuild/linux-arm@0.21.5': 12101 11615 optional: true 12102 11616 12103 - '@esbuild/linux-arm@0.25.8': 12104 - optional: true 12105 - 12106 11617 '@esbuild/linux-arm@0.25.9': 12107 11618 optional: true 12108 11619 12109 11620 '@esbuild/linux-ia32@0.21.5': 12110 11621 optional: true 12111 11622 12112 - '@esbuild/linux-ia32@0.25.8': 12113 - optional: true 12114 - 12115 11623 '@esbuild/linux-ia32@0.25.9': 12116 11624 optional: true 12117 11625 12118 11626 '@esbuild/linux-loong64@0.21.5': 12119 - optional: true 12120 - 12121 - '@esbuild/linux-loong64@0.25.8': 12122 11627 optional: true 12123 11628 12124 11629 '@esbuild/linux-loong64@0.25.9': ··· 12127 11632 '@esbuild/linux-mips64el@0.21.5': 12128 11633 optional: true 12129 11634 12130 - '@esbuild/linux-mips64el@0.25.8': 12131 - optional: true 12132 - 12133 11635 '@esbuild/linux-mips64el@0.25.9': 12134 11636 optional: true 12135 11637 12136 11638 '@esbuild/linux-ppc64@0.21.5': 12137 11639 optional: true 12138 11640 12139 - '@esbuild/linux-ppc64@0.25.8': 12140 - optional: true 12141 - 12142 11641 '@esbuild/linux-ppc64@0.25.9': 12143 11642 optional: true 12144 11643 12145 11644 '@esbuild/linux-riscv64@0.21.5': 12146 11645 optional: true 12147 11646 12148 - '@esbuild/linux-riscv64@0.25.8': 12149 - optional: true 12150 - 12151 11647 '@esbuild/linux-riscv64@0.25.9': 12152 11648 optional: true 12153 11649 12154 11650 '@esbuild/linux-s390x@0.21.5': 12155 - optional: true 12156 - 12157 - '@esbuild/linux-s390x@0.25.8': 12158 11651 optional: true 12159 11652 12160 11653 '@esbuild/linux-s390x@0.25.9': ··· 12163 11656 '@esbuild/linux-x64@0.21.5': 12164 11657 optional: true 12165 11658 12166 - '@esbuild/linux-x64@0.25.8': 12167 - optional: true 12168 - 12169 11659 '@esbuild/linux-x64@0.25.9': 12170 - optional: true 12171 - 12172 - '@esbuild/netbsd-arm64@0.25.8': 12173 11660 optional: true 12174 11661 12175 11662 '@esbuild/netbsd-arm64@0.25.9': ··· 12178 11665 '@esbuild/netbsd-x64@0.21.5': 12179 11666 optional: true 12180 11667 12181 - '@esbuild/netbsd-x64@0.25.8': 12182 - optional: true 12183 - 12184 11668 '@esbuild/netbsd-x64@0.25.9': 12185 11669 optional: true 12186 11670 12187 - '@esbuild/openbsd-arm64@0.25.8': 12188 - optional: true 12189 - 12190 11671 '@esbuild/openbsd-arm64@0.25.9': 12191 11672 optional: true 12192 11673 12193 11674 '@esbuild/openbsd-x64@0.21.5': 12194 - optional: true 12195 - 12196 - '@esbuild/openbsd-x64@0.25.8': 12197 11675 optional: true 12198 11676 12199 11677 '@esbuild/openbsd-x64@0.25.9': 12200 11678 optional: true 12201 11679 12202 - '@esbuild/openharmony-arm64@0.25.8': 12203 - optional: true 12204 - 12205 11680 '@esbuild/openharmony-arm64@0.25.9': 12206 11681 optional: true 12207 11682 12208 11683 '@esbuild/sunos-x64@0.21.5': 12209 11684 optional: true 12210 11685 12211 - '@esbuild/sunos-x64@0.25.8': 12212 - optional: true 12213 - 12214 11686 '@esbuild/sunos-x64@0.25.9': 12215 11687 optional: true 12216 11688 12217 11689 '@esbuild/win32-arm64@0.21.5': 12218 11690 optional: true 12219 11691 12220 - '@esbuild/win32-arm64@0.25.8': 12221 - optional: true 12222 - 12223 11692 '@esbuild/win32-arm64@0.25.9': 12224 11693 optional: true 12225 11694 12226 11695 '@esbuild/win32-ia32@0.21.5': 12227 11696 optional: true 12228 11697 12229 - '@esbuild/win32-ia32@0.25.8': 12230 - optional: true 12231 - 12232 11698 '@esbuild/win32-ia32@0.25.9': 12233 11699 optional: true 12234 11700 12235 11701 '@esbuild/win32-x64@0.21.5': 12236 11702 optional: true 12237 11703 12238 - '@esbuild/win32-x64@0.25.8': 12239 - optional: true 12240 - 12241 11704 '@esbuild/win32-x64@0.25.9': 12242 11705 optional: true 12243 - 12244 - '@eslint-community/eslint-utils@4.7.0(eslint@9.35.0(jiti@2.5.1))': 12245 - dependencies: 12246 - eslint: 9.35.0(jiti@2.5.1) 12247 - eslint-visitor-keys: 3.4.3 12248 11706 12249 11707 '@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@2.5.1))': 12250 11708 dependencies: ··· 12307 11765 strip-json-comments: 3.1.1 12308 11766 transitivePeerDependencies: 12309 11767 - supports-color 12310 - 12311 - '@eslint/js@9.34.0': {} 12312 11768 12313 11769 '@eslint/js@9.35.0': {} 12314 11770 ··· 12742 12198 dependencies: 12743 12199 '@nuxt/kit': 4.1.1(magicast@0.3.5) 12744 12200 '@nuxtjs/mdc': 0.17.3(magicast@0.3.5) 12745 - '@shikijs/langs': 3.8.0 12201 + '@shikijs/langs': 3.12.2 12746 12202 '@sqlite.org/sqlite-wasm': 3.50.1-build1 12747 12203 '@webcontainer/env': 1.1.1 12748 - c12: 3.1.0(magicast@0.3.5) 12204 + c12: 3.2.0(magicast@0.3.5) 12749 12205 chokidar: 4.0.3 12750 12206 consola: 3.4.2 12751 12207 db0: 0.3.2(better-sqlite3@11.10.0) 12752 12208 defu: 6.1.4 12753 12209 destr: 2.0.5 12754 12210 git-url-parse: 16.1.0 12755 - jiti: 2.4.2 12211 + jiti: 2.5.1 12756 12212 json-schema-to-typescript: 15.0.4 12757 12213 knitwork: 1.2.0 12758 12214 listhen: 1.9.0 ··· 12767 12223 minimark: 0.2.0 12768 12224 minimatch: 10.0.3 12769 12225 nuxt-component-meta: 0.12.1(magicast@0.3.5)(vue-component-type-helpers@2.2.10) 12770 - nypm: 0.6.0 12226 + nypm: 0.6.1 12771 12227 ohash: 2.0.11 12772 12228 pathe: 2.0.3 12773 - pkg-types: 2.2.0 12229 + pkg-types: 2.3.0 12774 12230 remark-mdc: 3.6.0 12775 12231 scule: 1.3.0 12776 - shiki: 3.8.0 12232 + shiki: 3.12.2 12777 12233 slugify: 1.6.6 12778 12234 socket.io-client: 4.8.1 12779 12235 tar: 7.4.3 12780 - tinyglobby: 0.2.14 12236 + tinyglobby: 0.2.15 12781 12237 ufo: 1.6.1 12782 12238 unified: 11.0.5 12783 12239 unist-util-stringify-position: 4.0.0 ··· 12798 12254 12799 12255 '@nuxt/devalue@2.0.2': {} 12800 12256 12801 - '@nuxt/devtools-kit@2.6.2(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': 12802 - dependencies: 12803 - '@nuxt/kit': 4.1.1(magicast@0.3.5) 12804 - execa: 8.0.1 12805 - vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 12806 - transitivePeerDependencies: 12807 - - magicast 12808 - 12809 12257 '@nuxt/devtools-kit@2.6.3(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': 12810 12258 dependencies: 12811 12259 '@nuxt/kit': 4.1.1(magicast@0.3.5) ··· 12854 12302 simple-git: 3.28.0 12855 12303 sirv: 3.0.2 12856 12304 structured-clone-es: 1.0.0 12857 - tinyglobby: 0.2.14 12305 + tinyglobby: 0.2.15 12858 12306 vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 12859 12307 vite-plugin-inspect: 11.3.3(@nuxt/kit@4.1.1(magicast@0.3.5))(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) 12860 12308 vite-plugin-vue-tracer: 1.0.0(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2)) ··· 12870 12318 dependencies: 12871 12319 '@antfu/install-pkg': 1.1.0 12872 12320 '@clack/prompts': 0.11.0 12873 - '@eslint/js': 9.34.0 12321 + '@eslint/js': 9.35.0 12874 12322 '@nuxt/eslint-plugin': 1.9.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) 12875 12323 '@stylistic/eslint-plugin': 5.2.3(eslint@9.35.0(jiti@2.5.1)) 12876 12324 '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) ··· 12887 12335 eslint-plugin-vue: 10.4.0(@typescript-eslint/parser@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.35.0(jiti@2.5.1))) 12888 12336 eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.21)(eslint@9.35.0(jiti@2.5.1)) 12889 12337 globals: 16.3.0 12890 - local-pkg: 1.1.1 12338 + local-pkg: 1.1.2 12891 12339 pathe: 2.0.3 12892 12340 vue-eslint-parser: 10.2.0(eslint@9.35.0(jiti@2.5.1)) 12893 12341 transitivePeerDependencies: ··· 12909 12357 '@nuxt/eslint@1.9.0(@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1))(magicast@0.3.5)(typescript@5.9.2)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': 12910 12358 dependencies: 12911 12359 '@eslint/config-inspector': 1.2.0(eslint@9.35.0(jiti@2.5.1)) 12912 - '@nuxt/devtools-kit': 2.6.2(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) 12360 + '@nuxt/devtools-kit': 2.6.3(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) 12913 12361 '@nuxt/eslint-config': 1.9.0(@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(@vue/compiler-sfc@3.5.21)(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) 12914 12362 '@nuxt/eslint-plugin': 1.9.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) 12915 12363 '@nuxt/kit': 4.1.1(magicast@0.3.5) ··· 12936 12384 12937 12385 '@nuxt/fonts@0.11.4(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0)(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': 12938 12386 dependencies: 12939 - '@nuxt/devtools-kit': 2.6.2(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) 12387 + '@nuxt/devtools-kit': 2.6.3(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) 12940 12388 '@nuxt/kit': 4.1.1(magicast@0.3.5) 12941 12389 consola: 3.4.2 12942 12390 css-tree: 3.1.0 12943 12391 defu: 6.1.4 12944 - esbuild: 0.25.8 12392 + esbuild: 0.25.9 12945 12393 fontaine: 0.6.0 12946 12394 h3: 1.15.4 12947 - jiti: 2.4.2 12395 + jiti: 2.5.1 12948 12396 magic-regexp: 0.10.0 12949 12397 magic-string: 0.30.19 12950 - node-fetch-native: 1.6.6 12398 + node-fetch-native: 1.6.7 12951 12399 ohash: 2.0.11 12952 12400 pathe: 2.0.3 12953 - sirv: 3.0.1 12954 - tinyglobby: 0.2.14 12401 + sirv: 3.0.2 12402 + tinyglobby: 0.2.15 12955 12403 ufo: 1.6.1 12956 12404 unifont: 0.4.1 12957 12405 unplugin: 2.3.10 12958 - unstorage: 1.16.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0) 12406 + unstorage: 1.17.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0) 12959 12407 transitivePeerDependencies: 12960 12408 - '@azure/app-configuration' 12961 12409 - '@azure/cosmos' ··· 12969 12417 - '@planetscale/database' 12970 12418 - '@upstash/redis' 12971 12419 - '@vercel/blob' 12420 + - '@vercel/functions' 12972 12421 - '@vercel/kv' 12973 12422 - aws4fetch 12974 12423 - db0 ··· 13115 12564 '@nuxt/test-utils@3.19.2(@playwright/test@1.55.0)(@vue/test-utils@2.4.6)(happy-dom@18.0.1)(jsdom@26.1.0)(magicast@0.3.5)(playwright-core@1.55.0)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0)(terser@5.44.0)(yaml@2.8.1))': 13116 12565 dependencies: 13117 12566 '@nuxt/kit': 4.1.1(magicast@0.3.5) 13118 - c12: 3.1.0(magicast@0.3.5) 12567 + c12: 3.2.0(magicast@0.3.5) 13119 12568 consola: 3.4.2 13120 12569 defu: 6.1.4 13121 12570 destr: 2.0.5 ··· 13123 12572 fake-indexeddb: 6.0.1 13124 12573 get-port-please: 3.2.0 13125 12574 h3: 1.15.4 13126 - local-pkg: 1.1.1 12575 + local-pkg: 1.1.2 13127 12576 magic-string: 0.30.19 13128 - node-fetch-native: 1.6.6 13129 - node-mock-http: 1.0.1 12577 + node-fetch-native: 1.6.7 12578 + node-mock-http: 1.0.3 13130 12579 ofetch: 1.4.1 13131 12580 pathe: 2.0.3 13132 12581 perfect-debounce: 1.0.0 ··· 13296 12745 '@sanity/client': 7.11.0(debug@4.4.1) 13297 12746 '@sanity/comlink': 3.0.9 13298 12747 '@sanity/core-loader': 1.8.15(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2) 13299 - '@sanity/presentation-comlink': 1.0.28(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) 13300 - '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0(debug@4.4.1)) 12748 + '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) 12749 + '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0) 13301 12750 '@sanity/visual-editing': 3.0.2(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.9.2) 13302 12751 consola: 3.4.2 13303 12752 defu: 6.1.4 ··· 14014 13463 dependencies: 14015 13464 rxjs: 7.8.2 14016 13465 uuid: 11.1.0 14017 - xstate: 5.20.2 13466 + xstate: 5.21.0 14018 13467 14019 13468 '@sanity/core-loader@1.8.15(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2)': 14020 13469 dependencies: 14021 13470 '@sanity/client': 7.11.0(debug@4.4.1) 14022 13471 '@sanity/comlink': 3.0.9 14023 - '@sanity/presentation-comlink': 1.0.28(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) 14024 - '@sanity/visual-editing-csm': 2.0.22(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2) 13472 + '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) 13473 + '@sanity/visual-editing-csm': 2.0.23(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2) 14025 13474 transitivePeerDependencies: 14026 13475 - '@sanity/types' 14027 13476 - debug ··· 14128 13577 react: 18.3.1 14129 13578 react-dom: 18.3.1(react@18.3.1) 14130 13579 14131 - '@sanity/insert-menu@2.0.1(@sanity/types@4.6.1(@types/react@18.3.24))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': 14132 - dependencies: 14133 - '@sanity/icons': 3.7.4(react@18.3.1) 14134 - '@sanity/types': 4.6.1(@types/react@18.3.24)(debug@4.4.1) 14135 - '@sanity/ui': 3.0.14(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) 14136 - lodash: 4.17.21 14137 - react: 18.3.1 14138 - react-compiler-runtime: 19.1.0-rc.2(react@18.3.1) 14139 - react-dom: 18.3.1(react@18.3.1) 14140 - react-is: 19.1.1 14141 - transitivePeerDependencies: 14142 - - '@emotion/is-prop-valid' 14143 - - styled-components 14144 - 14145 13580 '@sanity/insert-menu@2.0.2(@emotion/is-prop-valid@1.2.2)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': 14146 13581 dependencies: 14147 13582 '@sanity/icons': 3.7.4(react@18.3.1) ··· 14188 13623 - '@types/react' 14189 13624 - supports-color 14190 13625 14191 - '@sanity/mutate@0.11.0-canary.4(xstate@5.20.2)': 13626 + '@sanity/mutate@0.11.0-canary.4(xstate@5.21.0)': 14192 13627 dependencies: 14193 13628 '@sanity/client': 6.29.1 14194 13629 '@sanity/diff-match-patch': 3.2.0 ··· 14198 13633 mendoza: 3.0.8 14199 13634 rxjs: 7.8.2 14200 13635 optionalDependencies: 14201 - xstate: 5.20.2 13636 + xstate: 5.21.0 14202 13637 transitivePeerDependencies: 14203 13638 - debug 14204 13639 ··· 14237 13672 - '@types/react' 14238 13673 - supports-color 14239 13674 14240 - '@sanity/presentation-comlink@1.0.28(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))': 14241 - dependencies: 14242 - '@sanity/client': 7.11.0(debug@4.4.1) 14243 - '@sanity/comlink': 3.0.9 14244 - '@sanity/visual-editing-types': 1.1.5(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) 14245 - transitivePeerDependencies: 14246 - - '@sanity/types' 14247 - 14248 - '@sanity/presentation-comlink@1.0.29(@sanity/client@7.11.0(debug@4.4.1))(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))': 13675 + '@sanity/presentation-comlink@1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))': 14249 13676 dependencies: 14250 13677 '@sanity/client': 7.11.0(debug@4.4.1) 14251 13678 '@sanity/comlink': 3.0.9 14252 - '@sanity/visual-editing-types': 1.1.6(@sanity/client@7.11.0(debug@4.4.1))(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) 13679 + '@sanity/visual-editing-types': 1.1.6(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) 14253 13680 transitivePeerDependencies: 14254 13681 - '@sanity/types' 14255 13682 14256 - '@sanity/preview-url-secret@2.1.14(@sanity/client@7.11.0(debug@4.4.1))': 13683 + '@sanity/preview-url-secret@2.1.14(@sanity/client@7.11.0)': 14257 13684 dependencies: 14258 13685 '@sanity/client': 7.11.0(debug@4.4.1) 14259 13686 '@sanity/uuid': 3.0.2 ··· 14473 13900 - react-dom 14474 13901 - react-is 14475 13902 14476 - '@sanity/visual-editing-csm@2.0.22(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2)': 14477 - dependencies: 14478 - '@sanity/client': 7.11.0(debug@4.4.1) 14479 - '@sanity/visual-editing-types': 1.1.5(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) 14480 - valibot: 1.1.0(typescript@5.9.2) 14481 - transitivePeerDependencies: 14482 - - '@sanity/types' 14483 - - typescript 14484 - 14485 13903 '@sanity/visual-editing-csm@2.0.23(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2)': 14486 13904 dependencies: 14487 13905 '@sanity/client': 7.11.0(debug@4.4.1) 14488 - '@sanity/visual-editing-types': 1.1.5(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) 13906 + '@sanity/visual-editing-types': 1.1.6(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) 14489 13907 valibot: 1.1.0(typescript@5.9.2) 14490 13908 transitivePeerDependencies: 14491 13909 - '@sanity/types' 14492 13910 - typescript 14493 13911 14494 - '@sanity/visual-editing-types@1.1.5(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))': 14495 - dependencies: 14496 - '@sanity/client': 7.11.0(debug@4.4.1) 14497 - optionalDependencies: 14498 - '@sanity/types': 4.6.1(@types/react@18.3.24)(debug@4.4.1) 14499 - 14500 - '@sanity/visual-editing-types@1.1.6(@sanity/client@7.11.0(debug@4.4.1))(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))': 13912 + '@sanity/visual-editing-types@1.1.6(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))': 14501 13913 dependencies: 14502 13914 '@sanity/client': 7.11.0(debug@4.4.1) 14503 13915 optionalDependencies: ··· 14507 13919 dependencies: 14508 13920 '@sanity/comlink': 3.0.9 14509 13921 '@sanity/icons': 3.7.4(react@18.3.1) 14510 - '@sanity/insert-menu': 2.0.1(@sanity/types@4.6.1(@types/react@18.3.24))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) 14511 - '@sanity/mutate': 0.11.0-canary.4(xstate@5.20.2) 14512 - '@sanity/presentation-comlink': 1.0.28(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)) 14513 - '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0(debug@4.4.1)) 13922 + '@sanity/insert-menu': 2.0.2(@emotion/is-prop-valid@1.2.2)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1))(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) 13923 + '@sanity/mutate': 0.11.0-canary.4(xstate@5.21.0) 13924 + '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) 13925 + '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0) 14514 13926 '@sanity/ui': 3.0.14(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react-is@19.1.1)(react@18.3.1)(styled-components@6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) 14515 13927 '@sanity/visual-editing-csm': 2.0.23(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24))(typescript@5.9.2) 14516 13928 '@vercel/stega': 0.1.2 ··· 14523 13935 scroll-into-view-if-needed: 3.1.0 14524 13936 styled-components: 6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 14525 13937 use-effect-event: 2.0.3(react@18.3.1) 14526 - xstate: 5.20.2 13938 + xstate: 5.21.0 14527 13939 optionalDependencies: 14528 13940 '@sanity/client': 7.11.0(debug@4.4.1) 14529 13941 transitivePeerDependencies: ··· 14578 13990 '@types/hast': 3.0.4 14579 13991 hast-util-to-html: 9.0.5 14580 13992 14581 - '@shikijs/core@3.8.0': 14582 - dependencies: 14583 - '@shikijs/types': 3.8.0 14584 - '@shikijs/vscode-textmate': 10.0.2 14585 - '@types/hast': 3.0.4 14586 - hast-util-to-html: 9.0.5 14587 - 14588 13993 '@shikijs/engine-javascript@3.12.2': 14589 13994 dependencies: 14590 13995 '@shikijs/types': 3.12.2 14591 13996 '@shikijs/vscode-textmate': 10.0.2 14592 13997 oniguruma-to-es: 4.3.3 14593 13998 14594 - '@shikijs/engine-javascript@3.8.0': 14595 - dependencies: 14596 - '@shikijs/types': 3.8.0 14597 - '@shikijs/vscode-textmate': 10.0.2 14598 - oniguruma-to-es: 4.3.3 14599 - 14600 13999 '@shikijs/engine-oniguruma@3.12.2': 14601 14000 dependencies: 14602 14001 '@shikijs/types': 3.12.2 14603 14002 '@shikijs/vscode-textmate': 10.0.2 14604 14003 14605 - '@shikijs/engine-oniguruma@3.8.0': 14606 - dependencies: 14607 - '@shikijs/types': 3.8.0 14608 - '@shikijs/vscode-textmate': 10.0.2 14609 - 14610 14004 '@shikijs/langs@3.12.2': 14611 14005 dependencies: 14612 14006 '@shikijs/types': 3.12.2 14613 14007 14614 - '@shikijs/langs@3.8.0': 14615 - dependencies: 14616 - '@shikijs/types': 3.8.0 14617 - 14618 14008 '@shikijs/themes@3.12.2': 14619 14009 dependencies: 14620 14010 '@shikijs/types': 3.12.2 14621 - 14622 - '@shikijs/themes@3.8.0': 14623 - dependencies: 14624 - '@shikijs/types': 3.8.0 14625 14011 14626 14012 '@shikijs/transformers@3.12.2': 14627 14013 dependencies: ··· 14629 14015 '@shikijs/types': 3.12.2 14630 14016 14631 14017 '@shikijs/types@3.12.2': 14632 - dependencies: 14633 - '@shikijs/vscode-textmate': 10.0.2 14634 - '@types/hast': 3.0.4 14635 - 14636 - '@shikijs/types@3.8.0': 14637 14018 dependencies: 14638 14019 '@shikijs/vscode-textmate': 10.0.2 14639 14020 '@types/hast': 3.0.4 ··· 14666 14047 14667 14048 '@stylistic/eslint-plugin@5.2.3(eslint@9.35.0(jiti@2.5.1))': 14668 14049 dependencies: 14669 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) 14670 - '@typescript-eslint/types': 8.39.0 14050 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) 14051 + '@typescript-eslint/types': 8.39.1 14671 14052 eslint: 9.35.0(jiti@2.5.1) 14672 14053 eslint-visitor-keys: 4.2.1 14673 14054 espree: 10.4.0 ··· 14729 14110 14730 14111 '@types/conventional-commits-parser@5.0.1': 14731 14112 dependencies: 14732 - '@types/node': 24.0.15 14113 + '@types/node': 24.3.1 14733 14114 14734 14115 '@types/debug@4.1.12': 14735 14116 dependencies: ··· 14786 14167 '@types/node@20.19.0': 14787 14168 dependencies: 14788 14169 undici-types: 6.21.0 14789 - 14790 - '@types/node@24.0.15': 14791 - dependencies: 14792 - undici-types: 7.8.0 14793 14170 14794 14171 '@types/node@24.3.1': 14795 14172 dependencies: ··· 14948 14325 - supports-color 14949 14326 14950 14327 '@typescript-eslint/types@8.32.1': {} 14951 - 14952 - '@typescript-eslint/types@8.39.0': {} 14953 14328 14954 14329 '@typescript-eslint/types@8.39.1': {} 14955 14330 ··· 14985 14360 14986 14361 '@typescript-eslint/utils@8.32.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': 14987 14362 dependencies: 14988 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) 14363 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) 14989 14364 '@typescript-eslint/scope-manager': 8.32.1 14990 14365 '@typescript-eslint/types': 8.32.1 14991 14366 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.9.2) ··· 14996 14371 14997 14372 '@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': 14998 14373 dependencies: 14999 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) 14374 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) 15000 14375 '@typescript-eslint/scope-manager': 8.39.1 15001 14376 '@typescript-eslint/types': 8.39.1 15002 14377 '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) ··· 15079 14454 '@unocss/core': 66.5.1 15080 14455 unconfig: 7.3.3 15081 14456 15082 - '@unocss/core@66.3.3': {} 15083 - 15084 14457 '@unocss/core@66.5.1': {} 15085 14458 15086 - '@unocss/extractor-arbitrary-variants@66.3.3': 15087 - dependencies: 15088 - '@unocss/core': 66.3.3 15089 - 15090 14459 '@unocss/extractor-arbitrary-variants@66.5.1': 15091 14460 dependencies: 15092 14461 '@unocss/core': 66.5.1 ··· 15143 14512 ofetch: 1.4.1 15144 14513 transitivePeerDependencies: 15145 14514 - supports-color 15146 - 15147 - '@unocss/preset-mini@66.3.3': 15148 - dependencies: 15149 - '@unocss/core': 66.3.3 15150 - '@unocss/extractor-arbitrary-variants': 66.3.3 15151 - '@unocss/rule-utils': 66.3.3 15152 14515 15153 14516 '@unocss/preset-mini@66.5.1': 15154 14517 dependencies: ··· 15175 14538 '@unocss/core': 66.5.1 15176 14539 ofetch: 1.4.1 15177 14540 15178 - '@unocss/preset-wind3@66.3.3': 15179 - dependencies: 15180 - '@unocss/core': 66.3.3 15181 - '@unocss/preset-mini': 66.3.3 15182 - '@unocss/rule-utils': 66.3.3 15183 - 15184 14541 '@unocss/preset-wind3@66.5.1': 15185 14542 dependencies: 15186 14543 '@unocss/core': 66.5.1 ··· 15200 14557 15201 14558 '@unocss/reset@66.5.1': {} 15202 14559 15203 - '@unocss/rule-utils@66.3.3': 15204 - dependencies: 15205 - '@unocss/core': 66.3.3 15206 - magic-string: 0.30.19 15207 - 15208 14560 '@unocss/rule-utils@66.5.1': 15209 14561 dependencies: 15210 14562 '@unocss/core': 66.5.1 ··· 15387 14739 chai: 5.2.0 15388 14740 tinyrainbow: 2.0.0 15389 14741 15390 - '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': 14742 + '@vitest/mocker@3.2.4(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))': 15391 14743 dependencies: 15392 14744 '@vitest/spy': 3.2.4 15393 14745 estree-walker: 3.0.3 15394 14746 magic-string: 0.30.19 15395 14747 optionalDependencies: 15396 - vite: 7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 14748 + vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 15397 14749 15398 14750 '@vitest/pretty-format@3.2.4': 15399 14751 dependencies: ··· 15499 14851 15500 14852 '@vue/compiler-sfc@3.5.21': 15501 14853 dependencies: 15502 - '@babel/parser': 7.28.3 14854 + '@babel/parser': 7.28.4 15503 14855 '@vue/compiler-core': 3.5.21 15504 14856 '@vue/compiler-dom': 3.5.21 15505 14857 '@vue/compiler-ssr': 3.5.21 ··· 16104 15456 dependencies: 16105 15457 pako: 0.2.9 16106 15458 16107 - browserslist@4.25.2: 16108 - dependencies: 16109 - caniuse-lite: 1.0.30001735 16110 - electron-to-chromium: 1.5.203 16111 - node-releases: 2.0.19 16112 - update-browserslist-db: 1.1.3(browserslist@4.25.2) 16113 - 16114 15459 browserslist@4.25.4: 16115 15460 dependencies: 16116 15461 caniuse-lite: 1.0.30001741 ··· 16145 15490 esbuild: 0.25.9 16146 15491 load-tsconfig: 0.2.5 16147 15492 16148 - c12@3.1.0(magicast@0.3.5): 16149 - dependencies: 16150 - chokidar: 4.0.3 16151 - confbox: 0.2.2 16152 - defu: 6.1.4 16153 - dotenv: 16.6.1 16154 - exsolve: 1.0.7 16155 - giget: 2.0.0 16156 - jiti: 2.4.2 16157 - ohash: 2.0.11 16158 - pathe: 2.0.3 16159 - perfect-debounce: 1.0.0 16160 - pkg-types: 2.3.0 16161 - rc9: 2.1.2 16162 - optionalDependencies: 16163 - magicast: 0.3.5 16164 - 16165 15493 c12@3.2.0(magicast@0.3.5): 16166 15494 dependencies: 16167 15495 chokidar: 4.0.3 ··· 16229 15557 caniuse-lite: 1.0.30001741 16230 15558 lodash.memoize: 4.1.2 16231 15559 lodash.uniq: 4.5.0 16232 - 16233 - caniuse-lite@1.0.30001735: {} 16234 15560 16235 15561 caniuse-lite@1.0.30001741: {} 16236 15562 ··· 16281 15607 ansi-styles: 4.3.0 16282 15608 supports-color: 7.2.0 16283 15609 16284 - chalk@5.4.1: {} 16285 - 16286 15610 chalk@5.6.0: {} 16287 15611 16288 15612 change-case@4.1.2: ··· 16344 15668 16345 15669 chrome-launcher@1.2.0: 16346 15670 dependencies: 16347 - '@types/node': 24.0.15 15671 + '@types/node': 24.3.1 16348 15672 escape-string-regexp: 4.0.0 16349 15673 is-wsl: 2.2.0 16350 15674 lighthouse-logger: 2.0.1 ··· 16558 15882 dependencies: 16559 15883 is-what: 4.1.16 16560 15884 16561 - core-js-compat@3.45.0: 16562 - dependencies: 16563 - browserslist: 4.25.2 16564 - 16565 15885 core-js-compat@3.45.1: 16566 15886 dependencies: 16567 15887 browserslist: 4.25.4 ··· 16980 16300 dependencies: 16981 16301 jake: 10.9.4 16982 16302 16983 - electron-to-chromium@1.5.203: {} 16984 - 16985 16303 electron-to-chromium@1.5.214: {} 16986 16304 16987 16305 emoji-regex-xs@2.0.1: {} ··· 17173 16491 '@esbuild/win32-ia32': 0.21.5 17174 16492 '@esbuild/win32-x64': 0.21.5 17175 16493 17176 - esbuild@0.25.8: 17177 - optionalDependencies: 17178 - '@esbuild/aix-ppc64': 0.25.8 17179 - '@esbuild/android-arm': 0.25.8 17180 - '@esbuild/android-arm64': 0.25.8 17181 - '@esbuild/android-x64': 0.25.8 17182 - '@esbuild/darwin-arm64': 0.25.8 17183 - '@esbuild/darwin-x64': 0.25.8 17184 - '@esbuild/freebsd-arm64': 0.25.8 17185 - '@esbuild/freebsd-x64': 0.25.8 17186 - '@esbuild/linux-arm': 0.25.8 17187 - '@esbuild/linux-arm64': 0.25.8 17188 - '@esbuild/linux-ia32': 0.25.8 17189 - '@esbuild/linux-loong64': 0.25.8 17190 - '@esbuild/linux-mips64el': 0.25.8 17191 - '@esbuild/linux-ppc64': 0.25.8 17192 - '@esbuild/linux-riscv64': 0.25.8 17193 - '@esbuild/linux-s390x': 0.25.8 17194 - '@esbuild/linux-x64': 0.25.8 17195 - '@esbuild/netbsd-arm64': 0.25.8 17196 - '@esbuild/netbsd-x64': 0.25.8 17197 - '@esbuild/openbsd-arm64': 0.25.8 17198 - '@esbuild/openbsd-x64': 0.25.8 17199 - '@esbuild/openharmony-arm64': 0.25.8 17200 - '@esbuild/sunos-x64': 0.25.8 17201 - '@esbuild/win32-arm64': 0.25.8 17202 - '@esbuild/win32-ia32': 0.25.8 17203 - '@esbuild/win32-x64': 0.25.8 17204 - 17205 16494 esbuild@0.25.9: 17206 16495 optionalDependencies: 17207 16496 '@esbuild/aix-ppc64': 0.25.9 ··· 17272 16561 17273 16562 eslint-plugin-import-lite@0.3.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): 17274 16563 dependencies: 17275 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) 17276 - '@typescript-eslint/types': 8.39.0 16564 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) 16565 + '@typescript-eslint/types': 8.39.1 17277 16566 eslint: 9.35.0(jiti@2.5.1) 17278 16567 optionalDependencies: 17279 16568 typescript: 5.9.2 17280 16569 17281 16570 eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0(jiti@2.5.1)): 17282 16571 dependencies: 17283 - '@typescript-eslint/types': 8.39.0 16572 + '@typescript-eslint/types': 8.39.1 17284 16573 comment-parser: 1.4.1 17285 16574 debug: 4.4.1(supports-color@8.1.1) 17286 16575 eslint: 9.35.0(jiti@2.5.1) ··· 17359 16648 17360 16649 eslint-plugin-regexp@2.10.0(eslint@9.35.0(jiti@2.5.1)): 17361 16650 dependencies: 17362 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) 16651 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) 17363 16652 '@eslint-community/regexpp': 4.12.1 17364 16653 comment-parser: 1.4.1 17365 16654 eslint: 9.35.0(jiti@2.5.1) 17366 - jsdoc-type-pratt-parser: 4.1.0 16655 + jsdoc-type-pratt-parser: 4.8.0 17367 16656 refa: 0.12.1 17368 16657 regexp-ast-analysis: 0.7.1 17369 16658 scslre: 0.3.0 ··· 17371 16660 eslint-plugin-unicorn@60.0.0(eslint@9.35.0(jiti@2.5.1)): 17372 16661 dependencies: 17373 16662 '@babel/helper-validator-identifier': 7.27.1 17374 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) 16663 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) 17375 16664 '@eslint/plugin-kit': 0.3.5 17376 16665 change-case: 5.4.4 17377 16666 ci-info: 4.3.0 17378 16667 clean-regexp: 1.0.0 17379 - core-js-compat: 3.45.0 16668 + core-js-compat: 3.45.1 17380 16669 eslint: 9.35.0(jiti@2.5.1) 17381 16670 esquery: 1.6.0 17382 16671 find-up-simple: 1.0.1 ··· 17392 16681 17393 16682 eslint-plugin-vue@10.4.0(@typescript-eslint/parser@8.39.1(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(vue-eslint-parser@10.2.0(eslint@9.35.0(jiti@2.5.1))): 17394 16683 dependencies: 17395 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.35.0(jiti@2.5.1)) 16684 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) 17396 16685 eslint: 9.35.0(jiti@2.5.1) 17397 16686 natural-compare: 1.4.0 17398 16687 nth-check: 2.1.1 ··· 17606 16895 dependencies: 17607 16896 reusify: 1.1.0 17608 16897 17609 - fdir@6.4.6(picomatch@4.0.3): 17610 - optionalDependencies: 17611 - picomatch: 4.0.3 17612 - 17613 16898 fdir@6.5.0(picomatch@4.0.3): 17614 16899 optionalDependencies: 17615 16900 picomatch: 4.0.3 ··· 17910 17195 citty: 0.1.6 17911 17196 consola: 3.4.2 17912 17197 defu: 6.1.4 17913 - node-fetch-native: 1.6.6 17198 + node-fetch-native: 1.6.7 17914 17199 nypm: 0.6.1 17915 17200 pathe: 2.0.3 17916 17201 ··· 18111 17396 defu: 6.1.4 18112 17397 destr: 2.0.5 18113 17398 iron-webcrypto: 1.2.1 18114 - node-mock-http: 1.0.2 17399 + node-mock-http: 1.0.3 18115 17400 radix3: 1.1.2 18116 17401 ufo: 1.6.1 18117 17402 uncrypto: 0.1.3 ··· 18827 18112 merge-stream: 2.0.0 18828 18113 supports-color: 8.1.1 18829 18114 18830 - jiti@2.4.2: {} 18831 - 18832 18115 jiti@2.5.1: {} 18833 18116 18834 18117 js-beautify@1.15.4: ··· 18854 18137 dependencies: 18855 18138 argparse: 2.0.1 18856 18139 18857 - jsdoc-type-pratt-parser@4.1.0: {} 18858 - 18859 18140 jsdoc-type-pratt-parser@4.8.0: {} 18860 18141 18861 18142 jsdom-global@3.0.2(jsdom@23.2.0): ··· 18953 18234 lodash: 4.17.21 18954 18235 minimist: 1.2.8 18955 18236 prettier: 3.6.2 18956 - tinyglobby: 0.2.14 18237 + tinyglobby: 0.2.15 18957 18238 18958 18239 json-schema-traverse@0.4.1: {} 18959 18240 ··· 19074 18355 get-port-please: 3.2.0 19075 18356 h3: 1.15.4 19076 18357 http-shutdown: 1.2.2 19077 - jiti: 2.4.2 18358 + jiti: 2.5.1 19078 18359 mlly: 1.8.0 19079 18360 node-forge: 1.3.1 19080 18361 pathe: 1.1.2 ··· 19103 18384 19104 18385 loader-runner@4.3.0: {} 19105 18386 19106 - local-pkg@1.1.1: 19107 - dependencies: 19108 - mlly: 1.8.0 19109 - pkg-types: 2.3.0 19110 - quansync: 0.2.10 19111 - 19112 18387 local-pkg@1.1.2: 19113 18388 dependencies: 19114 18389 mlly: 1.8.0 ··· 19924 19199 emojilib: 2.4.0 19925 19200 skin-tone: 2.0.0 19926 19201 19927 - node-fetch-native@1.6.6: {} 19928 - 19929 19202 node-fetch-native@1.6.7: {} 19930 19203 19931 19204 node-fetch@2.7.0: ··· 19947 19220 css-select: 5.2.2 19948 19221 he: 1.2.0 19949 19222 19950 - node-mock-http@1.0.1: {} 19951 - 19952 - node-mock-http@1.0.2: {} 19953 - 19954 19223 node-mock-http@1.0.3: {} 19955 - 19956 - node-releases@2.0.19: {} 19957 19224 19958 19225 node-releases@2.0.20: {} 19959 19226 ··· 20024 19291 20025 19292 nuxt-og-image@5.1.9(@unhead/vue@2.0.14(vue@3.5.21(typescript@5.9.2)))(magicast@0.3.5)(unstorage@1.17.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0))(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.21(typescript@5.9.2)): 20026 19293 dependencies: 20027 - '@nuxt/devtools-kit': 2.6.2(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) 19294 + '@nuxt/devtools-kit': 2.6.3(magicast@0.3.5)(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) 20028 19295 '@nuxt/kit': 4.1.1(magicast@0.3.5) 20029 19296 '@resvg/resvg-js': 2.6.2 20030 19297 '@resvg/resvg-wasm': 2.6.2 20031 19298 '@unhead/vue': 2.0.14(vue@3.5.21(typescript@5.9.2)) 20032 - '@unocss/core': 66.3.3 20033 - '@unocss/preset-wind3': 66.3.3 19299 + '@unocss/core': 66.5.1 19300 + '@unocss/preset-wind3': 66.5.1 20034 19301 chrome-launcher: 1.2.0 20035 19302 consola: 3.4.2 20036 19303 defu: 6.1.4 ··· 20039 19306 magic-string: 0.30.19 20040 19307 mocked-exports: 0.1.1 20041 19308 nuxt-site-config: 3.2.2(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)) 20042 - nypm: 0.6.0 19309 + nypm: 0.6.1 20043 19310 ofetch: 1.4.1 20044 19311 ohash: 2.0.11 20045 19312 pathe: 2.0.3 20046 - pkg-types: 2.2.0 19313 + pkg-types: 2.3.0 20047 19314 playwright-core: 1.55.0 20048 19315 radix3: 1.1.2 20049 19316 satori: 0.15.2 20050 19317 satori-html: 0.3.2 20051 - sirv: 3.0.1 19318 + sirv: 3.0.2 20052 19319 std-env: 3.9.0 20053 19320 strip-literal: 3.0.0 20054 19321 ufo: 1.6.1 20055 19322 unplugin: 2.3.10 20056 19323 unstorage: 1.17.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0) 20057 - unwasm: 0.3.9 19324 + unwasm: 0.3.11 20058 19325 yoga-wasm-web: 0.3.3 20059 19326 transitivePeerDependencies: 20060 19327 - magicast ··· 20079 19346 nuxt-site-config-kit@3.2.2(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)): 20080 19347 dependencies: 20081 19348 '@nuxt/kit': 4.1.1(magicast@0.3.5) 20082 - pkg-types: 2.2.0 19349 + pkg-types: 2.3.0 20083 19350 site-config-stack: 3.2.2(vue@3.5.21(typescript@5.9.2)) 20084 19351 std-env: 3.9.0 20085 19352 ufo: 1.6.1 ··· 20092 19359 '@nuxt/kit': 4.1.1(magicast@0.3.5) 20093 19360 nuxt-site-config-kit: 3.2.2(magicast@0.3.5)(vue@3.5.21(typescript@5.9.2)) 20094 19361 pathe: 2.0.3 20095 - pkg-types: 2.2.0 20096 - sirv: 3.0.1 19362 + pkg-types: 2.3.0 19363 + sirv: 3.0.2 20097 19364 site-config-stack: 3.2.2(vue@3.5.21(typescript@5.9.2)) 20098 19365 ufo: 1.6.1 20099 19366 transitivePeerDependencies: ··· 20225 19492 20226 19493 nwsapi@2.2.22: {} 20227 19494 20228 - nypm@0.6.0: 20229 - dependencies: 20230 - citty: 0.1.6 20231 - consola: 3.4.2 20232 - pathe: 2.0.3 20233 - pkg-types: 2.2.0 20234 - tinyexec: 0.3.2 20235 - 20236 19495 nypm@0.6.1: 20237 19496 dependencies: 20238 19497 citty: 0.1.6 ··· 20284 19543 ofetch@1.4.1: 20285 19544 dependencies: 20286 19545 destr: 2.0.5 20287 - node-fetch-native: 1.6.6 19546 + node-fetch-native: 1.6.7 20288 19547 ufo: 1.6.1 20289 19548 20290 19549 ohash@1.1.6: {} ··· 20675 19934 dependencies: 20676 19935 confbox: 0.1.8 20677 19936 mlly: 1.8.0 20678 - pathe: 2.0.3 20679 - 20680 - pkg-types@2.2.0: 20681 - dependencies: 20682 - confbox: 0.2.2 20683 - exsolve: 1.0.7 20684 19937 pathe: 2.0.3 20685 19938 20686 19939 pkg-types@2.3.0: ··· 21003 20256 dependencies: 21004 20257 side-channel: 1.1.0 21005 20258 21006 - quansync@0.2.10: {} 21007 - 21008 20259 quansync@0.2.11: {} 21009 20260 21010 20261 querystringify@2.2.0: {} ··· 21580 20831 '@sanity/message-protocol': 0.17.2 21581 20832 '@sanity/migrate': 4.6.1(@types/react@18.3.24) 21582 20833 '@sanity/mutator': 4.6.1(@types/react@18.3.24) 21583 - '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0(debug@4.4.1))(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) 21584 - '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0(debug@4.4.1)) 20834 + '@sanity/presentation-comlink': 1.0.29(@sanity/client@7.11.0)(@sanity/types@4.6.1(@types/react@18.3.24)(debug@4.4.1)) 20835 + '@sanity/preview-url-secret': 2.1.14(@sanity/client@7.11.0) 21585 20836 '@sanity/schema': 4.6.1(@types/react@18.3.24)(debug@4.4.1) 21586 20837 '@sanity/sdk': 2.1.2(@types/react@18.3.24)(debug@4.4.1)(immer@10.1.3)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) 21587 20838 '@sanity/telemetry': 0.8.1(react@18.3.1) ··· 21885 21136 '@shikijs/vscode-textmate': 10.0.2 21886 21137 '@types/hast': 3.0.4 21887 21138 21888 - shiki@3.8.0: 21889 - dependencies: 21890 - '@shikijs/core': 3.8.0 21891 - '@shikijs/engine-javascript': 3.8.0 21892 - '@shikijs/engine-oniguruma': 3.8.0 21893 - '@shikijs/langs': 3.8.0 21894 - '@shikijs/themes': 3.8.0 21895 - '@shikijs/types': 3.8.0 21896 - '@shikijs/vscode-textmate': 10.0.2 21897 - '@types/hast': 3.0.4 21898 - 21899 21139 side-channel-list@1.0.0: 21900 21140 dependencies: 21901 21141 es-errors: 1.3.0 ··· 21956 21196 optional: true 21957 21197 21958 21198 simple-wcswidth@1.1.2: {} 21959 - 21960 - sirv@3.0.1: 21961 - dependencies: 21962 - '@polka/url': 1.0.0-next.29 21963 - mrmime: 2.0.1 21964 - totalist: 3.0.1 21965 21199 21966 21200 sirv@3.0.2: 21967 21201 dependencies: ··· 22290 21524 semver: 7.7.2 22291 21525 stylelint: 16.24.0(typescript@5.9.2) 22292 21526 stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@16.24.0(typescript@5.9.2)) 22293 - stylelint-config-recommended: 16.0.0(stylelint@16.24.0(typescript@5.9.2)) 22294 - 22295 - stylelint-config-recommended@16.0.0(stylelint@16.24.0(typescript@5.9.2)): 22296 - dependencies: 22297 - stylelint: 16.24.0(typescript@5.9.2) 21527 + stylelint-config-recommended: 17.0.0(stylelint@16.24.0(typescript@5.9.2)) 22298 21528 22299 21529 stylelint-config-recommended@17.0.0(stylelint@16.24.0(typescript@5.9.2)): 22300 21530 dependencies: ··· 22706 21936 undici-types@6.21.0: {} 22707 21937 22708 21938 undici-types@7.10.0: {} 22709 - 22710 - undici-types@7.8.0: {} 22711 21939 22712 21940 undici@5.29.0: 22713 21941 dependencies: ··· 22923 22151 pathe: 2.0.3 22924 22152 picomatch: 4.0.3 22925 22153 scule: 1.3.0 22926 - tinyglobby: 0.2.14 22154 + tinyglobby: 0.2.15 22927 22155 unplugin: 2.3.10 22928 22156 unplugin-utils: 0.2.5 22929 22157 yaml: 2.8.1 ··· 22969 22197 '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 22970 22198 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 22971 22199 22972 - unstorage@1.16.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0): 22973 - dependencies: 22974 - anymatch: 3.1.3 22975 - chokidar: 4.0.3 22976 - destr: 2.0.5 22977 - h3: 1.15.4 22978 - lru-cache: 10.4.3 22979 - node-fetch-native: 1.6.7 22980 - ofetch: 1.4.1 22981 - ufo: 1.6.1 22982 - optionalDependencies: 22983 - '@netlify/blobs': 9.1.2 22984 - '@vercel/blob': 1.1.1 22985 - db0: 0.3.2(better-sqlite3@11.10.0) 22986 - ioredis: 5.7.0 22987 - 22988 22200 unstorage@1.17.1(@netlify/blobs@9.1.2)(@vercel/blob@1.1.1)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.7.0): 22989 22201 dependencies: 22990 22202 anymatch: 3.1.3 ··· 23021 22233 magic-string: 0.30.19 23022 22234 mlly: 1.8.0 23023 22235 pathe: 2.0.3 23024 - pkg-types: 2.2.0 22236 + pkg-types: 2.3.0 23025 22237 unplugin: 2.3.10 23026 22238 23027 - unwasm@0.3.9: 23028 - dependencies: 23029 - knitwork: 1.2.0 23030 - magic-string: 0.30.19 23031 - mlly: 1.8.0 23032 - pathe: 1.1.2 23033 - pkg-types: 1.3.1 23034 - unplugin: 1.16.1 23035 - 23036 - update-browserslist-db@1.1.3(browserslist@4.25.2): 23037 - dependencies: 23038 - browserslist: 4.25.2 23039 - escalade: 3.2.0 23040 - picocolors: 1.1.1 23041 - 23042 22239 update-browserslist-db@1.1.3(browserslist@4.25.4): 23043 22240 dependencies: 23044 22241 browserslist: 4.25.4 ··· 23153 22350 debug: 4.4.1(supports-color@8.1.1) 23154 22351 es-module-lexer: 1.7.0 23155 22352 pathe: 2.0.3 23156 - vite: 7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 22353 + vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 23157 22354 transitivePeerDependencies: 23158 22355 - '@types/node' 23159 22356 - jiti ··· 23177 22374 picomatch: 4.0.3 23178 22375 strip-ansi: 7.1.0 23179 22376 tiny-invariant: 1.3.3 23180 - tinyglobby: 0.2.14 22377 + tinyglobby: 0.2.15 23181 22378 vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 23182 22379 vscode-uri: 3.1.0 23183 22380 optionalDependencies: ··· 23226 22423 - supports-color 23227 22424 - typescript 23228 22425 23229 - vite@7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1): 23230 - dependencies: 23231 - esbuild: 0.25.8 23232 - fdir: 6.4.6(picomatch@4.0.3) 23233 - picomatch: 4.0.3 23234 - postcss: 8.5.6 23235 - rollup: 4.50.1 23236 - tinyglobby: 0.2.14 23237 - optionalDependencies: 23238 - '@types/node': 24.3.1 23239 - fsevents: 2.3.3 23240 - jiti: 2.5.1 23241 - terser: 5.44.0 23242 - yaml: 2.8.1 23243 - 23244 22426 vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1): 23245 22427 dependencies: 23246 22428 esbuild: 0.25.9 ··· 23277 22459 dependencies: 23278 22460 '@types/chai': 5.2.2 23279 22461 '@vitest/expect': 3.2.4 23280 - '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) 22462 + '@vitest/mocker': 3.2.4(vite@7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1)) 23281 22463 '@vitest/pretty-format': 3.2.4 23282 22464 '@vitest/runner': 3.2.4 23283 22465 '@vitest/snapshot': 3.2.4 ··· 23292 22474 std-env: 3.9.0 23293 22475 tinybench: 2.9.0 23294 22476 tinyexec: 0.3.2 23295 - tinyglobby: 0.2.14 22477 + tinyglobby: 0.2.15 23296 22478 tinypool: 1.1.1 23297 22479 tinyrainbow: 2.0.0 23298 - vite: 7.0.5(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 22480 + vite: 7.1.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 23299 22481 vite-node: 3.2.4(@types/node@24.3.1)(jiti@2.5.1)(terser@5.44.0)(yaml@2.8.1) 23300 22482 why-is-node-running: 2.3.0 23301 22483 optionalDependencies: ··· 23600 22782 dependencies: 23601 22783 commander: 2.20.3 23602 22784 cssfilter: 0.0.10 23603 - 23604 - xstate@5.20.2: {} 23605 22785 23606 22786 xstate@5.21.0: {} 23607 22787
+347
scripts/linkedin-auth.ts
··· 1 + /** 2 + * LinkedIn OAuth Token Generator 3 + * 4 + * This script helps you generate a LinkedIn access token with the proper scopes 5 + * for posting content. LinkedIn access tokens are valid for 60 days and must be 6 + * refreshed manually through re-authorization. 7 + * 8 + * Prerequisites: 9 + * 1. Create an app in LinkedIn Developers Portal (https://www.linkedin.com/developers/) 10 + * 2. Add the following redirect URI: http://localhost:8080/callback 11 + * 3. Enable the required scopes in your app settings: 12 + * - openid (Use your name and photo) 13 + * - profile (Use your name and photo) 14 + * - email (Use the primary email address) 15 + * - w_member_social (Create, modify, and delete posts on your behalf) 16 + * 4. Get your Client ID and Client Secret 17 + * 18 + * Usage: 19 + * node scripts/linkedin-auth.ts 20 + * node scripts/linkedin-auth.ts --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET 21 + * node scripts/linkedin-auth.ts test YOUR_ACCESS_TOKEN 22 + * 23 + * Environment variables (alternative to command line args): 24 + * LINKEDIN_CLIENT_ID=your_client_id 25 + * LINKEDIN_CLIENT_SECRET=your_client_secret 26 + */ 27 + 28 + import { createServer } from 'node:http' 29 + import { spawn } from 'node:child_process' 30 + import { parse } from 'node:url' 31 + import process from 'node:process' 32 + import { randomBytes } from 'node:crypto' 33 + import { defineCommand, runMain } from 'citty' 34 + 35 + // Required LinkedIn API scopes 36 + // Note: These scopes must be enabled in your LinkedIn app settings 37 + const SCOPES = [ 38 + 'openid', 39 + 'profile', 40 + 'email', 41 + 'w_member_social', 42 + ] as const 43 + 44 + const REDIRECT_URI = 'http://localhost:8080/callback' 45 + const PORT = 8080 46 + 47 + interface LinkedInTokenResponse { 48 + access_token: string 49 + token_type: string 50 + expires_in: number 51 + scope: string 52 + } 53 + 54 + interface LinkedInProfile { 55 + sub: string 56 + name: string 57 + email: string 58 + picture?: string 59 + } 60 + 61 + interface AuthOptions { 62 + clientId?: string 63 + clientSecret?: string 64 + } 65 + 66 + class LinkedInAuthGenerator { 67 + private clientId: string 68 + private clientSecret: string 69 + private state: string 70 + 71 + constructor (options: AuthOptions = {}) { 72 + this.clientId = options.clientId || process.env.LINKEDIN_CLIENT_ID! 73 + this.clientSecret = options.clientSecret || process.env.LINKEDIN_CLIENT_SECRET! 74 + 75 + if (!this.clientId || !this.clientSecret) { 76 + console.error('❌ Missing LinkedIn credentials!') 77 + console.error('Please provide via command line or environment variables:') 78 + console.error(' --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET') 79 + console.error('Or set environment variables:') 80 + console.error(' LINKEDIN_CLIENT_ID=your_client_id') 81 + console.error(' LINKEDIN_CLIENT_SECRET=your_client_secret') 82 + process.exit(1) 83 + } 84 + 85 + // Generate a random state for CSRF protection 86 + this.state = randomBytes(32).toString('hex') 87 + } 88 + 89 + generateAuthUrl (): string { 90 + const params = new URLSearchParams({ 91 + response_type: 'code', 92 + client_id: this.clientId, 93 + redirect_uri: REDIRECT_URI, 94 + scope: SCOPES.join(' '), 95 + state: this.state, 96 + }) 97 + 98 + return `https://www.linkedin.com/oauth/v2/authorization?${params.toString()}` 99 + } 100 + 101 + async exchangeCodeForTokens (code: string, state: string): Promise<LinkedInTokenResponse> { 102 + // Verify state parameter 103 + if (state !== this.state) { 104 + throw new Error('Invalid state parameter - potential CSRF attack') 105 + } 106 + 107 + const tokenUrl = 'https://www.linkedin.com/oauth/v2/accessToken' 108 + const body = new URLSearchParams({ 109 + grant_type: 'authorization_code', 110 + code: code, 111 + redirect_uri: REDIRECT_URI, 112 + client_id: this.clientId, 113 + client_secret: this.clientSecret, 114 + }) 115 + 116 + try { 117 + const response = await fetch(tokenUrl, { 118 + method: 'POST', 119 + headers: { 120 + 'Content-Type': 'application/x-www-form-urlencoded', 121 + }, 122 + body: body.toString(), 123 + }) 124 + 125 + if (!response.ok) { 126 + const error = await response.text() 127 + throw new Error(`Token exchange failed: ${response.status} ${error}`) 128 + } 129 + 130 + return await response.json() as LinkedInTokenResponse 131 + } 132 + catch (error) { 133 + console.error('❌ Error exchanging code for tokens:', error instanceof Error ? error.message : error) 134 + throw error 135 + } 136 + } 137 + 138 + startServer (): Promise<LinkedInTokenResponse> { 139 + return new Promise((resolve, reject) => { 140 + const server = createServer(async (req, res) => { 141 + const parsedUrl = parse(req.url || '', true) 142 + 143 + if (parsedUrl.pathname === '/callback') { 144 + const { code, error, error_description, state } = parsedUrl.query 145 + 146 + if (error) { 147 + res.writeHead(400, { 'Content-Type': 'text/html' }) 148 + res.end(`<h1>Authorization Error</h1><p>${error}: ${error_description}</p>`) 149 + reject(new Error(`Authorization error: ${error} - ${error_description}`)) 150 + return 151 + } 152 + 153 + if (code && state && typeof code === 'string' && typeof state === 'string') { 154 + try { 155 + const tokens = await this.exchangeCodeForTokens(code, state) 156 + 157 + res.writeHead(200, { 'Content-Type': 'text/html' }) 158 + res.end(` 159 + <h1>✅ Authorization Successful!</h1> 160 + <p>You can close this window and return to the terminal.</p> 161 + <script>setTimeout(() => window.close(), 3000)</script> 162 + `) 163 + 164 + server.close() 165 + resolve(tokens) 166 + } 167 + catch (error) { 168 + res.writeHead(500, { 'Content-Type': 'text/html' }) 169 + res.end(`<h1>❌ Token Exchange Error</h1><p>${error instanceof Error ? error.message : error}</p>`) 170 + reject(error) 171 + } 172 + } 173 + } 174 + else { 175 + res.writeHead(404, { 'Content-Type': 'text/plain' }) 176 + res.end('Not found') 177 + } 178 + }) 179 + 180 + server.listen(PORT, (err?: Error) => { 181 + if (err) reject(err) 182 + }) 183 + }) 184 + } 185 + 186 + async generateTokens (): Promise<LinkedInTokenResponse> { 187 + console.log('🔗 LinkedIn Access Token Generator') 188 + console.log('==================================\n') 189 + 190 + console.log('Required scopes:') 191 + SCOPES.forEach(scope => console.log(` ✓ ${scope}`)) 192 + console.log() 193 + 194 + console.log('🌐 Starting local server for OAuth callback...') 195 + 196 + try { 197 + const serverPromise = this.startServer() 198 + const authUrl = this.generateAuthUrl() 199 + 200 + console.log('🚀 Please visit the following URL to authorize the application:') 201 + console.log(`\n${authUrl}\n`) 202 + console.log('💡 This should open automatically in your browser...') 203 + 204 + // Try to open the URL automatically 205 + try { 206 + const opener = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open' 207 + spawn(opener, [authUrl], { detached: true, stdio: 'ignore' }).unref() 208 + } 209 + catch { 210 + console.log('ℹ️ Could not open browser automatically') 211 + } 212 + 213 + console.log('⏳ Waiting for authorization...') 214 + const tokens = await serverPromise 215 + 216 + return tokens 217 + } 218 + catch (error) { 219 + console.error('❌ Authorization failed:', error instanceof Error ? error.message : error) 220 + throw error 221 + } 222 + } 223 + 224 + displayResults (tokens: LinkedInTokenResponse): void { 225 + console.log('\n🎉 Success! Here are your LinkedIn tokens:') 226 + console.log('==========================================\n') 227 + 228 + console.log('📋 Copy this to your environment variables:') 229 + console.log('```bash') 230 + console.log(`export NUXT_LINKEDIN_ACCESS_TOKEN="${tokens.access_token}"`) 231 + console.log('```\n') 232 + 233 + console.log('Or add to your .env file:') 234 + console.log('```env') 235 + console.log(`NUXT_LINKEDIN_ACCESS_TOKEN=${tokens.access_token}`) 236 + console.log('```\n') 237 + 238 + if (tokens.expires_in) { 239 + const expiryDate = new Date(Date.now() + (tokens.expires_in * 1000)) 240 + console.log(`⏰ Access token expires: ${expiryDate.toLocaleString()}`) 241 + console.log('⚠️ LinkedIn tokens typically expire in 60 days') 242 + } 243 + 244 + console.log('\n📝 Important Notes:') 245 + console.log('• LinkedIn does not provide refresh tokens for most applications') 246 + console.log('• You will need to re-run this script when the token expires') 247 + console.log('• Consider setting up a calendar reminder for token renewal') 248 + 249 + console.log('\n🔄 To generate a new token when this expires:') 250 + console.log('node scripts/linkedin-auth.ts') 251 + } 252 + 253 + async testToken (accessToken: string): Promise<boolean> { 254 + console.log('\n🧪 Testing access token...') 255 + 256 + try { 257 + // Using OpenID Connect userinfo endpoint 258 + const response = await fetch('https://api.linkedin.com/v2/userinfo', { 259 + headers: { 260 + 'Authorization': `Bearer ${accessToken}`, 261 + 'Content-Type': 'application/json', 262 + }, 263 + }) 264 + 265 + if (!response.ok) { 266 + throw new Error(`API test failed: ${response.status} ${response.statusText}`) 267 + } 268 + 269 + const profile = await response.json() as LinkedInProfile 270 + console.log('✅ Token is valid!') 271 + console.log(`👤 Authenticated as: ${profile.name}${profile.email ? ` (${profile.email})` : ''}`) 272 + 273 + return true 274 + } 275 + catch (error) { 276 + console.error('❌ Token test failed:', error instanceof Error ? error.message : error) 277 + return false 278 + } 279 + } 280 + } 281 + 282 + const main = defineCommand({ 283 + meta: { 284 + name: 'linkedin-auth', 285 + version: '1.0.0', 286 + description: 'LinkedIn OAuth Token Generator', 287 + }, 288 + args: { 289 + 'client-id': { 290 + type: 'string', 291 + description: 'LinkedIn app client ID', 292 + }, 293 + 'client-secret': { 294 + type: 'string', 295 + description: 'LinkedIn app client secret', 296 + }, 297 + }, 298 + subCommands: { 299 + generate: defineCommand({ 300 + meta: { 301 + name: 'generate', 302 + description: 'Generate a new LinkedIn access token', 303 + }, 304 + args: { 305 + 'client-id': { 306 + type: 'string', 307 + description: 'LinkedIn app client ID', 308 + }, 309 + 'client-secret': { 310 + type: 'string', 311 + description: 'LinkedIn app client secret', 312 + }, 313 + }, 314 + async run ({ args }) { 315 + const generator = new LinkedInAuthGenerator({ 316 + clientId: typeof args['client-id'] === 'string' ? args['client-id'] : undefined, 317 + clientSecret: typeof args['client-secret'] === 'string' ? args['client-secret'] : undefined, 318 + }) 319 + 320 + try { 321 + const tokens = await generator.generateTokens() 322 + if (!tokens) { 323 + console.error('❌ Failed to generate tokens') 324 + process.exit(1) 325 + } 326 + 327 + generator.displayResults(tokens) 328 + 329 + // Test the token 330 + await generator.testToken(tokens.access_token) 331 + } 332 + catch (error: any) { 333 + console.error('❌ Failed to generate tokens:', error.message) 334 + process.exit(1) 335 + } 336 + }, 337 + }), 338 + }, 339 + }) 340 + 341 + // Handle graceful shutdown 342 + process.on('SIGINT', () => { 343 + console.log('\n\n👋 Goodbye!') 344 + process.exit(0) 345 + }) 346 + 347 + runMain(main)
+125 -67
scripts/youtube-auth.mjs scripts/youtube-auth.ts
··· 1 - #!/usr/bin/env node 2 - 3 1 /** 4 2 * YouTube OAuth Token Generator 5 3 * ··· 14 12 * 4. Download the credentials JSON file 15 13 * 16 14 * Usage: 17 - * node scripts/youtube-auth.js 18 - * 19 - * Or with credentials file path: 20 - * node scripts/youtube-auth.js ./path/to/credentials.json 21 - * 22 - * To refresh an existing token: 23 - * node scripts/youtube-auth.js --refresh "your_refresh_token" 15 + * node scripts/youtube-auth.ts 16 + * node scripts/youtube-auth.ts --credentials ./path/to/credentials.json 17 + * node scripts/youtube-auth.ts refresh "your_refresh_token" 24 18 */ 25 19 26 20 import { createServer } from 'node:http' 27 21 import { parse } from 'node:url' 22 + import process from 'node:process' 28 23 import { readFileSync, existsSync } from 'node:fs' 29 24 import { join } from 'node:path' 25 + import { defineCommand, runMain } from 'citty' 30 26 31 27 // Required YouTube API scopes 32 28 const SCOPES = [ 33 29 'https://www.googleapis.com/auth/youtube', // Video upload 34 30 'https://www.googleapis.com/auth/youtube.force-ssl', // Playlist management 35 - ] 31 + ] as const 36 32 37 33 const REDIRECT_URI = 'http://localhost:8080/callback' 38 34 const PORT = 8080 39 35 36 + interface YouTubeCredentials { 37 + client_id: string 38 + client_secret: string 39 + redirect_uris?: string[] 40 + } 41 + 42 + interface YouTubeTokenResponse { 43 + access_token: string 44 + token_type: string 45 + expires_in: number 46 + refresh_token?: string 47 + } 48 + 49 + interface CredentialsFile { 50 + installed?: YouTubeCredentials 51 + web?: YouTubeCredentials 52 + client_id?: string 53 + client_secret?: string 54 + } 55 + 40 56 class YouTubeAuthGenerator { 41 - constructor (credentialsPath) { 57 + private credentialsPath: string 58 + private credentials: YouTubeCredentials 59 + 60 + constructor (credentialsPath?: string) { 42 61 this.credentialsPath = credentialsPath || this.findCredentialsFile() 43 62 this.credentials = this.loadCredentials() 44 63 } 45 64 46 - findCredentialsFile () { 65 + findCredentialsFile (): string { 47 66 const possiblePaths = [ 48 67 './credentials.json', 49 68 './google-credentials.json', ··· 65 84 process.exit(1) 66 85 } 67 86 68 - loadCredentials () { 87 + loadCredentials (): YouTubeCredentials { 69 88 try { 70 89 const content = readFileSync(this.credentialsPath, 'utf8') 71 - const data = JSON.parse(content) 90 + const data: CredentialsFile = JSON.parse(content) 72 91 73 92 // Handle both direct credentials and wrapped format 74 - const creds = data.installed || data.web || data 93 + const creds = data.installed || data.web || data as YouTubeCredentials 75 94 76 95 if (!creds.client_id || !creds.client_secret) { 77 96 throw new Error('Missing client_id or client_secret in credentials file') 78 97 } 79 98 80 - return creds 99 + return { 100 + client_id: creds.client_id, 101 + client_secret: creds.client_secret, 102 + redirect_uris: creds.redirect_uris, 103 + } 81 104 } 82 105 catch (error) { 83 - console.error('❌ Error loading credentials:', error.message) 106 + console.error('❌ Error loading credentials:', error instanceof Error ? error.message : error) 84 107 process.exit(1) 85 108 } 86 109 } 87 110 88 - generateAuthUrl () { 111 + generateAuthUrl (): string { 89 112 const params = new URLSearchParams({ 90 113 client_id: this.credentials.client_id, 91 114 redirect_uri: REDIRECT_URI, ··· 98 121 return `https://accounts.google.com/o/oauth2/v2/auth?${params.toString()}` 99 122 } 100 123 101 - async exchangeCodeForTokens (code) { 124 + async exchangeCodeForTokens (code: string): Promise<YouTubeTokenResponse> { 102 125 const tokenUrl = 'https://oauth2.googleapis.com/token' 103 126 const body = new URLSearchParams({ 104 127 client_id: this.credentials.client_id, ··· 125 148 return await response.json() 126 149 } 127 150 catch (error) { 128 - console.error('❌ Error exchanging code for tokens:', error.message) 151 + console.error('❌ Error exchanging code for tokens:', error instanceof Error ? error.message : error) 129 152 throw error 130 153 } 131 154 } 132 155 133 - async refreshAccessToken (refreshToken) { 156 + async refreshAccessToken (refreshToken: string): Promise<YouTubeTokenResponse> { 134 157 const tokenUrl = 'https://oauth2.googleapis.com/token' 135 158 const body = new URLSearchParams({ 136 159 client_id: this.credentials.client_id, ··· 153 176 throw new Error(`Token refresh failed: ${response.status} ${error}`) 154 177 } 155 178 156 - return await response.json() 179 + return await response.json() as YouTubeTokenResponse 157 180 } 158 181 catch (error) { 159 - console.error('❌ Error refreshing token:', error.message) 182 + console.error('❌ Error refreshing token:', error instanceof Error ? error.message : error) 160 183 throw error 161 184 } 162 185 } 163 186 164 - startServer () { 187 + startServer (): Promise<YouTubeTokenResponse> { 165 188 return new Promise((resolve, reject) => { 166 189 const server = createServer(async (req, res) => { 167 - const parsedUrl = parse(req.url, true) 190 + const parsedUrl = parse(req.url || '', true) 168 191 169 192 if (parsedUrl.pathname === '/callback') { 170 193 const { code, error } = parsedUrl.query ··· 176 199 return 177 200 } 178 201 179 - if (code) { 202 + if (code && typeof code === 'string') { 180 203 try { 181 204 const tokens = await this.exchangeCodeForTokens(code) 182 205 ··· 192 215 } 193 216 catch (error) { 194 217 res.writeHead(500, { 'Content-Type': 'text/html' }) 195 - res.end(`<h1>❌ Token Exchange Error</h1><p>${error.message}</p>`) 218 + res.end(`<h1>❌ Token Exchange Error</h1><p>${error instanceof Error ? error.message : error}</p>`) 196 219 reject(error) 197 220 } 198 221 } ··· 203 226 } 204 227 }) 205 228 206 - server.listen(PORT, err => { 229 + server.listen(PORT, (err?: Error) => { 207 230 if (err) reject(err) 208 231 }) 209 232 }) 210 233 } 211 234 212 - async generateTokens () { 235 + async generateTokens (): Promise<YouTubeTokenResponse> { 213 236 console.log('🔐 YouTube Access Token Generator') 214 237 console.log('================================\n') 215 238 ··· 233 256 return tokens 234 257 } 235 258 catch (error) { 236 - console.error('❌ Authorization failed:', error.message) 259 + console.error('❌ Authorization failed:', error instanceof Error ? error.message : error) 237 260 throw error 238 261 } 239 262 } 240 263 241 - displayResults (tokens) { 264 + displayResults (tokens: YouTubeTokenResponse): void { 242 265 console.log('\n🎉 Success! Here are your tokens:') 243 266 console.log('=====================================\n') 244 267 ··· 274 297 275 298 if (tokens.refresh_token) { 276 299 console.log('\n🔄 To refresh your access token later, you can use:') 277 - console.log(`node scripts/youtube-auth.js --refresh "${tokens.refresh_token}"`) 300 + console.log(`node scripts/youtube-auth.ts --refresh "${tokens.refresh_token}"`) 278 301 console.log('\n💡 For automatic token refresh in production, set these environment variables:') 279 302 console.log(`NUXT_YOUTUBE_REFRESH_TOKEN=${tokens.refresh_token}`) 280 303 console.log(`NUXT_YOUTUBE_CLIENT_ID=${this.credentials.client_id}`) ··· 282 305 } 283 306 } 284 307 285 - async handleRefreshToken (refreshToken) { 308 + async handleRefreshToken (refreshToken: string): Promise<void> { 286 309 console.log('🔄 Refreshing access token...') 287 310 288 311 try { ··· 302 325 } 303 326 } 304 327 catch (error) { 305 - console.error('❌ Failed to refresh token:', error.message) 328 + console.error('❌ Failed to refresh token:', error instanceof Error ? error.message : error) 306 329 console.log('\n💡 You may need to re-authorize the application:') 307 - console.log(' node scripts/youtube-auth.js') 330 + console.log(' node scripts/youtube-auth.ts') 308 331 process.exit(1) 309 332 } 310 333 } 311 334 } 312 335 313 - // Main execution 314 - async function main () { 315 - const args = process.argv.slice(2) 316 - 317 - // Handle refresh token mode 318 - if (args[0] === '--refresh') { 319 - if (!args[1]) { 320 - console.error('❌ Please provide a refresh token: --refresh "your_refresh_token"') 321 - process.exit(1) 322 - } 323 - 324 - const generator = new YouTubeAuthGenerator() 325 - await generator.handleRefreshToken(args[1]) 326 - return 327 - } 336 + const main = defineCommand({ 337 + meta: { 338 + name: 'youtube-auth', 339 + version: '1.0.0', 340 + description: 'YouTube OAuth Token Generator', 341 + }, 342 + args: { 343 + credentials: { 344 + type: 'positional', 345 + description: 'Path to credentials JSON file', 346 + required: false, 347 + }, 348 + }, 349 + subCommands: { 350 + generate: defineCommand({ 351 + meta: { 352 + name: 'generate', 353 + description: 'Generate new YouTube access and refresh tokens', 354 + }, 355 + args: { 356 + credentials: { 357 + type: 'positional', 358 + description: 'Path to credentials JSON file', 359 + required: false, 360 + }, 361 + }, 362 + async run ({ args }) { 363 + const credentialsPath = typeof args.credentials === 'string' ? args.credentials : undefined 364 + const generator = new YouTubeAuthGenerator(credentialsPath) 328 365 329 - // Normal authorization flow 330 - const credentialsPath = args[0] 331 - const generator = new YouTubeAuthGenerator(credentialsPath) 366 + try { 367 + const tokens = await generator.generateTokens() 368 + if (!tokens) { 369 + console.error('❌ Failed to generate tokens') 370 + process.exit(1) 371 + } 372 + generator.displayResults(tokens) 373 + } 374 + catch (error) { 375 + console.error('❌ Failed to generate tokens:', error instanceof Error ? error.message : error) 376 + process.exit(1) 377 + } 378 + }, 379 + }), 380 + refresh: defineCommand({ 381 + meta: { 382 + name: 'refresh', 383 + description: 'Refresh an existing access token', 384 + }, 385 + args: { 386 + token: { 387 + type: 'positional', 388 + description: 'Refresh token to use', 389 + required: true, 390 + }, 391 + }, 392 + async run ({ args }) { 393 + if (typeof args.token !== 'string') { 394 + console.error('❌ Please provide a refresh token: youtube-auth refresh "your_refresh_token"') 395 + process.exit(1) 396 + } 332 397 333 - try { 334 - const tokens = await generator.generateTokens() 335 - if (!tokens) { 336 - console.error('❌ Failed to generate tokens') 337 - process.exit(1) 338 - } 339 - generator.displayResults(tokens) 340 - } 341 - catch (error) { 342 - console.error('❌ Failed to generate tokens:', error.message) 343 - process.exit(1) 344 - } 345 - } 398 + const generator = new YouTubeAuthGenerator() 399 + await generator.handleRefreshToken(args.token) 400 + }, 401 + }), 402 + }, 403 + }) 346 404 347 405 // Handle graceful shutdown 348 406 process.on('SIGINT', () => { ··· 350 408 process.exit(0) 351 409 }) 352 410 353 - main().catch(console.error) 411 + runMain(main)