mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
* refactor: migrate WASignalGroup to TypeScript and remove deprecated files * chore: remove WASignalGroup JavaScript files from package.json * refactor: update SenderKeyStore and SenderKeyStateStructure interfaces to export and add deserialize method. Fix types * chore: lint issue * refactor: improve constructor type checking and getSeed method in SenderChainKey * refactor: update key handling to use Buffer for improved consistency * signal: consistent naming and dir structure + add some missing types * fix: lint issues --------- Co-authored-by: Rajeh Taher <rajeh@reforward.dev>
57 lines
1.9 KiB
TypeScript
57 lines
1.9 KiB
TypeScript
import * as keyhelper from './keyhelper'
|
|
import { SenderKeyDistributionMessage } from './sender-key-distribution-message'
|
|
import { SenderKeyName } from './sender-key-name'
|
|
import { SenderKeyRecord } from './sender-key-record'
|
|
|
|
interface SenderKeyStore {
|
|
loadSenderKey(senderKeyName: SenderKeyName): Promise<SenderKeyRecord>
|
|
storeSenderKey(senderKeyName: SenderKeyName, record: SenderKeyRecord): Promise<void>
|
|
}
|
|
|
|
export class GroupSessionBuilder {
|
|
private readonly senderKeyStore: SenderKeyStore
|
|
|
|
constructor(senderKeyStore: SenderKeyStore) {
|
|
this.senderKeyStore = senderKeyStore
|
|
}
|
|
|
|
public async process(
|
|
senderKeyName: SenderKeyName,
|
|
senderKeyDistributionMessage: SenderKeyDistributionMessage
|
|
): Promise<void> {
|
|
const senderKeyRecord = await this.senderKeyStore.loadSenderKey(senderKeyName)
|
|
senderKeyRecord.addSenderKeyState(
|
|
senderKeyDistributionMessage.getId(),
|
|
senderKeyDistributionMessage.getIteration(),
|
|
senderKeyDistributionMessage.getChainKey(),
|
|
senderKeyDistributionMessage.getSignatureKey()
|
|
)
|
|
await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord)
|
|
}
|
|
|
|
public async create(senderKeyName: SenderKeyName): Promise<SenderKeyDistributionMessage> {
|
|
const senderKeyRecord = await this.senderKeyStore.loadSenderKey(senderKeyName)
|
|
|
|
if (senderKeyRecord.isEmpty()) {
|
|
const keyId = keyhelper.generateSenderKeyId()
|
|
const senderKey = keyhelper.generateSenderKey()
|
|
const signingKey = keyhelper.generateSenderSigningKey()
|
|
|
|
senderKeyRecord.setSenderKeyState(keyId, 0, senderKey, signingKey)
|
|
await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord)
|
|
}
|
|
|
|
const state = senderKeyRecord.getSenderKeyState()
|
|
if (!state) {
|
|
throw new Error('No session state available')
|
|
}
|
|
|
|
return new SenderKeyDistributionMessage(
|
|
state.getKeyId(),
|
|
state.getSenderChainKey().getIteration(),
|
|
state.getSenderChainKey().getSeed(),
|
|
state.getSigningKeyPublic()
|
|
)
|
|
}
|
|
}
|