kestrel.markets
Version:
A typed, token-efficient language + runtime for agentic trading: agents author bounded plans, the runtime fires them at the tick. CLI + typed library + MCP server.
1,135 lines (1,127 loc) • 768 kB
JavaScript
import {
__commonJS,
__require
} from "./bin-wckvcay0.js";
// node_modules/eventemitter3/index.js
var require_eventemitter3 = __commonJS((exports, module) => {
var has = Object.prototype.hasOwnProperty;
var prefix = "~";
function Events() {}
if (Object.create) {
Events.prototype = Object.create(null);
if (!new Events().__proto__)
prefix = false;
}
function EE(fn, context, once) {
this.fn = fn;
this.context = context;
this.once = once || false;
}
function addListener(emitter, event, fn, context, once) {
if (typeof fn !== "function") {
throw new TypeError("The listener must be a function");
}
var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
if (!emitter._events[evt])
emitter._events[evt] = listener, emitter._eventsCount++;
else if (!emitter._events[evt].fn)
emitter._events[evt].push(listener);
else
emitter._events[evt] = [emitter._events[evt], listener];
return emitter;
}
function clearEvent(emitter, evt) {
if (--emitter._eventsCount === 0)
emitter._events = new Events;
else
delete emitter._events[evt];
}
function EventEmitter() {
this._events = new Events;
this._eventsCount = 0;
}
EventEmitter.prototype.eventNames = function eventNames() {
var names = [], events, name;
if (this._eventsCount === 0)
return names;
for (name in events = this._events) {
if (has.call(events, name))
names.push(prefix ? name.slice(1) : name);
}
if (Object.getOwnPropertySymbols) {
return names.concat(Object.getOwnPropertySymbols(events));
}
return names;
};
EventEmitter.prototype.listeners = function listeners(event) {
var evt = prefix ? prefix + event : event, handlers = this._events[evt];
if (!handlers)
return [];
if (handlers.fn)
return [handlers.fn];
for (var i = 0, l = handlers.length, ee = new Array(l);i < l; i++) {
ee[i] = handlers[i].fn;
}
return ee;
};
EventEmitter.prototype.listenerCount = function listenerCount(event) {
var evt = prefix ? prefix + event : event, listeners = this._events[evt];
if (!listeners)
return 0;
if (listeners.fn)
return 1;
return listeners.length;
};
EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
var evt = prefix ? prefix + event : event;
if (!this._events[evt])
return false;
var listeners = this._events[evt], len = arguments.length, args, i;
if (listeners.fn) {
if (listeners.once)
this.removeListener(event, listeners.fn, undefined, true);
switch (len) {
case 1:
return listeners.fn.call(listeners.context), true;
case 2:
return listeners.fn.call(listeners.context, a1), true;
case 3:
return listeners.fn.call(listeners.context, a1, a2), true;
case 4:
return listeners.fn.call(listeners.context, a1, a2, a3), true;
case 5:
return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
case 6:
return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
}
for (i = 1, args = new Array(len - 1);i < len; i++) {
args[i - 1] = arguments[i];
}
listeners.fn.apply(listeners.context, args);
} else {
var length = listeners.length, j;
for (i = 0;i < length; i++) {
if (listeners[i].once)
this.removeListener(event, listeners[i].fn, undefined, true);
switch (len) {
case 1:
listeners[i].fn.call(listeners[i].context);
break;
case 2:
listeners[i].fn.call(listeners[i].context, a1);
break;
case 3:
listeners[i].fn.call(listeners[i].context, a1, a2);
break;
case 4:
listeners[i].fn.call(listeners[i].context, a1, a2, a3);
break;
default:
if (!args)
for (j = 1, args = new Array(len - 1);j < len; j++) {
args[j - 1] = arguments[j];
}
listeners[i].fn.apply(listeners[i].context, args);
}
}
}
return true;
};
EventEmitter.prototype.on = function on(event, fn, context) {
return addListener(this, event, fn, context, false);
};
EventEmitter.prototype.once = function once(event, fn, context) {
return addListener(this, event, fn, context, true);
};
EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
var evt = prefix ? prefix + event : event;
if (!this._events[evt])
return this;
if (!fn) {
clearEvent(this, evt);
return this;
}
var listeners = this._events[evt];
if (listeners.fn) {
if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
clearEvent(this, evt);
}
} else {
for (var i = 0, events = [], length = listeners.length;i < length; i++) {
if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
events.push(listeners[i]);
}
}
if (events.length)
this._events[evt] = events.length === 1 ? events[0] : events;
else
clearEvent(this, evt);
}
return this;
};
EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
var evt;
if (event) {
evt = prefix ? prefix + event : event;
if (this._events[evt])
clearEvent(this, evt);
} else {
this._events = new Events;
this._eventsCount = 0;
}
return this;
};
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
EventEmitter.prototype.addListener = EventEmitter.prototype.on;
EventEmitter.prefixed = prefix;
EventEmitter.EventEmitter = EventEmitter;
if (typeof module !== "undefined") {
module.exports = EventEmitter;
}
});
// node_modules/command-buffer/dist/command-buffer.js
var require_command_buffer = __commonJS((exports, module) => {
(function() {
var objectTypes = {
boolean: false,
function: true,
object: true,
number: false,
string: false,
undefined: false
};
var root = objectTypes[typeof window] && window || this;
var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
var freeGlobal = objectTypes[typeof global] && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var CommandBuffer = function(onCommandCallback, onCommandCallbackContext) {
this._cb = onCommandCallback;
this._cbCtx = onCommandCallbackContext;
this._commands = [];
this._commandsCurrent = [];
this._paused = false;
this._processing = false;
};
CommandBuffer.prototype._concatCurrentCommands = function() {
this._commands = this._commandsCurrent.concat(this._commands);
this._commandsCurrent.length = 0;
};
CommandBuffer.prototype._process = function() {
var command;
while (!this._paused) {
this._processing = true;
if (!this._commands.length) {
this._concatCurrentCommands();
}
command = this._commands.shift();
if (!command) {
break;
}
this._cb.call(this._cbCtx, command.type, command.data);
this._concatCurrentCommands();
}
this._processing = false;
};
CommandBuffer.prototype.pause = function() {
this._paused = true;
};
CommandBuffer.prototype.resume = function() {
this._paused = false;
this._concatCurrentCommands();
if (!this._processing) {
this._process();
}
};
CommandBuffer.prototype.run = function(type, data) {
this._commandsCurrent.push({
type,
data
});
if (!this._processing) {
this._process();
}
};
CommandBuffer.prototype.schedule = function(type, data) {
this._commands.push({
type,
data
});
if (!this._processing) {
this._process();
}
};
if (typeof define === "function" && typeof define.amd === "object" && define.amd) {
root.CommandBuffer = CommandBuffer;
define(function() {
return CommandBuffer;
});
} else if (freeExports && freeModule) {
if (moduleExports) {
(freeModule.exports = CommandBuffer).CommandBuffer = CommandBuffer;
} else {
freeExports.CommandBuffer = CommandBuffer;
}
} else {
root.CommandBuffer = CommandBuffer;
}
}).call(exports);
});
// node_modules/function-rate-limit/index.js
var require_function_rate_limit = __commonJS((exports, module) => {
module.exports = rateLimit;
function rateLimit(limitCount, limitInterval, fn) {
var fifo = [];
var count = limitCount;
function call_next(args) {
setTimeout(function() {
if (fifo.length > 0) {
call_next();
} else {
count = count + 1;
}
}, limitInterval);
var call_args = fifo.shift();
if (!call_args && args) {
fn.apply(args[0], args[1]);
return;
}
fn.apply(call_args[0], call_args[1]);
}
return function rate_limited_function() {
var ctx = this;
var args = Array.prototype.slice.call(arguments);
if (count <= 0) {
fifo.push([ctx, args]);
return;
}
count = count - 1;
call_next([ctx, args]);
};
}
});
// node_modules/@stoqey/ib/dist/api/data/enum/event-name.js
var require_event_name = __commonJS((exports) => {
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventName = undefined;
var EventName;
(function(EventName2) {
EventName2["all"] = "all";
EventName2["connected"] = "connected";
EventName2["disconnected"] = "disconnected";
EventName2["server"] = "server";
EventName2["error"] = "error";
EventName2["info"] = "info";
EventName2["received"] = "received";
EventName2["sent"] = "sent";
EventName2["result"] = "result";
EventName2["accountDownloadEnd"] = "accountDownloadEnd";
EventName2["accountSummary"] = "accountSummary";
EventName2["accountSummaryEnd"] = "accountSummaryEnd";
EventName2["accountUpdateMulti"] = "accountUpdateMulti";
EventName2["accountUpdateMultiEnd"] = "accountUpdateMultiEnd";
EventName2["bondContractDetails"] = "bondContractDetails";
EventName2["commissionReport"] = "commissionReport";
EventName2["completedOrder"] = "completedOrder";
EventName2["completedOrdersEnd"] = "completedOrdersEnd";
EventName2["connectionClosed"] = "connectionClosed";
EventName2["contractDetails"] = "contractDetails";
EventName2["contractDetailsEnd"] = "contractDetailsEnd";
EventName2["currentTime"] = "currentTime";
EventName2["deltaNeutralValidation"] = "deltaNeutralValidation";
EventName2["tickSnapshotEnd"] = "tickSnapshotEnd";
EventName2["marketDataType"] = "marketDataType";
EventName2["displayGroupList"] = "displayGroupList";
EventName2["displayGroupUpdated"] = "displayGroupUpdated";
EventName2["execDetails"] = "execDetails";
EventName2["execDetailsEnd"] = "execDetailsEnd";
EventName2["familyCodes"] = "familyCodes";
EventName2["contractDescriptions"] = "contractDescriptions";
EventName2["fundamentalData"] = "fundamentalData";
EventName2["headTimestamp"] = "headTimestamp";
EventName2["histogramData"] = "histogramData";
EventName2["historicalDataUpdate"] = "historicalDataUpdate";
EventName2["historicalNews"] = "historicalNews";
EventName2["historicalNewsEnd"] = "historicalNewsEnd";
EventName2["historicalTicks"] = "historicalTicks";
EventName2["historicalTicksBidAsk"] = "historicalTicksBidAsk";
EventName2["historicalTicksLast"] = "historicalTicksLast";
EventName2["managedAccounts"] = "managedAccounts";
EventName2["marketRule"] = "marketRule";
EventName2["mktDepthExchanges"] = "mktDepthExchanges";
EventName2["newsArticle"] = "newsArticle";
EventName2["newsProviders"] = "newsProviders";
EventName2["nextValidId"] = "nextValidId";
EventName2["openOrder"] = "openOrder";
EventName2["openOrderEnd"] = "openOrderEnd";
EventName2["orderBound"] = "orderBound";
EventName2["orderStatus"] = "orderStatus";
EventName2["pnl"] = "pnl";
EventName2["pnlSingle"] = "pnlSingle";
EventName2["position"] = "position";
EventName2["positionEnd"] = "positionEnd";
EventName2["positionMulti"] = "positionMulti";
EventName2["positionMultiEnd"] = "positionMultiEnd";
EventName2["realtimeBar"] = "realtimeBar";
EventName2["receiveFA"] = "receiveFA";
EventName2["replaceFAEnd"] = "replaceFAEnd";
EventName2["rerouteMktDataReq"] = "rerouteMktDataReq";
EventName2["rerouteMktDepthReq"] = "rerouteMktDepthReq";
EventName2["scannerData"] = "scannerData";
EventName2["scannerDataEnd"] = "scannerDataEnd";
EventName2["scannerParameters"] = "scannerParameters";
EventName2["securityDefinitionOptionParameter"] = "securityDefinitionOptionParameter";
EventName2["securityDefinitionOptionParameterEnd"] = "securityDefinitionOptionParameterEnd";
EventName2["smartComponents"] = "smartComponents";
EventName2["softDollarTiers"] = "softDollarTiers";
EventName2["symbolSamples"] = "symbolSamples";
EventName2["tickByTickAllLast"] = "tickByTickAllLast";
EventName2["tickByTickBidAsk"] = "tickByTickBidAsk";
EventName2["tickByTickMidPoint"] = "tickByTickMidPoint";
EventName2["tickEFP"] = "tickEFP";
EventName2["tickGeneric"] = "tickGeneric";
EventName2["tickNews"] = "tickNews";
EventName2["tickOptionComputation"] = "tickOptionComputation";
EventName2["tickPrice"] = "tickPrice";
EventName2["tickReqParams"] = "tickReqParams";
EventName2["tickSize"] = "tickSize";
EventName2["tickString"] = "tickString";
EventName2["updateAccountTime"] = "updateAccountTime";
EventName2["updateAccountValue"] = "updateAccountValue";
EventName2["updatePortfolio"] = "updatePortfolio";
EventName2["updateMktDepth"] = "updateMktDepth";
EventName2["updateMktDepthL2"] = "updateMktDepthL2";
EventName2["updateNewsBulletin"] = "updateNewsBulletin";
EventName2["historicalData"] = "historicalData";
EventName2["wshMetaData"] = "wshMetaData";
EventName2["wshEventData"] = "wshEventData";
EventName2["historicalSchedule"] = "historicalSchedule";
EventName2["userInfo"] = "userInfo";
})(EventName || (exports.EventName = EventName = {}));
});
// node_modules/dotenv/lib/main.js
var require_main = __commonJS((exports, module) => {
var fs = __require("fs");
var path = __require("path");
var os = __require("os");
var crypto = __require("crypto");
var TIPS = [
"◈ encrypted .env [www.dotenvx.com]",
"◈ secrets for agents [www.dotenvx.com]",
"⌁ auth for agents [www.vestauth.com]",
"⌘ custom filepath { path: '/custom/path/.env' }",
"⌘ enable debugging { debug: true }",
"⌘ override existing { override: true }",
"⌘ suppress logs { quiet: true }",
"⌘ multiple files { path: ['.env.local', '.env'] }"
];
function _getRandomTip() {
return TIPS[Math.floor(Math.random() * TIPS.length)];
}
function parseBoolean(value) {
if (typeof value === "string") {
return !["false", "0", "no", "off", ""].includes(value.toLowerCase());
}
return Boolean(value);
}
function supportsAnsi() {
return process.stdout.isTTY;
}
function dim(text) {
return supportsAnsi() ? `\x1B[2m${text}\x1B[0m` : text;
}
var LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
function parse(src) {
const obj = {};
let lines = src.toString();
lines = lines.replace(/\r\n?/mg, `
`);
let match;
while ((match = LINE.exec(lines)) != null) {
const key = match[1];
let value = match[2] || "";
value = value.trim();
const maybeQuote = value[0];
value = value.replace(/^(['"`])([\s\S]*)\1$/mg, "$2");
if (maybeQuote === '"') {
value = value.replace(/\\n/g, `
`);
value = value.replace(/\\r/g, "\r");
}
obj[key] = value;
}
return obj;
}
function _parseVault(options) {
options = options || {};
const vaultPath = _vaultPath(options);
options.path = vaultPath;
const result = DotenvModule.configDotenv(options);
if (!result.parsed) {
const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`);
err.code = "MISSING_DATA";
throw err;
}
const keys = _dotenvKey(options).split(",");
const length = keys.length;
let decrypted;
for (let i = 0;i < length; i++) {
try {
const key = keys[i].trim();
const attrs = _instructions(result, key);
decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key);
break;
} catch (error) {
if (i + 1 >= length) {
throw error;
}
}
}
return DotenvModule.parse(decrypted);
}
function _warn(message) {
console.error(`⚠ ${message}`);
}
function _debug(message) {
console.log(`┆ ${message}`);
}
function _log(message) {
console.log(`◇ ${message}`);
}
function _dotenvKey(options) {
if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {
return options.DOTENV_KEY;
}
if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {
return process.env.DOTENV_KEY;
}
return "";
}
function _instructions(result, dotenvKey) {
let uri;
try {
uri = new URL(dotenvKey);
} catch (error) {
if (error.code === "ERR_INVALID_URL") {
const err = new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");
err.code = "INVALID_DOTENV_KEY";
throw err;
}
throw error;
}
const key = uri.password;
if (!key) {
const err = new Error("INVALID_DOTENV_KEY: Missing key part");
err.code = "INVALID_DOTENV_KEY";
throw err;
}
const environment = uri.searchParams.get("environment");
if (!environment) {
const err = new Error("INVALID_DOTENV_KEY: Missing environment part");
err.code = "INVALID_DOTENV_KEY";
throw err;
}
const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`;
const ciphertext = result.parsed[environmentKey];
if (!ciphertext) {
const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`);
err.code = "NOT_FOUND_DOTENV_ENVIRONMENT";
throw err;
}
return { ciphertext, key };
}
function _vaultPath(options) {
let possibleVaultPath = null;
if (options && options.path && options.path.length > 0) {
if (Array.isArray(options.path)) {
for (const filepath of options.path) {
if (fs.existsSync(filepath)) {
possibleVaultPath = filepath.endsWith(".vault") ? filepath : `${filepath}.vault`;
}
}
} else {
possibleVaultPath = options.path.endsWith(".vault") ? options.path : `${options.path}.vault`;
}
} else {
possibleVaultPath = path.resolve(process.cwd(), ".env.vault");
}
if (fs.existsSync(possibleVaultPath)) {
return possibleVaultPath;
}
return null;
}
function _resolveHome(envPath) {
return envPath[0] === "~" ? path.join(os.homedir(), envPath.slice(1)) : envPath;
}
function _configVault(options) {
const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || options && options.debug);
const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || options && options.quiet);
if (debug || !quiet) {
_log("loading env from encrypted .env.vault");
}
const parsed = DotenvModule._parseVault(options);
let processEnv = process.env;
if (options && options.processEnv != null) {
processEnv = options.processEnv;
}
DotenvModule.populate(processEnv, parsed, options);
return { parsed };
}
function configDotenv(options) {
const dotenvPath = path.resolve(process.cwd(), ".env");
let encoding = "utf8";
let processEnv = process.env;
if (options && options.processEnv != null) {
processEnv = options.processEnv;
}
let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || options && options.debug);
let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || options && options.quiet);
if (options && options.encoding) {
encoding = options.encoding;
} else {
if (debug) {
_debug("no encoding is specified (UTF-8 is used by default)");
}
}
let optionPaths = [dotenvPath];
if (options && options.path) {
if (!Array.isArray(options.path)) {
optionPaths = [_resolveHome(options.path)];
} else {
optionPaths = [];
for (const filepath of options.path) {
optionPaths.push(_resolveHome(filepath));
}
}
}
let lastError;
const parsedAll = {};
for (const path2 of optionPaths) {
try {
const parsed = DotenvModule.parse(fs.readFileSync(path2, { encoding }));
DotenvModule.populate(parsedAll, parsed, options);
} catch (e) {
if (debug) {
_debug(`failed to load ${path2} ${e.message}`);
}
lastError = e;
}
}
const populated = DotenvModule.populate(processEnv, parsedAll, options);
debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug);
quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet);
if (debug || !quiet) {
const keysCount = Object.keys(populated).length;
const shortPaths = [];
for (const filePath of optionPaths) {
try {
const relative = path.relative(process.cwd(), filePath);
shortPaths.push(relative);
} catch (e) {
if (debug) {
_debug(`failed to load ${filePath} ${e.message}`);
}
lastError = e;
}
}
_log(`injected env (${keysCount}) from ${shortPaths.join(",")} ${dim(`// tip: ${_getRandomTip()}`)}`);
}
if (lastError) {
return { parsed: parsedAll, error: lastError };
} else {
return { parsed: parsedAll };
}
}
function config(options) {
if (_dotenvKey(options).length === 0) {
return DotenvModule.configDotenv(options);
}
const vaultPath = _vaultPath(options);
if (!vaultPath) {
_warn(`you set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}`);
return DotenvModule.configDotenv(options);
}
return DotenvModule._configVault(options);
}
function decrypt(encrypted, keyStr) {
const key = Buffer.from(keyStr.slice(-64), "hex");
let ciphertext = Buffer.from(encrypted, "base64");
const nonce = ciphertext.subarray(0, 12);
const authTag = ciphertext.subarray(-16);
ciphertext = ciphertext.subarray(12, -16);
try {
const aesgcm = crypto.createDecipheriv("aes-256-gcm", key, nonce);
aesgcm.setAuthTag(authTag);
return `${aesgcm.update(ciphertext)}${aesgcm.final()}`;
} catch (error) {
const isRange = error instanceof RangeError;
const invalidKeyLength = error.message === "Invalid key length";
const decryptionFailed = error.message === "Unsupported state or unable to authenticate data";
if (isRange || invalidKeyLength) {
const err = new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");
err.code = "INVALID_DOTENV_KEY";
throw err;
} else if (decryptionFailed) {
const err = new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");
err.code = "DECRYPTION_FAILED";
throw err;
} else {
throw error;
}
}
}
function populate(processEnv, parsed, options = {}) {
const debug = Boolean(options && options.debug);
const override = Boolean(options && options.override);
const populated = {};
if (typeof parsed !== "object") {
const err = new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");
err.code = "OBJECT_REQUIRED";
throw err;
}
for (const key of Object.keys(parsed)) {
if (Object.prototype.hasOwnProperty.call(processEnv, key)) {
if (override === true) {
processEnv[key] = parsed[key];
populated[key] = parsed[key];
}
if (debug) {
if (override === true) {
_debug(`"${key}" is already defined and WAS overwritten`);
} else {
_debug(`"${key}" is already defined and was NOT overwritten`);
}
}
} else {
processEnv[key] = parsed[key];
populated[key] = parsed[key];
}
}
return populated;
}
var DotenvModule = {
configDotenv,
_configVault,
_parseVault,
config,
decrypt,
parse,
populate
};
exports.configDotenv = DotenvModule.configDotenv;
exports._configVault = DotenvModule._configVault;
exports._parseVault = DotenvModule._parseVault;
exports.config = DotenvModule.config;
exports.decrypt = DotenvModule.decrypt;
exports.parse = DotenvModule.parse;
exports.populate = DotenvModule.populate;
module.exports = DotenvModule;
});
// node_modules/@stoqey/ib/dist/common/configuration.js
var require_configuration = __commonJS((exports) => {
var __dirname = "/Users/nathanclevenger/projects/kestrel/node_modules/@stoqey/ib/dist/common";
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === undefined)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === undefined)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar = exports && exports.__importStar || function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0;i < k.length; i++)
if (k[i] !== "default")
__createBinding(result, mod, k[i]);
}
__setModuleDefault(result, mod);
return result;
};
}();
Object.defineProperty(exports, "__esModule", { value: true });
exports.get = get;
var fs_1 = __require("fs");
var path = __importStar(__require("path"));
var configuration;
var dotenvConfigured = false;
var envsToInclude = [
"ci",
"env_config_test",
"ib_host",
"ib_port",
"ib_test_account",
"client_version",
"max_req_per_second"
];
function readJson(readPath) {
try {
const data = (0, fs_1.readFileSync)(readPath, "utf8");
return JSON.parse(data);
} catch (error) {
if (error.code !== "ENOENT" || error.errno !== undefined && error.errno !== -4058 && error.errno !== -2) {
throw error;
}
}
return {};
}
function read(file) {
const filePath = path.resolve(__dirname, "..", "..", "config", `${file}.json`);
return readJson(filePath);
}
function assignEnvironment(config) {
const newConfig = config;
envsToInclude.forEach((key) => {
const lc = key.toLowerCase();
const uc = key.toUpperCase();
newConfig[lc] = process.env[uc] || config[lc];
});
return newConfig;
}
function loadEnvironmentSpecific(config, environment) {
let newConfig = config;
if (environment) {
const conf = read(environment);
if (conf) {
newConfig = {
...newConfig,
...conf
};
}
}
return newConfig;
}
var ensureInteger = (fields, config) => fields.forEach((field) => {
const value = config[field];
if (typeof value === "string") {
config[field] = parseInt(value, 10);
}
});
function load() {
if (!dotenvConfigured) {
dotenvConfigured = true;
const dotenv = require_main();
dotenv.config({ quiet: true });
}
const nodeEnvironment = "development";
let config = read("default");
config = loadEnvironmentSpecific(config, "local");
if (nodeEnvironment)
config = loadEnvironmentSpecific(config, nodeEnvironment);
config = assignEnvironment(config);
config.environment = nodeEnvironment || "local";
config.isProduction = nodeEnvironment === "production";
config.isStaging = nodeEnvironment === "staging";
config.isDevelopment = nodeEnvironment === "development";
config.isTest = nodeEnvironment === "test";
config.isLocal = !nodeEnvironment;
config.ci = config.ci || process.env.CIRCLECI;
const intFields = [
"ib_port",
"default_client_id",
"client_version",
"max_req_per_second"
];
ensureInteger(intFields, config);
return config;
}
function get() {
if (!configuration) {
configuration = load();
}
return configuration;
}
var lazyConfiguration = new Proxy({}, {
get(_target, property) {
return get()[property];
},
set(_target, property, value) {
get()[property] = value;
return true;
},
has(_target, property) {
return property in get();
},
ownKeys() {
return Reflect.ownKeys(get());
},
getOwnPropertyDescriptor(_target, property) {
const loadedConfiguration = get();
if (property in loadedConfiguration) {
return {
configurable: true,
enumerable: true,
value: loadedConfiguration[property]
};
}
return;
}
});
exports.default = lazyConfiguration;
});
// node_modules/@stoqey/ib/dist/common/errorCode.js
var require_errorCode = __commonJS((exports) => {
Object.defineProperty(exports, "__esModule", { value: true });
exports.isNonFatalError = exports.ErrorCode = undefined;
var ErrorCode;
(function(ErrorCode2) {
ErrorCode2[ErrorCode2["NO_VALID_ID"] = -1] = "NO_VALID_ID";
ErrorCode2[ErrorCode2["ORDER_CANCELLED"] = 202] = "ORDER_CANCELLED";
ErrorCode2[ErrorCode2["MISSING_ORDER_EXCHANGE"] = 321] = "MISSING_ORDER_EXCHANGE";
ErrorCode2[ErrorCode2["ORDER_MESSAGE"] = 399] = "ORDER_MESSAGE";
ErrorCode2[ErrorCode2["SCANNER_LOW_PRECISION"] = 492] = "SCANNER_LOW_PRECISION";
ErrorCode2[ErrorCode2["REQ_MKT_DATA_NOT_AVAIL"] = 354] = "REQ_MKT_DATA_NOT_AVAIL";
ErrorCode2[ErrorCode2["NO_TRADING_PERMISSIONS"] = 460] = "NO_TRADING_PERMISSIONS";
ErrorCode2[ErrorCode2["ALREADY_CONNECTED"] = 501] = "ALREADY_CONNECTED";
ErrorCode2[ErrorCode2["CONNECT_FAIL"] = 502] = "CONNECT_FAIL";
ErrorCode2[ErrorCode2["UPDATE_TWS"] = 503] = "UPDATE_TWS";
ErrorCode2[ErrorCode2["NOT_CONNECTED"] = 504] = "NOT_CONNECTED";
ErrorCode2[ErrorCode2["UNKNOWN_ID"] = 505] = "UNKNOWN_ID";
ErrorCode2[ErrorCode2["UNSUPPORTED_VERSION"] = 506] = "UNSUPPORTED_VERSION";
ErrorCode2[ErrorCode2["BAD_LENGTH"] = 507] = "BAD_LENGTH";
ErrorCode2[ErrorCode2["BAD_MESSAGE"] = 508] = "BAD_MESSAGE";
ErrorCode2[ErrorCode2["FAIL_SEND"] = 509] = "FAIL_SEND";
ErrorCode2[ErrorCode2["FAIL_SEND_REQMKT"] = 510] = "FAIL_SEND_REQMKT";
ErrorCode2[ErrorCode2["FAIL_SEND_CANMKT"] = 511] = "FAIL_SEND_CANMKT";
ErrorCode2[ErrorCode2["FAIL_SEND_ORDER"] = 512] = "FAIL_SEND_ORDER";
ErrorCode2[ErrorCode2["FAIL_SEND_ACCT"] = 513] = "FAIL_SEND_ACCT";
ErrorCode2[ErrorCode2["FAIL_SEND_EXEC"] = 514] = "FAIL_SEND_EXEC";
ErrorCode2[ErrorCode2["FAIL_SEND_CORDER"] = 515] = "FAIL_SEND_CORDER";
ErrorCode2[ErrorCode2["FAIL_SEND_OORDER"] = 516] = "FAIL_SEND_OORDER";
ErrorCode2[ErrorCode2["UNKNOWN_CONTRACT"] = 517] = "UNKNOWN_CONTRACT";
ErrorCode2[ErrorCode2["FAIL_SEND_REQCONTRACT"] = 518] = "FAIL_SEND_REQCONTRACT";
ErrorCode2[ErrorCode2["FAIL_SEND_REQMKTDEPTH"] = 519] = "FAIL_SEND_REQMKTDEPTH";
ErrorCode2[ErrorCode2["FAIL_SEND_CANMKTDEPTH"] = 520] = "FAIL_SEND_CANMKTDEPTH";
ErrorCode2[ErrorCode2["FAIL_SEND_SERVER_LOG_LEVEL"] = 521] = "FAIL_SEND_SERVER_LOG_LEVEL";
ErrorCode2[ErrorCode2["FAIL_SEND_FA_REQUEST"] = 522] = "FAIL_SEND_FA_REQUEST";
ErrorCode2[ErrorCode2["FAIL_SEND_FA_REPLACE"] = 523] = "FAIL_SEND_FA_REPLACE";
ErrorCode2[ErrorCode2["FAIL_SEND_REQSCANNER"] = 524] = "FAIL_SEND_REQSCANNER";
ErrorCode2[ErrorCode2["FAIL_SEND_CANSCANNER"] = 525] = "FAIL_SEND_CANSCANNER";
ErrorCode2[ErrorCode2["FAIL_SEND_REQSCANNERPARAMETERS"] = 526] = "FAIL_SEND_REQSCANNERPARAMETERS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQHISTDATA"] = 527] = "FAIL_SEND_REQHISTDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_CANHISTDATA"] = 528] = "FAIL_SEND_CANHISTDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_REQRTBARS"] = 529] = "FAIL_SEND_REQRTBARS";
ErrorCode2[ErrorCode2["FAIL_SEND_CANRTBARS"] = 530] = "FAIL_SEND_CANRTBARS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQCURRTIME"] = 531] = "FAIL_SEND_REQCURRTIME";
ErrorCode2[ErrorCode2["FAIL_SEND_REQFUNDDATA"] = 532] = "FAIL_SEND_REQFUNDDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_CANFUNDDATA"] = 533] = "FAIL_SEND_CANFUNDDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_REQCALCIMPLIEDVOLAT"] = 534] = "FAIL_SEND_REQCALCIMPLIEDVOLAT";
ErrorCode2[ErrorCode2["FAIL_SEND_REQCALCOPTIONPRICE"] = 535] = "FAIL_SEND_REQCALCOPTIONPRICE";
ErrorCode2[ErrorCode2["FAIL_SEND_CANCALCIMPLIEDVOLAT"] = 536] = "FAIL_SEND_CANCALCIMPLIEDVOLAT";
ErrorCode2[ErrorCode2["FAIL_SEND_CANCALCOPTIONPRICE"] = 537] = "FAIL_SEND_CANCALCOPTIONPRICE";
ErrorCode2[ErrorCode2["FAIL_SEND_REQGLOBALCANCEL"] = 538] = "FAIL_SEND_REQGLOBALCANCEL";
ErrorCode2[ErrorCode2["FAIL_SEND_REQMARKETDATATYPE"] = 539] = "FAIL_SEND_REQMARKETDATATYPE";
ErrorCode2[ErrorCode2["FAIL_SEND_REQPOSITIONS"] = 540] = "FAIL_SEND_REQPOSITIONS";
ErrorCode2[ErrorCode2["FAIL_SEND_CANPOSITIONS"] = 541] = "FAIL_SEND_CANPOSITIONS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQACCOUNTDATA"] = 542] = "FAIL_SEND_REQACCOUNTDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_CANACCOUNTDATA"] = 543] = "FAIL_SEND_CANACCOUNTDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_VERIFYREQUEST"] = 544] = "FAIL_SEND_VERIFYREQUEST";
ErrorCode2[ErrorCode2["FAIL_SEND_VERIFYMESSAGE"] = 545] = "FAIL_SEND_VERIFYMESSAGE";
ErrorCode2[ErrorCode2["FAIL_SEND_QUERYDISPLAYGROUPS"] = 546] = "FAIL_SEND_QUERYDISPLAYGROUPS";
ErrorCode2[ErrorCode2["FAIL_SEND_SUBSCRIBETOGROUPEVENTS"] = 547] = "FAIL_SEND_SUBSCRIBETOGROUPEVENTS";
ErrorCode2[ErrorCode2["FAIL_SEND_UPDATEDISPLAYGROUP"] = 548] = "FAIL_SEND_UPDATEDISPLAYGROUP";
ErrorCode2[ErrorCode2["FAIL_SEND_UNSUBSCRIBEFROMGROUPEVENTS"] = 549] = "FAIL_SEND_UNSUBSCRIBEFROMGROUPEVENTS";
ErrorCode2[ErrorCode2["FAIL_SEND_STARTAPI"] = 550] = "FAIL_SEND_STARTAPI";
ErrorCode2[ErrorCode2["FAIL_SEND_VERIFYANDAUTHREQUEST"] = 551] = "FAIL_SEND_VERIFYANDAUTHREQUEST";
ErrorCode2[ErrorCode2["FAIL_SEND_VERIFYANDAUTHMESSAGE"] = 552] = "FAIL_SEND_VERIFYANDAUTHMESSAGE";
ErrorCode2[ErrorCode2["FAIL_SEND_REQPOSITIONSMULTI"] = 553] = "FAIL_SEND_REQPOSITIONSMULTI";
ErrorCode2[ErrorCode2["FAIL_SEND_CANPOSITIONSMULTI"] = 554] = "FAIL_SEND_CANPOSITIONSMULTI";
ErrorCode2[ErrorCode2["FAIL_SEND_REQACCOUNTUPDATESMULTI"] = 555] = "FAIL_SEND_REQACCOUNTUPDATESMULTI";
ErrorCode2[ErrorCode2["FAIL_SEND_CANACCOUNTUPDATESMULTI"] = 556] = "FAIL_SEND_CANACCOUNTUPDATESMULTI";
ErrorCode2[ErrorCode2["FAIL_SEND_REQSECDEFOPTPARAMS"] = 557] = "FAIL_SEND_REQSECDEFOPTPARAMS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQSOFTDOLLARTIERS"] = 558] = "FAIL_SEND_REQSOFTDOLLARTIERS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQFAMILYCODES"] = 559] = "FAIL_SEND_REQFAMILYCODES";
ErrorCode2[ErrorCode2["FAIL_SEND_REQMATCHINGSYMBOLS"] = 560] = "FAIL_SEND_REQMATCHINGSYMBOLS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQMKTDEPTHEXCHANGES"] = 561] = "FAIL_SEND_REQMKTDEPTHEXCHANGES";
ErrorCode2[ErrorCode2["FAIL_SEND_REQSMARTCOMPONENTS"] = 562] = "FAIL_SEND_REQSMARTCOMPONENTS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQNEWSPROVIDERS"] = 563] = "FAIL_SEND_REQNEWSPROVIDERS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQNEWSARTICLE"] = 564] = "FAIL_SEND_REQNEWSARTICLE";
ErrorCode2[ErrorCode2["FAIL_SEND_REQHISTORICALNEWS"] = 565] = "FAIL_SEND_REQHISTORICALNEWS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQHEADTIMESTAMP"] = 566] = "FAIL_SEND_REQHEADTIMESTAMP";
ErrorCode2[ErrorCode2["FAIL_SEND_REQHISTOGRAMDATA"] = 567] = "FAIL_SEND_REQHISTOGRAMDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_CANCELHISTOGRAMDATA"] = 568] = "FAIL_SEND_CANCELHISTOGRAMDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_CANCELHEADTIMESTAMP"] = 569] = "FAIL_SEND_CANCELHEADTIMESTAMP";
ErrorCode2[ErrorCode2["FAIL_SEND_HISTORICAL_TICK"] = 569] = "FAIL_SEND_HISTORICAL_TICK";
ErrorCode2[ErrorCode2["FAIL_SEND_REQMARKETRULE"] = 570] = "FAIL_SEND_REQMARKETRULE";
ErrorCode2[ErrorCode2["FAIL_SEND_REQPNL"] = 571] = "FAIL_SEND_REQPNL";
ErrorCode2[ErrorCode2["FAIL_SEND_CANCELPNL"] = 572] = "FAIL_SEND_CANCELPNL";
ErrorCode2[ErrorCode2["FAIL_SEND_REQPNLSINGLE"] = 573] = "FAIL_SEND_REQPNLSINGLE";
ErrorCode2[ErrorCode2["FAIL_SEND_CANCELPNLSINGLE"] = 574] = "FAIL_SEND_CANCELPNLSINGLE";
ErrorCode2[ErrorCode2["FAIL_SEND_REQHISTORICALTICKS"] = 575] = "FAIL_SEND_REQHISTORICALTICKS";
ErrorCode2[ErrorCode2["FAIL_SEND_REQTICKBYTICKDATA"] = 576] = "FAIL_SEND_REQTICKBYTICKDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_CANCELTICKBYTICKDATA"] = 577] = "FAIL_SEND_CANCELTICKBYTICKDATA";
ErrorCode2[ErrorCode2["FAIL_SEND_REQCOMPLETEDORDERS"] = 578] = "FAIL_SEND_REQCOMPLETEDORDERS";
ErrorCode2[ErrorCode2["INVALID_SYMBOL"] = 579] = "INVALID_SYMBOL";
ErrorCode2[ErrorCode2["FAIL_SEND_REQ_WSH_META_DATA"] = 580] = "FAIL_SEND_REQ_WSH_META_DATA";
ErrorCode2[ErrorCode2["FAIL_SEND_CAN_WSH_META_DATA"] = 581] = "FAIL_SEND_CAN_WSH_META_DATA";
ErrorCode2[ErrorCode2["FAIL_SEND_REQ_WSH_EVENT_DATA"] = 582] = "FAIL_SEND_REQ_WSH_EVENT_DATA";
ErrorCode2[ErrorCode2["FAIL_SEND_CAN_WSH_EVENT_DATA"] = 583] = "FAIL_SEND_CAN_WSH_EVENT_DATA";
ErrorCode2[ErrorCode2["FAIL_SEND_REQ_USER_INFO"] = 584] = "FAIL_SEND_REQ_USER_INFO";
ErrorCode2[ErrorCode2["FA_PROFILE_NOT_SUPPORTED"] = 585] = "FA_PROFILE_NOT_SUPPORTED";
ErrorCode2[ErrorCode2["FAIL_READ_MESSAGE"] = 586] = "FAIL_READ_MESSAGE";
ErrorCode2[ErrorCode2["FAIL_CONNECTION_LOST_BETWEEN_SERVER_AND_TWS"] = 1100] = "FAIL_CONNECTION_LOST_BETWEEN_SERVER_AND_TWS";
ErrorCode2[ErrorCode2["FAIL_CONNECTION_LOST_BETWEEN_TWS_AND_SERVER"] = 2110] = "FAIL_CONNECTION_LOST_BETWEEN_TWS_AND_SERVER";
ErrorCode2[ErrorCode2["INVALID_POSITION_TRADE_DERIVATED_VALUE"] = 2150] = "INVALID_POSITION_TRADE_DERIVATED_VALUE";
ErrorCode2[ErrorCode2["PART_OF_REQUESTED_DATA_NOT_SUBSCRIBED"] = 10090] = "PART_OF_REQUESTED_DATA_NOT_SUBSCRIBED";
ErrorCode2[ErrorCode2["DISPLAYING_DELAYED_DATA"] = 10167] = "DISPLAYING_DELAYED_DATA";
ErrorCode2[ErrorCode2["NEWS_FEED_NOT_ALLOWED"] = 10276] = "NEWS_FEED_NOT_ALLOWED";
})(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
var isNonFatalError = (code, error) => {
if (code >= 2100 && code < 3000)
return true;
if (error.message.includes("Warning:"))
return true;
switch (code) {
case ErrorCode.PART_OF_REQUESTED_DATA_NOT_SUBSCRIBED:
case ErrorCode.DISPLAYING_DELAYED_DATA:
case ErrorCode.ORDER_MESSAGE:
case ErrorCode.SCANNER_LOW_PRECISION:
return true;
default:
return false;
}
};
exports.isNonFatalError = isNonFatalError;
});
// node_modules/@stoqey/ib/dist/api/data/enum/min-server-version.js
var require_min_server_version = __commonJS((exports) => {
Object.defineProperty(exports, "__esModule", { value: true });
exports.MIN_SERVER_VER = undefined;
var MIN_SERVER_VER;
(function(MIN_SERVER_VER2) {
MIN_SERVER_VER2[MIN_SERVER_VER2["REAL_TIME_BARS"] = 34] = "REAL_TIME_BARS";
MIN_SERVER_VER2[MIN_SERVER_VER2["SCALE_ORDERS"] = 35] = "SCALE_ORDERS";
MIN_SERVER_VER2[MIN_SERVER_VER2["SNAPSHOT_MKT_DATA"] = 35] = "SNAPSHOT_MKT_DATA";
MIN_SERVER_VER2[MIN_SERVER_VER2["SSHORT_COMBO_LEGS"] = 35] = "SSHORT_COMBO_LEGS";
MIN_SERVER_VER2[MIN_SERVER_VER2["WHAT_IF_ORDERS"] = 36] = "WHAT_IF_ORDERS";
MIN_SERVER_VER2[MIN_SERVER_VER2["CONTRACT_CONID"] = 37] = "CONTRACT_CONID";
MIN_SERVER_VER2[MIN_SERVER_VER2["PTA_ORDERS"] = 39] = "PTA_ORDERS";
MIN_SERVER_VER2[MIN_SERVER_VER2["FUNDAMENTAL_DATA"] = 40] = "FUNDAMENTAL_DATA";
MIN_SERVER_VER2[MIN_SERVER_VER2["DELTA_NEUTRAL"] = 40] = "DELTA_NEUTRAL";
MIN_SERVER_VER2[MIN_SERVER_VER2["CONTRACT_DATA_CHAIN"] = 40] = "CONTRACT_DATA_CHAIN";
MIN_SERVER_VER2[MIN_SERVER_VER2["SCALE_ORDERS2"] = 40] = "SCALE_ORDERS2";
MIN_SERVER_VER2[MIN_SERVER_VER2["ALGO_ORDERS"] = 41] = "ALGO_ORDERS";
MIN_SERVER_VER2[MIN_SERVER_VER2["EXECUTION_DATA_CHAIN"] = 42] = "EXECUTION_DATA_CHAIN";
MIN_SERVER_VER2[MIN_SERVER_VER2["NOT_HELD"] = 44] = "NOT_HELD";
MIN_SERVER_VER2[MIN_SERVER_VER2["SEC_ID_TYPE"] = 45] = "SEC_ID_TYPE";
MIN_SERVER_VER2[MIN_SERVER_VER2["PLACE_ORDER_CONID"] = 46] = "PLACE_ORDER_CONID";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_MKT_DATA_CONID"] = 47] = "REQ_MKT_DATA_CONID";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_CALC_IMPLIED_VOLAT"] = 49] = "REQ_CALC_IMPLIED_VOLAT";
MIN_SERVER_VER2[MIN_SERVER_VER2["CANCEL_CALC_IMPLIED_VOLAT"] = 50] = "CANCEL_CALC_IMPLIED_VOLAT";
MIN_SERVER_VER2[MIN_SERVER_VER2["CANCEL_CALC_OPTION_PRICE"] = 50] = "CANCEL_CALC_OPTION_PRICE";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_CALC_OPTION_PRICE"] = 50] = "REQ_CALC_OPTION_PRICE";
MIN_SERVER_VER2[MIN_SERVER_VER2["SSHORTX_OLD"] = 51] = "SSHORTX_OLD";
MIN_SERVER_VER2[MIN_SERVER_VER2["SSHORTX"] = 52] = "SSHORTX";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_GLOBAL_CANCEL"] = 53] = "REQ_GLOBAL_CANCEL";
MIN_SERVER_VER2[MIN_SERVER_VER2["HEDGE_ORDERS"] = 54] = "HEDGE_ORDERS";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_MARKET_DATA_TYPE"] = 55] = "REQ_MARKET_DATA_TYPE";
MIN_SERVER_VER2[MIN_SERVER_VER2["OPT_OUT_SMART_ROUTING"] = 56] = "OPT_OUT_SMART_ROUTING";
MIN_SERVER_VER2[MIN_SERVER_VER2["SMART_COMBO_ROUTING_PARAMS"] = 57] = "SMART_COMBO_ROUTING_PARAMS";
MIN_SERVER_VER2[MIN_SERVER_VER2["DELTA_NEUTRAL_CONID"] = 58] = "DELTA_NEUTRAL_CONID";
MIN_SERVER_VER2[MIN_SERVER_VER2["SCALE_ORDERS3"] = 60] = "SCALE_ORDERS3";
MIN_SERVER_VER2[MIN_SERVER_VER2["ORDER_COMBO_LEGS_PRICE"] = 61] = "ORDER_COMBO_LEGS_PRICE";
MIN_SERVER_VER2[MIN_SERVER_VER2["TRAILING_PERCENT"] = 62] = "TRAILING_PERCENT";
MIN_SERVER_VER2[MIN_SERVER_VER2["DELTA_NEUTRAL_OPEN_CLOSE"] = 66] = "DELTA_NEUTRAL_OPEN_CLOSE";
MIN_SERVER_VER2[MIN_SERVER_VER2["POSITIONS"] = 67] = "POSITIONS";
MIN_SERVER_VER2[MIN_SERVER_VER2["ACCT_SUMMARY"] = 67] = "ACCT_SUMMARY";
MIN_SERVER_VER2[MIN_SERVER_VER2["TRADING_CLASS"] = 68] = "TRADING_CLASS";
MIN_SERVER_VER2[MIN_SERVER_VER2["SCALE_TABLE"] = 69] = "SCALE_TABLE";
MIN_SERVER_VER2[MIN_SERVER_VER2["LINKING"] = 70] = "LINKING";
MIN_SERVER_VER2[MIN_SERVER_VER2["ALGO_ID"] = 71] = "ALGO_ID";
MIN_SERVER_VER2[MIN_SERVER_VER2["OPTIONAL_CAPABILITIES"] = 72] = "OPTIONAL_CAPABILITIES";
MIN_SERVER_VER2[MIN_SERVER_VER2["ORDER_SOLICITED"] = 73] = "ORDER_SOLICITED";
MIN_SERVER_VER2[MIN_SERVER_VER2["LINKING_AUTH"] = 74] = "LINKING_AUTH";
MIN_SERVER_VER2[MIN_SERVER_VER2["PRIMARYEXCH"] = 75] = "PRIMARYEXCH";
MIN_SERVER_VER2[MIN_SERVER_VER2["RANDOMIZE_SIZE_AND_PRICE"] = 76] = "RANDOMIZE_SIZE_AND_PRICE";
MIN_SERVER_VER2[MIN_SERVER_VER2["FRACTIONAL_POSITIONS"] = 101] = "FRACTIONAL_POSITIONS";
MIN_SERVER_VER2[MIN_SERVER_VER2["PEGGED_TO_BENCHMARK"] = 102] = "PEGGED_TO_BENCHMARK";
MIN_SERVER_VER2[MIN_SERVER_VER2["MODELS_SUPPORT"] = 103] = "MODELS_SUPPORT";
MIN_SERVER_VER2[MIN_SERVER_VER2["SEC_DEF_OPT_PARAMS_REQ"] = 104] = "SEC_DEF_OPT_PARAMS_REQ";
MIN_SERVER_VER2[MIN_SERVER_VER2["EXT_OPERATOR"] = 105] = "EXT_OPERATOR";
MIN_SERVER_VER2[MIN_SERVER_VER2["SOFT_DOLLAR_TIER"] = 106] = "SOFT_DOLLAR_TIER";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_FAMILY_CODES"] = 107] = "REQ_FAMILY_CODES";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_MATCHING_SYMBOLS"] = 108] = "REQ_MATCHING_SYMBOLS";
MIN_SERVER_VER2[MIN_SERVER_VER2["PAST_LIMIT"] = 109] = "PAST_LIMIT";
MIN_SERVER_VER2[MIN_SERVER_VER2["MD_SIZE_MULTIPLIER"] = 110] = "MD_SIZE_MULTIPLIER";
MIN_SERVER_VER2[MIN_SERVER_VER2["CASH_QTY"] = 111] = "CASH_QTY";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_MKT_DEPTH_EXCHANGES"] = 112] = "REQ_MKT_DEPTH_EXCHANGES";
MIN_SERVER_VER2[MIN_SERVER_VER2["TICK_NEWS"] = 113] = "TICK_NEWS";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_SMART_COMPONENTS"] = 114] = "REQ_SMART_COMPONENTS";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_NEWS_PROVIDERS"] = 115] = "REQ_NEWS_PROVIDERS";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_NEWS_ARTICLE"] = 116] = "REQ_NEWS_ARTICLE";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_HISTORICAL_NEWS"] = 117] = "REQ_HISTORICAL_NEWS";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_HEAD_TIMESTAMP"] = 118] = "REQ_HEAD_TIMESTAMP";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_HISTOGRAM"] = 119] = "REQ_HISTOGRAM";
MIN_SERVER_VER2[MIN_SERVER_VER2["SERVICE_DATA_TYPE"] = 120] = "SERVICE_DATA_TYPE";
MIN_SERVER_VER2[MIN_SERVER_VER2["AGG_GROUP"] = 121] = "AGG_GROUP";
MIN_SERVER_VER2[MIN_SERVER_VER2["UNDERLYING_INFO"] = 122] = "UNDERLYING_INFO";
MIN_SERVER_VER2[MIN_SERVER_VER2["CANCEL_HEADTIMESTAMP"] = 123] = "CANCEL_HEADTIMESTAMP";
MIN_SERVER_VER2[MIN_SERVER_VER2["SYNT_REALTIME_BARS"] = 124] = "SYNT_REALTIME_BARS";
MIN_SERVER_VER2[MIN_SERVER_VER2["CFD_REROUTE"] = 125] = "CFD_REROUTE";
MIN_SERVER_VER2[MIN_SERVER_VER2["MARKET_RULES"] = 126] = "MARKET_RULES";
MIN_SERVER_VER2[MIN_SERVER_VER2["PNL"] = 127] = "PNL";
MIN_SERVER_VER2[MIN_SERVER_VER2["NEWS_QUERY_ORIGINS"] = 128] = "NEWS_QUERY_ORIGINS";
MIN_SERVER_VER2[MIN_SERVER_VER2["UNREALIZED_PNL"] = 129] = "UNREALIZED_PNL";
MIN_SERVER_VER2[MIN_SERVER_VER2["HISTORICAL_TICKS"] = 130] = "HISTORICAL_TICKS";
MIN_SERVER_VER2[MIN_SERVER_VER2["MARKET_CAP_PRICE"] = 131] = "MARKET_CAP_PRICE";
MIN_SERVER_VER2[MIN_SERVER_VER2["PRE_OPEN_BID_ASK"] = 132] = "PRE_OPEN_BID_ASK";
MIN_SERVER_VER2[MIN_SERVER_VER2["REAL_EXPIRATION_DATE"] = 134] = "REAL_EXPIRATION_DATE";
MIN_SERVER_VER2[MIN_SERVER_VER2["REALIZED_PNL"] = 135] = "REALIZED_PNL";
MIN_SERVER_VER2[MIN_SERVER_VER2["LAST_LIQUIDITY"] = 136] = "LAST_LIQUIDITY";
MIN_SERVER_VER2[MIN_SERVER_VER2["TICK_BY_TICK"] = 137] = "TICK_BY_TICK";
MIN_SERVER_VER2[MIN_SERVER_VER2["DECISION_MAKER"] = 138] = "DECISION_MAKER";
MIN_SERVER_VER2[MIN_SERVER_VER2["MIFID_EXECUTION"] = 139] = "MIFID_EXECUTION";
MIN_SERVER_VER2[MIN_SERVER_VER2["TICK_BY_TICK_IGNORE_SIZE"] = 140] = "TICK_BY_TICK_IGNORE_SIZE";
MIN_SERVER_VER2[MIN_SERVER_VER2["AUTO_PRICE_FOR_HEDGE"] = 141] = "AUTO_PRICE_FOR_HEDGE";
MIN_SERVER_VER2[MIN_SERVER_VER2["WHAT_IF_EXT_FIELDS"] = 142] = "WHAT_IF_EXT_FIELDS";
MIN_SERVER_VER2[MIN_SERVER_VER2["SCANNER_GENERIC_OPTS"] = 143] = "SCANNER_GENERIC_OPTS";
MIN_SERVER_VER2[MIN_SERVER_VER2["API_BIND_ORDER"] = 144] = "API_BIND_ORDER";
MIN_SERVER_VER2[MIN_SERVER_VER2["ORDER_CONTAINER"] = 145] = "ORDER_CONTAINER";
MIN_SERVER_VER2[MIN_SERVER_VER2["SMART_DEPTH"] = 146] = "SMART_DEPTH";
MIN_SERVER_VER2[MIN_SERVER_VER2["REMOVE_NULL_ALL_CASTING"] = 147] = "REMOVE_NULL_ALL_CASTING";
MIN_SERVER_VER2[MIN_SERVER_VER2["D_PEG_ORDERS"] = 148] = "D_PEG_ORDERS";
MIN_SERVER_VER2[MIN_SERVER_VER2["MKT_DEPTH_PRIM_EXCHANGE"] = 149] = "MKT_DEPTH_PRIM_EXCHANGE";
MIN_SERVER_VER2[MIN_SERVER_VER2["REQ_COMPLETED_ORDERS"] = 150] = "REQ_COMPLETED_ORDERS";
MIN_SERVER_VER2[MIN_SERVER_VER2["PRICE_MGMT_ALGO"] = 151] = "PRICE_MGMT_ALGO";
MIN_SERVER_VER2[MIN_SERVER_VER2["STOCK_TYPE"] = 152] = "STOCK_TYPE";
MIN_SERVER_VER2[MIN_SERVER_VER2["ENCODE_MSG_ASCII7"] = 153] = "ENCODE_MSG_ASCII7";
MIN_SERVER_VER2[MIN_SERVER_VER2["SEND_ALL_FAMILY_CODES"] = 154] = "SEND_ALL_FAMILY_CODES";
MIN_SERVER_VER2[MIN_SERVER_VER2["NO_DEFAULT_OPEN_CLOSE"] = 155] = "NO_DEFAULT_OPEN_CLOSE";
MIN_SERVER_VER2[MIN_SERVER_VER2["PRICE_BASED_VOLATILITY"] = 156] = "PRICE_BASED_VOLATILITY";
MIN_SERVER_VER2[MIN_SERVER_VER2["REPLACE_FA_END"] = 157] = "REPLACE_FA_END";
MIN_SERVER_VER2[MIN_SERVER_VER2["DURATION"] = 158] = "DURATION";
MIN_SERVER_VER2[MIN_SERVER_VER2["MARKET_DATA_IN_SHARES"] = 159] = "MARKET_DATA_IN_SHARES";
MIN_SERVER_VER2[MIN_SERVER_VER2["POST_TO_ATS"] = 160] = "POST_TO_ATS";
MIN_SERVER_VER2[MIN_SERVER_VER2["WSHE_CALENDAR"] = 161] = "WSHE_CALENDAR";
MIN_SERVER_VER2[MIN_SERVER_VER2["AUTO_CANCEL_PARENT"] = 162] = "AUTO_CANCEL_PARENT";
MIN_SERVER_VER2[MIN_SERVER_VER2["FRACTIONAL_SIZE_SUPPORT"] = 163] = "FRACTIONAL_SIZE_SUPPORT";
MIN_SERVER_VER2[MIN_SERVER_VER2["SIZE_RULES"] = 164] = "SIZE_RULES";
MIN_SERVER_VER2[MIN_SERVER_VER2["HISTORICAL_SCHEDULE"] = 165] = "HISTORICAL_SCHEDUL