metaapi.cloud-sdk
Version:
SDK for MetaApi, a professional cloud forex API which includes MetaTrader REST API and MetaTrader websocket API. Supports both MetaTrader 5 (MT5) and MetaTrader 4 (MT4). CopyFactory copy trading API included. (https://metaapi.cloud)
80 lines (79 loc) • 7.85 kB
JavaScript
;
import TimeoutError from '../clients/timeoutError';
/**
* Creates a promise that can be used as a handle. It will not raise errors when rejected until it is explicitly
* awaited or catch is set. The promise additionally has following methods:
* - `resolve(value)` resolves the promise with specified value
* - `reject(error)` rejects the promise with specified error
* - `timeout(milliseconds, errorMessage)` adds a timeout to reject the promise with `TimeoutError`
* @return {Promise} Modified handle promise
*/ export function createHandlePromise() {
let resolve, reject;
let promise = new Promise((res, rej)=>{
resolve = res;
reject = rej;
});
promise.resolve = (result)=>{
if (promise.completed) {
return;
}
promise.resolved = true;
promise.completed = true;
resolve(result);
};
promise.reject = (err)=>{
if (promise.completed) {
return;
}
promise.rejected = true;
promise.completed = true;
reject(err);
};
promise.timeout = (milliseconds, errorMessage)=>{
if (promise.completed) {
return;
}
let timeout = setTimeout(()=>promise.reject(new TimeoutError(errorMessage)), milliseconds);
promise.finally(()=>clearTimeout(timeout)).catch(()=>{});
return promise;
};
promise.catch(()=>{});
return promise;
}
/**
* Waits specified delay
* @param {Number} ms Milliseconds to wait
* @return {Promise} Promise resolving when the delay has ended
*/ export function delay(ms) {
return new Promise((res)=>setTimeout(res, ms));
}
/**
* Assembles log4js config from logging level map
* @param {Object} [config] log4js config
* @param {String} [config.defaultLevel = 'INFO'] Default logging level
* @param {Object} [config.levels] Logging levels
* @return {Object} Log4js config
*/ export function assembleLog4jsConfig(config = {}) {
let appenders = {
console: {
type: 'console'
}
};
let categories = {
default: {
appenders: Object.keys(appenders),
level: config.defaultLevel || 'INFO'
}
};
Object.keys(config.levels || {}).forEach((category)=>{
categories[category] = {
appenders: Object.keys(appenders),
level: config.levels[category]
};
});
return {
appenders,
categories
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBUaW1lb3V0RXJyb3IgZnJvbSAnLi4vY2xpZW50cy90aW1lb3V0RXJyb3InO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwcm9taXNlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBoYW5kbGUuIEl0IHdpbGwgbm90IHJhaXNlIGVycm9ycyB3aGVuIHJlamVjdGVkIHVudGlsIGl0IGlzIGV4cGxpY2l0bHlcbiAqIGF3YWl0ZWQgb3IgY2F0Y2ggaXMgc2V0LiBUaGUgcHJvbWlzZSBhZGRpdGlvbmFsbHkgaGFzIGZvbGxvd2luZyBtZXRob2RzOlxuICogLSBgcmVzb2x2ZSh2YWx1ZSlgIHJlc29sdmVzIHRoZSBwcm9taXNlIHdpdGggc3BlY2lmaWVkIHZhbHVlXG4gKiAtIGByZWplY3QoZXJyb3IpYCByZWplY3RzIHRoZSBwcm9taXNlIHdpdGggc3BlY2lmaWVkIGVycm9yXG4gKiAtIGB0aW1lb3V0KG1pbGxpc2Vjb25kcywgZXJyb3JNZXNzYWdlKWAgYWRkcyBhIHRpbWVvdXQgdG8gcmVqZWN0IHRoZSBwcm9taXNlIHdpdGggYFRpbWVvdXRFcnJvcmBcbiAqIEByZXR1cm4ge1Byb21pc2V9IE1vZGlmaWVkIGhhbmRsZSBwcm9taXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIYW5kbGVQcm9taXNlKCkge1xuICBsZXQgcmVzb2x2ZSwgcmVqZWN0O1xuICBsZXQgcHJvbWlzZTogYW55ID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgcmVzb2x2ZSA9IHJlcztcbiAgICByZWplY3QgPSByZWo7XG4gIH0pO1xuICBwcm9taXNlLnJlc29sdmUgPSAocmVzdWx0KSA9PiB7XG4gICAgaWYgKHByb21pc2UuY29tcGxldGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHByb21pc2UucmVzb2x2ZWQgPSB0cnVlO1xuICAgIHByb21pc2UuY29tcGxldGVkID0gdHJ1ZTtcbiAgICByZXNvbHZlKHJlc3VsdCk7XG4gIH07XG4gIHByb21pc2UucmVqZWN0ID0gKGVycikgPT4ge1xuICAgIGlmIChwcm9taXNlLmNvbXBsZXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwcm9taXNlLnJlamVjdGVkID0gdHJ1ZTtcbiAgICBwcm9taXNlLmNvbXBsZXRlZCA9IHRydWU7XG4gICAgcmVqZWN0KGVycik7XG4gIH07XG4gIHByb21pc2UudGltZW91dCA9IChtaWxsaXNlY29uZHMsIGVycm9yTWVzc2FnZSkgPT4ge1xuICAgIGlmIChwcm9taXNlLmNvbXBsZXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcHJvbWlzZS5yZWplY3QobmV3IFRpbWVvdXRFcnJvcihlcnJvck1lc3NhZ2UpKSwgbWlsbGlzZWNvbmRzKTtcbiAgICBwcm9taXNlLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG4gIHByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLyoqXG4gKiBXYWl0cyBzcGVjaWZpZWQgZGVsYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSBtcyBNaWxsaXNlY29uZHMgdG8gd2FpdFxuICogQHJldHVybiB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZpbmcgd2hlbiB0aGUgZGVsYXkgaGFzIGVuZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzID0+IHNldFRpbWVvdXQocmVzLCBtcykpO1xufVxuXG4vKipcbiAqIEFzc2VtYmxlcyBsb2c0anMgY29uZmlnIGZyb20gbG9nZ2luZyBsZXZlbCBtYXBcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBsb2c0anMgY29uZmlnXG4gKiBAcGFyYW0ge1N0cmluZ30gW2NvbmZpZy5kZWZhdWx0TGV2ZWwgPSAnSU5GTyddIERlZmF1bHQgbG9nZ2luZyBsZXZlbFxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWcubGV2ZWxzXSBMb2dnaW5nIGxldmVsc1xuICogQHJldHVybiB7T2JqZWN0fSBMb2c0anMgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlbWJsZUxvZzRqc0NvbmZpZyhjb25maWc6IGFueSA9IHt9KSB7XG4gIGxldCBhcHBlbmRlcnMgPSB7Y29uc29sZToge3R5cGU6ICdjb25zb2xlJ319O1xuICBsZXQgY2F0ZWdvcmllcyA9IHtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBhcHBlbmRlcnM6IE9iamVjdC5rZXlzKGFwcGVuZGVycyksXG4gICAgICBsZXZlbDogY29uZmlnLmRlZmF1bHRMZXZlbCB8fCAnSU5GTydcbiAgICB9XG4gIH07XG4gIE9iamVjdC5rZXlzKGNvbmZpZy5sZXZlbHMgfHwge30pLmZvckVhY2goKGNhdGVnb3J5KSA9PiB7XG4gICAgY2F0ZWdvcmllc1tjYXRlZ29yeV0gPSB7XG4gICAgICBhcHBlbmRlcnM6IE9iamVjdC5rZXlzKGFwcGVuZGVycyksXG4gICAgICBsZXZlbDogY29uZmlnLmxldmVsc1tjYXRlZ29yeV1cbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHthcHBlbmRlcnMsIGNhdGVnb3JpZXN9O1xufVxuIl0sIm5hbWVzIjpbIlRpbWVvdXRFcnJvciIsImNyZWF0ZUhhbmRsZVByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXMiLCJyZWoiLCJyZXN1bHQiLCJjb21wbGV0ZWQiLCJyZXNvbHZlZCIsImVyciIsInJlamVjdGVkIiwidGltZW91dCIsIm1pbGxpc2Vjb25kcyIsImVycm9yTWVzc2FnZSIsInNldFRpbWVvdXQiLCJmaW5hbGx5IiwiY2xlYXJUaW1lb3V0IiwiY2F0Y2giLCJkZWxheSIsIm1zIiwiYXNzZW1ibGVMb2c0anNDb25maWciLCJjb25maWciLCJhcHBlbmRlcnMiLCJjb25zb2xlIiwidHlwZSIsImNhdGVnb3JpZXMiLCJkZWZhdWx0IiwiT2JqZWN0Iiwia2V5cyIsImxldmVsIiwiZGVmYXVsdExldmVsIiwibGV2ZWxzIiwiZm9yRWFjaCIsImNhdGVnb3J5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUVBLE9BQU9BLGtCQUFrQiwwQkFBMEI7QUFFbkQ7Ozs7Ozs7Q0FPQyxHQUNELE9BQU8sU0FBU0M7SUFDZCxJQUFJQyxTQUFTQztJQUNiLElBQUlDLFVBQWUsSUFBSUMsUUFBUSxDQUFDQyxLQUFLQztRQUNuQ0wsVUFBVUk7UUFDVkgsU0FBU0k7SUFDWDtJQUNBSCxRQUFRRixPQUFPLEdBQUcsQ0FBQ007UUFDakIsSUFBSUosUUFBUUssU0FBUyxFQUFFO1lBQ3JCO1FBQ0Y7UUFDQUwsUUFBUU0sUUFBUSxHQUFHO1FBQ25CTixRQUFRSyxTQUFTLEdBQUc7UUFDcEJQLFFBQVFNO0lBQ1Y7SUFDQUosUUFBUUQsTUFBTSxHQUFHLENBQUNRO1FBQ2hCLElBQUlQLFFBQVFLLFNBQVMsRUFBRTtZQUNyQjtRQUNGO1FBQ0FMLFFBQVFRLFFBQVEsR0FBRztRQUNuQlIsUUFBUUssU0FBUyxHQUFHO1FBQ3BCTixPQUFPUTtJQUNUO0lBQ0FQLFFBQVFTLE9BQU8sR0FBRyxDQUFDQyxjQUFjQztRQUMvQixJQUFJWCxRQUFRSyxTQUFTLEVBQUU7WUFDckI7UUFDRjtRQUNBLElBQUlJLFVBQVVHLFdBQVcsSUFBTVosUUFBUUQsTUFBTSxDQUFDLElBQUlILGFBQWFlLGdCQUFnQkQ7UUFDL0VWLFFBQVFhLE9BQU8sQ0FBQyxJQUFNQyxhQUFhTCxVQUFVTSxLQUFLLENBQUMsS0FBTztRQUMxRCxPQUFPZjtJQUNUO0lBQ0FBLFFBQVFlLEtBQUssQ0FBQyxLQUFPO0lBQ3JCLE9BQU9mO0FBQ1Q7QUFFQTs7OztDQUlDLEdBQ0QsT0FBTyxTQUFTZ0IsTUFBTUMsRUFBRTtJQUN0QixPQUFPLElBQUloQixRQUFRQyxDQUFBQSxNQUFPVSxXQUFXVixLQUFLZTtBQUM1QztBQUVBOzs7Ozs7Q0FNQyxHQUNELE9BQU8sU0FBU0MscUJBQXFCQyxTQUFjLENBQUMsQ0FBQztJQUNuRCxJQUFJQyxZQUFZO1FBQUNDLFNBQVM7WUFBQ0MsTUFBTTtRQUFTO0lBQUM7SUFDM0MsSUFBSUMsYUFBYTtRQUNmQyxTQUFTO1lBQ1BKLFdBQVdLLE9BQU9DLElBQUksQ0FBQ047WUFDdkJPLE9BQU9SLE9BQU9TLFlBQVksSUFBSTtRQUNoQztJQUNGO0lBQ0FILE9BQU9DLElBQUksQ0FBQ1AsT0FBT1UsTUFBTSxJQUFJLENBQUMsR0FBR0MsT0FBTyxDQUFDLENBQUNDO1FBQ3hDUixVQUFVLENBQUNRLFNBQVMsR0FBRztZQUNyQlgsV0FBV0ssT0FBT0MsSUFBSSxDQUFDTjtZQUN2Qk8sT0FBT1IsT0FBT1UsTUFBTSxDQUFDRSxTQUFTO1FBQ2hDO0lBQ0Y7SUFDQSxPQUFPO1FBQUNYO1FBQVdHO0lBQVU7QUFDL0IifQ==