type SettingsValue = { key: string; value: string; domain?: string; }; type DeleteSettingsValue = { key: string; domain: string; }; interface SettingsManager { get: (key: string, domain?: string) => Promise; set: (settings: SettingsValue[] | SettingsValue) => Promise; delete: (args: DeleteSettingsValue | DeleteSettingsValue[] | string | string[]) => Promise; } type MetadataEntry = { key: string; value: string; }; /** * TODO Rename "Callback" suffixes, these are not callbacks */ type FetchMetadataCallback = () => Promise; type MutateMetadataCallback = (metadata: MetadataEntry[]) => Promise; type DeleteMetadataCallback = (keys: string[]) => Promise; interface MetadataManagerConfig { fetchMetadata: FetchMetadataCallback; mutateMetadata: MutateMetadataCallback; deleteMetadata: DeleteMetadataCallback; } /** * Metadata Manager use app metadata to store settings. * To minimize network calls, once fetched metadata are cached. * Cache invalidation occurs if any value is set. * * */ declare class MetadataManager implements SettingsManager { private settings; private fetchMetadata; private mutateMetadata; private deleteMetadata; constructor({ fetchMetadata, mutateMetadata, deleteMetadata }: MetadataManagerConfig); get(key: string, domain?: string): Promise; set(settings: SettingsValue[] | SettingsValue): Promise; /** * Typescript doesn't properly infer arguments, so they have to be rewritten explicitly */ delete(args: DeleteSettingsValue | DeleteSettingsValue[] | string | string[]): Promise; } type EncryptCallback = (value: string, secret: string) => string; type DecryptCallback = (value: string, secret: string) => string; /** * Encrypt string using AES-256 */ declare const encrypt: (data: string, key: string) => string; /** * Decrypt string encrypted with AES-256 */ declare const decrypt: (data: string, key: string) => string; interface EncryptedMetadataManagerConfig extends MetadataManagerConfig { encryptionKey: string; encryptionMethod?: EncryptCallback; decryptionMethod?: DecryptCallback; } /** * Encrypted Metadata Manager use app metadata to store settings. * To minimize network calls, once fetched metadata are cached. * Cache invalidation occurs if any value is set. * * By default data encryption use AES-256 algorithm. If you want to use a different * method, provide `encryptionMethod` and `decryptionMethod`. */ declare class EncryptedMetadataManager implements SettingsManager { private encryptionKey; private encryptionMethod; private decryptionMethod; private metadataManager; constructor({ fetchMetadata, mutateMetadata, encryptionKey, encryptionMethod, decryptionMethod, deleteMetadata, }: EncryptedMetadataManagerConfig); get(key: string, domain?: string): Promise; set(settings: SettingsValue[] | SettingsValue): Promise; delete(args: DeleteSettingsValue | DeleteSettingsValue[] | string | string[]): Promise; } export { type DecryptCallback, type DeleteMetadataCallback, type DeleteSettingsValue, type EncryptCallback, EncryptedMetadataManager, type FetchMetadataCallback, type MetadataEntry, MetadataManager, type MetadataManagerConfig, type MutateMetadataCallback, type SettingsManager, type SettingsValue, decrypt, encrypt };