@mojaloop/inter-scheme-proxy-cache-lib
Version:
Common component, that provides scheme proxy caching mapping (ISPC)
72 lines (69 loc) • 3.48 kB
TypeScript
import { Redis, Cluster } from 'ioredis';
import { storageTypeValues } from '../constants.js';
import { LogLevel, Prettify } from './utils.js';
type StorageType = (typeof storageTypeValues)[number];
interface IProxyCache {
addDfspIdToProxyMapping: (dfspId: string, proxyId: string) => Promise<boolean>;
lookupProxyByDfspId: (dfspId: string) => Promise<string | null>;
removeDfspIdFromProxyMapping: (dfspId: string) => Promise<boolean>;
removeProxyGetPartiesTimeout: (alsReq: AlsRequestDetails, proxyId: string) => Promise<boolean>;
setProxyGetPartiesTimeout: (alsReq: AlsRequestDetails, proxyId: string, ttlSec?: number) => Promise<boolean>;
/**
* Should be called if there's no party's DFSP from Oracle GET /participant/{ID} request,
* before sending discovery calls to all available proxies.
*/
setSendToProxiesList: (alsRequest: AlsRequestDetails, proxyIds: string[], ttlSec: number) => Promise<boolean>;
receivedSuccessResponse: (alsRequest: AlsRequestDetails) => Promise<boolean>;
/**
* Returns `true` if the last failed response is detected. In that case Parties error callback should be sent.
*/
receivedErrorResponse: (alsRequest: AlsRequestDetails, proxyId: string) => Promise<IsLastFailure>;
isPendingCallback: (alsRequest: AlsRequestDetails) => Promise<boolean>;
processExpiredAlsKeys: (callbackFn: ProcessExpiryKeyCallback, batchSize: number) => Promise<unknown>;
processExpiredProxyGetPartiesKeys: (callbackFn: ProcessExpiryKeyCallback, batchSize: number) => Promise<unknown>;
connect: () => Promise<RedisConnectionStatus>;
disconnect: () => Promise<boolean>;
healthCheck: () => Promise<boolean>;
isConnected: boolean;
}
type ProcessNodeStreamSingleKeyCallback = (key: string) => Promise<unknown>;
type ProcessExpiryKeyCallback = (key: string) => Promise<void>;
type PartyIdType = string;
type AlsRequestDetails = {
sourceId: string;
type: PartyIdType;
partyId: string;
};
type IsLastFailure = boolean;
type ProxyCacheFactory = (type: StorageType, proxyConfig: ProxyCacheConfig) => IProxyCache;
type ProxyCacheConfig = RedisProxyCacheConfig | RedisClusterProxyCacheConfig | MySqlProxyCacheConfig;
type RedisProxyCacheConfig = Prettify<BasicConnectionConfig & RedisOptions>;
type RedisClusterProxyCacheConfig = Prettify<RedisClusterConnectionConfig & RedisClusterOptions>;
type RedisClusterConnectionConfig = {
cluster: BasicConnectionConfig[];
};
type RedisOptions = {
username?: string;
password?: string;
/** @defaultValue `true` */
lazyConnect?: boolean;
db?: number;
};
type RedisClusterOptions = RedisOptions;
type RedisConnectionStatus = Redis['status'] | Cluster['status'];
/** **(!)** _MySqlProxyCacheConfig_ is not supported yet */
type MySqlProxyCacheConfig = Prettify<BasicConnectionConfig & {
database: string;
user?: string;
password?: string;
}>;
type BasicConnectionConfig = {
host: string;
port: number;
};
type LibConfig = {
logLevel: LogLevel;
/** @defaultValue `30sec` */
defaultTtlSec: number;
};
export type { AlsRequestDetails, BasicConnectionConfig, IProxyCache, IsLastFailure, LibConfig, MySqlProxyCacheConfig, PartyIdType, ProcessExpiryKeyCallback, ProcessNodeStreamSingleKeyCallback, ProxyCacheConfig, ProxyCacheFactory, RedisClusterConnectionConfig, RedisClusterOptions, RedisClusterProxyCacheConfig, RedisConnectionStatus, RedisOptions, RedisProxyCacheConfig, StorageType };