/** * AvoEncryption — React Native ECIES encryption using @noble/ciphers. * * CRITICAL: React Native's Hermes runtime does NOT have crypto.subtle. * This module uses @noble/ciphers/aes gcm() for AES-GCM instead — fully synchronous. * Ephemeral key generation and ECDH use @noble/curves/p256. * * Wire format (MUST match all SDKs): * [0x00][65-byte ephemeral pubkey (uncompressed)][16-byte IV][16-byte auth tag][ciphertext] * → base64 * * Algorithm: * 1. Generate ephemeral P-256 key pair * 2. ECDH: ephemeral private key + recipient public key → shared secret (X-coordinate) * 3. KDF: SHA-256(shared secret) → 32-byte AES key * 4. AES-256-GCM encrypt with random 16-byte IV * 5. Serialize: version(1) + ephemeralPubKey(65) + IV(16) + authTag(16) + ciphertext * 6. Base64 encode */ /** * Determines whether encryption should be performed. * * Truth table: * dev + key → true * staging + key → true * prod + key → false * dev + null → false * dev + empty → false */ export declare function shouldEncrypt(env: string, publicEncryptionKey: string | null | undefined): boolean; /** * Encrypts a value using ECIES (P-256 ECDH + AES-256-GCM). * Fully synchronous — no async/await. * * @param value - The plaintext string to encrypt (already JSON-stringified by caller if needed) * @param publicKeyHex - The recipient's P-256 public key as a hex string (uncompressed, 04...) * @returns Base64-encoded ciphertext in Avo ECIES wire format */ export declare function encryptValue(value: string, publicKeyHex: string): string; /** * Encrypts event property values for transmission. * * Rules: * - List-type properties are omitted entirely * - On encryption failure: console.warn, omit the property, continue * - Returns new array with encryptedPropertyValue set (propertyType/propertyName preserved) */ export declare function encryptEventProperties(properties: Array<{ propertyName: string; propertyType: string; children?: any; failedEventIds?: string[]; passedEventIds?: string[]; }>, eventProps: Record, publicKeyHex: string): Array<{ propertyName: string; propertyType: string; encryptedPropertyValue?: string; children?: any; failedEventIds?: string[]; passedEventIds?: string[]; }>;