import * as t from 'io-ts'; import { O } from './utils/fp'; import { Observable } from 'rxjs'; export interface Store { /** get string for key */ get: (k: string) => O.Option; /** set string for key */ set: (k: string, a: string) => void; /** delete string for key */ clear: (k: string) => void; } export interface StoreEntry { get: () => O.Option; set: (a: A) => void; clear: () => void; observe: () => Observable>; } export interface DataWrapper { wrap: (a: A) => Wrapped; unwrap: (a: Wrapped) => A; wrapCodec: (a: t.Type) => t.Type; } export interface InitEntryFactoryPayload { wrapper: DataWrapper; validate: (a: Wrapped) => boolean; } export interface InitEntryPayload { /** key used in key-value storage */ key: string; /** codec used to validate data type */ codec: t.Type; /** IO entry */ store: Store; } export interface InitEntryWithExpiryPayload extends InitEntryPayload { /** expiration time, in mileseconds */ expiry: number; }