2026-02-16 06:00:13 +00:00

261 lines
10 KiB
TypeScript

/* auto-generated by NAPI-RS */
/* eslint-disable */
/** The type of codec being used. */
export declare const enum Codec {
UNKNOWN = 0,
OPUS = 1,
VP8 = 2,
VP9 = 3,
H264 = 4,
H265 = 5,
AV1 = 6
}
/** The maximum supported version of the DAVE protocol. */
export const DAVE_PROTOCOL_VERSION: number
export interface DecryptionStats {
/** Number of decryption successes */
successes: number
/** Number of decryption failures */
failures: number
/** Total decryption duration in microseconds */
duration: number
/** Total amounts of decryption attempts */
attempts: number
/** Total amounts of packets that passed through */
passthroughs: number
}
export interface EncryptionStats {
/** Number of encryption successes */
successes: number
/** Number of encryption failures */
failures: number
/** Total encryption duration in microseconds */
duration: number
/** Total amounts of encryption attempts */
attempts: number
/** Maximum attempts reached at encryption */
maxAttempts: number
}
/** The type of media being referenced. */
export declare const enum MediaType {
AUDIO = 0,
VIDEO = 1
}
/**
* The operation type of the proposals payload.
* @see https://daveprotocol.com/#dave_mls_proposals-27
*/
export declare const enum ProposalsOperationType {
APPEND = 0,
REVOKE = 1
}
/** The status of the DAVE session. */
export declare const enum SessionStatus {
INACTIVE = 0,
PENDING = 1,
AWAITING_RESPONSE = 2,
ACTIVE = 3
}
export declare class DAVESession {
/**
* @param protocolVersion The protocol version to use.
* @param userId The user ID of the session.
* @param channelId The channel ID of the session.
* @param keyPair The key pair to use for this session. Will generate a new one if not specified.
*/
constructor(protocolVersion: number, userId: string, channelId: string, keyPair?: SigningKeyPair | undefined | null)
/**
* Resets and re-initializes the session.
* @param protocolVersion The protocol version to use.
* @param userId The user ID of the session.
* @param channelId The channel ID of the session.
* @param keyPair The key pair to use for this session. Will generate a new one if not specified.
*/
reinit(protocolVersion: number, userId: string, channelId: string, keyPair?: SigningKeyPair | undefined | null): void
/**
* Resets the session by deleting the group and clearing the storage.
* If you want to re-initialize the session, use {@link reinit}.
*/
reset(): void
/** The DAVE protocol version used for this session. */
get protocolVersion(): number
/** The user ID for this session. */
get userId(): string
/** The channel ID (group ID in MLS standards) for this session. */
get channelId(): string
/** The epoch for this session, `undefined` if there is no group yet. */
get epoch(): bigint | null
/** Your own leaf index for this session, `undefined` if there is no group yet. */
get ownLeafIndex(): number | null
/** The ciphersuite being used in this session. */
get ciphersuite(): number
/** The current status of the session. */
get status(): SessionStatus
/** Whether the session is ready to encrypt/decrypt. */
get ready(): boolean
/** Get the epoch authenticator of this session's group. */
getEpochAuthenticator(): Buffer | null
/**
* Get the voice privacy code of this session's group.
* The result of this is created and cached each time a new transition is executed.
* This is the equivalent of `generateDisplayableCode(epochAuthenticator, 30, 5)`.
* @returns The current voice privacy code, or an empty string if the session is not active.
* @see https://daveprotocol.com/#displayable-codes
*/
get voicePrivacyCode(): string
/**
* Set the external sender this session will recieve from.
* @param externalSenderData The serialized external sender data.
* @throws Will throw if the external sender is invalid, or if the group has been established already.
* @see https://daveprotocol.com/#dave_mls_external_sender_package-25
*/
setExternalSender(externalSenderData: Buffer): void
/**
* Create, store, and return the serialized key package buffer.
* Key packages are not meant to be reused, and will be recreated on each call of this function.
*/
getSerializedKeyPackage(): Buffer
/**
* Process proposals from the voice server.
* @param operationType The operation type of the proposals.
* @param proposals The vector of proposals or proposal refs of the payload. (depending on operation type)
* @param recognizedUserIds The recognized set of user IDs gathered from the voice gateway. Recommended to set so that incoming users are checked against.
* @returns A commit (if there were queued proposals) and a welcome (if a member was added) that should be used to send an [opcode 28: dave_mls_commit_welcome](https://daveprotocol.com/#dave_mls_commit_welcome-28) ONLY if a commit was returned.
* @see https://daveprotocol.com/#dave_mls_proposals-27
*/
processProposals(operationType: ProposalsOperationType, proposals: Buffer, recognizedUserIds?: Array<string> | undefined | null): ProposalsResult
/**
* Process a welcome message.
* @param welcome The welcome message to process.
* @throws Will throw an error if the welcome is invalid. Send an [opcode 31: dave_mls_invalid_commit_welcome](https://daveprotocol.com/#dave_mls_invalid_commit_welcome-31) if this occurs.
* @see https://daveprotocol.com/#dave_mls_welcome-30
*/
processWelcome(welcome: Buffer): void
/**
* Process a commit.
* @param commit The commit to process.
* @throws Will throw an error if the commit is invalid. Send an [opcode 31: dave_mls_invalid_commit_welcome](https://daveprotocol.com/#dave_mls_invalid_commit_welcome-31) if this occurs.
* @see https://daveprotocol.com/#dave_mls_announce_commit_transition-29
*/
processCommit(commit: Buffer): void
/**
* Get the verification code of another member of the group.
* This is the equivalent of `generateDisplayableCode(getPairwiseFingerprint(0, userId), 45, 5)`.
* @see https://daveprotocol.com/#displayable-codes
*/
getVerificationCode(userId: string): Promise<string>
/**
* Create a pairwise fingerprint of you and another member.
* @see https://daveprotocol.com/#verification-fingerprint
*/
getPairwiseFingerprint(version: number, userId: string): Promise<Buffer>
/**
* End-to-end encrypt a packet.
* @param mediaType The type of media to encrypt
* @param codec The codec of the packet
* @param packet The packet to encrypt
*/
encrypt(mediaType: MediaType, codec: Codec, packet: Buffer): Buffer
/**
* End-to-end encrypt an opus packet.
* This is the shorthand for `encrypt(MediaType.AUDIO, Codec.OPUS, packet)`
* @param packet The packet to encrypt
*/
encryptOpus(packet: Buffer): Buffer
/**
* Get encryption stats.
* @param [mediaType=MediaType.AUDIO] The media type, defaults to `MediaType.AUDIO`
*/
getEncryptionStats(mediaType?: MediaType | undefined | null): EncryptionStats | null
/**
* Decrypt an end-to-end encrypted packet.
* @param userId The user ID of the packet
* @param mediaType The type of media to decrypt
* @param packet The packet to decrypt
*/
decrypt(userId: string, mediaType: MediaType, packet: Buffer): Buffer
/**
* Get decryption stats.
* @param userId The user ID
* @param [mediaType=MediaType.AUDIO] The media type, defaults to `MediaType.AUDIO`
*/
getDecryptionStats(userId: string, mediaType?: MediaType | undefined | null): DecryptionStats | null
/**
* Get the IDs of the users in the current group.
* @returns An array of user IDs, or an empty array if there is no group.
*/
getUserIds(): Array<string>
/**
* Check whether this user's decryptor is in passthrough mode.
* If passthrough mode is enabled, then unencrypted packets are allowed to be passed through the decryptor.
* @param userId The user ID
*/
canPassthrough(userId: string): boolean
/**
* Set whether passthrough mode is enabled on all decryptors.
* @param passthroughMode Whether to enable passthrough mode
* @param [transitionExpiry=10] The transition expiry (in seconds) to use when disabling passthrough mode, defaults to 10 seconds
*/
setPassthroughMode(passthroughMode: boolean, transitionExpiry?: number | undefined | null): void
/** @ignore */
toString(): string
}
export type DaveSession = DAVESession
/** Whether davey is using a debug build. */
export const DEBUG_BUILD: boolean
/**
* Generate a displayable code.
* @see https://daveprotocol.com/#displayable-codes
* @param data The data to generate a code with
* @param desiredLength The desired length of the code
* @param groupSize The group size of the code
*/
export declare function generateDisplayableCode(data: Buffer, desiredLength: number, groupSize: number): string
/**
* Generate a key fingerprint.
* @see https://daveprotocol.com/#verification-fingerprint
* @param version The version of the fingerprint
* @param key The key to fingerprint
* @param userId The user ID of this fingerprint
*/
export declare function generateKeyFingerprint(version: number, key: Buffer, userId: string): Buffer
/** Create a P256 signing key pair. */
export declare function generateP256Keypair(): SigningKeyPair
/**
* Generate a pairwise fingerprint.
* @see https://daveprotocol.com/#verification-fingerprint
* @param version The version of the fingerprint
* @param localKey The local user's key
* @param localKeyId The local user's ID
* @param remoteKey The remote user's key
* @param remoteKeyId The remote user's ID
*/
export declare function generatePairwiseFingerprint(version: number, localKey: Buffer, localUserId: string, remoteKey: Buffer, remoteUserId: string): Promise<Buffer>
export interface ProposalsResult {
commit?: Buffer
welcome?: Buffer
}
/** A signing key pair. */
export interface SigningKeyPair {
/** The private key of this key pair. */
private: Buffer
/** The public key of this key pair. */
public: Buffer
}
/** The version of the davey package being used. */
export const VERSION: string