db-mcp 1.0.1
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/LICENSE +21 -0
- package/README.md +860 -0
- package/dist/adapters/DatabaseAdapter.d.ts +141 -0
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -0
- package/dist/adapters/DatabaseAdapter.js +131 -0
- package/dist/adapters/DatabaseAdapter.js.map +1 -0
- package/dist/adapters/sqlite/SchemaManager.d.ts +58 -0
- package/dist/adapters/sqlite/SchemaManager.d.ts.map +1 -0
- package/dist/adapters/sqlite/SchemaManager.js +187 -0
- package/dist/adapters/sqlite/SchemaManager.js.map +1 -0
- package/dist/adapters/sqlite/SqliteAdapter.d.ts +161 -0
- package/dist/adapters/sqlite/SqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/sqlite/SqliteAdapter.js +741 -0
- package/dist/adapters/sqlite/SqliteAdapter.js.map +1 -0
- package/dist/adapters/sqlite/index.d.ts +9 -0
- package/dist/adapters/sqlite/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/index.js +8 -0
- package/dist/adapters/sqlite/index.js.map +1 -0
- package/dist/adapters/sqlite/json-utils.d.ts +100 -0
- package/dist/adapters/sqlite/json-utils.d.ts.map +1 -0
- package/dist/adapters/sqlite/json-utils.js +274 -0
- package/dist/adapters/sqlite/json-utils.js.map +1 -0
- package/dist/adapters/sqlite/output-schemas.d.ts +1187 -0
- package/dist/adapters/sqlite/output-schemas.d.ts.map +1 -0
- package/dist/adapters/sqlite/output-schemas.js +1337 -0
- package/dist/adapters/sqlite/output-schemas.js.map +1 -0
- package/dist/adapters/sqlite/prompts.d.ts +13 -0
- package/dist/adapters/sqlite/prompts.d.ts.map +1 -0
- package/dist/adapters/sqlite/prompts.js +605 -0
- package/dist/adapters/sqlite/prompts.js.map +1 -0
- package/dist/adapters/sqlite/resources.d.ts +13 -0
- package/dist/adapters/sqlite/resources.d.ts.map +1 -0
- package/dist/adapters/sqlite/resources.js +251 -0
- package/dist/adapters/sqlite/resources.js.map +1 -0
- package/dist/adapters/sqlite/tools/admin.d.ts +14 -0
- package/dist/adapters/sqlite/tools/admin.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/admin.js +788 -0
- package/dist/adapters/sqlite/tools/admin.js.map +1 -0
- package/dist/adapters/sqlite/tools/core.d.ts +25 -0
- package/dist/adapters/sqlite/tools/core.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/core.js +359 -0
- package/dist/adapters/sqlite/tools/core.js.map +1 -0
- package/dist/adapters/sqlite/tools/fts.d.ts +13 -0
- package/dist/adapters/sqlite/tools/fts.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/fts.js +347 -0
- package/dist/adapters/sqlite/tools/fts.js.map +1 -0
- package/dist/adapters/sqlite/tools/geo.d.ts +14 -0
- package/dist/adapters/sqlite/tools/geo.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/geo.js +252 -0
- package/dist/adapters/sqlite/tools/geo.js.map +1 -0
- package/dist/adapters/sqlite/tools/index.d.ts +30 -0
- package/dist/adapters/sqlite/tools/index.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/index.js +61 -0
- package/dist/adapters/sqlite/tools/index.js.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers.d.ts +14 -0
- package/dist/adapters/sqlite/tools/json-helpers.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-helpers.js +477 -0
- package/dist/adapters/sqlite/tools/json-helpers.js.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations.d.ts +14 -0
- package/dist/adapters/sqlite/tools/json-operations.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/json-operations.js +839 -0
- package/dist/adapters/sqlite/tools/json-operations.js.map +1 -0
- package/dist/adapters/sqlite/tools/stats.d.ts +15 -0
- package/dist/adapters/sqlite/tools/stats.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/stats.js +1219 -0
- package/dist/adapters/sqlite/tools/stats.js.map +1 -0
- package/dist/adapters/sqlite/tools/text.d.ts +14 -0
- package/dist/adapters/sqlite/tools/text.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/text.js +1141 -0
- package/dist/adapters/sqlite/tools/text.js.map +1 -0
- package/dist/adapters/sqlite/tools/vector.d.ts +14 -0
- package/dist/adapters/sqlite/tools/vector.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/vector.js +613 -0
- package/dist/adapters/sqlite/tools/vector.js.map +1 -0
- package/dist/adapters/sqlite/tools/virtual.d.ts +13 -0
- package/dist/adapters/sqlite/tools/virtual.d.ts.map +1 -0
- package/dist/adapters/sqlite/tools/virtual.js +930 -0
- package/dist/adapters/sqlite/tools/virtual.js.map +1 -0
- package/dist/adapters/sqlite/types.d.ts +207 -0
- package/dist/adapters/sqlite/types.d.ts.map +1 -0
- package/dist/adapters/sqlite/types.js +186 -0
- package/dist/adapters/sqlite/types.js.map +1 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts +163 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js +748 -0
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js.map +1 -0
- package/dist/adapters/sqlite-native/index.d.ts +11 -0
- package/dist/adapters/sqlite-native/index.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/index.js +11 -0
- package/dist/adapters/sqlite-native/index.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts +19 -0
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/spatialite.js +628 -0
- package/dist/adapters/sqlite-native/tools/spatialite.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/transactions.js +255 -0
- package/dist/adapters/sqlite-native/tools/transactions.js.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts +12 -0
- package/dist/adapters/sqlite-native/tools/window.d.ts.map +1 -0
- package/dist/adapters/sqlite-native/tools/window.js +370 -0
- package/dist/adapters/sqlite-native/tools/window.js.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts +90 -0
- package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -0
- package/dist/auth/AuthorizationServerDiscovery.js +204 -0
- package/dist/auth/AuthorizationServerDiscovery.js.map +1 -0
- package/dist/auth/OAuthResourceServer.d.ts +65 -0
- package/dist/auth/OAuthResourceServer.d.ts.map +1 -0
- package/dist/auth/OAuthResourceServer.js +121 -0
- package/dist/auth/OAuthResourceServer.js.map +1 -0
- package/dist/auth/TokenValidator.d.ts +60 -0
- package/dist/auth/TokenValidator.d.ts.map +1 -0
- package/dist/auth/TokenValidator.js +235 -0
- package/dist/auth/TokenValidator.js.map +1 -0
- package/dist/auth/errors.d.ts +74 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +133 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +15 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +81 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +291 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/scopes.d.ts +136 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +349 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/auth/types.d.ts +257 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +8 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +236 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants/ServerInstructions.d.ts +45 -0
- package/dist/constants/ServerInstructions.d.ts.map +1 -0
- package/dist/constants/ServerInstructions.js +356 -0
- package/dist/constants/ServerInstructions.js.map +1 -0
- package/dist/filtering/ToolConstants.d.ts +34 -0
- package/dist/filtering/ToolConstants.d.ts.map +1 -0
- package/dist/filtering/ToolConstants.js +174 -0
- package/dist/filtering/ToolConstants.js.map +1 -0
- package/dist/filtering/ToolFilter.d.ts +82 -0
- package/dist/filtering/ToolFilter.d.ts.map +1 -0
- package/dist/filtering/ToolFilter.js +296 -0
- package/dist/filtering/ToolFilter.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/server/McpServer.d.ts +61 -0
- package/dist/server/McpServer.d.ts.map +1 -0
- package/dist/server/McpServer.js +270 -0
- package/dist/server/McpServer.js.map +1 -0
- package/dist/transports/http.d.ts +134 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +516 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +5 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +5 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/types/index.d.ts +380 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +68 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/annotations.d.ts +44 -0
- package/dist/utils/annotations.d.ts.map +1 -0
- package/dist/utils/annotations.js +77 -0
- package/dist/utils/annotations.js.map +1 -0
- package/dist/utils/errors.d.ts +155 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +329 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/identifiers.d.ts +121 -0
- package/dist/utils/identifiers.d.ts.map +1 -0
- package/dist/utils/identifiers.js +319 -0
- package/dist/utils/identifiers.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/insightsManager.d.ts +39 -0
- package/dist/utils/insightsManager.d.ts.map +1 -0
- package/dist/utils/insightsManager.js +63 -0
- package/dist/utils/insightsManager.js.map +1 -0
- package/dist/utils/logger.d.ts +189 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +394 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/progress-utils.d.ts +54 -0
- package/dist/utils/progress-utils.d.ts.map +1 -0
- package/dist/utils/progress-utils.js +74 -0
- package/dist/utils/progress-utils.js.map +1 -0
- package/dist/utils/resourceAnnotations.d.ts +36 -0
- package/dist/utils/resourceAnnotations.d.ts.map +1 -0
- package/dist/utils/resourceAnnotations.js +57 -0
- package/dist/utils/resourceAnnotations.js.map +1 -0
- package/dist/utils/where-clause.d.ts +41 -0
- package/dist/utils/where-clause.d.ts.map +1 -0
- package/dist/utils/where-clause.js +116 -0
- package/dist/utils/where-clause.js.map +1 -0
- package/package.json +83 -0
- package/server.json +53 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db-mcp - OAuth Scopes
|
|
3
|
+
*
|
|
4
|
+
* Scope definitions and enforcement utilities for
|
|
5
|
+
* granular access control.
|
|
6
|
+
*
|
|
7
|
+
* Scope Patterns:
|
|
8
|
+
* - read : Read-only access to all databases
|
|
9
|
+
* - write : Read and write access to all databases
|
|
10
|
+
* - admin : Full administrative access
|
|
11
|
+
* - db:{name} : Access to specific database only
|
|
12
|
+
* - table:{db}:{table} : Access to specific table only
|
|
13
|
+
*/
|
|
14
|
+
import { TOOL_GROUPS } from "../filtering/ToolFilter.js";
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Scope Constants
|
|
17
|
+
// =============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Base scopes supported by the server
|
|
20
|
+
*/
|
|
21
|
+
export const BASE_SCOPES = ["read", "write", "admin"];
|
|
22
|
+
/**
|
|
23
|
+
* Scope patterns (regex patterns for validation)
|
|
24
|
+
*/
|
|
25
|
+
export const SCOPE_PATTERNS = {
|
|
26
|
+
/** Read-only access */
|
|
27
|
+
READ: "read",
|
|
28
|
+
/** Read and write access */
|
|
29
|
+
WRITE: "write",
|
|
30
|
+
/** Full admin access */
|
|
31
|
+
ADMIN: "admin",
|
|
32
|
+
/** Database-specific access pattern */
|
|
33
|
+
DATABASE: /^db:([a-zA-Z0-9_-]+)$/,
|
|
34
|
+
/** Table-specific access pattern */
|
|
35
|
+
TABLE: /^table:([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+)$/,
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* All supported scope patterns for metadata
|
|
39
|
+
*/
|
|
40
|
+
export const SUPPORTED_SCOPES = [
|
|
41
|
+
"read",
|
|
42
|
+
"write",
|
|
43
|
+
"admin",
|
|
44
|
+
"db:{database}",
|
|
45
|
+
"table:{database}:{table}",
|
|
46
|
+
];
|
|
47
|
+
// =============================================================================
|
|
48
|
+
// Scope to Tool Group Mapping
|
|
49
|
+
// =============================================================================
|
|
50
|
+
/**
|
|
51
|
+
* Tool groups accessible with read scope (read-only operations)
|
|
52
|
+
*/
|
|
53
|
+
export const READ_SCOPE_GROUPS = [
|
|
54
|
+
"core", // read_query, list_tables, describe_table, etc.
|
|
55
|
+
];
|
|
56
|
+
/**
|
|
57
|
+
* Tool groups accessible with write scope (read + write operations)
|
|
58
|
+
*/
|
|
59
|
+
export const WRITE_SCOPE_GROUPS = [
|
|
60
|
+
...READ_SCOPE_GROUPS,
|
|
61
|
+
"json", // JSON operations
|
|
62
|
+
"text", // Text processing
|
|
63
|
+
"stats", // Statistical analysis
|
|
64
|
+
"vector", // Vector operations
|
|
65
|
+
];
|
|
66
|
+
/**
|
|
67
|
+
* Tool groups accessible with admin scope (all operations)
|
|
68
|
+
*/
|
|
69
|
+
export const ADMIN_SCOPE_GROUPS = [
|
|
70
|
+
...WRITE_SCOPE_GROUPS,
|
|
71
|
+
"admin", // Administration
|
|
72
|
+
];
|
|
73
|
+
/**
|
|
74
|
+
* Read-only tools within the core group
|
|
75
|
+
* (used when scope is 'read' to filter write operations)
|
|
76
|
+
*/
|
|
77
|
+
export const READ_ONLY_TOOLS = new Set([
|
|
78
|
+
"execute_query", // If used with SELECT only
|
|
79
|
+
"read_query",
|
|
80
|
+
"list_tables",
|
|
81
|
+
"describe_table",
|
|
82
|
+
"list_schemas",
|
|
83
|
+
"get_schema",
|
|
84
|
+
"health_check",
|
|
85
|
+
"connection_status",
|
|
86
|
+
"database_stats",
|
|
87
|
+
"active_queries",
|
|
88
|
+
"resource_usage",
|
|
89
|
+
"analyze_query",
|
|
90
|
+
"explain_query",
|
|
91
|
+
"query_plan",
|
|
92
|
+
]);
|
|
93
|
+
/**
|
|
94
|
+
* Write tools that require 'write' scope
|
|
95
|
+
*/
|
|
96
|
+
export const WRITE_TOOLS = new Set([
|
|
97
|
+
"write_query",
|
|
98
|
+
"create_table",
|
|
99
|
+
"drop_table",
|
|
100
|
+
"json_insert",
|
|
101
|
+
"json_replace",
|
|
102
|
+
"json_remove",
|
|
103
|
+
"json_set",
|
|
104
|
+
"create_fts_index",
|
|
105
|
+
"create_vector_index",
|
|
106
|
+
"create_spatial_index",
|
|
107
|
+
"create_index",
|
|
108
|
+
"drop_index",
|
|
109
|
+
"reindex",
|
|
110
|
+
]);
|
|
111
|
+
/**
|
|
112
|
+
* Admin tools that require 'admin' scope
|
|
113
|
+
*/
|
|
114
|
+
export const ADMIN_TOOLS = new Set([
|
|
115
|
+
"vacuum_database",
|
|
116
|
+
"analyze_tables",
|
|
117
|
+
"pragma_get",
|
|
118
|
+
"pragma_set",
|
|
119
|
+
"extension_list",
|
|
120
|
+
"extension_install",
|
|
121
|
+
"optimize",
|
|
122
|
+
"backup_database",
|
|
123
|
+
"restore_database",
|
|
124
|
+
"backup_table",
|
|
125
|
+
"export_data",
|
|
126
|
+
]);
|
|
127
|
+
// =============================================================================
|
|
128
|
+
// Scope Parsing
|
|
129
|
+
// =============================================================================
|
|
130
|
+
/**
|
|
131
|
+
* Parse a scope string (space-delimited) into an array
|
|
132
|
+
*/
|
|
133
|
+
export function parseScopes(scopeString) {
|
|
134
|
+
return scopeString
|
|
135
|
+
.split(/\s+/)
|
|
136
|
+
.map((s) => s.trim())
|
|
137
|
+
.filter((s) => s.length > 0);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Parse a database-specific scope
|
|
141
|
+
* @returns The database name or null if not a database scope
|
|
142
|
+
*/
|
|
143
|
+
export function parseDatabaseScope(scope) {
|
|
144
|
+
const match = SCOPE_PATTERNS.DATABASE.exec(scope);
|
|
145
|
+
return match?.[1] ?? null;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Parse a table-specific scope
|
|
149
|
+
* @returns Object with database and table names, or null if not a table scope
|
|
150
|
+
*/
|
|
151
|
+
export function parseTableScope(scope) {
|
|
152
|
+
const match = SCOPE_PATTERNS.TABLE.exec(scope);
|
|
153
|
+
const database = match?.[1];
|
|
154
|
+
const table = match?.[2];
|
|
155
|
+
if (database !== undefined && table !== undefined) {
|
|
156
|
+
return { database, table };
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
// =============================================================================
|
|
161
|
+
// Scope Validation
|
|
162
|
+
// =============================================================================
|
|
163
|
+
/**
|
|
164
|
+
* Check if a scope is valid (matches known patterns)
|
|
165
|
+
*/
|
|
166
|
+
export function isValidScope(scope) {
|
|
167
|
+
// Check base scopes
|
|
168
|
+
if (BASE_SCOPES.includes(scope)) {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
// Check database pattern
|
|
172
|
+
if (SCOPE_PATTERNS.DATABASE.test(scope)) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
// Check table pattern
|
|
176
|
+
if (SCOPE_PATTERNS.TABLE.test(scope)) {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if scopes include admin access
|
|
183
|
+
*/
|
|
184
|
+
export function hasAdminScope(scopes) {
|
|
185
|
+
return scopes.includes("admin");
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Check if scopes include write access
|
|
189
|
+
*/
|
|
190
|
+
export function hasWriteScope(scopes) {
|
|
191
|
+
return scopes.includes("write") || hasAdminScope(scopes);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Check if scopes include read access
|
|
195
|
+
*/
|
|
196
|
+
export function hasReadScope(scopes) {
|
|
197
|
+
return scopes.includes("read") || hasWriteScope(scopes);
|
|
198
|
+
}
|
|
199
|
+
// =============================================================================
|
|
200
|
+
// Scope Enforcement
|
|
201
|
+
// =============================================================================
|
|
202
|
+
/**
|
|
203
|
+
* Check if a scope grants access to a specific tool
|
|
204
|
+
*/
|
|
205
|
+
export function scopeGrantsToolAccess(scope, toolName) {
|
|
206
|
+
// Admin scope grants access to all tools
|
|
207
|
+
if (scope === "admin") {
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
// Write scope grants access to write tools and below
|
|
211
|
+
if (scope === "write") {
|
|
212
|
+
if (ADMIN_TOOLS.has(toolName)) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
// Read scope only grants read-only tools
|
|
218
|
+
if (scope === "read") {
|
|
219
|
+
return READ_ONLY_TOOLS.has(toolName);
|
|
220
|
+
}
|
|
221
|
+
// Database/table scopes don't directly affect tool access
|
|
222
|
+
// They are used for filtering data, not tools
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Check if any of the scopes grants access to a tool
|
|
227
|
+
*/
|
|
228
|
+
export function scopesGrantToolAccess(scopes, toolName) {
|
|
229
|
+
return scopes.some((scope) => scopeGrantsToolAccess(scope, toolName));
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Check if a scope grants access to a specific database
|
|
233
|
+
*/
|
|
234
|
+
export function scopeGrantsDatabaseAccess(scope, databaseName) {
|
|
235
|
+
// Admin and write scopes grant access to all databases
|
|
236
|
+
if (scope === "admin" || scope === "write" || scope === "read") {
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
// Check database-specific scope
|
|
240
|
+
const dbName = parseDatabaseScope(scope);
|
|
241
|
+
if (dbName && dbName === databaseName) {
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
// Check table scope (grants access to the database of the table)
|
|
245
|
+
const tableScope = parseTableScope(scope);
|
|
246
|
+
if (tableScope?.database === databaseName) {
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Check if any of the scopes grants access to a database
|
|
253
|
+
*/
|
|
254
|
+
export function scopesGrantDatabaseAccess(scopes, databaseName) {
|
|
255
|
+
return scopes.some((scope) => scopeGrantsDatabaseAccess(scope, databaseName));
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Check if a scope grants access to a specific table
|
|
259
|
+
*/
|
|
260
|
+
export function scopeGrantsTableAccess(scope, databaseName, tableName) {
|
|
261
|
+
// Admin and write scopes grant access to all tables
|
|
262
|
+
if (scope === "admin" || scope === "write" || scope === "read") {
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
// Database scope grants access to all tables in that database
|
|
266
|
+
const dbName = parseDatabaseScope(scope);
|
|
267
|
+
if (dbName && dbName === databaseName) {
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
// Check table-specific scope
|
|
271
|
+
const tableScope = parseTableScope(scope);
|
|
272
|
+
if (tableScope?.database === databaseName && tableScope.table === tableName) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Check if any of the scopes grants access to a table
|
|
279
|
+
*/
|
|
280
|
+
export function scopesGrantTableAccess(scopes, databaseName, tableName) {
|
|
281
|
+
return scopes.some((scope) => scopeGrantsTableAccess(scope, databaseName, tableName));
|
|
282
|
+
}
|
|
283
|
+
// =============================================================================
|
|
284
|
+
// Tool Group Utilities
|
|
285
|
+
// =============================================================================
|
|
286
|
+
/**
|
|
287
|
+
* Get the required minimum scope for a tool group
|
|
288
|
+
*/
|
|
289
|
+
export function getRequiredScopeForGroup(group) {
|
|
290
|
+
if (ADMIN_SCOPE_GROUPS.includes(group) &&
|
|
291
|
+
!WRITE_SCOPE_GROUPS.includes(group)) {
|
|
292
|
+
return "admin";
|
|
293
|
+
}
|
|
294
|
+
if (WRITE_SCOPE_GROUPS.includes(group) &&
|
|
295
|
+
!READ_SCOPE_GROUPS.includes(group)) {
|
|
296
|
+
return "write";
|
|
297
|
+
}
|
|
298
|
+
return "read";
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get the required minimum scope for a tool
|
|
302
|
+
*/
|
|
303
|
+
export function getRequiredScopeForTool(toolName) {
|
|
304
|
+
if (ADMIN_TOOLS.has(toolName)) {
|
|
305
|
+
return "admin";
|
|
306
|
+
}
|
|
307
|
+
if (WRITE_TOOLS.has(toolName)) {
|
|
308
|
+
return "write";
|
|
309
|
+
}
|
|
310
|
+
return "read";
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Get tool groups accessible with given scopes
|
|
314
|
+
*/
|
|
315
|
+
export function getAccessibleToolGroups(scopes) {
|
|
316
|
+
if (hasAdminScope(scopes)) {
|
|
317
|
+
return [...ADMIN_SCOPE_GROUPS];
|
|
318
|
+
}
|
|
319
|
+
if (hasWriteScope(scopes)) {
|
|
320
|
+
return [...WRITE_SCOPE_GROUPS];
|
|
321
|
+
}
|
|
322
|
+
if (hasReadScope(scopes)) {
|
|
323
|
+
return [...READ_SCOPE_GROUPS];
|
|
324
|
+
}
|
|
325
|
+
return [];
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Get all tools accessible with given scopes
|
|
329
|
+
*/
|
|
330
|
+
export function getAccessibleTools(scopes) {
|
|
331
|
+
const groups = getAccessibleToolGroups(scopes);
|
|
332
|
+
const allTools = [];
|
|
333
|
+
for (const group of groups) {
|
|
334
|
+
const groupTools = TOOL_GROUPS[group] ?? [];
|
|
335
|
+
for (const tool of groupTools) {
|
|
336
|
+
// For read scope, only include read-only tools
|
|
337
|
+
if (hasReadScope(scopes) && !hasWriteScope(scopes)) {
|
|
338
|
+
if (READ_ONLY_TOOLS.has(tool)) {
|
|
339
|
+
allTools.push(tool);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
allTools.push(tool);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return [...new Set(allTools)];
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=scopes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../src/auth/scopes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uBAAuB;IACvB,IAAI,EAAE,MAAM;IACZ,4BAA4B;IAC5B,KAAK,EAAE,OAAO;IACd,wBAAwB;IACxB,KAAK,EAAE,OAAO;IACd,uCAAuC;IACvC,QAAQ,EAAE,uBAAuB;IACjC,oCAAoC;IACpC,KAAK,EAAE,2CAA2C;CAC1C,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM;IACN,OAAO;IACP,OAAO;IACP,eAAe;IACf,0BAA0B;CAClB,CAAC;AAEX,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,MAAM,EAAE,gDAAgD;CACzD,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,GAAG,iBAAiB;IACpB,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,kBAAkB;IAC1B,OAAO,EAAE,uBAAuB;IAChC,QAAQ,EAAE,oBAAoB;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,GAAG,kBAAkB;IACrB,OAAO,EAAE,iBAAiB;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IACrC,eAAe,EAAE,2BAA2B;IAC5C,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,cAAc;IACd,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;CACb,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,aAAa;IACb,cAAc;IACd,YAAY;IACZ,aAAa;IACb,cAAc;IACd,aAAa;IACb,UAAU;IACV,kBAAkB;IAClB,qBAAqB;IACrB,sBAAsB;IACtB,cAAc;IACd,YAAY;IACZ,SAAS;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,iBAAiB;IACjB,gBAAgB;IAChB,YAAY;IACZ,YAAY;IACZ,gBAAgB;IAChB,mBAAmB;IACnB,UAAU;IACV,iBAAiB;IACjB,kBAAkB;IAClB,cAAc;IACd,aAAa;CACd,CAAC,CAAC;AAEH,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,WAAW;SACf,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAa;IAEb,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,oBAAoB;IACpB,IAAK,WAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yBAAyB;IACzB,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAgB;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAgB;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgB;IAC3C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,QAAgB;IAEhB,yCAAyC;IACzC,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yCAAyC;IACzC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,0DAA0D;IAC1D,8CAA8C;IAC9C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAgB,EAChB,QAAgB;IAEhB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAa,EACb,YAAoB;IAEpB,uDAAuD;IACvD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,MAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iEAAiE;IACjE,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,UAAU,EAAE,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAgB,EAChB,YAAoB;IAEpB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAa,EACb,YAAoB,EACpB,SAAiB;IAEjB,oDAAoD;IACpD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8DAA8D;IAC9D,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,MAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,UAAU,EAAE,QAAQ,KAAK,YAAY,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAgB,EAChB,YAAoB,EACpB,SAAiB;IAEjB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3B,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CACvD,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAgB;IACvD,IACE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EACnC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IACE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAClC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAgB;IACtD,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAgB;IACjD,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,+CAA+C;YAC/C,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db-mcp - OAuth Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for OAuth 2.0 components including
|
|
5
|
+
* RFC 9728, RFC 8414, and RFC 7591 compliance.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* OAuth 2.0 Protected Resource Metadata (RFC 9728)
|
|
9
|
+
*
|
|
10
|
+
* @see https://datatracker.ietf.org/doc/html/rfc9728
|
|
11
|
+
*/
|
|
12
|
+
export interface ProtectedResourceMetadata {
|
|
13
|
+
/** Resource identifier (canonical URI) */
|
|
14
|
+
resource: string;
|
|
15
|
+
/** Authorization servers that can issue tokens for this resource */
|
|
16
|
+
authorization_servers?: string[];
|
|
17
|
+
/** JWKS URI for token verification (optional, usually from auth server) */
|
|
18
|
+
jwks_uri?: string;
|
|
19
|
+
/** Scopes supported by this resource */
|
|
20
|
+
scopes_supported?: string[];
|
|
21
|
+
/** Bearer token presentation methods supported */
|
|
22
|
+
bearer_methods_supported?: ("header" | "body" | "query")[];
|
|
23
|
+
/** Resource signing algorithms supported */
|
|
24
|
+
resource_signing_alg_values_supported?: string[];
|
|
25
|
+
/** Resource documentation URL */
|
|
26
|
+
resource_documentation?: string;
|
|
27
|
+
/** Resource policy URI */
|
|
28
|
+
resource_policy_uri?: string;
|
|
29
|
+
/** Resource terms of service URI */
|
|
30
|
+
resource_tos_uri?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* OAuth 2.0 Authorization Server Metadata (RFC 8414)
|
|
34
|
+
*
|
|
35
|
+
* @see https://datatracker.ietf.org/doc/html/rfc8414
|
|
36
|
+
*/
|
|
37
|
+
export interface AuthorizationServerMetadata {
|
|
38
|
+
/** Authorization server issuer identifier */
|
|
39
|
+
issuer: string;
|
|
40
|
+
/** Authorization endpoint URL */
|
|
41
|
+
authorization_endpoint?: string;
|
|
42
|
+
/** Token endpoint URL */
|
|
43
|
+
token_endpoint: string;
|
|
44
|
+
/** JWKS URI */
|
|
45
|
+
jwks_uri?: string;
|
|
46
|
+
/** Registration endpoint (RFC 7591) */
|
|
47
|
+
registration_endpoint?: string;
|
|
48
|
+
/** Scopes supported */
|
|
49
|
+
scopes_supported?: string[];
|
|
50
|
+
/** Response types supported */
|
|
51
|
+
response_types_supported?: string[];
|
|
52
|
+
/** Response modes supported */
|
|
53
|
+
response_modes_supported?: string[];
|
|
54
|
+
/** Grant types supported */
|
|
55
|
+
grant_types_supported?: string[];
|
|
56
|
+
/** Token endpoint auth methods supported */
|
|
57
|
+
token_endpoint_auth_methods_supported?: string[];
|
|
58
|
+
/** Token endpoint auth signing algorithms */
|
|
59
|
+
token_endpoint_auth_signing_alg_values_supported?: string[];
|
|
60
|
+
/** Service documentation URL */
|
|
61
|
+
service_documentation?: string;
|
|
62
|
+
/** UI locales supported */
|
|
63
|
+
ui_locales_supported?: string[];
|
|
64
|
+
/** OP policy URI */
|
|
65
|
+
op_policy_uri?: string;
|
|
66
|
+
/** OP terms of service URI */
|
|
67
|
+
op_tos_uri?: string;
|
|
68
|
+
/** Revocation endpoint */
|
|
69
|
+
revocation_endpoint?: string;
|
|
70
|
+
/** Revocation endpoint auth methods */
|
|
71
|
+
revocation_endpoint_auth_methods_supported?: string[];
|
|
72
|
+
/** Introspection endpoint */
|
|
73
|
+
introspection_endpoint?: string;
|
|
74
|
+
/** Introspection endpoint auth methods */
|
|
75
|
+
introspection_endpoint_auth_methods_supported?: string[];
|
|
76
|
+
/** Code challenge methods supported (PKCE) */
|
|
77
|
+
code_challenge_methods_supported?: string[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* OAuth 2.0 Dynamic Client Registration Request (RFC 7591)
|
|
81
|
+
*
|
|
82
|
+
* @see https://datatracker.ietf.org/doc/html/rfc7591
|
|
83
|
+
*/
|
|
84
|
+
export interface ClientRegistrationRequest {
|
|
85
|
+
/** Redirect URIs */
|
|
86
|
+
redirect_uris?: string[];
|
|
87
|
+
/** Token endpoint auth method */
|
|
88
|
+
token_endpoint_auth_method?: string;
|
|
89
|
+
/** Grant types requested */
|
|
90
|
+
grant_types?: string[];
|
|
91
|
+
/** Response types requested */
|
|
92
|
+
response_types?: string[];
|
|
93
|
+
/** Client name */
|
|
94
|
+
client_name?: string;
|
|
95
|
+
/** Client URI */
|
|
96
|
+
client_uri?: string;
|
|
97
|
+
/** Logo URI */
|
|
98
|
+
logo_uri?: string;
|
|
99
|
+
/** Scopes requested */
|
|
100
|
+
scope?: string;
|
|
101
|
+
/** Contacts */
|
|
102
|
+
contacts?: string[];
|
|
103
|
+
/** Terms of service URI */
|
|
104
|
+
tos_uri?: string;
|
|
105
|
+
/** Policy URI */
|
|
106
|
+
policy_uri?: string;
|
|
107
|
+
/** JWKS URI for client authentication */
|
|
108
|
+
jwks_uri?: string;
|
|
109
|
+
/** JWKS document for client authentication */
|
|
110
|
+
jwks?: JWKSDocument;
|
|
111
|
+
/** Software ID */
|
|
112
|
+
software_id?: string;
|
|
113
|
+
/** Software version */
|
|
114
|
+
software_version?: string;
|
|
115
|
+
/** Software statement (signed JWT) */
|
|
116
|
+
software_statement?: string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* OAuth 2.0 Dynamic Client Registration Response (RFC 7591)
|
|
120
|
+
*/
|
|
121
|
+
export interface ClientRegistrationResponse {
|
|
122
|
+
/** Client identifier */
|
|
123
|
+
client_id: string;
|
|
124
|
+
/** Client secret (for confidential clients) */
|
|
125
|
+
client_secret?: string;
|
|
126
|
+
/** Client secret expiration timestamp */
|
|
127
|
+
client_secret_expires_at?: number;
|
|
128
|
+
/** Registration access token */
|
|
129
|
+
registration_access_token?: string;
|
|
130
|
+
/** Registration client URI */
|
|
131
|
+
registration_client_uri?: string;
|
|
132
|
+
/** Client ID issued at timestamp */
|
|
133
|
+
client_id_issued_at?: number;
|
|
134
|
+
/** All other fields from the request */
|
|
135
|
+
[key: string]: unknown;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* JSON Web Key (JWK)
|
|
139
|
+
*/
|
|
140
|
+
export interface JWK {
|
|
141
|
+
/** Key type (e.g., 'RSA', 'EC') */
|
|
142
|
+
kty: string;
|
|
143
|
+
/** Key use ('sig' for signature, 'enc' for encryption) */
|
|
144
|
+
use?: string;
|
|
145
|
+
/** Key operations */
|
|
146
|
+
key_ops?: string[];
|
|
147
|
+
/** Algorithm */
|
|
148
|
+
alg?: string;
|
|
149
|
+
/** Key ID */
|
|
150
|
+
kid?: string;
|
|
151
|
+
/** X.509 URL */
|
|
152
|
+
x5u?: string;
|
|
153
|
+
/** X.509 certificate chain */
|
|
154
|
+
x5c?: string[];
|
|
155
|
+
/** X.509 certificate SHA-1 thumbprint */
|
|
156
|
+
x5t?: string;
|
|
157
|
+
/** X.509 certificate SHA-256 thumbprint */
|
|
158
|
+
"x5t#S256"?: string;
|
|
159
|
+
/** RSA modulus */
|
|
160
|
+
n?: string;
|
|
161
|
+
/** RSA public exponent */
|
|
162
|
+
e?: string;
|
|
163
|
+
/** EC curve */
|
|
164
|
+
crv?: string;
|
|
165
|
+
/** EC x coordinate */
|
|
166
|
+
x?: string;
|
|
167
|
+
/** EC y coordinate */
|
|
168
|
+
y?: string;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* JSON Web Key Set (JWKS)
|
|
172
|
+
*/
|
|
173
|
+
export interface JWKSDocument {
|
|
174
|
+
/** Array of JWK keys */
|
|
175
|
+
keys: JWK[];
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Result of token validation
|
|
179
|
+
*/
|
|
180
|
+
export interface TokenValidationResult {
|
|
181
|
+
/** Whether the token is valid */
|
|
182
|
+
valid: boolean;
|
|
183
|
+
/** Validated claims (if valid) */
|
|
184
|
+
claims?: TokenClaims;
|
|
185
|
+
/** Error message (if invalid) */
|
|
186
|
+
error?: string;
|
|
187
|
+
/** Error code (if invalid) */
|
|
188
|
+
errorCode?: string;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Validated token claims
|
|
192
|
+
* Extended from the base TokenClaims in types/index.ts
|
|
193
|
+
*/
|
|
194
|
+
export interface TokenClaims {
|
|
195
|
+
/** Subject (user ID) */
|
|
196
|
+
sub: string;
|
|
197
|
+
/** Granted scopes (parsed from space-delimited string) */
|
|
198
|
+
scopes: string[];
|
|
199
|
+
/** Token expiration time (Unix timestamp) */
|
|
200
|
+
exp: number;
|
|
201
|
+
/** Token issued at time (Unix timestamp) */
|
|
202
|
+
iat: number;
|
|
203
|
+
/** Token issuer */
|
|
204
|
+
iss?: string | undefined;
|
|
205
|
+
/** Token audience */
|
|
206
|
+
aud?: string | string[] | undefined;
|
|
207
|
+
/** Not before time (Unix timestamp) */
|
|
208
|
+
nbf?: number | undefined;
|
|
209
|
+
/** JWT ID */
|
|
210
|
+
jti?: string | undefined;
|
|
211
|
+
/** Client ID */
|
|
212
|
+
client_id?: string | undefined;
|
|
213
|
+
/** Additional claims */
|
|
214
|
+
[key: string]: unknown;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Resource server configuration
|
|
218
|
+
*/
|
|
219
|
+
export interface ResourceServerConfig {
|
|
220
|
+
/** Resource identifier (canonical server URI) */
|
|
221
|
+
resource: string;
|
|
222
|
+
/** Authorization servers that can issue tokens */
|
|
223
|
+
authorizationServers: string[];
|
|
224
|
+
/** Scopes supported by this resource */
|
|
225
|
+
scopesSupported: string[];
|
|
226
|
+
/** Bearer token methods accepted (default: ['header']) */
|
|
227
|
+
bearerMethodsSupported?: ("header" | "body" | "query")[];
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Token validator configuration
|
|
231
|
+
*/
|
|
232
|
+
export interface TokenValidatorConfig {
|
|
233
|
+
/** JWKS URI for key discovery */
|
|
234
|
+
jwksUri: string;
|
|
235
|
+
/** Expected issuer */
|
|
236
|
+
issuer: string;
|
|
237
|
+
/** Expected audience */
|
|
238
|
+
audience: string;
|
|
239
|
+
/** Clock tolerance in seconds (default: 60) */
|
|
240
|
+
clockTolerance?: number | undefined;
|
|
241
|
+
/** JWKS cache TTL in seconds (default: 3600) */
|
|
242
|
+
jwksCacheTtl?: number | undefined;
|
|
243
|
+
/** Supported algorithms (default: ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512']) */
|
|
244
|
+
algorithms?: string[] | undefined;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Authorization server discovery configuration
|
|
248
|
+
*/
|
|
249
|
+
export interface AuthServerDiscoveryConfig {
|
|
250
|
+
/** Authorization server URL (issuer) */
|
|
251
|
+
authServerUrl: string;
|
|
252
|
+
/** Cache TTL in seconds (default: 3600) */
|
|
253
|
+
cacheTtl?: number | undefined;
|
|
254
|
+
/** Request timeout in milliseconds (default: 5000) */
|
|
255
|
+
timeout?: number | undefined;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|