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
|
|
156
|
-
re-authenticates (`timestamp_timeout=0`), so an agent cannot silently
|
|
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
|
+
"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
|
package/vendor/linux-x64/keysink
CHANGED
|
Binary file
|
|
Binary file
|