Davey! How ya doin?
A Discord Audio & Video End-to-End Encryption (DAVE) Protocol implementation using OpenMLS built with NAPI-RS.
Proper documentation does not exist yet, but you can read the usage document and review the type definitions for available methods.
import { DAVESession, ProposalsOperationType, MediaType, Codec } from '@snazzah/davey';
const session = new DAVESession(
1, // dave version
'158049329150427136', // user id
'927310423890473011', // channel id
);
// Set the external sender of the session from opcode 25
session.setExternalSender(externalSenderBuffer);
// Get the key package buffer to send to Discord
session.getSerializedKeyPackage();
// Process a proposals
session.processProposals(
ProposalsOperationType.APPEND, // the type of proposals operation
proposalsBuffer, // proposals or proposal refs buffer
recognizedUserIds, // an array of user IDs in the session, optional but recommended
);
// Process a commit
session.processCommit(commitBuffer);
// Process a welcome
session.processWelcome(welcomeBuffer);
// The current voice privacy code of the session, updated after a commit/welcome
session.voicePrivacyCode; // a 30 digit string or an empty string for not started sessions
// Encrypt/decrypt voice packets
if (session.ready) {
// Encrypt packets with a specified media type and codec, use this before transport encryption
session.encrypt(MediaType.AUDIO, Codec.OPUS, packet);
// Really only opus is supported right now so just use the shorthand method
session.encrypt_opus(packet);
// Decrypt a packet from a user, use this after transport decryption
session.decrypt(userId, MediaType.AUDIO, incomingPacket);
}