@standardagents/builder 0.41.6 → 0.41.7

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.
@@ -79652,7 +79652,7 @@ var config_get_default = defineController2(async ({ config, env: env2, req }) =>
79652
79652
  });
79653
79653
 
79654
79654
  // src/version.ts
79655
- var BUILDER_VERSION = "0.41.6".length > 0 ? "0.41.6" : "dev";
79655
+ var BUILDER_VERSION = "0.41.7".length > 0 ? "0.41.7" : "dev";
79656
79656
 
79657
79657
  // src/api/diagnostics.get.ts
79658
79658
  init_LLMRequest();
@@ -85828,6 +85828,25 @@ var env_patch_default = defineController2(async ({ req, env: env2, params }) =>
85828
85828
  }
85829
85829
  });
85830
85830
 
85831
+ // src/api/users/[id]/grants/index.get.ts
85832
+ var index_get_default4 = defineController2(async ({ req, env: env2, params }) => {
85833
+ const auth = await requireAdmin(req, env2);
85834
+ if (auth instanceof Response) return auth;
85835
+ const userId = params.id;
85836
+ if (!userId) return Response.json({ error: "User ID is required" }, { status: 400 });
85837
+ const builder = env2.AGENT_BUILDER.get(env2.AGENT_BUILDER.idFromName("singleton"));
85838
+ if (!await builder.getUserById(userId)) {
85839
+ return Response.json({ error: "User not found" }, { status: 404 });
85840
+ }
85841
+ if (!env2.AGENT_BUILDER_USER_HUB) {
85842
+ return Response.json({ error: "The user scope is not available on this runtime" }, { status: 500 });
85843
+ }
85844
+ const hub = env2.AGENT_BUILDER_USER_HUB.get(
85845
+ env2.AGENT_BUILDER_USER_HUB.idFromName(userId)
85846
+ );
85847
+ return Response.json({ grants: await hub.listGrants(userId) });
85848
+ });
85849
+
85831
85850
  // src/api/users/[id]/stream.ts
85832
85851
  var stream_default2 = defineController2(async (context) => {
85833
85852
  const { req, env: env2, params } = context;
@@ -86337,7 +86356,7 @@ var index_delete_default = defineController2(async ({ req, env: env2 }) => {
86337
86356
  });
86338
86357
 
86339
86358
  // src/api/users/me/kv/index.get.ts
86340
- var index_get_default4 = defineController2(async ({ req, env: env2 }) => {
86359
+ var index_get_default5 = defineController2(async ({ req, env: env2 }) => {
86341
86360
  try {
86342
86361
  const authResult = await requireAuth(req, env2);
86343
86362
  if (authResult instanceof Response) {
@@ -87484,6 +87503,124 @@ var requestId_post_default = defineController2(async ({ req, params, env: env2 }
87484
87503
  }
87485
87504
  });
87486
87505
 
87506
+ // src/api/users/[id]/grants/[name].delete.ts
87507
+ var name_delete_default2 = defineController2(async ({ req, env: env2, params }) => {
87508
+ const auth = await requireAdmin(req, env2);
87509
+ if (auth instanceof Response) return auth;
87510
+ const userId = params.id;
87511
+ const name15 = params.name;
87512
+ if (!userId || !name15) return Response.json({ error: "User ID and grant name are required" }, { status: 400 });
87513
+ const builder = env2.AGENT_BUILDER.get(env2.AGENT_BUILDER.idFromName("singleton"));
87514
+ if (!await builder.getUserById(userId)) {
87515
+ return Response.json({ error: "User not found" }, { status: 404 });
87516
+ }
87517
+ if (!env2.AGENT_BUILDER_USER_HUB) {
87518
+ return Response.json({ error: "The user scope is not available on this runtime" }, { status: 500 });
87519
+ }
87520
+ const hub = env2.AGENT_BUILDER_USER_HUB.get(
87521
+ env2.AGENT_BUILDER_USER_HUB.idFromName(userId)
87522
+ );
87523
+ await hub.deleteGrant(userId, name15);
87524
+ return new Response(null, { status: 204 });
87525
+ });
87526
+ var GRANT_NAME = /^[a-z0-9][a-z0-9._-]{0,127}$/;
87527
+ var HEADER_NAME = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
87528
+ var QUERY_NAME = /^[A-Za-z0-9._~-]{1,128}$/;
87529
+ var SUPPORTED_KINDS = /* @__PURE__ */ new Set(["bearer", "header", "query", "basic"]);
87530
+ var RECORD_KEYS = /* @__PURE__ */ new Set(["name", "kind", "origins", "inject", "allow", "metadata", "secret"]);
87531
+ var ALLOW_KEYS = /* @__PURE__ */ new Set(["tools", "endpoints", "userEndpoints", "agents"]);
87532
+ var INJECT_KEYS = /* @__PURE__ */ new Set(["header", "format", "query"]);
87533
+ function validateCredentialGrantRecord(value, routeName) {
87534
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
87535
+ const input = value;
87536
+ if (Object.keys(input).some((key) => !RECORD_KEYS.has(key))) return null;
87537
+ const name15 = routeName ?? input.name;
87538
+ if (typeof name15 !== "string" || !GRANT_NAME.test(name15)) return null;
87539
+ if (input.name !== void 0 && input.name !== name15) return null;
87540
+ if (typeof input.secret !== "string" || input.secret.length === 0 || input.secret.length > 16 * 1024) return null;
87541
+ if (typeof input.kind !== "string" || !SUPPORTED_KINDS.has(input.kind)) return null;
87542
+ if ((input.kind === "bearer" || input.kind === "header") && /[\r\n]/.test(input.secret)) return null;
87543
+ if (!Array.isArray(input.origins) || input.origins.length === 0 || input.origins.length > 64) return null;
87544
+ const origins = [];
87545
+ for (const origin of input.origins) {
87546
+ if (typeof origin !== "string" || origin.length > 512) return null;
87547
+ if (origin.startsWith("*.")) {
87548
+ if (!/^\*\.[a-z0-9.-]+$/i.test(origin)) return null;
87549
+ } else {
87550
+ try {
87551
+ const url = new URL(origin);
87552
+ if (url.origin !== origin || url.protocol !== "https:" || url.username || url.password) return null;
87553
+ } catch {
87554
+ return null;
87555
+ }
87556
+ }
87557
+ origins.push(origin);
87558
+ }
87559
+ if (!input.allow || typeof input.allow !== "object" || Array.isArray(input.allow)) return null;
87560
+ const allowInput = input.allow;
87561
+ if (Object.keys(allowInput).some((key) => !ALLOW_KEYS.has(key))) return null;
87562
+ const allow = {};
87563
+ for (const key of ["tools", "endpoints", "userEndpoints", "agents"]) {
87564
+ const list = allowInput[key];
87565
+ if (list === void 0) continue;
87566
+ if (!Array.isArray(list) || list.length > 128 || !list.every((item) => typeof item === "string" && item.length > 0 && item.length <= 256)) {
87567
+ return null;
87568
+ }
87569
+ allow[key] = [...list];
87570
+ }
87571
+ if (Object.keys(allow).length === 0) return null;
87572
+ const inject = input.inject;
87573
+ if (inject !== void 0 && (!inject || typeof inject !== "object" || Array.isArray(inject))) return null;
87574
+ if (inject !== void 0) {
87575
+ const injection = inject;
87576
+ if (Object.keys(injection).some((key) => !INJECT_KEYS.has(key))) return null;
87577
+ if (injection.header !== void 0 && (typeof injection.header !== "string" || !HEADER_NAME.test(injection.header))) return null;
87578
+ if (injection.format !== void 0 && (typeof injection.format !== "string" || injection.format.length > 1024 || /[\r\n]/.test(injection.format))) return null;
87579
+ if (injection.query !== void 0 && (typeof injection.query !== "string" || !QUERY_NAME.test(injection.query))) return null;
87580
+ }
87581
+ const metadata = input.metadata;
87582
+ if (metadata !== void 0 && (!metadata || typeof metadata !== "object" || Array.isArray(metadata))) return null;
87583
+ if (metadata !== void 0) {
87584
+ try {
87585
+ if (JSON.stringify(metadata).length > 16 * 1024) return null;
87586
+ } catch {
87587
+ return null;
87588
+ }
87589
+ }
87590
+ const grant = {
87591
+ name: name15,
87592
+ kind: input.kind,
87593
+ origins,
87594
+ allow,
87595
+ ...inject === void 0 ? {} : { inject },
87596
+ ...metadata === void 0 ? {} : { metadata }
87597
+ };
87598
+ return { grant, secret: input.secret };
87599
+ }
87600
+
87601
+ // src/api/users/[id]/grants/[name].put.ts
87602
+ var name_put_default = defineController2(async ({ req, env: env2, params }) => {
87603
+ const auth = await requireAdmin(req, env2);
87604
+ if (auth instanceof Response) return auth;
87605
+ const userId = params.id;
87606
+ const name15 = params.name;
87607
+ if (!userId || !name15) return Response.json({ error: "User ID and grant name are required" }, { status: 400 });
87608
+ const record24 = validateCredentialGrantRecord(await req.json().catch(() => null), name15);
87609
+ if (!record24) return Response.json({ error: "Invalid credential grant" }, { status: 400 });
87610
+ const builder = env2.AGENT_BUILDER.get(env2.AGENT_BUILDER.idFromName("singleton"));
87611
+ if (!await builder.getUserById(userId)) {
87612
+ return Response.json({ error: "User not found" }, { status: 404 });
87613
+ }
87614
+ if (!env2.AGENT_BUILDER_USER_HUB) {
87615
+ return Response.json({ error: "The user scope is not available on this runtime" }, { status: 500 });
87616
+ }
87617
+ const hub = env2.AGENT_BUILDER_USER_HUB.get(
87618
+ env2.AGENT_BUILDER_USER_HUB.idFromName(userId)
87619
+ );
87620
+ await hub.setGrant(userId, record24.grant, record24.secret);
87621
+ return new Response(null, { status: 204 });
87622
+ });
87623
+
87487
87624
  // src/api/threads/[id]/effects/[effectId]/cancel.post.ts
87488
87625
  async function getAuthorizedThreadStub3(req, env2, threadId) {
87489
87626
  const authResult = await requireAuth(req, env2);
@@ -87949,6 +88086,7 @@ var routeHandlers = {
87949
88086
  "GET:/users/:id/**": rest_default,
87950
88087
  "GET:/users/:id/env": env_get_default,
87951
88088
  "PATCH:/users/:id/env": env_patch_default,
88089
+ "GET:/users/:id/grants": index_get_default4,
87952
88090
  "GET:/users/:id/stream": stream_default2,
87953
88091
  "GET:/variables/agents/:name": name_get_default6,
87954
88092
  "GET:/variables/prompts/:name": name_get_default7,
@@ -87965,7 +88103,7 @@ var routeHandlers = {
87965
88103
  "PATCH:/users/me/env": env_patch_default2,
87966
88104
  "GET:/users/me/hub": hub_default,
87967
88105
  "DELETE:/users/me/kv": index_delete_default,
87968
- "GET:/users/me/kv": index_get_default4,
88106
+ "GET:/users/me/kv": index_get_default5,
87969
88107
  "POST:/users/me/kv": index_post_default7,
87970
88108
  "GET:/users/me/stream": stream_default3,
87971
88109
  "GET:/auth/device/:code/approve": approve_get_default,
@@ -87979,6 +88117,8 @@ var routeHandlers = {
87979
88117
  "PATCH:/threads/:id/messages/:messageId": messageId_patch_default,
87980
88118
  "GET:/threads/:id/variables/:requestId": requestId_get_default,
87981
88119
  "POST:/threads/:id/variables/:requestId": requestId_post_default,
88120
+ "DELETE:/users/:id/grants/:name": name_delete_default2,
88121
+ "PUT:/users/:id/grants/:name": name_put_default,
87982
88122
  "POST:/threads/:id/effects/:effectId/cancel": cancel_post_default,
87983
88123
  "POST:/threads/:id/effects/:effectId/run": run_post_default,
87984
88124
  "GET:/threads/:id/logs/:logId/inspect/:provider": provider_get_default