@dxos/edge-client 0.9.0 → 0.9.1-staging.ee54ba693a

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.
Files changed (56) hide show
  1. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  2. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  3. package/dist/lib/neutral/cors-proxy.mjs +1 -0
  4. package/dist/lib/neutral/edge-ws-muxer.mjs +1 -0
  5. package/dist/lib/neutral/index.mjs +111 -35
  6. package/dist/lib/neutral/index.mjs.map +3 -3
  7. package/dist/lib/neutral/meta.json +1 -1
  8. package/dist/lib/neutral/service/index.mjs +134 -0
  9. package/dist/lib/neutral/service/index.mjs.map +7 -0
  10. package/dist/lib/neutral/testing/index.mjs +2 -1
  11. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  12. package/dist/types/src/auth.d.ts.map +1 -1
  13. package/dist/types/src/browser-rendering.d.ts +28 -0
  14. package/dist/types/src/browser-rendering.d.ts.map +1 -0
  15. package/dist/types/src/edge-ai-http-client.d.ts +39 -0
  16. package/dist/types/src/edge-ai-http-client.d.ts.map +1 -1
  17. package/dist/types/src/edge-ai-http-client.test.d.ts +2 -0
  18. package/dist/types/src/edge-ai-http-client.test.d.ts.map +1 -0
  19. package/dist/types/src/edge-client.d.ts +3 -2
  20. package/dist/types/src/edge-client.d.ts.map +1 -1
  21. package/dist/types/src/edge-http-client.d.ts +19 -4
  22. package/dist/types/src/edge-http-client.d.ts.map +1 -1
  23. package/dist/types/src/edge-identity.d.ts +5 -1
  24. package/dist/types/src/edge-identity.d.ts.map +1 -1
  25. package/dist/types/src/hub-http-client.d.ts +8 -1
  26. package/dist/types/src/hub-http-client.d.ts.map +1 -1
  27. package/dist/types/src/service/Image.d.ts +25 -0
  28. package/dist/types/src/service/Image.d.ts.map +1 -0
  29. package/dist/types/src/service/edge-service.d.ts +36 -0
  30. package/dist/types/src/service/edge-service.d.ts.map +1 -0
  31. package/dist/types/src/service/edge-service.test.d.ts +2 -0
  32. package/dist/types/src/service/edge-service.test.d.ts.map +1 -0
  33. package/dist/types/src/service/image-service.e2e.test.d.ts +2 -0
  34. package/dist/types/src/service/image-service.e2e.test.d.ts.map +1 -0
  35. package/dist/types/src/service/index.d.ts +3 -0
  36. package/dist/types/src/service/index.d.ts.map +1 -0
  37. package/dist/types/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +22 -17
  39. package/src/auth.ts +6 -6
  40. package/src/base-http-client.ts +1 -1
  41. package/src/browser-rendering.ts +39 -0
  42. package/src/edge-ai-http-client.test.ts +37 -0
  43. package/src/edge-ai-http-client.ts +87 -2
  44. package/src/edge-client.test.ts +1 -1
  45. package/src/edge-client.ts +9 -7
  46. package/src/edge-http-client.ts +25 -10
  47. package/src/edge-identity.ts +5 -1
  48. package/src/edge-ws-connection.ts +1 -1
  49. package/src/edge-ws-muxer.test.ts +1 -1
  50. package/src/hub-http-client.ts +20 -0
  51. package/src/service/Image.ts +61 -0
  52. package/src/service/edge-service.test.ts +151 -0
  53. package/src/service/edge-service.ts +139 -0
  54. package/src/service/image-service.e2e.test.ts +53 -0
  55. package/src/service/index.ts +7 -0
  56. package/src/testing/test-utils.ts +1 -1
@@ -0,0 +1,10 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ export {
8
+ __export
9
+ };
10
+ //# sourceMappingURL=chunk-J5LGTIGS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  proxyFetchLegacy
3
3
  } from "./chunk-WQKMEZJR.mjs";
4
+ import "./chunk-J5LGTIGS.mjs";
4
5
  export {
5
6
  proxyFetchLegacy
6
7
  };
@@ -3,6 +3,7 @@ import {
3
3
  CLOUDFLARE_RPC_MAX_BYTES,
4
4
  WebSocketMuxer
5
5
  } from "./chunk-L5ZHLJ4B.mjs";
6
+ import "./chunk-J5LGTIGS.mjs";
6
7
  export {
7
8
  CLOUDFLARE_MESSAGE_MAX_BYTES,
8
9
  CLOUDFLARE_RPC_MAX_BYTES,
@@ -10,19 +10,20 @@ import {
10
10
  protocol,
11
11
  toUint8Array
12
12
  } from "./chunk-L5ZHLJ4B.mjs";
13
+ import "./chunk-J5LGTIGS.mjs";
13
14
 
14
15
  // src/index.ts
15
16
  export * from "@dxos/protocols/buf/dxos/edge/messenger_pb";
16
17
 
17
18
  // src/auth.ts
18
- import { createCredential, signPresentation } from "@dxos/credentials";
19
+ import { createCredential, createDidFromIdentityKey, signPresentation } from "@dxos/credentials";
19
20
  import { invariant } from "@dxos/invariant";
20
21
  import { Keyring } from "@dxos/keyring";
21
- import { PublicKey } from "@dxos/keys";
22
+ import { IdentityDid, PublicKey } from "@dxos/keys";
22
23
  var __dxlog_file = "/__w/dxos/dxos/packages/core/mesh/edge-client/src/auth.ts";
23
24
  var createDeviceEdgeIdentity = async (signer, key) => {
24
25
  return {
25
- identityKey: key.toHex(),
26
+ identityDid: await createDidFromIdentityKey(key),
26
27
  peerKey: key.toHex(),
27
28
  presentCredentials: async ({ challenge }) => {
28
29
  return signPresentation({
@@ -60,7 +61,7 @@ var createChainEdgeIdentity = async (signer, identityKey, peerKey, chain, creden
60
61
  })
61
62
  ];
62
63
  return {
63
- identityKey: identityKey.toHex(),
64
+ identityDid: await createDidFromIdentityKey(identityKey),
64
65
  peerKey: peerKey.toHex(),
65
66
  presentCredentials: async ({ challenge }) => {
66
67
  invariant(chain, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 56, S: void 0, A: ["chain", ""] });
@@ -106,10 +107,10 @@ var createTestHaloEdgeIdentity = async (signer, identityKey, deviceKey) => {
106
107
  ]);
107
108
  };
108
109
  var createStubEdgeIdentity = () => {
109
- const identityKey = PublicKey.random();
110
110
  const deviceKey = PublicKey.random();
111
111
  return {
112
- identityKey: identityKey.toHex(),
112
+ // Random placeholder DID — the stub never authenticates or connects; a real identity replaces it.
113
+ identityDid: IdentityDid.random(),
113
114
  peerKey: deviceKey.toHex(),
114
115
  presentCredentials: async () => {
115
116
  throw new Error("Stub identity does not support authentication.");
@@ -184,7 +185,7 @@ var EdgeWsConnection = class extends Resource {
184
185
  get info() {
185
186
  return {
186
187
  open: this.isOpen,
187
- identity: this._identity.identityKey,
188
+ identity: this._identity.identityDid,
188
189
  device: this._identity.peerKey
189
190
  };
190
191
  }
@@ -459,7 +460,7 @@ var EdgeClient = class extends Resource2 {
459
460
  return {
460
461
  open: this.isOpen,
461
462
  status: this.status,
462
- identity: this._identity.identityKey,
463
+ identity: this._identity.identityDid,
463
464
  device: this._identity.peerKey
464
465
  };
465
466
  }
@@ -474,14 +475,14 @@ var EdgeClient = class extends Resource2 {
474
475
  messagesReceived: this._currentConnection?.messagesReceived ?? 0
475
476
  };
476
477
  }
477
- get identityKey() {
478
- return this._identity.identityKey;
478
+ get identityDid() {
479
+ return this._identity.identityDid;
479
480
  }
480
481
  get peerKey() {
481
482
  return this._identity.peerKey;
482
483
  }
483
484
  setIdentity(identity) {
484
- if (identity.identityKey !== this._identity.identityKey || identity.peerKey !== this._identity.peerKey) {
485
+ if (identity.identityDid !== this._identity.identityDid || identity.peerKey !== this._identity.peerKey) {
485
486
  log2("Edge identity changed", {
486
487
  identity,
487
488
  oldIdentity: this._identity
@@ -505,7 +506,7 @@ var EdgeClient = class extends Resource2 {
505
506
  if (!this._currentConnection) {
506
507
  throw new EdgeConnectionClosedError();
507
508
  }
508
- if (message.source && (message.source.peerKey !== this._identity.peerKey || message.source.identityKey !== this.identityKey)) {
509
+ if (message.source && (message.source.peerKey !== this._identity.peerKey || message.source.identityDid !== this.identityDid)) {
509
510
  throw new EdgeIdentityChangedError();
510
511
  }
511
512
  const traceCtx = ctx.getAttribute(TRACE_SPAN_ATTRIBUTE);
@@ -530,7 +531,7 @@ var EdgeClient = class extends Resource2 {
530
531
  try {
531
532
  listener();
532
533
  } catch (error) {
533
- log2.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 123, S: this });
534
+ log2.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 124, S: this });
534
535
  }
535
536
  }
536
537
  });
@@ -543,11 +544,11 @@ var EdgeClient = class extends Resource2 {
543
544
  async _open() {
544
545
  log2("opening...", {
545
546
  info: this.info
546
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 133, S: this });
547
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 134, S: this });
547
548
  this._persistentLifecycle.open().catch((err) => {
548
549
  log2.warn("Error while opening connection", {
549
550
  err
550
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 137, S: this });
551
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 138, S: this });
551
552
  });
552
553
  scheduleTaskInterval2(this._ctx, async () => {
553
554
  if (!this._currentConnection) {
@@ -562,7 +563,7 @@ var EdgeClient = class extends Resource2 {
562
563
  async _close() {
563
564
  log2("closing...", {
564
565
  peerKey: this._identity.peerKey
565
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 152, S: this });
566
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 153, S: this });
566
567
  this._closeCurrentConnection();
567
568
  await this._persistentLifecycle.close();
568
569
  }
@@ -571,10 +572,10 @@ var EdgeClient = class extends Resource2 {
571
572
  return void 0;
572
573
  }
573
574
  const identity = this._identity;
574
- const path = `/ws/${identity.identityKey}/${identity.peerKey}`;
575
+ const path = `/ws/${identity.identityDid}/${identity.peerKey}`;
575
576
  const protocolHeader = this._config.disableAuth ? void 0 : await this._createAuthHeader(path);
576
577
  if (this._identity !== identity) {
577
- log2("identity changed during auth header request", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 166, S: this });
578
+ log2("identity changed during auth header request", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 167, S: this });
578
579
  return void 0;
579
580
  }
580
581
  const restartRequired = new Trigger();
@@ -582,7 +583,7 @@ var EdgeClient = class extends Resource2 {
582
583
  log2("Opening websocket", {
583
584
  url: url.toString(),
584
585
  protocolHeader
585
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 171, S: this });
586
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 172, S: this });
586
587
  const connection = new EdgeWsConnection(identity, {
587
588
  url,
588
589
  protocolHeader,
@@ -595,7 +596,7 @@ var EdgeClient = class extends Resource2 {
595
596
  this._ready.wake();
596
597
  this._notifyReconnected();
597
598
  } else {
598
- log2.verbose("connected callback ignored, because connection is not active", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 187, S: this });
599
+ log2.verbose("connected callback ignored, because connection is not active", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 188, S: this });
599
600
  }
600
601
  },
601
602
  onRestartRequired: () => {
@@ -603,7 +604,7 @@ var EdgeClient = class extends Resource2 {
603
604
  this._closeCurrentConnection();
604
605
  void this._persistentLifecycle.scheduleRestart();
605
606
  } else {
606
- log2.verbose("restart requested by inactive connection", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 195, S: this });
607
+ log2.verbose("restart requested by inactive connection", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 196, S: this });
607
608
  }
608
609
  restartRequired.wake();
609
610
  },
@@ -614,7 +615,7 @@ var EdgeClient = class extends Resource2 {
614
615
  log2.verbose("ignored a message on inactive connection", {
615
616
  from: message.source,
616
617
  type: message.payload?.typeUrl
617
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 203, S: this });
618
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 204, S: this });
618
619
  }
619
620
  }
620
621
  });
@@ -649,7 +650,7 @@ var EdgeClient = class extends Resource2 {
649
650
  } catch (err) {
650
651
  log2.error("ws reconnect listener failed", {
651
652
  err
652
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 244, S: this });
653
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 245, S: this });
653
654
  }
654
655
  }
655
656
  }
@@ -661,7 +662,7 @@ var EdgeClient = class extends Resource2 {
661
662
  log2.error("ws incoming message processing failed", {
662
663
  err,
663
664
  payload: protocol.getPayloadType(message)
664
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 255, S: this });
665
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 256, S: this });
665
666
  }
666
667
  }
667
668
  }
@@ -677,7 +678,7 @@ var EdgeClient = class extends Resource2 {
677
678
  log2.warn("no auth challenge from edge", {
678
679
  status: response.status,
679
680
  statusText: response.statusText
680
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 271, S: this });
681
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 272, S: this });
681
682
  return void 0;
682
683
  }
683
684
  }
@@ -759,7 +760,7 @@ var BaseHttpClient = class {
759
760
  return this._baseUrl;
760
761
  }
761
762
  setIdentity(identity) {
762
- if (this._edgeIdentity?.identityKey !== identity.identityKey || this._edgeIdentity?.peerKey !== identity.peerKey) {
763
+ if (this._edgeIdentity?.identityDid !== identity.identityDid || this._edgeIdentity?.peerKey !== identity.peerKey) {
763
764
  this._edgeIdentity = identity;
764
765
  this._authHeader = void 0;
765
766
  }
@@ -934,7 +935,46 @@ var ByokError = class extends BaseError.extend("ByokError", "BYOK authentication
934
935
  });
935
936
  }
936
937
  };
938
+ var UsageQuotaExceededError = class extends BaseError.extend("UsageQuotaExceededError", "Usage quota exceeded") {
939
+ };
937
940
  var requestInitTagKey = "@effect/platform/FetchHttpClient/FetchOptions";
941
+ var isUserDefinedAnthropicTool = (tool) => tool.input_schema != null && typeof tool.input_schema === "object";
942
+ var patchAnthropicMessagesRequestBody = (body) => {
943
+ if (body == null) {
944
+ return body;
945
+ }
946
+ const decodeBody = () => {
947
+ if (typeof body === "string") {
948
+ return body;
949
+ }
950
+ if (body instanceof Uint8Array) {
951
+ return new TextDecoder().decode(body);
952
+ }
953
+ return void 0;
954
+ };
955
+ const text = decodeBody();
956
+ if (text == null) {
957
+ return body;
958
+ }
959
+ try {
960
+ const payload = JSON.parse(text);
961
+ if (!Array.isArray(payload.tools)) {
962
+ return body;
963
+ }
964
+ payload.tools = payload.tools.map((tool) => isUserDefinedAnthropicTool(tool) ? {
965
+ ...tool,
966
+ eager_input_streaming: true
967
+ } : tool);
968
+ const patched = JSON.stringify(payload);
969
+ return typeof body === "string" ? patched : new TextEncoder().encode(patched);
970
+ } catch {
971
+ return body;
972
+ }
973
+ };
974
+ var readStreamBody = (stream) => Effect2.promise(async () => {
975
+ const response = new Response(stream);
976
+ return await response.text();
977
+ });
938
978
  var EdgeAiHttpClient = class _EdgeAiHttpClient {
939
979
  static make = (getClient) => HttpClient.make((request, url, signal, fiber) => {
940
980
  const edgeClient = getClient();
@@ -947,13 +987,13 @@ var EdgeAiHttpClient = class _EdgeAiHttpClient {
947
987
  ...options,
948
988
  method: request.method,
949
989
  headers,
950
- body,
990
+ body: patchAnthropicMessagesRequestBody(body),
951
991
  signal
952
992
  })),
953
993
  catch: (cause) => {
954
994
  log5.error("Failed to fetch", {
955
995
  cause
956
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 60, S: this });
996
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 106, S: this });
957
997
  return new HttpClientError.RequestError({
958
998
  request,
959
999
  reason: "Transport",
@@ -977,6 +1017,19 @@ var EdgeAiHttpClient = class _EdgeAiHttpClient {
977
1017
  })
978
1018
  }))));
979
1019
  }
1020
+ if (!carriedByok && response.status === 429) {
1021
+ return Effect2.tryPromise({
1022
+ try: () => response.clone().json(),
1023
+ catch: () => void 0
1024
+ }).pipe(Effect2.orElseSucceed(() => void 0), Effect2.flatMap((body2) => Effect2.fail(new HttpClientError.ResponseError({
1025
+ request,
1026
+ response: httpResponse,
1027
+ reason: "StatusCode",
1028
+ cause: new UsageQuotaExceededError({
1029
+ message: body2?.error?.message
1030
+ })
1031
+ }))));
1032
+ }
980
1033
  return Effect2.succeed(httpResponse);
981
1034
  }));
982
1035
  switch (request.body._tag) {
@@ -986,7 +1039,7 @@ var EdgeAiHttpClient = class _EdgeAiHttpClient {
986
1039
  case "FormData":
987
1040
  return send(request.body.formData);
988
1041
  case "Stream":
989
- return Stream.toReadableStreamEffect(request.body.stream).pipe(Effect2.flatMap(send));
1042
+ return Stream.toReadableStreamEffect(request.body.stream).pipe(Effect2.flatMap((readable) => readStreamBody(readable)), Effect2.flatMap((text) => send(text)));
990
1043
  }
991
1044
  return send(void 0);
992
1045
  });
@@ -1033,7 +1086,7 @@ var EdgeHttpClient = class extends BaseHttpClient {
1033
1086
  });
1034
1087
  }
1035
1088
  getAgentStatus(ctx, request, args) {
1036
- return this._call(ctx, new URL(`/users/${request.ownerIdentityKey.toHex()}/agent/status`, this.baseUrl), {
1089
+ return this._call(ctx, new URL(`/users/${request.ownerIdentityDid}/agent/status`, this.baseUrl), {
1037
1090
  ...args,
1038
1091
  method: "GET"
1039
1092
  });
@@ -1142,7 +1195,8 @@ var EdgeHttpClient = class extends BaseHttpClient {
1142
1195
  const formData = new FormData();
1143
1196
  formData.append("name", body.name ?? "");
1144
1197
  formData.append("version", body.version);
1145
- formData.append("ownerPublicKey", body.ownerPublicKey);
1198
+ const ownerUri = this._edgeIdentity?.identityDid ?? body.ownerUri;
1199
+ formData.append("ownerUri", ownerUri);
1146
1200
  formData.append("entryPoint", body.entryPoint);
1147
1201
  body.runtime && formData.append("runtime", body.runtime);
1148
1202
  for (const [filename, content] of Object.entries(body.assets)) {
@@ -1240,10 +1294,17 @@ var EdgeHttpClient = class extends BaseHttpClient {
1240
1294
  method: "GET"
1241
1295
  });
1242
1296
  }
1243
- async getRegistryPluginVersions(ctx, repo, args) {
1244
- return this._call(ctx, new URL(`/registry/plugins/${encodeURIComponent(repo)}/versions`, this.baseUrl), {
1245
- ...args,
1246
- method: "GET"
1297
+ /**
1298
+ * Uploads a built plugin bundle to the registry's R2-backed hosting. Authenticated
1299
+ * with the caller's hub identity (verifiable presentation) — `setIdentity` must
1300
+ * have been called. Returns the canonical `moduleUrl` (the hosted `manifest.json`).
1301
+ */
1302
+ async uploadPluginBundle(ctx, request, args) {
1303
+ return this._call(ctx, new URL("/registry/upload", this.baseUrl), {
1304
+ body: request,
1305
+ method: "POST",
1306
+ auth: true,
1307
+ ...args
1247
1308
  });
1248
1309
  }
1249
1310
  //
@@ -1334,6 +1395,7 @@ var getFileMimeType = (filename) => [
1334
1395
  ].some((ext) => filename.endsWith(ext)) ? "application/javascript+module" : filename.endsWith(".wasm") ? "application/wasm" : "application/octet-stream";
1335
1396
 
1336
1397
  // src/hub-http-client.ts
1398
+ import { createUrl as createUrl2 } from "@dxos/util";
1337
1399
  var HubHttpClient = class extends BaseHttpClient {
1338
1400
  constructor(hubUrl, options) {
1339
1401
  super(hubUrl, options);
@@ -1414,6 +1476,18 @@ var HubHttpClient = class extends BaseHttpClient {
1414
1476
  method: "POST"
1415
1477
  });
1416
1478
  }
1479
+ /**
1480
+ * Rolling-window usage and effective limits for the authenticated identity.
1481
+ * Served from the per-user metering DO; optional `windowSeconds` defaults to the largest limit window.
1482
+ */
1483
+ async getProfileUsage(ctx, query, args) {
1484
+ return this._call(ctx, createUrl2(new URL("/api/metering/profile/usage", this.baseUrl), {
1485
+ windowSeconds: query?.windowSeconds
1486
+ }), {
1487
+ ...args,
1488
+ method: "GET"
1489
+ });
1490
+ }
1417
1491
  };
1418
1492
  export {
1419
1493
  BaseHttpClient,
@@ -1428,6 +1502,7 @@ export {
1428
1502
  HttpConfig,
1429
1503
  HubHttpClient,
1430
1504
  Protocol,
1505
+ UsageQuotaExceededError,
1431
1506
  WebSocketMuxer,
1432
1507
  createChainEdgeIdentity,
1433
1508
  createDeviceEdgeIdentity,
@@ -1437,6 +1512,7 @@ export {
1437
1512
  encodeAuthHeader,
1438
1513
  getTypename,
1439
1514
  handleAuthChallenge,
1515
+ patchAnthropicMessagesRequestBody,
1440
1516
  protocol,
1441
1517
  proxyFetchLegacy,
1442
1518
  requestInitTagKey,