dev
dart 64 lines 1.71 KB
Raw
1 import "dart:convert";
2
3 import "package:cw_core/utils/proxy_wrapper.dart";
4
5 Future<String?> getBolt11FromLightingAddress(String lightningAddress, {int amount = 0}) async {
6 try {
7 final uri = getURlOfLightningAddress(lightningAddress);
8
9 var response = await ProxyWrapper().get(clearnetUri: uri);
10 final responseBody =
11 _LNURLPResponseDTO.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
12
13 response =
14 await ProxyWrapper().get(clearnetUri: Uri.parse("${responseBody.callback}?amount=$amount"));
15
16 final callbackResponseBody =
17 _LNURLPCallbackResponseDTO.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
18
19 return callbackResponseBody.pr;
20 } catch (e) {
21 return null;
22 }
23 }
24
25 Uri getURlOfLightningAddress(String lightningAddress) {
26 final parts = lightningAddress.split("@");
27
28 final name = parts.first;
29 final domain = parts.last;
30 return Uri.parse("https://$domain/.well-known/lnurlp/$name");
31 }
32
33 class _LNURLPResponseDTO {
34 const _LNURLPResponseDTO(
35 this.callback,
36 this.maxSendable,
37 this.minSendable,
38 this.tag,
39 this.metadata,
40 );
41
42 factory _LNURLPResponseDTO.fromJson(Map<String, dynamic> map) => _LNURLPResponseDTO(
43 map["callback"] as String,
44 map["maxSendable"] as int,
45 map["minSendable"] as int,
46 map["tag"] as String,
47 map["metadata"] as String,
48 );
49
50 final String callback;
51 final int maxSendable;
52 final int minSendable;
53 final String tag;
54 final String metadata;
55 }
56
57 class _LNURLPCallbackResponseDTO {
58 const _LNURLPCallbackResponseDTO(this.pr);
59
60 factory _LNURLPCallbackResponseDTO.fromJson(Map<String, dynamic> map) =>
61 _LNURLPCallbackResponseDTO(map["pr"] as String);
62
63 final String pr;
64 }