@agent-relay/credential-proxy 4.0.10 → 4.0.37
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 +71 -0
- package/dist/crypto-polyfill.d.ts +2 -0
- package/dist/crypto-polyfill.d.ts.map +1 -0
- package/dist/crypto-polyfill.js +8 -0
- package/dist/crypto-polyfill.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +89 -0
- package/dist/index.js.map +1 -0
- package/dist/jwt.d.ts +20 -0
- package/dist/jwt.d.ts.map +1 -0
- package/dist/jwt.js +102 -0
- package/dist/jwt.js.map +1 -0
- package/dist/metering.d.ts +27 -0
- package/dist/metering.d.ts.map +1 -0
- package/dist/metering.js +82 -0
- package/dist/metering.js.map +1 -0
- package/dist/providers/anthropic.d.ts +11 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +39 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/index.d.ts +9 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +27 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +11 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +56 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +11 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +60 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/types.d.ts +36 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +248 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/router.d.ts +29 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +325 -0
- package/dist/router.js.map +1 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +4 -2
package/dist/router.js
ADDED
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import './crypto-polyfill.js';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { errors as joseErrors, jwtVerify } from 'jose';
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import { stream } from 'hono/streaming';
|
|
6
|
+
import { MeteringCollector, checkBudget, DEFAULT_BUDGET_RESERVATION } from './metering.js';
|
|
7
|
+
import { TokenExpiredError, TokenInvalidError, verifyProxyToken } from './jwt.js';
|
|
8
|
+
import { resolveProviderByName } from './providers/index.js';
|
|
9
|
+
import { waitForCapturedUsage } from './providers/types.js';
|
|
10
|
+
const encoder = new TextEncoder();
|
|
11
|
+
const DEFAULT_ADMIN_AUDIENCE = 'relay-credential-proxy-admin';
|
|
12
|
+
const PROVIDER_API_KEY_ENV = {
|
|
13
|
+
openai: 'OPENAI_API_KEY',
|
|
14
|
+
anthropic: 'ANTHROPIC_API_KEY',
|
|
15
|
+
openrouter: 'OPENROUTER_API_KEY',
|
|
16
|
+
};
|
|
17
|
+
class ProxyHttpError extends Error {
|
|
18
|
+
status;
|
|
19
|
+
code;
|
|
20
|
+
expose;
|
|
21
|
+
constructor(status, code, message, options) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = 'ProxyHttpError';
|
|
24
|
+
this.status = status;
|
|
25
|
+
this.code = code;
|
|
26
|
+
this.expose = options?.expose ?? true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
class EnvCredentialStore {
|
|
30
|
+
async resolve(claims) {
|
|
31
|
+
const envName = PROVIDER_API_KEY_ENV[claims.provider];
|
|
32
|
+
const apiKey = process.env[envName];
|
|
33
|
+
if (!apiKey) {
|
|
34
|
+
throw new ProxyHttpError(502, 'credential_unavailable', `No upstream credential configured for provider ${claims.provider}`);
|
|
35
|
+
}
|
|
36
|
+
return apiKey;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function createCredentialStore() {
|
|
40
|
+
return new EnvCredentialStore();
|
|
41
|
+
}
|
|
42
|
+
export function createCredentialProxyApp(options = {}) {
|
|
43
|
+
const metering = options.metering ?? new MeteringCollector();
|
|
44
|
+
const credentialStore = options.credentialStore ?? createCredentialStore();
|
|
45
|
+
const requestIdFactory = options.requestIdFactory ?? randomUUID;
|
|
46
|
+
const app = new Hono();
|
|
47
|
+
app.use('*', createRequestIdMiddleware(requestIdFactory));
|
|
48
|
+
app.onError((error, c) => createErrorResponse(c, error));
|
|
49
|
+
app.get('/health', (c) => c.json({
|
|
50
|
+
status: 'ok',
|
|
51
|
+
requestId: c.get('requestId'),
|
|
52
|
+
}));
|
|
53
|
+
app.get('/usage', adminJwtMiddleware(options), (c) => {
|
|
54
|
+
const workspaceId = c.req.query('workspaceId');
|
|
55
|
+
const credentialId = c.req.query('credentialId');
|
|
56
|
+
const usage = selectUsageSummary(metering, workspaceId, credentialId);
|
|
57
|
+
return c.json({
|
|
58
|
+
requestId: c.get('requestId'),
|
|
59
|
+
usage,
|
|
60
|
+
filters: {
|
|
61
|
+
workspaceId: workspaceId ?? null,
|
|
62
|
+
credentialId: credentialId ?? null,
|
|
63
|
+
},
|
|
64
|
+
viewer: c.get('adminClaims').sub,
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
app.all('*', proxyJwtMiddleware(options), async (c) => {
|
|
68
|
+
const claims = c.get('claims');
|
|
69
|
+
const adapter = resolveProviderByName(claims.provider);
|
|
70
|
+
if (!adapter.matchesPath(c.req.path)) {
|
|
71
|
+
throw new ProxyHttpError(400, 'route_provider_mismatch', `Path ${c.req.path} is not valid for provider ${claims.provider}`);
|
|
72
|
+
}
|
|
73
|
+
const budgetCheck = checkBudget(claims, metering);
|
|
74
|
+
if (!budgetCheck.allowed) {
|
|
75
|
+
throw new ProxyHttpError(429, 'budget_exceeded', 'Token budget exceeded');
|
|
76
|
+
}
|
|
77
|
+
// Reserve pessimistic budget to prevent concurrent requests from bypassing limits.
|
|
78
|
+
const reservation = claims.budget !== undefined ? DEFAULT_BUDGET_RESERVATION : 0;
|
|
79
|
+
if (reservation > 0) {
|
|
80
|
+
metering.reservePending(claims.sub, reservation);
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const apiKey = await credentialStore.resolve(claims);
|
|
84
|
+
const startedAt = Date.now();
|
|
85
|
+
const upstreamResponse = await adapter.forwardRequest(c.req.raw, apiKey);
|
|
86
|
+
if (isStreamingResponse(upstreamResponse)) {
|
|
87
|
+
applyResponseHeaders(c, upstreamResponse.headers);
|
|
88
|
+
c.status(upstreamResponse.status);
|
|
89
|
+
return stream(c, async (output) => {
|
|
90
|
+
try {
|
|
91
|
+
if (upstreamResponse.body) {
|
|
92
|
+
try {
|
|
93
|
+
await output.pipe(upstreamResponse.body);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
if (!output.aborted) {
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (!output.aborted) {
|
|
102
|
+
await recordUsage(metering, c, claims, upstreamResponse, startedAt);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
if (reservation > 0) {
|
|
107
|
+
metering.releasePending(claims.sub, reservation);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}, async (error) => {
|
|
111
|
+
if (reservation > 0) {
|
|
112
|
+
metering.releasePending(claims.sub, reservation);
|
|
113
|
+
}
|
|
114
|
+
console.error(`[credential-proxy] streaming failed requestId=${c.get('requestId')}`, error);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
await recordUsage(metering, c, claims, upstreamResponse, startedAt);
|
|
118
|
+
if (reservation > 0) {
|
|
119
|
+
metering.releasePending(claims.sub, reservation);
|
|
120
|
+
}
|
|
121
|
+
return upstreamResponse;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (reservation > 0) {
|
|
125
|
+
metering.releasePending(claims.sub, reservation);
|
|
126
|
+
}
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return app;
|
|
131
|
+
}
|
|
132
|
+
export const app = createCredentialProxyApp();
|
|
133
|
+
function createRequestIdMiddleware(requestIdFactory) {
|
|
134
|
+
return async (c, next) => {
|
|
135
|
+
const requestId = requestIdFactory();
|
|
136
|
+
c.set('requestId', requestId);
|
|
137
|
+
await next();
|
|
138
|
+
c.res.headers.set('x-request-id', requestId);
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function proxyJwtMiddleware(options) {
|
|
142
|
+
return async (c, next) => {
|
|
143
|
+
const token = extractBearerToken(c.req.header('authorization'));
|
|
144
|
+
if (!token) {
|
|
145
|
+
throw new ProxyHttpError(401, 'missing_authorization', 'Missing bearer token');
|
|
146
|
+
}
|
|
147
|
+
const claims = await verifyProxyToken(token, getProxyJwtSecret(options));
|
|
148
|
+
c.set('claims', claims);
|
|
149
|
+
await next();
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function adminJwtMiddleware(options) {
|
|
153
|
+
return async (c, next) => {
|
|
154
|
+
const token = extractBearerToken(c.req.header('authorization'));
|
|
155
|
+
if (!token) {
|
|
156
|
+
throw new ProxyHttpError(401, 'missing_authorization', 'Missing bearer token');
|
|
157
|
+
}
|
|
158
|
+
const claims = await verifyAdminToken(token, getAdminJwtSecret(options), options.adminAudience ?? process.env.CREDENTIAL_PROXY_ADMIN_AUDIENCE ?? DEFAULT_ADMIN_AUDIENCE);
|
|
159
|
+
c.set('adminClaims', claims);
|
|
160
|
+
await next();
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
async function verifyAdminToken(token, secret, audience) {
|
|
164
|
+
try {
|
|
165
|
+
const { payload } = await jwtVerify(token, encoder.encode(secret), {
|
|
166
|
+
algorithms: ['HS256'],
|
|
167
|
+
audience,
|
|
168
|
+
});
|
|
169
|
+
const claims = normalizeAdminClaims(payload);
|
|
170
|
+
if (!hasUsageReadAccess(claims)) {
|
|
171
|
+
throw new ProxyHttpError(403, 'admin_required', 'Admin token required');
|
|
172
|
+
}
|
|
173
|
+
return claims;
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
if (error instanceof joseErrors.JWTExpired) {
|
|
177
|
+
throw new TokenExpiredError('Admin token expired', { cause: error });
|
|
178
|
+
}
|
|
179
|
+
if (error instanceof ProxyHttpError) {
|
|
180
|
+
throw error;
|
|
181
|
+
}
|
|
182
|
+
throw new TokenInvalidError('Admin token is invalid', { cause: error });
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function normalizeAdminClaims(payload) {
|
|
186
|
+
if (typeof payload.sub !== 'string' || payload.sub.length === 0) {
|
|
187
|
+
throw new TokenInvalidError('Admin token subject is invalid');
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
sub: payload.sub,
|
|
191
|
+
...(payload.aud === undefined ? {} : { aud: payload.aud }),
|
|
192
|
+
...(typeof payload.exp === 'number' ? { exp: payload.exp } : {}),
|
|
193
|
+
...(typeof payload.iat === 'number' ? { iat: payload.iat } : {}),
|
|
194
|
+
...(typeof payload.iss === 'string' ? { iss: payload.iss } : {}),
|
|
195
|
+
...(typeof payload.role === 'string' ? { role: payload.role } : {}),
|
|
196
|
+
...(Array.isArray(payload.permissions)
|
|
197
|
+
? {
|
|
198
|
+
permissions: payload.permissions.filter((value) => typeof value === 'string' && value.length > 0),
|
|
199
|
+
}
|
|
200
|
+
: {}),
|
|
201
|
+
...(typeof payload.scope === 'string' || Array.isArray(payload.scope)
|
|
202
|
+
? { scope: payload.scope }
|
|
203
|
+
: {}),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function hasUsageReadAccess(claims) {
|
|
207
|
+
if (claims.role === 'admin') {
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
const scopes = Array.isArray(claims.scope)
|
|
211
|
+
? claims.scope
|
|
212
|
+
: typeof claims.scope === 'string'
|
|
213
|
+
? claims.scope.split(/\s+/)
|
|
214
|
+
: [];
|
|
215
|
+
return (claims.permissions?.includes('usage:read') === true ||
|
|
216
|
+
scopes.includes('usage:read') ||
|
|
217
|
+
scopes.includes('admin'));
|
|
218
|
+
}
|
|
219
|
+
function extractBearerToken(authorization) {
|
|
220
|
+
if (!authorization) {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
const match = authorization.match(/^Bearer\s+(.+)$/i);
|
|
224
|
+
return match ? match[1].trim() : null;
|
|
225
|
+
}
|
|
226
|
+
function getProxyJwtSecret(options) {
|
|
227
|
+
const secret = options.jwtSecret ?? process.env.CREDENTIAL_PROXY_JWT_SECRET ?? process.env.PROXY_JWT_SECRET;
|
|
228
|
+
if (!secret) {
|
|
229
|
+
throw new ProxyHttpError(500, 'configuration_error', 'Proxy JWT secret is not configured', {
|
|
230
|
+
expose: false,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
return secret;
|
|
234
|
+
}
|
|
235
|
+
function getAdminJwtSecret(options) {
|
|
236
|
+
const secret = options.adminJwtSecret ??
|
|
237
|
+
process.env.CREDENTIAL_PROXY_ADMIN_JWT_SECRET ??
|
|
238
|
+
options.jwtSecret ??
|
|
239
|
+
process.env.CREDENTIAL_PROXY_JWT_SECRET ??
|
|
240
|
+
process.env.PROXY_JWT_SECRET;
|
|
241
|
+
if (!secret) {
|
|
242
|
+
throw new ProxyHttpError(500, 'configuration_error', 'Admin JWT secret is not configured', {
|
|
243
|
+
expose: false,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return secret;
|
|
247
|
+
}
|
|
248
|
+
function selectUsageSummary(metering, workspaceId, credentialId) {
|
|
249
|
+
if (workspaceId) {
|
|
250
|
+
return metering.getUsageByWorkspace(workspaceId);
|
|
251
|
+
}
|
|
252
|
+
if (credentialId) {
|
|
253
|
+
return metering.getUsageByCredential(credentialId);
|
|
254
|
+
}
|
|
255
|
+
return metering.getTotalUsage();
|
|
256
|
+
}
|
|
257
|
+
function isStreamingResponse(response) {
|
|
258
|
+
const contentType = response.headers.get('content-type')?.toLowerCase() ?? '';
|
|
259
|
+
return Boolean(response.body) && contentType.includes('text/event-stream');
|
|
260
|
+
}
|
|
261
|
+
function applyResponseHeaders(c, headers) {
|
|
262
|
+
headers.forEach((value, key) => {
|
|
263
|
+
if (key.toLowerCase() === 'content-length') {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
c.header(key, value);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
async function recordUsage(metering, c, claims, response, startedAt) {
|
|
270
|
+
if (!response.ok) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const usage = await waitForCapturedUsage(response);
|
|
274
|
+
if (!usage) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
metering.record(createMeteringRecord(c.get('requestId'), claims, c.req.path, usage, startedAt));
|
|
278
|
+
}
|
|
279
|
+
function createMeteringRecord(requestId, claims, endpoint, usage, startedAt) {
|
|
280
|
+
return {
|
|
281
|
+
requestId,
|
|
282
|
+
workspaceId: claims.sub,
|
|
283
|
+
provider: claims.provider,
|
|
284
|
+
credentialId: claims.credentialId,
|
|
285
|
+
endpoint,
|
|
286
|
+
model: usage.model,
|
|
287
|
+
inputTokens: usage.inputTokens,
|
|
288
|
+
outputTokens: usage.outputTokens,
|
|
289
|
+
totalTokens: usage.totalTokens,
|
|
290
|
+
timestamp: new Date().toISOString(),
|
|
291
|
+
durationMs: Math.max(0, Date.now() - startedAt),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function createErrorResponse(c, error) {
|
|
295
|
+
const requestId = c.get('requestId');
|
|
296
|
+
if (error instanceof TokenExpiredError) {
|
|
297
|
+
return c.json({
|
|
298
|
+
error: 'Token expired',
|
|
299
|
+
code: 'token_expired',
|
|
300
|
+
requestId,
|
|
301
|
+
}, 401);
|
|
302
|
+
}
|
|
303
|
+
if (error instanceof TokenInvalidError) {
|
|
304
|
+
return c.json({
|
|
305
|
+
error: 'Invalid token',
|
|
306
|
+
code: 'invalid_token',
|
|
307
|
+
requestId,
|
|
308
|
+
}, 401);
|
|
309
|
+
}
|
|
310
|
+
if (error instanceof ProxyHttpError) {
|
|
311
|
+
return c.json({
|
|
312
|
+
error: error.expose ? error.message : 'Internal server error',
|
|
313
|
+
code: error.code,
|
|
314
|
+
requestId,
|
|
315
|
+
}, error.status);
|
|
316
|
+
}
|
|
317
|
+
console.error(`[credential-proxy] unexpected error requestId=${requestId}`, error);
|
|
318
|
+
return c.json({
|
|
319
|
+
error: 'Internal server error',
|
|
320
|
+
code: 'internal_error',
|
|
321
|
+
requestId,
|
|
322
|
+
}, 500);
|
|
323
|
+
}
|
|
324
|
+
export default app;
|
|
325
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export type ProviderType = 'openai' | 'anthropic' | 'openrouter';
|
|
2
|
+
export interface ProxyTokenClaims {
|
|
3
|
+
sub: string;
|
|
4
|
+
aud: 'relay-llm-proxy';
|
|
5
|
+
provider: ProviderType;
|
|
6
|
+
credentialId: string;
|
|
7
|
+
budget?: number;
|
|
8
|
+
iat?: number;
|
|
9
|
+
exp?: number;
|
|
10
|
+
jti?: string;
|
|
11
|
+
iss?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AdminTokenClaims {
|
|
14
|
+
sub: string;
|
|
15
|
+
aud?: string | string[];
|
|
16
|
+
exp?: number;
|
|
17
|
+
iat?: number;
|
|
18
|
+
iss?: string;
|
|
19
|
+
role?: string;
|
|
20
|
+
permissions?: string[];
|
|
21
|
+
scope?: string | string[];
|
|
22
|
+
}
|
|
23
|
+
export interface ProxyRequest {
|
|
24
|
+
provider: ProviderType;
|
|
25
|
+
credentialId: string;
|
|
26
|
+
path: string;
|
|
27
|
+
method: string;
|
|
28
|
+
headers?: Record<string, string>;
|
|
29
|
+
body?: unknown;
|
|
30
|
+
}
|
|
31
|
+
export interface ProxyResponse {
|
|
32
|
+
status: number;
|
|
33
|
+
headers?: Record<string, string>;
|
|
34
|
+
body?: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface UsageSummary {
|
|
37
|
+
inputTokens: number;
|
|
38
|
+
outputTokens: number;
|
|
39
|
+
requests: number;
|
|
40
|
+
}
|
|
41
|
+
export interface MeteringRecord {
|
|
42
|
+
requestId: string;
|
|
43
|
+
workspaceId: string;
|
|
44
|
+
provider: ProviderType;
|
|
45
|
+
credentialId: string;
|
|
46
|
+
endpoint: string;
|
|
47
|
+
model?: string;
|
|
48
|
+
inputTokens: number;
|
|
49
|
+
outputTokens: number;
|
|
50
|
+
totalTokens: number;
|
|
51
|
+
timestamp: string;
|
|
52
|
+
durationMs: number;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,iBAAiB,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/credential-proxy",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.37",
|
|
4
4
|
"description": "JWT-authenticated credential proxy for upstream LLM providers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,8 +17,10 @@
|
|
|
17
17
|
"README.md"
|
|
18
18
|
],
|
|
19
19
|
"scripts": {
|
|
20
|
-
"build": "
|
|
20
|
+
"build": "tsc -p tsconfig.json",
|
|
21
|
+
"clean": "rm -rf dist",
|
|
21
22
|
"test": "vitest run",
|
|
23
|
+
"test:watch": "vitest",
|
|
22
24
|
"dev": "npm run build && PORT=${PORT:-3001} node dist/index.js"
|
|
23
25
|
},
|
|
24
26
|
"dependencies": {
|