@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.cjs
CHANGED
|
@@ -1783,6 +1783,15 @@ var AdminApiClient = class {
|
|
|
1783
1783
|
async setTeeAuthoringPolicy(groupId, request) {
|
|
1784
1784
|
await this.httpClient.put(`/admin-api/groups/${groupId}/settings/tee-authoring-policy`, request);
|
|
1785
1785
|
}
|
|
1786
|
+
/**
|
|
1787
|
+
* Turns TEE authorship off in the namespace: every TEE loses its authority,
|
|
1788
|
+
* and admitted TEEs stay members. The node applies the same op as
|
|
1789
|
+
* `setTeeAuthoringPolicy(groupId, { allowedMrtd: [] })`. `groupId` must be a
|
|
1790
|
+
* namespace root.
|
|
1791
|
+
*/
|
|
1792
|
+
async disableTeeAuthoringPolicy(groupId) {
|
|
1793
|
+
await this.httpClient.delete(`/admin-api/groups/${groupId}/settings/tee-authoring-policy`);
|
|
1794
|
+
}
|
|
1786
1795
|
// ---- Group / member / context metadata ----
|
|
1787
1796
|
async setGroupMetadata(groupId, request) {
|
|
1788
1797
|
await this.httpClient.put(`/admin-api/groups/${groupId}/metadata`, request);
|
|
@@ -6751,6 +6760,8 @@ var HEADER_LEN = 1 + SESSION_ID_LEN + 8;
|
|
|
6751
6760
|
var FRAME_HEAD = 0;
|
|
6752
6761
|
var FRAME_DATA = 1;
|
|
6753
6762
|
var FRAME_END = 2;
|
|
6763
|
+
var MAX_FRAME_LEN = 1 + 64 * 1024 + 16;
|
|
6764
|
+
var MAX_HANDSHAKE_REPLY = 1024;
|
|
6754
6765
|
var RENEW_BEFORE_MS = 6e4;
|
|
6755
6766
|
var TRANSPORT_BINDING_DOMAIN = "calimero.tee-attest.transport-key.v1";
|
|
6756
6767
|
var NULL_BODY_STATUSES = [101, 204, 205, 304];
|
|
@@ -6762,10 +6773,11 @@ var StaleTransportKeyError = class extends Error {
|
|
|
6762
6773
|
}
|
|
6763
6774
|
};
|
|
6764
6775
|
var SealedTransportError = class extends Error {
|
|
6765
|
-
constructor(status, code, message) {
|
|
6776
|
+
constructor(status, code, message, retryAfterMs) {
|
|
6766
6777
|
super(message);
|
|
6767
6778
|
this.status = status;
|
|
6768
6779
|
this.code = code;
|
|
6780
|
+
this.retryAfterMs = retryAfterMs;
|
|
6769
6781
|
this.name = "SealedTransportError";
|
|
6770
6782
|
}
|
|
6771
6783
|
};
|
|
@@ -6869,6 +6881,15 @@ async function checkedKey(key) {
|
|
|
6869
6881
|
return bytes;
|
|
6870
6882
|
}
|
|
6871
6883
|
async function handshake(baseFetch, nodeUrl, transportKey) {
|
|
6884
|
+
try {
|
|
6885
|
+
return await handshakeOnce(baseFetch, nodeUrl, transportKey);
|
|
6886
|
+
} catch (error) {
|
|
6887
|
+
if (!(error instanceof SealedTransportError) || error.code !== "busy") throw error;
|
|
6888
|
+
await new Promise((resolve) => setTimeout(resolve, error.retryAfterMs ?? 1e3));
|
|
6889
|
+
return handshakeOnce(baseFetch, nodeUrl, transportKey);
|
|
6890
|
+
}
|
|
6891
|
+
}
|
|
6892
|
+
async function handshakeOnce(baseFetch, nodeUrl, transportKey) {
|
|
6872
6893
|
const noise = await initiate(transportKey, PROLOGUE);
|
|
6873
6894
|
const response = await baseFetch(`${nodeUrl}${HANDSHAKE_PATH}`, {
|
|
6874
6895
|
method: "POST",
|
|
@@ -6878,7 +6899,7 @@ async function handshake(baseFetch, nodeUrl, transportKey) {
|
|
|
6878
6899
|
if (response.headers.get("content-type") !== SEALED_CONTENT_TYPE) {
|
|
6879
6900
|
throw await envelopeRefusal(response);
|
|
6880
6901
|
}
|
|
6881
|
-
const reply =
|
|
6902
|
+
const reply = await readAtMost(response, MAX_HANDSHAKE_REPLY);
|
|
6882
6903
|
return sessionFrom(noise, reply);
|
|
6883
6904
|
}
|
|
6884
6905
|
async function sessionFrom(noise, reply) {
|
|
@@ -7004,6 +7025,10 @@ function frameReader(reader) {
|
|
|
7004
7025
|
async next() {
|
|
7005
7026
|
if (!await fill(4)) return null;
|
|
7006
7027
|
const length = new DataView(buffer.buffer, buffer.byteOffset).getUint32(0, false);
|
|
7028
|
+
if (length > MAX_FRAME_LEN) {
|
|
7029
|
+
await reader.cancel();
|
|
7030
|
+
throw new Error("The sealed response is malformed: a frame is larger than the node sends");
|
|
7031
|
+
}
|
|
7007
7032
|
if (!await fill(4 + length)) return null;
|
|
7008
7033
|
const frame = buffer.slice(4, 4 + length);
|
|
7009
7034
|
buffer = buffer.slice(4 + length);
|
|
@@ -7012,6 +7037,20 @@ function frameReader(reader) {
|
|
|
7012
7037
|
cancel: () => reader.cancel()
|
|
7013
7038
|
};
|
|
7014
7039
|
}
|
|
7040
|
+
async function readAtMost(response, limit) {
|
|
7041
|
+
if (!response.body) return new Uint8Array();
|
|
7042
|
+
const reader = response.body.getReader();
|
|
7043
|
+
let bytes = new Uint8Array();
|
|
7044
|
+
for (; ; ) {
|
|
7045
|
+
const { done, value } = await reader.read();
|
|
7046
|
+
if (done) return bytes;
|
|
7047
|
+
bytes = concat(bytes, value);
|
|
7048
|
+
if (bytes.length > limit) {
|
|
7049
|
+
await reader.cancel();
|
|
7050
|
+
throw new Error("The handshake reply is malformed: it is too long");
|
|
7051
|
+
}
|
|
7052
|
+
}
|
|
7053
|
+
}
|
|
7015
7054
|
async function envelopeRefusal(response) {
|
|
7016
7055
|
let code;
|
|
7017
7056
|
let message = `Sealed request refused: HTTP ${response.status}`;
|
|
@@ -7022,7 +7061,9 @@ async function envelopeRefusal(response) {
|
|
|
7022
7061
|
} catch {
|
|
7023
7062
|
}
|
|
7024
7063
|
if (code === "stale_transport_key") return new StaleTransportKeyError();
|
|
7025
|
-
|
|
7064
|
+
const retryAfter = Number(response.headers.get("retry-after"));
|
|
7065
|
+
const retryAfterMs = Number.isFinite(retryAfter) && retryAfter > 0 ? Math.min(retryAfter, 5) * 1e3 : void 0;
|
|
7066
|
+
return new SealedTransportError(response.status, code, message, retryAfterMs);
|
|
7026
7067
|
}
|
|
7027
7068
|
|
|
7028
7069
|
// src/namespace-op/namespace-op.ts
|