/// <reference types="node" />
import { Moment } from 'moment';
import { Secret, EFriendWsConfig, AJAX_ERROR, TR_TYPE, WEBSOCKET_HANDLER } from './efriend.type.js';
import { TRID_FIELD } from './efriend.constant.js';
export declare class EFriendWs {
    private readonly logger;
    private secret;
    private ws;
    private isOpen;
    private wsInterval;
    private wsIntervalTime;
    private wsKeys;
    private isKeepAlive;
    private wsHandlers;
    constructor({ secret, logger }: EFriendWsConfig);
    /**
     * @returns {Secret} secret
     */
    getSecret(): Secret;
    /**
     * @param {Secret} secret
     */
    setSecret(secret: Secret): void;
    getWebSocketHandlers(): Record<string, Array<WEBSOCKET_HANDLER>>;
    setWebSocketHandlers(wsHandlers: Record<string, Array<WEBSOCKET_HANDLER>>): void;
    addWebSocketHandler(event: string, name: string, handler: Function, isInternal?: boolean): void;
    delWebSocketHandler(event: string, name: string): void;
    /**
     * 한국투자증권 Web Socket을 초기화 한다.
     *
     * @returns {boolean}
     */
    initialize(): Promise<boolean>;
    /**
     * Web Socket에서 open event 처리
     */
    private onOpen;
    private _onOpen_1;
    private sleep;
    private _onOpen_2;
    /**
     * Web Socket에서 message event 처리
     *
     * @param {any} data                                    Buffer | ArrayBuffer | Buffer[]
     * @param {boolean} isBinary
     * @returns {void}
     */
    private onMessage;
    /**
     * Response data의 값을 검사 한다.
     *
     * @param {string} trid                                 트랜잭션 ID
     * @param {Array<TRID_FIELD>} fields                    필드 목록
     * @param {any} data                                    검사할 데이터 객체
     * @throws {any}
     */
    private checkResponsebody;
    /**
     * 필드의 값을 검사 한다.
     *
     * @param {TRID_FIELD} field                                필드 정보
     * @param {any} data                                field의 값을 포함하는 object
     * @param {string} trid                                     tr_id
     * @param {boolean} allowException                          true. Exception 허용
     * @throws {any}
     */
    checkField(field: TRID_FIELD, data: any, trid: string, allowException?: boolean): void;
    /**
     * Web Socket에서 close event 처리
     *
     * @param {number} code
     * @param {Buffer} reason
     */
    private onClose;
    private _onClose_1;
    private _onClose_2;
    /**
     * Web Socket에서 error event 처리
     *
     * @param {Error} err
     */
    private onError;
    /**
     * Web Socket에서 upgrade event 처리
     *
     * @param {any} res
     */
    private onUpgrade;
    /**
     * Web Socket에서 ping event 처리
     *
     * @param {Buffer} data
     */
    private onPing;
    /**
     * Web Socket에서 pong event 처리
     *
     * @param {Buffer} data
     */
    private onPong;
    /**
     * Web Socket에서 unexpected-response event 처리
     *
     * @param {unknown} req
     * @param {unknown} res
     */
    private onUnexpectedResponse;
    /**
     * Web Socket의 상태를 확인 한다.
     *
     * @returns {Null}
     */
    private checkAlive;
    /**
     * WebSocket 설정
     *
     * @param {string} trid             거래 아이디
     * @param {TR_TYPE} tr_type         거래 타입
     * @param {string} tr_key           종목코드 또는 HTS ID
     * @returns {boolean}               처리 결과
     */
    webSocket(trid: string, tr_type: TR_TYPE, tr_key: string): Promise<boolean>;
    /**
     * WebSocket에서 받은 메시지 처리
     */
    onMessageDefault(trid: string, header: any | null, body: any | null, _data: any, _isBinary?: boolean): Promise<void>;
    /**
     * WebSocket에서 받은 메시지 처리
     */
    onMessage_001(trid: string, _header: any | null, body: any | null, _data: any, _isBinary?: boolean): Promise<void>;
    /**
     * 한국투자증권의 운영시간 여부를 확인 한다
     *
     * @param {Moment} today
     * @returns {AJAX_ERROR}
     */
    isOperatingTime(today?: Moment): AJAX_ERROR;
    /**
     * 평문을 암호문으로 변환
     *
     * @param {string} data                                 평문
     * @param {string} key                                  Cipher Key
     * @param {string} iv                                   Binary Like
     * @returns {string}                                    암호문
     */
    _encrypt(data: string, key: string, iv: string): string;
    /**
     * 암호문을 평문으로 변환
     *
     * @param {string} data                                 암호문
     * @param {string} key                                  Cipher Key
     * @param {string} iv                                   Binary Like
     * @returns {string}                                    평문
     */
    private decrypt;
    close(code: number, data: string | Buffer): void;
}
export default EFriendWs;
//# sourceMappingURL=efriendWs.d.ts.map