keysink 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -47,6 +47,9 @@ everything in its environment — but the real key was never in there.
47
47
  cargo install keysink # from crates.io, needs a Rust toolchain
48
48
  ```
49
49
 
50
+ `cargo install` lands in `~/.cargo/bin`, which sudo can't see. So if you later
51
+ run `sudo keysink deploy`, use `sudo ~/.cargo/bin/keysink deploy`.
52
+
50
53
  Prebuilt binaries are also on
51
54
  [Releases](https://github.com/wusende/keysink/releases) — Linux / macOS /
52
55
  Windows, amd64 / arm64 — put one on your `PATH`. The npm package is a thin
@@ -108,7 +111,7 @@ talk to two different providers, or to the same provider with different keys.
108
111
  ```
109
112
  keysink init # first entry point in scripts / headless environments (interactive serve auto-initializes)
110
113
  keysink route add|ls|show|rotate|update|rm|enable|disable
111
- keysink serve [--listen 127.0.0.1:8787] [--audit-log FILE] [--max-concurrent N]
114
+ keysink serve [--listen 127.0.0.1:8787] [--audit-log FILE] [--max-concurrent N] [--accept-degraded]
112
115
  keysink status | doctor
113
116
  keysink export --output FILE # needs master password; strips all key values
114
117
  keysink rekey [--yes] # rotate the vault master key
@@ -152,8 +155,9 @@ a terminal, init manually:
152
155
  runuser -u keysink -- /usr/local/bin/keysink --home /var/lib/keysink init
153
156
  ```
154
157
 
155
- Admin commands then go through `sudo -u keysink keysink …`; each invocation
156
- re-authenticates (`timestamp_timeout=0`), so an agent cannot silently run them.
158
+ Admin commands then go through `sudo -u keysink /usr/local/bin/keysink …`; each
159
+ invocation re-authenticates (`timestamp_timeout=0`), so an agent cannot silently
160
+ run them.
157
161
 
158
162
  ## Security model
159
163
 
@@ -172,13 +176,17 @@ that can read both `vault.key` and `vault.age` can still decrypt offline —
172
176
  machine-level isolation stays your job (tight sudo, separate UID).
173
177
 
174
178
  `--audit-log` records route, vkey fingerprint, status and latency — never
175
- headers, body or query. Off by default.
179
+ headers, body or query. Off by default. Five rotated generations (10 MB each)
180
+ are kept, and rejected requests are admitted at 1/s per fingerprint — a flood
181
+ of unauthenticated requests cannot rotate the forensic trail away.
176
182
 
177
183
  `--listen` will bind a non-loopback address if you insist, but then TLS and
178
184
  network exposure are yours to solve; the intended deployment is loopback only.
179
185
  Everything a request touches is bounded by default — body size, in-flight
180
186
  requests, connections, time — so a hung upstream or a misbehaving agent can't
181
- take the gateway down.
187
+ take the gateway down. Idle connections are bounded too: http1 heads must
188
+ finish within 30s, and h2 connections that stop answering keep-alive PINGs
189
+ are closed.
182
190
 
183
191
  ## What this is not
184
192
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keysink",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Local gateway that keeps real AI API keys out of agents (Claude Code, OpenAI, MCP): agents hold revocable virtual keys, real keys stay in an encrypted vault.",
5
5
  "license": "MIT",
6
6
  "author": "wusende",
Binary file
Binary file
Binary file
Binary file
Binary file