Skip to content
5 changes: 5 additions & 0 deletions .changeset/slimy-plants-add.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@mysten/seal': patch
---

introduced batched requests for key server objects
50 changes: 24 additions & 26 deletions packages/seal/src/key-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,32 +62,30 @@ export async function retrieveKeyServers({
objectIds: string[];
client: SealCompatibleClient;
}): Promise<KeyServer[]> {
// todo: do not fetch the same object ID if this is fetched before.
return await Promise.all(
objectIds.map(async (objectId) => {
let res;
try {
res = await client.core.getObject({
objectId,
});
} catch (e) {
throw new InvalidGetObjectError(`KeyServer ${objectId} not found; ${(e as Error).message}`);
}

const ks = KeyServerMove.parse(res.object.content);
if (ks.keyType !== 0) {
throw new UnsupportedFeatureError(`Unsupported key type ${ks.keyType}`);
}

return {
objectId,
name: ks.name,
url: ks.url,
keyType: KeyServerType.BonehFranklinBLS12381,
pk: new Uint8Array(ks.pk),
};
}),
);
const { objects } = await client.core.getObjects({
objectIds,
});

return objects.map((res, i) => {
const objectId = objectIds[i];

if (res instanceof Error) {
throw new InvalidGetObjectError(`KeyServer ${objectId} not found; ${res.message}`);
}

const ks = KeyServerMove.parse(res.content);
if (ks.keyType !== 0) {
throw new UnsupportedFeatureError(`Unsupported key type ${ks.keyType}`);
}

return {
objectId,
name: ks.name,
url: ks.url,
keyType: KeyServerType.BonehFranklinBLS12381,
pk: new Uint8Array(ks.pk),
};
});
}

/**
Expand Down