@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.
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/neutral/cors-proxy.mjs +1 -0
- package/dist/lib/neutral/edge-ws-muxer.mjs +1 -0
- package/dist/lib/neutral/index.mjs +111 -35
- package/dist/lib/neutral/index.mjs.map +3 -3
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/service/index.mjs +134 -0
- package/dist/lib/neutral/service/index.mjs.map +7 -0
- package/dist/lib/neutral/testing/index.mjs +2 -1
- package/dist/lib/neutral/testing/index.mjs.map +3 -3
- package/dist/types/src/auth.d.ts.map +1 -1
- package/dist/types/src/browser-rendering.d.ts +28 -0
- package/dist/types/src/browser-rendering.d.ts.map +1 -0
- package/dist/types/src/edge-ai-http-client.d.ts +39 -0
- package/dist/types/src/edge-ai-http-client.d.ts.map +1 -1
- package/dist/types/src/edge-ai-http-client.test.d.ts +2 -0
- package/dist/types/src/edge-ai-http-client.test.d.ts.map +1 -0
- package/dist/types/src/edge-client.d.ts +3 -2
- package/dist/types/src/edge-client.d.ts.map +1 -1
- package/dist/types/src/edge-http-client.d.ts +19 -4
- package/dist/types/src/edge-http-client.d.ts.map +1 -1
- package/dist/types/src/edge-identity.d.ts +5 -1
- package/dist/types/src/edge-identity.d.ts.map +1 -1
- package/dist/types/src/hub-http-client.d.ts +8 -1
- package/dist/types/src/hub-http-client.d.ts.map +1 -1
- package/dist/types/src/service/Image.d.ts +25 -0
- package/dist/types/src/service/Image.d.ts.map +1 -0
- package/dist/types/src/service/edge-service.d.ts +36 -0
- package/dist/types/src/service/edge-service.d.ts.map +1 -0
- package/dist/types/src/service/edge-service.test.d.ts +2 -0
- package/dist/types/src/service/edge-service.test.d.ts.map +1 -0
- package/dist/types/src/service/image-service.e2e.test.d.ts +2 -0
- package/dist/types/src/service/image-service.e2e.test.d.ts.map +1 -0
- package/dist/types/src/service/index.d.ts +3 -0
- package/dist/types/src/service/index.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +22 -17
- package/src/auth.ts +6 -6
- package/src/base-http-client.ts +1 -1
- package/src/browser-rendering.ts +39 -0
- package/src/edge-ai-http-client.test.ts +37 -0
- package/src/edge-ai-http-client.ts +87 -2
- package/src/edge-client.test.ts +1 -1
- package/src/edge-client.ts +9 -7
- package/src/edge-http-client.ts +25 -10
- package/src/edge-identity.ts +5 -1
- package/src/edge-ws-connection.ts +1 -1
- package/src/edge-ws-muxer.test.ts +1 -1
- package/src/hub-http-client.ts +20 -0
- package/src/service/Image.ts +61 -0
- package/src/service/edge-service.test.ts +151 -0
- package/src/service/edge-service.ts +139 -0
- package/src/service/image-service.e2e.test.ts +53 -0
- package/src/service/index.ts +7 -0
- package/src/testing/test-utils.ts +1 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
|
478
|
-
return this._identity.
|
|
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.
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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?.
|
|
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:
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
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,
|