@caracalai/sdk 0.1.2 → 0.1.3-rc.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/dist/advanced.d.ts +1 -1
- package/dist/advanced.d.ts.map +1 -1
- package/dist/advanced.js +2 -2
- package/dist/client.d.ts +49 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +380 -27
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +13 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +31 -1
- package/dist/context.js.map +1 -1
- package/dist/coordinator.d.ts +9 -5
- package/dist/coordinator.d.ts.map +1 -1
- package/dist/coordinator.js +11 -11
- package/dist/coordinator.js.map +1 -1
- package/dist/envelope.d.ts +2 -0
- package/dist/envelope.d.ts.map +1 -1
- package/dist/envelope.js +12 -2
- package/dist/envelope.js.map +1 -1
- package/dist/http.d.ts +3 -3
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +5 -7
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts +7 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +8 -0
- package/dist/json.js.map +1 -0
- package/dist/primitives.d.ts +7 -4
- package/dist/primitives.d.ts.map +1 -1
- package/dist/primitives.js +6 -4
- package/dist/primitives.js.map +1 -1
- package/package.json +11 -5
package/dist/client.js
CHANGED
|
@@ -5,34 +5,88 @@
|
|
|
5
5
|
* Caracal: drop-in bound client wrapping zone, application, subject token, and coordinator.
|
|
6
6
|
*/
|
|
7
7
|
import { bind, fromEnvelope, toEnvelope, current } from "./context.js";
|
|
8
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { parse } from "smol-toml";
|
|
8
12
|
import { decodeEnvelope, toHeaders, } from "./envelope.js";
|
|
9
13
|
import { spawn as spawnPrimitive, delegate as delegatePrimitive, delegateToSpawn as delegateToSpawnPrimitive, } from "./primitives.js";
|
|
10
14
|
import { AgentKind } from "./coordinator.js";
|
|
15
|
+
import { OAuthClient } from "@caracalai/oauth";
|
|
11
16
|
export class Caracal {
|
|
12
17
|
config;
|
|
13
18
|
agentStartHooks = [];
|
|
14
19
|
agentEndHooks = [];
|
|
15
20
|
constructor(config) {
|
|
16
21
|
this.config = config;
|
|
22
|
+
if ((config.subjectToken === undefined) === (config.tokenSource === undefined)) {
|
|
23
|
+
throw new Error("CaracalConfig requires exactly one of subjectToken or tokenSource");
|
|
24
|
+
}
|
|
17
25
|
if (config.resources && config.resources.length > 1) {
|
|
18
26
|
this.config = { ...config, resources: sortBindingsLongestFirst(config.resources) };
|
|
19
27
|
}
|
|
20
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Builds a Caracal client from explicit values, a generated profile, or env.
|
|
31
|
+
*/
|
|
32
|
+
static connect(opts = {}) {
|
|
33
|
+
if (opts.clientSecret && Object.keys(opts.clientSecret).length > 0) {
|
|
34
|
+
const cs = opts.clientSecret;
|
|
35
|
+
const missing = [
|
|
36
|
+
["coordinatorUrl", cs.coordinatorUrl],
|
|
37
|
+
["stsUrl", cs.stsUrl],
|
|
38
|
+
["zoneId", cs.zoneId],
|
|
39
|
+
["applicationId", cs.applicationId],
|
|
40
|
+
["clientSecret", cs.clientSecret],
|
|
41
|
+
["resources", cs.resources?.length ? "set" : undefined],
|
|
42
|
+
].filter(([, v]) => !v).map(([k]) => k);
|
|
43
|
+
if (missing.length) {
|
|
44
|
+
throw new Error(`Caracal.connect: clientSecret missing ${missing.join(", ")}`);
|
|
45
|
+
}
|
|
46
|
+
return Caracal.fromClientSecret(cs);
|
|
47
|
+
}
|
|
48
|
+
const env = opts.env ?? process.env;
|
|
49
|
+
if (opts.configPath)
|
|
50
|
+
return Caracal.fromConfig(opts.configPath, env);
|
|
51
|
+
const path = resolveProfilePath(env);
|
|
52
|
+
if (path)
|
|
53
|
+
return Caracal.fromConfig(path, env);
|
|
54
|
+
return Caracal.fromEnv(env);
|
|
55
|
+
}
|
|
21
56
|
static fromEnv(env = process.env) {
|
|
22
57
|
const url = env.CARACAL_COORDINATOR_URL;
|
|
23
58
|
const zoneId = env.CARACAL_ZONE_ID;
|
|
24
59
|
const applicationId = env.CARACAL_APPLICATION_ID;
|
|
25
60
|
const subjectToken = env.CARACAL_SUBJECT_TOKEN;
|
|
61
|
+
const clientSecret = clientSecretFromEnv(env);
|
|
62
|
+
const stsUrl = env.CARACAL_STS_URL;
|
|
26
63
|
const gatewayUrl = env.CARACAL_GATEWAY_URL;
|
|
27
64
|
const missing = [
|
|
28
65
|
["CARACAL_COORDINATOR_URL", url],
|
|
29
66
|
["CARACAL_ZONE_ID", zoneId],
|
|
30
67
|
["CARACAL_APPLICATION_ID", applicationId],
|
|
31
|
-
["CARACAL_SUBJECT_TOKEN", subjectToken],
|
|
32
68
|
].filter(([, v]) => !v).map(([k]) => k);
|
|
33
69
|
if (missing.length) {
|
|
34
70
|
throw new Error(`Caracal.fromEnv: missing ${missing.join(", ")}`);
|
|
35
71
|
}
|
|
72
|
+
const profileResources = resourcesFromEnv(env);
|
|
73
|
+
const resources = profileResources.bindings;
|
|
74
|
+
if (clientSecret) {
|
|
75
|
+
if (!stsUrl)
|
|
76
|
+
throw new Error("Caracal.fromEnv: CARACAL_APP_CLIENT_SECRET requires CARACAL_STS_URL");
|
|
77
|
+
return Caracal.fromClientSecret({
|
|
78
|
+
coordinatorUrl: url,
|
|
79
|
+
stsUrl,
|
|
80
|
+
zoneId: zoneId,
|
|
81
|
+
applicationId: applicationId,
|
|
82
|
+
clientSecret,
|
|
83
|
+
resources: resourceIdsFromEnv(env.CARACAL_APP_RESOURCES, profileResources.resources),
|
|
84
|
+
gatewayUrl,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
if (!subjectToken) {
|
|
88
|
+
throw new Error("Caracal.fromEnv: provide CARACAL_APP_CLIENT_SECRET (+ CARACAL_STS_URL) or CARACAL_SUBJECT_TOKEN");
|
|
89
|
+
}
|
|
36
90
|
validateSubjectToken(subjectToken);
|
|
37
91
|
return new Caracal({
|
|
38
92
|
coordinator: { baseUrl: url },
|
|
@@ -40,45 +94,87 @@ export class Caracal {
|
|
|
40
94
|
applicationId: applicationId,
|
|
41
95
|
subjectToken: subjectToken,
|
|
42
96
|
gatewayUrl,
|
|
43
|
-
resources
|
|
97
|
+
resources,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
static fromClientSecret(opts) {
|
|
101
|
+
const resourceIds = opts.resources.map((value) => typeof value === "string" ? value : value.resourceId);
|
|
102
|
+
if (!resourceIds.length)
|
|
103
|
+
throw new Error("Caracal.fromClientSecret requires at least one resource");
|
|
104
|
+
const bindings = opts.resources.filter((value) => typeof value !== "string");
|
|
105
|
+
return new Caracal({
|
|
106
|
+
coordinator: { baseUrl: opts.coordinatorUrl },
|
|
107
|
+
zoneId: opts.zoneId,
|
|
108
|
+
applicationId: opts.applicationId,
|
|
109
|
+
tokenSource: createClientSecretTokenSource(opts.stsUrl, opts.zoneId, opts.applicationId, opts.clientSecret, resourceIds, opts.scope),
|
|
110
|
+
gatewayUrl: opts.gatewayUrl,
|
|
111
|
+
resources: bindings.length ? bindings : undefined,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
static fromConfig(path = defaultProfilePath(), env = process.env) {
|
|
115
|
+
if (!existsSync(path))
|
|
116
|
+
throw new Error(`Caracal.fromConfig: profile not found: ${path}`);
|
|
117
|
+
assertProfileFileSecure(path);
|
|
118
|
+
const value = parse(readFileSync(path, "utf8"));
|
|
119
|
+
if (!isRecord(value))
|
|
120
|
+
throw new Error("Caracal.fromConfig: profile must be a TOML table");
|
|
121
|
+
const zoneId = requiredString(value, "zone_id", path);
|
|
122
|
+
const applicationId = requiredString(value, "application_id", path);
|
|
123
|
+
const stsUrl = stringValue(value, "sts_url") ?? stringValue(value, "zone_url") ?? env.CARACAL_STS_URL;
|
|
124
|
+
if (!stsUrl)
|
|
125
|
+
throw new Error("Caracal.fromConfig: sts_url or zone_url is required");
|
|
126
|
+
const coordinatorUrl = stringValue(value, "coordinator_url") ?? env.CARACAL_COORDINATOR_URL;
|
|
127
|
+
if (!coordinatorUrl)
|
|
128
|
+
throw new Error("Caracal.fromConfig: coordinator_url is required");
|
|
129
|
+
const resources = resourcesFromProfile(value, path);
|
|
130
|
+
return Caracal.fromClientSecret({
|
|
131
|
+
coordinatorUrl,
|
|
132
|
+
stsUrl,
|
|
133
|
+
zoneId,
|
|
134
|
+
applicationId,
|
|
135
|
+
clientSecret: clientSecretFromProfile(value, path),
|
|
136
|
+
resources: resources.resources,
|
|
137
|
+
gatewayUrl: stringValue(value, "gateway_url") ?? env.CARACAL_GATEWAY_URL,
|
|
44
138
|
});
|
|
45
139
|
}
|
|
46
140
|
async close() {
|
|
47
|
-
// No-op until transport resources need teardown.
|
|
48
141
|
}
|
|
49
|
-
spawn(fn, opts = {}) {
|
|
142
|
+
async spawn(fn, opts = {}) {
|
|
50
143
|
const input = {
|
|
51
144
|
coordinator: this.config.coordinator,
|
|
52
145
|
zoneId: this.config.zoneId,
|
|
53
146
|
applicationId: this.config.applicationId,
|
|
54
|
-
subjectToken: this.
|
|
147
|
+
subjectToken: await this.rootToken(),
|
|
55
148
|
kind: opts.kind ?? this.config.defaultKind ?? AgentKind.Instance,
|
|
56
149
|
ttlSeconds: opts.ttlSeconds ?? this.config.defaultTtlSeconds,
|
|
150
|
+
subjectSessionId: opts.subjectSessionId,
|
|
57
151
|
parentId: opts.parentId,
|
|
58
152
|
metadata: opts.metadata,
|
|
59
153
|
traceId: opts.traceId,
|
|
60
154
|
onAgentStart: this.agentStartHooks.length ? (c) => this.fire(this.agentStartHooks, c) : undefined,
|
|
61
155
|
onAgentEnd: this.agentEndHooks.length ? (c) => this.fire(this.agentEndHooks, c) : undefined,
|
|
62
156
|
};
|
|
63
|
-
return spawnPrimitive(input, fn);
|
|
157
|
+
return await spawnPrimitive(input, fn);
|
|
64
158
|
}
|
|
65
159
|
delegate(opts, fn) {
|
|
66
160
|
const input = {
|
|
67
161
|
coordinator: this.config.coordinator,
|
|
68
162
|
toAgentSessionId: opts.to,
|
|
69
163
|
toApplicationId: opts.toApplicationId,
|
|
164
|
+
resourceId: opts.resourceId,
|
|
70
165
|
scopes: opts.scopes,
|
|
71
166
|
constraints: opts.constraints,
|
|
72
167
|
ttlSeconds: opts.ttlSeconds,
|
|
73
168
|
};
|
|
74
169
|
return delegatePrimitive(input, fn);
|
|
75
170
|
}
|
|
76
|
-
delegateToSpawn(opts, fn) {
|
|
171
|
+
async delegateToSpawn(opts, fn) {
|
|
77
172
|
const input = {
|
|
78
173
|
coordinator: this.config.coordinator,
|
|
79
174
|
zoneId: this.config.zoneId,
|
|
80
175
|
applicationId: this.config.applicationId,
|
|
81
|
-
subjectToken: this.
|
|
176
|
+
subjectToken: await this.rootToken(),
|
|
177
|
+
resourceId: opts.resourceId,
|
|
82
178
|
scopes: opts.scopes,
|
|
83
179
|
constraints: opts.constraints,
|
|
84
180
|
delegationTtlSeconds: opts.delegationTtlSeconds,
|
|
@@ -89,7 +185,7 @@ export class Caracal {
|
|
|
89
185
|
onAgentStart: this.agentStartHooks.length ? (c) => this.fire(this.agentStartHooks, c) : undefined,
|
|
90
186
|
onAgentEnd: this.agentEndHooks.length ? (c) => this.fire(this.agentEndHooks, c) : undefined,
|
|
91
187
|
};
|
|
92
|
-
return delegateToSpawnPrimitive(input, fn);
|
|
188
|
+
return await delegateToSpawnPrimitive(input, fn);
|
|
93
189
|
}
|
|
94
190
|
bind(ctx, fn) {
|
|
95
191
|
return bind(ctx, fn);
|
|
@@ -107,17 +203,30 @@ export class Caracal {
|
|
|
107
203
|
current() {
|
|
108
204
|
return current();
|
|
109
205
|
}
|
|
110
|
-
headers() {
|
|
206
|
+
headers(opts = {}) {
|
|
111
207
|
const ctx = current();
|
|
112
208
|
if (!ctx) {
|
|
209
|
+
if (!opts.allowRoot) {
|
|
210
|
+
throw new Error("Caracal.headers(): no Caracal context is bound. Pass { allowRoot: true } to use the application subject token.");
|
|
211
|
+
}
|
|
113
212
|
return toHeaders({
|
|
114
|
-
subjectToken: this.
|
|
213
|
+
subjectToken: this.rootTokenSync(),
|
|
115
214
|
hop: 0,
|
|
116
215
|
});
|
|
117
216
|
}
|
|
118
217
|
return toHeaders(toEnvelope(ctx));
|
|
119
218
|
}
|
|
120
|
-
|
|
219
|
+
async headersAsync(opts = {}) {
|
|
220
|
+
const ctx = current();
|
|
221
|
+
if (!ctx) {
|
|
222
|
+
if (!opts.allowRoot) {
|
|
223
|
+
throw new Error("Caracal.headersAsync(): no Caracal context is bound. Pass { allowRoot: true } to use the application subject token.");
|
|
224
|
+
}
|
|
225
|
+
return toHeaders({ subjectToken: await this.rootToken(), hop: 0 });
|
|
226
|
+
}
|
|
227
|
+
return toHeaders(toEnvelope(ctx));
|
|
228
|
+
}
|
|
229
|
+
async bindFromHeaders(headers, fn, opts = {}) {
|
|
121
230
|
const env = typeof headers === "function"
|
|
122
231
|
? decodeEnvelope(headers)
|
|
123
232
|
: decodeEnvelope((n) => {
|
|
@@ -130,13 +239,17 @@ export class Caracal {
|
|
|
130
239
|
}
|
|
131
240
|
return undefined;
|
|
132
241
|
});
|
|
133
|
-
if (!env.subjectToken)
|
|
134
|
-
|
|
242
|
+
if (!env.subjectToken) {
|
|
243
|
+
if (!opts.allowRoot) {
|
|
244
|
+
throw new Error("Caracal.bindFromHeaders(): inbound request is missing a bearer token. Pass { allowRoot: true } only for trusted service-root ingress.");
|
|
245
|
+
}
|
|
246
|
+
env.subjectToken = await this.rootToken();
|
|
247
|
+
}
|
|
135
248
|
const ctx = fromEnvelope(env, {
|
|
136
249
|
zoneId: this.config.zoneId,
|
|
137
250
|
clientId: this.config.applicationId,
|
|
138
251
|
});
|
|
139
|
-
return bind(ctx, fn);
|
|
252
|
+
return await bind(ctx, fn);
|
|
140
253
|
}
|
|
141
254
|
/**
|
|
142
255
|
* Returns a fetch-shaped function that injects the Caracal envelope (traceparent
|
|
@@ -144,13 +257,15 @@ export class Caracal {
|
|
|
144
257
|
* `Authorization` header with the current subject token. Pass to any provider
|
|
145
258
|
* SDK that accepts a custom fetch.
|
|
146
259
|
*/
|
|
147
|
-
transport() {
|
|
260
|
+
transport(opts = {}) {
|
|
148
261
|
const outer = this;
|
|
262
|
+
const rootAllowed = opts.allowRoot === true;
|
|
149
263
|
const fn = (async (input, init) => {
|
|
150
264
|
const ctx = current();
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
265
|
+
if (!ctx && !rootAllowed) {
|
|
266
|
+
throw new Error("Caracal.transport(): no Caracal context is bound. Pass { allowRoot: true } to use the application subject token.");
|
|
267
|
+
}
|
|
268
|
+
const env = ctx ? toEnvelope(ctx) : { subjectToken: await outer.rootToken(), hop: 0 };
|
|
154
269
|
const merged = new Headers(init?.headers ?? {});
|
|
155
270
|
for (const [k, v] of Object.entries(toHeaders(env))) {
|
|
156
271
|
if (!merged.has(k))
|
|
@@ -161,13 +276,23 @@ export class Caracal {
|
|
|
161
276
|
const rewritten = outer.routeThroughGateway(input, explicitResource);
|
|
162
277
|
if (rewritten) {
|
|
163
278
|
merged.set("X-Caracal-Resource", rewritten.resourceId);
|
|
164
|
-
merged.set("Authorization", `Bearer ${env.subjectToken
|
|
279
|
+
merged.set("Authorization", `Bearer ${env.subjectToken}`);
|
|
165
280
|
return fetchImpl(rewritten.url, { ...init, headers: merged });
|
|
166
281
|
}
|
|
167
282
|
return fetchImpl(input, { ...init, headers: merged });
|
|
168
283
|
});
|
|
169
284
|
return fn;
|
|
170
285
|
}
|
|
286
|
+
gatewayRequest(resourceId, path = "/") {
|
|
287
|
+
if (!this.config.gatewayUrl)
|
|
288
|
+
throw new Error("Caracal.gatewayRequest(): gatewayUrl is not configured");
|
|
289
|
+
if (!resourceId.trim())
|
|
290
|
+
throw new Error("Caracal.gatewayRequest(): resourceId is required");
|
|
291
|
+
return {
|
|
292
|
+
url: joinGatewayPath(this.config.gatewayUrl, path),
|
|
293
|
+
headers: { "X-Caracal-Resource": resourceId },
|
|
294
|
+
};
|
|
295
|
+
}
|
|
171
296
|
routeThroughGateway(input, explicitResource) {
|
|
172
297
|
const gw = this.config.gatewayUrl;
|
|
173
298
|
if (!gw)
|
|
@@ -205,13 +330,199 @@ export class Caracal {
|
|
|
205
330
|
const target = base + suffix;
|
|
206
331
|
return { url: target, resourceId: binding?.resourceId ?? explicitResource };
|
|
207
332
|
}
|
|
208
|
-
|
|
333
|
+
/**
|
|
334
|
+
* Binds Caracal context after a verifier boundary. This does not verify JWT
|
|
335
|
+
* signatures, audience, scopes, token use, or revocation.
|
|
336
|
+
*/
|
|
337
|
+
contextMiddleware(opts = {}) {
|
|
209
338
|
return (req, _res, next) => {
|
|
210
339
|
this.bindFromHeaders(req.headers, async () => {
|
|
211
340
|
next();
|
|
212
|
-
}).catch(next);
|
|
341
|
+
}, opts).catch(next);
|
|
213
342
|
};
|
|
214
343
|
}
|
|
344
|
+
rootTokenSync() {
|
|
345
|
+
if (this.config.subjectToken)
|
|
346
|
+
return this.config.subjectToken;
|
|
347
|
+
throw new Error("Caracal.headers(): this client uses an async token source. Use headersAsync({ allowRoot: true }) for root headers.");
|
|
348
|
+
}
|
|
349
|
+
async rootToken() {
|
|
350
|
+
if (this.config.tokenSource)
|
|
351
|
+
return await this.config.tokenSource();
|
|
352
|
+
if (this.config.subjectToken)
|
|
353
|
+
return this.config.subjectToken;
|
|
354
|
+
throw new Error("Caracal client has no subject token source");
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
function defaultProfilePath(env = process.env) {
|
|
358
|
+
const xdg = env.XDG_CONFIG_HOME && env.XDG_CONFIG_HOME.length > 0
|
|
359
|
+
? env.XDG_CONFIG_HOME
|
|
360
|
+
: join(homedir(), ".config");
|
|
361
|
+
return join(xdg, "caracal", "caracal.toml");
|
|
362
|
+
}
|
|
363
|
+
function resolveProfilePath(env) {
|
|
364
|
+
if (env.CARACAL_CONFIG) {
|
|
365
|
+
if (!existsSync(env.CARACAL_CONFIG))
|
|
366
|
+
throw new Error(`Caracal.connect: profile not found: ${env.CARACAL_CONFIG}`);
|
|
367
|
+
return env.CARACAL_CONFIG;
|
|
368
|
+
}
|
|
369
|
+
const path = defaultProfilePath(env);
|
|
370
|
+
return existsSync(path) ? path : undefined;
|
|
371
|
+
}
|
|
372
|
+
function assertProfileFileSecure(path) {
|
|
373
|
+
if (process.platform === "win32")
|
|
374
|
+
return;
|
|
375
|
+
const mode = statSync(path).mode & 0o777;
|
|
376
|
+
if ((mode & 0o022) !== 0)
|
|
377
|
+
throw new Error(`Caracal.fromConfig: profile permissions are too broad: ${path}`);
|
|
378
|
+
}
|
|
379
|
+
function assertSecretFileSecure(path) {
|
|
380
|
+
if (process.platform === "win32")
|
|
381
|
+
return;
|
|
382
|
+
const mode = statSync(path).mode & 0o777;
|
|
383
|
+
if ((mode & 0o022) !== 0)
|
|
384
|
+
throw new Error(`Caracal profile secret file permissions are too broad: ${path}`);
|
|
385
|
+
}
|
|
386
|
+
function isRecord(value) {
|
|
387
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
388
|
+
}
|
|
389
|
+
function stringValue(record, key) {
|
|
390
|
+
const value = record[key];
|
|
391
|
+
if (value === undefined)
|
|
392
|
+
return undefined;
|
|
393
|
+
if (typeof value !== "string" || value.length === 0)
|
|
394
|
+
throw new Error(`Caracal profile: ${key} must be a non-empty string`);
|
|
395
|
+
return value;
|
|
396
|
+
}
|
|
397
|
+
function requiredString(record, key, source) {
|
|
398
|
+
const value = stringValue(record, key);
|
|
399
|
+
if (!value)
|
|
400
|
+
throw new Error(`${source}: ${key} is required`);
|
|
401
|
+
return value;
|
|
402
|
+
}
|
|
403
|
+
function clientSecretFromProfile(record, source) {
|
|
404
|
+
const inline = stringValue(record, "app_client_secret");
|
|
405
|
+
const file = stringValue(record, "app_client_secret_file");
|
|
406
|
+
if (inline && file)
|
|
407
|
+
throw new Error(`${source}: set only one of app_client_secret or app_client_secret_file`);
|
|
408
|
+
if (inline)
|
|
409
|
+
return inline;
|
|
410
|
+
if (!file)
|
|
411
|
+
throw new Error(`${source}: app_client_secret_file is required`);
|
|
412
|
+
return readSecretFile(file);
|
|
413
|
+
}
|
|
414
|
+
function clientSecretFromEnv(env) {
|
|
415
|
+
if (env.CARACAL_APP_CLIENT_SECRET && env.CARACAL_APP_CLIENT_SECRET_FILE) {
|
|
416
|
+
throw new Error("Caracal.fromEnv: set only one of CARACAL_APP_CLIENT_SECRET or CARACAL_APP_CLIENT_SECRET_FILE");
|
|
417
|
+
}
|
|
418
|
+
if (env.CARACAL_APP_CLIENT_SECRET_FILE)
|
|
419
|
+
return readSecretFile(env.CARACAL_APP_CLIENT_SECRET_FILE);
|
|
420
|
+
return env.CARACAL_APP_CLIENT_SECRET;
|
|
421
|
+
}
|
|
422
|
+
function readSecretFile(path) {
|
|
423
|
+
if (!existsSync(path))
|
|
424
|
+
throw new Error(`Caracal profile secret file does not exist: ${path}`);
|
|
425
|
+
assertSecretFileSecure(path);
|
|
426
|
+
const secret = readFileSync(path, "utf8").trim();
|
|
427
|
+
if (!secret)
|
|
428
|
+
throw new Error(`Caracal profile secret file is empty: ${path}`);
|
|
429
|
+
return secret;
|
|
430
|
+
}
|
|
431
|
+
function resourcesFromProfile(record, source) {
|
|
432
|
+
const credentials = [
|
|
433
|
+
...credentialEntries(record.credentials, `${source}.credentials`),
|
|
434
|
+
...credentialEntries(record.optional_credentials, `${source}.optional_credentials`),
|
|
435
|
+
];
|
|
436
|
+
const resources = resourcesFromCredentials(credentials);
|
|
437
|
+
if (!resources.resources.length)
|
|
438
|
+
throw new Error(`${source}: at least one credentials or optional_credentials entry is required`);
|
|
439
|
+
return resources;
|
|
440
|
+
}
|
|
441
|
+
function resourcesFromEnv(env) {
|
|
442
|
+
const credentials = credentialManifestFromEnv(env);
|
|
443
|
+
const envBindings = [
|
|
444
|
+
...resourceBindingsFromFile(env.CARACAL_RESOURCES_FILE),
|
|
445
|
+
...(parseResourceBindings(env.CARACAL_RESOURCES) ?? []),
|
|
446
|
+
];
|
|
447
|
+
const resources = resourcesFromCredentials(credentials);
|
|
448
|
+
const byResource = new Map();
|
|
449
|
+
for (const item of resources.resources)
|
|
450
|
+
byResource.set(typeof item === "string" ? item : item.resourceId, item);
|
|
451
|
+
for (const binding of envBindings)
|
|
452
|
+
byResource.set(binding.resourceId, binding);
|
|
453
|
+
const values = [...byResource.values()];
|
|
454
|
+
return { resources: values, bindings: values.filter((value) => typeof value !== "string") };
|
|
455
|
+
}
|
|
456
|
+
function resourceBindingsFromFile(path) {
|
|
457
|
+
if (!path)
|
|
458
|
+
return [];
|
|
459
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
460
|
+
if (Array.isArray(parsed)) {
|
|
461
|
+
return parsed.map((entry, index) => {
|
|
462
|
+
if (!isRecord(entry))
|
|
463
|
+
throw new Error(`CARACAL_RESOURCES_FILE[${index}] must be an object`);
|
|
464
|
+
const resourceId = stringValue(entry, "resource_id");
|
|
465
|
+
const upstreamPrefix = stringValue(entry, "upstream_prefix");
|
|
466
|
+
if (!resourceId || !upstreamPrefix)
|
|
467
|
+
throw new Error(`CARACAL_RESOURCES_FILE[${index}] requires resource_id and upstream_prefix`);
|
|
468
|
+
return { resourceId, upstreamPrefix };
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
if (isRecord(parsed)) {
|
|
472
|
+
return Object.entries(parsed).map(([resourceId, upstreamPrefix]) => {
|
|
473
|
+
if (typeof upstreamPrefix !== "string" || !upstreamPrefix) {
|
|
474
|
+
throw new Error(`CARACAL_RESOURCES_FILE.${resourceId} must be a non-empty string`);
|
|
475
|
+
}
|
|
476
|
+
return { resourceId, upstreamPrefix };
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
throw new Error("CARACAL_RESOURCES_FILE must contain an object or array");
|
|
480
|
+
}
|
|
481
|
+
function credentialManifestFromEnv(env) {
|
|
482
|
+
const file = env.CARACAL_RUN_CREDENTIALS_FILE;
|
|
483
|
+
const inline = env.CARACAL_RUN_CREDENTIALS;
|
|
484
|
+
if (file && inline)
|
|
485
|
+
throw new Error("Caracal.fromEnv: set only one of CARACAL_RUN_CREDENTIALS or CARACAL_RUN_CREDENTIALS_FILE");
|
|
486
|
+
if (!file && !inline)
|
|
487
|
+
return [];
|
|
488
|
+
const raw = file ? readSecretFile(file) : inline;
|
|
489
|
+
const parsed = JSON.parse(raw);
|
|
490
|
+
const manifest = Array.isArray(parsed) ? { credentials: parsed } : parsed;
|
|
491
|
+
if (!isRecord(manifest))
|
|
492
|
+
throw new Error("Caracal.fromEnv: credential manifest must be an array or object");
|
|
493
|
+
return [
|
|
494
|
+
...credentialEntries(manifest.credentials, "CARACAL_RUN_CREDENTIALS.credentials"),
|
|
495
|
+
...credentialEntries(manifest.optional_credentials, "CARACAL_RUN_CREDENTIALS.optional_credentials"),
|
|
496
|
+
];
|
|
497
|
+
}
|
|
498
|
+
function credentialEntries(value, source) {
|
|
499
|
+
if (value === undefined)
|
|
500
|
+
return [];
|
|
501
|
+
if (!Array.isArray(value))
|
|
502
|
+
throw new Error(`${source} must be an array`);
|
|
503
|
+
return value.map((entry, index) => {
|
|
504
|
+
if (!isRecord(entry))
|
|
505
|
+
throw new Error(`${source}[${index}] must be an object`);
|
|
506
|
+
const resource = stringValue(entry, "resource");
|
|
507
|
+
if (!resource)
|
|
508
|
+
throw new Error(`${source}[${index}].resource is required`);
|
|
509
|
+
const upstreamPrefix = stringValue(entry, "upstream_prefix");
|
|
510
|
+
return upstreamPrefix ? { resource, upstream_prefix: upstreamPrefix } : { resource };
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
function resourcesFromCredentials(credentials) {
|
|
514
|
+
const values = [];
|
|
515
|
+
const seen = new Set();
|
|
516
|
+
for (const credential of credentials) {
|
|
517
|
+
if (seen.has(credential.resource))
|
|
518
|
+
continue;
|
|
519
|
+
seen.add(credential.resource);
|
|
520
|
+
values.push(credential.upstream_prefix
|
|
521
|
+
? { resourceId: credential.resource, upstreamPrefix: credential.upstream_prefix }
|
|
522
|
+
: credential.resource);
|
|
523
|
+
}
|
|
524
|
+
const bindings = values.filter((value) => typeof value !== "string");
|
|
525
|
+
return { resources: values, bindings };
|
|
215
526
|
}
|
|
216
527
|
function sameOrigin(a, b) {
|
|
217
528
|
try {
|
|
@@ -222,6 +533,18 @@ function sameOrigin(a, b) {
|
|
|
222
533
|
return false;
|
|
223
534
|
}
|
|
224
535
|
}
|
|
536
|
+
function joinGatewayPath(gatewayUrl, path) {
|
|
537
|
+
if (/^[A-Za-z][A-Za-z0-9+.-]*:/.test(path)) {
|
|
538
|
+
throw new Error("Caracal.gatewayRequest(): path must be relative to the configured gateway");
|
|
539
|
+
}
|
|
540
|
+
const gateway = new URL(gatewayUrl);
|
|
541
|
+
const normalized = path.startsWith("/") ? path : `/${path}`;
|
|
542
|
+
const queryIndex = normalized.indexOf("?");
|
|
543
|
+
const pathname = queryIndex === -1 ? normalized : normalized.slice(0, queryIndex);
|
|
544
|
+
const query = queryIndex === -1 ? "" : normalized.slice(queryIndex + 1);
|
|
545
|
+
const base = gateway.origin + gateway.pathname.replace(/\/$/, "");
|
|
546
|
+
return `${base}${pathname || "/"}${query ? `?${query}` : ""}`;
|
|
547
|
+
}
|
|
225
548
|
function urlMatchesPrefix(target, prefix) {
|
|
226
549
|
let p;
|
|
227
550
|
try {
|
|
@@ -242,21 +565,51 @@ function parseResourceBindings(raw) {
|
|
|
242
565
|
if (!raw)
|
|
243
566
|
return undefined;
|
|
244
567
|
const out = [];
|
|
245
|
-
|
|
568
|
+
const errors = [];
|
|
569
|
+
for (const [index, entry] of raw.split(",").entries()) {
|
|
246
570
|
const trimmed = entry.trim();
|
|
247
571
|
if (!trimmed)
|
|
248
572
|
continue;
|
|
249
573
|
const idx = trimmed.indexOf("=");
|
|
250
|
-
if (idx <= 0)
|
|
574
|
+
if (idx <= 0) {
|
|
575
|
+
errors.push(`entry ${index + 1} must use resourceId=upstreamPrefix`);
|
|
251
576
|
continue;
|
|
577
|
+
}
|
|
252
578
|
const resourceId = trimmed.slice(0, idx).trim();
|
|
253
579
|
const upstreamPrefix = trimmed.slice(idx + 1).trim();
|
|
254
|
-
if (resourceId
|
|
255
|
-
|
|
580
|
+
if (!resourceId || !upstreamPrefix) {
|
|
581
|
+
errors.push(`entry ${index + 1} must contain non-empty resourceId and upstreamPrefix`);
|
|
582
|
+
continue;
|
|
256
583
|
}
|
|
584
|
+
try {
|
|
585
|
+
new URL(upstreamPrefix);
|
|
586
|
+
}
|
|
587
|
+
catch {
|
|
588
|
+
errors.push(`entry ${index + 1} upstreamPrefix must be an absolute URL`);
|
|
589
|
+
continue;
|
|
590
|
+
}
|
|
591
|
+
out.push({ resourceId, upstreamPrefix });
|
|
592
|
+
}
|
|
593
|
+
if (errors.length) {
|
|
594
|
+
throw new Error(`Caracal.fromEnv: invalid CARACAL_RESOURCES:\n- ${errors.join("\n- ")}`);
|
|
257
595
|
}
|
|
258
596
|
return out.length ? sortBindingsLongestFirst(out) : undefined;
|
|
259
597
|
}
|
|
598
|
+
function resourceIdsFromEnv(raw, resources) {
|
|
599
|
+
const explicit = raw?.split(",").map((value) => value.trim()).filter(Boolean);
|
|
600
|
+
if (explicit?.length)
|
|
601
|
+
return explicit;
|
|
602
|
+
if (resources?.length)
|
|
603
|
+
return resources;
|
|
604
|
+
throw new Error("Caracal.fromEnv: client-secret mode requires resources via CARACAL_APP_RESOURCES, CARACAL_RUN_CREDENTIALS, or CARACAL_RESOURCES");
|
|
605
|
+
}
|
|
606
|
+
function createClientSecretTokenSource(stsUrl, zoneId, applicationId, clientSecret, resources, scope = "agent:lifecycle") {
|
|
607
|
+
const client = new OAuthClient(stsUrl, zoneId, applicationId);
|
|
608
|
+
return async () => {
|
|
609
|
+
const token = await client.exchange("", resources, { clientSecret, scopes: [scope] });
|
|
610
|
+
return token.accessToken;
|
|
611
|
+
};
|
|
612
|
+
}
|
|
260
613
|
function sortBindingsLongestFirst(bindings) {
|
|
261
614
|
return [...bindings].sort((a, b) => b.upstreamPrefix.length - a.upstreamPrefix.length);
|
|
262
615
|
}
|
|
@@ -290,7 +643,7 @@ function validateSubjectToken(token) {
|
|
|
290
643
|
if (typeof payload.exp !== "number")
|
|
291
644
|
return;
|
|
292
645
|
if (payload.exp <= Math.floor(Date.now() / 1000)) {
|
|
293
|
-
throw new Error("CARACAL_SUBJECT_TOKEN is expired
|
|
646
|
+
throw new Error("CARACAL_SUBJECT_TOKEN is expired: refresh the bootstrap token before starting the application");
|
|
294
647
|
}
|
|
295
648
|
}
|
|
296
649
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|