How to get all over 1000 klines in javascript without using third party functions

Although there are already several APIs that include this functionality, it does not hurt to know how to implement it so as not to depend on third-party functions, I share this code snippet that I wrote myself and that I hope will help you in your own applications, it still requires validation code. but it works in the cases that the data is passed correctly, I also wait for corrections of it from you to improve it little by little

const burl = 'https://api.binance.com';
const bwsurl = 'wss://stream.binance.com:9443/ws/';
const intervals = {
	'1m': {
		'ms': 1000 * 60,
		'intervalNum': 1,
		'intervalLetter': 'm'
	},
	'3m': {
		'ms': 1000 * 60 * 3,
		'intervalNum': 3,
		'intervalLetter': 'm'	
	},
	'5m': {
		'ms': 1000 * 60 * 5,
		'intervalNum': 5,
		'intervalLetter': 'm'
	},
	'15m': {
		'ms': 1000 * 60 * 15,
		'intervalNum': 15,
		'intervalLetter': 'm'
	},
	'30m': {
		'ms': 1000 * 60 * 30,
		'intervalNum': 30,
		'intervalLetter': 'm'
	},
	'1h': {
		'ms': 1000 * 60 * 60,
		'intervalNum': 1,
		'intervalLetter': 'h'
	},
	'2h': {
		'ms': 1000 * 60 * 60 * 2,
		'intervalNum': 2,
		'intervalLetter': 'h'
	},
	'4h': {
		'ms': 1000 * 60 * 60 * 4,
		'intervalNum': 4,
		'intervalLetter':	'h'
	},
	'6h': {
		'ms': 1000 * 60 * 60 * 6,
		'intervalNum': 6,
		'intervalLetter':	'h'
	},
	'8h': {
		'ms': 1000 * 60 * 60 * 8,
		'intervalNum': 8,
		'intervalLetter':	'h'
	},
	'12h': {
		'ms': 1000 * 60 * 60 * 12,
		'intervalNum': 12,
		'intervalLetter':	'h'
	},
	'1d': {
		'ms': 1000 * 60 * 60 * 24,
		'intervalNum': 1,
		'intervalLetter':	'd'
	},
	'3d': {
		'ms': 1000 * 60 * 60 * 24 * 3,
		'intervalNum': 3,
		'intervalLetter':	'd'
	},
	'1w': {
		'ms': 1000 * 60 * 60 * 24 * 7,
		'intervalNum': 1,
		'intervalLetter':	'w'
	},
	'1M': {
		'ms': 1000 * 60 * 60 * 24 * 30,
		'intervalNum': 1,
		'intervalLetter':	'M'
	}
};

function klines(symbol = ‘BTCUSDT’, interval = ‘1d’, limit = 1000, startTime = null, endTime = null, callback = () => {}) {
extKlines(klArray = , symbol, interval, limit, startTime, endTime, callback);
}

function extKlines(klArray, symbol, interval, limit, startTime, endTime, callback) {
var endpoint = ‘/api/v3/klines’,
url = burl + endpoint + ‘?symbol=’ + symbol + ‘&interval=’ + interval;

if(limit > 0) {
	
	var xhttp = new XMLHttpRequest();
	url += '&limit=' + (limit > 1000 ? 1000 : limit);
	url += '&startTime=' + (startTime ? startTime : Date.now() - (intervals[interval].ms * limit));
	url += endTime ? (limit > 1000 ?  '' : '&endTime=' + endTime) : '';
	
	xhttp.responseType = 'json';

	xhttp.onreadystatechange = function () {
		if (this.readyState == 4 && this.status == 200){
			klArray.length != 0 ? klArray = klArray.concat(this.response) : klArray = this.response;				
			limit -= 1000;
			startTime = this.response[this.response.length - 1][0] + intervals[interval].ms;
			
			setTimeout(extKlines(klArray, symbol, interval, limit, startTime, endTime, callback), 1000);
		}
	};

	xhttp.open('GET', url, true);
	xhttp.send();
}else{
	callback(klArray);
}

}