@calimero-network/mero-js 19.23.0 → 19.24.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/admin-api/admin-client.d.ts +7 -0
- package/dist/admin-api/admin-client.js +9 -0
- package/dist/index.browser.mjs +2 -2
- package/dist/index.browser.mjs.map +3 -3
- package/dist/index.cjs +44 -3
- package/dist/index.cjs.map +2 -2
- package/dist/index.mjs +44 -3
- package/dist/index.mjs.map +2 -2
- package/dist/sealed/sealed.d.ts +5 -1
- package/dist/sealed/sealed.js +50 -3
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1677,6 +1677,15 @@ var AdminApiClient = class {
|
|
|
1677
1677
|
async setTeeAuthoringPolicy(groupId, request) {
|
|
1678
1678
|
await this.httpClient.put(`/admin-api/groups/${groupId}/settings/tee-authoring-policy`, request);
|
|
1679
1679
|
}
|
|
1680
|
+
/**
|
|
1681
|
+
* Turns TEE authorship off in the namespace: every TEE loses its authority,
|
|
1682
|
+
* and admitted TEEs stay members. The node applies the same op as
|
|
1683
|
+
* `setTeeAuthoringPolicy(groupId, { allowedMrtd: [] })`. `groupId` must be a
|
|
1684
|
+
* namespace root.
|
|
1685
|
+
*/
|
|
1686
|
+
async disableTeeAuthoringPolicy(groupId) {
|
|
1687
|
+
await this.httpClient.delete(`/admin-api/groups/${groupId}/settings/tee-authoring-policy`);
|
|
1688
|
+
}
|
|
1680
1689
|
// ---- Group / member / context metadata ----
|
|
1681
1690
|
async setGroupMetadata(groupId, request) {
|
|
1682
1691
|
await this.httpClient.put(`/admin-api/groups/${groupId}/metadata`, request);
|
|
@@ -6645,6 +6654,8 @@ var HEADER_LEN = 1 + SESSION_ID_LEN + 8;
|
|
|
6645
6654
|
var FRAME_HEAD = 0;
|
|
6646
6655
|
var FRAME_DATA = 1;
|
|
6647
6656
|
var FRAME_END = 2;
|
|
6657
|
+
var MAX_FRAME_LEN = 1 + 64 * 1024 + 16;
|
|
6658
|
+
var MAX_HANDSHAKE_REPLY = 1024;
|
|
6648
6659
|
var RENEW_BEFORE_MS = 6e4;
|
|
6649
6660
|
var TRANSPORT_BINDING_DOMAIN = "calimero.tee-attest.transport-key.v1";
|
|
6650
6661
|
var NULL_BODY_STATUSES = [101, 204, 205, 304];
|
|
@@ -6656,10 +6667,11 @@ var StaleTransportKeyError = class extends Error {
|
|
|
6656
6667
|
}
|
|
6657
6668
|
};
|
|
6658
6669
|
var SealedTransportError = class extends Error {
|
|
6659
|
-
constructor(status, code, message) {
|
|
6670
|
+
constructor(status, code, message, retryAfterMs) {
|
|
6660
6671
|
super(message);
|
|
6661
6672
|
this.status = status;
|
|
6662
6673
|
this.code = code;
|
|
6674
|
+
this.retryAfterMs = retryAfterMs;
|
|
6663
6675
|
this.name = "SealedTransportError";
|
|
6664
6676
|
}
|
|
6665
6677
|
};
|
|
@@ -6763,6 +6775,15 @@ async function checkedKey(key) {
|
|
|
6763
6775
|
return bytes;
|
|
6764
6776
|
}
|
|
6765
6777
|
async function handshake(baseFetch, nodeUrl, transportKey) {
|
|
6778
|
+
try {
|
|
6779
|
+
return await handshakeOnce(baseFetch, nodeUrl, transportKey);
|
|
6780
|
+
} catch (error) {
|
|
6781
|
+
if (!(error instanceof SealedTransportError) || error.code !== "busy") throw error;
|
|
6782
|
+
await new Promise((resolve) => setTimeout(resolve, error.retryAfterMs ?? 1e3));
|
|
6783
|
+
return handshakeOnce(baseFetch, nodeUrl, transportKey);
|
|
6784
|
+
}
|
|
6785
|
+
}
|
|
6786
|
+
async function handshakeOnce(baseFetch, nodeUrl, transportKey) {
|
|
6766
6787
|
const noise = await initiate(transportKey, PROLOGUE);
|
|
6767
6788
|
const response = await baseFetch(`${nodeUrl}${HANDSHAKE_PATH}`, {
|
|
6768
6789
|
method: "POST",
|
|
@@ -6772,7 +6793,7 @@ async function handshake(baseFetch, nodeUrl, transportKey) {
|
|
|
6772
6793
|
if (response.headers.get("content-type") !== SEALED_CONTENT_TYPE) {
|
|
6773
6794
|
throw await envelopeRefusal(response);
|
|
6774
6795
|
}
|
|
6775
|
-
const reply =
|
|
6796
|
+
const reply = await readAtMost(response, MAX_HANDSHAKE_REPLY);
|
|
6776
6797
|
return sessionFrom(noise, reply);
|
|
6777
6798
|
}
|
|
6778
6799
|
async function sessionFrom(noise, reply) {
|
|
@@ -6898,6 +6919,10 @@ function frameReader(reader) {
|
|
|
6898
6919
|
async next() {
|
|
6899
6920
|
if (!await fill(4)) return null;
|
|
6900
6921
|
const length = new DataView(buffer.buffer, buffer.byteOffset).getUint32(0, false);
|
|
6922
|
+
if (length > MAX_FRAME_LEN) {
|
|
6923
|
+
await reader.cancel();
|
|
6924
|
+
throw new Error("The sealed response is malformed: a frame is larger than the node sends");
|
|
6925
|
+
}
|
|
6901
6926
|
if (!await fill(4 + length)) return null;
|
|
6902
6927
|
const frame = buffer.slice(4, 4 + length);
|
|
6903
6928
|
buffer = buffer.slice(4 + length);
|
|
@@ -6906,6 +6931,20 @@ function frameReader(reader) {
|
|
|
6906
6931
|
cancel: () => reader.cancel()
|
|
6907
6932
|
};
|
|
6908
6933
|
}
|
|
6934
|
+
async function readAtMost(response, limit) {
|
|
6935
|
+
if (!response.body) return new Uint8Array();
|
|
6936
|
+
const reader = response.body.getReader();
|
|
6937
|
+
let bytes = new Uint8Array();
|
|
6938
|
+
for (; ; ) {
|
|
6939
|
+
const { done, value } = await reader.read();
|
|
6940
|
+
if (done) return bytes;
|
|
6941
|
+
bytes = concat(bytes, value);
|
|
6942
|
+
if (bytes.length > limit) {
|
|
6943
|
+
await reader.cancel();
|
|
6944
|
+
throw new Error("The handshake reply is malformed: it is too long");
|
|
6945
|
+
}
|
|
6946
|
+
}
|
|
6947
|
+
}
|
|
6909
6948
|
async function envelopeRefusal(response) {
|
|
6910
6949
|
let code;
|
|
6911
6950
|
let message = `Sealed request refused: HTTP ${response.status}`;
|
|
@@ -6916,7 +6955,9 @@ async function envelopeRefusal(response) {
|
|
|
6916
6955
|
} catch {
|
|
6917
6956
|
}
|
|
6918
6957
|
if (code === "stale_transport_key") return new StaleTransportKeyError();
|
|
6919
|
-
|
|
6958
|
+
const retryAfter = Number(response.headers.get("retry-after"));
|
|
6959
|
+
const retryAfterMs = Number.isFinite(retryAfter) && retryAfter > 0 ? Math.min(retryAfter, 5) * 1e3 : void 0;
|
|
6960
|
+
return new SealedTransportError(response.status, code, message, retryAfterMs);
|
|
6920
6961
|
}
|
|
6921
6962
|
|
|
6922
6963
|
// src/namespace-op/namespace-op.ts
|