HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/exnova-telegram-bot-v2/ssid-ws.js
import {SsidAuthMethod, ClientSdk, BlitzOptionsDirection, UserProfile, Balances, Balance, BalanceType, BlitzOptions, InstrumentType} from "@tradecodehub/client-sdk-js";
try {
	let ssid = process.argv[2]
	let command = process.argv[3]

	if (process.argv.length > 3) {
		let blitzBetPrice = process.argv[4];
	}

	if (process.argv.length > 4) {
		let blitzDirection = process.argv[5];
	}

	let balancesObject = '';
	let blitzOptions = '';
	let positions = '';
	let keepConnection = false;

	const sdk = await ClientSdk.create(
		'wss://ws.trade.exnova.com/echo/websocket',
		303,
		// 'wss://trade.exnova.com/echo/websocket',
		// 82,
		new SsidAuthMethod(ssid)
	)
	let profile = {};

	switch(command) {
		case 'profile':
			profile = sdk.userProfile;
			console.log(JSON.stringify(profile));
			break;
		case 'allBalances':
			balancesObject = await sdk.balances()
			console.log(JSON.stringify(balancesObject.getBalances()))
			break;
		case 'realBalance':
			balancesObject = await sdk.balances();
			const balance = balancesObject.getBalances().find((balance) => balance.type === BalanceType.Real)
			console.log(JSON.stringify(balance));
			break;
		case 'allpositions': // user bets history?
			// тут получаем фасад для взаимодействия с позициями
			const p = await sdk.positions()
			// тут получаем отдельный фасад для истории позиций
			const h = await p.getPositionsHistory()
			// тут пока знаем что есть еще страница в истории то вытаскиваем следующую страницу из истории
			for (; h.hasPrevPage();) {
				await h.fetchPrevPage()
			}

			// тут просто получаем все загруженные из истории позиции и выводим externalId
			h.getPositions().forEach(p => {
				console.log(JSON.stringify(p))
				console.log("<br/><br/><br/>");
			})


			break;
		case 'getBlitz':
			blitzOptions = await sdk.blitzOptions();
			console.log(JSON.stringify(blitzOptions.getActives()));
			break;
		case 'buyBlitz':
			balancesObject = await sdk.balances()
			// DEMO BALANCE HERE
			let balanceObject = balancesObject.getBalances().find((balance) => balance.type === BalanceType.Demo);

			blitzOptions = await sdk.blitzOptions()
			const blitzOptionsActives = blitzOptions.getActives()
			const blitzOptionsFirstAvailableActive = blitzOptionsActives.find((active) => active.canBeBoughtAt(new Date()) && active.ticker.indexOf('BTCUSD') == 0) //

			let dealData = {};
			if (blitzDirection === 'up') {
				// GO UP
				dealData = await blitzOptions.buy(
					blitzOptionsFirstAvailableActive,
					BlitzOptionsDirection.Call,
					blitzOptionsFirstAvailableActive.expirationTimes[0],
					blitzBetPrice*1,
					balanceObject
				)
			} else if (blitzDirection === 'down') {
				// GO DOWN
				dealData = await blitzOptions.buy(
					blitzOptionsFirstAvailableActive,
					BlitzOptionsDirection.Put,
					blitzOptionsFirstAvailableActive.expirationTimes[0],
					blitzBetPrice*1,
					balanceObject
				)
			}

			keepConnection = true;
			profile = sdk.userProfile;
			positions = await sdk.positions()

			dealData.result = {};
			let start = Date.now();
			let now = Date.now();
			let passed = (now-start)/1000
			positions.subscribeOnUpdatePosition((position) => {
				now = Date.now();
				passed = (now-start)/1000;
				if (position.instrumentType === InstrumentType.BlitzOption) {
					if (position.closeProfit !== undefined) {
						dealData.result = position;
						// RETURN RESULT WHEN DEAL IS DONE
						console.log(JSON.stringify(dealData));
					}

					if (position.status !== 'open') {
						sdk.shutdown();
					}

					if (passed > 10) {
						dealData.result = {status: 'timeout'};
						console.log(JSON.stringify(dealData));
						sdk.shutdown();
					}
				}
			})
			break;
		default:
			break;
	}


	if (!keepConnection) {
		sdk.shutdown();
	}

} catch (error) {
	console.log(error);
	if (sdk !== undefined) {
		sdk.shutdown();
	}
}