@authsec/sdk 4.0.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 +253 -0
- package/dist/ciba.d.ts +47 -0
- package/dist/ciba.d.ts.map +1 -0
- package/dist/ciba.js +172 -0
- package/dist/ciba.js.map +1 -0
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +92 -0
- package/dist/config.js.map +1 -0
- package/dist/decorators.d.ts +59 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +142 -0
- package/dist/decorators.js.map +1 -0
- package/dist/http.d.ts +19 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +156 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +42 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +353 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/rbac.d.ts +12 -0
- package/dist/rbac.d.ts.map +1 -0
- package/dist/rbac.js +130 -0
- package/dist/rbac.js.map +1 -0
- package/dist/service-access.d.ts +31 -0
- package/dist/service-access.d.ts.map +1 -0
- package/dist/service-access.js +82 -0
- package/dist/service-access.js.map +1 -0
- package/dist/spiffe/index.d.ts +4 -0
- package/dist/spiffe/index.d.ts.map +1 -0
- package/dist/spiffe/index.js +10 -0
- package/dist/spiffe/index.js.map +1 -0
- package/dist/spiffe/proto/workload.proto +126 -0
- package/dist/spiffe/quick-start-svid.d.ts +74 -0
- package/dist/spiffe/quick-start-svid.d.ts.map +1 -0
- package/dist/spiffe/quick-start-svid.js +191 -0
- package/dist/spiffe/quick-start-svid.js.map +1 -0
- package/dist/spiffe/workload-api-client.d.ts +71 -0
- package/dist/spiffe/workload-api-client.d.ts.map +1 -0
- package/dist/spiffe/workload-api-client.js +355 -0
- package/dist/spiffe/workload-api-client.js.map +1 -0
- package/dist/spiffe/workload-svid.d.ts +44 -0
- package/dist/spiffe/workload-svid.d.ts.map +1 -0
- package/dist/spiffe/workload-svid.js +137 -0
- package/dist/spiffe/workload-svid.js.map +1 -0
- package/dist/types.d.ts +95 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
- package/src/spiffe/proto/workload.proto +126 -0
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP Server implementation
|
|
4
|
+
* Mirrors Python MCPServer class + run_mcp_server_with_oauth
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.runMcpServerWithOAuth = runMcpServerWithOAuth;
|
|
11
|
+
const express_1 = __importDefault(require("express"));
|
|
12
|
+
const cors_1 = __importDefault(require("cors"));
|
|
13
|
+
const http_js_1 = require("./http.js");
|
|
14
|
+
const config_js_1 = require("./config.js");
|
|
15
|
+
class MCPServer {
|
|
16
|
+
clientId;
|
|
17
|
+
appName;
|
|
18
|
+
userTools = [];
|
|
19
|
+
unprotectedTools = [];
|
|
20
|
+
toolHandlers = new Map();
|
|
21
|
+
app;
|
|
22
|
+
constructor(clientId, appName) {
|
|
23
|
+
this.clientId = clientId;
|
|
24
|
+
this.appName = appName;
|
|
25
|
+
this.app = (0, express_1.default)();
|
|
26
|
+
this.app.use((0, cors_1.default)());
|
|
27
|
+
this.app.use(express_1.default.json({ limit: '10mb' }));
|
|
28
|
+
this.setupRoutes();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register tools (replaces Python's set_user_module with module introspection).
|
|
32
|
+
* In JS/TS, users pass an array of ToolDefinition objects.
|
|
33
|
+
*/
|
|
34
|
+
setTools(tools) {
|
|
35
|
+
for (const tool of tools) {
|
|
36
|
+
if (tool.isProtected) {
|
|
37
|
+
// Protected tool — extract metadata and send to SDK Manager
|
|
38
|
+
const toolMetadata = {
|
|
39
|
+
name: tool.name,
|
|
40
|
+
rbac: {
|
|
41
|
+
roles: tool.rbacRequirements?.roles ?? [],
|
|
42
|
+
groups: tool.rbacRequirements?.groups ?? [],
|
|
43
|
+
resources: tool.rbacRequirements?.resources ?? [],
|
|
44
|
+
scopes: tool.rbacRequirements?.scopes ?? [],
|
|
45
|
+
permissions: tool.rbacRequirements?.permissions ?? [],
|
|
46
|
+
require_all: tool.rbacRequirements?.requireAll ?? false,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
if (tool.description) {
|
|
50
|
+
toolMetadata.description = tool.description;
|
|
51
|
+
}
|
|
52
|
+
if (tool.inputSchema) {
|
|
53
|
+
toolMetadata.inputSchema = tool.inputSchema;
|
|
54
|
+
}
|
|
55
|
+
this.userTools.push(toolMetadata);
|
|
56
|
+
this.toolHandlers.set(tool.name, tool.handler);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// Unprotected tool — register as standard MCP tool
|
|
60
|
+
const toolSchema = {
|
|
61
|
+
name: tool.name,
|
|
62
|
+
description: tool.description ?? `Tool: ${tool.name}`,
|
|
63
|
+
inputSchema: tool.inputSchema ?? {
|
|
64
|
+
type: 'object',
|
|
65
|
+
properties: {},
|
|
66
|
+
required: [],
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
this.unprotectedTools.push(toolSchema);
|
|
70
|
+
this.toolHandlers.set(tool.name, tool.handler);
|
|
71
|
+
console.log(`Registered unprotected tool: ${tool.name} (standard MCP tool, no auth required)`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
setupRoutes() {
|
|
76
|
+
this.app.get('/', (_req, res) => {
|
|
77
|
+
const config = (0, config_js_1.getInternalConfig)();
|
|
78
|
+
res.json({
|
|
79
|
+
name: this.appName,
|
|
80
|
+
version: '1.0.0',
|
|
81
|
+
protocol: 'mcp-with-oauth',
|
|
82
|
+
status: 'running',
|
|
83
|
+
auth_service: config.authServiceUrl,
|
|
84
|
+
services_url: config.servicesBaseUrl,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
this.app.post('/', async (req, res) => {
|
|
88
|
+
try {
|
|
89
|
+
const message = req.body;
|
|
90
|
+
const response = await this.processMcpMessage(message, req);
|
|
91
|
+
res.json(response);
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
res.json({
|
|
95
|
+
jsonrpc: '2.0',
|
|
96
|
+
id: null,
|
|
97
|
+
error: { code: -32603, message: e.message ?? String(e) },
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
deriveReturnUrl(req) {
|
|
103
|
+
const referer = req.headers.referer;
|
|
104
|
+
if (referer) {
|
|
105
|
+
try {
|
|
106
|
+
const parsed = new URL(referer);
|
|
107
|
+
if (parsed.protocol === 'http:' || parsed.protocol === 'https:') {
|
|
108
|
+
return parsed.origin + (parsed.pathname || '/') + parsed.search + parsed.hash;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// ignore
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const origin = req.headers.origin;
|
|
116
|
+
if (origin) {
|
|
117
|
+
try {
|
|
118
|
+
const parsed = new URL(origin);
|
|
119
|
+
if (parsed.protocol === 'http:' || parsed.protocol === 'https:') {
|
|
120
|
+
return `${parsed.protocol}//${parsed.host}/`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// ignore
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
normalizeOauthArguments(arguments_) {
|
|
130
|
+
if (typeof arguments_ !== 'object' || arguments_ === null) {
|
|
131
|
+
return arguments_;
|
|
132
|
+
}
|
|
133
|
+
const args = { ...arguments_ };
|
|
134
|
+
for (const [key, value] of Object.entries(args)) {
|
|
135
|
+
if (Array.isArray(value)) {
|
|
136
|
+
if (value.length === 1) {
|
|
137
|
+
args[key] = String(value[0]);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
args[key] = value.map(String).join(' ');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return args;
|
|
145
|
+
}
|
|
146
|
+
async processMcpMessage(message, req) {
|
|
147
|
+
const method = message.method;
|
|
148
|
+
const messageId = message.id;
|
|
149
|
+
const params = message.params ?? {};
|
|
150
|
+
if (method === 'initialize') {
|
|
151
|
+
return {
|
|
152
|
+
jsonrpc: '2.0',
|
|
153
|
+
id: messageId,
|
|
154
|
+
result: {
|
|
155
|
+
protocolVersion: '2024-11-05',
|
|
156
|
+
capabilities: { tools: { listChanged: false } },
|
|
157
|
+
serverInfo: { name: this.appName, version: '1.0.0' },
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
if (method === 'tools/list') {
|
|
162
|
+
// Get protected tools from SDK Manager (with OAuth and RBAC)
|
|
163
|
+
let toolsResponse;
|
|
164
|
+
const toolsListTimeout = parseInt(process.env.AUTHSEC_TOOLS_LIST_TIMEOUT_SECONDS ?? '8', 10);
|
|
165
|
+
try {
|
|
166
|
+
toolsResponse = await Promise.race([
|
|
167
|
+
(0, http_js_1.makeAuthRequest)('tools/list', {
|
|
168
|
+
client_id: this.clientId,
|
|
169
|
+
app_name: this.appName,
|
|
170
|
+
user_tools: this.userTools,
|
|
171
|
+
}),
|
|
172
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('tools/list timed out')), toolsListTimeout * 1000)),
|
|
173
|
+
]);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
toolsResponse = { error: 'tools/list timed out against auth service' };
|
|
177
|
+
}
|
|
178
|
+
// Combine protected tools (from SDK Manager) with unprotected tools (local)
|
|
179
|
+
const remoteTools = Array.isArray(toolsResponse?.tools)
|
|
180
|
+
? toolsResponse.tools
|
|
181
|
+
: [];
|
|
182
|
+
const allTools = [...remoteTools, ...this.unprotectedTools];
|
|
183
|
+
return {
|
|
184
|
+
jsonrpc: '2.0',
|
|
185
|
+
id: messageId,
|
|
186
|
+
result: { tools: allTools },
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (method === 'tools/call') {
|
|
190
|
+
const toolName = params.name;
|
|
191
|
+
let arguments_ = params.arguments ?? {};
|
|
192
|
+
let content;
|
|
193
|
+
if (toolName.startsWith('oauth_')) {
|
|
194
|
+
// Delegate OAuth tools to hosted service
|
|
195
|
+
arguments_ = this.normalizeOauthArguments(arguments_);
|
|
196
|
+
if (toolName === 'oauth_authenticate' &&
|
|
197
|
+
typeof arguments_ === 'object' &&
|
|
198
|
+
arguments_ !== null &&
|
|
199
|
+
typeof arguments_.jwt_token === 'string') {
|
|
200
|
+
// Backward/forward compatibility across auth service payload variants.
|
|
201
|
+
const token = arguments_.jwt_token;
|
|
202
|
+
if (!arguments_.token)
|
|
203
|
+
arguments_.token = token;
|
|
204
|
+
if (!arguments_.jwt)
|
|
205
|
+
arguments_.jwt = token;
|
|
206
|
+
if (!arguments_.access_token)
|
|
207
|
+
arguments_.access_token = token;
|
|
208
|
+
}
|
|
209
|
+
if (toolName === 'oauth_start' &&
|
|
210
|
+
typeof arguments_ === 'object' &&
|
|
211
|
+
!arguments_.return_url) {
|
|
212
|
+
const autoReturnUrl = this.deriveReturnUrl(req);
|
|
213
|
+
if (autoReturnUrl) {
|
|
214
|
+
arguments_.return_url = autoReturnUrl;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const toolResponse = await (0, http_js_1.makeAuthRequest)(`tools/call/${toolName}`, {
|
|
218
|
+
client_id: this.clientId,
|
|
219
|
+
app_name: this.appName,
|
|
220
|
+
arguments: arguments_,
|
|
221
|
+
});
|
|
222
|
+
if (typeof toolResponse === 'object' &&
|
|
223
|
+
Array.isArray(toolResponse.content)) {
|
|
224
|
+
content = toolResponse.content;
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
// Preserve useful upstream diagnostics
|
|
228
|
+
const errorPayload = {
|
|
229
|
+
error: 'Tool execution failed',
|
|
230
|
+
tool: toolName,
|
|
231
|
+
};
|
|
232
|
+
if (typeof toolResponse === 'object') {
|
|
233
|
+
if (toolResponse.detail)
|
|
234
|
+
errorPayload.detail = toolResponse.detail;
|
|
235
|
+
if (toolResponse.error)
|
|
236
|
+
errorPayload.upstream_error = toolResponse.error;
|
|
237
|
+
if (toolResponse.message)
|
|
238
|
+
errorPayload.upstream_message = toolResponse.message;
|
|
239
|
+
}
|
|
240
|
+
content = [{ type: 'text', text: JSON.stringify(errorPayload) }];
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
else if (this.toolHandlers.has(toolName)) {
|
|
244
|
+
// Execute user's tool locally
|
|
245
|
+
content = await this.toolHandlers.get(toolName)(arguments_);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
content = [
|
|
249
|
+
{
|
|
250
|
+
type: 'text',
|
|
251
|
+
text: JSON.stringify({ error: `Unknown tool: ${toolName}` }),
|
|
252
|
+
},
|
|
253
|
+
];
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
jsonrpc: '2.0',
|
|
257
|
+
id: messageId,
|
|
258
|
+
result: { content },
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
jsonrpc: '2.0',
|
|
263
|
+
id: messageId,
|
|
264
|
+
error: { code: -32601, message: `Method not found: ${method}` },
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
async cleanupSessions() {
|
|
268
|
+
try {
|
|
269
|
+
const result = await (0, http_js_1.makeAuthRequest)('cleanup-sessions', {
|
|
270
|
+
client_id: this.clientId,
|
|
271
|
+
app_name: this.appName,
|
|
272
|
+
reason: 'server_shutdown',
|
|
273
|
+
});
|
|
274
|
+
console.log(`Sessions cleanup: ${result.message ?? 'Completed'}`);
|
|
275
|
+
}
|
|
276
|
+
catch (e) {
|
|
277
|
+
console.log(`Session cleanup failed: ${e.message ?? e}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
setupShutdownHandlers() {
|
|
281
|
+
const handler = () => {
|
|
282
|
+
console.log('\nReceived shutdown signal, cleaning up sessions...');
|
|
283
|
+
this.cleanupSessions()
|
|
284
|
+
.catch(() => { })
|
|
285
|
+
.finally(() => process.exit(0));
|
|
286
|
+
};
|
|
287
|
+
process.on('SIGINT', handler);
|
|
288
|
+
process.on('SIGTERM', handler);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Run MCP server using SDK Manager for auth.
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* ```ts
|
|
296
|
+
* import { protectedByAuthSec, mcpTool, runMcpServerWithOAuth } from '@authsec/sdk';
|
|
297
|
+
*
|
|
298
|
+
* const myTool = protectedByAuthSec({
|
|
299
|
+
* toolName: 'my_tool',
|
|
300
|
+
* roles: ['admin'],
|
|
301
|
+
* }, async (args, session) => {
|
|
302
|
+
* return [{ type: 'text', text: 'Hello!' }];
|
|
303
|
+
* });
|
|
304
|
+
*
|
|
305
|
+
* runMcpServerWithOAuth({
|
|
306
|
+
* tools: [myTool],
|
|
307
|
+
* clientId: 'your-client-id',
|
|
308
|
+
* appName: 'my-app',
|
|
309
|
+
* });
|
|
310
|
+
* ```
|
|
311
|
+
*/
|
|
312
|
+
function runMcpServerWithOAuth(options) {
|
|
313
|
+
const host = options.host ?? '0.0.0.0';
|
|
314
|
+
const port = options.port ?? 3005;
|
|
315
|
+
const authServiceUrl = process.env.AUTHSEC_AUTH_SERVICE_URL;
|
|
316
|
+
const servicesBaseUrl = process.env.AUTHSEC_SERVICES_URL;
|
|
317
|
+
const timeoutSeconds = parseInt(process.env.AUTHSEC_TIMEOUT_SECONDS ?? '15', 10);
|
|
318
|
+
const retries = parseInt(process.env.AUTHSEC_RETRIES ?? '2', 10);
|
|
319
|
+
const runtimeClientId = (0, config_js_1.normalizeRuntimeClientId)(options.clientId);
|
|
320
|
+
(0, config_js_1.configureAuth)(runtimeClientId, options.appName, {
|
|
321
|
+
authServiceUrl: authServiceUrl ?? undefined,
|
|
322
|
+
servicesBaseUrl: servicesBaseUrl ?? undefined,
|
|
323
|
+
timeout: timeoutSeconds,
|
|
324
|
+
retries,
|
|
325
|
+
});
|
|
326
|
+
// Store SPIRE socket path in global config if provided
|
|
327
|
+
const config = (0, config_js_1.getInternalConfig)();
|
|
328
|
+
if (options.spireSocketPath) {
|
|
329
|
+
config.spireSocketPath = options.spireSocketPath;
|
|
330
|
+
config.spireEnabled = true;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
config.spireEnabled = false;
|
|
334
|
+
}
|
|
335
|
+
const server = new MCPServer(runtimeClientId, options.appName);
|
|
336
|
+
server.setTools(options.tools);
|
|
337
|
+
server.setupShutdownHandlers();
|
|
338
|
+
console.log(`Starting ${options.appName} MCP Server on ${host}:${port}`);
|
|
339
|
+
console.log(`Authentication via: ${config.authServiceUrl}`);
|
|
340
|
+
console.log(`Services via: ${config.servicesBaseUrl}`);
|
|
341
|
+
if (config.spireEnabled) {
|
|
342
|
+
console.log('SPIRE Workload Identity: ENABLED');
|
|
343
|
+
console.log(` Agent socket: ${config.spireSocketPath}`);
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
console.log('SPIRE Workload Identity: DISABLED');
|
|
347
|
+
}
|
|
348
|
+
console.log(`MCP Inspector: npx @modelcontextprotocol/inspector http://${host}:${port}`);
|
|
349
|
+
server.app.listen(port, host, () => {
|
|
350
|
+
console.log(`Server listening on ${host}:${port}`);
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/rbac.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBAC evaluation logic
|
|
3
|
+
* Mirrors Python _evaluate_rbac and _normalize_claim_list
|
|
4
|
+
*/
|
|
5
|
+
import type { RbacRequirements, UserInfo } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Evaluate RBAC requirements against user info.
|
|
8
|
+
*
|
|
9
|
+
* @returns [allowed, reason] - allowed is true if access is granted, reason explains denial
|
|
10
|
+
*/
|
|
11
|
+
export declare function evaluateRbac(userInfo: UserInfo, requirements: RbacRequirements): [boolean, string];
|
|
12
|
+
//# sourceMappingURL=rbac.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rbac.d.ts","sourceRoot":"","sources":["../src/rbac.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkB7D;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,gBAAgB,GAC7B,CAAC,OAAO,EAAE,MAAM,CAAC,CAkGnB"}
|
package/dist/rbac.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RBAC evaluation logic
|
|
4
|
+
* Mirrors Python _evaluate_rbac and _normalize_claim_list
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.evaluateRbac = evaluateRbac;
|
|
8
|
+
/**
|
|
9
|
+
* Normalize a claim value to a Set of strings.
|
|
10
|
+
*/
|
|
11
|
+
function normalizeClaimList(value) {
|
|
12
|
+
if (value == null)
|
|
13
|
+
return new Set();
|
|
14
|
+
if (typeof value === 'string')
|
|
15
|
+
return new Set([value]);
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
return new Set(value
|
|
18
|
+
.filter((v) => v != null && String(v) !== '')
|
|
19
|
+
.map((v) => String(v)));
|
|
20
|
+
}
|
|
21
|
+
return new Set();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Evaluate RBAC requirements against user info.
|
|
25
|
+
*
|
|
26
|
+
* @returns [allowed, reason] - allowed is true if access is granted, reason explains denial
|
|
27
|
+
*/
|
|
28
|
+
function evaluateRbac(userInfo, requirements) {
|
|
29
|
+
const rolesReq = new Set(requirements.roles ?? []);
|
|
30
|
+
const groupsReq = new Set(requirements.groups ?? []);
|
|
31
|
+
const resourcesReq = new Set(requirements.resources ?? []);
|
|
32
|
+
const scopesReq = new Set(requirements.scopes ?? []);
|
|
33
|
+
const permsReq = new Set(requirements.permissions ?? []);
|
|
34
|
+
const requireAll = requirements.requireAll ?? false;
|
|
35
|
+
// Normalize user claims
|
|
36
|
+
const userRoles = normalizeClaimList(userInfo.roles);
|
|
37
|
+
const userGroups = normalizeClaimList(userInfo.groups);
|
|
38
|
+
// Scopes from both 'scopes' and 'scope' claims
|
|
39
|
+
const rawScopes = union(normalizeClaimList(userInfo.scopes), normalizeClaimList(userInfo.scope));
|
|
40
|
+
// Resources: direct claim + extracted from "resource:action" scopes
|
|
41
|
+
const userResources = normalizeClaimList(userInfo.resources);
|
|
42
|
+
for (const s of rawScopes) {
|
|
43
|
+
if (s.includes(':')) {
|
|
44
|
+
userResources.add(s.split(':')[0]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Scopes: non-resource scopes + action part of "resource:action"
|
|
48
|
+
const userScopes = new Set();
|
|
49
|
+
for (const s of rawScopes) {
|
|
50
|
+
if (s.includes(':')) {
|
|
51
|
+
userScopes.add(s.split(':')[1]);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
userScopes.add(s);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Permissions: direct claim + "resource:action" scopes
|
|
58
|
+
const userPerms = normalizeClaimList(userInfo.permissions);
|
|
59
|
+
for (const s of rawScopes) {
|
|
60
|
+
if (s.includes(':')) {
|
|
61
|
+
userPerms.add(s);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Build checks map
|
|
65
|
+
const checks = {};
|
|
66
|
+
if (rolesReq.size > 0) {
|
|
67
|
+
checks['roles'] = hasIntersection(userRoles, rolesReq);
|
|
68
|
+
}
|
|
69
|
+
if (groupsReq.size > 0) {
|
|
70
|
+
checks['groups'] = hasIntersection(userGroups, groupsReq);
|
|
71
|
+
}
|
|
72
|
+
if (resourcesReq.size > 0) {
|
|
73
|
+
checks['resources'] = hasIntersection(userResources, resourcesReq);
|
|
74
|
+
}
|
|
75
|
+
if (scopesReq.size > 0) {
|
|
76
|
+
checks['scopes'] = hasIntersection(userScopes, scopesReq);
|
|
77
|
+
}
|
|
78
|
+
if (permsReq.size > 0) {
|
|
79
|
+
if (userPerms.size > 0) {
|
|
80
|
+
checks['permissions'] = hasIntersection(userPerms, permsReq);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Fallback: check if user has matching resource + action combo
|
|
84
|
+
let allowed = false;
|
|
85
|
+
for (const perm of permsReq) {
|
|
86
|
+
if (perm.includes(':')) {
|
|
87
|
+
const [res, act] = perm.split(':');
|
|
88
|
+
if (userResources.has(res) && userScopes.has(act)) {
|
|
89
|
+
allowed = true;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
checks['permissions'] = allowed;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// No RBAC requirements -> allow
|
|
98
|
+
if (Object.keys(checks).length === 0) {
|
|
99
|
+
return [true, ''];
|
|
100
|
+
}
|
|
101
|
+
if (requireAll) {
|
|
102
|
+
const missing = Object.entries(checks)
|
|
103
|
+
.filter(([_, ok]) => !ok)
|
|
104
|
+
.map(([k]) => k);
|
|
105
|
+
if (missing.length > 0) {
|
|
106
|
+
return [false, `missing required ${missing.join(', ')}`];
|
|
107
|
+
}
|
|
108
|
+
return [true, ''];
|
|
109
|
+
}
|
|
110
|
+
// OR logic across categories
|
|
111
|
+
if (Object.values(checks).some((v) => v)) {
|
|
112
|
+
return [true, ''];
|
|
113
|
+
}
|
|
114
|
+
return [false, 'no RBAC requirement satisfied'];
|
|
115
|
+
}
|
|
116
|
+
function hasIntersection(a, b) {
|
|
117
|
+
for (const item of a) {
|
|
118
|
+
if (b.has(item))
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
function union(a, b) {
|
|
124
|
+
const result = new Set(a);
|
|
125
|
+
for (const item of b) {
|
|
126
|
+
result.add(item);
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=rbac.js.map
|
package/dist/rbac.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rbac.js","sourceRoot":"","sources":["../src/rbac.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServiceAccessSDK - access external service credentials via hosted services
|
|
3
|
+
* Mirrors Python ServiceAccessSDK class
|
|
4
|
+
*/
|
|
5
|
+
import type { ServiceCredentials } from './types.js';
|
|
6
|
+
export declare class ServiceAccessError extends Error {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class ServiceAccessSDK {
|
|
10
|
+
private sessionId;
|
|
11
|
+
private session;
|
|
12
|
+
private timeout;
|
|
13
|
+
constructor(session: {
|
|
14
|
+
sessionId: string;
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
} | {
|
|
17
|
+
session_id: string;
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
}, timeout?: number);
|
|
20
|
+
/** Check service health via hosted service */
|
|
21
|
+
healthCheck(): Promise<Record<string, any>>;
|
|
22
|
+
/** Get service credentials via hosted service */
|
|
23
|
+
getServiceCredentials(serviceName: string): Promise<ServiceCredentials>;
|
|
24
|
+
/** Get access token for service */
|
|
25
|
+
getServiceToken(serviceName: string): Promise<string>;
|
|
26
|
+
/** Get JWT payload details via hosted service */
|
|
27
|
+
getServiceUserDetails(serviceName: string): Promise<Record<string, any>>;
|
|
28
|
+
/** Close SDK (no-op in this minimal implementation) */
|
|
29
|
+
close(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=service-access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-access.d.ts","sourceRoot":"","sources":["../src/service-access.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAS;gBAGtB,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAC/F,OAAO,GAAE,MAAW;IAetB,8CAA8C;IACxC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAIjD,iDAAiD;IAC3C,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwB7E,mCAAmC;IAC7B,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS3D,iDAAiD;IAC3C,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAS9E,uDAAuD;IACjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ServiceAccessSDK - access external service credentials via hosted services
|
|
4
|
+
* Mirrors Python ServiceAccessSDK class
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ServiceAccessSDK = exports.ServiceAccessError = void 0;
|
|
8
|
+
const http_js_1 = require("./http.js");
|
|
9
|
+
class ServiceAccessError extends Error {
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = 'ServiceAccessError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.ServiceAccessError = ServiceAccessError;
|
|
16
|
+
class ServiceAccessSDK {
|
|
17
|
+
sessionId;
|
|
18
|
+
session;
|
|
19
|
+
timeout;
|
|
20
|
+
constructor(session, timeout = 30) {
|
|
21
|
+
// Extract session_id from various session object shapes
|
|
22
|
+
if ('sessionId' in session) {
|
|
23
|
+
this.sessionId = session.sessionId;
|
|
24
|
+
}
|
|
25
|
+
else if ('session_id' in session) {
|
|
26
|
+
this.sessionId = session.session_id;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new Error('Session must contain sessionId or session_id');
|
|
30
|
+
}
|
|
31
|
+
this.session = session;
|
|
32
|
+
this.timeout = timeout;
|
|
33
|
+
}
|
|
34
|
+
/** Check service health via hosted service */
|
|
35
|
+
async healthCheck() {
|
|
36
|
+
return (0, http_js_1.makeServicesRequest)('health', null, 'GET');
|
|
37
|
+
}
|
|
38
|
+
/** Get service credentials via hosted service */
|
|
39
|
+
async getServiceCredentials(serviceName) {
|
|
40
|
+
const payload = {
|
|
41
|
+
session_id: this.sessionId,
|
|
42
|
+
service_name: serviceName,
|
|
43
|
+
};
|
|
44
|
+
const result = await (0, http_js_1.makeServicesRequest)('credentials', payload);
|
|
45
|
+
if (result.error) {
|
|
46
|
+
throw new ServiceAccessError(result.error);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
serviceId: result.service_id,
|
|
50
|
+
serviceName: result.service_name,
|
|
51
|
+
serviceType: result.service_type,
|
|
52
|
+
authType: result.auth_type,
|
|
53
|
+
url: result.url,
|
|
54
|
+
credentials: result.credentials,
|
|
55
|
+
metadata: result.metadata ?? {},
|
|
56
|
+
retrievedAt: result.retrieved_at,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Get access token for service */
|
|
60
|
+
async getServiceToken(serviceName) {
|
|
61
|
+
const credentials = await this.getServiceCredentials(serviceName);
|
|
62
|
+
const token = credentials.credentials.access_token;
|
|
63
|
+
if (!token) {
|
|
64
|
+
throw new ServiceAccessError(`No access token available for ${serviceName}`);
|
|
65
|
+
}
|
|
66
|
+
return token;
|
|
67
|
+
}
|
|
68
|
+
/** Get JWT payload details via hosted service */
|
|
69
|
+
async getServiceUserDetails(serviceName) {
|
|
70
|
+
const payload = {
|
|
71
|
+
session_id: this.sessionId,
|
|
72
|
+
service_name: serviceName,
|
|
73
|
+
};
|
|
74
|
+
return (0, http_js_1.makeServicesRequest)('user-details', payload);
|
|
75
|
+
}
|
|
76
|
+
/** Close SDK (no-op in this minimal implementation) */
|
|
77
|
+
async close() {
|
|
78
|
+
// No-op
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.ServiceAccessSDK = ServiceAccessSDK;
|
|
82
|
+
//# sourceMappingURL=service-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-access.js","sourceRoot":"","sources":["../src/service-access.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uCAAgD;AAGhD,MAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AALD,gDAKC;AAED,MAAa,gBAAgB;IACnB,SAAS,CAAS;IAClB,OAAO,CAAM;IACb,OAAO,CAAS;IAExB,YACE,OAA+F,EAC/F,UAAkB,EAAE;QAEpB,wDAAwD;QACxD,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACrC,CAAC;aAAM,IAAI,YAAY,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,WAAW;QACf,OAAO,IAAA,6BAAmB,EAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,qBAAqB,CAAC,WAAmB;QAC7C,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,YAAY,EAAE,WAAW;SAC1B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAmB,EAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAEjE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,UAAU;YAC5B,WAAW,EAAE,MAAM,CAAC,YAAY;YAChC,WAAW,EAAE,MAAM,CAAC,YAAY;YAChC,QAAQ,EAAE,MAAM,CAAC,SAAS;YAC1B,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;YAC/B,WAAW,EAAE,MAAM,CAAC,YAAY;SACjC,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,eAAe,CAAC,WAAmB;QACvC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,kBAAkB,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,qBAAqB,CAAC,WAAmB;QAC7C,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,YAAY,EAAE,WAAW;SAC1B,CAAC;QAEF,OAAO,IAAA,6BAAmB,EAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,KAAK;QACT,QAAQ;IACV,CAAC;CACF;AA5ED,4CA4EC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spiffe/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|