@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.
Files changed (81) hide show
  1. package/.env.example +64 -0
  2. package/LICENSE +176 -0
  3. package/NOTICE +5 -0
  4. package/README.md +424 -0
  5. package/bin/keylore-http.js +3 -0
  6. package/bin/keylore-stdio.js +3 -0
  7. package/data/auth-clients.json +54 -0
  8. package/data/catalog.json +53 -0
  9. package/data/policies.json +25 -0
  10. package/dist/adapters/adapter-registry.js +143 -0
  11. package/dist/adapters/aws-secrets-manager-adapter.js +99 -0
  12. package/dist/adapters/command-runner.js +17 -0
  13. package/dist/adapters/env-secret-adapter.js +42 -0
  14. package/dist/adapters/gcp-secret-manager-adapter.js +129 -0
  15. package/dist/adapters/local-secret-adapter.js +54 -0
  16. package/dist/adapters/onepassword-secret-adapter.js +83 -0
  17. package/dist/adapters/reference-utils.js +44 -0
  18. package/dist/adapters/types.js +1 -0
  19. package/dist/adapters/vault-secret-adapter.js +103 -0
  20. package/dist/app.js +132 -0
  21. package/dist/cli/args.js +51 -0
  22. package/dist/cli/run.js +483 -0
  23. package/dist/cli.js +18 -0
  24. package/dist/config.js +295 -0
  25. package/dist/domain/types.js +967 -0
  26. package/dist/http/admin-ui.js +3010 -0
  27. package/dist/http/server.js +1210 -0
  28. package/dist/index.js +40 -0
  29. package/dist/mcp/create-server.js +388 -0
  30. package/dist/mcp/stdio.js +7 -0
  31. package/dist/repositories/credential-repository.js +109 -0
  32. package/dist/repositories/interfaces.js +1 -0
  33. package/dist/repositories/json-file.js +20 -0
  34. package/dist/repositories/pg-access-token-repository.js +118 -0
  35. package/dist/repositories/pg-approval-repository.js +157 -0
  36. package/dist/repositories/pg-audit-log.js +62 -0
  37. package/dist/repositories/pg-auth-client-repository.js +98 -0
  38. package/dist/repositories/pg-authorization-code-repository.js +95 -0
  39. package/dist/repositories/pg-break-glass-repository.js +174 -0
  40. package/dist/repositories/pg-credential-repository.js +163 -0
  41. package/dist/repositories/pg-oauth-client-assertion-repository.js +25 -0
  42. package/dist/repositories/pg-policy-repository.js +62 -0
  43. package/dist/repositories/pg-refresh-token-repository.js +125 -0
  44. package/dist/repositories/pg-rotation-run-repository.js +127 -0
  45. package/dist/repositories/pg-tenant-repository.js +56 -0
  46. package/dist/repositories/policy-repository.js +24 -0
  47. package/dist/runtime/sandbox-runner.js +114 -0
  48. package/dist/services/access-fingerprint.js +13 -0
  49. package/dist/services/approval-service.js +148 -0
  50. package/dist/services/audit-log.js +38 -0
  51. package/dist/services/auth-context.js +43 -0
  52. package/dist/services/auth-secrets.js +14 -0
  53. package/dist/services/auth-service.js +784 -0
  54. package/dist/services/backup-service.js +610 -0
  55. package/dist/services/break-glass-service.js +207 -0
  56. package/dist/services/broker-service.js +557 -0
  57. package/dist/services/core-mode-service.js +154 -0
  58. package/dist/services/egress-policy.js +119 -0
  59. package/dist/services/local-secret-store.js +119 -0
  60. package/dist/services/maintenance-service.js +99 -0
  61. package/dist/services/notification-service.js +83 -0
  62. package/dist/services/policy-engine.js +85 -0
  63. package/dist/services/rate-limit-service.js +80 -0
  64. package/dist/services/rotation-service.js +271 -0
  65. package/dist/services/telemetry.js +149 -0
  66. package/dist/services/tenant-service.js +127 -0
  67. package/dist/services/trace-export-service.js +126 -0
  68. package/dist/services/trace-service.js +87 -0
  69. package/dist/storage/bootstrap.js +68 -0
  70. package/dist/storage/database.js +39 -0
  71. package/dist/storage/in-memory-database.js +40 -0
  72. package/dist/storage/migrations.js +27 -0
  73. package/migrations/001_init.sql +49 -0
  74. package/migrations/002_phase2_auth.sql +53 -0
  75. package/migrations/003_v05_operations.sql +9 -0
  76. package/migrations/004_v07_security.sql +28 -0
  77. package/migrations/005_v08_reviews.sql +11 -0
  78. package/migrations/006_v09_auth_trace_rotation.sql +51 -0
  79. package/migrations/007_v010_multi_tenant.sql +32 -0
  80. package/migrations/008_v011_auth_tenant_ops.sql +95 -0
  81. 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
+ }