-3
.gitmodules
-3
.gitmodules
+69
-69
cli/Cargo.lock
+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
cli/Cargo.toml
+28
-1
crates.nix
+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
+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
+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
+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
+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
+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
+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
+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
+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 }