+1
.gitignore
+1
.gitignore
···
1
+
target/
+363
AGENTS.md
+363
AGENTS.md
···
1
+
# Tangled CLI – Agent Handoff (Massive Context)
2
+
3
+
This document is a complete handoff for the next Codex instance working on the Tangled CLI (Rust). It explains what exists, what to build next, where to edit, how to call the APIs, how to persist sessions, how to print output, and how to validate success.
4
+
5
+
Primary focus for this session: implement authentication (auth login/status/logout) and repository listing (repo list).
6
+
7
+
--------------------------------------------------------------------------------
8
+
9
+
## 0) TL;DR – Immediate Actions
10
+
11
+
- Implement `auth login` using AT Protocol `com.atproto.server.createSession`.
12
+
- Prompt for handle/password if flags aren’t provided.
13
+
- POST to `/xrpc/com.atproto.server.createSession` at the configured PDS (default `https://bsky.social`).
14
+
- Persist `{accessJwt, refreshJwt, did, handle}` via `SessionManager` (keyring-backed).
15
+
- `auth status` reads keyring and prints handle + did; `auth logout` clears keyring.
16
+
17
+
- Implement `repo list` using Tangled’s repo list method (tentative `sh.tangled.repo.list`).
18
+
- GET `/xrpc/sh.tangled.repo.list` with optional params: `user`, `knot`, `starred`.
19
+
- Include `Authorization: Bearer <accessJwt>` if required.
20
+
- Print results as table (default) or JSON (`--format json`).
21
+
22
+
Keep edits minimal and scoped to these features.
23
+
24
+
--------------------------------------------------------------------------------
25
+
26
+
## 1) Repository Map (Paths You Will Touch)
27
+
28
+
- CLI (binary):
29
+
- `tangled/crates/tangled-cli/src/commands/auth.rs` → implement login/status/logout.
30
+
- `tangled/crates/tangled-cli/src/commands/repo.rs` → implement list.
31
+
- `tangled/crates/tangled-cli/src/cli.rs` → already contains arguments and subcommands; no structural changes needed.
32
+
- `tangled/crates/tangled-cli/src/main.rs` → no change.
33
+
34
+
- Config + session:
35
+
- `tangled/crates/tangled-config/src/session.rs` → already provides `Session` + `SessionManager` (keyring).
36
+
- `tangled/crates/tangled-config/src/config.rs` → optional use for PDS/base URL (MVP can use CLI flags/env vars).
37
+
38
+
- API client:
39
+
- `tangled/crates/tangled-api/src/client.rs` → add XRPC helpers and implement `login_with_password` and `list_repos`.
40
+
41
+
--------------------------------------------------------------------------------
42
+
43
+
## 2) Current State Snapshot
44
+
45
+
- Workspace is scaffolded and compiles after wiring dependencies (network needed to fetch crates):
46
+
- `tangled-cli`: clap CLI with subcommands; commands currently log stubs.
47
+
- `tangled-config`: TOML config loader/saver; keyring-backed session store.
48
+
- `tangled-api`: client struct with placeholder methods.
49
+
- `tangled-git`: stubs for future.
50
+
- Placeholder lexicons in `tangled/lexicons/sh.tangled/*` are not authoritative; use AT Protocol docs and inspect real endpoints later.
51
+
52
+
Goal: replace CLI stubs with real API calls for auth + repo list.
53
+
54
+
--------------------------------------------------------------------------------
55
+
56
+
## 3) Endpoints & Data Shapes
57
+
58
+
### 3.1 AT Protocol – Create Session
59
+
60
+
- Method: `com.atproto.server.createSession`
61
+
- HTTP: `POST /xrpc/com.atproto.server.createSession`
62
+
- Request JSON:
63
+
- `identifier: string` → user handle or email (e.g., `alice.bsky.social`).
64
+
- `password: string` → password or app password.
65
+
- Response JSON (subset used):
66
+
- `accessJwt: string`
67
+
- `refreshJwt: string`
68
+
- `did: string` (e.g., `did:plc:...`)
69
+
- `handle: string`
70
+
71
+
Persist to keyring using `SessionManager`.
72
+
73
+
### 3.2 Tangled – Repo List (tentative)
74
+
75
+
- Method: `sh.tangled.repo.list` (subject to change; wire in a constant to adjust easily).
76
+
- HTTP: `GET /xrpc/sh.tangled.repo.list?user=<..>&knot=<..>&starred=<true|false>`
77
+
- Auth: likely required; include `Authorization: Bearer <accessJwt>`.
78
+
- Response JSON (envelope):
79
+
- `{ "repos": [{ "name": string, "knot": string, "private": bool, ... }] }`
80
+
81
+
If method name or response shape differs, adapt the client code; keep CLI interface stable.
82
+
83
+
--------------------------------------------------------------------------------
84
+
85
+
## 4) Implementation Plan
86
+
87
+
### 4.1 Add XRPC helpers and methods in `tangled-api`
88
+
89
+
File: `tangled/crates/tangled-api/src/client.rs`
90
+
91
+
- Extend `TangledClient` with:
92
+
- `fn xrpc_url(&self, method: &str) -> String` → combines `base_url` + `/xrpc/` + `method`.
93
+
- `async fn post_json<TReq: Serialize, TRes: DeserializeOwned>(&self, method, req, bearer) -> Result<TRes>`.
94
+
- `async fn get_json<TRes: DeserializeOwned>(&self, method, params, bearer) -> Result<TRes>`.
95
+
- Include `Authorization: Bearer <token>` when `bearer` is provided.
96
+
97
+
- Implement:
98
+
- `pub async fn login_with_password(&self, handle: &str, password: &str, pds: &str) -> Result<Session>`
99
+
- POST to `com.atproto.server.createSession` at `self.base_url` (which should be the PDS base).
100
+
- Map response to `tangled_config::session::Session` and return it (caller will persist).
101
+
- `pub async fn list_repos(&self, user: Option<&str>, knot: Option<&str>, starred: bool, bearer: Option<&str>) -> Result<Vec<Repository>>`
102
+
- GET `sh.tangled.repo.list` with params present only if set.
103
+
- Return parsed `Vec<Repository>` from an envelope `{ repos: [...] }`.
104
+
105
+
Error handling: For non-2xx, read the response body, return `anyhow!("{status}: {body}")`.
106
+
107
+
### 4.2 Wire CLI auth commands
108
+
109
+
File: `tangled/crates/tangled-cli/src/commands/auth.rs`
110
+
111
+
- `login`:
112
+
- Determine PDS: use `--pds` arg if provided, else default `https://bsky.social` (later from config/env).
113
+
- Prompt for missing handle/password.
114
+
- `let client = tangled_api::TangledClient::new(&pds);`
115
+
- `let session = client.login_with_password(&handle, &password, &pds).await?;`
116
+
- `tangled_config::session::SessionManager::default().save(&session)?;`
117
+
- Print: `Logged in as '{handle}' ({did})`.
118
+
119
+
- `status`:
120
+
- Load `SessionManager::default().load()?`.
121
+
- If Some: print `Logged in as '{handle}' ({did})`.
122
+
- Else: print `Not logged in. Run: tangled auth login`.
123
+
124
+
- `logout`:
125
+
- `SessionManager::default().clear()?`.
126
+
- Print `Logged out` if something was cleared; otherwise `No session found` is acceptable.
127
+
128
+
### 4.3 Wire CLI repo list
129
+
130
+
File: `tangled/crates/tangled-cli/src/commands/repo.rs`
131
+
132
+
- Load session; if absent, print `Please login first: tangled auth login` and exit 1 (or 0 with friendly message; choose one and be consistent).
133
+
- Build a client for Tangled API base (for now, default to `https://tangled.org` or allow `TANGLED_API_BASE` env var to override):
134
+
- `let base = std::env::var("TANGLED_API_BASE").unwrap_or_else(|_| "https://tangled.org".into());`
135
+
- `let client = tangled_api::TangledClient::new(base);`
136
+
- Call `client.list_repos(args.user.as_deref(), args.knot.as_deref(), args.starred, Some(session.access_jwt.as_str())).await?`.
137
+
- Print:
138
+
- If `Cli.format == OutputFormat::Json`: `serde_json::to_string_pretty(&repos)`.
139
+
- Else: simple columns `NAME KNOT PRIVATE` using `println!` formatting for now.
140
+
141
+
--------------------------------------------------------------------------------
142
+
143
+
## 5) Code Snippets (Copy/Paste Friendly)
144
+
145
+
### 5.1 In `tangled-api/src/client.rs`
146
+
147
+
```rust
148
+
use anyhow::{anyhow, bail, Result};
149
+
use serde::{de::DeserializeOwned, Deserialize, Serialize};
150
+
use tangled_config::session::Session;
151
+
152
+
#[derive(Clone, Debug)]
153
+
pub struct TangledClient { pub(crate) base_url: String }
154
+
155
+
impl TangledClient {
156
+
pub fn new(base_url: impl Into<String>) -> Self { Self { base_url: base_url.into() } }
157
+
pub fn default() -> Self { Self::new("https://tangled.org") }
158
+
159
+
fn xrpc_url(&self, method: &str) -> String {
160
+
format!("{}/xrpc/{}", self.base_url.trim_end_matches('/'), method)
161
+
}
162
+
163
+
async fn post_json<TReq: Serialize, TRes: DeserializeOwned>(
164
+
&self,
165
+
method: &str,
166
+
req: &TReq,
167
+
bearer: Option<&str>,
168
+
) -> Result<TRes> {
169
+
let url = self.xrpc_url(method);
170
+
let client = reqwest::Client::new();
171
+
let mut reqb = client.post(url).header(reqwest::header::CONTENT_TYPE, "application/json");
172
+
if let Some(token) = bearer { reqb = reqb.header(reqwest::header::AUTHORIZATION, format!("Bearer {}", token)); }
173
+
let res = reqb.json(req).send().await?;
174
+
let status = res.status();
175
+
if !status.is_success() {
176
+
let body = res.text().await.unwrap_or_default();
177
+
return Err(anyhow!("{}: {}", status, body));
178
+
}
179
+
Ok(res.json::<TRes>().await?)
180
+
}
181
+
182
+
async fn get_json<TRes: DeserializeOwned>(
183
+
&self,
184
+
method: &str,
185
+
params: &[(&str, String)],
186
+
bearer: Option<&str>,
187
+
) -> Result<TRes> {
188
+
let url = self.xrpc_url(method);
189
+
let client = reqwest::Client::new();
190
+
let mut reqb = client.get(url).query(¶ms);
191
+
if let Some(token) = bearer { reqb = reqb.header(reqwest::header::AUTHORIZATION, format!("Bearer {}", token)); }
192
+
let res = reqb.send().await?;
193
+
let status = res.status();
194
+
if !status.is_success() {
195
+
let body = res.text().await.unwrap_or_default();
196
+
return Err(anyhow!("{}: {}", status, body));
197
+
}
198
+
Ok(res.json::<TRes>().await?)
199
+
}
200
+
201
+
pub async fn login_with_password(&self, handle: &str, password: &str, _pds: &str) -> Result<Session> {
202
+
#[derive(Serialize)]
203
+
struct Req<'a> { #[serde(rename = "identifier")] identifier: &'a str, #[serde(rename = "password")] password: &'a str }
204
+
#[derive(Deserialize)]
205
+
struct Res { #[serde(rename = "accessJwt")] access_jwt: String, #[serde(rename = "refreshJwt")] refresh_jwt: String, did: String, handle: String }
206
+
let body = Req { identifier: handle, password };
207
+
let res: Res = self.post_json("com.atproto.server.createSession", &body, None).await?;
208
+
Ok(Session { access_jwt: res.access_jwt, refresh_jwt: res.refresh_jwt, did: res.did, handle: res.handle, ..Default::default() })
209
+
}
210
+
211
+
pub async fn list_repos(&self, user: Option<&str>, knot: Option<&str>, starred: bool, bearer: Option<&str>) -> Result<Vec<Repository>> {
212
+
#[derive(Deserialize)]
213
+
struct Envelope { repos: Vec<Repository> }
214
+
let mut q = vec![];
215
+
if let Some(u) = user { q.push(("user", u.to_string())); }
216
+
if let Some(k) = knot { q.push(("knot", k.to_string())); }
217
+
if starred { q.push(("starred", true.to_string())); }
218
+
let env: Envelope = self.get_json("sh.tangled.repo.list", &q, bearer).await?;
219
+
Ok(env.repos)
220
+
}
221
+
}
222
+
223
+
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
224
+
pub struct Repository { pub did: Option<String>, pub rkey: Option<String>, pub name: String, pub knot: Option<String>, pub description: Option<String>, pub private: bool }
225
+
```
226
+
227
+
### 5.2 In `tangled-cli/src/commands/auth.rs`
228
+
229
+
```rust
230
+
use anyhow::Result;
231
+
use dialoguer::{Input, Password};
232
+
use tangled_config::session::SessionManager;
233
+
use crate::cli::{AuthCommand, AuthLoginArgs, Cli};
234
+
235
+
pub async fn run(_cli: &Cli, cmd: AuthCommand) -> Result<()> {
236
+
match cmd {
237
+
AuthCommand::Login(args) => login(args).await,
238
+
AuthCommand::Status => status().await,
239
+
AuthCommand::Logout => logout().await,
240
+
}
241
+
}
242
+
243
+
async fn login(mut args: AuthLoginArgs) -> Result<()> {
244
+
let handle: String = match args.handle.take() { Some(h) => h, None => Input::new().with_prompt("Handle").interact_text()? };
245
+
let password: String = match args.password.take() { Some(p) => p, None => Password::new().with_prompt("Password").interact()? };
246
+
let pds = args.pds.unwrap_or_else(|| "https://bsky.social".to_string());
247
+
let client = tangled_api::TangledClient::new(&pds);
248
+
let session = client.login_with_password(&handle, &password, &pds).await?;
249
+
SessionManager::default().save(&session)?;
250
+
println!("Logged in as '{}' ({})", session.handle, session.did);
251
+
Ok(())
252
+
}
253
+
254
+
async fn status() -> Result<()> {
255
+
let mgr = SessionManager::default();
256
+
match mgr.load()? {
257
+
Some(s) => println!("Logged in as '{}' ({})", s.handle, s.did),
258
+
None => println!("Not logged in. Run: tangled auth login"),
259
+
}
260
+
Ok(())
261
+
}
262
+
263
+
async fn logout() -> Result<()> {
264
+
let mgr = SessionManager::default();
265
+
if mgr.load()?.is_some() { mgr.clear()?; println!("Logged out"); } else { println!("No session found"); }
266
+
Ok(())
267
+
}
268
+
```
269
+
270
+
### 5.3 In `tangled-cli/src/commands/repo.rs`
271
+
272
+
```rust
273
+
use anyhow::{anyhow, Result};
274
+
use tangled_config::session::SessionManager;
275
+
use crate::cli::{Cli, RepoCommand, RepoListArgs};
276
+
277
+
pub async fn run(_cli: &Cli, cmd: RepoCommand) -> Result<()> {
278
+
match cmd { RepoCommand::List(args) => list(args).await, _ => Ok(println!("not implemented")) }
279
+
}
280
+
281
+
async fn list(args: RepoListArgs) -> Result<()> {
282
+
let mgr = SessionManager::default();
283
+
let session = mgr.load()?.ok_or_else(|| anyhow!("Please login first: tangled auth login"))?;
284
+
let base = std::env::var("TANGLED_API_BASE").unwrap_or_else(|_| "https://tangled.org".into());
285
+
let client = tangled_api::TangledClient::new(base);
286
+
let repos = client.list_repos(args.user.as_deref(), args.knot.as_deref(), args.starred, Some(session.access_jwt.as_str())).await?;
287
+
// Simple output: table or JSON to be improved later
288
+
println!("NAME\tKNOT\tPRIVATE");
289
+
for r in repos { println!("{}\t{}\t{}", r.name, r.knot.unwrap_or_default(), r.private); }
290
+
Ok(())
291
+
}
292
+
```
293
+
294
+
--------------------------------------------------------------------------------
295
+
296
+
## 6) Configuration, Env Vars, and Security
297
+
298
+
- PDS base (auth): default `https://bsky.social`. Accept CLI flag `--pds`; later read from config.
299
+
- Tangled API base (repo list): default `https://tangled.org`; allow override via `TANGLED_API_BASE` env var.
300
+
- Do not log passwords or tokens.
301
+
- Store tokens only in keyring (already implemented).
302
+
303
+
--------------------------------------------------------------------------------
304
+
305
+
## 7) Testing Plan (MVP)
306
+
307
+
- Client unit tests with `mockito` for `createSession` and `repo list` endpoints; simulate expected JSON.
308
+
- CLI smoke tests optional for this pass. If added, use `assert_cmd` to check printed output strings.
309
+
- Avoid live network calls in tests.
310
+
311
+
--------------------------------------------------------------------------------
312
+
313
+
## 8) Acceptance Criteria
314
+
315
+
- `tangled auth login`:
316
+
- Prompts or uses flags; successful call saves session and prints `Logged in as ...`.
317
+
- On failure, shows HTTP status and short message.
318
+
- `tangled auth status`:
319
+
- Shows handle + did if session exists; otherwise says not logged in.
320
+
- `tangled auth logout`:
321
+
- Clears keyring; prints confirmation.
322
+
- `tangled repo list`:
323
+
- Performs authenticated GET and prints a list (even if empty) without panicking.
324
+
- JSON output possible later; table output acceptable for now.
325
+
326
+
--------------------------------------------------------------------------------
327
+
328
+
## 9) Troubleshooting Notes
329
+
330
+
- Keyring errors on Linux may indicate no secret service running; suggest enabling GNOME Keyring or KWallet.
331
+
- If `repo list` returns 404, the method name or base URL may be wrong; adjust `sh.tangled.repo.list` or `TANGLED_API_BASE`.
332
+
- If 401, session may be missing/expired; run `auth login` again.
333
+
334
+
--------------------------------------------------------------------------------
335
+
336
+
## 10) Non‑Goals for This Pass
337
+
338
+
- Refresh token flow, device code, OAuth.
339
+
- PRs, issues, knots, spindle implementation.
340
+
- Advanced formatting, paging, completions.
341
+
342
+
--------------------------------------------------------------------------------
343
+
344
+
## 11) Future Follow‑ups
345
+
346
+
- Refresh flow (`com.atproto.server.refreshSession`) and retry once on 401.
347
+
- Persist base URLs and profiles in config; add `tangled config` commands.
348
+
- Proper table/json formatting and shell completions.
349
+
350
+
--------------------------------------------------------------------------------
351
+
352
+
## 12) Quick Operator Commands
353
+
354
+
- Build CLI: `cargo build -p tangled-cli`
355
+
- Help: `cargo run -p tangled-cli -- --help`
356
+
- Login: `cargo run -p tangled-cli -- auth login --handle <handle>`
357
+
- Status: `cargo run -p tangled-cli -- auth status`
358
+
- Repo list: `TANGLED_API_BASE=https://tangled.org cargo run -p tangled-cli -- repo list --user <handle>`
359
+
360
+
--------------------------------------------------------------------------------
361
+
362
+
End of handoff. Implement auth login and repo list as described, keeping changes focused and testable.
363
+
+2972
Cargo.lock
+2972
Cargo.lock
···
1
+
# This file is automatically @generated by Cargo.
2
+
# It is not intended for manual editing.
3
+
version = 4
4
+
5
+
[[package]]
6
+
name = "addr2line"
7
+
version = "0.25.1"
8
+
source = "registry+https://github.com/rust-lang/crates.io-index"
9
+
checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b"
10
+
dependencies = [
11
+
"gimli",
12
+
]
13
+
14
+
[[package]]
15
+
name = "adler2"
16
+
version = "2.0.1"
17
+
source = "registry+https://github.com/rust-lang/crates.io-index"
18
+
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
19
+
20
+
[[package]]
21
+
name = "aho-corasick"
22
+
version = "1.1.3"
23
+
source = "registry+https://github.com/rust-lang/crates.io-index"
24
+
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
25
+
dependencies = [
26
+
"memchr",
27
+
]
28
+
29
+
[[package]]
30
+
name = "android_system_properties"
31
+
version = "0.1.5"
32
+
source = "registry+https://github.com/rust-lang/crates.io-index"
33
+
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
34
+
dependencies = [
35
+
"libc",
36
+
]
37
+
38
+
[[package]]
39
+
name = "anstream"
40
+
version = "0.6.20"
41
+
source = "registry+https://github.com/rust-lang/crates.io-index"
42
+
checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192"
43
+
dependencies = [
44
+
"anstyle",
45
+
"anstyle-parse",
46
+
"anstyle-query",
47
+
"anstyle-wincon",
48
+
"colorchoice",
49
+
"is_terminal_polyfill",
50
+
"utf8parse",
51
+
]
52
+
53
+
[[package]]
54
+
name = "anstyle"
55
+
version = "1.0.13"
56
+
source = "registry+https://github.com/rust-lang/crates.io-index"
57
+
checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
58
+
59
+
[[package]]
60
+
name = "anstyle-parse"
61
+
version = "0.2.7"
62
+
source = "registry+https://github.com/rust-lang/crates.io-index"
63
+
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
64
+
dependencies = [
65
+
"utf8parse",
66
+
]
67
+
68
+
[[package]]
69
+
name = "anstyle-query"
70
+
version = "1.1.4"
71
+
source = "registry+https://github.com/rust-lang/crates.io-index"
72
+
checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
73
+
dependencies = [
74
+
"windows-sys 0.60.2",
75
+
]
76
+
77
+
[[package]]
78
+
name = "anstyle-wincon"
79
+
version = "3.0.10"
80
+
source = "registry+https://github.com/rust-lang/crates.io-index"
81
+
checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
82
+
dependencies = [
83
+
"anstyle",
84
+
"once_cell_polyfill",
85
+
"windows-sys 0.60.2",
86
+
]
87
+
88
+
[[package]]
89
+
name = "anyhow"
90
+
version = "1.0.100"
91
+
source = "registry+https://github.com/rust-lang/crates.io-index"
92
+
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
93
+
94
+
[[package]]
95
+
name = "async-compression"
96
+
version = "0.4.32"
97
+
source = "registry+https://github.com/rust-lang/crates.io-index"
98
+
checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0"
99
+
dependencies = [
100
+
"compression-codecs",
101
+
"compression-core",
102
+
"futures-core",
103
+
"pin-project-lite",
104
+
"tokio",
105
+
]
106
+
107
+
[[package]]
108
+
name = "atomic-waker"
109
+
version = "1.1.2"
110
+
source = "registry+https://github.com/rust-lang/crates.io-index"
111
+
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
112
+
113
+
[[package]]
114
+
name = "atrium-api"
115
+
version = "0.24.10"
116
+
source = "registry+https://github.com/rust-lang/crates.io-index"
117
+
checksum = "9c5d74937642f6b21814e82d80f54d55ebd985b681bffbe27c8a76e726c3c4db"
118
+
dependencies = [
119
+
"atrium-xrpc",
120
+
"chrono",
121
+
"http",
122
+
"ipld-core",
123
+
"langtag",
124
+
"regex",
125
+
"serde",
126
+
"serde_bytes",
127
+
"serde_json",
128
+
"thiserror 1.0.69",
129
+
"tokio",
130
+
"trait-variant",
131
+
]
132
+
133
+
[[package]]
134
+
name = "atrium-xrpc"
135
+
version = "0.12.3"
136
+
source = "registry+https://github.com/rust-lang/crates.io-index"
137
+
checksum = "0216ad50ce34e9ff982e171c3659e65dedaa2ed5ac2994524debdc9a9647ffa8"
138
+
dependencies = [
139
+
"http",
140
+
"serde",
141
+
"serde_html_form",
142
+
"serde_json",
143
+
"thiserror 1.0.69",
144
+
"trait-variant",
145
+
]
146
+
147
+
[[package]]
148
+
name = "atrium-xrpc-client"
149
+
version = "0.5.14"
150
+
source = "registry+https://github.com/rust-lang/crates.io-index"
151
+
checksum = "e099e5171f79faef52364ef0657a4cab086a71b384a779a29597a91b780de0d5"
152
+
dependencies = [
153
+
"atrium-xrpc",
154
+
"reqwest",
155
+
]
156
+
157
+
[[package]]
158
+
name = "autocfg"
159
+
version = "1.5.0"
160
+
source = "registry+https://github.com/rust-lang/crates.io-index"
161
+
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
162
+
163
+
[[package]]
164
+
name = "backtrace"
165
+
version = "0.3.76"
166
+
source = "registry+https://github.com/rust-lang/crates.io-index"
167
+
checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6"
168
+
dependencies = [
169
+
"addr2line",
170
+
"cfg-if",
171
+
"libc",
172
+
"miniz_oxide",
173
+
"object",
174
+
"rustc-demangle",
175
+
"windows-link 0.2.0",
176
+
]
177
+
178
+
[[package]]
179
+
name = "base-x"
180
+
version = "0.2.11"
181
+
source = "registry+https://github.com/rust-lang/crates.io-index"
182
+
checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
183
+
184
+
[[package]]
185
+
name = "base256emoji"
186
+
version = "1.0.2"
187
+
source = "registry+https://github.com/rust-lang/crates.io-index"
188
+
checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c"
189
+
dependencies = [
190
+
"const-str",
191
+
"match-lookup",
192
+
]
193
+
194
+
[[package]]
195
+
name = "base64"
196
+
version = "0.22.1"
197
+
source = "registry+https://github.com/rust-lang/crates.io-index"
198
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
199
+
200
+
[[package]]
201
+
name = "bitflags"
202
+
version = "2.9.4"
203
+
source = "registry+https://github.com/rust-lang/crates.io-index"
204
+
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
205
+
206
+
[[package]]
207
+
name = "bumpalo"
208
+
version = "3.19.0"
209
+
source = "registry+https://github.com/rust-lang/crates.io-index"
210
+
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
211
+
212
+
[[package]]
213
+
name = "bytes"
214
+
version = "1.10.1"
215
+
source = "registry+https://github.com/rust-lang/crates.io-index"
216
+
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
217
+
218
+
[[package]]
219
+
name = "cc"
220
+
version = "1.2.39"
221
+
source = "registry+https://github.com/rust-lang/crates.io-index"
222
+
checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f"
223
+
dependencies = [
224
+
"find-msvc-tools",
225
+
"jobserver",
226
+
"libc",
227
+
"shlex",
228
+
]
229
+
230
+
[[package]]
231
+
name = "cfg-if"
232
+
version = "1.0.3"
233
+
source = "registry+https://github.com/rust-lang/crates.io-index"
234
+
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
235
+
236
+
[[package]]
237
+
name = "cfg_aliases"
238
+
version = "0.2.1"
239
+
source = "registry+https://github.com/rust-lang/crates.io-index"
240
+
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
241
+
242
+
[[package]]
243
+
name = "chrono"
244
+
version = "0.4.42"
245
+
source = "registry+https://github.com/rust-lang/crates.io-index"
246
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
247
+
dependencies = [
248
+
"iana-time-zone",
249
+
"js-sys",
250
+
"num-traits",
251
+
"serde",
252
+
"wasm-bindgen",
253
+
"windows-link 0.2.0",
254
+
]
255
+
256
+
[[package]]
257
+
name = "cid"
258
+
version = "0.11.1"
259
+
source = "registry+https://github.com/rust-lang/crates.io-index"
260
+
checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a"
261
+
dependencies = [
262
+
"core2",
263
+
"multibase",
264
+
"multihash",
265
+
"serde",
266
+
"serde_bytes",
267
+
"unsigned-varint",
268
+
]
269
+
270
+
[[package]]
271
+
name = "clap"
272
+
version = "4.5.48"
273
+
source = "registry+https://github.com/rust-lang/crates.io-index"
274
+
checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae"
275
+
dependencies = [
276
+
"clap_builder",
277
+
"clap_derive",
278
+
]
279
+
280
+
[[package]]
281
+
name = "clap_builder"
282
+
version = "4.5.48"
283
+
source = "registry+https://github.com/rust-lang/crates.io-index"
284
+
checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9"
285
+
dependencies = [
286
+
"anstream",
287
+
"anstyle",
288
+
"clap_lex",
289
+
"strsim",
290
+
"terminal_size",
291
+
"unicase",
292
+
"unicode-width",
293
+
]
294
+
295
+
[[package]]
296
+
name = "clap_derive"
297
+
version = "4.5.47"
298
+
source = "registry+https://github.com/rust-lang/crates.io-index"
299
+
checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c"
300
+
dependencies = [
301
+
"heck",
302
+
"proc-macro2",
303
+
"quote",
304
+
"syn 2.0.106",
305
+
]
306
+
307
+
[[package]]
308
+
name = "clap_lex"
309
+
version = "0.7.5"
310
+
source = "registry+https://github.com/rust-lang/crates.io-index"
311
+
checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675"
312
+
313
+
[[package]]
314
+
name = "colorchoice"
315
+
version = "1.0.4"
316
+
source = "registry+https://github.com/rust-lang/crates.io-index"
317
+
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
318
+
319
+
[[package]]
320
+
name = "colored"
321
+
version = "2.2.0"
322
+
source = "registry+https://github.com/rust-lang/crates.io-index"
323
+
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
324
+
dependencies = [
325
+
"lazy_static",
326
+
"windows-sys 0.59.0",
327
+
]
328
+
329
+
[[package]]
330
+
name = "compression-codecs"
331
+
version = "0.4.31"
332
+
source = "registry+https://github.com/rust-lang/crates.io-index"
333
+
checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23"
334
+
dependencies = [
335
+
"compression-core",
336
+
"flate2",
337
+
"memchr",
338
+
]
339
+
340
+
[[package]]
341
+
name = "compression-core"
342
+
version = "0.4.29"
343
+
source = "registry+https://github.com/rust-lang/crates.io-index"
344
+
checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb"
345
+
346
+
[[package]]
347
+
name = "console"
348
+
version = "0.15.11"
349
+
source = "registry+https://github.com/rust-lang/crates.io-index"
350
+
checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
351
+
dependencies = [
352
+
"encode_unicode",
353
+
"libc",
354
+
"once_cell",
355
+
"unicode-width",
356
+
"windows-sys 0.59.0",
357
+
]
358
+
359
+
[[package]]
360
+
name = "const-str"
361
+
version = "0.4.3"
362
+
source = "registry+https://github.com/rust-lang/crates.io-index"
363
+
checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3"
364
+
365
+
[[package]]
366
+
name = "core-foundation"
367
+
version = "0.9.4"
368
+
source = "registry+https://github.com/rust-lang/crates.io-index"
369
+
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
370
+
dependencies = [
371
+
"core-foundation-sys",
372
+
"libc",
373
+
]
374
+
375
+
[[package]]
376
+
name = "core-foundation-sys"
377
+
version = "0.8.7"
378
+
source = "registry+https://github.com/rust-lang/crates.io-index"
379
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
380
+
381
+
[[package]]
382
+
name = "core2"
383
+
version = "0.4.0"
384
+
source = "registry+https://github.com/rust-lang/crates.io-index"
385
+
checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
386
+
dependencies = [
387
+
"memchr",
388
+
]
389
+
390
+
[[package]]
391
+
name = "crc32fast"
392
+
version = "1.5.0"
393
+
source = "registry+https://github.com/rust-lang/crates.io-index"
394
+
checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
395
+
dependencies = [
396
+
"cfg-if",
397
+
]
398
+
399
+
[[package]]
400
+
name = "data-encoding"
401
+
version = "2.9.0"
402
+
source = "registry+https://github.com/rust-lang/crates.io-index"
403
+
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
404
+
405
+
[[package]]
406
+
name = "data-encoding-macro"
407
+
version = "0.1.18"
408
+
source = "registry+https://github.com/rust-lang/crates.io-index"
409
+
checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d"
410
+
dependencies = [
411
+
"data-encoding",
412
+
"data-encoding-macro-internal",
413
+
]
414
+
415
+
[[package]]
416
+
name = "data-encoding-macro-internal"
417
+
version = "0.1.16"
418
+
source = "registry+https://github.com/rust-lang/crates.io-index"
419
+
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
420
+
dependencies = [
421
+
"data-encoding",
422
+
"syn 2.0.106",
423
+
]
424
+
425
+
[[package]]
426
+
name = "dbus"
427
+
version = "0.9.9"
428
+
source = "registry+https://github.com/rust-lang/crates.io-index"
429
+
checksum = "190b6255e8ab55a7b568df5a883e9497edc3e4821c06396612048b430e5ad1e9"
430
+
dependencies = [
431
+
"libc",
432
+
"libdbus-sys",
433
+
"windows-sys 0.59.0",
434
+
]
435
+
436
+
[[package]]
437
+
name = "dbus-secret-service"
438
+
version = "4.1.0"
439
+
source = "registry+https://github.com/rust-lang/crates.io-index"
440
+
checksum = "708b509edf7889e53d7efb0ffadd994cc6c2345ccb62f55cfd6b0682165e4fa6"
441
+
dependencies = [
442
+
"dbus",
443
+
"openssl",
444
+
"zeroize",
445
+
]
446
+
447
+
[[package]]
448
+
name = "dialoguer"
449
+
version = "0.11.0"
450
+
source = "registry+https://github.com/rust-lang/crates.io-index"
451
+
checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de"
452
+
dependencies = [
453
+
"console",
454
+
"shell-words",
455
+
"tempfile",
456
+
"thiserror 1.0.69",
457
+
"zeroize",
458
+
]
459
+
460
+
[[package]]
461
+
name = "dirs"
462
+
version = "5.0.1"
463
+
source = "registry+https://github.com/rust-lang/crates.io-index"
464
+
checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
465
+
dependencies = [
466
+
"dirs-sys",
467
+
]
468
+
469
+
[[package]]
470
+
name = "dirs-sys"
471
+
version = "0.4.1"
472
+
source = "registry+https://github.com/rust-lang/crates.io-index"
473
+
checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
474
+
dependencies = [
475
+
"libc",
476
+
"option-ext",
477
+
"redox_users",
478
+
"windows-sys 0.48.0",
479
+
]
480
+
481
+
[[package]]
482
+
name = "displaydoc"
483
+
version = "0.2.5"
484
+
source = "registry+https://github.com/rust-lang/crates.io-index"
485
+
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
486
+
dependencies = [
487
+
"proc-macro2",
488
+
"quote",
489
+
"syn 2.0.106",
490
+
]
491
+
492
+
[[package]]
493
+
name = "encode_unicode"
494
+
version = "1.0.0"
495
+
source = "registry+https://github.com/rust-lang/crates.io-index"
496
+
checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
497
+
498
+
[[package]]
499
+
name = "encoding_rs"
500
+
version = "0.8.35"
501
+
source = "registry+https://github.com/rust-lang/crates.io-index"
502
+
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
503
+
dependencies = [
504
+
"cfg-if",
505
+
]
506
+
507
+
[[package]]
508
+
name = "equivalent"
509
+
version = "1.0.2"
510
+
source = "registry+https://github.com/rust-lang/crates.io-index"
511
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
512
+
513
+
[[package]]
514
+
name = "errno"
515
+
version = "0.3.14"
516
+
source = "registry+https://github.com/rust-lang/crates.io-index"
517
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
518
+
dependencies = [
519
+
"libc",
520
+
"windows-sys 0.61.1",
521
+
]
522
+
523
+
[[package]]
524
+
name = "fastrand"
525
+
version = "2.3.0"
526
+
source = "registry+https://github.com/rust-lang/crates.io-index"
527
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
528
+
529
+
[[package]]
530
+
name = "find-msvc-tools"
531
+
version = "0.1.2"
532
+
source = "registry+https://github.com/rust-lang/crates.io-index"
533
+
checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959"
534
+
535
+
[[package]]
536
+
name = "flate2"
537
+
version = "1.1.2"
538
+
source = "registry+https://github.com/rust-lang/crates.io-index"
539
+
checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
540
+
dependencies = [
541
+
"crc32fast",
542
+
"miniz_oxide",
543
+
]
544
+
545
+
[[package]]
546
+
name = "fnv"
547
+
version = "1.0.7"
548
+
source = "registry+https://github.com/rust-lang/crates.io-index"
549
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
550
+
551
+
[[package]]
552
+
name = "foreign-types"
553
+
version = "0.3.2"
554
+
source = "registry+https://github.com/rust-lang/crates.io-index"
555
+
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
556
+
dependencies = [
557
+
"foreign-types-shared",
558
+
]
559
+
560
+
[[package]]
561
+
name = "foreign-types-shared"
562
+
version = "0.1.1"
563
+
source = "registry+https://github.com/rust-lang/crates.io-index"
564
+
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
565
+
566
+
[[package]]
567
+
name = "form_urlencoded"
568
+
version = "1.2.2"
569
+
source = "registry+https://github.com/rust-lang/crates.io-index"
570
+
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
571
+
dependencies = [
572
+
"percent-encoding",
573
+
]
574
+
575
+
[[package]]
576
+
name = "futures-channel"
577
+
version = "0.3.31"
578
+
source = "registry+https://github.com/rust-lang/crates.io-index"
579
+
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
580
+
dependencies = [
581
+
"futures-core",
582
+
]
583
+
584
+
[[package]]
585
+
name = "futures-core"
586
+
version = "0.3.31"
587
+
source = "registry+https://github.com/rust-lang/crates.io-index"
588
+
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
589
+
590
+
[[package]]
591
+
name = "futures-io"
592
+
version = "0.3.31"
593
+
source = "registry+https://github.com/rust-lang/crates.io-index"
594
+
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
595
+
596
+
[[package]]
597
+
name = "futures-macro"
598
+
version = "0.3.31"
599
+
source = "registry+https://github.com/rust-lang/crates.io-index"
600
+
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
601
+
dependencies = [
602
+
"proc-macro2",
603
+
"quote",
604
+
"syn 2.0.106",
605
+
]
606
+
607
+
[[package]]
608
+
name = "futures-sink"
609
+
version = "0.3.31"
610
+
source = "registry+https://github.com/rust-lang/crates.io-index"
611
+
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
612
+
613
+
[[package]]
614
+
name = "futures-task"
615
+
version = "0.3.31"
616
+
source = "registry+https://github.com/rust-lang/crates.io-index"
617
+
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
618
+
619
+
[[package]]
620
+
name = "futures-util"
621
+
version = "0.3.31"
622
+
source = "registry+https://github.com/rust-lang/crates.io-index"
623
+
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
624
+
dependencies = [
625
+
"futures-core",
626
+
"futures-io",
627
+
"futures-macro",
628
+
"futures-sink",
629
+
"futures-task",
630
+
"memchr",
631
+
"pin-project-lite",
632
+
"pin-utils",
633
+
"slab",
634
+
]
635
+
636
+
[[package]]
637
+
name = "getrandom"
638
+
version = "0.2.16"
639
+
source = "registry+https://github.com/rust-lang/crates.io-index"
640
+
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
641
+
dependencies = [
642
+
"cfg-if",
643
+
"js-sys",
644
+
"libc",
645
+
"wasi 0.11.1+wasi-snapshot-preview1",
646
+
"wasm-bindgen",
647
+
]
648
+
649
+
[[package]]
650
+
name = "getrandom"
651
+
version = "0.3.3"
652
+
source = "registry+https://github.com/rust-lang/crates.io-index"
653
+
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
654
+
dependencies = [
655
+
"cfg-if",
656
+
"js-sys",
657
+
"libc",
658
+
"r-efi",
659
+
"wasi 0.14.7+wasi-0.2.4",
660
+
"wasm-bindgen",
661
+
]
662
+
663
+
[[package]]
664
+
name = "gimli"
665
+
version = "0.32.3"
666
+
source = "registry+https://github.com/rust-lang/crates.io-index"
667
+
checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
668
+
669
+
[[package]]
670
+
name = "git2"
671
+
version = "0.19.0"
672
+
source = "registry+https://github.com/rust-lang/crates.io-index"
673
+
checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724"
674
+
dependencies = [
675
+
"bitflags",
676
+
"libc",
677
+
"libgit2-sys",
678
+
"log",
679
+
"openssl-probe",
680
+
"openssl-sys",
681
+
"url",
682
+
]
683
+
684
+
[[package]]
685
+
name = "h2"
686
+
version = "0.4.12"
687
+
source = "registry+https://github.com/rust-lang/crates.io-index"
688
+
checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
689
+
dependencies = [
690
+
"atomic-waker",
691
+
"bytes",
692
+
"fnv",
693
+
"futures-core",
694
+
"futures-sink",
695
+
"http",
696
+
"indexmap",
697
+
"slab",
698
+
"tokio",
699
+
"tokio-util",
700
+
"tracing",
701
+
]
702
+
703
+
[[package]]
704
+
name = "hashbrown"
705
+
version = "0.16.0"
706
+
source = "registry+https://github.com/rust-lang/crates.io-index"
707
+
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
708
+
709
+
[[package]]
710
+
name = "heck"
711
+
version = "0.5.0"
712
+
source = "registry+https://github.com/rust-lang/crates.io-index"
713
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
714
+
715
+
[[package]]
716
+
name = "http"
717
+
version = "1.3.1"
718
+
source = "registry+https://github.com/rust-lang/crates.io-index"
719
+
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
720
+
dependencies = [
721
+
"bytes",
722
+
"fnv",
723
+
"itoa",
724
+
]
725
+
726
+
[[package]]
727
+
name = "http-body"
728
+
version = "1.0.1"
729
+
source = "registry+https://github.com/rust-lang/crates.io-index"
730
+
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
731
+
dependencies = [
732
+
"bytes",
733
+
"http",
734
+
]
735
+
736
+
[[package]]
737
+
name = "http-body-util"
738
+
version = "0.1.3"
739
+
source = "registry+https://github.com/rust-lang/crates.io-index"
740
+
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
741
+
dependencies = [
742
+
"bytes",
743
+
"futures-core",
744
+
"http",
745
+
"http-body",
746
+
"pin-project-lite",
747
+
]
748
+
749
+
[[package]]
750
+
name = "httparse"
751
+
version = "1.10.1"
752
+
source = "registry+https://github.com/rust-lang/crates.io-index"
753
+
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
754
+
755
+
[[package]]
756
+
name = "hyper"
757
+
version = "1.7.0"
758
+
source = "registry+https://github.com/rust-lang/crates.io-index"
759
+
checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
760
+
dependencies = [
761
+
"atomic-waker",
762
+
"bytes",
763
+
"futures-channel",
764
+
"futures-core",
765
+
"h2",
766
+
"http",
767
+
"http-body",
768
+
"httparse",
769
+
"itoa",
770
+
"pin-project-lite",
771
+
"pin-utils",
772
+
"smallvec",
773
+
"tokio",
774
+
"want",
775
+
]
776
+
777
+
[[package]]
778
+
name = "hyper-rustls"
779
+
version = "0.27.7"
780
+
source = "registry+https://github.com/rust-lang/crates.io-index"
781
+
checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
782
+
dependencies = [
783
+
"http",
784
+
"hyper",
785
+
"hyper-util",
786
+
"rustls",
787
+
"rustls-pki-types",
788
+
"tokio",
789
+
"tokio-rustls",
790
+
"tower-service",
791
+
"webpki-roots",
792
+
]
793
+
794
+
[[package]]
795
+
name = "hyper-tls"
796
+
version = "0.6.0"
797
+
source = "registry+https://github.com/rust-lang/crates.io-index"
798
+
checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
799
+
dependencies = [
800
+
"bytes",
801
+
"http-body-util",
802
+
"hyper",
803
+
"hyper-util",
804
+
"native-tls",
805
+
"tokio",
806
+
"tokio-native-tls",
807
+
"tower-service",
808
+
]
809
+
810
+
[[package]]
811
+
name = "hyper-util"
812
+
version = "0.1.17"
813
+
source = "registry+https://github.com/rust-lang/crates.io-index"
814
+
checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
815
+
dependencies = [
816
+
"base64",
817
+
"bytes",
818
+
"futures-channel",
819
+
"futures-core",
820
+
"futures-util",
821
+
"http",
822
+
"http-body",
823
+
"hyper",
824
+
"ipnet",
825
+
"libc",
826
+
"percent-encoding",
827
+
"pin-project-lite",
828
+
"socket2",
829
+
"system-configuration",
830
+
"tokio",
831
+
"tower-service",
832
+
"tracing",
833
+
"windows-registry",
834
+
]
835
+
836
+
[[package]]
837
+
name = "iana-time-zone"
838
+
version = "0.1.64"
839
+
source = "registry+https://github.com/rust-lang/crates.io-index"
840
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
841
+
dependencies = [
842
+
"android_system_properties",
843
+
"core-foundation-sys",
844
+
"iana-time-zone-haiku",
845
+
"js-sys",
846
+
"log",
847
+
"wasm-bindgen",
848
+
"windows-core",
849
+
]
850
+
851
+
[[package]]
852
+
name = "iana-time-zone-haiku"
853
+
version = "0.1.2"
854
+
source = "registry+https://github.com/rust-lang/crates.io-index"
855
+
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
856
+
dependencies = [
857
+
"cc",
858
+
]
859
+
860
+
[[package]]
861
+
name = "icu_collections"
862
+
version = "2.0.0"
863
+
source = "registry+https://github.com/rust-lang/crates.io-index"
864
+
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
865
+
dependencies = [
866
+
"displaydoc",
867
+
"potential_utf",
868
+
"yoke",
869
+
"zerofrom",
870
+
"zerovec",
871
+
]
872
+
873
+
[[package]]
874
+
name = "icu_locale_core"
875
+
version = "2.0.0"
876
+
source = "registry+https://github.com/rust-lang/crates.io-index"
877
+
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
878
+
dependencies = [
879
+
"displaydoc",
880
+
"litemap",
881
+
"tinystr",
882
+
"writeable",
883
+
"zerovec",
884
+
]
885
+
886
+
[[package]]
887
+
name = "icu_normalizer"
888
+
version = "2.0.0"
889
+
source = "registry+https://github.com/rust-lang/crates.io-index"
890
+
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
891
+
dependencies = [
892
+
"displaydoc",
893
+
"icu_collections",
894
+
"icu_normalizer_data",
895
+
"icu_properties",
896
+
"icu_provider",
897
+
"smallvec",
898
+
"zerovec",
899
+
]
900
+
901
+
[[package]]
902
+
name = "icu_normalizer_data"
903
+
version = "2.0.0"
904
+
source = "registry+https://github.com/rust-lang/crates.io-index"
905
+
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
906
+
907
+
[[package]]
908
+
name = "icu_properties"
909
+
version = "2.0.1"
910
+
source = "registry+https://github.com/rust-lang/crates.io-index"
911
+
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
912
+
dependencies = [
913
+
"displaydoc",
914
+
"icu_collections",
915
+
"icu_locale_core",
916
+
"icu_properties_data",
917
+
"icu_provider",
918
+
"potential_utf",
919
+
"zerotrie",
920
+
"zerovec",
921
+
]
922
+
923
+
[[package]]
924
+
name = "icu_properties_data"
925
+
version = "2.0.1"
926
+
source = "registry+https://github.com/rust-lang/crates.io-index"
927
+
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
928
+
929
+
[[package]]
930
+
name = "icu_provider"
931
+
version = "2.0.0"
932
+
source = "registry+https://github.com/rust-lang/crates.io-index"
933
+
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
934
+
dependencies = [
935
+
"displaydoc",
936
+
"icu_locale_core",
937
+
"stable_deref_trait",
938
+
"tinystr",
939
+
"writeable",
940
+
"yoke",
941
+
"zerofrom",
942
+
"zerotrie",
943
+
"zerovec",
944
+
]
945
+
946
+
[[package]]
947
+
name = "idna"
948
+
version = "1.1.0"
949
+
source = "registry+https://github.com/rust-lang/crates.io-index"
950
+
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
951
+
dependencies = [
952
+
"idna_adapter",
953
+
"smallvec",
954
+
"utf8_iter",
955
+
]
956
+
957
+
[[package]]
958
+
name = "idna_adapter"
959
+
version = "1.2.1"
960
+
source = "registry+https://github.com/rust-lang/crates.io-index"
961
+
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
962
+
dependencies = [
963
+
"icu_normalizer",
964
+
"icu_properties",
965
+
]
966
+
967
+
[[package]]
968
+
name = "indexmap"
969
+
version = "2.11.4"
970
+
source = "registry+https://github.com/rust-lang/crates.io-index"
971
+
checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
972
+
dependencies = [
973
+
"equivalent",
974
+
"hashbrown",
975
+
]
976
+
977
+
[[package]]
978
+
name = "indicatif"
979
+
version = "0.17.11"
980
+
source = "registry+https://github.com/rust-lang/crates.io-index"
981
+
checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
982
+
dependencies = [
983
+
"console",
984
+
"number_prefix",
985
+
"portable-atomic",
986
+
"unicode-width",
987
+
"web-time",
988
+
]
989
+
990
+
[[package]]
991
+
name = "io-uring"
992
+
version = "0.7.10"
993
+
source = "registry+https://github.com/rust-lang/crates.io-index"
994
+
checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
995
+
dependencies = [
996
+
"bitflags",
997
+
"cfg-if",
998
+
"libc",
999
+
]
1000
+
1001
+
[[package]]
1002
+
name = "ipld-core"
1003
+
version = "0.4.2"
1004
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1005
+
checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db"
1006
+
dependencies = [
1007
+
"cid",
1008
+
"serde",
1009
+
"serde_bytes",
1010
+
]
1011
+
1012
+
[[package]]
1013
+
name = "ipnet"
1014
+
version = "2.11.0"
1015
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1016
+
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
1017
+
1018
+
[[package]]
1019
+
name = "iri-string"
1020
+
version = "0.7.8"
1021
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1022
+
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
1023
+
dependencies = [
1024
+
"memchr",
1025
+
"serde",
1026
+
]
1027
+
1028
+
[[package]]
1029
+
name = "is_terminal_polyfill"
1030
+
version = "1.70.1"
1031
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1032
+
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
1033
+
1034
+
[[package]]
1035
+
name = "itoa"
1036
+
version = "1.0.15"
1037
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1038
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1039
+
1040
+
[[package]]
1041
+
name = "jobserver"
1042
+
version = "0.1.34"
1043
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1044
+
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
1045
+
dependencies = [
1046
+
"getrandom 0.3.3",
1047
+
"libc",
1048
+
]
1049
+
1050
+
[[package]]
1051
+
name = "js-sys"
1052
+
version = "0.3.81"
1053
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1054
+
checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305"
1055
+
dependencies = [
1056
+
"once_cell",
1057
+
"wasm-bindgen",
1058
+
]
1059
+
1060
+
[[package]]
1061
+
name = "keyring"
1062
+
version = "3.6.3"
1063
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1064
+
checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c"
1065
+
dependencies = [
1066
+
"dbus-secret-service",
1067
+
"log",
1068
+
"openssl",
1069
+
"zeroize",
1070
+
]
1071
+
1072
+
[[package]]
1073
+
name = "langtag"
1074
+
version = "0.3.4"
1075
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1076
+
checksum = "ed60c85f254d6ae8450cec15eedd921efbc4d1bdf6fcf6202b9a58b403f6f805"
1077
+
dependencies = [
1078
+
"serde",
1079
+
]
1080
+
1081
+
[[package]]
1082
+
name = "lazy_static"
1083
+
version = "1.5.0"
1084
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1085
+
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
1086
+
1087
+
[[package]]
1088
+
name = "libc"
1089
+
version = "0.2.176"
1090
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1091
+
checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174"
1092
+
1093
+
[[package]]
1094
+
name = "libdbus-sys"
1095
+
version = "0.2.6"
1096
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1097
+
checksum = "5cbe856efeb50e4681f010e9aaa2bf0a644e10139e54cde10fc83a307c23bd9f"
1098
+
dependencies = [
1099
+
"cc",
1100
+
"pkg-config",
1101
+
]
1102
+
1103
+
[[package]]
1104
+
name = "libgit2-sys"
1105
+
version = "0.17.0+1.8.1"
1106
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1107
+
checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224"
1108
+
dependencies = [
1109
+
"cc",
1110
+
"libc",
1111
+
"libssh2-sys",
1112
+
"libz-sys",
1113
+
"openssl-sys",
1114
+
"pkg-config",
1115
+
]
1116
+
1117
+
[[package]]
1118
+
name = "libredox"
1119
+
version = "0.1.10"
1120
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1121
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
1122
+
dependencies = [
1123
+
"bitflags",
1124
+
"libc",
1125
+
]
1126
+
1127
+
[[package]]
1128
+
name = "libssh2-sys"
1129
+
version = "0.3.1"
1130
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1131
+
checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9"
1132
+
dependencies = [
1133
+
"cc",
1134
+
"libc",
1135
+
"libz-sys",
1136
+
"openssl-sys",
1137
+
"pkg-config",
1138
+
"vcpkg",
1139
+
]
1140
+
1141
+
[[package]]
1142
+
name = "libz-sys"
1143
+
version = "1.1.22"
1144
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1145
+
checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d"
1146
+
dependencies = [
1147
+
"cc",
1148
+
"libc",
1149
+
"pkg-config",
1150
+
"vcpkg",
1151
+
]
1152
+
1153
+
[[package]]
1154
+
name = "linux-raw-sys"
1155
+
version = "0.11.0"
1156
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1157
+
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
1158
+
1159
+
[[package]]
1160
+
name = "litemap"
1161
+
version = "0.8.0"
1162
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1163
+
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
1164
+
1165
+
[[package]]
1166
+
name = "lock_api"
1167
+
version = "0.4.13"
1168
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1169
+
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
1170
+
dependencies = [
1171
+
"autocfg",
1172
+
"scopeguard",
1173
+
]
1174
+
1175
+
[[package]]
1176
+
name = "log"
1177
+
version = "0.4.28"
1178
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1179
+
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
1180
+
1181
+
[[package]]
1182
+
name = "lru-slab"
1183
+
version = "0.1.2"
1184
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1185
+
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
1186
+
1187
+
[[package]]
1188
+
name = "match-lookup"
1189
+
version = "0.1.1"
1190
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1191
+
checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e"
1192
+
dependencies = [
1193
+
"proc-macro2",
1194
+
"quote",
1195
+
"syn 1.0.109",
1196
+
]
1197
+
1198
+
[[package]]
1199
+
name = "memchr"
1200
+
version = "2.7.6"
1201
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1202
+
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
1203
+
1204
+
[[package]]
1205
+
name = "mime"
1206
+
version = "0.3.17"
1207
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1208
+
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
1209
+
1210
+
[[package]]
1211
+
name = "miniz_oxide"
1212
+
version = "0.8.9"
1213
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1214
+
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
1215
+
dependencies = [
1216
+
"adler2",
1217
+
]
1218
+
1219
+
[[package]]
1220
+
name = "mio"
1221
+
version = "1.0.4"
1222
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1223
+
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
1224
+
dependencies = [
1225
+
"libc",
1226
+
"wasi 0.11.1+wasi-snapshot-preview1",
1227
+
"windows-sys 0.59.0",
1228
+
]
1229
+
1230
+
[[package]]
1231
+
name = "multibase"
1232
+
version = "0.9.2"
1233
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1234
+
checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77"
1235
+
dependencies = [
1236
+
"base-x",
1237
+
"base256emoji",
1238
+
"data-encoding",
1239
+
"data-encoding-macro",
1240
+
]
1241
+
1242
+
[[package]]
1243
+
name = "multihash"
1244
+
version = "0.19.3"
1245
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1246
+
checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d"
1247
+
dependencies = [
1248
+
"core2",
1249
+
"serde",
1250
+
"unsigned-varint",
1251
+
]
1252
+
1253
+
[[package]]
1254
+
name = "native-tls"
1255
+
version = "0.2.14"
1256
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1257
+
checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
1258
+
dependencies = [
1259
+
"libc",
1260
+
"log",
1261
+
"openssl",
1262
+
"openssl-probe",
1263
+
"openssl-sys",
1264
+
"schannel",
1265
+
"security-framework",
1266
+
"security-framework-sys",
1267
+
"tempfile",
1268
+
]
1269
+
1270
+
[[package]]
1271
+
name = "num-traits"
1272
+
version = "0.2.19"
1273
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1274
+
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
1275
+
dependencies = [
1276
+
"autocfg",
1277
+
]
1278
+
1279
+
[[package]]
1280
+
name = "number_prefix"
1281
+
version = "0.4.0"
1282
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1283
+
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
1284
+
1285
+
[[package]]
1286
+
name = "object"
1287
+
version = "0.37.3"
1288
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1289
+
checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
1290
+
dependencies = [
1291
+
"memchr",
1292
+
]
1293
+
1294
+
[[package]]
1295
+
name = "once_cell"
1296
+
version = "1.21.3"
1297
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1298
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
1299
+
1300
+
[[package]]
1301
+
name = "once_cell_polyfill"
1302
+
version = "1.70.1"
1303
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1304
+
checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
1305
+
1306
+
[[package]]
1307
+
name = "openssl"
1308
+
version = "0.10.73"
1309
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1310
+
checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
1311
+
dependencies = [
1312
+
"bitflags",
1313
+
"cfg-if",
1314
+
"foreign-types",
1315
+
"libc",
1316
+
"once_cell",
1317
+
"openssl-macros",
1318
+
"openssl-sys",
1319
+
]
1320
+
1321
+
[[package]]
1322
+
name = "openssl-macros"
1323
+
version = "0.1.1"
1324
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1325
+
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
1326
+
dependencies = [
1327
+
"proc-macro2",
1328
+
"quote",
1329
+
"syn 2.0.106",
1330
+
]
1331
+
1332
+
[[package]]
1333
+
name = "openssl-probe"
1334
+
version = "0.1.6"
1335
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1336
+
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
1337
+
1338
+
[[package]]
1339
+
name = "openssl-src"
1340
+
version = "300.5.2+3.5.2"
1341
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1342
+
checksum = "d270b79e2926f5150189d475bc7e9d2c69f9c4697b185fa917d5a32b792d21b4"
1343
+
dependencies = [
1344
+
"cc",
1345
+
]
1346
+
1347
+
[[package]]
1348
+
name = "openssl-sys"
1349
+
version = "0.9.109"
1350
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1351
+
checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
1352
+
dependencies = [
1353
+
"cc",
1354
+
"libc",
1355
+
"openssl-src",
1356
+
"pkg-config",
1357
+
"vcpkg",
1358
+
]
1359
+
1360
+
[[package]]
1361
+
name = "option-ext"
1362
+
version = "0.2.0"
1363
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1364
+
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
1365
+
1366
+
[[package]]
1367
+
name = "parking_lot"
1368
+
version = "0.12.4"
1369
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1370
+
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
1371
+
dependencies = [
1372
+
"lock_api",
1373
+
"parking_lot_core",
1374
+
]
1375
+
1376
+
[[package]]
1377
+
name = "parking_lot_core"
1378
+
version = "0.9.11"
1379
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1380
+
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
1381
+
dependencies = [
1382
+
"cfg-if",
1383
+
"libc",
1384
+
"redox_syscall",
1385
+
"smallvec",
1386
+
"windows-targets 0.52.6",
1387
+
]
1388
+
1389
+
[[package]]
1390
+
name = "percent-encoding"
1391
+
version = "2.3.2"
1392
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1393
+
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
1394
+
1395
+
[[package]]
1396
+
name = "pin-project-lite"
1397
+
version = "0.2.16"
1398
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1399
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
1400
+
1401
+
[[package]]
1402
+
name = "pin-utils"
1403
+
version = "0.1.0"
1404
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1405
+
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
1406
+
1407
+
[[package]]
1408
+
name = "pkg-config"
1409
+
version = "0.3.32"
1410
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1411
+
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
1412
+
1413
+
[[package]]
1414
+
name = "portable-atomic"
1415
+
version = "1.11.1"
1416
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1417
+
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
1418
+
1419
+
[[package]]
1420
+
name = "potential_utf"
1421
+
version = "0.1.3"
1422
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1423
+
checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
1424
+
dependencies = [
1425
+
"zerovec",
1426
+
]
1427
+
1428
+
[[package]]
1429
+
name = "ppv-lite86"
1430
+
version = "0.2.21"
1431
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1432
+
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
1433
+
dependencies = [
1434
+
"zerocopy",
1435
+
]
1436
+
1437
+
[[package]]
1438
+
name = "proc-macro2"
1439
+
version = "1.0.101"
1440
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1441
+
checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
1442
+
dependencies = [
1443
+
"unicode-ident",
1444
+
]
1445
+
1446
+
[[package]]
1447
+
name = "quinn"
1448
+
version = "0.11.9"
1449
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1450
+
checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
1451
+
dependencies = [
1452
+
"bytes",
1453
+
"cfg_aliases",
1454
+
"pin-project-lite",
1455
+
"quinn-proto",
1456
+
"quinn-udp",
1457
+
"rustc-hash",
1458
+
"rustls",
1459
+
"socket2",
1460
+
"thiserror 2.0.17",
1461
+
"tokio",
1462
+
"tracing",
1463
+
"web-time",
1464
+
]
1465
+
1466
+
[[package]]
1467
+
name = "quinn-proto"
1468
+
version = "0.11.13"
1469
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1470
+
checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
1471
+
dependencies = [
1472
+
"bytes",
1473
+
"getrandom 0.3.3",
1474
+
"lru-slab",
1475
+
"rand",
1476
+
"ring",
1477
+
"rustc-hash",
1478
+
"rustls",
1479
+
"rustls-pki-types",
1480
+
"slab",
1481
+
"thiserror 2.0.17",
1482
+
"tinyvec",
1483
+
"tracing",
1484
+
"web-time",
1485
+
]
1486
+
1487
+
[[package]]
1488
+
name = "quinn-udp"
1489
+
version = "0.5.14"
1490
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1491
+
checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
1492
+
dependencies = [
1493
+
"cfg_aliases",
1494
+
"libc",
1495
+
"once_cell",
1496
+
"socket2",
1497
+
"tracing",
1498
+
"windows-sys 0.60.2",
1499
+
]
1500
+
1501
+
[[package]]
1502
+
name = "quote"
1503
+
version = "1.0.41"
1504
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1505
+
checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
1506
+
dependencies = [
1507
+
"proc-macro2",
1508
+
]
1509
+
1510
+
[[package]]
1511
+
name = "r-efi"
1512
+
version = "5.3.0"
1513
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1514
+
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
1515
+
1516
+
[[package]]
1517
+
name = "rand"
1518
+
version = "0.9.2"
1519
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1520
+
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
1521
+
dependencies = [
1522
+
"rand_chacha",
1523
+
"rand_core",
1524
+
]
1525
+
1526
+
[[package]]
1527
+
name = "rand_chacha"
1528
+
version = "0.9.0"
1529
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1530
+
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
1531
+
dependencies = [
1532
+
"ppv-lite86",
1533
+
"rand_core",
1534
+
]
1535
+
1536
+
[[package]]
1537
+
name = "rand_core"
1538
+
version = "0.9.3"
1539
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1540
+
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
1541
+
dependencies = [
1542
+
"getrandom 0.3.3",
1543
+
]
1544
+
1545
+
[[package]]
1546
+
name = "redox_syscall"
1547
+
version = "0.5.17"
1548
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1549
+
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
1550
+
dependencies = [
1551
+
"bitflags",
1552
+
]
1553
+
1554
+
[[package]]
1555
+
name = "redox_users"
1556
+
version = "0.4.6"
1557
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1558
+
checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
1559
+
dependencies = [
1560
+
"getrandom 0.2.16",
1561
+
"libredox",
1562
+
"thiserror 1.0.69",
1563
+
]
1564
+
1565
+
[[package]]
1566
+
name = "regex"
1567
+
version = "1.11.3"
1568
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1569
+
checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c"
1570
+
dependencies = [
1571
+
"aho-corasick",
1572
+
"memchr",
1573
+
"regex-automata",
1574
+
"regex-syntax",
1575
+
]
1576
+
1577
+
[[package]]
1578
+
name = "regex-automata"
1579
+
version = "0.4.11"
1580
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1581
+
checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad"
1582
+
dependencies = [
1583
+
"aho-corasick",
1584
+
"memchr",
1585
+
"regex-syntax",
1586
+
]
1587
+
1588
+
[[package]]
1589
+
name = "regex-syntax"
1590
+
version = "0.8.6"
1591
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1592
+
checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
1593
+
1594
+
[[package]]
1595
+
name = "reqwest"
1596
+
version = "0.12.23"
1597
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1598
+
checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
1599
+
dependencies = [
1600
+
"async-compression",
1601
+
"base64",
1602
+
"bytes",
1603
+
"encoding_rs",
1604
+
"futures-core",
1605
+
"futures-util",
1606
+
"h2",
1607
+
"http",
1608
+
"http-body",
1609
+
"http-body-util",
1610
+
"hyper",
1611
+
"hyper-rustls",
1612
+
"hyper-tls",
1613
+
"hyper-util",
1614
+
"js-sys",
1615
+
"log",
1616
+
"mime",
1617
+
"native-tls",
1618
+
"percent-encoding",
1619
+
"pin-project-lite",
1620
+
"quinn",
1621
+
"rustls",
1622
+
"rustls-pki-types",
1623
+
"serde",
1624
+
"serde_json",
1625
+
"serde_urlencoded",
1626
+
"sync_wrapper",
1627
+
"tokio",
1628
+
"tokio-native-tls",
1629
+
"tokio-rustls",
1630
+
"tokio-util",
1631
+
"tower",
1632
+
"tower-http",
1633
+
"tower-service",
1634
+
"url",
1635
+
"wasm-bindgen",
1636
+
"wasm-bindgen-futures",
1637
+
"wasm-streams",
1638
+
"web-sys",
1639
+
"webpki-roots",
1640
+
]
1641
+
1642
+
[[package]]
1643
+
name = "ring"
1644
+
version = "0.17.14"
1645
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1646
+
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
1647
+
dependencies = [
1648
+
"cc",
1649
+
"cfg-if",
1650
+
"getrandom 0.2.16",
1651
+
"libc",
1652
+
"untrusted",
1653
+
"windows-sys 0.52.0",
1654
+
]
1655
+
1656
+
[[package]]
1657
+
name = "rustc-demangle"
1658
+
version = "0.1.26"
1659
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1660
+
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
1661
+
1662
+
[[package]]
1663
+
name = "rustc-hash"
1664
+
version = "2.1.1"
1665
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1666
+
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
1667
+
1668
+
[[package]]
1669
+
name = "rustix"
1670
+
version = "1.1.2"
1671
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1672
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
1673
+
dependencies = [
1674
+
"bitflags",
1675
+
"errno",
1676
+
"libc",
1677
+
"linux-raw-sys",
1678
+
"windows-sys 0.61.1",
1679
+
]
1680
+
1681
+
[[package]]
1682
+
name = "rustls"
1683
+
version = "0.23.32"
1684
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1685
+
checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40"
1686
+
dependencies = [
1687
+
"once_cell",
1688
+
"ring",
1689
+
"rustls-pki-types",
1690
+
"rustls-webpki",
1691
+
"subtle",
1692
+
"zeroize",
1693
+
]
1694
+
1695
+
[[package]]
1696
+
name = "rustls-pki-types"
1697
+
version = "1.12.0"
1698
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1699
+
checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
1700
+
dependencies = [
1701
+
"web-time",
1702
+
"zeroize",
1703
+
]
1704
+
1705
+
[[package]]
1706
+
name = "rustls-webpki"
1707
+
version = "0.103.6"
1708
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1709
+
checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb"
1710
+
dependencies = [
1711
+
"ring",
1712
+
"rustls-pki-types",
1713
+
"untrusted",
1714
+
]
1715
+
1716
+
[[package]]
1717
+
name = "rustversion"
1718
+
version = "1.0.22"
1719
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1720
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
1721
+
1722
+
[[package]]
1723
+
name = "ryu"
1724
+
version = "1.0.20"
1725
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1726
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
1727
+
1728
+
[[package]]
1729
+
name = "schannel"
1730
+
version = "0.1.28"
1731
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1732
+
checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1"
1733
+
dependencies = [
1734
+
"windows-sys 0.61.1",
1735
+
]
1736
+
1737
+
[[package]]
1738
+
name = "scopeguard"
1739
+
version = "1.2.0"
1740
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1741
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1742
+
1743
+
[[package]]
1744
+
name = "security-framework"
1745
+
version = "2.11.1"
1746
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1747
+
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
1748
+
dependencies = [
1749
+
"bitflags",
1750
+
"core-foundation",
1751
+
"core-foundation-sys",
1752
+
"libc",
1753
+
"security-framework-sys",
1754
+
]
1755
+
1756
+
[[package]]
1757
+
name = "security-framework-sys"
1758
+
version = "2.15.0"
1759
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1760
+
checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0"
1761
+
dependencies = [
1762
+
"core-foundation-sys",
1763
+
"libc",
1764
+
]
1765
+
1766
+
[[package]]
1767
+
name = "serde"
1768
+
version = "1.0.228"
1769
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1770
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
1771
+
dependencies = [
1772
+
"serde_core",
1773
+
"serde_derive",
1774
+
]
1775
+
1776
+
[[package]]
1777
+
name = "serde_bytes"
1778
+
version = "0.11.19"
1779
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1780
+
checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8"
1781
+
dependencies = [
1782
+
"serde",
1783
+
"serde_core",
1784
+
]
1785
+
1786
+
[[package]]
1787
+
name = "serde_core"
1788
+
version = "1.0.228"
1789
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1790
+
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
1791
+
dependencies = [
1792
+
"serde_derive",
1793
+
]
1794
+
1795
+
[[package]]
1796
+
name = "serde_derive"
1797
+
version = "1.0.228"
1798
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1799
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
1800
+
dependencies = [
1801
+
"proc-macro2",
1802
+
"quote",
1803
+
"syn 2.0.106",
1804
+
]
1805
+
1806
+
[[package]]
1807
+
name = "serde_html_form"
1808
+
version = "0.2.8"
1809
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1810
+
checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f"
1811
+
dependencies = [
1812
+
"form_urlencoded",
1813
+
"indexmap",
1814
+
"itoa",
1815
+
"ryu",
1816
+
"serde_core",
1817
+
]
1818
+
1819
+
[[package]]
1820
+
name = "serde_json"
1821
+
version = "1.0.145"
1822
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1823
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
1824
+
dependencies = [
1825
+
"itoa",
1826
+
"memchr",
1827
+
"ryu",
1828
+
"serde",
1829
+
"serde_core",
1830
+
]
1831
+
1832
+
[[package]]
1833
+
name = "serde_spanned"
1834
+
version = "0.6.9"
1835
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1836
+
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
1837
+
dependencies = [
1838
+
"serde",
1839
+
]
1840
+
1841
+
[[package]]
1842
+
name = "serde_urlencoded"
1843
+
version = "0.7.1"
1844
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1845
+
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
1846
+
dependencies = [
1847
+
"form_urlencoded",
1848
+
"itoa",
1849
+
"ryu",
1850
+
"serde",
1851
+
]
1852
+
1853
+
[[package]]
1854
+
name = "shell-words"
1855
+
version = "1.1.0"
1856
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1857
+
checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
1858
+
1859
+
[[package]]
1860
+
name = "shlex"
1861
+
version = "1.3.0"
1862
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1863
+
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
1864
+
1865
+
[[package]]
1866
+
name = "signal-hook-registry"
1867
+
version = "1.4.6"
1868
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1869
+
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
1870
+
dependencies = [
1871
+
"libc",
1872
+
]
1873
+
1874
+
[[package]]
1875
+
name = "slab"
1876
+
version = "0.4.11"
1877
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1878
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
1879
+
1880
+
[[package]]
1881
+
name = "smallvec"
1882
+
version = "1.15.1"
1883
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1884
+
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
1885
+
1886
+
[[package]]
1887
+
name = "socket2"
1888
+
version = "0.6.0"
1889
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1890
+
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
1891
+
dependencies = [
1892
+
"libc",
1893
+
"windows-sys 0.59.0",
1894
+
]
1895
+
1896
+
[[package]]
1897
+
name = "stable_deref_trait"
1898
+
version = "1.2.0"
1899
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1900
+
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
1901
+
1902
+
[[package]]
1903
+
name = "strsim"
1904
+
version = "0.11.1"
1905
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1906
+
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
1907
+
1908
+
[[package]]
1909
+
name = "subtle"
1910
+
version = "2.6.1"
1911
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1912
+
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
1913
+
1914
+
[[package]]
1915
+
name = "syn"
1916
+
version = "1.0.109"
1917
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1918
+
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
1919
+
dependencies = [
1920
+
"proc-macro2",
1921
+
"quote",
1922
+
"unicode-ident",
1923
+
]
1924
+
1925
+
[[package]]
1926
+
name = "syn"
1927
+
version = "2.0.106"
1928
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1929
+
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
1930
+
dependencies = [
1931
+
"proc-macro2",
1932
+
"quote",
1933
+
"unicode-ident",
1934
+
]
1935
+
1936
+
[[package]]
1937
+
name = "sync_wrapper"
1938
+
version = "1.0.2"
1939
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1940
+
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
1941
+
dependencies = [
1942
+
"futures-core",
1943
+
]
1944
+
1945
+
[[package]]
1946
+
name = "synstructure"
1947
+
version = "0.13.2"
1948
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1949
+
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
1950
+
dependencies = [
1951
+
"proc-macro2",
1952
+
"quote",
1953
+
"syn 2.0.106",
1954
+
]
1955
+
1956
+
[[package]]
1957
+
name = "system-configuration"
1958
+
version = "0.6.1"
1959
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1960
+
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
1961
+
dependencies = [
1962
+
"bitflags",
1963
+
"core-foundation",
1964
+
"system-configuration-sys",
1965
+
]
1966
+
1967
+
[[package]]
1968
+
name = "system-configuration-sys"
1969
+
version = "0.6.0"
1970
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1971
+
checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
1972
+
dependencies = [
1973
+
"core-foundation-sys",
1974
+
"libc",
1975
+
]
1976
+
1977
+
[[package]]
1978
+
name = "tangled-api"
1979
+
version = "0.1.0"
1980
+
dependencies = [
1981
+
"anyhow",
1982
+
"atrium-api",
1983
+
"atrium-xrpc-client",
1984
+
"reqwest",
1985
+
"serde",
1986
+
"serde_json",
1987
+
"tangled-config",
1988
+
"tokio",
1989
+
]
1990
+
1991
+
[[package]]
1992
+
name = "tangled-cli"
1993
+
version = "0.1.0"
1994
+
dependencies = [
1995
+
"anyhow",
1996
+
"clap",
1997
+
"colored",
1998
+
"dialoguer",
1999
+
"indicatif",
2000
+
"serde",
2001
+
"serde_json",
2002
+
"tangled-api",
2003
+
"tangled-config",
2004
+
"tangled-git",
2005
+
"tokio",
2006
+
]
2007
+
2008
+
[[package]]
2009
+
name = "tangled-config"
2010
+
version = "0.1.0"
2011
+
dependencies = [
2012
+
"anyhow",
2013
+
"chrono",
2014
+
"dirs",
2015
+
"keyring",
2016
+
"serde",
2017
+
"serde_json",
2018
+
"toml",
2019
+
]
2020
+
2021
+
[[package]]
2022
+
name = "tangled-git"
2023
+
version = "0.1.0"
2024
+
dependencies = [
2025
+
"anyhow",
2026
+
"git2",
2027
+
]
2028
+
2029
+
[[package]]
2030
+
name = "tempfile"
2031
+
version = "3.23.0"
2032
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2033
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
2034
+
dependencies = [
2035
+
"fastrand",
2036
+
"getrandom 0.3.3",
2037
+
"once_cell",
2038
+
"rustix",
2039
+
"windows-sys 0.61.1",
2040
+
]
2041
+
2042
+
[[package]]
2043
+
name = "terminal_size"
2044
+
version = "0.4.3"
2045
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2046
+
checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0"
2047
+
dependencies = [
2048
+
"rustix",
2049
+
"windows-sys 0.60.2",
2050
+
]
2051
+
2052
+
[[package]]
2053
+
name = "thiserror"
2054
+
version = "1.0.69"
2055
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2056
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
2057
+
dependencies = [
2058
+
"thiserror-impl 1.0.69",
2059
+
]
2060
+
2061
+
[[package]]
2062
+
name = "thiserror"
2063
+
version = "2.0.17"
2064
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2065
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
2066
+
dependencies = [
2067
+
"thiserror-impl 2.0.17",
2068
+
]
2069
+
2070
+
[[package]]
2071
+
name = "thiserror-impl"
2072
+
version = "1.0.69"
2073
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2074
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
2075
+
dependencies = [
2076
+
"proc-macro2",
2077
+
"quote",
2078
+
"syn 2.0.106",
2079
+
]
2080
+
2081
+
[[package]]
2082
+
name = "thiserror-impl"
2083
+
version = "2.0.17"
2084
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2085
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
2086
+
dependencies = [
2087
+
"proc-macro2",
2088
+
"quote",
2089
+
"syn 2.0.106",
2090
+
]
2091
+
2092
+
[[package]]
2093
+
name = "tinystr"
2094
+
version = "0.8.1"
2095
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2096
+
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
2097
+
dependencies = [
2098
+
"displaydoc",
2099
+
"zerovec",
2100
+
]
2101
+
2102
+
[[package]]
2103
+
name = "tinyvec"
2104
+
version = "1.10.0"
2105
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2106
+
checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
2107
+
dependencies = [
2108
+
"tinyvec_macros",
2109
+
]
2110
+
2111
+
[[package]]
2112
+
name = "tinyvec_macros"
2113
+
version = "0.1.1"
2114
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2115
+
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
2116
+
2117
+
[[package]]
2118
+
name = "tokio"
2119
+
version = "1.47.1"
2120
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2121
+
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
2122
+
dependencies = [
2123
+
"backtrace",
2124
+
"bytes",
2125
+
"io-uring",
2126
+
"libc",
2127
+
"mio",
2128
+
"parking_lot",
2129
+
"pin-project-lite",
2130
+
"signal-hook-registry",
2131
+
"slab",
2132
+
"socket2",
2133
+
"tokio-macros",
2134
+
"windows-sys 0.59.0",
2135
+
]
2136
+
2137
+
[[package]]
2138
+
name = "tokio-macros"
2139
+
version = "2.5.0"
2140
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2141
+
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
2142
+
dependencies = [
2143
+
"proc-macro2",
2144
+
"quote",
2145
+
"syn 2.0.106",
2146
+
]
2147
+
2148
+
[[package]]
2149
+
name = "tokio-native-tls"
2150
+
version = "0.3.1"
2151
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2152
+
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
2153
+
dependencies = [
2154
+
"native-tls",
2155
+
"tokio",
2156
+
]
2157
+
2158
+
[[package]]
2159
+
name = "tokio-rustls"
2160
+
version = "0.26.4"
2161
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2162
+
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
2163
+
dependencies = [
2164
+
"rustls",
2165
+
"tokio",
2166
+
]
2167
+
2168
+
[[package]]
2169
+
name = "tokio-util"
2170
+
version = "0.7.16"
2171
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2172
+
checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
2173
+
dependencies = [
2174
+
"bytes",
2175
+
"futures-core",
2176
+
"futures-sink",
2177
+
"pin-project-lite",
2178
+
"tokio",
2179
+
]
2180
+
2181
+
[[package]]
2182
+
name = "toml"
2183
+
version = "0.8.23"
2184
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2185
+
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
2186
+
dependencies = [
2187
+
"serde",
2188
+
"serde_spanned",
2189
+
"toml_datetime",
2190
+
"toml_edit",
2191
+
]
2192
+
2193
+
[[package]]
2194
+
name = "toml_datetime"
2195
+
version = "0.6.11"
2196
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2197
+
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
2198
+
dependencies = [
2199
+
"serde",
2200
+
]
2201
+
2202
+
[[package]]
2203
+
name = "toml_edit"
2204
+
version = "0.22.27"
2205
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2206
+
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
2207
+
dependencies = [
2208
+
"indexmap",
2209
+
"serde",
2210
+
"serde_spanned",
2211
+
"toml_datetime",
2212
+
"toml_write",
2213
+
"winnow",
2214
+
]
2215
+
2216
+
[[package]]
2217
+
name = "toml_write"
2218
+
version = "0.1.2"
2219
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2220
+
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
2221
+
2222
+
[[package]]
2223
+
name = "tower"
2224
+
version = "0.5.2"
2225
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2226
+
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
2227
+
dependencies = [
2228
+
"futures-core",
2229
+
"futures-util",
2230
+
"pin-project-lite",
2231
+
"sync_wrapper",
2232
+
"tokio",
2233
+
"tower-layer",
2234
+
"tower-service",
2235
+
]
2236
+
2237
+
[[package]]
2238
+
name = "tower-http"
2239
+
version = "0.6.6"
2240
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2241
+
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
2242
+
dependencies = [
2243
+
"bitflags",
2244
+
"bytes",
2245
+
"futures-util",
2246
+
"http",
2247
+
"http-body",
2248
+
"iri-string",
2249
+
"pin-project-lite",
2250
+
"tower",
2251
+
"tower-layer",
2252
+
"tower-service",
2253
+
]
2254
+
2255
+
[[package]]
2256
+
name = "tower-layer"
2257
+
version = "0.3.3"
2258
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2259
+
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
2260
+
2261
+
[[package]]
2262
+
name = "tower-service"
2263
+
version = "0.3.3"
2264
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2265
+
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
2266
+
2267
+
[[package]]
2268
+
name = "tracing"
2269
+
version = "0.1.41"
2270
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2271
+
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
2272
+
dependencies = [
2273
+
"pin-project-lite",
2274
+
"tracing-core",
2275
+
]
2276
+
2277
+
[[package]]
2278
+
name = "tracing-core"
2279
+
version = "0.1.34"
2280
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2281
+
checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
2282
+
dependencies = [
2283
+
"once_cell",
2284
+
]
2285
+
2286
+
[[package]]
2287
+
name = "trait-variant"
2288
+
version = "0.1.2"
2289
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2290
+
checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7"
2291
+
dependencies = [
2292
+
"proc-macro2",
2293
+
"quote",
2294
+
"syn 2.0.106",
2295
+
]
2296
+
2297
+
[[package]]
2298
+
name = "try-lock"
2299
+
version = "0.2.5"
2300
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2301
+
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
2302
+
2303
+
[[package]]
2304
+
name = "unicase"
2305
+
version = "2.8.1"
2306
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2307
+
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
2308
+
2309
+
[[package]]
2310
+
name = "unicode-ident"
2311
+
version = "1.0.19"
2312
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2313
+
checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
2314
+
2315
+
[[package]]
2316
+
name = "unicode-width"
2317
+
version = "0.2.1"
2318
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2319
+
checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c"
2320
+
2321
+
[[package]]
2322
+
name = "unsigned-varint"
2323
+
version = "0.8.0"
2324
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2325
+
checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06"
2326
+
2327
+
[[package]]
2328
+
name = "untrusted"
2329
+
version = "0.9.0"
2330
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2331
+
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
2332
+
2333
+
[[package]]
2334
+
name = "url"
2335
+
version = "2.5.7"
2336
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2337
+
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
2338
+
dependencies = [
2339
+
"form_urlencoded",
2340
+
"idna",
2341
+
"percent-encoding",
2342
+
"serde",
2343
+
]
2344
+
2345
+
[[package]]
2346
+
name = "utf8_iter"
2347
+
version = "1.0.4"
2348
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2349
+
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
2350
+
2351
+
[[package]]
2352
+
name = "utf8parse"
2353
+
version = "0.2.2"
2354
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2355
+
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
2356
+
2357
+
[[package]]
2358
+
name = "vcpkg"
2359
+
version = "0.2.15"
2360
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2361
+
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
2362
+
2363
+
[[package]]
2364
+
name = "want"
2365
+
version = "0.3.1"
2366
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2367
+
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
2368
+
dependencies = [
2369
+
"try-lock",
2370
+
]
2371
+
2372
+
[[package]]
2373
+
name = "wasi"
2374
+
version = "0.11.1+wasi-snapshot-preview1"
2375
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2376
+
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
2377
+
2378
+
[[package]]
2379
+
name = "wasi"
2380
+
version = "0.14.7+wasi-0.2.4"
2381
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2382
+
checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c"
2383
+
dependencies = [
2384
+
"wasip2",
2385
+
]
2386
+
2387
+
[[package]]
2388
+
name = "wasip2"
2389
+
version = "1.0.1+wasi-0.2.4"
2390
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2391
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
2392
+
dependencies = [
2393
+
"wit-bindgen",
2394
+
]
2395
+
2396
+
[[package]]
2397
+
name = "wasm-bindgen"
2398
+
version = "0.2.104"
2399
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2400
+
checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d"
2401
+
dependencies = [
2402
+
"cfg-if",
2403
+
"once_cell",
2404
+
"rustversion",
2405
+
"wasm-bindgen-macro",
2406
+
"wasm-bindgen-shared",
2407
+
]
2408
+
2409
+
[[package]]
2410
+
name = "wasm-bindgen-backend"
2411
+
version = "0.2.104"
2412
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2413
+
checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19"
2414
+
dependencies = [
2415
+
"bumpalo",
2416
+
"log",
2417
+
"proc-macro2",
2418
+
"quote",
2419
+
"syn 2.0.106",
2420
+
"wasm-bindgen-shared",
2421
+
]
2422
+
2423
+
[[package]]
2424
+
name = "wasm-bindgen-futures"
2425
+
version = "0.4.54"
2426
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2427
+
checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c"
2428
+
dependencies = [
2429
+
"cfg-if",
2430
+
"js-sys",
2431
+
"once_cell",
2432
+
"wasm-bindgen",
2433
+
"web-sys",
2434
+
]
2435
+
2436
+
[[package]]
2437
+
name = "wasm-bindgen-macro"
2438
+
version = "0.2.104"
2439
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2440
+
checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119"
2441
+
dependencies = [
2442
+
"quote",
2443
+
"wasm-bindgen-macro-support",
2444
+
]
2445
+
2446
+
[[package]]
2447
+
name = "wasm-bindgen-macro-support"
2448
+
version = "0.2.104"
2449
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2450
+
checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7"
2451
+
dependencies = [
2452
+
"proc-macro2",
2453
+
"quote",
2454
+
"syn 2.0.106",
2455
+
"wasm-bindgen-backend",
2456
+
"wasm-bindgen-shared",
2457
+
]
2458
+
2459
+
[[package]]
2460
+
name = "wasm-bindgen-shared"
2461
+
version = "0.2.104"
2462
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2463
+
checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1"
2464
+
dependencies = [
2465
+
"unicode-ident",
2466
+
]
2467
+
2468
+
[[package]]
2469
+
name = "wasm-streams"
2470
+
version = "0.4.2"
2471
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2472
+
checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65"
2473
+
dependencies = [
2474
+
"futures-util",
2475
+
"js-sys",
2476
+
"wasm-bindgen",
2477
+
"wasm-bindgen-futures",
2478
+
"web-sys",
2479
+
]
2480
+
2481
+
[[package]]
2482
+
name = "web-sys"
2483
+
version = "0.3.81"
2484
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2485
+
checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120"
2486
+
dependencies = [
2487
+
"js-sys",
2488
+
"wasm-bindgen",
2489
+
]
2490
+
2491
+
[[package]]
2492
+
name = "web-time"
2493
+
version = "1.1.0"
2494
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2495
+
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
2496
+
dependencies = [
2497
+
"js-sys",
2498
+
"wasm-bindgen",
2499
+
]
2500
+
2501
+
[[package]]
2502
+
name = "webpki-roots"
2503
+
version = "1.0.2"
2504
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2505
+
checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2"
2506
+
dependencies = [
2507
+
"rustls-pki-types",
2508
+
]
2509
+
2510
+
[[package]]
2511
+
name = "windows-core"
2512
+
version = "0.62.1"
2513
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2514
+
checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9"
2515
+
dependencies = [
2516
+
"windows-implement",
2517
+
"windows-interface",
2518
+
"windows-link 0.2.0",
2519
+
"windows-result 0.4.0",
2520
+
"windows-strings 0.5.0",
2521
+
]
2522
+
2523
+
[[package]]
2524
+
name = "windows-implement"
2525
+
version = "0.60.1"
2526
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2527
+
checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0"
2528
+
dependencies = [
2529
+
"proc-macro2",
2530
+
"quote",
2531
+
"syn 2.0.106",
2532
+
]
2533
+
2534
+
[[package]]
2535
+
name = "windows-interface"
2536
+
version = "0.59.2"
2537
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2538
+
checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5"
2539
+
dependencies = [
2540
+
"proc-macro2",
2541
+
"quote",
2542
+
"syn 2.0.106",
2543
+
]
2544
+
2545
+
[[package]]
2546
+
name = "windows-link"
2547
+
version = "0.1.3"
2548
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2549
+
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
2550
+
2551
+
[[package]]
2552
+
name = "windows-link"
2553
+
version = "0.2.0"
2554
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2555
+
checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65"
2556
+
2557
+
[[package]]
2558
+
name = "windows-registry"
2559
+
version = "0.5.3"
2560
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2561
+
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
2562
+
dependencies = [
2563
+
"windows-link 0.1.3",
2564
+
"windows-result 0.3.4",
2565
+
"windows-strings 0.4.2",
2566
+
]
2567
+
2568
+
[[package]]
2569
+
name = "windows-result"
2570
+
version = "0.3.4"
2571
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2572
+
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
2573
+
dependencies = [
2574
+
"windows-link 0.1.3",
2575
+
]
2576
+
2577
+
[[package]]
2578
+
name = "windows-result"
2579
+
version = "0.4.0"
2580
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2581
+
checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f"
2582
+
dependencies = [
2583
+
"windows-link 0.2.0",
2584
+
]
2585
+
2586
+
[[package]]
2587
+
name = "windows-strings"
2588
+
version = "0.4.2"
2589
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2590
+
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
2591
+
dependencies = [
2592
+
"windows-link 0.1.3",
2593
+
]
2594
+
2595
+
[[package]]
2596
+
name = "windows-strings"
2597
+
version = "0.5.0"
2598
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2599
+
checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda"
2600
+
dependencies = [
2601
+
"windows-link 0.2.0",
2602
+
]
2603
+
2604
+
[[package]]
2605
+
name = "windows-sys"
2606
+
version = "0.48.0"
2607
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2608
+
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
2609
+
dependencies = [
2610
+
"windows-targets 0.48.5",
2611
+
]
2612
+
2613
+
[[package]]
2614
+
name = "windows-sys"
2615
+
version = "0.52.0"
2616
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2617
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
2618
+
dependencies = [
2619
+
"windows-targets 0.52.6",
2620
+
]
2621
+
2622
+
[[package]]
2623
+
name = "windows-sys"
2624
+
version = "0.59.0"
2625
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2626
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
2627
+
dependencies = [
2628
+
"windows-targets 0.52.6",
2629
+
]
2630
+
2631
+
[[package]]
2632
+
name = "windows-sys"
2633
+
version = "0.60.2"
2634
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2635
+
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
2636
+
dependencies = [
2637
+
"windows-targets 0.53.4",
2638
+
]
2639
+
2640
+
[[package]]
2641
+
name = "windows-sys"
2642
+
version = "0.61.1"
2643
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2644
+
checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f"
2645
+
dependencies = [
2646
+
"windows-link 0.2.0",
2647
+
]
2648
+
2649
+
[[package]]
2650
+
name = "windows-targets"
2651
+
version = "0.48.5"
2652
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2653
+
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
2654
+
dependencies = [
2655
+
"windows_aarch64_gnullvm 0.48.5",
2656
+
"windows_aarch64_msvc 0.48.5",
2657
+
"windows_i686_gnu 0.48.5",
2658
+
"windows_i686_msvc 0.48.5",
2659
+
"windows_x86_64_gnu 0.48.5",
2660
+
"windows_x86_64_gnullvm 0.48.5",
2661
+
"windows_x86_64_msvc 0.48.5",
2662
+
]
2663
+
2664
+
[[package]]
2665
+
name = "windows-targets"
2666
+
version = "0.52.6"
2667
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2668
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
2669
+
dependencies = [
2670
+
"windows_aarch64_gnullvm 0.52.6",
2671
+
"windows_aarch64_msvc 0.52.6",
2672
+
"windows_i686_gnu 0.52.6",
2673
+
"windows_i686_gnullvm 0.52.6",
2674
+
"windows_i686_msvc 0.52.6",
2675
+
"windows_x86_64_gnu 0.52.6",
2676
+
"windows_x86_64_gnullvm 0.52.6",
2677
+
"windows_x86_64_msvc 0.52.6",
2678
+
]
2679
+
2680
+
[[package]]
2681
+
name = "windows-targets"
2682
+
version = "0.53.4"
2683
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2684
+
checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b"
2685
+
dependencies = [
2686
+
"windows-link 0.2.0",
2687
+
"windows_aarch64_gnullvm 0.53.0",
2688
+
"windows_aarch64_msvc 0.53.0",
2689
+
"windows_i686_gnu 0.53.0",
2690
+
"windows_i686_gnullvm 0.53.0",
2691
+
"windows_i686_msvc 0.53.0",
2692
+
"windows_x86_64_gnu 0.53.0",
2693
+
"windows_x86_64_gnullvm 0.53.0",
2694
+
"windows_x86_64_msvc 0.53.0",
2695
+
]
2696
+
2697
+
[[package]]
2698
+
name = "windows_aarch64_gnullvm"
2699
+
version = "0.48.5"
2700
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2701
+
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
2702
+
2703
+
[[package]]
2704
+
name = "windows_aarch64_gnullvm"
2705
+
version = "0.52.6"
2706
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2707
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
2708
+
2709
+
[[package]]
2710
+
name = "windows_aarch64_gnullvm"
2711
+
version = "0.53.0"
2712
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2713
+
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
2714
+
2715
+
[[package]]
2716
+
name = "windows_aarch64_msvc"
2717
+
version = "0.48.5"
2718
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2719
+
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
2720
+
2721
+
[[package]]
2722
+
name = "windows_aarch64_msvc"
2723
+
version = "0.52.6"
2724
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2725
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
2726
+
2727
+
[[package]]
2728
+
name = "windows_aarch64_msvc"
2729
+
version = "0.53.0"
2730
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2731
+
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
2732
+
2733
+
[[package]]
2734
+
name = "windows_i686_gnu"
2735
+
version = "0.48.5"
2736
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2737
+
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
2738
+
2739
+
[[package]]
2740
+
name = "windows_i686_gnu"
2741
+
version = "0.52.6"
2742
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2743
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
2744
+
2745
+
[[package]]
2746
+
name = "windows_i686_gnu"
2747
+
version = "0.53.0"
2748
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2749
+
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
2750
+
2751
+
[[package]]
2752
+
name = "windows_i686_gnullvm"
2753
+
version = "0.52.6"
2754
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2755
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
2756
+
2757
+
[[package]]
2758
+
name = "windows_i686_gnullvm"
2759
+
version = "0.53.0"
2760
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2761
+
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
2762
+
2763
+
[[package]]
2764
+
name = "windows_i686_msvc"
2765
+
version = "0.48.5"
2766
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2767
+
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
2768
+
2769
+
[[package]]
2770
+
name = "windows_i686_msvc"
2771
+
version = "0.52.6"
2772
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2773
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
2774
+
2775
+
[[package]]
2776
+
name = "windows_i686_msvc"
2777
+
version = "0.53.0"
2778
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2779
+
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
2780
+
2781
+
[[package]]
2782
+
name = "windows_x86_64_gnu"
2783
+
version = "0.48.5"
2784
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2785
+
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
2786
+
2787
+
[[package]]
2788
+
name = "windows_x86_64_gnu"
2789
+
version = "0.52.6"
2790
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2791
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
2792
+
2793
+
[[package]]
2794
+
name = "windows_x86_64_gnu"
2795
+
version = "0.53.0"
2796
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2797
+
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
2798
+
2799
+
[[package]]
2800
+
name = "windows_x86_64_gnullvm"
2801
+
version = "0.48.5"
2802
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2803
+
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
2804
+
2805
+
[[package]]
2806
+
name = "windows_x86_64_gnullvm"
2807
+
version = "0.52.6"
2808
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2809
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
2810
+
2811
+
[[package]]
2812
+
name = "windows_x86_64_gnullvm"
2813
+
version = "0.53.0"
2814
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2815
+
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
2816
+
2817
+
[[package]]
2818
+
name = "windows_x86_64_msvc"
2819
+
version = "0.48.5"
2820
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2821
+
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
2822
+
2823
+
[[package]]
2824
+
name = "windows_x86_64_msvc"
2825
+
version = "0.52.6"
2826
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2827
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
2828
+
2829
+
[[package]]
2830
+
name = "windows_x86_64_msvc"
2831
+
version = "0.53.0"
2832
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2833
+
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
2834
+
2835
+
[[package]]
2836
+
name = "winnow"
2837
+
version = "0.7.13"
2838
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2839
+
checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
2840
+
dependencies = [
2841
+
"memchr",
2842
+
]
2843
+
2844
+
[[package]]
2845
+
name = "wit-bindgen"
2846
+
version = "0.46.0"
2847
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2848
+
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
2849
+
2850
+
[[package]]
2851
+
name = "writeable"
2852
+
version = "0.6.1"
2853
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2854
+
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
2855
+
2856
+
[[package]]
2857
+
name = "yoke"
2858
+
version = "0.8.0"
2859
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2860
+
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
2861
+
dependencies = [
2862
+
"serde",
2863
+
"stable_deref_trait",
2864
+
"yoke-derive",
2865
+
"zerofrom",
2866
+
]
2867
+
2868
+
[[package]]
2869
+
name = "yoke-derive"
2870
+
version = "0.8.0"
2871
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2872
+
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
2873
+
dependencies = [
2874
+
"proc-macro2",
2875
+
"quote",
2876
+
"syn 2.0.106",
2877
+
"synstructure",
2878
+
]
2879
+
2880
+
[[package]]
2881
+
name = "zerocopy"
2882
+
version = "0.8.27"
2883
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2884
+
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
2885
+
dependencies = [
2886
+
"zerocopy-derive",
2887
+
]
2888
+
2889
+
[[package]]
2890
+
name = "zerocopy-derive"
2891
+
version = "0.8.27"
2892
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2893
+
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
2894
+
dependencies = [
2895
+
"proc-macro2",
2896
+
"quote",
2897
+
"syn 2.0.106",
2898
+
]
2899
+
2900
+
[[package]]
2901
+
name = "zerofrom"
2902
+
version = "0.1.6"
2903
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2904
+
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
2905
+
dependencies = [
2906
+
"zerofrom-derive",
2907
+
]
2908
+
2909
+
[[package]]
2910
+
name = "zerofrom-derive"
2911
+
version = "0.1.6"
2912
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2913
+
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
2914
+
dependencies = [
2915
+
"proc-macro2",
2916
+
"quote",
2917
+
"syn 2.0.106",
2918
+
"synstructure",
2919
+
]
2920
+
2921
+
[[package]]
2922
+
name = "zeroize"
2923
+
version = "1.8.2"
2924
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2925
+
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
2926
+
dependencies = [
2927
+
"zeroize_derive",
2928
+
]
2929
+
2930
+
[[package]]
2931
+
name = "zeroize_derive"
2932
+
version = "1.4.2"
2933
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2934
+
checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
2935
+
dependencies = [
2936
+
"proc-macro2",
2937
+
"quote",
2938
+
"syn 2.0.106",
2939
+
]
2940
+
2941
+
[[package]]
2942
+
name = "zerotrie"
2943
+
version = "0.2.2"
2944
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2945
+
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
2946
+
dependencies = [
2947
+
"displaydoc",
2948
+
"yoke",
2949
+
"zerofrom",
2950
+
]
2951
+
2952
+
[[package]]
2953
+
name = "zerovec"
2954
+
version = "0.11.4"
2955
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2956
+
checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
2957
+
dependencies = [
2958
+
"yoke",
2959
+
"zerofrom",
2960
+
"zerovec-derive",
2961
+
]
2962
+
2963
+
[[package]]
2964
+
name = "zerovec-derive"
2965
+
version = "0.11.1"
2966
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2967
+
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
2968
+
dependencies = [
2969
+
"proc-macro2",
2970
+
"quote",
2971
+
"syn 2.0.106",
2972
+
]
+2
-3
Cargo.toml
+2
-3
Cargo.toml
···
41
41
42
42
# Storage
43
43
dirs = "5.0"
44
-
keyring = "3.0"
44
+
keyring = { version = "3.6", features = ["sync-secret-service", "vendored"] }
45
45
46
46
# Error Handling
47
47
anyhow = "1.0"
48
48
thiserror = "2.0"
49
49
50
50
# Utilities
51
-
chrono = "0.4"
51
+
chrono = { version = "0.4", features = ["serde"] }
52
52
url = "2.5"
53
53
base64 = "0.22"
54
54
regex = "1.10"
···
58
58
tempfile = "3.10"
59
59
assert_cmd = "2.0"
60
60
predicates = "3.1"
61
-
+121
-9
crates/tangled-api/src/client.rs
+121
-9
crates/tangled-api/src/client.rs
···
1
-
use anyhow::{bail, Result};
2
-
use serde::{Deserialize, Serialize};
1
+
use anyhow::{anyhow, Result};
2
+
use serde::{de::DeserializeOwned, Deserialize, Serialize};
3
3
use tangled_config::session::Session;
4
4
5
5
#[derive(Clone, Debug)]
···
16
16
Self::new("https://tangled.org")
17
17
}
18
18
19
-
pub async fn login_with_password(&self, _handle: &str, _password: &str, _pds: &str) -> Result<Session> {
20
-
// TODO: implement via com.atproto.server.createSession
21
-
bail!("login_with_password not implemented")
19
+
fn xrpc_url(&self, method: &str) -> String {
20
+
format!(
21
+
"{}/xrpc/{}",
22
+
self.base_url.trim_end_matches('/'),
23
+
method
24
+
)
25
+
}
26
+
27
+
async fn post_json<TReq: Serialize, TRes: DeserializeOwned>(
28
+
&self,
29
+
method: &str,
30
+
req: &TReq,
31
+
bearer: Option<&str>,
32
+
) -> Result<TRes> {
33
+
let url = self.xrpc_url(method);
34
+
let client = reqwest::Client::new();
35
+
let mut reqb = client
36
+
.post(url)
37
+
.header(reqwest::header::CONTENT_TYPE, "application/json");
38
+
if let Some(token) = bearer {
39
+
reqb = reqb.header(
40
+
reqwest::header::AUTHORIZATION,
41
+
format!("Bearer {}", token),
42
+
);
43
+
}
44
+
let res = reqb.json(req).send().await?;
45
+
let status = res.status();
46
+
if !status.is_success() {
47
+
let body = res.text().await.unwrap_or_default();
48
+
return Err(anyhow!("{}: {}", status, body));
49
+
}
50
+
Ok(res.json::<TRes>().await?)
22
51
}
23
52
24
-
pub async fn list_repos(&self, _user: Option<&str>, _knot: Option<&str>, _starred: bool) -> Result<Vec<Repository>> {
25
-
// TODO: implement XRPC sh.tangled.repo.list
26
-
Ok(vec![])
53
+
async fn get_json<TRes: DeserializeOwned>(
54
+
&self,
55
+
method: &str,
56
+
params: &[(&str, String)],
57
+
bearer: Option<&str>,
58
+
) -> Result<TRes> {
59
+
let url = self.xrpc_url(method);
60
+
let client = reqwest::Client::new();
61
+
let mut reqb = client.get(url).query(¶ms);
62
+
if let Some(token) = bearer {
63
+
reqb = reqb.header(
64
+
reqwest::header::AUTHORIZATION,
65
+
format!("Bearer {}", token),
66
+
);
67
+
}
68
+
let res = reqb.send().await?;
69
+
let status = res.status();
70
+
if !status.is_success() {
71
+
let body = res.text().await.unwrap_or_default();
72
+
return Err(anyhow!("{}: {}", status, body));
73
+
}
74
+
Ok(res.json::<TRes>().await?)
75
+
}
76
+
77
+
pub async fn login_with_password(
78
+
&self,
79
+
handle: &str,
80
+
password: &str,
81
+
_pds: &str,
82
+
) -> Result<Session> {
83
+
#[derive(Serialize)]
84
+
struct Req<'a> {
85
+
#[serde(rename = "identifier")]
86
+
identifier: &'a str,
87
+
#[serde(rename = "password")]
88
+
password: &'a str,
89
+
}
90
+
#[derive(Deserialize)]
91
+
struct Res {
92
+
#[serde(rename = "accessJwt")]
93
+
access_jwt: String,
94
+
#[serde(rename = "refreshJwt")]
95
+
refresh_jwt: String,
96
+
did: String,
97
+
handle: String,
98
+
}
99
+
let body = Req {
100
+
identifier: handle,
101
+
password,
102
+
};
103
+
let res: Res = self
104
+
.post_json("com.atproto.server.createSession", &body, None)
105
+
.await?;
106
+
Ok(Session {
107
+
access_jwt: res.access_jwt,
108
+
refresh_jwt: res.refresh_jwt,
109
+
did: res.did,
110
+
handle: res.handle,
111
+
..Default::default()
112
+
})
113
+
}
114
+
115
+
pub async fn list_repos(
116
+
&self,
117
+
user: Option<&str>,
118
+
knot: Option<&str>,
119
+
starred: bool,
120
+
bearer: Option<&str>,
121
+
) -> Result<Vec<Repository>> {
122
+
#[derive(Deserialize)]
123
+
struct Envelope {
124
+
repos: Vec<Repository>,
125
+
}
126
+
let mut q = vec![];
127
+
if let Some(u) = user {
128
+
q.push(("user", u.to_string()));
129
+
}
130
+
if let Some(k) = knot {
131
+
q.push(("knot", k.to_string()));
132
+
}
133
+
if starred {
134
+
q.push(("starred", true.to_string()));
135
+
}
136
+
let env: Envelope = self
137
+
.get_json("sh.tangled.repo.list", &q, bearer)
138
+
.await?;
139
+
Ok(env.repos)
27
140
}
28
141
}
29
142
···
36
149
pub description: Option<String>,
37
150
pub private: bool,
38
151
}
39
-
+6
-1
crates/tangled-cli/src/cli.rs
+6
-1
crates/tangled-cli/src/cli.rs
···
40
40
#[derive(Subcommand, Debug, Clone)]
41
41
pub enum Command {
42
42
/// Authentication commands
43
+
#[command(subcommand)]
43
44
Auth(AuthCommand),
44
45
/// Repository commands
46
+
#[command(subcommand)]
45
47
Repo(RepoCommand),
46
48
/// Issue commands
49
+
#[command(subcommand)]
47
50
Issue(IssueCommand),
48
51
/// Pull request commands
52
+
#[command(subcommand)]
49
53
Pr(PrCommand),
50
54
/// Knot management commands
55
+
#[command(subcommand)]
51
56
Knot(KnotCommand),
52
57
/// Spindle integration commands
58
+
#[command(subcommand)]
53
59
Spindle(SpindleCommand),
54
60
}
55
61
···
365
371
#[arg(long)]
366
372
pub lines: Option<usize>,
367
373
}
368
-
+19
-16
crates/tangled-cli/src/commands/auth.rs
+19
-16
crates/tangled-cli/src/commands/auth.rs
···
1
1
use anyhow::Result;
2
2
use dialoguer::{Input, Password};
3
+
use tangled_config::session::SessionManager;
3
4
4
5
use crate::cli::{AuthCommand, AuthLoginArgs, Cli};
5
6
···
22
23
};
23
24
let pds = args.pds.unwrap_or_else(|| "https://bsky.social".to_string());
24
25
25
-
// Placeholder: integrate tangled_api authentication here
26
-
println!(
27
-
"Logging in as '{}' against PDS '{}'... (stub)",
28
-
handle, pds
29
-
);
30
-
31
-
// Example future flow:
32
-
// let client = tangled_api::TangledClient::new(&pds);
33
-
// let session = client.login(&handle, &password).await?;
34
-
// tangled_config::session::SessionManager::default().save(&session)?;
35
-
26
+
let client = tangled_api::TangledClient::new(&pds);
27
+
let session = client
28
+
.login_with_password(&handle, &password, &pds)
29
+
.await?;
30
+
SessionManager::default().save(&session)?;
31
+
println!("Logged in as '{}' ({})", session.handle, session.did);
36
32
Ok(())
37
33
}
38
34
39
35
async fn status(_cli: &Cli) -> Result<()> {
40
-
// Placeholder: read session from keyring/config
41
-
println!("Authentication status: (stub) not implemented");
36
+
let mgr = SessionManager::default();
37
+
match mgr.load()? {
38
+
Some(s) => println!("Logged in as '{}' ({})", s.handle, s.did),
39
+
None => println!("Not logged in. Run: tangled auth login"),
40
+
}
42
41
Ok(())
43
42
}
44
43
45
44
async fn logout(_cli: &Cli) -> Result<()> {
46
-
// Placeholder: remove session from keyring/config
47
-
println!("Logged out (stub)");
45
+
let mgr = SessionManager::default();
46
+
if mgr.load()?.is_some() {
47
+
mgr.clear()?;
48
+
println!("Logged out");
49
+
} else {
50
+
println!("No session found");
51
+
}
48
52
Ok(())
49
53
}
50
-
+7
-8
crates/tangled-cli/src/commands/mod.rs
+7
-8
crates/tangled-cli/src/commands/mod.rs
···
11
11
use crate::cli::{Cli, Command};
12
12
13
13
pub async fn dispatch(cli: Cli) -> Result<()> {
14
-
match cli.command {
15
-
Command::Auth(cmd) => auth::run(&cli, cmd).await,
16
-
Command::Repo(cmd) => repo::run(&cli, cmd).await,
17
-
Command::Issue(cmd) => issue::run(&cli, cmd).await,
18
-
Command::Pr(cmd) => pr::run(&cli, cmd).await,
19
-
Command::Knot(cmd) => knot::run(&cli, cmd).await,
20
-
Command::Spindle(cmd) => spindle::run(&cli, cmd).await,
14
+
match &cli.command {
15
+
Command::Auth(cmd) => auth::run(&cli, cmd.clone()).await,
16
+
Command::Repo(cmd) => repo::run(&cli, cmd.clone()).await,
17
+
Command::Issue(cmd) => issue::run(&cli, cmd.clone()).await,
18
+
Command::Pr(cmd) => pr::run(&cli, cmd.clone()).await,
19
+
Command::Knot(cmd) => knot::run(&cli, cmd.clone()).await,
20
+
Command::Spindle(cmd) => spindle::run(&cli, cmd.clone()).await,
21
21
}
22
22
}
23
23
···
25
25
eprintln!("{} {}", "[todo]".yellow().bold(), feature);
26
26
Ok(())
27
27
}
28
-