@simonsbs/keylore 1.0.0-rc4
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/.env.example +64 -0
- package/LICENSE +176 -0
- package/NOTICE +5 -0
- package/README.md +424 -0
- package/bin/keylore-http.js +3 -0
- package/bin/keylore-stdio.js +3 -0
- package/data/auth-clients.json +54 -0
- package/data/catalog.json +53 -0
- package/data/policies.json +25 -0
- package/dist/adapters/adapter-registry.js +143 -0
- package/dist/adapters/aws-secrets-manager-adapter.js +99 -0
- package/dist/adapters/command-runner.js +17 -0
- package/dist/adapters/env-secret-adapter.js +42 -0
- package/dist/adapters/gcp-secret-manager-adapter.js +129 -0
- package/dist/adapters/local-secret-adapter.js +54 -0
- package/dist/adapters/onepassword-secret-adapter.js +83 -0
- package/dist/adapters/reference-utils.js +44 -0
- package/dist/adapters/types.js +1 -0
- package/dist/adapters/vault-secret-adapter.js +103 -0
- package/dist/app.js +132 -0
- package/dist/cli/args.js +51 -0
- package/dist/cli/run.js +483 -0
- package/dist/cli.js +18 -0
- package/dist/config.js +295 -0
- package/dist/domain/types.js +967 -0
- package/dist/http/admin-ui.js +3010 -0
- package/dist/http/server.js +1210 -0
- package/dist/index.js +40 -0
- package/dist/mcp/create-server.js +388 -0
- package/dist/mcp/stdio.js +7 -0
- package/dist/repositories/credential-repository.js +109 -0
- package/dist/repositories/interfaces.js +1 -0
- package/dist/repositories/json-file.js +20 -0
- package/dist/repositories/pg-access-token-repository.js +118 -0
- package/dist/repositories/pg-approval-repository.js +157 -0
- package/dist/repositories/pg-audit-log.js +62 -0
- package/dist/repositories/pg-auth-client-repository.js +98 -0
- package/dist/repositories/pg-authorization-code-repository.js +95 -0
- package/dist/repositories/pg-break-glass-repository.js +174 -0
- package/dist/repositories/pg-credential-repository.js +163 -0
- package/dist/repositories/pg-oauth-client-assertion-repository.js +25 -0
- package/dist/repositories/pg-policy-repository.js +62 -0
- package/dist/repositories/pg-refresh-token-repository.js +125 -0
- package/dist/repositories/pg-rotation-run-repository.js +127 -0
- package/dist/repositories/pg-tenant-repository.js +56 -0
- package/dist/repositories/policy-repository.js +24 -0
- package/dist/runtime/sandbox-runner.js +114 -0
- package/dist/services/access-fingerprint.js +13 -0
- package/dist/services/approval-service.js +148 -0
- package/dist/services/audit-log.js +38 -0
- package/dist/services/auth-context.js +43 -0
- package/dist/services/auth-secrets.js +14 -0
- package/dist/services/auth-service.js +784 -0
- package/dist/services/backup-service.js +610 -0
- package/dist/services/break-glass-service.js +207 -0
- package/dist/services/broker-service.js +557 -0
- package/dist/services/core-mode-service.js +154 -0
- package/dist/services/egress-policy.js +119 -0
- package/dist/services/local-secret-store.js +119 -0
- package/dist/services/maintenance-service.js +99 -0
- package/dist/services/notification-service.js +83 -0
- package/dist/services/policy-engine.js +85 -0
- package/dist/services/rate-limit-service.js +80 -0
- package/dist/services/rotation-service.js +271 -0
- package/dist/services/telemetry.js +149 -0
- package/dist/services/tenant-service.js +127 -0
- package/dist/services/trace-export-service.js +126 -0
- package/dist/services/trace-service.js +87 -0
- package/dist/storage/bootstrap.js +68 -0
- package/dist/storage/database.js +39 -0
- package/dist/storage/in-memory-database.js +40 -0
- package/dist/storage/migrations.js +27 -0
- package/migrations/001_init.sql +49 -0
- package/migrations/002_phase2_auth.sql +53 -0
- package/migrations/003_v05_operations.sql +9 -0
- package/migrations/004_v07_security.sql +28 -0
- package/migrations/005_v08_reviews.sql +11 -0
- package/migrations/006_v09_auth_trace_rotation.sql +51 -0
- package/migrations/007_v010_multi_tenant.sql +32 -0
- package/migrations/008_v011_auth_tenant_ops.sql +95 -0
- package/package.json +78 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS tenants (
|
|
2
|
+
tenant_id TEXT PRIMARY KEY,
|
|
3
|
+
display_name TEXT NOT NULL,
|
|
4
|
+
description TEXT NULL,
|
|
5
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
6
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
7
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
INSERT INTO tenants (tenant_id, display_name, description, status)
|
|
11
|
+
VALUES ('default', 'Default Tenant', 'Bootstrap default tenant', 'active')
|
|
12
|
+
ON CONFLICT (tenant_id) DO NOTHING;
|
|
13
|
+
|
|
14
|
+
INSERT INTO tenants (tenant_id, display_name, description, status)
|
|
15
|
+
SELECT tenant_id, tenant_id, NULL, 'active'
|
|
16
|
+
FROM (
|
|
17
|
+
SELECT tenant_id FROM credentials
|
|
18
|
+
UNION
|
|
19
|
+
SELECT tenant_id FROM policy_rules
|
|
20
|
+
UNION
|
|
21
|
+
SELECT tenant_id FROM audit_events
|
|
22
|
+
UNION
|
|
23
|
+
SELECT tenant_id FROM oauth_clients
|
|
24
|
+
UNION
|
|
25
|
+
SELECT tenant_id FROM access_tokens
|
|
26
|
+
UNION
|
|
27
|
+
SELECT tenant_id FROM approval_requests
|
|
28
|
+
UNION
|
|
29
|
+
SELECT tenant_id FROM break_glass_requests
|
|
30
|
+
UNION
|
|
31
|
+
SELECT tenant_id FROM rotation_runs
|
|
32
|
+
) tenant_ids
|
|
33
|
+
WHERE tenant_id IS NOT NULL
|
|
34
|
+
ON CONFLICT (tenant_id) DO NOTHING;
|
|
35
|
+
|
|
36
|
+
ALTER TABLE oauth_clients
|
|
37
|
+
ALTER COLUMN secret_hash DROP NOT NULL;
|
|
38
|
+
|
|
39
|
+
ALTER TABLE oauth_clients
|
|
40
|
+
ALTER COLUMN secret_salt DROP NOT NULL;
|
|
41
|
+
|
|
42
|
+
ALTER TABLE oauth_clients
|
|
43
|
+
ADD COLUMN IF NOT EXISTS grant_types TEXT[] NOT NULL DEFAULT ARRAY['client_credentials']::TEXT[];
|
|
44
|
+
|
|
45
|
+
ALTER TABLE oauth_clients
|
|
46
|
+
ADD COLUMN IF NOT EXISTS redirect_uris TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[];
|
|
47
|
+
|
|
48
|
+
CREATE TABLE IF NOT EXISTS oauth_authorization_codes (
|
|
49
|
+
code_id UUID PRIMARY KEY,
|
|
50
|
+
code_hash TEXT NOT NULL UNIQUE,
|
|
51
|
+
client_id TEXT NOT NULL REFERENCES oauth_clients(client_id) ON DELETE CASCADE,
|
|
52
|
+
tenant_id TEXT NOT NULL,
|
|
53
|
+
subject TEXT NOT NULL,
|
|
54
|
+
scopes TEXT[] NOT NULL,
|
|
55
|
+
roles TEXT[] NOT NULL,
|
|
56
|
+
resource TEXT NULL,
|
|
57
|
+
redirect_uri TEXT NOT NULL,
|
|
58
|
+
code_challenge TEXT NOT NULL,
|
|
59
|
+
code_challenge_method TEXT NOT NULL,
|
|
60
|
+
expires_at TIMESTAMPTZ NOT NULL,
|
|
61
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
62
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
63
|
+
consumed_at TIMESTAMPTZ NULL
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_oauth_authorization_codes_client_id
|
|
67
|
+
ON oauth_authorization_codes(client_id, status);
|
|
68
|
+
|
|
69
|
+
CREATE INDEX IF NOT EXISTS idx_oauth_authorization_codes_expires_at
|
|
70
|
+
ON oauth_authorization_codes(expires_at);
|
|
71
|
+
|
|
72
|
+
CREATE TABLE IF NOT EXISTS refresh_tokens (
|
|
73
|
+
refresh_token_id UUID PRIMARY KEY,
|
|
74
|
+
token_hash TEXT NOT NULL UNIQUE,
|
|
75
|
+
client_id TEXT NOT NULL REFERENCES oauth_clients(client_id) ON DELETE CASCADE,
|
|
76
|
+
tenant_id TEXT NOT NULL,
|
|
77
|
+
subject TEXT NOT NULL,
|
|
78
|
+
scopes TEXT[] NOT NULL,
|
|
79
|
+
roles TEXT[] NOT NULL,
|
|
80
|
+
resource TEXT NULL,
|
|
81
|
+
expires_at TIMESTAMPTZ NOT NULL,
|
|
82
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
83
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
84
|
+
last_used_at TIMESTAMPTZ NULL,
|
|
85
|
+
replaced_by_token_id UUID NULL
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_client_id
|
|
89
|
+
ON refresh_tokens(client_id, status);
|
|
90
|
+
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_tenant_id
|
|
92
|
+
ON refresh_tokens(tenant_id, status);
|
|
93
|
+
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_expires_at
|
|
95
|
+
ON refresh_tokens(expires_at);
|
package/package.json
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@simonsbs/keylore",
|
|
3
|
+
"version": "1.0.0-rc4",
|
|
4
|
+
"description": "MCP credential broker and searchable credential catalogue for LLM coding tools.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"bin",
|
|
9
|
+
"dist",
|
|
10
|
+
"data/auth-clients.json",
|
|
11
|
+
"data/catalog.json",
|
|
12
|
+
"data/policies.json",
|
|
13
|
+
"migrations",
|
|
14
|
+
".env.example",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE",
|
|
17
|
+
"NOTICE"
|
|
18
|
+
],
|
|
19
|
+
"bin": {
|
|
20
|
+
"keylore": "dist/cli.js",
|
|
21
|
+
"keylore-http": "bin/keylore-http.js",
|
|
22
|
+
"keylore-stdio": "bin/keylore-stdio.js"
|
|
23
|
+
},
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/Simonsbs/keylore.git"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"mcp",
|
|
30
|
+
"model-context-protocol",
|
|
31
|
+
"credentials",
|
|
32
|
+
"secrets",
|
|
33
|
+
"broker",
|
|
34
|
+
"catalogue"
|
|
35
|
+
],
|
|
36
|
+
"author": "Simon",
|
|
37
|
+
"license": "Apache-2.0",
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=20"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
43
|
+
"prepack": "npm run build",
|
|
44
|
+
"typecheck": "tsc --noEmit",
|
|
45
|
+
"test:contracts": "node --test --import tsx src/test/contract.test.ts",
|
|
46
|
+
"test:conformance": "node --test --import tsx src/test/conformance.test.ts",
|
|
47
|
+
"test:hardening": "node --test --import tsx src/test/hardening.test.ts",
|
|
48
|
+
"db:up": "docker compose up -d postgres",
|
|
49
|
+
"db:down": "docker compose down",
|
|
50
|
+
"dev:http": "tsx src/index.ts --transport http",
|
|
51
|
+
"quickstart": "bash ./scripts/quickstart.sh",
|
|
52
|
+
"dev:stdio": "tsx src/index.ts --transport stdio",
|
|
53
|
+
"dev:cli": "tsx src/cli.ts",
|
|
54
|
+
"ops:container-smoke": "bash ./scripts/container-smoke.sh",
|
|
55
|
+
"ops:fresh-user-env": "sudo bash ./scripts/fresh-user-env.sh",
|
|
56
|
+
"ops:fresh-user-env:cleanup": "sudo bash ./scripts/fresh-user-env-cleanup.sh",
|
|
57
|
+
"ops:helm-validate": "bash ./scripts/helm-validate.sh",
|
|
58
|
+
"ops:release-verify": "bash ./scripts/release-verify.sh",
|
|
59
|
+
"ops:restore-drill": "bash ./scripts/restore-drill.sh",
|
|
60
|
+
"start:http": "node dist/index.js --transport http",
|
|
61
|
+
"start:stdio": "node dist/index.js --transport stdio",
|
|
62
|
+
"start:cli": "node dist/cli.js",
|
|
63
|
+
"test": "node --test --import tsx src/test/**/*.test.ts"
|
|
64
|
+
},
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
67
|
+
"pg": "^8.20.0",
|
|
68
|
+
"pg-mem": "^3.0.14",
|
|
69
|
+
"pino": "^10.3.1",
|
|
70
|
+
"zod": "^4.3.6"
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@types/node": "^25.5.0",
|
|
74
|
+
"@types/pg": "^8.18.0",
|
|
75
|
+
"tsx": "^4.21.0",
|
|
76
|
+
"typescript": "^5.9.3"
|
|
77
|
+
}
|
|
78
|
+
}
|