request method
Send command to Bybit
Implementation
Future<Map<String, dynamic>?> request(
{required String path,
Map<String, dynamic>? parameters,
bool withAuthentication = false,
String type = 'POST'}) async {
var map = SortedMap(Ordering.byKey());
if (parameters != null) {
/// Keep the parameters sorted alphabetically for valid requests
parameters.forEach((id, value) {
log.d('ByBitRest.Parameter ' + id + ': ' + value.toString());
map[id] = value;
});
}
var params = '';
if (withAuthentication) {
map['api_key'] = key;
var timestamp = DateTime.now().millisecondsSinceEpoch;
map['timestamp'] = timestamp;
map['recv_window'] = receiveWindow;
var signature = sign(secret: password, query: map);
map['sign'] = signature;
}
http.Response response;
var header = <String, String>{};
header['Content-Type'] = 'application/json; charset=utf-8';
if (type == 'POST') {
var finalUrl = url + path;
var query = '{';
map.forEach((key, value) {
query += '"$key":';
if (value is String) {
query += '"$value"';
} else if (value is double) {
query = query + '"' + value.toString() + '"';
} else {
query += value.toString();
}
query += ',';
});
// replace last ',' in query string
if (map.isNotEmpty) query = query.substring(0, query.length - 1);
query += '}';
log.d(
'ByBitRest.POST ' + finalUrl + ' ' + header.toString() + ' ' + query);
response =
await http.post(Uri.parse(finalUrl), headers: header, body: query);
if (response.statusCode != 200) {
log.e('HTTP response status code: ' + response.statusCode.toString());
}
return jsonDecode(response.body) as Map<String, dynamic>?;
} else if (type == 'GET') {
header['Content-Type'] = 'application/json; charset=utf-8';
if (map.isNotEmpty) params = '?';
map.forEach((id, value) {
params = params + id.toString() + '=' + value.toString() + '&';
});
// remove last '&' from string
if (map.isNotEmpty) params = params.substring(0, params.length - 1);
var finalUrl = url + path + params;
log.d('ByBitRest.GET ' + finalUrl);
response = await http.get(Uri.parse(finalUrl), headers: header);
if (response.statusCode != 200) {
log.e('HTTP response status code: ' + response.statusCode.toString());
}
return jsonDecode(response.body) as Map<String, dynamic>?;
} else {
log.e('Request type ' + type + ' is not supported');
return jsonDecode('') as Map<String, dynamic>?;
}
}