Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol. wisp.place

Compare changes

Choose any two refs to compare.

-3
.gitmodules
··· 1 - [submodule "cli/jacquard"] 2 - path = cli/jacquard 3 - url = https://tangled.org/@nonbinary.computer/jacquard
+69 -69
cli/Cargo.lock
··· 139 139 140 140 [[package]] 141 141 name = "async-compression" 142 - version = "0.4.32" 142 + version = "0.4.33" 143 143 source = "registry+https://github.com/rust-lang/crates.io-index" 144 - checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" 144 + checksum = "93c1f86859c1af3d514fa19e8323147ff10ea98684e6c7b307912509f50e67b2" 145 145 dependencies = [ 146 146 "compression-codecs", 147 147 "compression-core", ··· 158 158 dependencies = [ 159 159 "proc-macro2", 160 160 "quote", 161 - "syn 2.0.108", 161 + "syn 2.0.110", 162 162 ] 163 163 164 164 [[package]] ··· 329 329 "proc-macro2", 330 330 "quote", 331 331 "rustversion", 332 - "syn 2.0.108", 332 + "syn 2.0.110", 333 333 ] 334 334 335 335 [[package]] ··· 428 428 429 429 [[package]] 430 430 name = "cc" 431 - version = "1.2.44" 431 + version = "1.2.45" 432 432 source = "registry+https://github.com/rust-lang/crates.io-index" 433 - checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" 433 + checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" 434 434 dependencies = [ 435 435 "find-msvc-tools", 436 436 "shlex", ··· 555 555 "heck 0.5.0", 556 556 "proc-macro2", 557 557 "quote", 558 - "syn 2.0.108", 558 + "syn 2.0.110", 559 559 ] 560 560 561 561 [[package]] ··· 582 582 583 583 [[package]] 584 584 name = "compression-codecs" 585 - version = "0.4.31" 585 + version = "0.4.32" 586 586 source = "registry+https://github.com/rust-lang/crates.io-index" 587 - checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" 587 + checksum = "680dc087785c5230f8e8843e2e57ac7c1c90488b6a91b88caa265410568f441b" 588 588 dependencies = [ 589 589 "compression-core", 590 590 "flate2", ··· 593 593 594 594 [[package]] 595 595 name = "compression-core" 596 - version = "0.4.29" 596 + version = "0.4.30" 597 597 source = "registry+https://github.com/rust-lang/crates.io-index" 598 - checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" 598 + checksum = "3a9b614a5787ef0c8802a55766480563cb3a93b435898c422ed2a359cf811582" 599 599 600 600 [[package]] 601 601 name = "const-oid" ··· 736 736 "proc-macro2", 737 737 "quote", 738 738 "strsim", 739 - "syn 2.0.108", 739 + "syn 2.0.110", 740 740 ] 741 741 742 742 [[package]] ··· 747 747 dependencies = [ 748 748 "darling_core", 749 749 "quote", 750 - "syn 2.0.108", 750 + "syn 2.0.110", 751 751 ] 752 752 753 753 [[package]] ··· 787 787 checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" 788 788 dependencies = [ 789 789 "data-encoding", 790 - "syn 2.0.108", 790 + "syn 2.0.110", 791 791 ] 792 792 793 793 [[package]] ··· 838 838 dependencies = [ 839 839 "proc-macro2", 840 840 "quote", 841 - "syn 2.0.108", 841 + "syn 2.0.110", 842 842 "unicode-xid", 843 843 ] 844 844 ··· 889 889 dependencies = [ 890 890 "proc-macro2", 891 891 "quote", 892 - "syn 2.0.108", 892 + "syn 2.0.110", 893 893 ] 894 894 895 895 [[package]] ··· 950 950 "heck 0.5.0", 951 951 "proc-macro2", 952 952 "quote", 953 - "syn 2.0.108", 953 + "syn 2.0.110", 954 954 ] 955 955 956 956 [[package]] ··· 1120 1120 dependencies = [ 1121 1121 "proc-macro2", 1122 1122 "quote", 1123 - "syn 2.0.108", 1123 + "syn 2.0.110", 1124 1124 ] 1125 1125 1126 1126 [[package]] ··· 1374 1374 "markup5ever", 1375 1375 "proc-macro2", 1376 1376 "quote", 1377 - "syn 2.0.108", 1377 + "syn 2.0.110", 1378 1378 ] 1379 1379 1380 1380 [[package]] ··· 1431 1431 1432 1432 [[package]] 1433 1433 name = "hyper" 1434 - version = "1.7.0" 1434 + version = "1.8.0" 1435 1435 source = "registry+https://github.com/rust-lang/crates.io-index" 1436 - checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" 1436 + checksum = "1744436df46f0bde35af3eda22aeaba453aada65d8f1c171cd8a5f59030bd69f" 1437 1437 dependencies = [ 1438 1438 "atomic-waker", 1439 1439 "bytes", ··· 1699 1699 1700 1700 [[package]] 1701 1701 name = "iri-string" 1702 - version = "0.7.8" 1702 + version = "0.7.9" 1703 1703 source = "registry+https://github.com/rust-lang/crates.io-index" 1704 - checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 1704 + checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" 1705 1705 dependencies = [ 1706 1706 "memchr", 1707 1707 "serde", ··· 1728 1728 [[package]] 1729 1729 name = "jacquard" 1730 1730 version = "0.9.0" 1731 - source = "git+https://tangled.org/@nonbinary.computer/jacquard#b5cc9b35e38e24e1890ae55e700dcfad0d6d433a" 1731 + source = "git+https://tangled.org/@nonbinary.computer/jacquard#5c79bb76de544cbd4fa8d5d8b01ba6e828f8ba65" 1732 1732 dependencies = [ 1733 1733 "bytes", 1734 1734 "getrandom 0.2.16", ··· 1756 1756 [[package]] 1757 1757 name = "jacquard-api" 1758 1758 version = "0.9.0" 1759 - source = "git+https://tangled.org/@nonbinary.computer/jacquard#b5cc9b35e38e24e1890ae55e700dcfad0d6d433a" 1759 + source = "git+https://tangled.org/@nonbinary.computer/jacquard#5c79bb76de544cbd4fa8d5d8b01ba6e828f8ba65" 1760 1760 dependencies = [ 1761 1761 "bon", 1762 1762 "bytes", ··· 1774 1774 [[package]] 1775 1775 name = "jacquard-common" 1776 1776 version = "0.9.0" 1777 - source = "git+https://tangled.org/@nonbinary.computer/jacquard#b5cc9b35e38e24e1890ae55e700dcfad0d6d433a" 1777 + source = "git+https://tangled.org/@nonbinary.computer/jacquard#5c79bb76de544cbd4fa8d5d8b01ba6e828f8ba65" 1778 1778 dependencies = [ 1779 1779 "base64 0.22.1", 1780 1780 "bon", ··· 1815 1815 [[package]] 1816 1816 name = "jacquard-derive" 1817 1817 version = "0.9.0" 1818 - source = "git+https://tangled.org/@nonbinary.computer/jacquard#b5cc9b35e38e24e1890ae55e700dcfad0d6d433a" 1818 + source = "git+https://tangled.org/@nonbinary.computer/jacquard#5c79bb76de544cbd4fa8d5d8b01ba6e828f8ba65" 1819 1819 dependencies = [ 1820 1820 "heck 0.5.0", 1821 1821 "jacquard-lexicon", 1822 1822 "proc-macro2", 1823 1823 "quote", 1824 - "syn 2.0.108", 1824 + "syn 2.0.110", 1825 1825 ] 1826 1826 1827 1827 [[package]] 1828 1828 name = "jacquard-identity" 1829 1829 version = "0.9.1" 1830 - source = "git+https://tangled.org/@nonbinary.computer/jacquard#b5cc9b35e38e24e1890ae55e700dcfad0d6d433a" 1830 + source = "git+https://tangled.org/@nonbinary.computer/jacquard#5c79bb76de544cbd4fa8d5d8b01ba6e828f8ba65" 1831 1831 dependencies = [ 1832 1832 "bon", 1833 1833 "bytes", ··· 1853 1853 [[package]] 1854 1854 name = "jacquard-lexicon" 1855 1855 version = "0.9.1" 1856 - source = "git+https://tangled.org/@nonbinary.computer/jacquard#b5cc9b35e38e24e1890ae55e700dcfad0d6d433a" 1856 + source = "git+https://tangled.org/@nonbinary.computer/jacquard#5c79bb76de544cbd4fa8d5d8b01ba6e828f8ba65" 1857 1857 dependencies = [ 1858 1858 "cid", 1859 1859 "dashmap", ··· 1871 1871 "serde_repr", 1872 1872 "serde_with", 1873 1873 "sha2", 1874 - "syn 2.0.108", 1874 + "syn 2.0.110", 1875 1875 "thiserror 2.0.17", 1876 1876 "unicode-segmentation", 1877 1877 ] ··· 1879 1879 [[package]] 1880 1880 name = "jacquard-oauth" 1881 1881 version = "0.9.0" 1882 - source = "git+https://tangled.org/@nonbinary.computer/jacquard#b5cc9b35e38e24e1890ae55e700dcfad0d6d433a" 1882 + source = "git+https://tangled.org/@nonbinary.computer/jacquard#5c79bb76de544cbd4fa8d5d8b01ba6e828f8ba65" 1883 1883 dependencies = [ 1884 1884 "base64 0.22.1", 1885 1885 "bytes", ··· 2183 2183 dependencies = [ 2184 2184 "proc-macro2", 2185 2185 "quote", 2186 - "syn 2.0.108", 2186 + "syn 2.0.110", 2187 2187 ] 2188 2188 2189 2189 [[package]] ··· 2338 2338 2339 2339 [[package]] 2340 2340 name = "num-bigint-dig" 2341 - version = "0.8.5" 2341 + version = "0.8.6" 2342 2342 source = "registry+https://github.com/rust-lang/crates.io-index" 2343 - checksum = "82c79c15c05d4bf82b6f5ef163104cc81a760d8e874d38ac50ab67c8877b647b" 2343 + checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" 2344 2344 dependencies = [ 2345 2345 "lazy_static", 2346 2346 "libm", ··· 2486 2486 "proc-macro2", 2487 2487 "proc-macro2-diagnostics", 2488 2488 "quote", 2489 - "syn 2.0.108", 2489 + "syn 2.0.110", 2490 2490 ] 2491 2491 2492 2492 [[package]] ··· 2616 2616 dependencies = [ 2617 2617 "proc-macro2", 2618 2618 "quote", 2619 - "syn 2.0.108", 2619 + "syn 2.0.110", 2620 2620 ] 2621 2621 2622 2622 [[package]] ··· 2689 2689 checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2690 2690 dependencies = [ 2691 2691 "proc-macro2", 2692 - "syn 2.0.108", 2692 + "syn 2.0.110", 2693 2693 ] 2694 2694 2695 2695 [[package]] ··· 2742 2742 dependencies = [ 2743 2743 "proc-macro2", 2744 2744 "quote", 2745 - "syn 2.0.108", 2745 + "syn 2.0.110", 2746 2746 "version_check", 2747 2747 "yansi", 2748 2748 ] ··· 2810 2810 2811 2811 [[package]] 2812 2812 name = "quote" 2813 - version = "1.0.41" 2813 + version = "1.0.42" 2814 2814 source = "registry+https://github.com/rust-lang/crates.io-index" 2815 - checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" 2815 + checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" 2816 2816 dependencies = [ 2817 2817 "proc-macro2", 2818 2818 ] ··· 2925 2925 dependencies = [ 2926 2926 "proc-macro2", 2927 2927 "quote", 2928 - "syn 2.0.108", 2928 + "syn 2.0.110", 2929 2929 ] 2930 2930 2931 2931 [[package]] ··· 3103 3103 3104 3104 [[package]] 3105 3105 name = "rustls" 3106 - version = "0.23.34" 3106 + version = "0.23.35" 3107 3107 source = "registry+https://github.com/rust-lang/crates.io-index" 3108 - checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" 3108 + checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" 3109 3109 dependencies = [ 3110 3110 "once_cell", 3111 3111 "ring", ··· 3198 3198 3199 3199 [[package]] 3200 3200 name = "schemars" 3201 - version = "1.0.4" 3201 + version = "1.1.0" 3202 3202 source = "registry+https://github.com/rust-lang/crates.io-index" 3203 - checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" 3203 + checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" 3204 3204 dependencies = [ 3205 3205 "dyn-clone", 3206 3206 "ref-cast", ··· 3300 3300 dependencies = [ 3301 3301 "proc-macro2", 3302 3302 "quote", 3303 - "syn 2.0.108", 3303 + "syn 2.0.110", 3304 3304 ] 3305 3305 3306 3306 [[package]] ··· 3360 3360 dependencies = [ 3361 3361 "proc-macro2", 3362 3362 "quote", 3363 - "syn 2.0.108", 3363 + "syn 2.0.110", 3364 3364 ] 3365 3365 3366 3366 [[package]] ··· 3387 3387 "indexmap 1.9.3", 3388 3388 "indexmap 2.12.0", 3389 3389 "schemars 0.9.0", 3390 - "schemars 1.0.4", 3390 + "schemars 1.1.0", 3391 3391 "serde_core", 3392 3392 "serde_json", 3393 3393 "serde_with_macros", ··· 3403 3403 "darling", 3404 3404 "proc-macro2", 3405 3405 "quote", 3406 - "syn 2.0.108", 3406 + "syn 2.0.110", 3407 3407 ] 3408 3408 3409 3409 [[package]] ··· 3575 3575 "quote", 3576 3576 "serde", 3577 3577 "sha2", 3578 - "syn 2.0.108", 3578 + "syn 2.0.110", 3579 3579 "thiserror 1.0.69", 3580 3580 ] 3581 3581 ··· 3656 3656 3657 3657 [[package]] 3658 3658 name = "syn" 3659 - version = "2.0.108" 3659 + version = "2.0.110" 3660 3660 source = "registry+https://github.com/rust-lang/crates.io-index" 3661 - checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" 3661 + checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" 3662 3662 dependencies = [ 3663 3663 "proc-macro2", 3664 3664 "quote", ··· 3682 3682 dependencies = [ 3683 3683 "proc-macro2", 3684 3684 "quote", 3685 - "syn 2.0.108", 3685 + "syn 2.0.110", 3686 3686 ] 3687 3687 3688 3688 [[package]] ··· 3782 3782 dependencies = [ 3783 3783 "proc-macro2", 3784 3784 "quote", 3785 - "syn 2.0.108", 3785 + "syn 2.0.110", 3786 3786 ] 3787 3787 3788 3788 [[package]] ··· 3793 3793 dependencies = [ 3794 3794 "proc-macro2", 3795 3795 "quote", 3796 - "syn 2.0.108", 3796 + "syn 2.0.110", 3797 3797 ] 3798 3798 3799 3799 [[package]] ··· 3909 3909 dependencies = [ 3910 3910 "proc-macro2", 3911 3911 "quote", 3912 - "syn 2.0.108", 3912 + "syn 2.0.110", 3913 3913 ] 3914 3914 3915 3915 [[package]] ··· 3959 3959 3960 3960 [[package]] 3961 3961 name = "tokio-util" 3962 - version = "0.7.16" 3962 + version = "0.7.17" 3963 3963 source = "registry+https://github.com/rust-lang/crates.io-index" 3964 - checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" 3964 + checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" 3965 3965 dependencies = [ 3966 3966 "bytes", 3967 3967 "futures-core", ··· 4075 4075 dependencies = [ 4076 4076 "proc-macro2", 4077 4077 "quote", 4078 - "syn 2.0.108", 4078 + "syn 2.0.110", 4079 4079 ] 4080 4080 4081 4081 [[package]] ··· 4125 4125 dependencies = [ 4126 4126 "proc-macro2", 4127 4127 "quote", 4128 - "syn 2.0.108", 4128 + "syn 2.0.110", 4129 4129 ] 4130 4130 4131 4131 [[package]] ··· 4356 4356 "bumpalo", 4357 4357 "proc-macro2", 4358 4358 "quote", 4359 - "syn 2.0.108", 4359 + "syn 2.0.110", 4360 4360 "wasm-bindgen-shared", 4361 4361 ] 4362 4362 ··· 4521 4521 dependencies = [ 4522 4522 "proc-macro2", 4523 4523 "quote", 4524 - "syn 2.0.108", 4524 + "syn 2.0.110", 4525 4525 ] 4526 4526 4527 4527 [[package]] ··· 4532 4532 dependencies = [ 4533 4533 "proc-macro2", 4534 4534 "quote", 4535 - "syn 2.0.108", 4535 + "syn 2.0.110", 4536 4536 ] 4537 4537 4538 4538 [[package]] ··· 4913 4913 4914 4914 [[package]] 4915 4915 name = "wisp-cli" 4916 - version = "0.1.0" 4916 + version = "0.2.0" 4917 4917 dependencies = [ 4918 4918 "axum", 4919 4919 "base64 0.22.1", ··· 4995 4995 dependencies = [ 4996 4996 "proc-macro2", 4997 4997 "quote", 4998 - "syn 2.0.108", 4998 + "syn 2.0.110", 4999 4999 "synstructure", 5000 5000 ] 5001 5001 ··· 5016 5016 dependencies = [ 5017 5017 "proc-macro2", 5018 5018 "quote", 5019 - "syn 2.0.108", 5019 + "syn 2.0.110", 5020 5020 ] 5021 5021 5022 5022 [[package]] ··· 5036 5036 dependencies = [ 5037 5037 "proc-macro2", 5038 5038 "quote", 5039 - "syn 2.0.108", 5039 + "syn 2.0.110", 5040 5040 "synstructure", 5041 5041 ] 5042 5042 ··· 5079 5079 dependencies = [ 5080 5080 "proc-macro2", 5081 5081 "quote", 5082 - "syn 2.0.108", 5082 + "syn 2.0.110", 5083 5083 ]
+1 -1
cli/Cargo.toml
··· 1 1 [package] 2 2 name = "wisp-cli" 3 - version = "0.1.0" 3 + version = "0.2.0" 4 4 edition = "2024" 5 5 6 6 [features]
+28 -1
crates.nix
··· 19 19 targets.x86_64-pc-windows-gnu.latest.rust-std 20 20 targets.x86_64-unknown-linux-gnu.latest.rust-std 21 21 targets.aarch64-apple-darwin.latest.rust-std 22 + targets.aarch64-unknown-linux-gnu.latest.rust-std 22 23 ]; 23 24 # configure crates 24 25 nci.crates."wisp-cli" = { ··· 26 27 dev.runTests = false; 27 28 release.runTests = false; 28 29 }; 29 - targets."x86_64-unknown-linux-gnu" = { 30 + targets."x86_64-unknown-linux-gnu" = let 31 + targetPkgs = pkgs.pkgsCross.gnu64; 32 + targetCC = targetPkgs.stdenv.cc; 33 + targetCargoEnvVarTarget = targetPkgs.stdenv.hostPlatform.rust.cargoEnvVarTarget; 34 + in rec { 30 35 default = true; 36 + depsDrvConfig.mkDerivation = { 37 + nativeBuildInputs = [targetCC]; 38 + }; 39 + depsDrvConfig.env = rec { 40 + TARGET_CC = "${targetCC.targetPrefix}cc"; 41 + "CARGO_TARGET_${targetCargoEnvVarTarget}_LINKER" = TARGET_CC; 42 + }; 43 + drvConfig = depsDrvConfig; 31 44 }; 32 45 targets."x86_64-pc-windows-gnu" = let 33 46 targetPkgs = pkgs.pkgsCross.mingwW64; ··· 46 59 }; 47 60 targets."aarch64-apple-darwin" = let 48 61 targetPkgs = pkgs.pkgsCross.aarch64-darwin; 62 + targetCC = targetPkgs.stdenv.cc; 63 + targetCargoEnvVarTarget = targetPkgs.stdenv.hostPlatform.rust.cargoEnvVarTarget; 64 + in rec { 65 + depsDrvConfig.mkDerivation = { 66 + nativeBuildInputs = [targetCC]; 67 + }; 68 + depsDrvConfig.env = rec { 69 + TARGET_CC = "${targetCC.targetPrefix}cc"; 70 + "CARGO_TARGET_${targetCargoEnvVarTarget}_LINKER" = TARGET_CC; 71 + }; 72 + drvConfig = depsDrvConfig; 73 + }; 74 + targets."aarch64-unknown-linux-gnu" = let 75 + targetPkgs = pkgs.pkgsCross.aarch64-multiplatform; 49 76 targetCC = targetPkgs.stdenv.cc; 50 77 targetCargoEnvVarTarget = targetPkgs.stdenv.hostPlatform.rust.cargoEnvVarTarget; 51 78 in rec {
+25 -2
flake.nix
··· 26 26 ... 27 27 }: let 28 28 crateOutputs = config.nci.outputs."wisp-cli"; 29 + mkRenamedPackage = name: pkg: isWindows: pkgs.runCommand name {} '' 30 + mkdir -p $out/bin 31 + if [ -f ${pkg}/bin/wisp-cli.exe ]; then 32 + cp ${pkg}/bin/wisp-cli.exe $out/bin/${name} 33 + elif [ -f ${pkg}/bin/wisp-cli ]; then 34 + cp ${pkg}/bin/wisp-cli $out/bin/${name} 35 + else 36 + echo "Error: Could not find wisp-cli binary in ${pkg}/bin/" 37 + ls -la ${pkg}/bin/ || true 38 + exit 1 39 + fi 40 + ''; 29 41 in { 30 42 devShells.default = crateOutputs.devShell; 31 43 packages.default = crateOutputs.packages.release; 32 - packages.wisp-cli-windows = crateOutputs.allTargets."x86_64-pc-windows-gnu".packages.release; 33 - packages.wisp-cli-darwin = crateOutputs.allTargets."aarch64-apple-darwin".packages.release; 44 + packages.wisp-cli-x86_64-linux = mkRenamedPackage "wisp-cli-x86_64-linux" crateOutputs.packages.release false; 45 + packages.wisp-cli-aarch64-linux = mkRenamedPackage "wisp-cli-aarch64-linux" crateOutputs.allTargets."aarch64-unknown-linux-gnu".packages.release false; 46 + packages.wisp-cli-x86_64-windows = mkRenamedPackage "wisp-cli-x86_64-windows.exe" crateOutputs.allTargets."x86_64-pc-windows-gnu".packages.release true; 47 + packages.wisp-cli-aarch64-darwin = mkRenamedPackage "wisp-cli-aarch64-darwin" crateOutputs.allTargets."aarch64-apple-darwin".packages.release false; 48 + packages.all = pkgs.symlinkJoin { 49 + name = "wisp-cli-all"; 50 + paths = [ 51 + config.packages.wisp-cli-x86_64-linux 52 + config.packages.wisp-cli-aarch64-linux 53 + config.packages.wisp-cli-x86_64-windows 54 + config.packages.wisp-cli-aarch64-darwin 55 + ]; 56 + }; 34 57 }; 35 58 }; 36 59 }
+78 -14
public/editor/tabs/CLITab.tsx
··· 16 16 <CardHeader> 17 17 <div className="flex items-center gap-2 mb-2"> 18 18 <CardTitle>Wisp CLI Tool</CardTitle> 19 - <Badge variant="secondary" className="text-xs">v0.1.0</Badge> 19 + <Badge variant="secondary" className="text-xs">v0.2.0</Badge> 20 20 <Badge variant="outline" className="text-xs">Alpha</Badge> 21 21 </div> 22 22 <CardDescription> ··· 32 32 </div> 33 33 34 34 <div className="space-y-3"> 35 - <h3 className="text-sm font-semibold">Download CLI</h3> 35 + <h3 className="text-sm font-semibold">Features</h3> 36 + <ul className="text-sm text-muted-foreground space-y-2 list-disc list-inside"> 37 + <li><strong>Deploy:</strong> Push static sites directly from your terminal</li> 38 + <li><strong>Pull:</strong> Download sites from the PDS for development or backup</li> 39 + <li><strong>Serve:</strong> Run a local server with real-time firehose updates</li> 40 + </ul> 41 + </div> 42 + 43 + <div className="space-y-3"> 44 + <h3 className="text-sm font-semibold">Download v0.2.0</h3> 36 45 <div className="grid gap-2"> 37 46 <div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"> 38 47 <a 39 - href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-macos-arm64" 48 + href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-aarch64-darwin" 40 49 target="_blank" 41 50 rel="noopener noreferrer" 42 51 className="flex items-center justify-between mb-2" ··· 45 54 <ExternalLink className="w-4 h-4 text-muted-foreground" /> 46 55 </a> 47 56 <div className="text-xs text-muted-foreground"> 48 - <span className="font-mono">SHA256: 637e325d9668ca745e01493d80dfc72447ef0a889b313e28913ca65c94c7aaae</span> 57 + <span className="font-mono">SHA-1: a8c27ea41c5e2672bfecb3476ece1c801741d759</span> 49 58 </div> 50 59 </div> 51 60 <div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"> ··· 59 68 <ExternalLink className="w-4 h-4 text-muted-foreground" /> 60 69 </a> 61 70 <div className="text-xs text-muted-foreground"> 62 - <span className="font-mono">SHA256: 01561656b64826f95b39f13c65c97da8bcc63ecd9f4d7e4e369c8ba8c903c22a</span> 71 + <span className="font-mono">SHA-1: fd7ee689c7600fc953179ea755b0357c8481a622</span> 63 72 </div> 64 73 </div> 65 74 <div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"> ··· 73 82 <ExternalLink className="w-4 h-4 text-muted-foreground" /> 74 83 </a> 75 84 <div className="text-xs text-muted-foreground"> 76 - <span className="font-mono">SHA256: 1ff485b9bcf89bc5721a862863c4843cf4530cbcd2489cf200cb24a44f7865a2</span> 85 + <span className="font-mono">SHA-1: 8bca6992559e19e1d29ab3d2fcc6d09b28e5a485</span> 86 + </div> 87 + </div> 88 + <div className="p-3 bg-muted/50 hover:bg-muted rounded-lg transition-colors border border-border"> 89 + <a 90 + href="https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-x86_64-windows.exe" 91 + target="_blank" 92 + rel="noopener noreferrer" 93 + className="flex items-center justify-between mb-2" 94 + > 95 + <span className="font-mono text-sm">Windows (x86_64)</span> 96 + <ExternalLink className="w-4 h-4 text-muted-foreground" /> 97 + </a> 98 + <div className="text-xs text-muted-foreground"> 99 + <span className="font-mono">SHA-1: 90ea3987a06597fa6c42e1df9009e9758e92dd54</span> 77 100 </div> 78 101 </div> 79 102 </div> 80 103 </div> 81 104 82 105 <div className="space-y-3"> 83 - <h3 className="text-sm font-semibold">Basic Usage</h3> 106 + <h3 className="text-sm font-semibold">Deploy a Site</h3> 84 107 <CodeBlock 85 108 code={`# Download and make executable 86 - curl -O https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-macos-arm64 87 - chmod +x wisp-cli-macos-arm64 109 + curl -O https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-aarch64-darwin 110 + chmod +x wisp-cli-aarch64-darwin 88 111 89 - # Deploy your site (will use OAuth) 90 - ./wisp-cli-macos-arm64 your-handle.bsky.social \\ 112 + # Deploy your site 113 + ./wisp-cli-aarch64-darwin deploy your-handle.bsky.social \\ 91 114 --path ./dist \\ 92 - --site my-site 115 + --site my-site \\ 116 + --password your-app-password 93 117 94 118 # Your site will be available at: 95 119 # https://sites.wisp.place/your-handle/my-site`} ··· 98 122 </div> 99 123 100 124 <div className="space-y-3"> 125 + <h3 className="text-sm font-semibold">Pull a Site from PDS</h3> 126 + <p className="text-xs text-muted-foreground"> 127 + Download a site from the PDS to your local machine (uses OAuth authentication): 128 + </p> 129 + <CodeBlock 130 + code={`# Pull a site to a specific directory 131 + wisp-cli pull your-handle.bsky.social \\ 132 + --site my-site \\ 133 + --output ./my-site 134 + 135 + # Pull to current directory 136 + wisp-cli pull your-handle.bsky.social \\ 137 + --site my-site 138 + 139 + # Opens browser for OAuth authentication on first run`} 140 + language="bash" 141 + /> 142 + </div> 143 + 144 + <div className="space-y-3"> 145 + <h3 className="text-sm font-semibold">Serve a Site Locally with Real-Time Updates</h3> 146 + <p className="text-xs text-muted-foreground"> 147 + Run a local server that monitors the firehose for real-time updates (uses OAuth authentication): 148 + </p> 149 + <CodeBlock 150 + code={`# Serve on http://localhost:8080 (default) 151 + wisp-cli serve your-handle.bsky.social \\ 152 + --site my-site 153 + 154 + # Serve on a custom port 155 + wisp-cli serve your-handle.bsky.social \\ 156 + --site my-site \\ 157 + --port 3000 158 + 159 + # Downloads site, serves it, and watches firehose for live updates!`} 160 + language="bash" 161 + /> 162 + </div> 163 + 164 + <div className="space-y-3"> 101 165 <h3 className="text-sm font-semibold">CI/CD with Tangled Spindle</h3> 102 166 <p className="text-xs text-muted-foreground"> 103 167 Deploy automatically on every push using{' '} ··· 147 211 chmod +x wisp-cli 148 212 149 213 # Deploy to Wisp 150 - ./wisp-cli \\ 214 + ./wisp-cli deploy \\ 151 215 "$WISP_HANDLE" \\ 152 216 --path "$SITE_PATH" \\ 153 217 --site "$SITE_NAME" \\ ··· 210 274 chmod +x wisp-cli 211 275 212 276 # Deploy to Wisp 213 - ./wisp-cli \\ 277 + ./wisp-cli deploy \\ 214 278 "$WISP_HANDLE" \\ 215 279 --path "$SITE_PATH" \\ 216 280 --site "$SITE_NAME" \\
+5 -5
src/index.ts
··· 70 70 }, 71 71 cookie: { 72 72 secrets: cookieSecret, 73 - sign: true 73 + sign: ['did'] 74 74 } 75 75 }) 76 76 // Observability middleware ··· 105 105 .onError(observabilityMiddleware('main-app').onError) 106 106 .use(csrfProtection()) 107 107 .use(authRoutes(client, cookieSecret)) 108 - .use(wispRoutes(client)) 109 - .use(domainRoutes(client)) 110 - .use(userRoutes(client)) 111 - .use(siteRoutes(client)) 108 + .use(wispRoutes(client, cookieSecret)) 109 + .use(domainRoutes(client, cookieSecret)) 110 + .use(userRoutes(client, cookieSecret)) 111 + .use(siteRoutes(client, cookieSecret)) 112 112 .use(adminRoutes(cookieSecret)) 113 113 .use( 114 114 await staticPlugin({
+6 -22
src/routes/auth.ts
··· 5 5 import { authenticateRequest } from '../lib/wisp-auth' 6 6 import { logger } from '../lib/observability' 7 7 8 - export const authRoutes = (client: NodeOAuthClient, cookieSecret: string) => new Elysia() 8 + export const authRoutes = (client: NodeOAuthClient, cookieSecret: string) => new Elysia({ 9 + cookie: { 10 + secrets: cookieSecret, 11 + sign: ['did'] 12 + } 13 + }) 9 14 .post('/api/auth/signin', async (c) => { 10 15 let handle = 'unknown' 11 16 try { ··· 74 79 c.cookie.did.remove() 75 80 return c.redirect('/?error=auth_failed') 76 81 } 77 - }, { 78 - cookie: t.Cookie({ 79 - did: t.Optional(t.String()) 80 - }, { 81 - secrets: cookieSecret, 82 - sign: ['did'] 83 - }) 84 82 }) 85 83 .post('/api/auth/logout', async (c) => { 86 84 try { ··· 106 104 logger.error('[Auth] Logout error', err) 107 105 return { error: 'Logout failed' } 108 106 } 109 - }, { 110 - cookie: t.Cookie({ 111 - did: t.Optional(t.String()) 112 - }, { 113 - secrets: cookieSecret, 114 - sign: ['did'] 115 - }) 116 107 }) 117 108 .get('/api/auth/status', async (c) => { 118 109 try { ··· 132 123 c.cookie.did.remove() 133 124 return { authenticated: false } 134 125 } 135 - }, { 136 - cookie: t.Cookie({ 137 - did: t.Optional(t.String()) 138 - }, { 139 - secrets: cookieSecret, 140 - sign: ['did'] 141 - }) 142 126 })
+8 -2
src/routes/domain.ts
··· 24 24 import { verifyCustomDomain } from '../lib/dns-verify' 25 25 import { logger } from '../lib/logger' 26 26 27 - export const domainRoutes = (client: NodeOAuthClient) => 28 - new Elysia({ prefix: '/api/domain' }) 27 + export const domainRoutes = (client: NodeOAuthClient, cookieSecret: string) => 28 + new Elysia({ 29 + prefix: '/api/domain', 30 + cookie: { 31 + secrets: cookieSecret, 32 + sign: ['did'] 33 + } 34 + }) 29 35 // Public endpoints (no auth required) 30 36 .get('/check', async ({ query }) => { 31 37 try {
+8 -2
src/routes/site.ts
··· 5 5 import { deleteSite } from '../lib/db' 6 6 import { logger } from '../lib/logger' 7 7 8 - export const siteRoutes = (client: NodeOAuthClient) => 9 - new Elysia({ prefix: '/api/site' }) 8 + export const siteRoutes = (client: NodeOAuthClient, cookieSecret: string) => 9 + new Elysia({ 10 + prefix: '/api/site', 11 + cookie: { 12 + secrets: cookieSecret, 13 + sign: ['did'] 14 + } 15 + }) 10 16 .derive(async ({ cookie }) => { 11 17 const auth = await requireAuth(client, cookie) 12 18 return { auth }
+9 -3
src/routes/user.ts
··· 1 - import { Elysia } from 'elysia' 1 + import { Elysia, t } from 'elysia' 2 2 import { requireAuth } from '../lib/wisp-auth' 3 3 import { NodeOAuthClient } from '@atproto/oauth-client-node' 4 4 import { Agent } from '@atproto/api' ··· 6 6 import { syncSitesFromPDS } from '../lib/sync-sites' 7 7 import { logger } from '../lib/logger' 8 8 9 - export const userRoutes = (client: NodeOAuthClient) => 10 - new Elysia({ prefix: '/api/user' }) 9 + export const userRoutes = (client: NodeOAuthClient, cookieSecret: string) => 10 + new Elysia({ 11 + prefix: '/api/user', 12 + cookie: { 13 + secrets: cookieSecret, 14 + sign: ['did'] 15 + } 16 + }) 11 17 .derive(async ({ cookie }) => { 12 18 const auth = await requireAuth(client, cookie) 13 19 return { auth }
+8 -2
src/routes/wisp.ts
··· 37 37 return true; 38 38 } 39 39 40 - export const wispRoutes = (client: NodeOAuthClient) => 41 - new Elysia({ prefix: '/wisp' }) 40 + export const wispRoutes = (client: NodeOAuthClient, cookieSecret: string) => 41 + new Elysia({ 42 + prefix: '/wisp', 43 + cookie: { 44 + secrets: cookieSecret, 45 + sign: ['did'] 46 + } 47 + }) 42 48 .derive(async ({ cookie }) => { 43 49 const auth = await requireAuth(client, cookie) 44 50 return { auth }