import { AuthConfig, ServerType } from '@sasjs/utils/types' import { ExtraResponseAttributes } from '@sasjs/utils/types' import { asyncForEach } from '../utils' export type ExecuteFunction = () => Promise export interface JobExecutor { execute: ( sasJob: string, data: any, config: any, loginRequiredCallback?: any, authConfig?: AuthConfig, extraResponseAttributes?: ExtraResponseAttributes[] ) => Promise resendWaitingRequests: () => Promise } export abstract class BaseJobExecutor implements JobExecutor { constructor(protected serverUrl: string, protected serverType: ServerType) {} private waitingRequests: ExecuteFunction[] = [] abstract execute( sasJob: string, data: any, config: any, loginRequiredCallback?: any, authConfig?: AuthConfig | undefined, extraResponseAttributes?: ExtraResponseAttributes[] ): Promise resendWaitingRequests = async () => { await asyncForEach( this.waitingRequests, async (waitingRequest: ExecuteFunction) => { await waitingRequest() } ) this.waitingRequests = [] return } protected appendWaitingRequest(request: ExecuteFunction) { this.waitingRequests.push(request) } }