api.dart 22.13 KiB
import 'dart:convert';
import 'dart:io';
import 'package:durt/durt.dart';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'package:http/http.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:tuple/tuple.dart';
import 'package:universal_html/html.dart' show window;
import '../data/models/contact.dart';
import '../data/models/node.dart';
import '../data/models/node_manager.dart';
import '../data/models/node_type.dart';
import '../shared_prefs.dart';
import '../ui/logger.dart';
import '../ui/ui_helpers.dart';
import 'g1_helper.dart';
// Tx history
// https://g1.duniter.org/tx/history/FadJvhddHL7qbRd3WcRPrWEJJwABQa3oZvmCBhotc7Kg
// https://g1.duniter.org/tx/history/6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH
Future<String> getTxHistory(String publicKey) async {
final Response response =
await requestWithRetry(NodeType.duniter, '/tx/history/$publicKey');
if (response.statusCode == 200) {
return response.body;
} else {
throw Exception('Failed to load tx history');
}
}
Future<Response> getPeers() async {
final Response response = await requestWithRetry(
NodeType.duniter, '/network/peers',
dontRecord: true);
if (response.statusCode == 200) {
return response;
} else {
throw Exception('Failed to load duniter node peers');
}
}
Future<Response> searchCPlusUser(String searchTerm) async {
final String searchTermLower = searchTerm.toLowerCase();
final String searchTermCapitalized =
searchTermLower[0].toUpperCase() + searchTermLower.substring(1);
final String query =
'/user/profile/_search?q=title:$searchTermLower OR issuer:$searchTerm OR title:$searchTermCapitalized OR title:$searchTerm';
final Response response =
await requestCPlusWithRetry(query, retryWith404: false);
return response;
}
Future<Contact> getProfile(String pubKey,
[bool onlyCPlusProfile = false]) async {
try {
final Response cPlusResponse = await requestCPlusWithRetry(
'/user/profile/$pubKey',
retryWith404: false);
final Map<String, dynamic> result =
const JsonDecoder().convert(cPlusResponse.body) as Map<String, dynamic>;
if (result['found'] == false) {
return Contact(pubKey: pubKey);
}
final Map<String, dynamic> profile =