gecko/lib/api.dart

191 lines
4.3 KiB
Dart

import 'dart:math';
import "package:dio/dio.dart" as dio;
import 'package:gql/language.dart' as gqlLang;
import 'package:gql_dio_link/gql_dio_link.dart';
import 'package:gql_exec/gql_exec.dart';
import "package:gql_link/gql_link.dart";
// Configure node
const graphqlEndpoint = "https://g1.librelois.fr/gva";
// // Check node connection
// Future getHttp() async {
// try {
// final client = await dio.Dio().get(graphqlEndpoint);
// print(client);
// return 0;
// } catch (e) {
// print(e);
// return e;
// }
// }
// Build queries
Future buildQ(query) async {
var client;
try {
client = dio.Dio();
print(client);
} catch (e) {
print(e);
}
// final client = dio.Dio();
Link link;
link = DioLink(
graphqlEndpoint,
client: client,
);
try {
final res = await link
.request(Request(
operation: Operation(document: gqlLang.parseString(query)),
))
.first;
return res;
} catch (e) {
print("Erreur: Noeud injoingnable.");
return 2;
}
}
/* Requests functions */
// Get current UD
Future getUD() async {
const query = """{
currentUd {
amount
base
}
}""";
final result = await buildQ(query);
return result.data["currentUd"]["amount"];
}
// Get balance
Future getBalance(String pubkey) async {
var query = """{
balance(script: "$pubkey") {
amount
base
}
}""";
final result = await buildQ(query);
return result.data["balance"]["amount"] / 100;
}
// Get history
Future getHistory(String pubkey) async {
print(pubkey);
var query = """{
txsHistoryBc(pubkeyOrScript: "$pubkey") {
received {
writtenTime
issuers
outputs
comment
}
}
txsHistoryMp(pubkey: "$pubkey") {
receiving {
writtenTime
issuers
outputs
comment
}
}
currentUd {
amount
base
}
}""";
final res = await buildQ(query);
// Parse history
var resBC, resMP;
try {
resBC = res.data["txsHistoryBc"]["received"];
resMP = res.data["txsHistoryMp"]["receiving"];
} catch (e) {
print("DEBUG: " + e.toString());
print(res.data);
return false;
}
var i = 0;
// String outPubkey;
var transBC = [];
final currentBase = res.data['currentUd']['base'];
final currentUD = res.data['currentUd']['amount'] / 100;
// Get tx received
for (var bloc in resBC) {
var output = bloc['outputs'][0];
// outPubkey = output.split("SIG(")[1].replaceAll(')', '');
transBC.add(i);
transBC[i] = [];
transBC[i].add(bloc['writtenTime']);
transBC[i].add(bloc['issuers'][0]);
var amountBrut = int.parse(output.split(':')[0]);
final base = int.parse(output.split(':')[1]);
final applyBase = base - currentBase;
final amount = amountBrut * pow(10, applyBase) / 100;
transBC[i].add(amount);
final amountUD = amount / currentUD;
transBC[i].add(amountUD.toStringAsFixed(2));
transBC[i].add(bloc['comment']);
transBC[i].add(base);
i++;
}
// Get tx receving
var transMP = [];
i = 0;
for (var bloc in resMP) {
if (transMP == null) {
print("DEBUG:: " + resMP.toString());
break;
}
var output = bloc['outputs'][0];
var outPubkey = output.split("SIG(")[1].replaceAll(')', '');
transMP.add(i);
transMP[i] = [];
transMP[i].add(bloc['writtenTime']);
transMP[i].add(bloc['issuers'][0]);
var amountBrut = int.parse(output.split(':')[0]);
final base = int.parse(output.split(':')[1]);
final applyBase = base - currentBase;
final amount = amountBrut * pow(10, applyBase) / 100;
transMP[i].add(amount);
final amountUD = amount / currentUD;
transMP[i].add(amountUD.toStringAsFixed(2));
transMP[i].add(bloc['comment']);
transMP[i].add(base);
transMP[i].add(outPubkey);
i++;
}
// Order transactions by date
transBC.sort((b, a) => Comparable.compare(a[0], b[0]));
transMP.sort((b, a) => Comparable.compare(a[0], b[0]));
// // Keep only base if there is base change
// var lastBase = 0;
// for (i in trans) {
// if (i[5] == lastBase){
// i[6] = null;
// }
// else {
// lastBase = i[6];
// }
// print(trans);
return [transBC, transMP];
}