diff --git a/.changeset/large-sloths-laugh.md b/.changeset/large-sloths-laugh.md new file mode 100644 index 0000000..cda77fb --- /dev/null +++ b/.changeset/large-sloths-laugh.md @@ -0,0 +1,5 @@ +--- +"@zcloak/message": patch +--- + +add batch encrypt message diff --git a/packages/message/src/encrypt/index.ts b/packages/message/src/encrypt/index.ts index afadd2d..09391eb 100644 --- a/packages/message/src/encrypt/index.ts +++ b/packages/message/src/encrypt/index.ts @@ -7,9 +7,11 @@ import type { DidResolver } from '@zcloak/did-resolver'; import type { DidUrl } from '@zcloak/did-resolver/types'; import type { Message, MessageData, MessageType } from '../types'; -import { stringToU8a } from '@polkadot/util'; +import { stringToHex, stringToU8a } from '@polkadot/util'; import { base58Encode, randomAsHex } from '@zcloak/crypto'; +import { Did } from '@zcloak/did'; +import { VerifiableCredential } from '@zcloak/vc/types'; import { DEFAULT_MESSAGE_VERSION } from '../defaults'; @@ -80,3 +82,40 @@ export async function encryptMessage( encryptedMsg: base58Encode(encrypted.data) }; } + +export async function batchEncryptMessage( + data: VerifiableCredential[], + sender: Did, + receivers: DidUrl[], + reply?: string, + resolver?: DidResolver +): Promise[]> { + const createTime = Date.now(); + const version = DEFAULT_MESSAGE_VERSION; + + const messages = data.map((vc, index) => { + return { + receiver: receivers[index], + message: stringToHex(JSON.stringify(vc)) + }; + }); + + const results = await sender.batchEncrypt(messages, sender.id, resolver); + + return results.map((result, index) => { + const ctype = getCtype('Send_issuedVC', data[index]); + const id = randomAsHex(32); + + return { + id, + reply, + createTime, + version, + msgType: 'Send_issuedVC', + sender: result.senderUrl, + receiver: result.receiverUrl, + ctype, + encryptedMsg: base58Encode(result.data) + }; + }); +}