import { Observer } from 'rxjs'; import { NetworkService } from '@wm/mobile/core'; import { LocalDBManagementService } from './local-db-management.service'; import { LocalKeyValueService } from './local-key-value.service'; import { LocalDBStore } from '../models/local-db-store'; export interface Change { id?: number; errorMessage?: string; hasError: number; operation: string; params: any; service: string; } export interface FlushContext { clear: () => Promise; get: (key: string) => any; save: () => Promise; } export interface Worker { onAddCall?: (change: Change) => (Promise | void); preFlush?: (context: FlushContext) => (Promise | void); postFlush?: (pushInfo: PushInfo, context: FlushContext) => (Promise | void); preCall?: (change: Change) => (Promise | void); postCallError?: (change: Change, error: any) => (Promise | void); postCallSuccess?: (change: Change, response: any) => (Promise | void); transformParamsToMap?: (change: Change) => (Promise | void); transformParamsFromMap?: (change: Change) => (Promise | void); } export interface PullInfo { databases: Array; totalRecordsToPull: number; totalPulledRecordCount: number; startTime: Date; endTime: Date; } export interface PushInfo { completedTaskCount: number; endTime: Date; failedTaskCount: number; inProgress: boolean; startTime: Date; successfulTaskCount: number; totalTaskCount: number; } export declare abstract class PushService { abstract push(change: Change): Promise; } export declare const CONTEXT_KEY = "changeLogService.flushContext"; export declare const LAST_PUSH_INFO_KEY = "changeLogService.lastPushInfo"; export declare class ChangeLogService { private localDBManagementService; private localKeyValueService; private pushService; private networkService; static readonly SERVICE_NAME = "ChangeLogService"; private workers; private flushContext; private currentPushInfo; private deferredFlush; constructor(localDBManagementService: LocalDBManagementService, localKeyValueService: LocalKeyValueService, pushService: PushService, networkService: NetworkService); /** * adds a service call to the log. Call will be invoked in next flush. * * @Param {string} name of service (This should be available through $injector) * @Param {string} name of method to invoke. * @Param {object} params */ add(service: string, operation: string, params: any): Promise; addWorker(worker: Worker): void; /** * Clears the current log. */ clearLog(): Promise; /** * Flush the current log. If a flush is already running, then the promise of that flush is returned back. */ flush(progressObserver: Observer): Promise; /** * Returns the complete change list */ getChanges(): Promise; /** * @returns {array} an array of changes that failed with error. */ getErrors(): Promise; getLastPushInfo(): Promise; /** * @returns {number} number of changes that are pending to push. */ getLogLength(): Promise; getStore(): Promise; /** * Returns true, if a flush process is in progress. Otherwise, returns false. * * @returns {boolean} returns true, if a flush process is in progress. Otherwise, returns false. */ isFlushInProgress(): boolean; /** * Stops the ongoing flush process. * * @returns {object} a promise that is resolved when the flush process is stopped. */ stop(): Promise; private createContext; private _flush; private flushChange; private getNextChange; private getWorkers; }