wowok
Version:
Wowok Blockchain TypeScript API
66 lines (65 loc) • 2.65 kB
TypeScript
import { PQSessionCipher } from "./pq/index.js";
import type { PQSessionStore } from "./pq/session.js";
import type { MessengerConfig, RemoteBundle } from "./types.js";
import type { X25519KeyPair } from "./pq/types.js";
export interface LocalIdentity {
x25519KeyPair: X25519KeyPair;
registrationId: number;
}
export interface EncryptedMessage {
type: number;
body: ArrayBuffer;
registrationId?: number;
}
export declare class MessengerSession {
private pqStore;
private pqCipher;
private serverClient;
private config;
private identity;
private userAddress;
constructor(userAddress: string, config?: Partial<MessengerConfig>);
get store(): PQSessionStore;
get cipher(): PQSessionCipher;
ensureIdentity(_userAddress?: string): Promise<LocalIdentity>;
private deriveRegistrationId;
registerDevice(userAddress: string): Promise<void>;
private verifyRegistrationComplete;
isDeviceRegistered(userAddress: string): Promise<boolean>;
private generatePreKeyBatch;
ensurePreKeys(userAddress: string, force?: boolean): Promise<void>;
private generateNonce;
establishSession(myAddress: string, peerAddress: string, peerDeviceId?: number, remoteBundle?: RemoteBundle): Promise<void>;
encryptMessage(myAddress: string, peerAddress: string, plaintext: string, peerDeviceId?: number): Promise<EncryptedMessage>;
decryptMessage(myAddress: string, peerAddress: string, ciphertext: ArrayBuffer, msgType: number, peerDeviceId?: number): Promise<string>;
getIdentityKey(): Promise<string>;
getRegistrationId(): Promise<number>;
}
export interface SessionSnapshot {
sessionData: string | null;
timestamp: number;
}
export declare class SessionStateManager {
private store;
constructor(store: PQSessionStore);
snapshotSession(peerAddress: string, peerDeviceId: number): Promise<SessionSnapshot>;
rollbackSession(peerAddress: string, peerDeviceId: number, snapshot: SessionSnapshot): Promise<void>;
commitSession(_peerAddress: string, _peerDeviceId: number): Promise<void>;
}
export interface DecryptResult {
success: boolean;
plaintext?: string;
sessionUpdated: boolean;
sessionRolledBack: boolean;
messageType: "PREKEY" | "WHISPER";
error?: string;
}
export declare class DecryptionEngine {
private sessionManager;
private store;
private cipher;
constructor(store: PQSessionStore);
decryptMessage(myAddress: string, peerAddress: string, ciphertext: ArrayBuffer, msgType: number, peerDeviceId?: number): Promise<DecryptResult>;
private handlePreKeyMessage;
private handleWhisperMessage;
}