wowok
Version:
Wowok Blockchain TypeScript API
111 lines (110 loc) • 5.72 kB
TypeScript
import Database from "libsql";
import type { Message, SessionState, MessengerConfig } from "./types.js";
type KeyPairType = {
pubKey: ArrayBuffer;
privKey: ArrayBuffer;
};
interface StorageType {
getIdentityKeyPair(): Promise<KeyPairType | undefined>;
getLocalRegistrationId(): Promise<number | undefined>;
isTrustedIdentity(identifier: string, identityKey: ArrayBuffer, direction?: number): Promise<boolean>;
saveIdentity(encodedAddress: string, publicKey: ArrayBuffer): Promise<boolean>;
loadIdentity(address: string): Promise<ArrayBuffer | undefined>;
loadPreKey(keyId: string | number): Promise<KeyPairType | undefined>;
storePreKey(keyId: string | number, keyPair: KeyPairType): Promise<void>;
removePreKey(keyId: string | number): Promise<void>;
loadSignedPreKey(keyId: string | number): Promise<KeyPairType | undefined>;
storeSignedPreKey(keyId: string | number, keyPair: KeyPairType): Promise<void>;
removeSignedPreKey(keyId: string | number): Promise<void>;
loadSession(encodedAddress: string): Promise<string | undefined>;
storeSession(encodedAddress: string, record: string): Promise<void>;
removeSession(encodedAddress: string): Promise<void>;
}
export declare function getDatabase(userAddress: string): Database.Database;
export declare function resetDbConnection(): void;
interface PersistedMeta {
nextPreKeyId: number;
}
export declare class SignalProtocolStorage implements StorageType {
private storePrefix;
private userAddress;
constructor(userAddress: string, storeType?: string);
private get db();
setIdentity(identity: KeyPairType, registrationId: number): Promise<void>;
getIdentityKeyPair(): Promise<KeyPairType | undefined>;
getLocalRegistrationId(): Promise<number | undefined>;
isTrustedIdentity(identifier: string, identityKey: ArrayBuffer): Promise<boolean>;
saveIdentity(encodedAddress: string, publicKey: ArrayBuffer): Promise<boolean>;
loadIdentity(address: string): Promise<ArrayBuffer | undefined>;
loadPreKey(keyId: string | number): Promise<KeyPairType | undefined>;
storePreKey(keyId: string | number, keyPair: KeyPairType): Promise<void>;
removePreKey(keyId: string | number): Promise<void>;
loadSignedPreKey(keyId: string | number): Promise<KeyPairType | undefined>;
storeSignedPreKey(keyId: string | number, keyPair: KeyPairType): Promise<void>;
removeSignedPreKey(keyId: string | number): Promise<void>;
loadSignedPreKeyWithSignature(keyId: string | number): Promise<(KeyPairType & {
signature: ArrayBuffer;
}) | undefined>;
storeSignedPreKeyWithSignature(keyId: string | number, keyPair: KeyPairType, signature: ArrayBuffer): Promise<void>;
loadSession(encodedAddress: string): Promise<string | undefined>;
storeSession(encodedAddress: string, record: string): Promise<void>;
removeSession(encodedAddress: string): Promise<void>;
getMeta(): Promise<PersistedMeta>;
setMeta(meta: Partial<PersistedMeta>): Promise<void>;
listPreKeys(): number[];
private getValue;
private putValue;
private delValue;
}
export declare class MessageStorage {
private userAddress;
constructor(userAddress: string);
private get db();
saveMessage(message: Message): void;
getMessage(messageId: string): Message | undefined;
getMessagesBySession(myAddress: string, peerAddress: string): Message[];
getPendingMessages(myAddress: string): Message[];
updateMessageStatus(messageId: string, status: Message["status"], updates?: Partial<Message>): void;
updateMessageViewed(messageId: string, viewedAt?: number): boolean;
updateMessagesViewed(messageIds: string[], viewedAt?: number): number;
getAllMessages(userAddress: string): Message[];
getMessageById(messageId: string): Message | undefined;
updateMessageId(oldMessageId: string, newMessageId: string, updates?: Partial<Message>): boolean;
private rowToMessage;
getLastReceivedLeafIndex(myAddress: string, peerAddress: string): number;
}
export declare class SessionStateStorage {
private userAddress;
constructor(userAddress: string);
private get db();
private getSessionId;
getSessionState(myAddress: string, peerAddress: string): SessionState | undefined;
updateSessionState(myAddress: string, peerAddress: string, updates: Partial<Omit<SessionState, "sessionId" | "myAddress" | "peerAddress">>): void;
getCurrentRoot(myAddress: string, peerAddress: string): string;
}
export interface PersistedMessengerState {
version: string;
accounts: string[];
config: Partial<MessengerConfig>;
updatedAt: number;
}
export declare class MessengerPersistStorage {
private initialized;
private get db();
private initTable;
saveState(instanceId: string, state: PersistedMessengerState): void;
loadState(instanceId: string): PersistedMessengerState | null;
deleteState(instanceId: string): void;
getAllInstanceIds(): string[];
private get processId();
tryAcquireSSELock(accountAddress: string, instanceId: string): boolean;
updateSSELockHeartbeat(accountAddress: string, instanceId: string): void;
releaseSSELock(accountAddress: string, instanceId: string): void;
holdsSSELock(accountAddress: string, instanceId: string): boolean;
tryAcquirePollingLock(accountAddress: string, instanceId: string): boolean;
updatePollingLockHeartbeat(accountAddress: string, instanceId: string): void;
releasePollingLock(accountAddress: string, instanceId: string): void;
holdsPollingLock(accountAddress: string, instanceId: string): boolean;
}
export declare const defaultPersistStorage: MessengerPersistStorage;
export {};