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 (#1320)
* 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>
This commit is contained in:
committed by
GitHub
parent
f404147736
commit
482db6edc5
56
src/Signal/Group/group-session-builder.ts
Normal file
56
src/Signal/Group/group-session-builder.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
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()
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user