diff --git a/.changeset/slimy-plants-add.md b/.changeset/slimy-plants-add.md new file mode 100644 index 000000000..bf40208d3 --- /dev/null +++ b/.changeset/slimy-plants-add.md @@ -0,0 +1,5 @@ +--- +'@mysten/seal': patch +--- + +introduced batched requests for key server objects diff --git a/packages/seal/src/key-server.ts b/packages/seal/src/key-server.ts index c2831b8d7..8c388a913 100644 --- a/packages/seal/src/key-server.ts +++ b/packages/seal/src/key-server.ts @@ -62,32 +62,30 @@ export async function retrieveKeyServers({ objectIds: string[]; client: SealCompatibleClient; }): Promise { - // 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), + }; + }); } /**