@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/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: parseResourceBindings(env.CARACAL_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.config.subjectToken,
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.config.subjectToken,
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.config.subjectToken,
213
+ subjectToken: this.rootTokenSync(),
115
214
  hop: 0,
116
215
  });
117
216
  }
118
217
  return toHeaders(toEnvelope(ctx));
119
218
  }
120
- bindFromHeaders(headers, fn) {
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
- env.subjectToken = this.config.subjectToken;
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
- const env = ctx
152
- ? toEnvelope(ctx)
153
- : { subjectToken: outer.config.subjectToken, hop: 0 };
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 ?? outer.config.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
- middleware() {
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
- for (const entry of raw.split(",")) {
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 && upstreamPrefix) {
255
- out.push({ resourceId, upstreamPrefix });
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 refresh the bootstrap token before starting the application");
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
@@ -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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"}