axvault 1.11.3 → 1.12.0
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 +29 -26
- package/dist/cli.js +8 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/credential.d.ts +4 -4
- package/dist/commands/credential.d.ts.map +1 -1
- package/dist/commands/credential.js +33 -15
- package/dist/commands/credential.js.map +1 -1
- package/dist/commands/init.d.ts +2 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +25 -39
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/key-create.d.ts +2 -2
- package/dist/commands/key-create.d.ts.map +1 -1
- package/dist/commands/key-create.js +19 -8
- package/dist/commands/key-create.js.map +1 -1
- package/dist/commands/key-list.d.ts +2 -2
- package/dist/commands/key-list.d.ts.map +1 -1
- package/dist/commands/key-list.js +19 -8
- package/dist/commands/key-list.js.map +1 -1
- package/dist/commands/key-revoke.d.ts +2 -2
- package/dist/commands/key-revoke.d.ts.map +1 -1
- package/dist/commands/key-revoke.js +19 -11
- package/dist/commands/key-revoke.js.map +1 -1
- package/dist/commands/key-update.d.ts +2 -2
- package/dist/commands/key-update.d.ts.map +1 -1
- package/dist/commands/key-update.js +29 -33
- package/dist/commands/key-update.js.map +1 -1
- package/dist/commands/serve.d.ts +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +24 -35
- package/dist/commands/serve.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -3
- package/dist/config.js.map +1 -1
- package/dist/db/create-pool.d.ts +5 -0
- package/dist/db/create-pool.d.ts.map +1 -0
- package/dist/db/create-pool.js +13 -0
- package/dist/db/create-pool.js.map +1 -0
- package/dist/db/migrations/001-initial.sql +40 -0
- package/dist/db/repositories/api-keys.d.ts +11 -37
- package/dist/db/repositories/api-keys.d.ts.map +1 -1
- package/dist/db/repositories/api-keys.js +23 -67
- package/dist/db/repositories/api-keys.js.map +1 -1
- package/dist/db/repositories/audit-log.d.ts +7 -7
- package/dist/db/repositories/audit-log.d.ts.map +1 -1
- package/dist/db/repositories/audit-log.js +22 -23
- package/dist/db/repositories/audit-log.js.map +1 -1
- package/dist/db/repositories/create-api-key.d.ts +30 -0
- package/dist/db/repositories/create-api-key.d.ts.map +1 -0
- package/dist/db/repositories/create-api-key.js +37 -0
- package/dist/db/repositories/create-api-key.js.map +1 -0
- package/dist/db/repositories/credentials-queries.d.ts +6 -6
- package/dist/db/repositories/credentials-queries.d.ts.map +1 -1
- package/dist/db/repositories/credentials-queries.js +8 -8
- package/dist/db/repositories/credentials-queries.js.map +1 -1
- package/dist/db/repositories/credentials.d.ts +9 -25
- package/dist/db/repositories/credentials.d.ts.map +1 -1
- package/dist/db/repositories/credentials.js +38 -34
- package/dist/db/repositories/credentials.js.map +1 -1
- package/dist/db/repositories/list-credentials-paginated.d.ts +2 -2
- package/dist/db/repositories/list-credentials-paginated.d.ts.map +1 -1
- package/dist/db/repositories/list-credentials-paginated.js +26 -26
- package/dist/db/repositories/list-credentials-paginated.js.map +1 -1
- package/dist/db/repositories/update-api-key-access.d.ts +12 -0
- package/dist/db/repositories/update-api-key-access.d.ts.map +1 -0
- package/dist/db/repositories/update-api-key-access.js +29 -0
- package/dist/db/repositories/update-api-key-access.js.map +1 -0
- package/dist/db/repositories/update-credential-if-unchanged.d.ts +20 -0
- package/dist/db/repositories/update-credential-if-unchanged.d.ts.map +1 -0
- package/dist/db/repositories/update-credential-if-unchanged.js +22 -0
- package/dist/db/repositories/update-credential-if-unchanged.js.map +1 -0
- package/dist/db/run-migrations.d.ts +4 -0
- package/dist/db/run-migrations.d.ts.map +1 -0
- package/dist/db/run-migrations.js +51 -0
- package/dist/db/run-migrations.js.map +1 -0
- package/dist/db/types.d.ts +5 -2
- package/dist/db/types.d.ts.map +1 -1
- package/dist/db/types.js +1 -1
- package/dist/format-error-message.d.ts +7 -0
- package/dist/format-error-message.d.ts.map +1 -0
- package/dist/format-error-message.js +19 -0
- package/dist/format-error-message.js.map +1 -0
- package/dist/handlers/create-key.d.ts +3 -3
- package/dist/handlers/create-key.d.ts.map +1 -1
- package/dist/handlers/create-key.js +3 -3
- package/dist/handlers/create-key.js.map +1 -1
- package/dist/handlers/delete-credential.d.ts +3 -3
- package/dist/handlers/delete-credential.d.ts.map +1 -1
- package/dist/handlers/delete-credential.js +8 -10
- package/dist/handlers/delete-credential.js.map +1 -1
- package/dist/handlers/delete-key.d.ts +3 -3
- package/dist/handlers/delete-key.d.ts.map +1 -1
- package/dist/handlers/delete-key.js +5 -7
- package/dist/handlers/delete-key.js.map +1 -1
- package/dist/handlers/get-credential.d.ts +2 -2
- package/dist/handlers/get-credential.d.ts.map +1 -1
- package/dist/handlers/get-credential.js +6 -6
- package/dist/handlers/get-credential.js.map +1 -1
- package/dist/handlers/get-key.d.ts +3 -3
- package/dist/handlers/get-key.d.ts.map +1 -1
- package/dist/handlers/get-key.js +4 -5
- package/dist/handlers/get-key.js.map +1 -1
- package/dist/handlers/list-credentials.d.ts +3 -3
- package/dist/handlers/list-credentials.d.ts.map +1 -1
- package/dist/handlers/list-credentials.js +7 -8
- package/dist/handlers/list-credentials.js.map +1 -1
- package/dist/handlers/list-keys.d.ts +2 -2
- package/dist/handlers/list-keys.d.ts.map +1 -1
- package/dist/handlers/list-keys.js +5 -3
- package/dist/handlers/list-keys.js.map +1 -1
- package/dist/handlers/put-credential.d.ts +3 -3
- package/dist/handlers/put-credential.d.ts.map +1 -1
- package/dist/handlers/put-credential.js +8 -9
- package/dist/handlers/put-credential.js.map +1 -1
- package/dist/handlers/refresh-credential-on-read.d.ts +2 -2
- package/dist/handlers/refresh-credential-on-read.d.ts.map +1 -1
- package/dist/handlers/refresh-credential-on-read.js +8 -8
- package/dist/handlers/refresh-credential-on-read.js.map +1 -1
- package/dist/handlers/update-key.d.ts +3 -3
- package/dist/handlers/update-key.d.ts.map +1 -1
- package/dist/handlers/update-key.js +9 -13
- package/dist/handlers/update-key.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/format-key-details.d.ts +17 -0
- package/dist/lib/format-key-details.d.ts.map +1 -0
- package/dist/lib/format-key-details.js +25 -0
- package/dist/lib/format-key-details.js.map +1 -0
- package/dist/middleware/auth.d.ts +2 -2
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +5 -4
- package/dist/middleware/auth.js.map +1 -1
- package/dist/server/routes.d.ts +3 -3
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js.map +1 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +29 -4
- package/dist/server/server.js.map +1 -1
- package/package.json +5 -4
- package/dist/db/client.d.ts +0 -14
- package/dist/db/client.d.ts.map +0 -1
- package/dist/db/client.js +0 -39
- package/dist/db/client.js.map +0 -1
- package/dist/db/migrations.d.ts +0 -14
- package/dist/db/migrations.d.ts.map +0 -1
- package/dist/db/migrations.js +0 -141
- package/dist/db/migrations.js.map +0 -1
package/README.md
CHANGED
|
@@ -5,6 +5,7 @@ Remote credential storage server for a╳kit.
|
|
|
5
5
|
## Prerequisites
|
|
6
6
|
|
|
7
7
|
- Node.js 22.19+
|
|
8
|
+
- PostgreSQL 14+ (local install or via Docker: `docker run -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres:17-alpine`)
|
|
8
9
|
- `pnpm` (for `pnpm dlx axvault`) or `npx` (for `npx -y axvault`)
|
|
9
10
|
- `jq` for scripting against `--json` output
|
|
10
11
|
|
|
@@ -13,14 +14,22 @@ If `axvault` is not installed globally, prefix commands with `npx -y axvault` (o
|
|
|
13
14
|
## Quick start
|
|
14
15
|
|
|
15
16
|
```bash
|
|
17
|
+
# Start PostgreSQL (if not already running)
|
|
18
|
+
docker run -d --name axvault-db -p 5432:5432 \
|
|
19
|
+
-e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=axvault \
|
|
20
|
+
postgres:17-alpine
|
|
21
|
+
|
|
22
|
+
# Generate encryption key
|
|
16
23
|
umask 077
|
|
17
24
|
printf 'AXVAULT_ENCRYPTION_KEY=' > .env
|
|
18
25
|
openssl rand -base64 32 >> .env
|
|
26
|
+
printf '\nAXVAULT_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/axvault\n' >> .env
|
|
19
27
|
chmod 600 .env
|
|
20
28
|
set -a
|
|
21
29
|
. ./.env
|
|
22
30
|
set +a
|
|
23
|
-
|
|
31
|
+
|
|
32
|
+
# Initialize database and start server
|
|
24
33
|
npx -y axvault init
|
|
25
34
|
npx -y axvault serve
|
|
26
35
|
```
|
|
@@ -86,15 +95,15 @@ or list/delete stored credentials. List commands output TSV by default; add
|
|
|
86
95
|
|
|
87
96
|
### Environment Variables
|
|
88
97
|
|
|
89
|
-
| Variable | Description | Default
|
|
90
|
-
| ---------------------------- | -------------------------------------------------------------------- |
|
|
91
|
-
| `AXVAULT_PORT` | Port to listen on | `3847`
|
|
92
|
-
| `AXVAULT_HOST` | Host to bind to | `127.0.0.1`
|
|
93
|
-
| `
|
|
94
|
-
| `AXVAULT_ENCRYPTION_KEY` | Encryption key (min 32 chars, required) | —
|
|
95
|
-
| `AXVAULT_REFRESH_THRESHOLD` | Refresh credentials expiring within this many seconds (0 to disable) | `3600`
|
|
96
|
-
| `AXVAULT_REFRESH_TIMEOUT_MS` | Timeout for refresh operations in milliseconds | `30000`
|
|
97
|
-
| `AXVAULT_LOG_LEVEL` | Log level (trace, debug, info, warn, error, fatal, silent) | `info`
|
|
98
|
+
| Variable | Description | Default |
|
|
99
|
+
| ---------------------------- | -------------------------------------------------------------------- | ------------------------------------- |
|
|
100
|
+
| `AXVAULT_PORT` | Port to listen on | `3847` |
|
|
101
|
+
| `AXVAULT_HOST` | Host to bind to | `127.0.0.1` |
|
|
102
|
+
| `AXVAULT_DATABASE_URL` | PostgreSQL connection URL | `postgresql://localhost:5432/axvault` |
|
|
103
|
+
| `AXVAULT_ENCRYPTION_KEY` | Encryption key (min 32 chars, required) | — |
|
|
104
|
+
| `AXVAULT_REFRESH_THRESHOLD` | Refresh credentials expiring within this many seconds (0 to disable) | `3600` |
|
|
105
|
+
| `AXVAULT_REFRESH_TIMEOUT_MS` | Timeout for refresh operations in milliseconds | `30000` |
|
|
106
|
+
| `AXVAULT_LOG_LEVEL` | Log level (trace, debug, info, warn, error, fatal, silent) | `info` |
|
|
98
107
|
|
|
99
108
|
### CLI Flags
|
|
100
109
|
|
|
@@ -104,7 +113,7 @@ The `serve` command accepts flags that override environment variables:
|
|
|
104
113
|
npx -y axvault serve \
|
|
105
114
|
--port 8080 \
|
|
106
115
|
--host 0.0.0.0 \
|
|
107
|
-
--
|
|
116
|
+
--database-url postgresql://localhost:5432/axvault \
|
|
108
117
|
--refresh-threshold 7200 \
|
|
109
118
|
--refresh-timeout 60000 \
|
|
110
119
|
--log-level debug
|
|
@@ -203,13 +212,13 @@ The image uses an external UID pattern—no user is baked into the image. **Alwa
|
|
|
203
212
|
> **Security note:** Without `-u`/`--user`, the container runs as root. For Kubernetes, set `runAsUser: 1000` and `runAsNonRoot: true` in your SecurityContext.
|
|
204
213
|
|
|
205
214
|
```bash
|
|
206
|
-
# Docker
|
|
215
|
+
# Docker (requires a PostgreSQL instance accessible from the container)
|
|
207
216
|
docker run -d \
|
|
208
217
|
--name axvault \
|
|
209
218
|
-p 3847:3847 \
|
|
210
219
|
-u 1000:1000 \
|
|
211
220
|
-e AXVAULT_ENCRYPTION_KEY="your-secret-key-minimum-32-chars!" \
|
|
212
|
-
-
|
|
221
|
+
-e AXVAULT_DATABASE_URL="postgresql://user:pass@db-host:5432/axvault" \
|
|
213
222
|
registry.j4k.dev/axvault:latest
|
|
214
223
|
|
|
215
224
|
# Podman
|
|
@@ -218,29 +227,23 @@ podman run -d \
|
|
|
218
227
|
-p 3847:3847 \
|
|
219
228
|
--user 1000:1000 \
|
|
220
229
|
-e AXVAULT_ENCRYPTION_KEY="your-secret-key-minimum-32-chars!" \
|
|
221
|
-
-
|
|
230
|
+
-e AXVAULT_DATABASE_URL="postgresql://user:pass@db-host:5432/axvault" \
|
|
222
231
|
registry.j4k.dev/axvault:latest
|
|
223
232
|
```
|
|
224
233
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
The data volume must be owned by the UID/GID the container runs as:
|
|
228
|
-
|
|
229
|
-
```bash
|
|
230
|
-
# Create directory and set ownership before first run
|
|
231
|
-
sudo mkdir -p /srv/axvault/data
|
|
232
|
-
sudo chown 1000:1000 /srv/axvault/data
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
For rootless Podman, use your user's UID or let Podman handle mapping automatically.
|
|
234
|
+
**Note:** `AXVAULT_DATABASE_URL` must point to an accessible PostgreSQL instance. The Containerfile default (`postgresql://localhost:5432/axvault`) refers to the container itself, so standalone `docker run` users must provide this variable. For a batteries-included setup, use `docker-compose.yml` which includes a PostgreSQL service.
|
|
236
235
|
|
|
237
236
|
#### Quadlet (systemd)
|
|
238
237
|
|
|
238
|
+
This example references `axvault-db.service`, which is a PostgreSQL container you must provide separately as a companion Quadlet (`axvault-db.container`). Alternatively, point `AXVAULT_DATABASE_URL` at an existing PostgreSQL instance and remove the `Requires`/`After` lines.
|
|
239
|
+
|
|
239
240
|
Create `/etc/containers/systemd/axvault.container`:
|
|
240
241
|
|
|
241
242
|
```ini
|
|
242
243
|
[Unit]
|
|
243
244
|
Description=axvault credential server
|
|
245
|
+
Requires=axvault-db.service
|
|
246
|
+
After=axvault-db.service
|
|
244
247
|
|
|
245
248
|
[Container]
|
|
246
249
|
Image=registry.j4k.dev/axvault:latest
|
|
@@ -248,7 +251,7 @@ PublishPort=3847:3847
|
|
|
248
251
|
User=1000
|
|
249
252
|
Group=1000
|
|
250
253
|
Environment=AXVAULT_ENCRYPTION_KEY=your-secret-key-minimum-32-chars!
|
|
251
|
-
|
|
254
|
+
Environment=AXVAULT_DATABASE_URL=postgresql://axvault:axvault@axvault-db:5432/axvault
|
|
252
255
|
|
|
253
256
|
[Service]
|
|
254
257
|
Restart=always
|
package/dist/cli.js
CHANGED
|
@@ -57,7 +57,7 @@ Examples:
|
|
|
57
57
|
program
|
|
58
58
|
.command("init")
|
|
59
59
|
.description("Initialize database and configuration")
|
|
60
|
-
.option("--
|
|
60
|
+
.option("--database-url <url>", "PostgreSQL connection URL")
|
|
61
61
|
.option("-v, --verbose", "Enable verbose output")
|
|
62
62
|
.action(handleInit);
|
|
63
63
|
program
|
|
@@ -65,7 +65,7 @@ program
|
|
|
65
65
|
.description("Start the vault server")
|
|
66
66
|
.option("-p, --port <port>", "Port to listen on")
|
|
67
67
|
.option("-H, --host <host>", "Host to bind to")
|
|
68
|
-
.option("--
|
|
68
|
+
.option("--database-url <url>", "PostgreSQL connection URL")
|
|
69
69
|
.option("--refresh-threshold <seconds>", "Refresh credentials expiring within this many seconds (0 to disable)")
|
|
70
70
|
.option("--refresh-timeout <ms>", "Timeout for refresh operations in milliseconds")
|
|
71
71
|
.option("--log-level <level>", "Log level (trace, debug, info, warn, error, fatal, silent)")
|
|
@@ -84,13 +84,13 @@ keyCommand
|
|
|
84
84
|
.option("-w, --write <access>", "Comma-separated write access list (e.g., 'claude.ci' or '*')")
|
|
85
85
|
.option("-g, --grant <access>", "Comma-separated grant access list (can delegate these to other keys)")
|
|
86
86
|
.option("--json", "Output as JSON")
|
|
87
|
-
.option("--
|
|
87
|
+
.option("--database-url <url>", "PostgreSQL connection URL")
|
|
88
88
|
.action(handleKeyCreate);
|
|
89
89
|
keyCommand
|
|
90
90
|
.command("list")
|
|
91
91
|
.description("List all API keys")
|
|
92
92
|
.option("--json", "Output as JSON")
|
|
93
|
-
.option("--
|
|
93
|
+
.option("--database-url <url>", "PostgreSQL connection URL")
|
|
94
94
|
.action(handleKeyList);
|
|
95
95
|
keyCommand
|
|
96
96
|
.command("revoke")
|
|
@@ -99,7 +99,7 @@ keyCommand
|
|
|
99
99
|
.option("-f, --force", "Confirm destructive action")
|
|
100
100
|
.option("-y, --yes", "Alias for --force")
|
|
101
101
|
.option("-v, --verbose", "Enable verbose output")
|
|
102
|
-
.option("--
|
|
102
|
+
.option("--database-url <url>", "PostgreSQL connection URL")
|
|
103
103
|
.action(handleKeyRevoke);
|
|
104
104
|
keyCommand
|
|
105
105
|
.command("update")
|
|
@@ -113,7 +113,7 @@ keyCommand
|
|
|
113
113
|
.option("--remove-grant <access>", "Remove grant access entries")
|
|
114
114
|
.option("--json", "Output as JSON")
|
|
115
115
|
.option("-v, --verbose", "Enable verbose output")
|
|
116
|
-
.option("--
|
|
116
|
+
.option("--database-url <url>", "PostgreSQL connection URL")
|
|
117
117
|
.action(handleKeyUpdate);
|
|
118
118
|
// Credential management commands
|
|
119
119
|
const credentialCommand = program
|
|
@@ -124,7 +124,7 @@ credentialCommand
|
|
|
124
124
|
.command("list")
|
|
125
125
|
.description("List all stored credentials")
|
|
126
126
|
.option("--json", "Output as JSON")
|
|
127
|
-
.option("--
|
|
127
|
+
.option("--database-url <url>", "PostgreSQL connection URL")
|
|
128
128
|
.action(handleCredentialList);
|
|
129
129
|
credentialCommand
|
|
130
130
|
.command("delete")
|
|
@@ -133,7 +133,7 @@ credentialCommand
|
|
|
133
133
|
.option("-f, --force", "Confirm destructive action")
|
|
134
134
|
.option("-y, --yes", "Alias for --force")
|
|
135
135
|
.option("-v, --verbose", "Enable verbose output")
|
|
136
|
-
.option("--
|
|
136
|
+
.option("--database-url <url>", "PostgreSQL connection URL")
|
|
137
137
|
.action(handleCredentialDelete);
|
|
138
138
|
await program.parseAsync(process.argv);
|
|
139
139
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;KACtB,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC;KACpC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC;KAC7C,kBAAkB,CAAC,yCAAyC,CAAC;KAC7D,wBAAwB,EAAE;KAC1B,WAAW,CAAC,KAAK,CAAC;KAClB,WAAW,CACV,OAAO,EACP,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAoCkC,CAC7C,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
* Credential management command handlers.
|
|
3
3
|
*/
|
|
4
4
|
interface CredentialListOptions {
|
|
5
|
-
|
|
5
|
+
databaseUrl?: string;
|
|
6
6
|
json?: boolean;
|
|
7
7
|
}
|
|
8
8
|
interface CredentialDeleteOptions {
|
|
9
|
-
|
|
9
|
+
databaseUrl?: string;
|
|
10
10
|
force?: boolean;
|
|
11
11
|
yes?: boolean;
|
|
12
12
|
verbose?: boolean;
|
|
13
13
|
}
|
|
14
|
-
export declare function handleCredentialList(options: CredentialListOptions): void
|
|
15
|
-
export declare function handleCredentialDelete(credentialName: string, options: CredentialDeleteOptions): void
|
|
14
|
+
export declare function handleCredentialList(options: CredentialListOptions): Promise<void>;
|
|
15
|
+
export declare function handleCredentialDelete(credentialName: string, options: CredentialDeleteOptions): Promise<void>;
|
|
16
16
|
export {};
|
|
17
17
|
//# sourceMappingURL=credential.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwBH,UAAU,qBAAqB;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAwDD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED,wBAAsB,sBAAsB,CAC1C,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAoDf"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Credential management command handlers.
|
|
3
3
|
*/
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
4
5
|
import { getServerConfig } from "../config.js";
|
|
5
|
-
import {
|
|
6
|
-
import { runMigrations } from "../db/migrations.js";
|
|
6
|
+
import { closePool, createPool } from "../db/create-pool.js";
|
|
7
|
+
import { runMigrations } from "../db/run-migrations.js";
|
|
7
8
|
import { deleteCredential, listCredentials, } from "../db/repositories/credentials.js";
|
|
9
|
+
import { formatErrorMessage } from "../format-error-message.js";
|
|
8
10
|
import { containsControlChars, formatRelativeTime, getErrorMessage, sanitizeForTsv, } from "../lib/format.js";
|
|
9
11
|
import { CREDENTIAL_NAME_FORMAT_DESCRIPTION, isValidCredentialName, } from "../lib/credential-name.js";
|
|
10
12
|
/** Print credentials as TSV table */
|
|
@@ -27,7 +29,6 @@ function printCredentialTable(credentials) {
|
|
|
27
29
|
* (e.g., "\nwork" would otherwise become "work" after trim).
|
|
28
30
|
*/
|
|
29
31
|
function parseCredentialName(name) {
|
|
30
|
-
// Reject inputs containing control characters BEFORE trimming
|
|
31
32
|
if (containsControlChars(name)) {
|
|
32
33
|
return {
|
|
33
34
|
ok: false,
|
|
@@ -49,12 +50,21 @@ function parseCredentialName(name) {
|
|
|
49
50
|
}
|
|
50
51
|
return { ok: true, name: trimmed };
|
|
51
52
|
}
|
|
52
|
-
|
|
53
|
+
const migrationsDirectory = fileURLToPath(new URL("../db/migrations", import.meta.url));
|
|
54
|
+
export async function handleCredentialList(options) {
|
|
55
|
+
let config;
|
|
53
56
|
try {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
config = getServerConfig(options);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error(`Error: ${formatErrorMessage(error)}`);
|
|
61
|
+
process.exitCode = 1;
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const pool = createPool(config.databaseUrl);
|
|
65
|
+
try {
|
|
66
|
+
await runMigrations(pool, migrationsDirectory);
|
|
67
|
+
const credentials = await listCredentials(pool);
|
|
58
68
|
if (options.json) {
|
|
59
69
|
const output = credentials.map((cred) => ({
|
|
60
70
|
name: cred.name,
|
|
@@ -82,10 +92,10 @@ export function handleCredentialList(options) {
|
|
|
82
92
|
process.exitCode = 1;
|
|
83
93
|
}
|
|
84
94
|
finally {
|
|
85
|
-
|
|
95
|
+
await closePool(pool);
|
|
86
96
|
}
|
|
87
97
|
}
|
|
88
|
-
export function handleCredentialDelete(credentialName, options) {
|
|
98
|
+
export async function handleCredentialDelete(credentialName, options) {
|
|
89
99
|
// Validate credential name first (before config parsing)
|
|
90
100
|
const parsed = parseCredentialName(credentialName);
|
|
91
101
|
if (!parsed.ok) {
|
|
@@ -100,11 +110,19 @@ export function handleCredentialDelete(credentialName, options) {
|
|
|
100
110
|
return;
|
|
101
111
|
}
|
|
102
112
|
const { name } = parsed;
|
|
113
|
+
let config;
|
|
114
|
+
try {
|
|
115
|
+
config = getServerConfig(options);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.error(`Error: ${formatErrorMessage(error)}`);
|
|
119
|
+
process.exitCode = 1;
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const pool = createPool(config.databaseUrl);
|
|
103
123
|
try {
|
|
104
|
-
|
|
105
|
-
const
|
|
106
|
-
runMigrations(database);
|
|
107
|
-
const deleted = deleteCredential(database, name);
|
|
124
|
+
await runMigrations(pool, migrationsDirectory);
|
|
125
|
+
const deleted = await deleteCredential(pool, name);
|
|
108
126
|
if (deleted) {
|
|
109
127
|
if (options.verbose) {
|
|
110
128
|
console.error(`Deleted credential: ${sanitizeForTsv(name)}`);
|
|
@@ -120,7 +138,7 @@ export function handleCredentialDelete(credentialName, options) {
|
|
|
120
138
|
process.exitCode = 1;
|
|
121
139
|
}
|
|
122
140
|
finally {
|
|
123
|
-
|
|
141
|
+
await closePool(pool);
|
|
124
142
|
}
|
|
125
143
|
}
|
|
126
144
|
//# sourceMappingURL=credential.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential.js","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"credential.js","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Initialize database command handler.
|
|
3
3
|
*/
|
|
4
4
|
interface InitOptions {
|
|
5
|
-
|
|
5
|
+
databaseUrl?: string;
|
|
6
6
|
verbose?: boolean;
|
|
7
7
|
}
|
|
8
|
-
export declare function handleInit(options: InitOptions): void
|
|
8
|
+
export declare function handleInit(options: InitOptions): Promise<void>;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,wBAAsB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BpE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,56 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Initialize database command handler.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
6
5
|
import { getServerConfig } from "../config.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
import { closePool, createPool } from "../db/create-pool.js";
|
|
7
|
+
import { runMigrations } from "../db/run-migrations.js";
|
|
8
|
+
import { formatErrorMessage } from "../format-error-message.js";
|
|
9
|
+
const migrationsDirectory = fileURLToPath(new URL("../db/migrations", import.meta.url));
|
|
10
|
+
export async function handleInit(options) {
|
|
11
11
|
const verbose = options.verbose === true;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
try {
|
|
16
|
-
mkdirSync(dataDirectory, { recursive: true });
|
|
17
|
-
if (verbose)
|
|
18
|
-
console.error(`Created data directory: ${dataDirectory}`);
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
22
|
-
console.error(`Failed to create data directory '${dataDirectory}': ${message}`);
|
|
23
|
-
process.exitCode = 1;
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
12
|
+
let config;
|
|
13
|
+
try {
|
|
14
|
+
config = getServerConfig({ databaseUrl: options.databaseUrl });
|
|
26
15
|
}
|
|
27
|
-
|
|
16
|
+
catch (error) {
|
|
17
|
+
const message = formatErrorMessage(error);
|
|
18
|
+
console.error(`Error: ${message}`);
|
|
19
|
+
process.exitCode = 1;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const pool = createPool(config.databaseUrl);
|
|
28
23
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
console.error(`Database initialized at: ${config.databasePath}`);
|
|
37
|
-
console.error(`Schema version: ${versionAfter}`);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
if (versionBefore === versionAfter) {
|
|
41
|
-
console.error(`Database already at version ${versionAfter} (current: ${CURRENT_VERSION})`);
|
|
42
|
-
return;
|
|
24
|
+
await runMigrations(pool, migrationsDirectory);
|
|
25
|
+
if (verbose) {
|
|
26
|
+
const sanitizedUrl = new URL(config.databaseUrl);
|
|
27
|
+
if (sanitizedUrl.password) {
|
|
28
|
+
sanitizedUrl.password = "***";
|
|
29
|
+
}
|
|
30
|
+
console.error(`Database initialized at: ${sanitizedUrl.toString()}`);
|
|
43
31
|
}
|
|
44
|
-
console.error(`Database migrated from v${versionBefore} to v${versionAfter}`);
|
|
45
32
|
}
|
|
46
33
|
catch (error) {
|
|
47
|
-
const message =
|
|
34
|
+
const message = formatErrorMessage(error);
|
|
48
35
|
console.error(`Failed to initialize database: ${message}`);
|
|
49
|
-
console.error("If this is a schema version mismatch, delete the database file and re-run `axvault init`.");
|
|
50
36
|
process.exitCode = 1;
|
|
51
37
|
}
|
|
52
38
|
finally {
|
|
53
|
-
|
|
39
|
+
await closePool(pool);
|
|
54
40
|
}
|
|
55
41
|
}
|
|
56
42
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAOhE,MAAM,mBAAmB,GAAG,aAAa,CACvC,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAC7C,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAoB;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;IAEzC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,eAAe,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QAE/C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAC1B,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC;YAChC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,4BAA4B,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* API key create command handler.
|
|
3
3
|
*/
|
|
4
4
|
interface KeyCreateOptions {
|
|
5
|
-
|
|
5
|
+
databaseUrl?: string;
|
|
6
6
|
name: string;
|
|
7
7
|
read?: string;
|
|
8
8
|
write?: string;
|
|
9
9
|
grant?: string;
|
|
10
10
|
json?: boolean;
|
|
11
11
|
}
|
|
12
|
-
export declare function handleKeyCreate(options: KeyCreateOptions): void
|
|
12
|
+
export declare function handleKeyCreate(options: KeyCreateOptions): Promise<void>;
|
|
13
13
|
export {};
|
|
14
14
|
//# sourceMappingURL=key-create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-create.d.ts","sourceRoot":"","sources":["../../src/commands/key-create.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"key-create.d.ts","sourceRoot":"","sources":["../../src/commands/key-create.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,UAAU,gBAAgB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAMD,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAoHf"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* API key create command handler.
|
|
3
3
|
*/
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
4
5
|
import { getServerConfig } from "../config.js";
|
|
5
|
-
import {
|
|
6
|
-
import { runMigrations } from "../db/migrations.js";
|
|
6
|
+
import { closePool, createPool } from "../db/create-pool.js";
|
|
7
|
+
import { runMigrations } from "../db/run-migrations.js";
|
|
7
8
|
import { createApiKey } from "../db/repositories/api-keys.js";
|
|
9
|
+
import { formatErrorMessage } from "../format-error-message.js";
|
|
8
10
|
import { containsControlChars, formatAccessList, getAccessListErrorMessage, getErrorMessage, normalizeAccessList, parseAccessList, sanitizeForTsv, } from "../lib/format.js";
|
|
9
|
-
|
|
11
|
+
const migrationsDirectory = fileURLToPath(new URL("../db/migrations", import.meta.url));
|
|
12
|
+
export async function handleKeyCreate(options) {
|
|
10
13
|
// Validate key name (reject control characters)
|
|
11
14
|
if (containsControlChars(options.name)) {
|
|
12
15
|
console.error("Error: Key name contains control characters.");
|
|
@@ -54,11 +57,19 @@ export function handleKeyCreate(options) {
|
|
|
54
57
|
process.exitCode = 2;
|
|
55
58
|
return;
|
|
56
59
|
}
|
|
60
|
+
let config;
|
|
57
61
|
try {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
config = getServerConfig(options);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error(`Error: ${formatErrorMessage(error)}`);
|
|
66
|
+
process.exitCode = 1;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const pool = createPool(config.databaseUrl);
|
|
70
|
+
try {
|
|
71
|
+
await runMigrations(pool, migrationsDirectory);
|
|
72
|
+
const apiKey = await createApiKey(pool, {
|
|
62
73
|
name: options.name,
|
|
63
74
|
readAccess,
|
|
64
75
|
writeAccess,
|
|
@@ -94,7 +105,7 @@ export function handleKeyCreate(options) {
|
|
|
94
105
|
process.exitCode = 1;
|
|
95
106
|
}
|
|
96
107
|
finally {
|
|
97
|
-
|
|
108
|
+
await closePool(pool);
|
|
98
109
|
}
|
|
99
110
|
}
|
|
100
111
|
//# sourceMappingURL=key-create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-create.js","sourceRoot":"","sources":["../../src/commands/key-create.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"key-create.js","sourceRoot":"","sources":["../../src/commands/key-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* API key list command handler.
|
|
3
3
|
*/
|
|
4
4
|
interface KeyListOptions {
|
|
5
|
-
|
|
5
|
+
databaseUrl?: string;
|
|
6
6
|
json?: boolean;
|
|
7
7
|
}
|
|
8
|
-
export declare function handleKeyList(options: KeyListOptions): void
|
|
8
|
+
export declare function handleKeyList(options: KeyListOptions): Promise<void>;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=key-list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-list.d.ts","sourceRoot":"","sources":["../../src/commands/key-list.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"key-list.d.ts","sourceRoot":"","sources":["../../src/commands/key-list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,UAAU,cAAc;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAMD,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C1E"}
|