import { requireNativeModule } from 'expo-modules-core'; import { IdentityKeyPair, PreKeyRecord, SignedPreKeyRecord, KyberPreKeyRecord, CiphertextMessage, DecryptedMessage, } from './SignalExpo.types'; interface SignalExpoModuleInterface { // Key generation (synchronous) generateIdentityKeyPair(): IdentityKeyPair; generateRegistrationId(): number; generatePreKeys(start: number, count: number): PreKeyRecord[]; generateSignedPreKey(identityPrivateKey: Uint8Array, signedPreKeyId: number): SignedPreKeyRecord; generateKyberPreKeys(start: number, count: number, identityPrivateKey: Uint8Array): KyberPreKeyRecord[]; // Initialization (must be called before encrypt/decrypt) - direct params to avoid Record conversion issues initialize( identityPrivateKey: Uint8Array, identityPublicKey: Uint8Array, registrationId: number, preKeyIds: number[], preKeyPrivateKeys: Uint8Array[], signedPreKeyId: number, signedPreKeyPrivateKey: Uint8Array, signedPreKeySignature: Uint8Array, signedPreKeyTimestamp: number ): Promise; // Kyber pre-key restoration (for initializeFromStore) storeKyberPreKeys( kyberPreKeyIds: number[], kyberPreKeySerializedRecords: Uint8Array[] ): Promise; // Session management (async) - direct params to avoid Record conversion issues // Note: intParams combines all ints to stay under 10 param limit (Data/Uint8Array must be separate - arrays don't convert properly) createSession( addressName: string, intParams: number[], // [addressDeviceId, registrationId, deviceId, preKeyId, signedPreKeyId, kyberPreKeyId] preKeyPublic: Uint8Array, signedPreKeyPublic: Uint8Array, signedPreKeySignature: Uint8Array, identityKey: Uint8Array, kyberPreKey: Uint8Array, kyberPreKeySignature: Uint8Array ): Promise; hasSession(addressName: string, addressDeviceId: number): Promise; deleteSession(addressName: string, addressDeviceId: number): Promise; // Session persistence (for user switching) exportSession(addressName: string, addressDeviceId: number): Promise; importSession(addressName: string, addressDeviceId: number, serializedSession: Uint8Array): Promise; listSessions(): Promise<[string, number][]>; // Encryption/Decryption (async) - direct params to avoid Record conversion issues encrypt(addressName: string, addressDeviceId: number, plaintext: Uint8Array): Promise; decrypt(addressName: string, addressDeviceId: number, ciphertextType: string, ciphertextBody: Uint8Array): Promise; // Storage accessors getIdentityPublicKey(): Promise; getLocalRegistrationId(): Promise; // Clear all stores (for user switching) clear(): Promise; } // This call loads the native module object from the JSI export default requireNativeModule('SignalExpo');